diff --git a/build/prod/deployment.tpl b/build/prod/deployment.tpl
index e8d61ee4..3123309c 100644
--- a/build/prod/deployment.tpl
+++ b/build/prod/deployment.tpl
@@ -83,8 +83,8 @@ spec:
timeoutSeconds: 10
resources:
limits:
- cpu: 500m
- memory: 1024Mi
+ cpu: 1000m
+ memory: 3072Mi
requests:
cpu: 300m
memory: 700Mi
diff --git a/build/prod/web-default-conf-cm.yaml b/build/prod/web-default-conf-cm.yaml
index 90802fc0..3e359bef 100644
--- a/build/prod/web-default-conf-cm.yaml
+++ b/build/prod/web-default-conf-cm.yaml
@@ -108,8 +108,7 @@ data:
fastcgi_param SUBDOMAIN $subdomain; # $_SERVER["SUBDOMAIN"]
include fastcgi_params;
fastcgi_cache MYAPP;
- fastcgi_cache_valid 200 302 60m;
- fastcgi_cache_valid 301 1h;
+ fastcgi_cache_valid 200 60m;
fastcgi_cache_valid any 1m;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
@@ -141,8 +140,7 @@ data:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_cache MYAPP;
- fastcgi_cache_valid 200 302 60m;
- fastcgi_cache_valid 301 1h;
+ fastcgi_cache_valid 200 5m;
fastcgi_cache_valid any 1m;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
@@ -151,8 +149,7 @@ data:
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
proxy_set_header X-Forwarded-Proto $scheme;
fastcgi_cache MYAPP;
- fastcgi_cache_valid 200 302 60m;
- fastcgi_cache_valid 301 1h;
+ fastcgi_cache_valid 200 60m;
fastcgi_cache_valid any 1m;
proxy_cache_background_update on;
proxy_cache_lock on;
@@ -228,8 +225,7 @@ data:
fastcgi_param SUBDOMAIN www; # $_SERVER["SUBDOMAIN"]
include fastcgi_params;
fastcgi_cache MYAPP;
- fastcgi_cache_valid 200 302 60m;
- fastcgi_cache_valid 301 1h;
+ fastcgi_cache_valid 200 5m;
fastcgi_cache_valid any 1m;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
@@ -261,8 +257,7 @@ data:
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SUBDOMAIN www; # $_SERVER["SUBDOMAIN"]
fastcgi_cache MYAPP;
- fastcgi_cache_valid 200 302 60m;
- fastcgi_cache_valid 301 1h;
+ fastcgi_cache_valid 200 60m;
fastcgi_cache_valid any 1m;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
@@ -272,8 +267,7 @@ data:
expires 7d;
proxy_set_header X-Forwarded-Proto $scheme;
fastcgi_cache MYAPP;
- fastcgi_cache_valid 200 302 60m;
- fastcgi_cache_valid 301 1h;
+ fastcgi_cache_valid 200 60m;
fastcgi_cache_valid any 1m;
proxy_cache_background_update on;
proxy_cache_lock on;
diff --git a/build/prod/web-hpa.yml b/build/prod/web-hpa.yml
index 8a701a9e..88c0a7b3 100644
--- a/build/prod/web-hpa.yml
+++ b/build/prod/web-hpa.yml
@@ -8,6 +8,6 @@ spec:
apiVersion: apps/v1
kind: Deployment
name: medicalalert-web
- minReplicas: 3
+ minReplicas: 1
maxReplicas: 6
targetCPUUtilizationPercentage: 70
diff --git a/build/stage/deployment.tpl b/build/stage/deployment.tpl
index e8d61ee4..50d2e584 100644
--- a/build/stage/deployment.tpl
+++ b/build/stage/deployment.tpl
@@ -9,7 +9,7 @@ metadata:
namespace: medicalalert-web
spec:
progressDeadlineSeconds: 600
- replicas: 3
+ replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
@@ -83,8 +83,8 @@ spec:
timeoutSeconds: 10
resources:
limits:
- cpu: 500m
- memory: 1024Mi
+ cpu: 1000m
+ memory: 3072Mi
requests:
cpu: 300m
memory: 700Mi
diff --git a/build/stage/web-default-conf-cm.yaml b/build/stage/web-default-conf-cm.yaml
index a1722f99..7568640f 100644
--- a/build/stage/web-default-conf-cm.yaml
+++ b/build/stage/web-default-conf-cm.yaml
@@ -46,7 +46,7 @@ data:
listen 80;
listen [::]:80;
- server_name ~^(?.+)\.stage-medicalalert\.com$;
+ server_name ~^(?.+)\.medicalalert\.com$;
if ($http_x_forwarded_proto != 'https') {
return 301 https://$host$request_uri;
@@ -108,8 +108,7 @@ data:
fastcgi_param SUBDOMAIN $subdomain; # $_SERVER["SUBDOMAIN"]
include fastcgi_params;
fastcgi_cache MYAPP;
- fastcgi_cache_valid 200 302 60m;
- fastcgi_cache_valid 301 1h;
+ fastcgi_cache_valid 200 60m;
fastcgi_cache_valid any 1m;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
@@ -141,8 +140,7 @@ data:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_cache MYAPP;
- fastcgi_cache_valid 200 302 60m;
- fastcgi_cache_valid 301 1h;
+ fastcgi_cache_valid 200 5m;
fastcgi_cache_valid any 1m;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
@@ -151,8 +149,7 @@ data:
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
proxy_set_header X-Forwarded-Proto $scheme;
fastcgi_cache MYAPP;
- fastcgi_cache_valid 200 302 60m;
- fastcgi_cache_valid 301 1h;
+ fastcgi_cache_valid 200 60m;
fastcgi_cache_valid any 1m;
proxy_cache_background_update on;
proxy_cache_lock on;
@@ -228,8 +225,7 @@ data:
fastcgi_param SUBDOMAIN www; # $_SERVER["SUBDOMAIN"]
include fastcgi_params;
fastcgi_cache MYAPP;
- fastcgi_cache_valid 200 302 60m;
- fastcgi_cache_valid 301 1h;
+ fastcgi_cache_valid 200 5m;
fastcgi_cache_valid any 1m;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
@@ -261,8 +257,7 @@ data:
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SUBDOMAIN www; # $_SERVER["SUBDOMAIN"]
fastcgi_cache MYAPP;
- fastcgi_cache_valid 200 302 60m;
- fastcgi_cache_valid 301 1h;
+ fastcgi_cache_valid 200 60m;
fastcgi_cache_valid any 1m;
fastcgi_cache_bypass $no_cache;
fastcgi_no_cache $no_cache;
@@ -272,8 +267,7 @@ data:
expires 7d;
proxy_set_header X-Forwarded-Proto $scheme;
fastcgi_cache MYAPP;
- fastcgi_cache_valid 200 302 60m;
- fastcgi_cache_valid 301 1h;
+ fastcgi_cache_valid 200 60m;
fastcgi_cache_valid any 1m;
proxy_cache_background_update on;
proxy_cache_lock on;
@@ -285,7 +279,6 @@ data:
log_not_found off;
deny all;
}
-
location ~ ^/(status|ping)$ {
access_log off;
allow 127.0.0.1;
diff --git a/build/stage/web-hpa.yml b/build/stage/web-hpa.yml
index 8a701a9e..88c0a7b3 100644
--- a/build/stage/web-hpa.yml
+++ b/build/stage/web-hpa.yml
@@ -8,6 +8,6 @@ spec:
apiVersion: apps/v1
kind: Deployment
name: medicalalert-web
- minReplicas: 3
+ minReplicas: 1
maxReplicas: 6
targetCPUUtilizationPercentage: 70
diff --git a/release b/release
index 7438e81a..b937b5fc 100644
--- a/release
+++ b/release
@@ -1 +1 @@
-RELEASE=release-1.06
\ No newline at end of file
+RELEASE=release-1.09
\ No newline at end of file
diff --git a/wp-config.php b/wp-config.php
deleted file mode 100644
index 751931c0..00000000
--- a/wp-config.php
+++ /dev/null
@@ -1,70 +0,0 @@
-
-
+
Version %1$s addressed %2$s bug.',
'Version %1$s addressed %2$s bugs.',
- 4
+ 10
),
'6.4.1',
'4'
@@ -71,31 +71,6 @@ require_once ABSPATH . 'wp-admin/admin-header.php';
);
?>
-
- Version %1$s addressed a security issue and fixed %2$s bug.',
- 'Version %1$s addressed a security issue and fixed %2$s bugs.',
- 7
- ),
- '6.4.2',
- '7'
- );
- ?>
- the release notes.' ),
- sprintf(
- /* translators: %s: WordPress version. */
- esc_url( __( 'https://wordpress.org/support/wordpress-version/version-%s/' ) ),
- sanitize_title( '6.4.2' )
- )
- );
- ?>
-
@@ -297,7 +272,7 @@ require_once ABSPATH . 'wp-admin/admin-header.php';
WordPress %2$s Field Guide. Learn about the changes in this release with detailed developer notes to help you build with WordPress.' ),
__( 'https://make.wordpress.org/core/2023/10/23/wordpress-6-4-field-guide/' ),
'6.4'
diff --git a/wp/wp-admin/css/about-rtl.css b/wp/wp-admin/css/about-rtl.css
index 1f2f828c..7de2eab5 100644
--- a/wp/wp-admin/css/about-rtl.css
+++ b/wp/wp-admin/css/about-rtl.css
@@ -535,8 +535,8 @@
position: relative;
display: flex;
flex-direction: column;
- align-items: flex-start;
- justify-content: flex-end;
+ align-items: start;
+ justify-content: end;
box-sizing: border-box;
padding: var(--gap) 0;
height: clamp(12.5rem, -1.25rem + 36.67vw, 26.25rem);
@@ -1127,7 +1127,7 @@
}
.about-wrap .is-vertically-aligned-top {
- align-self: flex-start;
+ align-self: start;
}
.about-wrap .is-vertically-aligned-center {
diff --git a/wp/wp-admin/css/about-rtl.min.css b/wp/wp-admin/css/about-rtl.min.css
index e779df6b..1dbac49e 100644
--- a/wp/wp-admin/css/about-rtl.min.css
+++ b/wp/wp-admin/css/about-rtl.min.css
@@ -1,2 +1,2 @@
/*! This file is auto-generated */
-.about__container{--background:#EAE9E7;--subtle-background:#EAE9E7;--text:#1e1e1e;--text-light:#fff;--accent-1:#C94C26;--accent-2:#CFCABE;--accent-3:#f0f0f1;--accent-4:#B1C5A4;--nav-background:#fff;--nav-border:transparent;--nav-color:var(--text);--nav-current:var(--accent-1);--gap:2rem}.about-php,.contribute-php,.credits-php,.freedoms-php,.privacy-php{background:#fff}.about-php #wpcontent,.contribute-php #wpcontent,.credits-php #wpcontent,.freedoms-php #wpcontent,.privacy-php #wpcontent{background:#fff;padding:0 24px}@media screen and (max-width:782px){.about-php.auto-fold #wpcontent,.contribute-php.auto-fold #wpcontent,.credits-php.auto-fold #wpcontent,.freedoms-php.auto-fold #wpcontent,.privacy-php.auto-fold #wpcontent{padding-right:24px}}.about__container{max-width:1000px;margin:24px auto;clear:both}.about__container .alignleft{float:right}.about__container .alignright{float:left}.about__container .aligncenter{text-align:center}.about__container .is-vertically-aligned-top{align-self:start}.about__container .is-vertically-aligned-center{align-self:center}.about__container .is-vertically-aligned-bottom{align-self:end}.about__section{background:0 0;clear:both}.about__container .has-accent-background-color{background-color:var(--accent-2)}.about__container .has-accent-4-background-color{background-color:var(--accent-4)}.about__container .has-transparent-background-color{background-color:transparent}.about__container .has-accent-color{color:var(--accent-2)}.about__container .has-border{border:3px solid currentColor}.about__container .has-subtle-background-color{background-color:var(--subtle-background)}.about__container .has-background-image{background-size:contain;background-repeat:no-repeat;background-position:center}.about__section{margin:0}.about__section .column:not(.is-edge-to-edge){padding:var(--gap)}.about__section+.about__section .is-section-header{padding-bottom:var(--gap)}.about__section .column.has-border:not(.is-edge-to-edge),.about__section .column[class*=background-color]:not(.is-edge-to-edge),.about__section:where([class*=background-color]) .column:not(.is-edge-to-edge){padding-top:var(--gap);padding-bottom:var(--gap)}.about__section .column p:first-of-type{margin-top:0}.about__section .column p:last-of-type{margin-bottom:0}.about__section .has-text-columns{columns:2;column-gap:calc(var(--gap) * 2)}.about__section .is-section-header{margin-bottom:0;padding:var(--gap) var(--gap) 0}.about__section .is-section-header p:last-child{margin-bottom:0}.about__section .is-section-header:first-child:last-child{padding:0}.about__section.is-feature{padding:var(--gap)}.about__section.is-feature p{margin:0}.about__section.is-feature p+p{margin-top:calc(var(--gap)/ 2)}.about__section.has-1-column{margin-right:auto;margin-left:auto;max-width:36em}.about__section.has-2-columns,.about__section.has-3-columns,.about__section.has-4-columns,.about__section.has-overlap-style{display:grid}.about__section.has-gutters{gap:var(--gap);margin-bottom:var(--gap)}.about__section.has-2-columns{grid-template-columns:1fr 1fr}.about__section.has-2-columns.is-wider-right{grid-template-columns:2fr 3fr}.about__section.has-2-columns.is-wider-left{grid-template-columns:3fr 2fr}.about__section .is-section-header{grid-column-start:1;grid-column-end:-1}.about__section.has-3-columns{grid-template-columns:repeat(3,1fr)}.about__section.has-4-columns{grid-template-columns:repeat(4,1fr)}.about__section.has-overlap-style{grid-template-columns:repeat(7,1fr)}.about__section.has-overlap-style .column{grid-row-start:1}.about__section.has-overlap-style .column:nth-of-type(odd){grid-column-start:2;grid-column-end:span 3}.about__section.has-overlap-style .column:nth-of-type(2n){grid-column-start:4;grid-column-end:span 3}.about__section.has-overlap-style .column.is-top-layer{z-index:1}@media screen and (max-width:782px){.about__section.has-2-columns.is-wider-left,.about__section.has-2-columns.is-wider-right,.about__section.has-3-columns{display:block;margin-bottom:calc(var(--gap)/ 2)}.about__section .column:not(.is-edge-to-edge){padding-top:var(--gap);padding-bottom:var(--gap)}.about__section.has-2-columns.has-gutters.is-wider-left,.about__section.has-2-columns.has-gutters.is-wider-right,.about__section.has-3-columns.has-gutters{margin-bottom:calc(var(--gap) * 2)}.about__section.has-2-columns.has-gutters .column,.about__section.has-3-columns.has-gutters .column{margin-bottom:var(--gap)}.about__section.has-2-columns.has-gutters .column:last-child,.about__section.has-3-columns.has-gutters .column:last-child{margin-bottom:0}.about__section.has-3-columns .column:nth-of-type(n){padding-top:calc(var(--gap)/ 2);padding-bottom:calc(var(--gap)/ 2)}.about__section.has-4-columns{grid-template-columns:repeat(2,1fr)}.about__section.has-overlap-style{grid-template-columns:1fr}.about__section.has-overlap-style .column.column{grid-column-start:1;grid-column-end:2;grid-row-start:1;grid-row-end:2}}@media screen and (max-width:600px){.about__section.has-2-columns{display:block;margin-bottom:var(--gap)}.about__section.has-2-columns:not(.has-gutters) .column:nth-of-type(n){padding-top:calc(var(--gap)/ 2);padding-bottom:calc(var(--gap)/ 2)}.about__section.has-2-columns.has-gutters{margin-bottom:calc(var(--gap) * 2)}.about__section.has-2-columns.has-gutters .column{margin-bottom:var(--gap)}.about__section.has-2-columns.has-gutters .column:last-child{margin-bottom:0}}@media screen and (max-width:480px){.about__section.is-feature .column{padding:0}.about__section.has-4-columns{display:block;padding-bottom:calc(var(--gap)/ 2)}.about__section.has-4-columns.has-gutters .column{margin-bottom:calc(var(--gap)/ 2)}.about__section.has-4-columns.has-gutters .column:last-child{margin-bottom:0}.about__section.has-4-columns .column:nth-of-type(n){padding-top:calc(var(--gap)/ 2);padding-bottom:calc(var(--gap)/ 2)}}.about__container{line-height:1.4;color:var(--text)}.about__container h1{padding:0}.about__container h1,.about__container h2,.about__container h3.is-larger-heading{margin-top:0;margin-bottom:.5em;font-size:2rem;font-weight:700;line-height:1.16}.about__container h1.is-smaller-heading,.about__container h2.is-smaller-heading,.about__container h3{margin-top:0;font-size:1.625rem;font-weight:700;line-height:1.4}.about__container h3.is-smaller-heading,.about__container h4{margin-top:0;font-size:1.125rem;font-weight:600;line-height:1.6}.about__container p{font-size:inherit;line-height:inherit}.about__container p.is-subheading{margin-top:0;font-size:1.5rem;font-weight:300;line-height:160%}.about__section a{color:var(--text);text-decoration:underline}.about__section a:active,.about__section a:focus,.about__section a:hover{color:var(--text);text-decoration:none}.wp-credits-list a{text-decoration:none}.wp-credits-list a:active,.wp-credits-list a:focus,.wp-credits-list a:hover{text-decoration:underline}.about__container ul{list-style:disc;margin-right:calc(var(--gap)/ 2)}.about__container li{margin-bottom:.5rem}.about__container img{margin:0;max-width:100%;vertical-align:middle}.about__container .about__image{margin:0}.about__container .about__image img{max-width:100%;width:100%;height:auto}.about__container .about__image figcaption{margin-top:.5em;text-align:center}.about__container .about__image .wp-video{margin-right:auto;margin-left:auto}.about__container .about__image svg{vertical-align:middle}.about__container .about__image+h3{margin-top:1.5em}.about__container hr{margin:calc(var(--gap)/ 2) var(--gap);height:0;border:none;border-top:4px solid var(--accent-3)}.about__container hr.is-small{margin-top:0;margin-bottom:0}.about__container hr.is-large{margin:var(--gap) auto}.about__container .notice,.about__container div.error,.about__container div.updated{display:none!important}.about__section{font-size:1.125rem;line-height:1.55}.about__section.is-feature{font-size:1.6em}.about__section.has-3-columns,.about__section.has-4-columns{font-size:1rem}@media screen and (max-width:480px){.about__section.is-feature{font-size:1.4em}.about__container h1,.about__container h2,.about__container h3.is-larger-heading{font-size:2em}}.about__header{position:relative;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;box-sizing:border-box;padding:var(--gap) 0;height:clamp(12.5rem,-1.25rem + 36.67vw,26.25rem);color:var(--text-light);background-image:url('../images/about-header-about.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4');background-size:auto 70%,cover;border-radius:5px;background-repeat:no-repeat;background-position:left 7% center,top right;background-color:var(--background)}.credits-php .about__header{background-image:url('../images/about-header-credits.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4')}.freedoms-php .about__header{background-image:url('../images/about-header-freedoms.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4')}.privacy-php .about__header{background-image:url('../images/about-header-privacy.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4')}.contribute-php .about__header{background-image:url('../images/about-header-contribute.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4')}.about__header-image{margin:0 var(--gap) 3em}.about__header-title{box-sizing:border-box;margin:0 calc(var(--gap) + 2rem);padding:0;max-width:55%}.about__header-title h1{margin:0 0 1rem;padding:0;font-size:clamp(2rem, 20vw - 9rem, 4rem);line-height:1;font-weight:600}.about-php .about__header-title h1,.contribute-php .about__header-title h1,.credits-php .about__header-title h1,.freedoms-php .about__header-title h1,.privacy-php .about__header-title h1{font-size:clamp(2rem, 10vw - 3rem, 4rem)}.about__header-text{box-sizing:border-box;max-width:26em;margin:0 auto;padding:0;font-size:1.6rem;line-height:1.15;text-align:center}.about__header-navigation{position:relative;z-index:1;display:flex;justify-content:center;padding-top:0;margin-bottom:var(--gap);background:var(--nav-background);color:var(--nav-color);border-bottom:3px solid var(--nav-border)}.about__header-navigation .nav-tab{margin-right:0;padding:calc(var(--gap) * .75) var(--gap);float:none;font-size:1.4em;line-height:1;border-width:0 0 3px;border-style:solid;border-color:transparent;background:0 0;color:inherit}.about__header-navigation .nav-tab:active,.about__header-navigation .nav-tab:hover{background-color:var(--nav-current);color:var(--text-light)}.about__header-navigation .nav-tab-active{margin-bottom:-3px;color:var(--nav-current);border-width:0 0 6px;border-color:var(--nav-current)}.about__header-navigation .nav-tab-active:active,.about__header-navigation .nav-tab-active:hover{background-color:var(--nav-current);color:var(--text-light);border-color:var(--nav-current)}@media screen and (max-width:960px){.about-php .about__header-title h1,.contribute-php .about__header-title h1,.credits-php .about__header-title h1,.freedoms-php .about__header-title h1,.privacy-php .about__header-title h1{font-size:clamp(3rem, 6.67vw - .5rem, 4.5rem)}.about__header-navigation .nav-tab{padding:calc(var(--gap) * .75) calc(var(--gap) * .5)}}@media screen and (max-width:782px){.about__container .about__header-text{font-size:1.4em}.about__header-container{display:block}.about__header-image,.about__header-title{margin-right:calc(var(--gap)/ 2);margin-left:calc(var(--gap)/ 2)}.about__header-text{margin-top:0}.about__header-navigation .nav-tab{margin-top:0;margin-left:0;padding-right:calc(var(--gap)/ 2);padding-left:calc(var(--gap)/ 2)}}@media screen and (max-width:600px){.about__header{min-height:auto}.about__header,.contribute-php .about__header,.credits-php .about__header,.freedoms-php .about__header,.privacy-php .about__header{background-image:none}.about__header-title p{font-size:2.4em}.about__header-text{margin-right:calc(var(--gap)/ 2);margin-left:calc(var(--gap)/ 2)}.about__header-navigation{display:block}.about__header-navigation .nav-tab{display:block;margin-bottom:0;padding:calc(var(--gap)/ 2);border-right-width:6px;border-bottom:none}.about__header-navigation .nav-tab-active{border-bottom:none;border-right-width:6px}}.about__section .wp-people-group-title{margin-bottom:calc(var(--gap) * 2 - 10px);text-align:center}.about__section .wp-people-group{margin:0;display:flex;flex-wrap:wrap}.about__section .wp-person{display:inline-block;vertical-align:top;box-sizing:border-box;margin-bottom:calc(var(--gap) - 10px);width:25%;text-align:center}.about__section .compact .wp-person{height:auto;width:20%}.about__section .wp-person-avatar{display:block;margin:0 auto calc(var(--gap)/ 2);width:140px;height:140px;border-radius:100%;overflow:hidden}.about__section .wp-person .gravatar{width:140px;height:140px;filter:grayscale(100%)}.about__section .compact .wp-person .gravatar,.about__section .compact .wp-person-avatar{width:80px;height:80px}.about__section .wp-person .web{display:block;font-size:1.4em;font-weight:600;padding:10px 10px 0;text-decoration:none}.about__section .wp-person .web:hover{text-decoration:underline}.about__section .compact .wp-person .web{font-size:1.2em}.about__section .wp-person .title{display:block;margin-top:.5em}@media screen and (max-width:782px){.about__section .wp-person{width:33%}.about__section .compact .wp-person{width:25%}.about__section .wp-person .gravatar,.about__section .wp-person-avatar{width:120px;height:120px}}@media screen and (max-width:600px){.about__section .wp-person{width:50%}.about__section .compact .wp-person{width:33%}.about__section .wp-person .web{font-size:1.2em}}@media screen and (max-width:480px){.about__section .wp-person{min-width:100%}.about__section .wp-person .web{font-size:1em}.about__section .compact .wp-person .web{font-size:1em}}.about__section .column .freedom-image{margin-bottom:var(--gap);max-height:180px}.about__section .column .privacy-image{display:block;margin-right:auto;margin-left:auto;max-width:25rem}.about-wrap{position:relative;margin:25px 20px 0 40px;max-width:1050px;font-size:15px}.about-wrap.full-width-layout{max-width:1200px}.about-wrap-content{max-width:1050px}.about-wrap .notice,.about-wrap div.error,.about-wrap div.updated{display:none!important}.about-wrap hr{border:0;height:0;margin:3em 0 0;border-top:1px solid rgba(0,0,0,.1)}.about-wrap img{margin:0;width:100%;height:auto;vertical-align:middle}.about-wrap .inline-svg img{max-width:100%;width:auto;height:auto}.about-wrap video{margin:1.5em auto}.wp-badge{background:#0073aa url(../images/w-logo-white.png?ver=20160308) no-repeat;background-position:center 25px;background-size:80px 80px;color:#fff;font-size:14px;text-align:center;font-weight:600;margin:5px 0 0;padding-top:120px;height:40px;display:inline-block;width:140px;text-rendering:optimizeLegibility;box-shadow:0 1px 3px rgba(0,0,0,.2)}.svg .wp-badge{background-image:url(../images/wordpress-logo-white.svg?ver=20160308)}.about-wrap .wp-badge{position:absolute;top:0;left:0}.about-wrap .nav-tab{padding-left:15px;padding-right:15px;font-size:18px;line-height:1.33333333}.about-wrap h1{margin:.2em 0 0 200px;padding:0;color:#32373c;line-height:1.2;font-size:2.8em;font-weight:400}.about-wrap h2{margin:40px 0 .6em;font-size:2.7em;line-height:1.3;font-weight:300;text-align:center}.about-wrap h3{margin:1.25em 0 .6em;font-size:1.4em;line-height:1.5}.about-wrap h4{font-size:16px;color:#23282d}.about-wrap p{line-height:1.5;font-size:16px}.about-wrap code,.about-wrap ol li p{font-size:14px;font-weight:400}.about-wrap figcaption{font-size:13px;text-align:center;color:#fff;text-overflow:ellipsis}.about-wrap .about-description,.about-wrap .about-text{margin-top:1.4em;font-weight:400;line-height:1.6;font-size:19px}.about-wrap .about-text{margin:1em 0 1em 200px;color:#555d66}.about-wrap .has-1-columns,.about-wrap .has-2-columns,.about-wrap .has-3-columns,.about-wrap .has-4-columns{display:grid;max-width:800px;margin-top:40px;margin-right:auto;margin-left:auto}.about-wrap .column{margin-left:20px;margin-right:20px}.about-wrap .is-wide{max-width:760px}.about-wrap .is-fullwidth{max-width:100%}.about-wrap .has-1-columns{display:block;max-width:680px;margin:0 auto 40px}.about-wrap .has-2-columns{grid-template-columns:1fr 1fr}.about-wrap .has-2-columns .column:nth-of-type(odd){grid-column-start:1}.about-wrap .has-2-columns .column:nth-of-type(2n){grid-column-start:2}.about-wrap .has-2-columns.is-wider-right{grid-template-columns:1fr 2fr}.about-wrap .has-2-columns.is-wider-left{grid-template-columns:2fr 1fr}.about-wrap .has-3-columns{grid-template-columns:repeat(3,1fr)}.about-wrap .has-3-columns .column:nth-of-type(3n+1){grid-column-start:1}.about-wrap .has-3-columns .column:nth-of-type(3n+2){grid-column-start:2}.about-wrap .has-3-columns .column:nth-of-type(3n){grid-column-start:3}.about-wrap .has-4-columns{grid-template-columns:repeat(4,1fr)}.about-wrap .has-4-columns .column:nth-of-type(4n+1){grid-column-start:1}.about-wrap .has-4-columns .column:nth-of-type(4n+2){grid-column-start:2}.about-wrap .has-4-columns .column:nth-of-type(4n+3){grid-column-start:3}.about-wrap .has-4-columns .column:nth-of-type(4n){grid-column-start:4}.about-wrap .column :first-child{margin-top:0}.about-wrap .aligncenter{text-align:center}.about-wrap .alignleft{float:right;margin-left:40px}.about-wrap .alignright{float:left;margin-right:40px}.about-wrap .is-vertically-aligned-top{align-self:flex-start}.about-wrap .is-vertically-aligned-center{align-self:center}.about-wrap .is-vertically-aligned-bottom{align-self:end}.about-wrap .point-releases{margin-top:5px;border-bottom:1px solid #ddd}.about-wrap .changelog{margin-bottom:40px}.about-wrap .changelog.point-releases h3{padding-top:35px}.about-wrap .changelog.point-releases h3:first-child{padding-top:7px}.about-wrap .changelog.feature-section .col{margin-top:40px}.about-wrap .lead-description{font-size:1.5em;text-align:center}.about-wrap .feature-section p{margin-top:.6em}.about-wrap .headline-feature{margin:0 auto 40px;max-width:680px}.about-wrap .headline-feature h2{margin:50px 0 0}.about-wrap .headline-feature img{max-width:600px;width:100%}.about-wrap .return-to-dashboard{margin:30px -5px 0 0;font-size:14px;font-weight:600}.about-wrap .return-to-dashboard a{text-decoration:none;padding:0 5px}.about-wrap h2.wp-people-group{margin:2.6em 0 1.33em;padding:0;font-size:16px;line-height:inherit;font-weight:600;text-align:right}.about-wrap .wp-people-group{padding:0 5px;margin:0 -5px 0 -15px}.about-wrap .compact{margin-bottom:0}.about-wrap .wp-person{display:inline-block;vertical-align:top;margin-left:10px;padding-bottom:15px;height:70px;width:280px}.about-wrap .compact .wp-person{height:auto;width:180px;padding-bottom:0;margin-bottom:0}.about-wrap .wp-person .gravatar{float:right;margin:0 0 10px 10px;padding:1px;width:60px;height:60px}.about-wrap .compact .wp-person .gravatar{width:30px;height:30px}.about-wrap .wp-person .web{margin:6px 0 2px;font-size:16px;font-weight:400;line-height:2;text-decoration:none}.about-wrap .wp-person .title{display:block}.about-wrap #wp-people-group-validators+p.wp-credits-list{margin-top:0}.about-wrap p.wp-credits-list a{white-space:nowrap}.freedoms-php .about-wrap ol{margin:40px 60px}.freedoms-php .about-wrap ol li{list-style-type:decimal;font-weight:600}.freedoms-php .about-wrap ol p{font-weight:400;margin:.6em 0}.freedoms-php .column .freedoms-image{background-image:url('../images/freedoms.png');background-size:100%;padding-top:100%}.freedoms-php .column:nth-of-type(2) .freedoms-image{background-position:100% 34%}.freedoms-php .column:nth-of-type(3) .freedoms-image{background-position:100% 66%}.freedoms-php .column:nth-of-type(4) .freedoms-image{background-position:100% 100%}@media screen and (max-width:782px){.about-wrap .has-3-columns,.about-wrap .has-4-columns{grid-template-columns:1fr 1fr}.about-wrap .has-3-columns .column:nth-of-type(3n+1),.about-wrap .has-4-columns .column:nth-of-type(4n+1){grid-column-start:1;grid-row-start:1}.about-wrap .has-3-columns .column:nth-of-type(3n+2),.about-wrap .has-4-columns .column:nth-of-type(4n+2){grid-column-start:2;grid-row-start:1}.about-wrap .has-3-columns .column:nth-of-type(3n),.about-wrap .has-4-columns .column:nth-of-type(4n+3){grid-column-start:1;grid-row-start:2}.about-wrap .has-4-columns .column:nth-of-type(4n){grid-column-start:2;grid-row-start:2}}@media screen and (max-width:600px){.about-wrap .has-2-columns,.about-wrap .has-3-columns,.about-wrap .has-4-columns{display:block}.about-wrap :not(.is-wider-right):not(.is-wider-left) .column{margin-left:0;margin-right:0}.about-wrap .has-2-columns.is-wider-left,.about-wrap .has-2-columns.is-wider-right{display:grid}}@media only screen and (max-width:500px){.about-wrap{margin-left:20px;margin-right:10px}.about-wrap .about-text,.about-wrap h1{margin-left:0}.about-wrap .about-text{margin-bottom:.25em}.about-wrap .wp-badge{position:relative;margin-bottom:1.5em;width:100%}}@media only screen and (max-width:480px){.about-wrap .has-2-columns.is-wider-left,.about-wrap .has-2-columns.is-wider-right{display:block}.about-wrap .column{margin-left:0;margin-right:0}.about-wrap .has-2-columns.is-wider-left img,.about-wrap .has-2-columns.is-wider-right img{max-width:160px}}
\ No newline at end of file
+.about__container{--background:#EAE9E7;--subtle-background:#EAE9E7;--text:#1e1e1e;--text-light:#fff;--accent-1:#C94C26;--accent-2:#CFCABE;--accent-3:#f0f0f1;--accent-4:#B1C5A4;--nav-background:#fff;--nav-border:transparent;--nav-color:var(--text);--nav-current:var(--accent-1);--gap:2rem}.about-php,.contribute-php,.credits-php,.freedoms-php,.privacy-php{background:#fff}.about-php #wpcontent,.contribute-php #wpcontent,.credits-php #wpcontent,.freedoms-php #wpcontent,.privacy-php #wpcontent{background:#fff;padding:0 24px}@media screen and (max-width:782px){.about-php.auto-fold #wpcontent,.contribute-php.auto-fold #wpcontent,.credits-php.auto-fold #wpcontent,.freedoms-php.auto-fold #wpcontent,.privacy-php.auto-fold #wpcontent{padding-right:24px}}.about__container{max-width:1000px;margin:24px auto;clear:both}.about__container .alignleft{float:right}.about__container .alignright{float:left}.about__container .aligncenter{text-align:center}.about__container .is-vertically-aligned-top{align-self:start}.about__container .is-vertically-aligned-center{align-self:center}.about__container .is-vertically-aligned-bottom{align-self:end}.about__section{background:0 0;clear:both}.about__container .has-accent-background-color{background-color:var(--accent-2)}.about__container .has-accent-4-background-color{background-color:var(--accent-4)}.about__container .has-transparent-background-color{background-color:transparent}.about__container .has-accent-color{color:var(--accent-2)}.about__container .has-border{border:3px solid currentColor}.about__container .has-subtle-background-color{background-color:var(--subtle-background)}.about__container .has-background-image{background-size:contain;background-repeat:no-repeat;background-position:center}.about__section{margin:0}.about__section .column:not(.is-edge-to-edge){padding:var(--gap)}.about__section+.about__section .is-section-header{padding-bottom:var(--gap)}.about__section .column.has-border:not(.is-edge-to-edge),.about__section .column[class*=background-color]:not(.is-edge-to-edge),.about__section:where([class*=background-color]) .column:not(.is-edge-to-edge){padding-top:var(--gap);padding-bottom:var(--gap)}.about__section .column p:first-of-type{margin-top:0}.about__section .column p:last-of-type{margin-bottom:0}.about__section .has-text-columns{columns:2;column-gap:calc(var(--gap) * 2)}.about__section .is-section-header{margin-bottom:0;padding:var(--gap) var(--gap) 0}.about__section .is-section-header p:last-child{margin-bottom:0}.about__section .is-section-header:first-child:last-child{padding:0}.about__section.is-feature{padding:var(--gap)}.about__section.is-feature p{margin:0}.about__section.is-feature p+p{margin-top:calc(var(--gap)/ 2)}.about__section.has-1-column{margin-right:auto;margin-left:auto;max-width:36em}.about__section.has-2-columns,.about__section.has-3-columns,.about__section.has-4-columns,.about__section.has-overlap-style{display:grid}.about__section.has-gutters{gap:var(--gap);margin-bottom:var(--gap)}.about__section.has-2-columns{grid-template-columns:1fr 1fr}.about__section.has-2-columns.is-wider-right{grid-template-columns:2fr 3fr}.about__section.has-2-columns.is-wider-left{grid-template-columns:3fr 2fr}.about__section .is-section-header{grid-column-start:1;grid-column-end:-1}.about__section.has-3-columns{grid-template-columns:repeat(3,1fr)}.about__section.has-4-columns{grid-template-columns:repeat(4,1fr)}.about__section.has-overlap-style{grid-template-columns:repeat(7,1fr)}.about__section.has-overlap-style .column{grid-row-start:1}.about__section.has-overlap-style .column:nth-of-type(odd){grid-column-start:2;grid-column-end:span 3}.about__section.has-overlap-style .column:nth-of-type(2n){grid-column-start:4;grid-column-end:span 3}.about__section.has-overlap-style .column.is-top-layer{z-index:1}@media screen and (max-width:782px){.about__section.has-2-columns.is-wider-left,.about__section.has-2-columns.is-wider-right,.about__section.has-3-columns{display:block;margin-bottom:calc(var(--gap)/ 2)}.about__section .column:not(.is-edge-to-edge){padding-top:var(--gap);padding-bottom:var(--gap)}.about__section.has-2-columns.has-gutters.is-wider-left,.about__section.has-2-columns.has-gutters.is-wider-right,.about__section.has-3-columns.has-gutters{margin-bottom:calc(var(--gap) * 2)}.about__section.has-2-columns.has-gutters .column,.about__section.has-3-columns.has-gutters .column{margin-bottom:var(--gap)}.about__section.has-2-columns.has-gutters .column:last-child,.about__section.has-3-columns.has-gutters .column:last-child{margin-bottom:0}.about__section.has-3-columns .column:nth-of-type(n){padding-top:calc(var(--gap)/ 2);padding-bottom:calc(var(--gap)/ 2)}.about__section.has-4-columns{grid-template-columns:repeat(2,1fr)}.about__section.has-overlap-style{grid-template-columns:1fr}.about__section.has-overlap-style .column.column{grid-column-start:1;grid-column-end:2;grid-row-start:1;grid-row-end:2}}@media screen and (max-width:600px){.about__section.has-2-columns{display:block;margin-bottom:var(--gap)}.about__section.has-2-columns:not(.has-gutters) .column:nth-of-type(n){padding-top:calc(var(--gap)/ 2);padding-bottom:calc(var(--gap)/ 2)}.about__section.has-2-columns.has-gutters{margin-bottom:calc(var(--gap) * 2)}.about__section.has-2-columns.has-gutters .column{margin-bottom:var(--gap)}.about__section.has-2-columns.has-gutters .column:last-child{margin-bottom:0}}@media screen and (max-width:480px){.about__section.is-feature .column{padding:0}.about__section.has-4-columns{display:block;padding-bottom:calc(var(--gap)/ 2)}.about__section.has-4-columns.has-gutters .column{margin-bottom:calc(var(--gap)/ 2)}.about__section.has-4-columns.has-gutters .column:last-child{margin-bottom:0}.about__section.has-4-columns .column:nth-of-type(n){padding-top:calc(var(--gap)/ 2);padding-bottom:calc(var(--gap)/ 2)}}.about__container{line-height:1.4;color:var(--text)}.about__container h1{padding:0}.about__container h1,.about__container h2,.about__container h3.is-larger-heading{margin-top:0;margin-bottom:.5em;font-size:2rem;font-weight:700;line-height:1.16}.about__container h1.is-smaller-heading,.about__container h2.is-smaller-heading,.about__container h3{margin-top:0;font-size:1.625rem;font-weight:700;line-height:1.4}.about__container h3.is-smaller-heading,.about__container h4{margin-top:0;font-size:1.125rem;font-weight:600;line-height:1.6}.about__container p{font-size:inherit;line-height:inherit}.about__container p.is-subheading{margin-top:0;font-size:1.5rem;font-weight:300;line-height:160%}.about__section a{color:var(--text);text-decoration:underline}.about__section a:active,.about__section a:focus,.about__section a:hover{color:var(--text);text-decoration:none}.wp-credits-list a{text-decoration:none}.wp-credits-list a:active,.wp-credits-list a:focus,.wp-credits-list a:hover{text-decoration:underline}.about__container ul{list-style:disc;margin-right:calc(var(--gap)/ 2)}.about__container li{margin-bottom:.5rem}.about__container img{margin:0;max-width:100%;vertical-align:middle}.about__container .about__image{margin:0}.about__container .about__image img{max-width:100%;width:100%;height:auto}.about__container .about__image figcaption{margin-top:.5em;text-align:center}.about__container .about__image .wp-video{margin-right:auto;margin-left:auto}.about__container .about__image svg{vertical-align:middle}.about__container .about__image+h3{margin-top:1.5em}.about__container hr{margin:calc(var(--gap)/ 2) var(--gap);height:0;border:none;border-top:4px solid var(--accent-3)}.about__container hr.is-small{margin-top:0;margin-bottom:0}.about__container hr.is-large{margin:var(--gap) auto}.about__container .notice,.about__container div.error,.about__container div.updated{display:none!important}.about__section{font-size:1.125rem;line-height:1.55}.about__section.is-feature{font-size:1.6em}.about__section.has-3-columns,.about__section.has-4-columns{font-size:1rem}@media screen and (max-width:480px){.about__section.is-feature{font-size:1.4em}.about__container h1,.about__container h2,.about__container h3.is-larger-heading{font-size:2em}}.about__header{position:relative;display:flex;flex-direction:column;align-items:start;justify-content:end;box-sizing:border-box;padding:var(--gap) 0;height:clamp(12.5rem,-1.25rem + 36.67vw,26.25rem);color:var(--text-light);background-image:url('../images/about-header-about.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4');background-size:auto 70%,cover;border-radius:5px;background-repeat:no-repeat;background-position:left 7% center,top right;background-color:var(--background)}.credits-php .about__header{background-image:url('../images/about-header-credits.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4')}.freedoms-php .about__header{background-image:url('../images/about-header-freedoms.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4')}.privacy-php .about__header{background-image:url('../images/about-header-privacy.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4')}.contribute-php .about__header{background-image:url('../images/about-header-contribute.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4')}.about__header-image{margin:0 var(--gap) 3em}.about__header-title{box-sizing:border-box;margin:0 calc(var(--gap) + 2rem);padding:0;max-width:55%}.about__header-title h1{margin:0 0 1rem;padding:0;font-size:clamp(2rem, 20vw - 9rem, 4rem);line-height:1;font-weight:600}.about-php .about__header-title h1,.contribute-php .about__header-title h1,.credits-php .about__header-title h1,.freedoms-php .about__header-title h1,.privacy-php .about__header-title h1{font-size:clamp(2rem, 10vw - 3rem, 4rem)}.about__header-text{box-sizing:border-box;max-width:26em;margin:0 auto;padding:0;font-size:1.6rem;line-height:1.15;text-align:center}.about__header-navigation{position:relative;z-index:1;display:flex;justify-content:center;padding-top:0;margin-bottom:var(--gap);background:var(--nav-background);color:var(--nav-color);border-bottom:3px solid var(--nav-border)}.about__header-navigation .nav-tab{margin-right:0;padding:calc(var(--gap) * .75) var(--gap);float:none;font-size:1.4em;line-height:1;border-width:0 0 3px;border-style:solid;border-color:transparent;background:0 0;color:inherit}.about__header-navigation .nav-tab:active,.about__header-navigation .nav-tab:hover{background-color:var(--nav-current);color:var(--text-light)}.about__header-navigation .nav-tab-active{margin-bottom:-3px;color:var(--nav-current);border-width:0 0 6px;border-color:var(--nav-current)}.about__header-navigation .nav-tab-active:active,.about__header-navigation .nav-tab-active:hover{background-color:var(--nav-current);color:var(--text-light);border-color:var(--nav-current)}@media screen and (max-width:960px){.about-php .about__header-title h1,.contribute-php .about__header-title h1,.credits-php .about__header-title h1,.freedoms-php .about__header-title h1,.privacy-php .about__header-title h1{font-size:clamp(3rem, 6.67vw - .5rem, 4.5rem)}.about__header-navigation .nav-tab{padding:calc(var(--gap) * .75) calc(var(--gap) * .5)}}@media screen and (max-width:782px){.about__container .about__header-text{font-size:1.4em}.about__header-container{display:block}.about__header-image,.about__header-title{margin-right:calc(var(--gap)/ 2);margin-left:calc(var(--gap)/ 2)}.about__header-text{margin-top:0}.about__header-navigation .nav-tab{margin-top:0;margin-left:0;padding-right:calc(var(--gap)/ 2);padding-left:calc(var(--gap)/ 2)}}@media screen and (max-width:600px){.about__header{min-height:auto}.about__header,.contribute-php .about__header,.credits-php .about__header,.freedoms-php .about__header,.privacy-php .about__header{background-image:none}.about__header-title p{font-size:2.4em}.about__header-text{margin-right:calc(var(--gap)/ 2);margin-left:calc(var(--gap)/ 2)}.about__header-navigation{display:block}.about__header-navigation .nav-tab{display:block;margin-bottom:0;padding:calc(var(--gap)/ 2);border-right-width:6px;border-bottom:none}.about__header-navigation .nav-tab-active{border-bottom:none;border-right-width:6px}}.about__section .wp-people-group-title{margin-bottom:calc(var(--gap) * 2 - 10px);text-align:center}.about__section .wp-people-group{margin:0;display:flex;flex-wrap:wrap}.about__section .wp-person{display:inline-block;vertical-align:top;box-sizing:border-box;margin-bottom:calc(var(--gap) - 10px);width:25%;text-align:center}.about__section .compact .wp-person{height:auto;width:20%}.about__section .wp-person-avatar{display:block;margin:0 auto calc(var(--gap)/ 2);width:140px;height:140px;border-radius:100%;overflow:hidden}.about__section .wp-person .gravatar{width:140px;height:140px;filter:grayscale(100%)}.about__section .compact .wp-person .gravatar,.about__section .compact .wp-person-avatar{width:80px;height:80px}.about__section .wp-person .web{display:block;font-size:1.4em;font-weight:600;padding:10px 10px 0;text-decoration:none}.about__section .wp-person .web:hover{text-decoration:underline}.about__section .compact .wp-person .web{font-size:1.2em}.about__section .wp-person .title{display:block;margin-top:.5em}@media screen and (max-width:782px){.about__section .wp-person{width:33%}.about__section .compact .wp-person{width:25%}.about__section .wp-person .gravatar,.about__section .wp-person-avatar{width:120px;height:120px}}@media screen and (max-width:600px){.about__section .wp-person{width:50%}.about__section .compact .wp-person{width:33%}.about__section .wp-person .web{font-size:1.2em}}@media screen and (max-width:480px){.about__section .wp-person{min-width:100%}.about__section .wp-person .web{font-size:1em}.about__section .compact .wp-person .web{font-size:1em}}.about__section .column .freedom-image{margin-bottom:var(--gap);max-height:180px}.about__section .column .privacy-image{display:block;margin-right:auto;margin-left:auto;max-width:25rem}.about-wrap{position:relative;margin:25px 20px 0 40px;max-width:1050px;font-size:15px}.about-wrap.full-width-layout{max-width:1200px}.about-wrap-content{max-width:1050px}.about-wrap .notice,.about-wrap div.error,.about-wrap div.updated{display:none!important}.about-wrap hr{border:0;height:0;margin:3em 0 0;border-top:1px solid rgba(0,0,0,.1)}.about-wrap img{margin:0;width:100%;height:auto;vertical-align:middle}.about-wrap .inline-svg img{max-width:100%;width:auto;height:auto}.about-wrap video{margin:1.5em auto}.wp-badge{background:#0073aa url(../images/w-logo-white.png?ver=20160308) no-repeat;background-position:center 25px;background-size:80px 80px;color:#fff;font-size:14px;text-align:center;font-weight:600;margin:5px 0 0;padding-top:120px;height:40px;display:inline-block;width:140px;text-rendering:optimizeLegibility;box-shadow:0 1px 3px rgba(0,0,0,.2)}.svg .wp-badge{background-image:url(../images/wordpress-logo-white.svg?ver=20160308)}.about-wrap .wp-badge{position:absolute;top:0;left:0}.about-wrap .nav-tab{padding-left:15px;padding-right:15px;font-size:18px;line-height:1.33333333}.about-wrap h1{margin:.2em 0 0 200px;padding:0;color:#32373c;line-height:1.2;font-size:2.8em;font-weight:400}.about-wrap h2{margin:40px 0 .6em;font-size:2.7em;line-height:1.3;font-weight:300;text-align:center}.about-wrap h3{margin:1.25em 0 .6em;font-size:1.4em;line-height:1.5}.about-wrap h4{font-size:16px;color:#23282d}.about-wrap p{line-height:1.5;font-size:16px}.about-wrap code,.about-wrap ol li p{font-size:14px;font-weight:400}.about-wrap figcaption{font-size:13px;text-align:center;color:#fff;text-overflow:ellipsis}.about-wrap .about-description,.about-wrap .about-text{margin-top:1.4em;font-weight:400;line-height:1.6;font-size:19px}.about-wrap .about-text{margin:1em 0 1em 200px;color:#555d66}.about-wrap .has-1-columns,.about-wrap .has-2-columns,.about-wrap .has-3-columns,.about-wrap .has-4-columns{display:grid;max-width:800px;margin-top:40px;margin-right:auto;margin-left:auto}.about-wrap .column{margin-left:20px;margin-right:20px}.about-wrap .is-wide{max-width:760px}.about-wrap .is-fullwidth{max-width:100%}.about-wrap .has-1-columns{display:block;max-width:680px;margin:0 auto 40px}.about-wrap .has-2-columns{grid-template-columns:1fr 1fr}.about-wrap .has-2-columns .column:nth-of-type(odd){grid-column-start:1}.about-wrap .has-2-columns .column:nth-of-type(2n){grid-column-start:2}.about-wrap .has-2-columns.is-wider-right{grid-template-columns:1fr 2fr}.about-wrap .has-2-columns.is-wider-left{grid-template-columns:2fr 1fr}.about-wrap .has-3-columns{grid-template-columns:repeat(3,1fr)}.about-wrap .has-3-columns .column:nth-of-type(3n+1){grid-column-start:1}.about-wrap .has-3-columns .column:nth-of-type(3n+2){grid-column-start:2}.about-wrap .has-3-columns .column:nth-of-type(3n){grid-column-start:3}.about-wrap .has-4-columns{grid-template-columns:repeat(4,1fr)}.about-wrap .has-4-columns .column:nth-of-type(4n+1){grid-column-start:1}.about-wrap .has-4-columns .column:nth-of-type(4n+2){grid-column-start:2}.about-wrap .has-4-columns .column:nth-of-type(4n+3){grid-column-start:3}.about-wrap .has-4-columns .column:nth-of-type(4n){grid-column-start:4}.about-wrap .column :first-child{margin-top:0}.about-wrap .aligncenter{text-align:center}.about-wrap .alignleft{float:right;margin-left:40px}.about-wrap .alignright{float:left;margin-right:40px}.about-wrap .is-vertically-aligned-top{align-self:start}.about-wrap .is-vertically-aligned-center{align-self:center}.about-wrap .is-vertically-aligned-bottom{align-self:end}.about-wrap .point-releases{margin-top:5px;border-bottom:1px solid #ddd}.about-wrap .changelog{margin-bottom:40px}.about-wrap .changelog.point-releases h3{padding-top:35px}.about-wrap .changelog.point-releases h3:first-child{padding-top:7px}.about-wrap .changelog.feature-section .col{margin-top:40px}.about-wrap .lead-description{font-size:1.5em;text-align:center}.about-wrap .feature-section p{margin-top:.6em}.about-wrap .headline-feature{margin:0 auto 40px;max-width:680px}.about-wrap .headline-feature h2{margin:50px 0 0}.about-wrap .headline-feature img{max-width:600px;width:100%}.about-wrap .return-to-dashboard{margin:30px -5px 0 0;font-size:14px;font-weight:600}.about-wrap .return-to-dashboard a{text-decoration:none;padding:0 5px}.about-wrap h2.wp-people-group{margin:2.6em 0 1.33em;padding:0;font-size:16px;line-height:inherit;font-weight:600;text-align:right}.about-wrap .wp-people-group{padding:0 5px;margin:0 -5px 0 -15px}.about-wrap .compact{margin-bottom:0}.about-wrap .wp-person{display:inline-block;vertical-align:top;margin-left:10px;padding-bottom:15px;height:70px;width:280px}.about-wrap .compact .wp-person{height:auto;width:180px;padding-bottom:0;margin-bottom:0}.about-wrap .wp-person .gravatar{float:right;margin:0 0 10px 10px;padding:1px;width:60px;height:60px}.about-wrap .compact .wp-person .gravatar{width:30px;height:30px}.about-wrap .wp-person .web{margin:6px 0 2px;font-size:16px;font-weight:400;line-height:2;text-decoration:none}.about-wrap .wp-person .title{display:block}.about-wrap #wp-people-group-validators+p.wp-credits-list{margin-top:0}.about-wrap p.wp-credits-list a{white-space:nowrap}.freedoms-php .about-wrap ol{margin:40px 60px}.freedoms-php .about-wrap ol li{list-style-type:decimal;font-weight:600}.freedoms-php .about-wrap ol p{font-weight:400;margin:.6em 0}.freedoms-php .column .freedoms-image{background-image:url('../images/freedoms.png');background-size:100%;padding-top:100%}.freedoms-php .column:nth-of-type(2) .freedoms-image{background-position:100% 34%}.freedoms-php .column:nth-of-type(3) .freedoms-image{background-position:100% 66%}.freedoms-php .column:nth-of-type(4) .freedoms-image{background-position:100% 100%}@media screen and (max-width:782px){.about-wrap .has-3-columns,.about-wrap .has-4-columns{grid-template-columns:1fr 1fr}.about-wrap .has-3-columns .column:nth-of-type(3n+1),.about-wrap .has-4-columns .column:nth-of-type(4n+1){grid-column-start:1;grid-row-start:1}.about-wrap .has-3-columns .column:nth-of-type(3n+2),.about-wrap .has-4-columns .column:nth-of-type(4n+2){grid-column-start:2;grid-row-start:1}.about-wrap .has-3-columns .column:nth-of-type(3n),.about-wrap .has-4-columns .column:nth-of-type(4n+3){grid-column-start:1;grid-row-start:2}.about-wrap .has-4-columns .column:nth-of-type(4n){grid-column-start:2;grid-row-start:2}}@media screen and (max-width:600px){.about-wrap .has-2-columns,.about-wrap .has-3-columns,.about-wrap .has-4-columns{display:block}.about-wrap :not(.is-wider-right):not(.is-wider-left) .column{margin-left:0;margin-right:0}.about-wrap .has-2-columns.is-wider-left,.about-wrap .has-2-columns.is-wider-right{display:grid}}@media only screen and (max-width:500px){.about-wrap{margin-left:20px;margin-right:10px}.about-wrap .about-text,.about-wrap h1{margin-left:0}.about-wrap .about-text{margin-bottom:.25em}.about-wrap .wp-badge{position:relative;margin-bottom:1.5em;width:100%}}@media only screen and (max-width:480px){.about-wrap .has-2-columns.is-wider-left,.about-wrap .has-2-columns.is-wider-right{display:block}.about-wrap .column{margin-left:0;margin-right:0}.about-wrap .has-2-columns.is-wider-left img,.about-wrap .has-2-columns.is-wider-right img{max-width:160px}}
\ No newline at end of file
diff --git a/wp/wp-admin/css/about.css b/wp/wp-admin/css/about.css
index 1cd4175d..ff140ac5 100644
--- a/wp/wp-admin/css/about.css
+++ b/wp/wp-admin/css/about.css
@@ -534,8 +534,8 @@
position: relative;
display: flex;
flex-direction: column;
- align-items: flex-start;
- justify-content: flex-end;
+ align-items: start;
+ justify-content: end;
box-sizing: border-box;
padding: var(--gap) 0;
height: clamp(12.5rem, -1.25rem + 36.67vw, 26.25rem);
@@ -1126,7 +1126,7 @@
}
.about-wrap .is-vertically-aligned-top {
- align-self: flex-start;
+ align-self: start;
}
.about-wrap .is-vertically-aligned-center {
diff --git a/wp/wp-admin/css/about.min.css b/wp/wp-admin/css/about.min.css
index 1b307c0d..27882757 100644
--- a/wp/wp-admin/css/about.min.css
+++ b/wp/wp-admin/css/about.min.css
@@ -1,2 +1,2 @@
/*! This file is auto-generated */
-.about__container{--background:#EAE9E7;--subtle-background:#EAE9E7;--text:#1e1e1e;--text-light:#fff;--accent-1:#C94C26;--accent-2:#CFCABE;--accent-3:#f0f0f1;--accent-4:#B1C5A4;--nav-background:#fff;--nav-border:transparent;--nav-color:var(--text);--nav-current:var(--accent-1);--gap:2rem}.about-php,.contribute-php,.credits-php,.freedoms-php,.privacy-php{background:#fff}.about-php #wpcontent,.contribute-php #wpcontent,.credits-php #wpcontent,.freedoms-php #wpcontent,.privacy-php #wpcontent{background:#fff;padding:0 24px}@media screen and (max-width:782px){.about-php.auto-fold #wpcontent,.contribute-php.auto-fold #wpcontent,.credits-php.auto-fold #wpcontent,.freedoms-php.auto-fold #wpcontent,.privacy-php.auto-fold #wpcontent{padding-left:24px}}.about__container{max-width:1000px;margin:24px auto;clear:both}.about__container .alignleft{float:left}.about__container .alignright{float:right}.about__container .aligncenter{text-align:center}.about__container .is-vertically-aligned-top{align-self:start}.about__container .is-vertically-aligned-center{align-self:center}.about__container .is-vertically-aligned-bottom{align-self:end}.about__section{background:0 0;clear:both}.about__container .has-accent-background-color{background-color:var(--accent-2)}.about__container .has-accent-4-background-color{background-color:var(--accent-4)}.about__container .has-transparent-background-color{background-color:transparent}.about__container .has-accent-color{color:var(--accent-2)}.about__container .has-border{border:3px solid currentColor}.about__container .has-subtle-background-color{background-color:var(--subtle-background)}.about__container .has-background-image{background-size:contain;background-repeat:no-repeat;background-position:center}.about__section{margin:0}.about__section .column:not(.is-edge-to-edge){padding:var(--gap)}.about__section+.about__section .is-section-header{padding-bottom:var(--gap)}.about__section .column.has-border:not(.is-edge-to-edge),.about__section .column[class*=background-color]:not(.is-edge-to-edge),.about__section:where([class*=background-color]) .column:not(.is-edge-to-edge){padding-top:var(--gap);padding-bottom:var(--gap)}.about__section .column p:first-of-type{margin-top:0}.about__section .column p:last-of-type{margin-bottom:0}.about__section .has-text-columns{columns:2;column-gap:calc(var(--gap) * 2)}.about__section .is-section-header{margin-bottom:0;padding:var(--gap) var(--gap) 0}.about__section .is-section-header p:last-child{margin-bottom:0}.about__section .is-section-header:first-child:last-child{padding:0}.about__section.is-feature{padding:var(--gap)}.about__section.is-feature p{margin:0}.about__section.is-feature p+p{margin-top:calc(var(--gap)/ 2)}.about__section.has-1-column{margin-left:auto;margin-right:auto;max-width:36em}.about__section.has-2-columns,.about__section.has-3-columns,.about__section.has-4-columns,.about__section.has-overlap-style{display:grid}.about__section.has-gutters{gap:var(--gap);margin-bottom:var(--gap)}.about__section.has-2-columns{grid-template-columns:1fr 1fr}.about__section.has-2-columns.is-wider-right{grid-template-columns:2fr 3fr}.about__section.has-2-columns.is-wider-left{grid-template-columns:3fr 2fr}.about__section .is-section-header{grid-column-start:1;grid-column-end:-1}.about__section.has-3-columns{grid-template-columns:repeat(3,1fr)}.about__section.has-4-columns{grid-template-columns:repeat(4,1fr)}.about__section.has-overlap-style{grid-template-columns:repeat(7,1fr)}.about__section.has-overlap-style .column{grid-row-start:1}.about__section.has-overlap-style .column:nth-of-type(odd){grid-column-start:2;grid-column-end:span 3}.about__section.has-overlap-style .column:nth-of-type(2n){grid-column-start:4;grid-column-end:span 3}.about__section.has-overlap-style .column.is-top-layer{z-index:1}@media screen and (max-width:782px){.about__section.has-2-columns.is-wider-left,.about__section.has-2-columns.is-wider-right,.about__section.has-3-columns{display:block;margin-bottom:calc(var(--gap)/ 2)}.about__section .column:not(.is-edge-to-edge){padding-top:var(--gap);padding-bottom:var(--gap)}.about__section.has-2-columns.has-gutters.is-wider-left,.about__section.has-2-columns.has-gutters.is-wider-right,.about__section.has-3-columns.has-gutters{margin-bottom:calc(var(--gap) * 2)}.about__section.has-2-columns.has-gutters .column,.about__section.has-3-columns.has-gutters .column{margin-bottom:var(--gap)}.about__section.has-2-columns.has-gutters .column:last-child,.about__section.has-3-columns.has-gutters .column:last-child{margin-bottom:0}.about__section.has-3-columns .column:nth-of-type(n){padding-top:calc(var(--gap)/ 2);padding-bottom:calc(var(--gap)/ 2)}.about__section.has-4-columns{grid-template-columns:repeat(2,1fr)}.about__section.has-overlap-style{grid-template-columns:1fr}.about__section.has-overlap-style .column.column{grid-column-start:1;grid-column-end:2;grid-row-start:1;grid-row-end:2}}@media screen and (max-width:600px){.about__section.has-2-columns{display:block;margin-bottom:var(--gap)}.about__section.has-2-columns:not(.has-gutters) .column:nth-of-type(n){padding-top:calc(var(--gap)/ 2);padding-bottom:calc(var(--gap)/ 2)}.about__section.has-2-columns.has-gutters{margin-bottom:calc(var(--gap) * 2)}.about__section.has-2-columns.has-gutters .column{margin-bottom:var(--gap)}.about__section.has-2-columns.has-gutters .column:last-child{margin-bottom:0}}@media screen and (max-width:480px){.about__section.is-feature .column{padding:0}.about__section.has-4-columns{display:block;padding-bottom:calc(var(--gap)/ 2)}.about__section.has-4-columns.has-gutters .column{margin-bottom:calc(var(--gap)/ 2)}.about__section.has-4-columns.has-gutters .column:last-child{margin-bottom:0}.about__section.has-4-columns .column:nth-of-type(n){padding-top:calc(var(--gap)/ 2);padding-bottom:calc(var(--gap)/ 2)}}.about__container{line-height:1.4;color:var(--text)}.about__container h1{padding:0}.about__container h1,.about__container h2,.about__container h3.is-larger-heading{margin-top:0;margin-bottom:.5em;font-size:2rem;font-weight:700;line-height:1.16}.about__container h1.is-smaller-heading,.about__container h2.is-smaller-heading,.about__container h3{margin-top:0;font-size:1.625rem;font-weight:700;line-height:1.4}.about__container h3.is-smaller-heading,.about__container h4{margin-top:0;font-size:1.125rem;font-weight:600;line-height:1.6}.about__container p{font-size:inherit;line-height:inherit}.about__container p.is-subheading{margin-top:0;font-size:1.5rem;font-weight:300;line-height:160%}.about__section a{color:var(--text);text-decoration:underline}.about__section a:active,.about__section a:focus,.about__section a:hover{color:var(--text);text-decoration:none}.wp-credits-list a{text-decoration:none}.wp-credits-list a:active,.wp-credits-list a:focus,.wp-credits-list a:hover{text-decoration:underline}.about__container ul{list-style:disc;margin-left:calc(var(--gap)/ 2)}.about__container li{margin-bottom:.5rem}.about__container img{margin:0;max-width:100%;vertical-align:middle}.about__container .about__image{margin:0}.about__container .about__image img{max-width:100%;width:100%;height:auto}.about__container .about__image figcaption{margin-top:.5em;text-align:center}.about__container .about__image .wp-video{margin-left:auto;margin-right:auto}.about__container .about__image svg{vertical-align:middle}.about__container .about__image+h3{margin-top:1.5em}.about__container hr{margin:calc(var(--gap)/ 2) var(--gap);height:0;border:none;border-top:4px solid var(--accent-3)}.about__container hr.is-small{margin-top:0;margin-bottom:0}.about__container hr.is-large{margin:var(--gap) auto}.about__container .notice,.about__container div.error,.about__container div.updated{display:none!important}.about__section{font-size:1.125rem;line-height:1.55}.about__section.is-feature{font-size:1.6em}.about__section.has-3-columns,.about__section.has-4-columns{font-size:1rem}@media screen and (max-width:480px){.about__section.is-feature{font-size:1.4em}.about__container h1,.about__container h2,.about__container h3.is-larger-heading{font-size:2em}}.about__header{position:relative;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;box-sizing:border-box;padding:var(--gap) 0;height:clamp(12.5rem,-1.25rem + 36.67vw,26.25rem);color:var(--text-light);background-image:url('../images/about-header-about.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4');background-size:auto 70%,cover;border-radius:5px;background-repeat:no-repeat;background-position:right 7% center,top left;background-color:var(--background)}.credits-php .about__header{background-image:url('../images/about-header-credits.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4')}.freedoms-php .about__header{background-image:url('../images/about-header-freedoms.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4')}.privacy-php .about__header{background-image:url('../images/about-header-privacy.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4')}.contribute-php .about__header{background-image:url('../images/about-header-contribute.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4')}.about__header-image{margin:0 var(--gap) 3em}.about__header-title{box-sizing:border-box;margin:0 calc(var(--gap) + 2rem);padding:0;max-width:55%}.about__header-title h1{margin:0 0 1rem;padding:0;font-size:clamp(2rem, 20vw - 9rem, 4rem);line-height:1;font-weight:600}.about-php .about__header-title h1,.contribute-php .about__header-title h1,.credits-php .about__header-title h1,.freedoms-php .about__header-title h1,.privacy-php .about__header-title h1{font-size:clamp(2rem, 10vw - 3rem, 4rem)}.about__header-text{box-sizing:border-box;max-width:26em;margin:0 auto;padding:0;font-size:1.6rem;line-height:1.15;text-align:center}.about__header-navigation{position:relative;z-index:1;display:flex;justify-content:center;padding-top:0;margin-bottom:var(--gap);background:var(--nav-background);color:var(--nav-color);border-bottom:3px solid var(--nav-border)}.about__header-navigation .nav-tab{margin-left:0;padding:calc(var(--gap) * .75) var(--gap);float:none;font-size:1.4em;line-height:1;border-width:0 0 3px;border-style:solid;border-color:transparent;background:0 0;color:inherit}.about__header-navigation .nav-tab:active,.about__header-navigation .nav-tab:hover{background-color:var(--nav-current);color:var(--text-light)}.about__header-navigation .nav-tab-active{margin-bottom:-3px;color:var(--nav-current);border-width:0 0 6px;border-color:var(--nav-current)}.about__header-navigation .nav-tab-active:active,.about__header-navigation .nav-tab-active:hover{background-color:var(--nav-current);color:var(--text-light);border-color:var(--nav-current)}@media screen and (max-width:960px){.about-php .about__header-title h1,.contribute-php .about__header-title h1,.credits-php .about__header-title h1,.freedoms-php .about__header-title h1,.privacy-php .about__header-title h1{font-size:clamp(3rem, 6.67vw - .5rem, 4.5rem)}.about__header-navigation .nav-tab{padding:calc(var(--gap) * .75) calc(var(--gap) * .5)}}@media screen and (max-width:782px){.about__container .about__header-text{font-size:1.4em}.about__header-container{display:block}.about__header-image,.about__header-title{margin-left:calc(var(--gap)/ 2);margin-right:calc(var(--gap)/ 2)}.about__header-text{margin-top:0}.about__header-navigation .nav-tab{margin-top:0;margin-right:0;padding-left:calc(var(--gap)/ 2);padding-right:calc(var(--gap)/ 2)}}@media screen and (max-width:600px){.about__header{min-height:auto}.about__header,.contribute-php .about__header,.credits-php .about__header,.freedoms-php .about__header,.privacy-php .about__header{background-image:none}.about__header-title p{font-size:2.4em}.about__header-text{margin-left:calc(var(--gap)/ 2);margin-right:calc(var(--gap)/ 2)}.about__header-navigation{display:block}.about__header-navigation .nav-tab{display:block;margin-bottom:0;padding:calc(var(--gap)/ 2);border-left-width:6px;border-bottom:none}.about__header-navigation .nav-tab-active{border-bottom:none;border-left-width:6px}}.about__section .wp-people-group-title{margin-bottom:calc(var(--gap) * 2 - 10px);text-align:center}.about__section .wp-people-group{margin:0;display:flex;flex-wrap:wrap}.about__section .wp-person{display:inline-block;vertical-align:top;box-sizing:border-box;margin-bottom:calc(var(--gap) - 10px);width:25%;text-align:center}.about__section .compact .wp-person{height:auto;width:20%}.about__section .wp-person-avatar{display:block;margin:0 auto calc(var(--gap)/ 2);width:140px;height:140px;border-radius:100%;overflow:hidden}.about__section .wp-person .gravatar{width:140px;height:140px;filter:grayscale(100%)}.about__section .compact .wp-person .gravatar,.about__section .compact .wp-person-avatar{width:80px;height:80px}.about__section .wp-person .web{display:block;font-size:1.4em;font-weight:600;padding:10px 10px 0;text-decoration:none}.about__section .wp-person .web:hover{text-decoration:underline}.about__section .compact .wp-person .web{font-size:1.2em}.about__section .wp-person .title{display:block;margin-top:.5em}@media screen and (max-width:782px){.about__section .wp-person{width:33%}.about__section .compact .wp-person{width:25%}.about__section .wp-person .gravatar,.about__section .wp-person-avatar{width:120px;height:120px}}@media screen and (max-width:600px){.about__section .wp-person{width:50%}.about__section .compact .wp-person{width:33%}.about__section .wp-person .web{font-size:1.2em}}@media screen and (max-width:480px){.about__section .wp-person{min-width:100%}.about__section .wp-person .web{font-size:1em}.about__section .compact .wp-person .web{font-size:1em}}.about__section .column .freedom-image{margin-bottom:var(--gap);max-height:180px}.about__section .column .privacy-image{display:block;margin-left:auto;margin-right:auto;max-width:25rem}.about-wrap{position:relative;margin:25px 40px 0 20px;max-width:1050px;font-size:15px}.about-wrap.full-width-layout{max-width:1200px}.about-wrap-content{max-width:1050px}.about-wrap .notice,.about-wrap div.error,.about-wrap div.updated{display:none!important}.about-wrap hr{border:0;height:0;margin:3em 0 0;border-top:1px solid rgba(0,0,0,.1)}.about-wrap img{margin:0;width:100%;height:auto;vertical-align:middle}.about-wrap .inline-svg img{max-width:100%;width:auto;height:auto}.about-wrap video{margin:1.5em auto}.wp-badge{background:#0073aa url(../images/w-logo-white.png?ver=20160308) no-repeat;background-position:center 25px;background-size:80px 80px;color:#fff;font-size:14px;text-align:center;font-weight:600;margin:5px 0 0;padding-top:120px;height:40px;display:inline-block;width:140px;text-rendering:optimizeLegibility;box-shadow:0 1px 3px rgba(0,0,0,.2)}.svg .wp-badge{background-image:url(../images/wordpress-logo-white.svg?ver=20160308)}.about-wrap .wp-badge{position:absolute;top:0;right:0}.about-wrap .nav-tab{padding-right:15px;padding-left:15px;font-size:18px;line-height:1.33333333}.about-wrap h1{margin:.2em 200px 0 0;padding:0;color:#32373c;line-height:1.2;font-size:2.8em;font-weight:400}.about-wrap h2{margin:40px 0 .6em;font-size:2.7em;line-height:1.3;font-weight:300;text-align:center}.about-wrap h3{margin:1.25em 0 .6em;font-size:1.4em;line-height:1.5}.about-wrap h4{font-size:16px;color:#23282d}.about-wrap p{line-height:1.5;font-size:16px}.about-wrap code,.about-wrap ol li p{font-size:14px;font-weight:400}.about-wrap figcaption{font-size:13px;text-align:center;color:#fff;text-overflow:ellipsis}.about-wrap .about-description,.about-wrap .about-text{margin-top:1.4em;font-weight:400;line-height:1.6;font-size:19px}.about-wrap .about-text{margin:1em 200px 1em 0;color:#555d66}.about-wrap .has-1-columns,.about-wrap .has-2-columns,.about-wrap .has-3-columns,.about-wrap .has-4-columns{display:grid;max-width:800px;margin-top:40px;margin-left:auto;margin-right:auto}.about-wrap .column{margin-right:20px;margin-left:20px}.about-wrap .is-wide{max-width:760px}.about-wrap .is-fullwidth{max-width:100%}.about-wrap .has-1-columns{display:block;max-width:680px;margin:0 auto 40px}.about-wrap .has-2-columns{grid-template-columns:1fr 1fr}.about-wrap .has-2-columns .column:nth-of-type(odd){grid-column-start:1}.about-wrap .has-2-columns .column:nth-of-type(2n){grid-column-start:2}.about-wrap .has-2-columns.is-wider-right{grid-template-columns:1fr 2fr}.about-wrap .has-2-columns.is-wider-left{grid-template-columns:2fr 1fr}.about-wrap .has-3-columns{grid-template-columns:repeat(3,1fr)}.about-wrap .has-3-columns .column:nth-of-type(3n+1){grid-column-start:1}.about-wrap .has-3-columns .column:nth-of-type(3n+2){grid-column-start:2}.about-wrap .has-3-columns .column:nth-of-type(3n){grid-column-start:3}.about-wrap .has-4-columns{grid-template-columns:repeat(4,1fr)}.about-wrap .has-4-columns .column:nth-of-type(4n+1){grid-column-start:1}.about-wrap .has-4-columns .column:nth-of-type(4n+2){grid-column-start:2}.about-wrap .has-4-columns .column:nth-of-type(4n+3){grid-column-start:3}.about-wrap .has-4-columns .column:nth-of-type(4n){grid-column-start:4}.about-wrap .column :first-child{margin-top:0}.about-wrap .aligncenter{text-align:center}.about-wrap .alignleft{float:left;margin-right:40px}.about-wrap .alignright{float:right;margin-left:40px}.about-wrap .is-vertically-aligned-top{align-self:flex-start}.about-wrap .is-vertically-aligned-center{align-self:center}.about-wrap .is-vertically-aligned-bottom{align-self:end}.about-wrap .point-releases{margin-top:5px;border-bottom:1px solid #ddd}.about-wrap .changelog{margin-bottom:40px}.about-wrap .changelog.point-releases h3{padding-top:35px}.about-wrap .changelog.point-releases h3:first-child{padding-top:7px}.about-wrap .changelog.feature-section .col{margin-top:40px}.about-wrap .lead-description{font-size:1.5em;text-align:center}.about-wrap .feature-section p{margin-top:.6em}.about-wrap .headline-feature{margin:0 auto 40px;max-width:680px}.about-wrap .headline-feature h2{margin:50px 0 0}.about-wrap .headline-feature img{max-width:600px;width:100%}.about-wrap .return-to-dashboard{margin:30px 0 0 -5px;font-size:14px;font-weight:600}.about-wrap .return-to-dashboard a{text-decoration:none;padding:0 5px}.about-wrap h2.wp-people-group{margin:2.6em 0 1.33em;padding:0;font-size:16px;line-height:inherit;font-weight:600;text-align:left}.about-wrap .wp-people-group{padding:0 5px;margin:0 -15px 0 -5px}.about-wrap .compact{margin-bottom:0}.about-wrap .wp-person{display:inline-block;vertical-align:top;margin-right:10px;padding-bottom:15px;height:70px;width:280px}.about-wrap .compact .wp-person{height:auto;width:180px;padding-bottom:0;margin-bottom:0}.about-wrap .wp-person .gravatar{float:left;margin:0 10px 10px 0;padding:1px;width:60px;height:60px}.about-wrap .compact .wp-person .gravatar{width:30px;height:30px}.about-wrap .wp-person .web{margin:6px 0 2px;font-size:16px;font-weight:400;line-height:2;text-decoration:none}.about-wrap .wp-person .title{display:block}.about-wrap #wp-people-group-validators+p.wp-credits-list{margin-top:0}.about-wrap p.wp-credits-list a{white-space:nowrap}.freedoms-php .about-wrap ol{margin:40px 60px}.freedoms-php .about-wrap ol li{list-style-type:decimal;font-weight:600}.freedoms-php .about-wrap ol p{font-weight:400;margin:.6em 0}.freedoms-php .column .freedoms-image{background-image:url('../images/freedoms.png');background-size:100%;padding-top:100%}.freedoms-php .column:nth-of-type(2) .freedoms-image{background-position:0 34%}.freedoms-php .column:nth-of-type(3) .freedoms-image{background-position:0 66%}.freedoms-php .column:nth-of-type(4) .freedoms-image{background-position:0 100%}@media screen and (max-width:782px){.about-wrap .has-3-columns,.about-wrap .has-4-columns{grid-template-columns:1fr 1fr}.about-wrap .has-3-columns .column:nth-of-type(3n+1),.about-wrap .has-4-columns .column:nth-of-type(4n+1){grid-column-start:1;grid-row-start:1}.about-wrap .has-3-columns .column:nth-of-type(3n+2),.about-wrap .has-4-columns .column:nth-of-type(4n+2){grid-column-start:2;grid-row-start:1}.about-wrap .has-3-columns .column:nth-of-type(3n),.about-wrap .has-4-columns .column:nth-of-type(4n+3){grid-column-start:1;grid-row-start:2}.about-wrap .has-4-columns .column:nth-of-type(4n){grid-column-start:2;grid-row-start:2}}@media screen and (max-width:600px){.about-wrap .has-2-columns,.about-wrap .has-3-columns,.about-wrap .has-4-columns{display:block}.about-wrap :not(.is-wider-right):not(.is-wider-left) .column{margin-right:0;margin-left:0}.about-wrap .has-2-columns.is-wider-left,.about-wrap .has-2-columns.is-wider-right{display:grid}}@media only screen and (max-width:500px){.about-wrap{margin-right:20px;margin-left:10px}.about-wrap .about-text,.about-wrap h1{margin-right:0}.about-wrap .about-text{margin-bottom:.25em}.about-wrap .wp-badge{position:relative;margin-bottom:1.5em;width:100%}}@media only screen and (max-width:480px){.about-wrap .has-2-columns.is-wider-left,.about-wrap .has-2-columns.is-wider-right{display:block}.about-wrap .column{margin-right:0;margin-left:0}.about-wrap .has-2-columns.is-wider-left img,.about-wrap .has-2-columns.is-wider-right img{max-width:160px}}
\ No newline at end of file
+.about__container{--background:#EAE9E7;--subtle-background:#EAE9E7;--text:#1e1e1e;--text-light:#fff;--accent-1:#C94C26;--accent-2:#CFCABE;--accent-3:#f0f0f1;--accent-4:#B1C5A4;--nav-background:#fff;--nav-border:transparent;--nav-color:var(--text);--nav-current:var(--accent-1);--gap:2rem}.about-php,.contribute-php,.credits-php,.freedoms-php,.privacy-php{background:#fff}.about-php #wpcontent,.contribute-php #wpcontent,.credits-php #wpcontent,.freedoms-php #wpcontent,.privacy-php #wpcontent{background:#fff;padding:0 24px}@media screen and (max-width:782px){.about-php.auto-fold #wpcontent,.contribute-php.auto-fold #wpcontent,.credits-php.auto-fold #wpcontent,.freedoms-php.auto-fold #wpcontent,.privacy-php.auto-fold #wpcontent{padding-left:24px}}.about__container{max-width:1000px;margin:24px auto;clear:both}.about__container .alignleft{float:left}.about__container .alignright{float:right}.about__container .aligncenter{text-align:center}.about__container .is-vertically-aligned-top{align-self:start}.about__container .is-vertically-aligned-center{align-self:center}.about__container .is-vertically-aligned-bottom{align-self:end}.about__section{background:0 0;clear:both}.about__container .has-accent-background-color{background-color:var(--accent-2)}.about__container .has-accent-4-background-color{background-color:var(--accent-4)}.about__container .has-transparent-background-color{background-color:transparent}.about__container .has-accent-color{color:var(--accent-2)}.about__container .has-border{border:3px solid currentColor}.about__container .has-subtle-background-color{background-color:var(--subtle-background)}.about__container .has-background-image{background-size:contain;background-repeat:no-repeat;background-position:center}.about__section{margin:0}.about__section .column:not(.is-edge-to-edge){padding:var(--gap)}.about__section+.about__section .is-section-header{padding-bottom:var(--gap)}.about__section .column.has-border:not(.is-edge-to-edge),.about__section .column[class*=background-color]:not(.is-edge-to-edge),.about__section:where([class*=background-color]) .column:not(.is-edge-to-edge){padding-top:var(--gap);padding-bottom:var(--gap)}.about__section .column p:first-of-type{margin-top:0}.about__section .column p:last-of-type{margin-bottom:0}.about__section .has-text-columns{columns:2;column-gap:calc(var(--gap) * 2)}.about__section .is-section-header{margin-bottom:0;padding:var(--gap) var(--gap) 0}.about__section .is-section-header p:last-child{margin-bottom:0}.about__section .is-section-header:first-child:last-child{padding:0}.about__section.is-feature{padding:var(--gap)}.about__section.is-feature p{margin:0}.about__section.is-feature p+p{margin-top:calc(var(--gap)/ 2)}.about__section.has-1-column{margin-left:auto;margin-right:auto;max-width:36em}.about__section.has-2-columns,.about__section.has-3-columns,.about__section.has-4-columns,.about__section.has-overlap-style{display:grid}.about__section.has-gutters{gap:var(--gap);margin-bottom:var(--gap)}.about__section.has-2-columns{grid-template-columns:1fr 1fr}.about__section.has-2-columns.is-wider-right{grid-template-columns:2fr 3fr}.about__section.has-2-columns.is-wider-left{grid-template-columns:3fr 2fr}.about__section .is-section-header{grid-column-start:1;grid-column-end:-1}.about__section.has-3-columns{grid-template-columns:repeat(3,1fr)}.about__section.has-4-columns{grid-template-columns:repeat(4,1fr)}.about__section.has-overlap-style{grid-template-columns:repeat(7,1fr)}.about__section.has-overlap-style .column{grid-row-start:1}.about__section.has-overlap-style .column:nth-of-type(odd){grid-column-start:2;grid-column-end:span 3}.about__section.has-overlap-style .column:nth-of-type(2n){grid-column-start:4;grid-column-end:span 3}.about__section.has-overlap-style .column.is-top-layer{z-index:1}@media screen and (max-width:782px){.about__section.has-2-columns.is-wider-left,.about__section.has-2-columns.is-wider-right,.about__section.has-3-columns{display:block;margin-bottom:calc(var(--gap)/ 2)}.about__section .column:not(.is-edge-to-edge){padding-top:var(--gap);padding-bottom:var(--gap)}.about__section.has-2-columns.has-gutters.is-wider-left,.about__section.has-2-columns.has-gutters.is-wider-right,.about__section.has-3-columns.has-gutters{margin-bottom:calc(var(--gap) * 2)}.about__section.has-2-columns.has-gutters .column,.about__section.has-3-columns.has-gutters .column{margin-bottom:var(--gap)}.about__section.has-2-columns.has-gutters .column:last-child,.about__section.has-3-columns.has-gutters .column:last-child{margin-bottom:0}.about__section.has-3-columns .column:nth-of-type(n){padding-top:calc(var(--gap)/ 2);padding-bottom:calc(var(--gap)/ 2)}.about__section.has-4-columns{grid-template-columns:repeat(2,1fr)}.about__section.has-overlap-style{grid-template-columns:1fr}.about__section.has-overlap-style .column.column{grid-column-start:1;grid-column-end:2;grid-row-start:1;grid-row-end:2}}@media screen and (max-width:600px){.about__section.has-2-columns{display:block;margin-bottom:var(--gap)}.about__section.has-2-columns:not(.has-gutters) .column:nth-of-type(n){padding-top:calc(var(--gap)/ 2);padding-bottom:calc(var(--gap)/ 2)}.about__section.has-2-columns.has-gutters{margin-bottom:calc(var(--gap) * 2)}.about__section.has-2-columns.has-gutters .column{margin-bottom:var(--gap)}.about__section.has-2-columns.has-gutters .column:last-child{margin-bottom:0}}@media screen and (max-width:480px){.about__section.is-feature .column{padding:0}.about__section.has-4-columns{display:block;padding-bottom:calc(var(--gap)/ 2)}.about__section.has-4-columns.has-gutters .column{margin-bottom:calc(var(--gap)/ 2)}.about__section.has-4-columns.has-gutters .column:last-child{margin-bottom:0}.about__section.has-4-columns .column:nth-of-type(n){padding-top:calc(var(--gap)/ 2);padding-bottom:calc(var(--gap)/ 2)}}.about__container{line-height:1.4;color:var(--text)}.about__container h1{padding:0}.about__container h1,.about__container h2,.about__container h3.is-larger-heading{margin-top:0;margin-bottom:.5em;font-size:2rem;font-weight:700;line-height:1.16}.about__container h1.is-smaller-heading,.about__container h2.is-smaller-heading,.about__container h3{margin-top:0;font-size:1.625rem;font-weight:700;line-height:1.4}.about__container h3.is-smaller-heading,.about__container h4{margin-top:0;font-size:1.125rem;font-weight:600;line-height:1.6}.about__container p{font-size:inherit;line-height:inherit}.about__container p.is-subheading{margin-top:0;font-size:1.5rem;font-weight:300;line-height:160%}.about__section a{color:var(--text);text-decoration:underline}.about__section a:active,.about__section a:focus,.about__section a:hover{color:var(--text);text-decoration:none}.wp-credits-list a{text-decoration:none}.wp-credits-list a:active,.wp-credits-list a:focus,.wp-credits-list a:hover{text-decoration:underline}.about__container ul{list-style:disc;margin-left:calc(var(--gap)/ 2)}.about__container li{margin-bottom:.5rem}.about__container img{margin:0;max-width:100%;vertical-align:middle}.about__container .about__image{margin:0}.about__container .about__image img{max-width:100%;width:100%;height:auto}.about__container .about__image figcaption{margin-top:.5em;text-align:center}.about__container .about__image .wp-video{margin-left:auto;margin-right:auto}.about__container .about__image svg{vertical-align:middle}.about__container .about__image+h3{margin-top:1.5em}.about__container hr{margin:calc(var(--gap)/ 2) var(--gap);height:0;border:none;border-top:4px solid var(--accent-3)}.about__container hr.is-small{margin-top:0;margin-bottom:0}.about__container hr.is-large{margin:var(--gap) auto}.about__container .notice,.about__container div.error,.about__container div.updated{display:none!important}.about__section{font-size:1.125rem;line-height:1.55}.about__section.is-feature{font-size:1.6em}.about__section.has-3-columns,.about__section.has-4-columns{font-size:1rem}@media screen and (max-width:480px){.about__section.is-feature{font-size:1.4em}.about__container h1,.about__container h2,.about__container h3.is-larger-heading{font-size:2em}}.about__header{position:relative;display:flex;flex-direction:column;align-items:start;justify-content:end;box-sizing:border-box;padding:var(--gap) 0;height:clamp(12.5rem,-1.25rem + 36.67vw,26.25rem);color:var(--text-light);background-image:url('../images/about-header-about.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4');background-size:auto 70%,cover;border-radius:5px;background-repeat:no-repeat;background-position:right 7% center,top left;background-color:var(--background)}.credits-php .about__header{background-image:url('../images/about-header-credits.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4')}.freedoms-php .about__header{background-image:url('../images/about-header-freedoms.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4')}.privacy-php .about__header{background-image:url('../images/about-header-privacy.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4')}.contribute-php .about__header{background-image:url('../images/about-header-contribute.svg?ver=6.4'),url('../images/about-header-background.svg?ver=6.4')}.about__header-image{margin:0 var(--gap) 3em}.about__header-title{box-sizing:border-box;margin:0 calc(var(--gap) + 2rem);padding:0;max-width:55%}.about__header-title h1{margin:0 0 1rem;padding:0;font-size:clamp(2rem, 20vw - 9rem, 4rem);line-height:1;font-weight:600}.about-php .about__header-title h1,.contribute-php .about__header-title h1,.credits-php .about__header-title h1,.freedoms-php .about__header-title h1,.privacy-php .about__header-title h1{font-size:clamp(2rem, 10vw - 3rem, 4rem)}.about__header-text{box-sizing:border-box;max-width:26em;margin:0 auto;padding:0;font-size:1.6rem;line-height:1.15;text-align:center}.about__header-navigation{position:relative;z-index:1;display:flex;justify-content:center;padding-top:0;margin-bottom:var(--gap);background:var(--nav-background);color:var(--nav-color);border-bottom:3px solid var(--nav-border)}.about__header-navigation .nav-tab{margin-left:0;padding:calc(var(--gap) * .75) var(--gap);float:none;font-size:1.4em;line-height:1;border-width:0 0 3px;border-style:solid;border-color:transparent;background:0 0;color:inherit}.about__header-navigation .nav-tab:active,.about__header-navigation .nav-tab:hover{background-color:var(--nav-current);color:var(--text-light)}.about__header-navigation .nav-tab-active{margin-bottom:-3px;color:var(--nav-current);border-width:0 0 6px;border-color:var(--nav-current)}.about__header-navigation .nav-tab-active:active,.about__header-navigation .nav-tab-active:hover{background-color:var(--nav-current);color:var(--text-light);border-color:var(--nav-current)}@media screen and (max-width:960px){.about-php .about__header-title h1,.contribute-php .about__header-title h1,.credits-php .about__header-title h1,.freedoms-php .about__header-title h1,.privacy-php .about__header-title h1{font-size:clamp(3rem, 6.67vw - .5rem, 4.5rem)}.about__header-navigation .nav-tab{padding:calc(var(--gap) * .75) calc(var(--gap) * .5)}}@media screen and (max-width:782px){.about__container .about__header-text{font-size:1.4em}.about__header-container{display:block}.about__header-image,.about__header-title{margin-left:calc(var(--gap)/ 2);margin-right:calc(var(--gap)/ 2)}.about__header-text{margin-top:0}.about__header-navigation .nav-tab{margin-top:0;margin-right:0;padding-left:calc(var(--gap)/ 2);padding-right:calc(var(--gap)/ 2)}}@media screen and (max-width:600px){.about__header{min-height:auto}.about__header,.contribute-php .about__header,.credits-php .about__header,.freedoms-php .about__header,.privacy-php .about__header{background-image:none}.about__header-title p{font-size:2.4em}.about__header-text{margin-left:calc(var(--gap)/ 2);margin-right:calc(var(--gap)/ 2)}.about__header-navigation{display:block}.about__header-navigation .nav-tab{display:block;margin-bottom:0;padding:calc(var(--gap)/ 2);border-left-width:6px;border-bottom:none}.about__header-navigation .nav-tab-active{border-bottom:none;border-left-width:6px}}.about__section .wp-people-group-title{margin-bottom:calc(var(--gap) * 2 - 10px);text-align:center}.about__section .wp-people-group{margin:0;display:flex;flex-wrap:wrap}.about__section .wp-person{display:inline-block;vertical-align:top;box-sizing:border-box;margin-bottom:calc(var(--gap) - 10px);width:25%;text-align:center}.about__section .compact .wp-person{height:auto;width:20%}.about__section .wp-person-avatar{display:block;margin:0 auto calc(var(--gap)/ 2);width:140px;height:140px;border-radius:100%;overflow:hidden}.about__section .wp-person .gravatar{width:140px;height:140px;filter:grayscale(100%)}.about__section .compact .wp-person .gravatar,.about__section .compact .wp-person-avatar{width:80px;height:80px}.about__section .wp-person .web{display:block;font-size:1.4em;font-weight:600;padding:10px 10px 0;text-decoration:none}.about__section .wp-person .web:hover{text-decoration:underline}.about__section .compact .wp-person .web{font-size:1.2em}.about__section .wp-person .title{display:block;margin-top:.5em}@media screen and (max-width:782px){.about__section .wp-person{width:33%}.about__section .compact .wp-person{width:25%}.about__section .wp-person .gravatar,.about__section .wp-person-avatar{width:120px;height:120px}}@media screen and (max-width:600px){.about__section .wp-person{width:50%}.about__section .compact .wp-person{width:33%}.about__section .wp-person .web{font-size:1.2em}}@media screen and (max-width:480px){.about__section .wp-person{min-width:100%}.about__section .wp-person .web{font-size:1em}.about__section .compact .wp-person .web{font-size:1em}}.about__section .column .freedom-image{margin-bottom:var(--gap);max-height:180px}.about__section .column .privacy-image{display:block;margin-left:auto;margin-right:auto;max-width:25rem}.about-wrap{position:relative;margin:25px 40px 0 20px;max-width:1050px;font-size:15px}.about-wrap.full-width-layout{max-width:1200px}.about-wrap-content{max-width:1050px}.about-wrap .notice,.about-wrap div.error,.about-wrap div.updated{display:none!important}.about-wrap hr{border:0;height:0;margin:3em 0 0;border-top:1px solid rgba(0,0,0,.1)}.about-wrap img{margin:0;width:100%;height:auto;vertical-align:middle}.about-wrap .inline-svg img{max-width:100%;width:auto;height:auto}.about-wrap video{margin:1.5em auto}.wp-badge{background:#0073aa url(../images/w-logo-white.png?ver=20160308) no-repeat;background-position:center 25px;background-size:80px 80px;color:#fff;font-size:14px;text-align:center;font-weight:600;margin:5px 0 0;padding-top:120px;height:40px;display:inline-block;width:140px;text-rendering:optimizeLegibility;box-shadow:0 1px 3px rgba(0,0,0,.2)}.svg .wp-badge{background-image:url(../images/wordpress-logo-white.svg?ver=20160308)}.about-wrap .wp-badge{position:absolute;top:0;right:0}.about-wrap .nav-tab{padding-right:15px;padding-left:15px;font-size:18px;line-height:1.33333333}.about-wrap h1{margin:.2em 200px 0 0;padding:0;color:#32373c;line-height:1.2;font-size:2.8em;font-weight:400}.about-wrap h2{margin:40px 0 .6em;font-size:2.7em;line-height:1.3;font-weight:300;text-align:center}.about-wrap h3{margin:1.25em 0 .6em;font-size:1.4em;line-height:1.5}.about-wrap h4{font-size:16px;color:#23282d}.about-wrap p{line-height:1.5;font-size:16px}.about-wrap code,.about-wrap ol li p{font-size:14px;font-weight:400}.about-wrap figcaption{font-size:13px;text-align:center;color:#fff;text-overflow:ellipsis}.about-wrap .about-description,.about-wrap .about-text{margin-top:1.4em;font-weight:400;line-height:1.6;font-size:19px}.about-wrap .about-text{margin:1em 200px 1em 0;color:#555d66}.about-wrap .has-1-columns,.about-wrap .has-2-columns,.about-wrap .has-3-columns,.about-wrap .has-4-columns{display:grid;max-width:800px;margin-top:40px;margin-left:auto;margin-right:auto}.about-wrap .column{margin-right:20px;margin-left:20px}.about-wrap .is-wide{max-width:760px}.about-wrap .is-fullwidth{max-width:100%}.about-wrap .has-1-columns{display:block;max-width:680px;margin:0 auto 40px}.about-wrap .has-2-columns{grid-template-columns:1fr 1fr}.about-wrap .has-2-columns .column:nth-of-type(odd){grid-column-start:1}.about-wrap .has-2-columns .column:nth-of-type(2n){grid-column-start:2}.about-wrap .has-2-columns.is-wider-right{grid-template-columns:1fr 2fr}.about-wrap .has-2-columns.is-wider-left{grid-template-columns:2fr 1fr}.about-wrap .has-3-columns{grid-template-columns:repeat(3,1fr)}.about-wrap .has-3-columns .column:nth-of-type(3n+1){grid-column-start:1}.about-wrap .has-3-columns .column:nth-of-type(3n+2){grid-column-start:2}.about-wrap .has-3-columns .column:nth-of-type(3n){grid-column-start:3}.about-wrap .has-4-columns{grid-template-columns:repeat(4,1fr)}.about-wrap .has-4-columns .column:nth-of-type(4n+1){grid-column-start:1}.about-wrap .has-4-columns .column:nth-of-type(4n+2){grid-column-start:2}.about-wrap .has-4-columns .column:nth-of-type(4n+3){grid-column-start:3}.about-wrap .has-4-columns .column:nth-of-type(4n){grid-column-start:4}.about-wrap .column :first-child{margin-top:0}.about-wrap .aligncenter{text-align:center}.about-wrap .alignleft{float:left;margin-right:40px}.about-wrap .alignright{float:right;margin-left:40px}.about-wrap .is-vertically-aligned-top{align-self:start}.about-wrap .is-vertically-aligned-center{align-self:center}.about-wrap .is-vertically-aligned-bottom{align-self:end}.about-wrap .point-releases{margin-top:5px;border-bottom:1px solid #ddd}.about-wrap .changelog{margin-bottom:40px}.about-wrap .changelog.point-releases h3{padding-top:35px}.about-wrap .changelog.point-releases h3:first-child{padding-top:7px}.about-wrap .changelog.feature-section .col{margin-top:40px}.about-wrap .lead-description{font-size:1.5em;text-align:center}.about-wrap .feature-section p{margin-top:.6em}.about-wrap .headline-feature{margin:0 auto 40px;max-width:680px}.about-wrap .headline-feature h2{margin:50px 0 0}.about-wrap .headline-feature img{max-width:600px;width:100%}.about-wrap .return-to-dashboard{margin:30px 0 0 -5px;font-size:14px;font-weight:600}.about-wrap .return-to-dashboard a{text-decoration:none;padding:0 5px}.about-wrap h2.wp-people-group{margin:2.6em 0 1.33em;padding:0;font-size:16px;line-height:inherit;font-weight:600;text-align:left}.about-wrap .wp-people-group{padding:0 5px;margin:0 -15px 0 -5px}.about-wrap .compact{margin-bottom:0}.about-wrap .wp-person{display:inline-block;vertical-align:top;margin-right:10px;padding-bottom:15px;height:70px;width:280px}.about-wrap .compact .wp-person{height:auto;width:180px;padding-bottom:0;margin-bottom:0}.about-wrap .wp-person .gravatar{float:left;margin:0 10px 10px 0;padding:1px;width:60px;height:60px}.about-wrap .compact .wp-person .gravatar{width:30px;height:30px}.about-wrap .wp-person .web{margin:6px 0 2px;font-size:16px;font-weight:400;line-height:2;text-decoration:none}.about-wrap .wp-person .title{display:block}.about-wrap #wp-people-group-validators+p.wp-credits-list{margin-top:0}.about-wrap p.wp-credits-list a{white-space:nowrap}.freedoms-php .about-wrap ol{margin:40px 60px}.freedoms-php .about-wrap ol li{list-style-type:decimal;font-weight:600}.freedoms-php .about-wrap ol p{font-weight:400;margin:.6em 0}.freedoms-php .column .freedoms-image{background-image:url('../images/freedoms.png');background-size:100%;padding-top:100%}.freedoms-php .column:nth-of-type(2) .freedoms-image{background-position:0 34%}.freedoms-php .column:nth-of-type(3) .freedoms-image{background-position:0 66%}.freedoms-php .column:nth-of-type(4) .freedoms-image{background-position:0 100%}@media screen and (max-width:782px){.about-wrap .has-3-columns,.about-wrap .has-4-columns{grid-template-columns:1fr 1fr}.about-wrap .has-3-columns .column:nth-of-type(3n+1),.about-wrap .has-4-columns .column:nth-of-type(4n+1){grid-column-start:1;grid-row-start:1}.about-wrap .has-3-columns .column:nth-of-type(3n+2),.about-wrap .has-4-columns .column:nth-of-type(4n+2){grid-column-start:2;grid-row-start:1}.about-wrap .has-3-columns .column:nth-of-type(3n),.about-wrap .has-4-columns .column:nth-of-type(4n+3){grid-column-start:1;grid-row-start:2}.about-wrap .has-4-columns .column:nth-of-type(4n){grid-column-start:2;grid-row-start:2}}@media screen and (max-width:600px){.about-wrap .has-2-columns,.about-wrap .has-3-columns,.about-wrap .has-4-columns{display:block}.about-wrap :not(.is-wider-right):not(.is-wider-left) .column{margin-right:0;margin-left:0}.about-wrap .has-2-columns.is-wider-left,.about-wrap .has-2-columns.is-wider-right{display:grid}}@media only screen and (max-width:500px){.about-wrap{margin-right:20px;margin-left:10px}.about-wrap .about-text,.about-wrap h1{margin-right:0}.about-wrap .about-text{margin-bottom:.25em}.about-wrap .wp-badge{position:relative;margin-bottom:1.5em;width:100%}}@media only screen and (max-width:480px){.about-wrap .has-2-columns.is-wider-left,.about-wrap .has-2-columns.is-wider-right{display:block}.about-wrap .column{margin-right:0;margin-left:0}.about-wrap .has-2-columns.is-wider-left img,.about-wrap .has-2-columns.is-wider-right img{max-width:160px}}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/contact-form-7/includes/formatting.php b/wp/wp-content/plugins/contact-form-7/includes/formatting.php
index ab89c44e..2627bca6 100644
--- a/wp/wp-content/plugins/contact-form-7/includes/formatting.php
+++ b/wp/wp-content/plugins/contact-form-7/includes/formatting.php
@@ -275,17 +275,6 @@ function wpcf7_sanitize_unit_tag( $tag ) {
function wpcf7_antiscript_file_name( $filename ) {
$filename = wp_basename( $filename );
- // Apply part of protection logic from sanitize_file_name().
- $filename = str_replace(
- array(
- '?', '[', ']', '/', '\\', '=', '<', '>', ':', ';', ',', "'", '"',
- '&', '$', '#', '*', '(', ')', '|', '~', '`', '!', '{', '}',
- '%', '+', '’', '«', '»', '”', '“', chr( 0 )
- ),
- '',
- $filename
- );
-
$filename = preg_replace( '/[\r\n\t -]+/', '-', $filename );
$filename = preg_replace( '/[\pC\pZ]+/iu', '', $filename );
diff --git a/wp/wp-content/plugins/contact-form-7/includes/swv/rules/file.php b/wp/wp-content/plugins/contact-form-7/includes/swv/rules/file.php
index 67e2d834..bed20a3d 100644
--- a/wp/wp-content/plugins/contact-form-7/includes/swv/rules/file.php
+++ b/wp/wp-content/plugins/contact-form-7/includes/swv/rules/file.php
@@ -25,7 +25,7 @@ class WPCF7_SWV_FileRule extends WPCF7_SWV_Rule {
$acceptable_filetypes = array();
foreach ( (array) $this->get_property( 'accept' ) as $accept ) {
- if ( preg_match( '/^\.[a-z0-9]+$/i', $accept ) ) {
+ if ( false === strpos( $accept, '/' ) ) {
$acceptable_filetypes[] = strtolower( $accept );
} else {
foreach ( wpcf7_convert_mime_to_ext( $accept ) as $ext ) {
diff --git a/wp/wp-content/plugins/contact-form-7/readme.txt b/wp/wp-content/plugins/contact-form-7/readme.txt
index 406f438c..e3a9a791 100644
--- a/wp/wp-content/plugins/contact-form-7/readme.txt
+++ b/wp/wp-content/plugins/contact-form-7/readme.txt
@@ -5,7 +5,7 @@ Tags: contact, form, contact form, feedback, email, ajax, captcha, akismet, mult
Requires at least: 6.2
Requires PHP: 7.4
Tested up to: 6.4
-Stable tag: 5.8.4
+Stable tag: 5.8.3
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
@@ -78,10 +78,6 @@ Do you have questions or issues with Contact Form 7? Use these support channels
For more information, see [Releases](https://contactform7.com/category/releases/).
-= 5.8.4 =
-
-[https://contactform7.com/contact-form-7-584/](https://contactform7.com/contact-form-7-584/)
-
= 5.8.3 =
[https://contactform7.com/contact-form-7-583/](https://contactform7.com/contact-form-7-583/)
diff --git a/wp/wp-content/plugins/contact-form-7/wp-contact-form-7.php b/wp/wp-content/plugins/contact-form-7/wp-contact-form-7.php
index c83b432f..eff38121 100644
--- a/wp/wp-content/plugins/contact-form-7/wp-contact-form-7.php
+++ b/wp/wp-content/plugins/contact-form-7/wp-contact-form-7.php
@@ -7,12 +7,12 @@
* Author URI: https://ideasilo.wordpress.com/
* License: GPL v2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
- * Version: 5.8.4
+ * Version: 5.8.3
* Requires at least: 6.2
* Requires PHP: 7.4
*/
-define( 'WPCF7_VERSION', '5.8.4' );
+define( 'WPCF7_VERSION', '5.8.3' );
define( 'WPCF7_REQUIRED_WP_VERSION', '6.2' );
diff --git a/wp/wp-content/plugins/divifilter/df-script.js b/wp/wp-content/plugins/divifilter/df-script.js
deleted file mode 100644
index b8fdc26c..00000000
--- a/wp/wp-content/plugins/divifilter/df-script.js
+++ /dev/null
@@ -1 +0,0 @@
-var _0x8745dd=_0x49ab;(function(_0x2aaa01,_0x47478d){var _0xaada14=_0x49ab,_0x3db5d8=_0x2aaa01();while(!![]){try{var _0x48da6c=parseInt(_0xaada14(0xb3))/0x1+parseInt(_0xaada14(0x104))/0x2+-parseInt(_0xaada14(0xf4))/0x3*(-parseInt(_0xaada14(0xf8))/0x4)+parseInt(_0xaada14(0xf2))/0x5+parseInt(_0xaada14(0x115))/0x6+parseInt(_0xaada14(0xf5))/0x7+-parseInt(_0xaada14(0xf3))/0x8;if(_0x48da6c===_0x47478d)break;else _0x3db5d8['push'](_0x3db5d8['shift']());}catch(_0x2a2ae4){_0x3db5d8['push'](_0x3db5d8['shift']());}}}(_0x15b8,0xdf862));class dfElement{constructor(_0x37fee3,_0x45ef03,_0x2381b6){var _0xb2647a=_0x49ab;this[_0xb2647a(0xc0)]=_0x37fee3,this[_0xb2647a(0xea)]=_0x45ef03,this[_0xb2647a(0xb4)]=_0x2381b6;}}class dfFilterArea{constructor(_0x4de77a,_0x4a9083,_0x44fa91,_0x141f32,_0x100eb8,_0x35b5fc){var _0x25780e=_0x49ab;this[_0x25780e(0xba)]=_0x4de77a,this[_0x25780e(0xdd)]=_0x4a9083,this[_0x25780e(0xee)]=_0x44fa91,this[_0x25780e(0x112)]=_0x141f32,this[_0x25780e(0xbd)]=_0x100eb8,this[_0x25780e(0xeb)]=_0x35b5fc,this[_0x25780e(0xe7)]=[];}}function _0x49ab(_0x15b03e,_0x50b21c){var _0x15b83f=_0x15b8();return _0x49ab=function(_0x49ab86,_0x4cb3c7){_0x49ab86=_0x49ab86-0xae;var _0x358b9d=_0x15b83f[_0x49ab86];if(_0x49ab['rrSQWu']===undefined){var _0x1b0cc3=function(_0x37fee3){var _0x45ef03='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x2381b6='',_0x4de77a='';for(var _0x4a9083=0x0,_0x44fa91,_0x141f32,_0x100eb8=0x0;_0x141f32=_0x37fee3['charAt'](_0x100eb8++);~_0x141f32&&(_0x44fa91=_0x4a9083%0x4?_0x44fa91*0x40+_0x141f32:_0x141f32,_0x4a9083++%0x4)?_0x2381b6+=String['fromCharCode'](0xff&_0x44fa91>>(-0x2*_0x4a9083&0x6)):0x0){_0x141f32=_0x45ef03['indexOf'](_0x141f32);}for(var _0x35b5fc=0x0,_0x186601=_0x2381b6['length'];_0x35b5fc<_0x186601;_0x35b5fc++){_0x4de77a+='%'+('00'+_0x2381b6['charCodeAt'](_0x35b5fc)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4de77a);};_0x49ab['xjNChH']=_0x1b0cc3,_0x15b03e=arguments,_0x49ab['rrSQWu']=!![];}var _0x22f2f0=_0x15b83f[0x0],_0x5405ab=_0x49ab86+_0x22f2f0,_0x14034b=_0x15b03e[_0x5405ab];return!_0x14034b?(_0x358b9d=_0x49ab['xjNChH'](_0x358b9d),_0x15b03e[_0x5405ab]=_0x358b9d):_0x358b9d=_0x14034b,_0x358b9d;},_0x49ab(_0x15b03e,_0x50b21c);}var dfAllFilters=[];const elementIndexString=_0x8745dd(0xd7);var filterElementType=_0x8745dd(0xb9),selectorElementType='',filterNumber,filterNumberSelector='',multiSelectMode=![],cutSetMode=![],postTypeFiltering=![],dvKV;function getFilterData(_0x186601){var _0x3b0307=_0x8745dd;filterNumber=getFilterNumber(_0x186601);filterNumber==null?(filterNumber=0x1,filterNumberSelector='\x20'):filterNumberSelector=_0x3b0307(0xed)+filterNumber;var _0x1b41c0=![];dfAllFilters[filterNumber]!==undefined&&(_0x1b41c0=!![]);if(_0x1b41c0)selectorElementType=dfAllFilters[filterNumber][_0x3b0307(0xba)],filterElementType=dfAllFilters[filterNumber][_0x3b0307(0xdd)],multiSelectMode=dfAllFilters[filterNumber][_0x3b0307(0xee)],postTypeFiltering=dfAllFilters[filterNumber][_0x3b0307(0x112)],cutSetMode=dfAllFilters[filterNumber][_0x3b0307(0xbd)];else{if(jQuery('.df-area'+filterNumberSelector)[_0x3b0307(0xd6)](_0x3b0307(0x100))&&dvKV){selectorElementType=_0x3b0307(0xe2)+filterNumberSelector+_0x3b0307(0xfe),filterElementType=_0x3b0307(0xc7);if(jQuery('.df-area'+filterNumberSelector)[_0x3b0307(0xd6)](_0x3b0307(0xda)))selectorElementType=_0x3b0307(0xe2)+filterNumberSelector+_0x3b0307(0xc4);}else{if(jQuery(_0x3b0307(0xe2)+filterNumberSelector)[_0x3b0307(0xd6)](_0x3b0307(0xda))&&dvKV)selectorElementType='.df-area'+filterNumberSelector+_0x3b0307(0xcc),filterElementType=_0x3b0307(0xdf);else{if(jQuery(_0x3b0307(0xe2)+filterNumberSelector)[_0x3b0307(0xd6)](_0x3b0307(0x109))){if(jQuery('.df-area'+filterNumberSelector+_0x3b0307(0xbe))[_0x3b0307(0xd6)](_0x3b0307(0xdc))||jQuery('.df-area'+filterNumberSelector+'\x20.et_pb_module')[_0x3b0307(0xd6)]('et_pb_blog_grid_wrapper')){selectorElementType=_0x3b0307(0xe2)+filterNumberSelector+'>\x20.et_pb_row:not(.df-buttons)\x20article',filterElementType=_0x3b0307(0xb7);if(jQuery('.df-area'+filterNumberSelector+_0x3b0307(0xbe))[_0x3b0307(0xd6)](_0x3b0307(0xfc)))filterElementType='blogGrid';}else selectorElementType=_0x3b0307(0xe2)+filterNumberSelector+_0x3b0307(0x10d),filterElementType=_0x3b0307(0xb0);}else dvKV?(selectorElementType=_0x3b0307(0xe2)+filterNumberSelector+_0x3b0307(0x107),filterElementType=_0x3b0307(0xb9)):(selectorElementType=_0x3b0307(0x110),filterElementType=_0x3b0307(0xb9));}}jQuery('.df-area'+filterNumberSelector)[_0x3b0307(0xd6)]('df-multi')&&dvKV?multiSelectMode=!![]:multiSelectMode=![];if(jQuery(_0x3b0307(0xe2)+filterNumberSelector)[_0x3b0307(0xd6)](_0x3b0307(0x109))){postTypeFiltering=_0x3b0307(0xd4);if(jQuery('.df-area'+filterNumberSelector+'\x20.et_pb_module')[_0x3b0307(0xd6)](_0x3b0307(0xdc))||jQuery(_0x3b0307(0xe2)+filterNumberSelector+_0x3b0307(0xbe))[_0x3b0307(0xd6)](_0x3b0307(0xfc)))postTypeFiltering=_0x3b0307(0xb7);}else postTypeFiltering=![];jQuery('.df-area'+filterNumberSelector)[_0x3b0307(0xd6)](_0x3b0307(0xf0))&&dvKV?cutSetMode=!![]:cutSetMode=![];}}function getAndRemoveClassNames(_0x4cb0ff){var _0x5af9fb=_0x8745dd,_0x1c3a1c=_0x4cb0ff[_0x5af9fb(0xb6)](_0x5af9fb(0xbc))[_0x5af9fb(0xaf)](/\s+/);return classListFiltered=jQuery[_0x5af9fb(0x10c)](_0x1c3a1c,function(_0x3e4013,_0x37eb03){var _0x48cd99=_0x5af9fb,_0x4c1b96=0x0;_0x3e4013[_0x48cd99(0xc3)]('et')!==0x0&&_0x3e4013[_0x48cd99(0xc3)](_0x48cd99(0xc5))!==0x0&&(_0x4cb0ff[_0x48cd99(0xf7)](_0x3e4013),_0x4c1b96=0x1);if(_0x3e4013[_0x48cd99(0xc3)](_0x48cd99(0xcf)+filterElementType+'_')==0x0){if(filterElementType===_0x48cd99(0xb9)&&!(_0x3e4013[_0x48cd99(0xb1)](0xe)==='_')&&!(_0x3e4013[_0x48cd99(0xb1)](0xf)==='_')&&!(_0x3e4013['charAt'](0x10)==='_'))_0x4cb0ff[_0x48cd99(0xf7)](_0x3e4013),_0x4c1b96=0x1;else filterElementType===_0x48cd99(0xdf)&&!(_0x3e4013[_0x48cd99(0xb1)](0xb)==='_')&&!(_0x3e4013['charAt'](0xc)==='_')&&!(_0x3e4013[_0x48cd99(0xb1)](0xd)==='_')&&(_0x4cb0ff['removeClass'](_0x3e4013),_0x4c1b96=0x1);}return _0x4c1b96;}),classListFiltered;}function getAndRemoveElementIndex(_0x36a207){var _0x1fb5ca=_0x8745dd,_0x3fb6a0=_0x36a207[_0x1fb5ca(0xb6)](_0x1fb5ca(0xbc))['split'](/\s+/),_0x1f959f=jQuery['grep'](_0x3fb6a0,function(_0x5e4859,_0x2b79c6){var _0x47a366=_0x1fb5ca;return _0x5e4859[_0x47a366(0xc3)]('df-elementindex-')===0x0;}),_0xf52d9b;if(_0x1f959f['length']==0x1){var _0x4e3b27=_0x1f959f[0x0]['substring'](0x10);_0xf52d9b=parseInt(_0x4e3b27),_0x36a207[_0x1fb5ca(0xf7)](_0x1f959f[0x0]);}else{if(_0x1f959f['length']==0x0)_0xf52d9b=-0x1;else console[_0x1fb5ca(0x101)](_0x1fb5ca(0xec));}return _0xf52d9b;}function getFilterClassesOfButton(_0x216c76,_0x5adb17){var _0x1a0027=_0x8745dd,_0x290f17=_0x216c76[_0x1a0027(0xb6)]('class')['split'](/\s+/);_0x290f17=jQuery['grep'](_0x290f17,function(_0x2cccdc){var _0x598209=_0x1a0027;return _0x2cccdc[_0x598209(0xc3)](_0x598209(0xc8))===0x0;});let _0x464500=jQuery[_0x1a0027(0x10c)](_0x290f17,function(_0x42d143){var _0x2f4eb5=_0x1a0027;return _0x42d143[_0x2f4eb5(0xc3)](_0x2f4eb5(0x114))===-0x1;});if(_0x5adb17)for(let _0x191acf=0x0;_0x191acf<_0x464500['length'];_0x191acf++){if(_0x5adb17==_0x1a0027(0xb7))_0x464500[_0x191acf]=_0x464500[_0x191acf][_0x1a0027(0xff)]('dfc-',_0x1a0027(0xc2));if(_0x5adb17==_0x1a0027(0xd4))_0x464500[_0x191acf]=_0x464500[_0x191acf][_0x1a0027(0xff)](_0x1a0027(0xc8),_0x1a0027(0x10a));}return _0x464500;}function getFilterNumber(_0x1f4503){var _0x112be6=_0x8745dd,_0x53396a=null,_0x15f66a;if(_0x1f4503[_0x112be6(0xd6)]('df-button'))var _0x15f66a=_0x1f4503[_0x112be6(0xf6)](_0x112be6(0xd2))['attr'](_0x112be6(0xbc));else var _0x15f66a=_0x1f4503['attr'](_0x112be6(0xbc));if(_0x15f66a!==undefined){var _0x4de1f1=_0x15f66a['split'](/\s+/);classListFiltered=jQuery['each'](_0x4de1f1,function(_0x492e20,_0x2394e9){var _0x125992=_0x112be6;if(_0x2394e9[_0x125992(0xc3)](_0x125992(0x108))==0x0){var _0x46eb89=_0x2394e9[_0x125992(0xf9)](0x4);_0x53396a=parseInt(_0x46eb89,0xa);}});}return _0x53396a;}function _0x15b8(){var _0x5b9eaf=['Dg9tDhjPBMC','zgyTyNv0Dg9U','mZi3ndC4ogfnq0D2zq','C29YDa','Aw5bCNjHEq','BwfW','C3bSAxq','Cg9ZDa','y2HHCKf0','pIaUzxrFCgjFCM93oM5VDcGUzgyTyNv0Dg9UCYKGlMv0x3bIx3nHBhzHDhrVCMvFy29UDgvUDcaUy29SDw1UoMvXka','oda3nZKZzNnZywnf','y2XHC3nmAxn0','lMv0x3bIx3jVD19PBM5LCJPUB3qOlMrMlwj1DhrVBNmP','yxr0CG','yMXVzW','lMv0x3bIx3jVD19PBM5LCJPUB3qOlMrMlwj1DhrVBNmPid4GlMv0x3bIx2nVBhvTBJPUB3qOlMrMlwj1DhrVBNmP','y29SDw1U','C2vSzwn0B3jfBgvTzw50vhLWzq','pIaUzxrFCgjFCM93oM5VDcGUzgyTyNv0Dg9UCYKGyxj0AwnSzq','y2XHC3m','y3v0u2v0tw9Kzq','ic5LDf9WyL9TB2r1Bgu','zgyTzwXLBwvUDgLUzgv4lq','Bw9KDwXLugfYDhm','pIaUzxrFCgjFCM93oM5VDcGUzgyTyNv0Dg9UCYK','y2f0zwDVCNKT','Aw5KzxHpzG','ic5LDf9WyL9YB3DFAw5Uzxi6BM90kc5KzI1IDxr0B25Zkq','zgzZlq','Bg9JyxrPB24','C3bLy2LHBhr5','zgzJlq','y2HPBgrYzw4','C2vHCMnO','zgv0ywnO','id4GlMv0x3bIx3jVDZPUB3qOlMrMlwj1DhrVBNmP','CxvLCNLtzwXLy3rVCKfSBa','CMvTB3zL','zxrFCgjF','B2zMC2v0v2LKDgG','Ahr0Chm6lY9Kyw5PzwX2B2vSAY5Kzs9LBI9KAxzPlwzPBhrLCI8','lMv0x3bIx3jVDW','rgL2AsbgAwX0zxiGugX1z2LUoIbnB3jLihrOyw4GmsbMAwX0zxiGyxjLys4GuMvTB3zLigzPBhrLCIbHCMvHig9YihvWz3jHzguGBgLJzw5Zzse','Cg9YDgzVBgLV','ywrKq2XHC3m','AgfZq2XHC3m','zwyTzwXLBwvUDgLUzgv4lq','zMLSDgvY','ic5KzI1IDxr0B24UzgzJlq','zgyTCM93CW','pIaUzxrFCgjFCM93oM5VDcGUzgyTyNv0Dg9UCYKGlMv0x3bIx3nHBhzHDhrVCMvFy29UDgvUDcaUy29SDw1U','zxrFCgjFCg9ZDhm','zMLSDgvYrwXLBwvUDfr5Cgu','CgfKu3rHCNq','CM93','rgL2AsbgAwX0zxiGugX1z2LUoIbzB3uGy2fUj3qGzMLSDgvYihjVD3mGB3iGC3bLy2LHBhr5ihnLy3rPB25ZihDPDgGGDgHLigzYzwuGBgLJzw5Zzs4GugXLyxnLigDLDcbHifbYzw1PDw0GBgLJzw5Zzse','lMrMlwj1DhrVBI5KzMmT','lMrMlwfYzwe','ywrK','y29Uy2f0','zgyTC3rHCNrPBMDezwXHEq','oMvXka','ywn0AxzLrMLSDgvYqNrUq2XHC3nLCW','zgyTBg9HzgvK','yxnZAwDU','Bw9KDwXLsw5KzxG','Bw9KDwXLqxjYyxK','rgL2AsbgAwX0zxiGugX1z2LUoIbfCNjVCIa1nJmGtw9Yzsb0AgfUig9UzsbVCIbUBYbTB2r1BgvjBMrLEcbJBgfZCW','lMrMBI0','BxvSDgLtzwXLy3rnB2rL','zgyTywn0AxzLyNv0Dg9U','zgyTCgLJA3K','ufjftuLvtq','nJu5nteXnuXys1PJAW','mZqWotqYotzdwe1qzLu','mtKZmZyYm2nxqwvjsG','mJiWoti3rNbrA1fh','y2XVC2vZDa','CMvTB3zLq2XHC3m','ogfryuDprq','C3vIC3rYAw5N','Aw5JBhvKzxm','zwfJAa','zxrFCgjFyMXVz19NCMLKx3DYyxbWzxi','pceTlsbgAwX0zxjPBMCGzg9Uzsb3AxrOihrOzsbeAxzPiezPBhrLCIbWBhvNAw4SigDLDcb0AguGzNjLzsb2zxjZAw9UigHLCMu6igH0DhbZoI8VzgfUAwvSDM9LBgSUzguVzw4VzgL2As1MAwX0zxiVic0TpG','ic5LDf9WyL9YB3DFAw5Uzxi6BM90kc5KzI1IDxr0B25Zksa+ic5LDf9WyL9JB2X1Bw46BM90kc5KzI1IDxr0B25Zkq','CMvWBgfJzq','zxrFC2vJDgLVBL9ZCgvJAwfSDhK','Bg9N','yxbWzw5K','ic5KzI1IDxr0B24','mJm2ode2ofHWyKjhBG','y2XPy2S','BgvUz3rO','pIaUzxrFCgjFCM93oM5VDcGUzgyTyNv0Dg9UCYKGpIaUzxrFCgjFy29SDw1UoM5VDcGUzgyTyNv0Dg9UCYK','zgzUlq','zgyTCg9ZDa','ChjVAMvJDf9JyxrLz29YEs0','lMrMlwj1DhrVBG','z3jLCa','pIaUzxrFCgjFCM93oM5VDcGUzgyTyNv0Dg9UCYKGlMv0x3bIx3bVCNrMB2XPB19PDgvT','ChvZAa','zgyTyw5PBwf0Aw9U','lMrMlwfYzweGpIaUzxrFCgjFCM93id4GlMv0x3bIx2nVBhvTBG','pIaUzxrFCgjFCM93id4GlMv0x3bIx2nVBhvTBG','Cg9ZDfr5CgvgAwX0zxjPBMC'];_0x15b8=function(){return _0x5b9eaf;};return _0x15b8();}function filterElements(_0x2681f8){var _0x58dcf6=_0x8745dd;let _0x4edb43=![];dfAllFilters[filterNumber]!==undefined&&(_0x4edb43=!![]);let _0x32d230=[];jQuery(selectorElementType)[_0x58dcf6(0xfb)](function(_0x350673,_0x6fb954){var _0x45972c=_0x58dcf6,_0x5bb2a3=getAndRemoveElementIndex(jQuery(this));if(_0x5bb2a3!=-0x1){var _0x5b9413=[];jQuery(this)[_0x45972c(0xc9)]()[_0x45972c(0xfb)](function(){var _0x289815=_0x45972c;_0x5b9413[_0x289815(0x10e)](jQuery(this)[_0x289815(0xcb)]());}),_0x4edb43?(dfAllFilters[filterNumber][_0x45972c(0xeb)][_0x5bb2a3][_0x45972c(0xc0)]=_0x5b9413,getAndRemoveClassNames(jQuery(this))):_0x32d230[_0x5bb2a3]=new dfElement(_0x5b9413,_0x5bb2a3,getAndRemoveClassNames(jQuery(this)));}});!_0x4edb43&&(allModulesWithoutReference=_0x32d230,dfAllFilters[filterNumber]=new dfFilterArea(selectorElementType,filterElementType,multiSelectMode,postTypeFiltering,cutSetMode,allModulesWithoutReference));let _0x338032=dfAllFilters[filterNumber]['moduleArray'][_0x58dcf6(0xae)](_0x1aaa68=>Object[_0x58dcf6(0xe9)]({},_0x1aaa68));if(dfAllFilters[filterNumber][_0x58dcf6(0xee)]){var _0x193259=dfAllFilters[filterNumber][_0x58dcf6(0xe7)];_0x2681f8[_0x58dcf6(0xd6)](_0x58dcf6(0xef))?(toRemove=getFilterClassesOfButton(_0x2681f8,dfAllFilters[filterNumber][_0x58dcf6(0x112)]),_0x193259=_0x193259[_0x58dcf6(0xd8)](function(_0x3a1698){var _0x1f039b=_0x58dcf6;return!toRemove[_0x1f039b(0xfa)](_0x3a1698);}),_0x2681f8[_0x58dcf6(0xf7)](_0x58dcf6(0xef))):(_0x193259=_0x193259[_0x58dcf6(0xe4)](getFilterClassesOfButton(_0x2681f8,dfAllFilters[filterNumber][_0x58dcf6(0x112)])),_0x2681f8['addClass'](_0x58dcf6(0xef))),dfAllFilters[filterNumber][_0x58dcf6(0xbd)]?_0x338032=filterCutSet(_0x193259,_0x338032):_0x338032=filterUnion(_0x193259,_0x338032),dfAllFilters[filterNumber]['activeFilterBtnClasses']=_0x193259;}else{let _0x1c0853=getFilterClassesOfButton(_0x2681f8,dfAllFilters[filterNumber][_0x58dcf6(0x112)]);dvKV&&(jQuery(filterNumberSelector+_0x58dcf6(0x103))[_0x58dcf6(0xf7)]('df-activebutton'),_0x2681f8[_0x58dcf6(0xd5)](_0x58dcf6(0xef))),dfAllFilters[filterNumber]['cutSetMode']?_0x338032=filterCutSet(_0x1c0853,_0x338032):_0x338032=filterUnion(_0x1c0853,_0x338032);}fillElements(_0x338032);}function filterCutSet(_0xf4a1ef,_0x41bba6){var _0x2bfd6a=_0x8745dd,_0x465f87=[];jQuery[_0x2bfd6a(0xfb)](_0xf4a1ef,function(_0x38027b,_0x256b05){var _0x50b332=_0x2bfd6a;jQuery[_0x50b332(0xfb)](_0x41bba6,function(_0x40f3a6,_0x406787){var _0x45e405=_0x50b332,_0xfb552a=0x0;_0x406787[_0x45e405(0xb4)]!==undefined?jQuery[_0x45e405(0xfb)](_0x406787[_0x45e405(0xb4)],function(_0x140408,_0x321723){_0x321723==_0x256b05&&(_0xfb552a=0x1);}):_0xfb552a=0x0,_0xfb552a==0x0&&_0x465f87[_0x45e405(0x10e)](_0x40f3a6);});});var _0xb4f555=[];return jQuery[_0x2bfd6a(0xfb)](_0x465f87,function(_0xf59013,_0x5a445a){var _0x1fa3e7=_0x2bfd6a;if(jQuery[_0x1fa3e7(0x117)](_0x5a445a,_0xb4f555)==-0x1)_0xb4f555[_0x1fa3e7(0x10e)](_0x5a445a);}),_0x465f87=_0xb4f555,_0x465f87[_0x2bfd6a(0x116)](function(_0x5c4172,_0x1aa93f){return _0x1aa93f-_0x5c4172;}),jQuery[_0x2bfd6a(0xfb)](_0x465f87,function(_0x2c62a6,_0x1d03d5){_0x41bba6['splice'](_0x1d03d5,0x1);}),_0x41bba6;};function filterUnion(_0x387e59,_0x39bb8f){var _0x3c4484=_0x8745dd;if(_0x387e59['length']>0x0){var _0x411938=[];jQuery[_0x3c4484(0xfb)](_0x39bb8f,function(_0x19cb85,_0x18904f){var _0x31fdff=_0x3c4484,_0x21b186=0x0;_0x18904f[_0x31fdff(0xb4)]!==undefined?jQuery[_0x31fdff(0xfb)](_0x18904f[_0x31fdff(0xb4)],function(_0x56b910,_0x263c67){var _0x3d21c5=_0x31fdff;jQuery[_0x3d21c5(0xfb)](_0x387e59,function(_0x14e4a8,_0x47ab92){_0x263c67==_0x47ab92&&(_0x21b186=0x1);});}):_0x21b186=0x0,_0x21b186==0x0&&_0x411938['push'](_0x19cb85);}),_0x411938[_0x3c4484(0x116)](function(_0x27155e,_0x20d456){return _0x20d456-_0x27155e;}),jQuery[_0x3c4484(0xfb)](_0x411938,function(_0x4c44cb,_0x575c88){_0x39bb8f['splice'](_0x575c88,0x1);});}return _0x39bb8f;};function fillElements(_0x2b5c35){var _0x1d293a=_0x8745dd;const _0x4e1665=jQuery(_0x1d293a(0xe2)+filterNumberSelector+_0x1d293a(0xdb))['length']-0x1;if(filterElementType=='blogGrid'){let _0x3475a5=0x0,_0x5d3fb9=0x0;for(let _0x400fe2=0x0;_0x400fe2<_0x2b5c35[_0x1d293a(0x106)];_0x400fe2++){let _0x16c743=jQuery(_0x1d293a(0xe2)+filterNumberSelector+_0x1d293a(0xb2)+_0x3475a5+')\x20article:eq('+_0x5d3fb9+')'),_0x490eef=_0x2b5c35[_0x400fe2]['moduleIndex'][_0x1d293a(0x113)]()[_0x1d293a(0xde)](0x3,'0');_0x16c743[_0x1d293a(0xd5)]('df-elementindex-'+_0x490eef),jQuery[_0x1d293a(0xfb)](_0x2b5c35[_0x400fe2][_0x1d293a(0xb4)],function(_0x470aa7,_0x1f6ad8){var _0x2b27be=_0x1d293a;_0x16c743[_0x2b27be(0xd5)](_0x1f6ad8);}),jQuery['each'](_0x2b5c35[_0x400fe2][_0x1d293a(0xc0)],function(_0x17bd35,_0x218272){var _0x27bab=_0x1d293a;_0x16c743[_0x27bab(0x102)](_0x2b5c35[_0x400fe2]['moduleParts'][_0x17bd35]);});if(dvKV){let _0x39f017=document[_0x1d293a(0xcd)](selectorElementType)[_0x400fe2];_0x39f017&&(_0x39f017['classList'][_0x1d293a(0xce)](_0x1d293a(0x10f)),void _0x39f017[_0x1d293a(0xd0)],_0x39f017[_0x1d293a(0xb4)][_0x1d293a(0xe3)](_0x1d293a(0x10f)));}_0x3475a5<_0x4e1665?_0x3475a5=_0x3475a5+0x1:(_0x3475a5=0x0,_0x5d3fb9=_0x5d3fb9+0x1);}}else for(let _0x3c9dea=0x0;_0x3c9dea<_0x2b5c35[_0x1d293a(0x106)];_0x3c9dea++){let _0x4c146d=_0x2b5c35[_0x3c9dea][_0x1d293a(0xea)][_0x1d293a(0x113)]()[_0x1d293a(0xde)](0x3,'0');jQuery(selectorElementType+_0x1d293a(0xe6)+_0x3c9dea+')')[_0x1d293a(0xd5)](_0x1d293a(0xbf)+_0x4c146d),jQuery['each'](_0x2b5c35[_0x3c9dea]['classList'],function(_0x2a3648,_0x3ca2f){var _0x198b89=_0x1d293a;jQuery(selectorElementType+':eq('+_0x3c9dea+')')[_0x198b89(0xd5)](_0x3ca2f);}),jQuery[_0x1d293a(0xfb)](_0x2b5c35[_0x3c9dea][_0x1d293a(0xc0)],function(_0x368332,_0x13521d){var _0x4f61cc=_0x1d293a;jQuery(selectorElementType+_0x4f61cc(0xe6)+_0x3c9dea+')')[_0x4f61cc(0x102)](_0x2b5c35[_0x3c9dea][_0x4f61cc(0xc0)][_0x368332]);});if(dvKV){let _0x35fe17=document[_0x1d293a(0xcd)](selectorElementType)[_0x3c9dea];_0x35fe17&&(_0x35fe17[_0x1d293a(0xb4)][_0x1d293a(0xce)]('df-animation'),void _0x35fe17[_0x1d293a(0xd0)],_0x35fe17['classList']['add'](_0x1d293a(0x10f)));}}}jQuery(function(_0x127854){var _0x4d9365=_0x8745dd;console[_0x4d9365(0x101)]('Filtering\x20done\x20with\x20the\x20Divi\x20Filter\x20plugin,\x20get\x20the\x20free\x20version\x20here:'),console['log'](_0x4d9365(0xd1));dvServerResponse[0x0]!=undefined&&typeof dvServerResponse[0x0]!=='string'?dvKV=![]:dvServerResponse[0x0][_0x4d9365(0xfa)](_0x4d9365(0xf1))?dvKV=!![]:dvKV=![];_0x127854(_0x4d9365(0xe2))['before'](_0x4d9365(0xfd));_0x127854('.df-area')['length']>0x1&&!dvKV?console[_0x4d9365(0x101)](_0x4d9365(0xd3)):(_0x127854(_0x4d9365(0xe2))[_0x4d9365(0xfb)](function(_0x15f378,_0x1f2383){var _0x3568ef=_0x4d9365,_0x5b8ed0=_0x3568ef(0x111);if(_0x127854(this)[_0x3568ef(0xd6)]('et_section_specialty')&&dvKV){_0x5b8ed0=_0x3568ef(0xb8);if(_0x127854(this)[_0x3568ef(0xd6)](_0x3568ef(0xda))&&dvKV)_0x5b8ed0=_0x3568ef(0xb5);}else{if(_0x127854(this)[_0x3568ef(0xd6)]('df-rows')&&dvKV)_0x5b8ed0=_0x3568ef(0xc1);else{if(_0x127854(this)[_0x3568ef(0xd6)](_0x3568ef(0x109))){_0x5b8ed0=_0x3568ef(0x10d);if(_0x127854(_0x3568ef(0xe2)+filterNumberSelector+'\x20.et_pb_module')['hasClass'](_0x3568ef(0xdc))||_0x127854(_0x3568ef(0xe2)+filterNumberSelector+_0x3568ef(0xbe))[_0x3568ef(0xd6)](_0x3568ef(0xfc)))_0x5b8ed0=_0x3568ef(0xbb);}else{if(dvKV)_0x5b8ed0=_0x3568ef(0x107);else(_0x127854(this)[_0x3568ef(0xd6)](_0x3568ef(0xda))||_0x127854(this)['hasClass']('et_section_specialty'))&&console[_0x3568ef(0x101)](_0x3568ef(0xe0));}}}_0x127854(this)['find'](_0x5b8ed0)[_0x3568ef(0xfb)](function(_0xeb2e0e,_0x4aa177){var _0x1f41e4=_0x3568ef;let _0x27c902=_0xeb2e0e[_0x1f41e4(0x113)]()[_0x1f41e4(0xde)](0x3,'0');_0x127854(this)['addClass'](_0x1f41e4(0xbf)+_0x27c902),dvKV&&_0x127854(this)[_0x1f41e4(0xd5)](_0x1f41e4(0x10f));});if(dvKV){var _0x49fbfa=null,_0x53efea=getFilterNumber(_0x127854(this)),_0x41ae05='\x20';_0x53efea==null?(_0x53efea=0x1,_0x41ae05='\x20'):_0x41ae05=_0x3568ef(0xed)+_0x53efea;var _0x556edc=new URLSearchParams(window[_0x3568ef(0xc6)][_0x3568ef(0xca)]),_0x49fbfa=_0x556edc['get']('filter');if(_0x127854(_0x41ae05+'\x20.df-button.dfc-'+_0x49fbfa)[_0x3568ef(0x106)]==0x0){var _0x32e310=_0x127854(this)['attr'](_0x3568ef(0xbc));if(_0x32e310!==undefined){var _0x222e3c=_0x32e310['split'](/\s+/);classListFiltered=_0x127854[_0x3568ef(0xfb)](_0x222e3c,function(_0xb07f1,_0x2bef9c){var _0x46e492=_0x3568ef;(_0x2bef9c['indexOf']('dfs-')==0x0||_0x2bef9c[_0x46e492(0xc3)]('dfc-')==0x0)&&(_0x49fbfa=_0x2bef9c[_0x46e492(0xf9)](0x4));});}}_0x127854(_0x41ae05+_0x3568ef(0xd9)+_0x49fbfa)[_0x3568ef(0x106)]&&(_0x127854(this)[_0x3568ef(0xd6)](_0x3568ef(0xe5))?setTimeout(function(){var _0x508c37=_0x3568ef;_0x127854(_0x508c37(0xe1)+_0x49fbfa)[_0x508c37(0x105)]();},0x12c):($button=_0x127854(_0x41ae05+_0x3568ef(0xd9)+_0x49fbfa),getFilterData($button),filterElements($button)));}_0x127854(this)[_0x3568ef(0xd5)](_0x3568ef(0xe8));}),_0x127854(_0x4d9365(0x10b))['on']('click',function(_0x136922){_0x136922['preventDefault'](),getFilterData(_0x127854(this)),filterElements(_0x127854(this));}));;});
\ No newline at end of file
diff --git a/wp/wp-content/plugins/divifilter/df-style.css b/wp/wp-content/plugins/divifilter/df-style.css
deleted file mode 100644
index 40d415f0..00000000
--- a/wp/wp-content/plugins/divifilter/df-style.css
+++ /dev/null
@@ -1,60 +0,0 @@
-/* column filtering */
-html:not(.et-fb-root-ancestor) .df-area:not(.et_section_specialty):not(.df-rows):not(.df-post):not(.df-show) > .et_pb_row:not(.df-buttons) > .et_pb_column:not([class^='df-elementindex-']):not([class*=' df-elementindex-']) {
- margin-top: 0 !important;
- margin-bottom: 0 !important;
- padding-top: 0 !important;
- padding-bottom: 0 !important;
- height: 0 !important;
- box-shadow: none !important;
-}
-
-/* row filtering */
-html:not(.et-fb-root-ancestor) .df-area.df-rows:not(.et_section_specialty):not(.df-post):not(.df-show) > .et_pb_row:not(.df-buttons):not([class^='df-elementindex-']):not([class*=' df-elementindex-']) {
- margin-top: 0 !important;
- margin-bottom: 0 !important;
- padding-top: 0 !important;
- padding-bottom: 0 !important;
- height: 0 !important;
- box-shadow: none !important;
-}
-
-/* blog filtering */
-html:not(.et-fb-root-ancestor) .df-area.df-post:not(.et_section_specialty):not(.df-rows):not(.df-show) > .et_pb_row:not(.df-buttons) article:not([class^='df-elementindex-']):not([class*=' df-elementindex-']) {
- margin-top: 0 !important;
- margin-bottom: 0 !important;
- padding-top: 0 !important;
- padding-bottom: 0 !important;
- height: 0 !important;
- box-shadow: none !important;
- border: none !important;
-}
-
-/* hide elements while loading */
-/* column filtering */
-html:not(.et-fb-root-ancestor) .df-area:not(.et_section_specialty):not(.df-rows):not(.df-loaded) > .et_pb_row > .et_pb_column {
- visibility: hidden;
-}
-/* row filtering */
-html:not(.et-fb-root-ancestor) .df-area:not(.et_section_specialty).df-rows:not(.df-loaded) > .et_pb_row {
- visibility: hidden;
-}
-/* row filtering */
-html:not(.et-fb-root-ancestor) .df-area.df-post:not(.et_section_specialty).df-rows:not(.df-loaded) > .et_pb_row {
- visibility: hidden;
-}
-
-/* change cursor for df-button */
-.df-button {
- cursor: pointer;
-}
-
-/* fix hidden modules problem */
-.df-area .et_animated, .df-area:not(.et_section_specialty) .et-waypoint:not(.et_pb_counters) {
- opacity: 1 !important;
-}
-
-/* show gallery items */
-.df-area .et_pb_gallery_grid .et_pb_gallery_item,
-.df-area .et_pb_filterable_portfolio_grid .et_pb_portfolio_item {
- display: block !important;
-}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/divifilter/divifilter.php b/wp/wp-content/plugins/divifilter/divifilter.php
deleted file mode 100644
index 33c23475..00000000
--- a/wp/wp-content/plugins/divifilter/divifilter.php
+++ /dev/null
@@ -1,226 +0,0 @@
-dv_check();
-
- add_option('kV', false);
-
- add_option('dvServerResponse', "FREE");
-
- }
-
- public function my_plugin_fields() {
- /** Check permissions. */
- if ( ! current_user_can( 'manage_options' ) ) {
- return;
- }
-
- add_settings_section( 'divi_field_section', 'Divi Filter', false, 'divi-filter-menu' );
-
- add_settings_field( 'key_input', 'Key', [ $this, 'df_callback' ], 'divi-filter-menu', 'divi_field_section' );
-
- register_setting( 'divi-filter-menu', 'key_input' );
- }
-
- public function dv_check() {
-
- if((get_option('key_input') !== null) || (get_option('key_input') !== "")){
-
- $key_input = get_option('key_input');
-
- $current_domain = $_SERVER['SERVER_NAME'];
-
- // update domain and get feedback
- $server_output = wp_remote_get("https://danielvoelk.de/df-files/license/license-get-status.php?key=$key_input");
-
- if ( is_array( $server_output ) && ! is_wp_error( $server_output ) ) {
- $server_output = $server_output['body'];
- }
-
- if( !$server_output || !is_string($server_output) ) {
- update_option('kV', false);
- } else {
-
- if ( strpos($server_output, '200') !== false ) {
-
- if (strpos($server_output, 'PREMIUM') !== false) {
- update_option('kV', true);
- }
- else {
- update_option('kV', false);
- }
-
- update_option('dvServerResponse', $server_output);
-
- }
-
- }
-
-
- }
- else {
- update_option('kV', false);
- }
-
- }
-
- public function df_callback() {
- echo ' ';
-
- if((get_option('key_input') !== null) || (get_option('key_input') !== "")){
-
- $key_input = get_option('key_input');
-
- $current_domain = $_SERVER['SERVER_NAME'];
-
- // update domain and get feedback
- $server_output = wp_remote_get("https://danielvoelk.de/df-files/license/license-update-domain.php?key=$key_input&domain=$current_domain");
-
- if ( is_array( $server_output ) && ! is_wp_error( $server_output ) ) {
- $server_output = $server_output['body']; // use the content
-
- if ( strpos($server_output, '200') !== false ) {
-
- // show status
- echo "";
-
- if (strpos($server_output, 'PREMIUM') !== false) {
- update_option('kV', true);
- }
- else {
- update_option('kV', false);
- }
-
- update_option('dvServerResponse', $server_output);
-
- }
- else {
- // show status
- echo "";
- }
- }
-
-
- }
- else {
- update_option('kV', false);
- }
-
- }
-
- /** Step 2 (add item). */
- public function my_plugin_menu() {
- $page_title = 'Divi Filter Options';
- $menu_title = 'Divi Filter';
- $capability = 'manage_options'; // Only users that can manage options can access this menu item.
- $menu_slug = 'divi-filter'; // unique identifier.
- $callback = [ $this, 'my_plugin_options' ];
- add_options_page( $page_title, $menu_title, $capability, $menu_slug, $callback );
- }
-
- /** Step 3 (page html). */
- public function my_plugin_options() { ?>
-
- Go Premium';
- }
-
- return $links;
- }
-
- public function divifilter_add_files() {
-
- wp_register_script('df-script', plugins_url('df-script.js', __FILE__), array('jquery'),'3.8.4', true);
- wp_enqueue_script('df-script');
-
- $script_params = get_option('dvServerResponse');
- wp_localize_script( 'df-script', 'dvServerResponse', [ $script_params ] );
-
- wp_register_style('df-style', plugins_url('df-style.css', __FILE__), array(), '3.8.4');
- wp_enqueue_style('df-style');
-
- }
-
- public function add_documentation_link( $links, $file ) {
- if ( plugin_basename( __FILE__ ) == $file ) {
- $row_meta = array(
- 'docs' => 'Documentation '
- );
-
- return array_merge( $links, $row_meta );
- }
- return (array) $links;
- }
-
- }
-
-new DiviFilterPremium();
-
-// auto update
-require 'plugin-update-checker/plugin-update-checker.php';
-$myUpdateChecker = Puc_v4_Factory::buildUpdateChecker(
- 'https://danielvoelk.de/df-files/version.json',
- __FILE__ //Full path to the main plugin file or functions.php.
- // 'unique-plugin-or-theme-slug'
-);
\ No newline at end of file
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/.editorconfig b/wp/wp-content/plugins/divifilter/plugin-update-checker/.editorconfig
deleted file mode 100644
index 1b51cad9..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/.editorconfig
+++ /dev/null
@@ -1,15 +0,0 @@
-[*]
-charset=utf-8
-end_of_line=lf
-insert_final_newline=false
-indent_style=tab
-tab_width=4
-
-[{phpunit.xml.dist,*.jhm,*.xslt,*.xul,*.rng,*.xsl,*.xsd,*.ant,*.tld,*.fxml,*.jrxml,*.xml,*.jnlp,*.wsdl}]
-indent_style=space
-indent_size=4
-
-[*.svg]
-indent_style=space
-indent_size=4
-
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/.gitignore b/wp/wp-content/plugins/divifilter/plugin-update-checker/.gitignore
deleted file mode 100644
index 71260706..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/.gitignore
+++ /dev/null
@@ -1,40 +0,0 @@
-# Created by .ignore support plugin (hsz.mobi)
-### JetBrains template
-# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
-# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
-
-# The entire IDEA/PhpStorm directory
-.idea/
-
-# CMake
-cmake-build-*/
-
-# Mongo Explorer plugin
-.idea/**/mongoSettings.xml
-
-# File-based project format
-*.iws
-
-# IntelliJ
-out/
-
-# mpeltonen/sbt-idea plugin
-.idea_modules/
-
-# JIRA plugin
-atlassian-ide-plugin.xml
-
-# Cursive Clojure plugin
-.idea/replstate.xml
-
-# Crashlytics plugin (for Android Studio and IntelliJ)
-com_crashlytics_export_strings.xml
-crashlytics.properties
-crashlytics-build.properties
-fabric.properties
-
-# Editor-based Rest Client
-.idea/httpRequests
-
-# Android studio 3.1+ serialized cache file
-.idea/caches/build_file_checksums.ser
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4/Factory.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4/Factory.php
deleted file mode 100644
index ac21a55a..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4/Factory.php
+++ /dev/null
@@ -1,6 +0,0 @@
-rootDir = dirname(__FILE__) . '/';
- $nameParts = explode('_', __CLASS__, 3);
- $this->prefix = $nameParts[0] . '_' . $nameParts[1] . '_';
-
- $this->libraryDir = $this->rootDir . '../..';
- if ( !self::isPhar() ) {
- $this->libraryDir = realpath($this->libraryDir);
- }
- $this->libraryDir = $this->libraryDir . '/';
-
- $this->staticMap = array(
- 'PucReadmeParser' => 'vendor/PucReadmeParser.php',
- 'Parsedown' => 'vendor/Parsedown.php',
- 'Puc_v4_Factory' => 'Puc/v4/Factory.php',
- );
-
- spl_autoload_register(array($this, 'autoload'));
- }
-
- /**
- * Determine if this file is running as part of a Phar archive.
- *
- * @return bool
- */
- private static function isPhar() {
- //Check if the current file path starts with "phar://".
- static $pharProtocol = 'phar://';
- return (substr(__FILE__, 0, strlen($pharProtocol)) === $pharProtocol);
- }
-
- public function autoload($className) {
- if ( isset($this->staticMap[$className]) && file_exists($this->libraryDir . $this->staticMap[$className]) ) {
- /** @noinspection PhpIncludeInspection */
- include ($this->libraryDir . $this->staticMap[$className]);
- return;
- }
-
- if (strpos($className, $this->prefix) === 0) {
- $path = substr($className, strlen($this->prefix));
- $path = str_replace('_', '/', $path);
- $path = $this->rootDir . $path . '.php';
-
- if (file_exists($path)) {
- /** @noinspection PhpIncludeInspection */
- include $path;
- }
- }
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/DebugBar/Extension.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/DebugBar/Extension.php
deleted file mode 100644
index a39dac04..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/DebugBar/Extension.php
+++ /dev/null
@@ -1,190 +0,0 @@
-updateChecker = $updateChecker;
- if ( isset($panelClass) ) {
- $this->panelClass = $panelClass;
- }
-
- if ( version_compare(PHP_VERSION, '5.3', '>=') && (strpos($this->panelClass, '\\') === false) ) {
- $this->panelClass = __NAMESPACE__ . '\\' . $this->panelClass;
- }
-
- add_filter('debug_bar_panels', array($this, 'addDebugBarPanel'));
- add_action('debug_bar_enqueue_scripts', array($this, 'enqueuePanelDependencies'));
-
- add_action('wp_ajax_puc_v4_debug_check_now', array($this, 'ajaxCheckNow'));
- }
-
- /**
- * Register the PUC Debug Bar panel.
- *
- * @param array $panels
- * @return array
- */
- public function addDebugBarPanel($panels) {
- if ( $this->updateChecker->userCanInstallUpdates() ) {
- $panels[] = new $this->panelClass($this->updateChecker);
- }
- return $panels;
- }
-
- /**
- * Enqueue our Debug Bar scripts and styles.
- */
- public function enqueuePanelDependencies() {
- wp_enqueue_style(
- 'puc-debug-bar-style-v4',
- $this->getLibraryUrl("/css/puc-debug-bar.css"),
- array('debug-bar'),
- '20171124'
- );
-
- wp_enqueue_script(
- 'puc-debug-bar-js-v4',
- $this->getLibraryUrl("/js/debug-bar.js"),
- array('jquery'),
- '20201209'
- );
- }
-
- /**
- * Run an update check and output the result. Useful for making sure that
- * the update checking process works as expected.
- */
- public function ajaxCheckNow() {
- if ( $_POST['uid'] !== $this->updateChecker->getUniqueName('uid') ) {
- return;
- }
- $this->preAjaxRequest();
- $update = $this->updateChecker->checkForUpdates();
- if ( $update !== null ) {
- echo "An update is available:";
- echo '', htmlentities(print_r($update, true)), ' ';
- } else {
- echo 'No updates found.';
- }
-
- $errors = $this->updateChecker->getLastRequestApiErrors();
- if ( !empty($errors) ) {
- printf('The update checker encountered %d API error%s.
', count($errors), (count($errors) > 1) ? 's' : '');
-
- foreach (array_values($errors) as $num => $item) {
- $wpError = $item['error'];
- /** @var WP_Error $wpError */
- printf('%d) %s ', $num + 1, esc_html($wpError->get_error_message()));
-
- echo '';
- printf('Error code: %s ', esc_html($wpError->get_error_code()));
-
- if ( isset($item['url']) ) {
- printf('Requested URL: %s ', esc_html($item['url']));
- }
-
- if ( isset($item['httpResponse']) ) {
- if ( is_wp_error($item['httpResponse']) ) {
- $httpError = $item['httpResponse'];
- /** @var WP_Error $httpError */
- printf(
- 'WordPress HTTP API error: %s (%s) ',
- esc_html($httpError->get_error_message()),
- esc_html($httpError->get_error_code())
- );
- } else {
- //Status code.
- printf(
- 'HTTP status: %d %s ',
- wp_remote_retrieve_response_code($item['httpResponse']),
- wp_remote_retrieve_response_message($item['httpResponse'])
- );
-
- //Headers.
- echo 'Response headers: ';
- foreach (wp_remote_retrieve_headers($item['httpResponse']) as $name => $value) {
- printf("%s: %s\n", esc_html($name), esc_html($value));
- }
- echo ' ';
-
- //Body.
- $body = wp_remote_retrieve_body($item['httpResponse']);
- if ( $body === '' ) {
- $body = '(Empty response.)';
- } else if ( strlen($body) > self::RESPONSE_BODY_LENGTH_LIMIT ) {
- $length = strlen($body);
- $body = substr($body, 0, self::RESPONSE_BODY_LENGTH_LIMIT)
- . sprintf("\n(Long string truncated. Total length: %d bytes.)", $length);
- }
-
- printf('Response body: %s ', esc_html($body));
- }
- }
- echo '';
- }
- }
-
- exit;
- }
-
- /**
- * Check access permissions and enable error display (for debugging).
- */
- protected function preAjaxRequest() {
- if ( !$this->updateChecker->userCanInstallUpdates() ) {
- die('Access denied');
- }
- check_ajax_referer('puc-ajax');
-
- error_reporting(E_ALL);
- @ini_set('display_errors', 'On');
- }
-
- /**
- * Remove hooks that were added by this extension.
- */
- public function removeHooks() {
- remove_filter('debug_bar_panels', array($this, 'addDebugBarPanel'));
- remove_action('debug_bar_enqueue_scripts', array($this, 'enqueuePanelDependencies'));
- remove_action('wp_ajax_puc_v4_debug_check_now', array($this, 'ajaxCheckNow'));
- }
-
- /**
- * @param string $filePath
- * @return string
- */
- private function getLibraryUrl($filePath) {
- $absolutePath = realpath(dirname(__FILE__) . '/../../../' . ltrim($filePath, '/'));
-
- //Where is the library located inside the WordPress directory structure?
- $absolutePath = Puc_v4p11_Factory::normalizePath($absolutePath);
-
- $pluginDir = Puc_v4p11_Factory::normalizePath(WP_PLUGIN_DIR);
- $muPluginDir = Puc_v4p11_Factory::normalizePath(WPMU_PLUGIN_DIR);
- $themeDir = Puc_v4p11_Factory::normalizePath(get_theme_root());
-
- if ( (strpos($absolutePath, $pluginDir) === 0) || (strpos($absolutePath, $muPluginDir) === 0) ) {
- //It's part of a plugin.
- return plugins_url(basename($absolutePath), $absolutePath);
- } else if ( strpos($absolutePath, $themeDir) === 0 ) {
- //It's part of a theme.
- $relativePath = substr($absolutePath, strlen($themeDir) + 1);
- $template = substr($relativePath, 0, strpos($relativePath, '/'));
- $baseUrl = get_theme_root_uri($template);
-
- if ( !empty($baseUrl) && $relativePath ) {
- return $baseUrl . '/' . $relativePath;
- }
- }
-
- return '';
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/DebugBar/Panel.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/DebugBar/Panel.php
deleted file mode 100644
index 666cdf44..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/DebugBar/Panel.php
+++ /dev/null
@@ -1,165 +0,0 @@
-';
-
- public function __construct($updateChecker) {
- $this->updateChecker = $updateChecker;
- $title = sprintf(
- '',
- esc_attr($this->updateChecker->getUniqueName('uid')),
- $this->updateChecker->slug
- );
- parent::__construct($title);
- }
-
- public function render() {
- printf(
- '',
- esc_attr($this->updateChecker->getUniqueName('debug-bar-panel')),
- esc_attr($this->updateChecker->slug),
- esc_attr($this->updateChecker->getUniqueName('uid')),
- esc_attr(wp_create_nonce('puc-ajax'))
- );
-
- $this->displayConfiguration();
- $this->displayStatus();
- $this->displayCurrentUpdate();
-
- echo '
';
- }
-
- private function displayConfiguration() {
- echo 'Configuration ';
- echo '';
- $this->displayConfigHeader();
- $this->row('Slug', htmlentities($this->updateChecker->slug));
- $this->row('DB option', htmlentities($this->updateChecker->optionName));
-
- $requestInfoButton = $this->getMetadataButton();
- $this->row('Metadata URL', htmlentities($this->updateChecker->metadataUrl) . ' ' . $requestInfoButton . $this->responseBox);
-
- $scheduler = $this->updateChecker->scheduler;
- if ( $scheduler->checkPeriod > 0 ) {
- $this->row('Automatic checks', 'Every ' . $scheduler->checkPeriod . ' hours');
- } else {
- $this->row('Automatic checks', 'Disabled');
- }
-
- if ( isset($scheduler->throttleRedundantChecks) ) {
- if ( $scheduler->throttleRedundantChecks && ($scheduler->checkPeriod > 0) ) {
- $this->row(
- 'Throttling',
- sprintf(
- 'Enabled. If an update is already available, check for updates every %1$d hours instead of every %2$d hours.',
- $scheduler->throttledCheckPeriod,
- $scheduler->checkPeriod
- )
- );
- } else {
- $this->row('Throttling', 'Disabled');
- }
- }
-
- $this->updateChecker->onDisplayConfiguration($this);
-
- echo '
';
- }
-
- protected function displayConfigHeader() {
- //Do nothing. This should be implemented in subclasses.
- }
-
- protected function getMetadataButton() {
- return '';
- }
-
- private function displayStatus() {
- echo 'Status ';
- echo '';
- $state = $this->updateChecker->getUpdateState();
- $checkNowButton = '';
- if ( function_exists('get_submit_button') ) {
- $checkNowButton = get_submit_button(
- 'Check Now',
- 'secondary',
- 'puc-check-now-button',
- false,
- array('id' => $this->updateChecker->getUniqueName('check-now-button'))
- );
- }
-
- if ( $state->getLastCheck() > 0 ) {
- $this->row('Last check', $this->formatTimeWithDelta($state->getLastCheck()) . ' ' . $checkNowButton . $this->responseBox);
- } else {
- $this->row('Last check', 'Never');
- }
-
- $nextCheck = wp_next_scheduled($this->updateChecker->scheduler->getCronHookName());
- $this->row('Next automatic check', $this->formatTimeWithDelta($nextCheck));
-
- if ( $state->getCheckedVersion() !== '' ) {
- $this->row('Checked version', htmlentities($state->getCheckedVersion()));
- $this->row('Cached update', $state->getUpdate());
- }
- $this->row('Update checker class', htmlentities(get_class($this->updateChecker)));
- echo '
';
- }
-
- private function displayCurrentUpdate() {
- $update = $this->updateChecker->getUpdate();
- if ( $update !== null ) {
- echo 'An Update Is Available ';
- echo '';
- $fields = $this->getUpdateFields();
- foreach($fields as $field) {
- if ( property_exists($update, $field) ) {
- $this->row(ucwords(str_replace('_', ' ', $field)), htmlentities($update->$field));
- }
- }
- echo '
';
- } else {
- echo 'No updates currently available ';
- }
- }
-
- protected function getUpdateFields() {
- return array('version', 'download_url', 'slug',);
- }
-
- private function formatTimeWithDelta($unixTime) {
- if ( empty($unixTime) ) {
- return 'Never';
- }
-
- $delta = time() - $unixTime;
- $result = human_time_diff(time(), $unixTime);
- if ( $delta < 0 ) {
- $result = 'after ' . $result;
- } else {
- $result = $result . ' ago';
- }
- $result .= ' (' . $this->formatTimestamp($unixTime) . ')';
- return $result;
- }
-
- private function formatTimestamp($unixTime) {
- return gmdate('Y-m-d H:i:s', $unixTime + (get_option('gmt_offset') * 3600));
- }
-
- public function row($name, $value) {
- if ( is_object($value) || is_array($value) ) {
- $value = '' . htmlentities(print_r($value, true)) . ' ';
- } else if ($value === null) {
- $value = 'null';
- }
- printf('%1$s %2$s ', $name, $value);
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/DebugBar/PluginExtension.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/DebugBar/PluginExtension.php
deleted file mode 100644
index edc4a2fa..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/DebugBar/PluginExtension.php
+++ /dev/null
@@ -1,33 +0,0 @@
-updateChecker->getUniqueName('uid') ) {
- return;
- }
- $this->preAjaxRequest();
- $info = $this->updateChecker->requestInfo();
- if ( $info !== null ) {
- echo 'Successfully retrieved plugin info from the metadata URL:';
- echo '', htmlentities(print_r($info, true)), ' ';
- } else {
- echo 'Failed to retrieve plugin info from the metadata URL.';
- }
- exit;
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/DebugBar/PluginPanel.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/DebugBar/PluginPanel.php
deleted file mode 100644
index fa98600b..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/DebugBar/PluginPanel.php
+++ /dev/null
@@ -1,38 +0,0 @@
-row('Plugin file', htmlentities($this->updateChecker->pluginFile));
- parent::displayConfigHeader();
- }
-
- protected function getMetadataButton() {
- $requestInfoButton = '';
- if ( function_exists('get_submit_button') ) {
- $requestInfoButton = get_submit_button(
- 'Request Info',
- 'secondary',
- 'puc-request-info-button',
- false,
- array('id' => $this->updateChecker->getUniqueName('request-info-button'))
- );
- }
- return $requestInfoButton;
- }
-
- protected function getUpdateFields() {
- return array_merge(
- parent::getUpdateFields(),
- array('homepage', 'upgrade_notice', 'tested',)
- );
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/DebugBar/ThemePanel.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/DebugBar/ThemePanel.php
deleted file mode 100644
index 77f45584..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/DebugBar/ThemePanel.php
+++ /dev/null
@@ -1,21 +0,0 @@
-row('Theme directory', htmlentities($this->updateChecker->directoryName));
- parent::displayConfigHeader();
- }
-
- protected function getUpdateFields() {
- return array_merge(parent::getUpdateFields(), array('details_url'));
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Factory.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Factory.php
deleted file mode 100644
index 3541042e..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Factory.php
+++ /dev/null
@@ -1,365 +0,0 @@
- '',
- 'slug' => '',
- 'checkPeriod' => 12,
- 'optionName' => '',
- 'muPluginFile' => '',
- );
- $args = array_merge($defaults, array_intersect_key($args, $defaults));
- extract($args, EXTR_SKIP);
-
- //Check for the service URI
- if ( empty($metadataUrl) ) {
- $metadataUrl = self::getServiceURI($fullPath);
- }
-
- /** @noinspection PhpUndefinedVariableInspection These variables are created by extract(), above. */
- return self::buildUpdateChecker($metadataUrl, $fullPath, $slug, $checkPeriod, $optionName, $muPluginFile);
- }
-
- /**
- * Create a new instance of the update checker.
- *
- * This method automatically detects if you're using it for a plugin or a theme and chooses
- * the appropriate implementation for your update source (JSON file, GitHub, BitBucket, etc).
- *
- * @see Puc_v4p11_UpdateChecker::__construct
- *
- * @param string $metadataUrl The URL of the metadata file, a GitHub repository, or another supported update source.
- * @param string $fullPath Full path to the main plugin file or to the theme directory.
- * @param string $slug Custom slug. Defaults to the name of the main plugin file or the theme directory.
- * @param int $checkPeriod How often to check for updates (in hours).
- * @param string $optionName Where to store book-keeping info about update checks.
- * @param string $muPluginFile The plugin filename relative to the mu-plugins directory.
- * @return Puc_v4p11_Plugin_UpdateChecker|Puc_v4p11_Theme_UpdateChecker|Puc_v4p11_Vcs_BaseChecker
- */
- public static function buildUpdateChecker($metadataUrl, $fullPath, $slug = '', $checkPeriod = 12, $optionName = '', $muPluginFile = '') {
- $fullPath = self::normalizePath($fullPath);
- $id = null;
-
- //Plugin or theme?
- $themeDirectory = self::getThemeDirectoryName($fullPath);
- if ( self::isPluginFile($fullPath) ) {
- $type = 'Plugin';
- $id = $fullPath;
- } else if ( $themeDirectory !== null ) {
- $type = 'Theme';
- $id = $themeDirectory;
- } else {
- throw new RuntimeException(sprintf(
- 'The update checker cannot determine if "%s" is a plugin or a theme. ' .
- 'This is a bug. Please contact the PUC developer.',
- htmlentities($fullPath)
- ));
- }
-
- //Which hosting service does the URL point to?
- $service = self::getVcsService($metadataUrl);
-
- $apiClass = null;
- if ( empty($service) ) {
- //The default is to get update information from a remote JSON file.
- $checkerClass = $type . '_UpdateChecker';
- } else {
- //You can also use a VCS repository like GitHub.
- $checkerClass = 'Vcs_' . $type . 'UpdateChecker';
- $apiClass = $service . 'Api';
- }
-
- $checkerClass = self::getCompatibleClassVersion($checkerClass);
- if ( $checkerClass === null ) {
- trigger_error(
- sprintf(
- 'PUC %s does not support updates for %ss %s',
- htmlentities(self::$latestCompatibleVersion),
- strtolower($type),
- $service ? ('hosted on ' . htmlentities($service)) : 'using JSON metadata'
- ),
- E_USER_ERROR
- );
- return null;
- }
-
- //Add the current namespace to the class name(s).
- if ( version_compare(PHP_VERSION, '5.3', '>=') ) {
- $checkerClass = __NAMESPACE__ . '\\' . $checkerClass;
- }
-
- if ( !isset($apiClass) ) {
- //Plain old update checker.
- return new $checkerClass($metadataUrl, $id, $slug, $checkPeriod, $optionName, $muPluginFile);
- } else {
- //VCS checker + an API client.
- $apiClass = self::getCompatibleClassVersion($apiClass);
- if ( $apiClass === null ) {
- trigger_error(sprintf(
- 'PUC %s does not support %s',
- htmlentities(self::$latestCompatibleVersion),
- htmlentities($service)
- ), E_USER_ERROR);
- return null;
- }
-
- if ( version_compare(PHP_VERSION, '5.3', '>=') && (strpos($apiClass, '\\') === false) ) {
- $apiClass = __NAMESPACE__ . '\\' . $apiClass;
- }
-
- return new $checkerClass(
- new $apiClass($metadataUrl),
- $id,
- $slug,
- $checkPeriod,
- $optionName,
- $muPluginFile
- );
- }
- }
-
- /**
- *
- * Normalize a filesystem path. Introduced in WP 3.9.
- * Copying here allows use of the class on earlier versions.
- * This version adapted from WP 4.8.2 (unchanged since 4.5.0)
- *
- * @param string $path Path to normalize.
- * @return string Normalized path.
- */
- public static function normalizePath($path) {
- if ( function_exists('wp_normalize_path') ) {
- return wp_normalize_path($path);
- }
- $path = str_replace('\\', '/', $path);
- $path = preg_replace('|(?<=.)/+|', '/', $path);
- if ( substr($path, 1, 1) === ':' ) {
- $path = ucfirst($path);
- }
- return $path;
- }
-
- /**
- * Check if the path points to a plugin file.
- *
- * @param string $absolutePath Normalized path.
- * @return bool
- */
- protected static function isPluginFile($absolutePath) {
- //Is the file inside the "plugins" or "mu-plugins" directory?
- $pluginDir = self::normalizePath(WP_PLUGIN_DIR);
- $muPluginDir = self::normalizePath(WPMU_PLUGIN_DIR);
- if ( (strpos($absolutePath, $pluginDir) === 0) || (strpos($absolutePath, $muPluginDir) === 0) ) {
- return true;
- }
-
- //Is it a file at all? Caution: is_file() can fail if the parent dir. doesn't have the +x permission set.
- if ( !is_file($absolutePath) ) {
- return false;
- }
-
- //Does it have a valid plugin header?
- //This is a last-ditch check for plugins symlinked from outside the WP root.
- if ( function_exists('get_file_data') ) {
- $headers = get_file_data($absolutePath, array('Name' => 'Plugin Name'), 'plugin');
- return !empty($headers['Name']);
- }
-
- return false;
- }
-
- /**
- * Get the name of the theme's directory from a full path to a file inside that directory.
- * E.g. "/abc/public_html/wp-content/themes/foo/whatever.php" => "foo".
- *
- * Note that subdirectories are currently not supported. For example,
- * "/xyz/wp-content/themes/my-theme/includes/whatever.php" => NULL.
- *
- * @param string $absolutePath Normalized path.
- * @return string|null Directory name, or NULL if the path doesn't point to a theme.
- */
- protected static function getThemeDirectoryName($absolutePath) {
- if ( is_file($absolutePath) ) {
- $absolutePath = dirname($absolutePath);
- }
-
- if ( file_exists($absolutePath . '/style.css') ) {
- return basename($absolutePath);
- }
- return null;
- }
-
- /**
- * Get the service URI from the file header.
- *
- * @param string $fullPath
- * @return string
- */
- private static function getServiceURI($fullPath) {
- //Look for the URI
- if ( is_readable($fullPath) ) {
- $seek = array(
- 'github' => 'GitHub URI',
- 'gitlab' => 'GitLab URI',
- 'bucket' => 'BitBucket URI',
- );
- $seek = apply_filters('puc_get_source_uri', $seek);
- $data = get_file_data($fullPath, $seek);
- foreach ($data as $key => $uri) {
- if ( $uri ) {
- return $uri;
- }
- }
- }
-
- //URI was not found so throw an error.
- throw new RuntimeException(
- sprintf('Unable to locate URI in header of "%s"', htmlentities($fullPath))
- );
- }
-
- /**
- * Get the name of the hosting service that the URL points to.
- *
- * @param string $metadataUrl
- * @return string|null
- */
- private static function getVcsService($metadataUrl) {
- $service = null;
-
- //Which hosting service does the URL point to?
- $host = parse_url($metadataUrl, PHP_URL_HOST);
- $path = parse_url($metadataUrl, PHP_URL_PATH);
-
- //Check if the path looks like "/user-name/repository".
- //For GitLab.com it can also be "/user/group1/group2/.../repository".
- $repoRegex = '@^/?([^/]+?)/([^/#?&]+?)/?$@';
- if ( $host === 'gitlab.com' ) {
- $repoRegex = '@^/?(?:[^/#?&]++/){1,20}(?:[^/#?&]++)/?$@';
- }
- if ( preg_match($repoRegex, $path) ) {
- $knownServices = array(
- 'github.com' => 'GitHub',
- 'bitbucket.org' => 'BitBucket',
- 'gitlab.com' => 'GitLab',
- );
- if ( isset($knownServices[$host]) ) {
- $service = $knownServices[$host];
- }
- }
-
- return apply_filters('puc_get_vcs_service', $service, $host, $path, $metadataUrl);
- }
-
- /**
- * Get the latest version of the specified class that has the same major version number
- * as this factory class.
- *
- * @param string $class Partial class name.
- * @return string|null Full class name.
- */
- protected static function getCompatibleClassVersion($class) {
- if ( isset(self::$classVersions[$class][self::$latestCompatibleVersion]) ) {
- return self::$classVersions[$class][self::$latestCompatibleVersion];
- }
- return null;
- }
-
- /**
- * Get the specific class name for the latest available version of a class.
- *
- * @param string $class
- * @return null|string
- */
- public static function getLatestClassVersion($class) {
- if ( !self::$sorted ) {
- self::sortVersions();
- }
-
- if ( isset(self::$classVersions[$class]) ) {
- return reset(self::$classVersions[$class]);
- } else {
- return null;
- }
- }
-
- /**
- * Sort available class versions in descending order (i.e. newest first).
- */
- protected static function sortVersions() {
- foreach ( self::$classVersions as $class => $versions ) {
- uksort($versions, array(__CLASS__, 'compareVersions'));
- self::$classVersions[$class] = $versions;
- }
- self::$sorted = true;
- }
-
- protected static function compareVersions($a, $b) {
- return -version_compare($a, $b);
- }
-
- /**
- * Register a version of a class.
- *
- * @access private This method is only for internal use by the library.
- *
- * @param string $generalClass Class name without version numbers, e.g. 'PluginUpdateChecker'.
- * @param string $versionedClass Actual class name, e.g. 'PluginUpdateChecker_1_2'.
- * @param string $version Version number, e.g. '1.2'.
- */
- public static function addVersion($generalClass, $versionedClass, $version) {
- if ( empty(self::$myMajorVersion) ) {
- $nameParts = explode('_', __CLASS__, 3);
- self::$myMajorVersion = substr(ltrim($nameParts[1], 'v'), 0, 1);
- }
-
- //Store the greatest version number that matches our major version.
- $components = explode('.', $version);
- if ( $components[0] === self::$myMajorVersion ) {
-
- if (
- empty(self::$latestCompatibleVersion)
- || version_compare($version, self::$latestCompatibleVersion, '>')
- ) {
- self::$latestCompatibleVersion = $version;
- }
-
- }
-
- if ( !isset(self::$classVersions[$generalClass]) ) {
- self::$classVersions[$generalClass] = array();
- }
- self::$classVersions[$generalClass][$version] = $versionedClass;
- self::$sorted = false;
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/InstalledPackage.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/InstalledPackage.php
deleted file mode 100644
index 920159b6..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/InstalledPackage.php
+++ /dev/null
@@ -1,103 +0,0 @@
-updateChecker = $updateChecker;
- }
-
- /**
- * Get the currently installed version of the plugin or theme.
- *
- * @return string|null Version number.
- */
- abstract public function getInstalledVersion();
-
- /**
- * Get the full path of the plugin or theme directory (without a trailing slash).
- *
- * @return string
- */
- abstract public function getAbsoluteDirectoryPath();
-
- /**
- * Check whether a regular file exists in the package's directory.
- *
- * @param string $relativeFileName File name relative to the package directory.
- * @return bool
- */
- public function fileExists($relativeFileName) {
- return is_file(
- $this->getAbsoluteDirectoryPath()
- . DIRECTORY_SEPARATOR
- . ltrim($relativeFileName, '/\\')
- );
- }
-
- /* -------------------------------------------------------------------
- * File header parsing
- * -------------------------------------------------------------------
- */
-
- /**
- * Parse plugin or theme metadata from the header comment.
- *
- * This is basically a simplified version of the get_file_data() function from /wp-includes/functions.php.
- * It's intended as a utility for subclasses that detect updates by parsing files in a VCS.
- *
- * @param string|null $content File contents.
- * @return string[]
- */
- public function getFileHeader($content) {
- $content = (string)$content;
-
- //WordPress only looks at the first 8 KiB of the file, so we do the same.
- $content = substr($content, 0, 8192);
- //Normalize line endings.
- $content = str_replace("\r", "\n", $content);
-
- $headers = $this->getHeaderNames();
- $results = array();
- foreach ($headers as $field => $name) {
- $success = preg_match('/^[ \t\/*#@]*' . preg_quote($name, '/') . ':(.*)$/mi', $content, $matches);
-
- if ( ($success === 1) && $matches[1] ) {
- $value = $matches[1];
- if ( function_exists('_cleanup_header_comment') ) {
- $value = _cleanup_header_comment($value);
- }
- $results[$field] = $value;
- } else {
- $results[$field] = '';
- }
- }
-
- return $results;
- }
-
- /**
- * @return array Format: ['HeaderKey' => 'Header Name']
- */
- abstract protected function getHeaderNames();
-
- /**
- * Get the value of a specific plugin or theme header.
- *
- * @param string $headerName
- * @return string Either the value of the header, or an empty string if the header doesn't exist.
- */
- abstract public function getHeaderValue($headerName);
-
- }
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Metadata.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Metadata.php
deleted file mode 100644
index ddba0714..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Metadata.php
+++ /dev/null
@@ -1,132 +0,0 @@
-validateMetadata($apiResponse);
- if ( is_wp_error($valid) ){
- do_action('puc_api_error', $valid);
- trigger_error($valid->get_error_message(), E_USER_NOTICE);
- return false;
- }
-
- foreach(get_object_vars($apiResponse) as $key => $value){
- $target->$key = $value;
- }
-
- return true;
- }
-
- /**
- * No validation by default! Subclasses should check that the required fields are present.
- *
- * @param StdClass $apiResponse
- * @return bool|WP_Error
- */
- protected function validateMetadata(/** @noinspection PhpUnusedParameterInspection */ $apiResponse) {
- return true;
- }
-
- /**
- * Create a new instance by copying the necessary fields from another object.
- *
- * @abstract
- * @param StdClass|self $object The source object.
- * @return self The new copy.
- */
- public static function fromObject(/** @noinspection PhpUnusedParameterInspection */ $object) {
- throw new LogicException('The ' . __METHOD__ . ' method must be implemented by subclasses');
- }
-
- /**
- * Create an instance of StdClass that can later be converted back to an
- * update or info container. Useful for serialization and caching, as it
- * avoids the "incomplete object" problem if the cached value is loaded
- * before this class.
- *
- * @return StdClass
- */
- public function toStdClass() {
- $object = new stdClass();
- $this->copyFields($this, $object);
- return $object;
- }
-
- /**
- * Transform the metadata into the format used by WordPress core.
- *
- * @return object
- */
- abstract public function toWpFormat();
-
- /**
- * Copy known fields from one object to another.
- *
- * @param StdClass|self $from
- * @param StdClass|self $to
- */
- protected function copyFields($from, $to) {
- $fields = $this->getFieldNames();
-
- if ( property_exists($from, 'slug') && !empty($from->slug) ) {
- //Let plugins add extra fields without having to create subclasses.
- $fields = apply_filters($this->getPrefixedFilter('retain_fields') . '-' . $from->slug, $fields);
- }
-
- foreach ($fields as $field) {
- if ( property_exists($from, $field) ) {
- $to->$field = $from->$field;
- }
- }
- }
-
- /**
- * @return string[]
- */
- protected function getFieldNames() {
- return array();
- }
-
- /**
- * @param string $tag
- * @return string
- */
- protected function getPrefixedFilter($tag) {
- return 'puc_' . $tag;
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/OAuthSignature.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/OAuthSignature.php
deleted file mode 100644
index 726befaf..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/OAuthSignature.php
+++ /dev/null
@@ -1,100 +0,0 @@
-consumerKey = $consumerKey;
- $this->consumerSecret = $consumerSecret;
- }
-
- /**
- * Sign a URL using OAuth 1.0.
- *
- * @param string $url The URL to be signed. It may contain query parameters.
- * @param string $method HTTP method such as "GET", "POST" and so on.
- * @return string The signed URL.
- */
- public function sign($url, $method = 'GET') {
- $parameters = array();
-
- //Parse query parameters.
- $query = parse_url($url, PHP_URL_QUERY);
- if ( !empty($query) ) {
- parse_str($query, $parsedParams);
- if ( is_array($parameters) ) {
- $parameters = $parsedParams;
- }
- //Remove the query string from the URL. We'll replace it later.
- $url = substr($url, 0, strpos($url, '?'));
- }
-
- $parameters = array_merge(
- $parameters,
- array(
- 'oauth_consumer_key' => $this->consumerKey,
- 'oauth_nonce' => $this->nonce(),
- 'oauth_signature_method' => 'HMAC-SHA1',
- 'oauth_timestamp' => time(),
- 'oauth_version' => '1.0',
- )
- );
- unset($parameters['oauth_signature']);
-
- //Parameters must be sorted alphabetically before signing.
- ksort($parameters);
-
- //The most complicated part of the request - generating the signature.
- //The string to sign contains the HTTP method, the URL path, and all of
- //our query parameters. Everything is URL encoded. Then we concatenate
- //them with ampersands into a single string to hash.
- $encodedVerb = urlencode($method);
- $encodedUrl = urlencode($url);
- $encodedParams = urlencode(http_build_query($parameters, '', '&'));
-
- $stringToSign = $encodedVerb . '&' . $encodedUrl . '&' . $encodedParams;
-
- //Since we only have one OAuth token (the consumer secret) we only have
- //to use it as our HMAC key. However, we still have to append an & to it
- //as if we were using it with additional tokens.
- $secret = urlencode($this->consumerSecret) . '&';
-
- //The signature is a hash of the consumer key and the base string. Note
- //that we have to get the raw output from hash_hmac and base64 encode
- //the binary data result.
- $parameters['oauth_signature'] = base64_encode(hash_hmac('sha1', $stringToSign, $secret, true));
-
- return ($url . '?' . http_build_query($parameters));
- }
-
- /**
- * Generate a random nonce.
- *
- * @return string
- */
- private function nonce() {
- $mt = microtime();
-
- $rand = null;
- if ( is_callable('random_bytes') ) {
- try {
- $rand = random_bytes(16);
- } catch (Exception $ex) {
- //Fall back to mt_rand (below).
- }
- }
- if ( $rand === null ) {
- $rand = mt_rand();
- }
-
- return md5($mt . '_' . $rand);
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Plugin/Info.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Plugin/Info.php
deleted file mode 100644
index f797e0a8..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Plugin/Info.php
+++ /dev/null
@@ -1,132 +0,0 @@
-sections = (array)$instance->sections;
- $instance->icons = (array)$instance->icons;
-
- return $instance;
- }
-
- /**
- * Very, very basic validation.
- *
- * @param StdClass $apiResponse
- * @return bool|WP_Error
- */
- protected function validateMetadata($apiResponse) {
- if (
- !isset($apiResponse->name, $apiResponse->version)
- || empty($apiResponse->name)
- || empty($apiResponse->version)
- ) {
- return new WP_Error(
- 'puc-invalid-metadata',
- "The plugin metadata file does not contain the required 'name' and/or 'version' keys."
- );
- }
- return true;
- }
-
-
- /**
- * Transform plugin info into the format used by the native WordPress.org API
- *
- * @return object
- */
- public function toWpFormat(){
- $info = new stdClass;
-
- //The custom update API is built so that many fields have the same name and format
- //as those returned by the native WordPress.org API. These can be assigned directly.
- $sameFormat = array(
- 'name', 'slug', 'version', 'requires', 'tested', 'rating', 'upgrade_notice',
- 'num_ratings', 'downloaded', 'active_installs', 'homepage', 'last_updated',
- 'requires_php',
- );
- foreach($sameFormat as $field){
- if ( isset($this->$field) ) {
- $info->$field = $this->$field;
- } else {
- $info->$field = null;
- }
- }
-
- //Other fields need to be renamed and/or transformed.
- $info->download_link = $this->download_url;
- $info->author = $this->getFormattedAuthor();
- $info->sections = array_merge(array('description' => ''), $this->sections);
-
- if ( !empty($this->banners) ) {
- //WP expects an array with two keys: "high" and "low". Both are optional.
- //Docs: https://wordpress.org/plugins/about/faq/#banners
- $info->banners = is_object($this->banners) ? get_object_vars($this->banners) : $this->banners;
- $info->banners = array_intersect_key($info->banners, array('high' => true, 'low' => true));
- }
-
- return $info;
- }
-
- protected function getFormattedAuthor() {
- if ( !empty($this->author_homepage) ){
- /** @noinspection HtmlUnknownTarget */
- return sprintf('%s ', $this->author_homepage, $this->author);
- }
- return $this->author;
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Plugin/Package.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Plugin/Package.php
deleted file mode 100644
index 23d8ee13..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Plugin/Package.php
+++ /dev/null
@@ -1,184 +0,0 @@
-pluginAbsolutePath = $pluginAbsolutePath;
- $this->pluginFile = plugin_basename($this->pluginAbsolutePath);
-
- parent::__construct($updateChecker);
-
- //Clear the version number cache when something - anything - is upgraded or WP clears the update cache.
- add_filter('upgrader_post_install', array($this, 'clearCachedVersion'));
- add_action('delete_site_transient_update_plugins', array($this, 'clearCachedVersion'));
- }
-
- public function getInstalledVersion() {
- if ( isset($this->cachedInstalledVersion) ) {
- return $this->cachedInstalledVersion;
- }
-
- $pluginHeader = $this->getPluginHeader();
- if ( isset($pluginHeader['Version']) ) {
- $this->cachedInstalledVersion = $pluginHeader['Version'];
- return $pluginHeader['Version'];
- } else {
- //This can happen if the filename points to something that is not a plugin.
- $this->updateChecker->triggerError(
- sprintf(
- "Can't to read the Version header for '%s'. The filename is incorrect or is not a plugin.",
- $this->updateChecker->pluginFile
- ),
- E_USER_WARNING
- );
- return null;
- }
- }
-
- /**
- * Clear the cached plugin version. This method can be set up as a filter (hook) and will
- * return the filter argument unmodified.
- *
- * @param mixed $filterArgument
- * @return mixed
- */
- public function clearCachedVersion($filterArgument = null) {
- $this->cachedInstalledVersion = null;
- return $filterArgument;
- }
-
- public function getAbsoluteDirectoryPath() {
- return dirname($this->pluginAbsolutePath);
- }
-
- /**
- * Get the value of a specific plugin or theme header.
- *
- * @param string $headerName
- * @param string $defaultValue
- * @return string Either the value of the header, or $defaultValue if the header doesn't exist or is empty.
- */
- public function getHeaderValue($headerName, $defaultValue = '') {
- $headers = $this->getPluginHeader();
- if ( isset($headers[$headerName]) && ($headers[$headerName] !== '') ) {
- return $headers[$headerName];
- }
- return $defaultValue;
- }
-
- protected function getHeaderNames() {
- return array(
- 'Name' => 'Plugin Name',
- 'PluginURI' => 'Plugin URI',
- 'Version' => 'Version',
- 'Description' => 'Description',
- 'Author' => 'Author',
- 'AuthorURI' => 'Author URI',
- 'TextDomain' => 'Text Domain',
- 'DomainPath' => 'Domain Path',
- 'Network' => 'Network',
-
- //The newest WordPress version that this plugin requires or has been tested with.
- //We support several different formats for compatibility with other libraries.
- 'Tested WP' => 'Tested WP',
- 'Requires WP' => 'Requires WP',
- 'Tested up to' => 'Tested up to',
- 'Requires at least' => 'Requires at least',
- );
- }
-
- /**
- * Get the translated plugin title.
- *
- * @return string
- */
- public function getPluginTitle() {
- $title = '';
- $header = $this->getPluginHeader();
- if ( $header && !empty($header['Name']) && isset($header['TextDomain']) ) {
- $title = translate($header['Name'], $header['TextDomain']);
- }
- return $title;
- }
-
- /**
- * Get plugin's metadata from its file header.
- *
- * @return array
- */
- public function getPluginHeader() {
- if ( !is_file($this->pluginAbsolutePath) ) {
- //This can happen if the plugin filename is wrong.
- $this->updateChecker->triggerError(
- sprintf(
- "Can't to read the plugin header for '%s'. The file does not exist.",
- $this->updateChecker->pluginFile
- ),
- E_USER_WARNING
- );
- return array();
- }
-
- if ( !function_exists('get_plugin_data') ) {
- /** @noinspection PhpIncludeInspection */
- require_once(ABSPATH . '/wp-admin/includes/plugin.php');
- }
- return get_plugin_data($this->pluginAbsolutePath, false, false);
- }
-
- public function removeHooks() {
- remove_filter('upgrader_post_install', array($this, 'clearCachedVersion'));
- remove_action('delete_site_transient_update_plugins', array($this, 'clearCachedVersion'));
- }
-
- /**
- * Check if the plugin file is inside the mu-plugins directory.
- *
- * @return bool
- */
- public function isMuPlugin() {
- static $cachedResult = null;
-
- if ( $cachedResult === null ) {
- if ( !defined('WPMU_PLUGIN_DIR') || !is_string(WPMU_PLUGIN_DIR) ) {
- $cachedResult = false;
- return $cachedResult;
- }
-
- //Convert both paths to the canonical form before comparison.
- $muPluginDir = realpath(WPMU_PLUGIN_DIR);
- $pluginPath = realpath($this->pluginAbsolutePath);
- //If realpath() fails, just normalize the syntax instead.
- if (($muPluginDir === false) || ($pluginPath === false)) {
- $muPluginDir = Puc_v4p11_Factory::normalizePath(WPMU_PLUGIN_DIR);
- $pluginPath = Puc_v4p11_Factory::normalizePath($this->pluginAbsolutePath);
- }
-
- $cachedResult = (strpos($pluginPath, $muPluginDir) === 0);
- }
-
- return $cachedResult;
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Plugin/Ui.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Plugin/Ui.php
deleted file mode 100644
index 8aa4b351..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Plugin/Ui.php
+++ /dev/null
@@ -1,278 +0,0 @@
-updateChecker = $updateChecker;
- $this->manualCheckErrorTransient = $this->updateChecker->getUniqueName('manual_check_errors');
-
- add_action('admin_init', array($this, 'onAdminInit'));
- }
-
- public function onAdminInit() {
- if ( $this->updateChecker->userCanInstallUpdates() ) {
- $this->handleManualCheck();
-
- add_filter('plugin_row_meta', array($this, 'addViewDetailsLink'), 10, 3);
- add_filter('plugin_row_meta', array($this, 'addCheckForUpdatesLink'), 10, 2);
- add_action('all_admin_notices', array($this, 'displayManualCheckResult'));
- }
- }
-
- /**
- * Add a "View Details" link to the plugin row in the "Plugins" page. By default,
- * the new link will appear before the "Visit plugin site" link (if present).
- *
- * You can change the link text by using the "puc_view_details_link-$slug" filter.
- * Returning an empty string from the filter will disable the link.
- *
- * You can change the position of the link using the
- * "puc_view_details_link_position-$slug" filter.
- * Returning 'before' or 'after' will place the link immediately before/after
- * the "Visit plugin site" link.
- * Returning 'append' places the link after any existing links at the time of the hook.
- * Returning 'replace' replaces the "Visit plugin site" link.
- * Returning anything else disables the link when there is a "Visit plugin site" link.
- *
- * If there is no "Visit plugin site" link 'append' is always used!
- *
- * @param array $pluginMeta Array of meta links.
- * @param string $pluginFile
- * @param array $pluginData Array of plugin header data.
- * @return array
- */
- public function addViewDetailsLink($pluginMeta, $pluginFile, $pluginData = array()) {
- if ( $this->isMyPluginFile($pluginFile) && !isset($pluginData['slug']) ) {
- $linkText = apply_filters($this->updateChecker->getUniqueName('view_details_link'), __('View details'));
- if ( !empty($linkText) ) {
- $viewDetailsLinkPosition = 'append';
-
- //Find the "Visit plugin site" link (if present).
- $visitPluginSiteLinkIndex = count($pluginMeta) - 1;
- if ( $pluginData['PluginURI'] ) {
- $escapedPluginUri = esc_url($pluginData['PluginURI']);
- foreach ($pluginMeta as $linkIndex => $existingLink) {
- if ( strpos($existingLink, $escapedPluginUri) !== false ) {
- $visitPluginSiteLinkIndex = $linkIndex;
- $viewDetailsLinkPosition = apply_filters(
- $this->updateChecker->getUniqueName('view_details_link_position'),
- 'before'
- );
- break;
- }
- }
- }
-
- $viewDetailsLink = sprintf('%s ',
- esc_url(network_admin_url('plugin-install.php?tab=plugin-information&plugin=' . urlencode($this->updateChecker->slug) .
- '&TB_iframe=true&width=600&height=550')),
- esc_attr(sprintf(__('More information about %s'), $pluginData['Name'])),
- esc_attr($pluginData['Name']),
- $linkText
- );
- switch ($viewDetailsLinkPosition) {
- case 'before':
- array_splice($pluginMeta, $visitPluginSiteLinkIndex, 0, $viewDetailsLink);
- break;
- case 'after':
- array_splice($pluginMeta, $visitPluginSiteLinkIndex + 1, 0, $viewDetailsLink);
- break;
- case 'replace':
- $pluginMeta[$visitPluginSiteLinkIndex] = $viewDetailsLink;
- break;
- case 'append':
- default:
- $pluginMeta[] = $viewDetailsLink;
- break;
- }
- }
- }
- return $pluginMeta;
- }
-
- /**
- * Add a "Check for updates" link to the plugin row in the "Plugins" page. By default,
- * the new link will appear after the "Visit plugin site" link if present, otherwise
- * after the "View plugin details" link.
- *
- * You can change the link text by using the "puc_manual_check_link-$slug" filter.
- * Returning an empty string from the filter will disable the link.
- *
- * @param array $pluginMeta Array of meta links.
- * @param string $pluginFile
- * @return array
- */
- public function addCheckForUpdatesLink($pluginMeta, $pluginFile) {
- if ( $this->isMyPluginFile($pluginFile) ) {
- $linkUrl = wp_nonce_url(
- add_query_arg(
- array(
- 'puc_check_for_updates' => 1,
- 'puc_slug' => $this->updateChecker->slug,
- ),
- self_admin_url('plugins.php')
- ),
- 'puc_check_for_updates'
- );
-
- $linkText = apply_filters(
- $this->updateChecker->getUniqueName('manual_check_link'),
- __('Check for updates', 'plugin-update-checker')
- );
- if ( !empty($linkText) ) {
- /** @noinspection HtmlUnknownTarget */
- $pluginMeta[] = sprintf('%s ', esc_attr($linkUrl), $linkText);
- }
- }
- return $pluginMeta;
- }
-
- protected function isMyPluginFile($pluginFile) {
- return ($pluginFile == $this->updateChecker->pluginFile)
- || (!empty($this->updateChecker->muPluginFile) && ($pluginFile == $this->updateChecker->muPluginFile));
- }
-
- /**
- * Check for updates when the user clicks the "Check for updates" link.
- *
- * @see self::addCheckForUpdatesLink()
- *
- * @return void
- */
- public function handleManualCheck() {
- $shouldCheck =
- isset($_GET['puc_check_for_updates'], $_GET['puc_slug'])
- && $_GET['puc_slug'] == $this->updateChecker->slug
- && check_admin_referer('puc_check_for_updates');
-
- if ( $shouldCheck ) {
- $update = $this->updateChecker->checkForUpdates();
- $status = ($update === null) ? 'no_update' : 'update_available';
- $lastRequestApiErrors = $this->updateChecker->getLastRequestApiErrors();
-
- if ( ($update === null) && !empty($lastRequestApiErrors) ) {
- //Some errors are not critical. For example, if PUC tries to retrieve the readme.txt
- //file from GitHub and gets a 404, that's an API error, but it doesn't prevent updates
- //from working. Maybe the plugin simply doesn't have a readme.
- //Let's only show important errors.
- $foundCriticalErrors = false;
- $questionableErrorCodes = array(
- 'puc-github-http-error',
- 'puc-gitlab-http-error',
- 'puc-bitbucket-http-error',
- );
-
- foreach ($lastRequestApiErrors as $item) {
- $wpError = $item['error'];
- /** @var WP_Error $wpError */
- if ( !in_array($wpError->get_error_code(), $questionableErrorCodes) ) {
- $foundCriticalErrors = true;
- break;
- }
- }
-
- if ( $foundCriticalErrors ) {
- $status = 'error';
- set_site_transient($this->manualCheckErrorTransient, $lastRequestApiErrors, 60);
- }
- }
-
- wp_redirect(add_query_arg(
- array(
- 'puc_update_check_result' => $status,
- 'puc_slug' => $this->updateChecker->slug,
- ),
- self_admin_url('plugins.php')
- ));
- exit;
- }
- }
-
- /**
- * Display the results of a manual update check.
- *
- * @see self::handleManualCheck()
- *
- * You can change the result message by using the "puc_manual_check_message-$slug" filter.
- */
- public function displayManualCheckResult() {
- if ( isset($_GET['puc_update_check_result'], $_GET['puc_slug']) && ($_GET['puc_slug'] == $this->updateChecker->slug) ) {
- $status = strval($_GET['puc_update_check_result']);
- $title = $this->updateChecker->getInstalledPackage()->getPluginTitle();
- $noticeClass = 'updated notice-success';
- $details = '';
-
- if ( $status == 'no_update' ) {
- $message = sprintf(_x('The %s plugin is up to date.', 'the plugin title', 'plugin-update-checker'), $title);
- } else if ( $status == 'update_available' ) {
- $message = sprintf(_x('A new version of the %s plugin is available.', 'the plugin title', 'plugin-update-checker'), $title);
- } else if ( $status === 'error' ) {
- $message = sprintf(_x('Could not determine if updates are available for %s.', 'the plugin title', 'plugin-update-checker'), $title);
- $noticeClass = 'error notice-error';
-
- $details = $this->formatManualCheckErrors(get_site_transient($this->manualCheckErrorTransient));
- delete_site_transient($this->manualCheckErrorTransient);
- } else {
- $message = sprintf(__('Unknown update checker status "%s"', 'plugin-update-checker'), htmlentities($status));
- $noticeClass = 'error notice-error';
- }
- printf(
- '',
- $noticeClass,
- apply_filters($this->updateChecker->getUniqueName('manual_check_message'), $message, $status),
- $details
- );
- }
- }
-
- /**
- * Format the list of errors that were thrown during an update check.
- *
- * @param array $errors
- * @return string
- */
- protected function formatManualCheckErrors($errors) {
- if ( empty($errors) ) {
- return '';
- }
- $output = '';
-
- $showAsList = count($errors) > 1;
- if ( $showAsList ) {
- $output .= '';
- $formatString = '%1$s %2$s ';
- } else {
- $formatString = '%1$s %2$s
';
- }
- foreach ($errors as $item) {
- $wpError = $item['error'];
- /** @var WP_Error $wpError */
- $output .= sprintf(
- $formatString,
- $wpError->get_error_message(),
- $wpError->get_error_code()
- );
- }
- if ( $showAsList ) {
- $output .= ' ';
- }
-
- return $output;
- }
-
- public function removeHooks() {
- remove_action('admin_init', array($this, 'onAdminInit'));
- remove_filter('plugin_row_meta', array($this, 'addViewDetailsLink'), 10);
- remove_filter('plugin_row_meta', array($this, 'addCheckForUpdatesLink'), 10);
- remove_action('all_admin_notices', array($this, 'displayManualCheckResult'));
- }
- }
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Plugin/Update.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Plugin/Update.php
deleted file mode 100644
index a5ebd4d4..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Plugin/Update.php
+++ /dev/null
@@ -1,112 +0,0 @@
-copyFields($object, $update);
- return $update;
- }
-
- /**
- * @return string[]
- */
- protected function getFieldNames() {
- return array_merge(parent::getFieldNames(), self::$extraFields);
- }
-
- /**
- * Transform the update into the format used by WordPress native plugin API.
- *
- * @return object
- */
- public function toWpFormat() {
- $update = parent::toWpFormat();
-
- $update->id = $this->id;
- $update->url = $this->homepage;
- $update->tested = $this->tested;
- $update->requires_php = $this->requires_php;
- $update->plugin = $this->filename;
-
- if ( !empty($this->upgrade_notice) ) {
- $update->upgrade_notice = $this->upgrade_notice;
- }
-
- if ( !empty($this->icons) && is_array($this->icons) ) {
- //This should be an array with up to 4 keys: 'svg', '1x', '2x' and 'default'.
- //Docs: https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/#plugin-icons
- $icons = array_intersect_key(
- $this->icons,
- array('svg' => true, '1x' => true, '2x' => true, 'default' => true)
- );
- if ( !empty($icons) ) {
- $update->icons = $icons;
-
- //It appears that the 'default' icon isn't used anywhere in WordPress 4.9,
- //but lets set it just in case a future release needs it.
- if ( !isset($update->icons['default']) ) {
- $update->icons['default'] = current($update->icons);
- }
- }
- }
-
- return $update;
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Plugin/UpdateChecker.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Plugin/UpdateChecker.php
deleted file mode 100644
index b4b39fa3..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Plugin/UpdateChecker.php
+++ /dev/null
@@ -1,414 +0,0 @@
-pluginAbsolutePath = $pluginFile;
- $this->pluginFile = plugin_basename($this->pluginAbsolutePath);
- $this->muPluginFile = $muPluginFile;
-
- //If no slug is specified, use the name of the main plugin file as the slug.
- //For example, 'my-cool-plugin/cool-plugin.php' becomes 'cool-plugin'.
- if ( empty($slug) ){
- $slug = basename($this->pluginFile, '.php');
- }
-
- //Plugin slugs must be unique.
- $slugCheckFilter = 'puc_is_slug_in_use-' . $slug;
- $slugUsedBy = apply_filters($slugCheckFilter, false);
- if ( $slugUsedBy ) {
- $this->triggerError(sprintf(
- 'Plugin slug "%s" is already in use by %s. Slugs must be unique.',
- htmlentities($slug),
- htmlentities($slugUsedBy)
- ), E_USER_ERROR);
- }
- add_filter($slugCheckFilter, array($this, 'getAbsolutePath'));
-
- parent::__construct($metadataUrl, dirname($this->pluginFile), $slug, $checkPeriod, $optionName);
-
- //Backwards compatibility: If the plugin is a mu-plugin but no $muPluginFile is specified, assume
- //it's the same as $pluginFile given that it's not in a subdirectory (WP only looks in the base dir).
- if ( (strpbrk($this->pluginFile, '/\\') === false) && $this->isUnknownMuPlugin() ) {
- $this->muPluginFile = $this->pluginFile;
- }
-
- //To prevent a crash during plugin uninstallation, remove updater hooks when the user removes the plugin.
- //Details: https://github.com/YahnisElsts/plugin-update-checker/issues/138#issuecomment-335590964
- add_action('uninstall_' . $this->pluginFile, array($this, 'removeHooks'));
-
- $this->extraUi = new Puc_v4p11_Plugin_Ui($this);
- }
-
- /**
- * Create an instance of the scheduler.
- *
- * @param int $checkPeriod
- * @return Puc_v4p11_Scheduler
- */
- protected function createScheduler($checkPeriod) {
- $scheduler = new Puc_v4p11_Scheduler($this, $checkPeriod, array('load-plugins.php'));
- register_deactivation_hook($this->pluginFile, array($scheduler, 'removeUpdaterCron'));
- return $scheduler;
- }
-
- /**
- * Install the hooks required to run periodic update checks and inject update info
- * into WP data structures.
- *
- * @return void
- */
- protected function installHooks(){
- //Override requests for plugin information
- add_filter('plugins_api', array($this, 'injectInfo'), 20, 3);
-
- parent::installHooks();
- }
-
- /**
- * Remove update checker hooks.
- *
- * The intent is to prevent a fatal error that can happen if the plugin has an uninstall
- * hook. During uninstallation, WP includes the main plugin file (which creates a PUC instance),
- * the uninstall hook runs, WP deletes the plugin files and then updates some transients.
- * If PUC hooks are still around at this time, they could throw an error while trying to
- * autoload classes from files that no longer exist.
- *
- * The "site_transient_{$transient}" filter is the main problem here, but let's also remove
- * most other PUC hooks to be safe.
- *
- * @internal
- */
- public function removeHooks() {
- parent::removeHooks();
- $this->extraUi->removeHooks();
- $this->package->removeHooks();
-
- remove_filter('plugins_api', array($this, 'injectInfo'), 20);
- }
-
- /**
- * Retrieve plugin info from the configured API endpoint.
- *
- * @uses wp_remote_get()
- *
- * @param array $queryArgs Additional query arguments to append to the request. Optional.
- * @return Puc_v4p11_Plugin_Info
- */
- public function requestInfo($queryArgs = array()) {
- list($pluginInfo, $result) = $this->requestMetadata('Puc_v4p11_Plugin_Info', 'request_info', $queryArgs);
-
- if ( $pluginInfo !== null ) {
- /** @var Puc_v4p11_Plugin_Info $pluginInfo */
- $pluginInfo->filename = $this->pluginFile;
- $pluginInfo->slug = $this->slug;
- }
-
- $pluginInfo = apply_filters($this->getUniqueName('request_info_result'), $pluginInfo, $result);
- return $pluginInfo;
- }
-
- /**
- * Retrieve the latest update (if any) from the configured API endpoint.
- *
- * @uses PluginUpdateChecker::requestInfo()
- *
- * @return Puc_v4p11_Update|null An instance of Plugin_Update, or NULL when no updates are available.
- */
- public function requestUpdate() {
- //For the sake of simplicity, this function just calls requestInfo()
- //and transforms the result accordingly.
- $pluginInfo = $this->requestInfo(array('checking_for_updates' => '1'));
- if ( $pluginInfo === null ){
- return null;
- }
- $update = Puc_v4p11_Plugin_Update::fromPluginInfo($pluginInfo);
-
- $update = $this->filterUpdateResult($update);
-
- return $update;
- }
-
- /**
- * Intercept plugins_api() calls that request information about our plugin and
- * use the configured API endpoint to satisfy them.
- *
- * @see plugins_api()
- *
- * @param mixed $result
- * @param string $action
- * @param array|object $args
- * @return mixed
- */
- public function injectInfo($result, $action = null, $args = null){
- $relevant = ($action == 'plugin_information') && isset($args->slug) && (
- ($args->slug == $this->slug) || ($args->slug == dirname($this->pluginFile))
- );
- if ( !$relevant ) {
- return $result;
- }
-
- $pluginInfo = $this->requestInfo();
- $this->fixSupportedWordpressVersion($pluginInfo);
-
- $pluginInfo = apply_filters($this->getUniqueName('pre_inject_info'), $pluginInfo);
- if ( $pluginInfo ) {
- return $pluginInfo->toWpFormat();
- }
-
- return $result;
- }
-
- protected function shouldShowUpdates() {
- //No update notifications for mu-plugins unless explicitly enabled. The MU plugin file
- //is usually different from the main plugin file so the update wouldn't show up properly anyway.
- return !$this->isUnknownMuPlugin();
- }
-
- /**
- * @param stdClass|null $updates
- * @param stdClass $updateToAdd
- * @return stdClass
- */
- protected function addUpdateToList($updates, $updateToAdd) {
- if ( $this->package->isMuPlugin() ) {
- //WP does not support automatic update installation for mu-plugins, but we can
- //still display a notice.
- $updateToAdd->package = null;
- }
- return parent::addUpdateToList($updates, $updateToAdd);
- }
-
- /**
- * @param stdClass|null $updates
- * @return stdClass|null
- */
- protected function removeUpdateFromList($updates) {
- $updates = parent::removeUpdateFromList($updates);
- if ( !empty($this->muPluginFile) && isset($updates, $updates->response) ) {
- unset($updates->response[$this->muPluginFile]);
- }
- return $updates;
- }
-
- /**
- * For plugins, the update array is indexed by the plugin filename relative to the "plugins"
- * directory. Example: "plugin-name/plugin.php".
- *
- * @return string
- */
- protected function getUpdateListKey() {
- if ( $this->package->isMuPlugin() ) {
- return $this->muPluginFile;
- }
- return $this->pluginFile;
- }
-
- protected function getNoUpdateItemFields() {
- return array_merge(
- parent::getNoUpdateItemFields(),
- array(
- 'id' => $this->pluginFile,
- 'slug' => $this->slug,
- 'plugin' => $this->pluginFile,
- 'icons' => array(),
- 'banners' => array(),
- 'banners_rtl' => array(),
- 'tested' => '',
- 'compatibility' => new stdClass(),
- )
- );
- }
-
- /**
- * Alias for isBeingUpgraded().
- *
- * @deprecated
- * @param WP_Upgrader|null $upgrader The upgrader that's performing the current update.
- * @return bool
- */
- public function isPluginBeingUpgraded($upgrader = null) {
- return $this->isBeingUpgraded($upgrader);
- }
-
- /**
- * Is there an update being installed for this plugin, right now?
- *
- * @param WP_Upgrader|null $upgrader
- * @return bool
- */
- public function isBeingUpgraded($upgrader = null) {
- return $this->upgraderStatus->isPluginBeingUpgraded($this->pluginFile, $upgrader);
- }
-
- /**
- * Get the details of the currently available update, if any.
- *
- * If no updates are available, or if the last known update version is below or equal
- * to the currently installed version, this method will return NULL.
- *
- * Uses cached update data. To retrieve update information straight from
- * the metadata URL, call requestUpdate() instead.
- *
- * @return Puc_v4p11_Plugin_Update|null
- */
- public function getUpdate() {
- $update = parent::getUpdate();
- if ( isset($update) ) {
- /** @var Puc_v4p11_Plugin_Update $update */
- $update->filename = $this->pluginFile;
- }
- return $update;
- }
-
- /**
- * Get the translated plugin title.
- *
- * @deprecated
- * @return string
- */
- public function getPluginTitle() {
- return $this->package->getPluginTitle();
- }
-
- /**
- * Check if the current user has the required permissions to install updates.
- *
- * @return bool
- */
- public function userCanInstallUpdates() {
- return current_user_can('update_plugins');
- }
-
- /**
- * Check if the plugin file is inside the mu-plugins directory.
- *
- * @deprecated
- * @return bool
- */
- protected function isMuPlugin() {
- return $this->package->isMuPlugin();
- }
-
- /**
- * MU plugins are partially supported, but only when we know which file in mu-plugins
- * corresponds to this plugin.
- *
- * @return bool
- */
- protected function isUnknownMuPlugin() {
- return empty($this->muPluginFile) && $this->package->isMuPlugin();
- }
-
- /**
- * Get absolute path to the main plugin file.
- *
- * @return string
- */
- public function getAbsolutePath() {
- return $this->pluginAbsolutePath;
- }
-
- /**
- * Register a callback for filtering query arguments.
- *
- * The callback function should take one argument - an associative array of query arguments.
- * It should return a modified array of query arguments.
- *
- * @uses add_filter() This method is a convenience wrapper for add_filter().
- *
- * @param callable $callback
- * @return void
- */
- public function addQueryArgFilter($callback){
- $this->addFilter('request_info_query_args', $callback);
- }
-
- /**
- * Register a callback for filtering arguments passed to wp_remote_get().
- *
- * The callback function should take one argument - an associative array of arguments -
- * and return a modified array or arguments. See the WP documentation on wp_remote_get()
- * for details on what arguments are available and how they work.
- *
- * @uses add_filter() This method is a convenience wrapper for add_filter().
- *
- * @param callable $callback
- * @return void
- */
- public function addHttpRequestArgFilter($callback) {
- $this->addFilter('request_info_options', $callback);
- }
-
- /**
- * Register a callback for filtering the plugin info retrieved from the external API.
- *
- * The callback function should take two arguments. If the plugin info was retrieved
- * successfully, the first argument passed will be an instance of PluginInfo. Otherwise,
- * it will be NULL. The second argument will be the corresponding return value of
- * wp_remote_get (see WP docs for details).
- *
- * The callback function should return a new or modified instance of PluginInfo or NULL.
- *
- * @uses add_filter() This method is a convenience wrapper for add_filter().
- *
- * @param callable $callback
- * @return void
- */
- public function addResultFilter($callback) {
- $this->addFilter('request_info_result', $callback, 10, 2);
- }
-
- protected function createDebugBarExtension() {
- return new Puc_v4p11_DebugBar_PluginExtension($this);
- }
-
- /**
- * Create a package instance that represents this plugin or theme.
- *
- * @return Puc_v4p11_InstalledPackage
- */
- protected function createInstalledPackage() {
- return new Puc_v4p11_Plugin_Package($this->pluginAbsolutePath, $this);
- }
-
- /**
- * @return Puc_v4p11_Plugin_Package
- */
- public function getInstalledPackage() {
- return $this->package;
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Scheduler.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Scheduler.php
deleted file mode 100644
index dd3c3c34..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Scheduler.php
+++ /dev/null
@@ -1,266 +0,0 @@
-updateChecker = $updateChecker;
- $this->checkPeriod = $checkPeriod;
-
- //Set up the periodic update checks
- $this->cronHook = $this->updateChecker->getUniqueName('cron_check_updates');
- if ( $this->checkPeriod > 0 ){
-
- //Trigger the check via Cron.
- //Try to use one of the default schedules if possible as it's less likely to conflict
- //with other plugins and their custom schedules.
- $defaultSchedules = array(
- 1 => 'hourly',
- 12 => 'twicedaily',
- 24 => 'daily',
- );
- if ( array_key_exists($this->checkPeriod, $defaultSchedules) ) {
- $scheduleName = $defaultSchedules[$this->checkPeriod];
- } else {
- //Use a custom cron schedule.
- $scheduleName = 'every' . $this->checkPeriod . 'hours';
- add_filter('cron_schedules', array($this, '_addCustomSchedule'));
- }
-
- if ( !wp_next_scheduled($this->cronHook) && !defined('WP_INSTALLING') ) {
- //Randomly offset the schedule to help prevent update server traffic spikes. Without this
- //most checks may happen during times of day when people are most likely to install new plugins.
- $firstCheckTime = time() - rand(0, max($this->checkPeriod * 3600 - 15 * 60, 1));
- $firstCheckTime = apply_filters(
- $this->updateChecker->getUniqueName('first_check_time'),
- $firstCheckTime
- );
- wp_schedule_event($firstCheckTime, $scheduleName, $this->cronHook);
- }
- add_action($this->cronHook, array($this, 'maybeCheckForUpdates'));
-
- //In case Cron is disabled or unreliable, we also manually trigger
- //the periodic checks while the user is browsing the Dashboard.
- add_action( 'admin_init', array($this, 'maybeCheckForUpdates') );
-
- //Like WordPress itself, we check more often on certain pages.
- /** @see wp_update_plugins */
- add_action('load-update-core.php', array($this, 'maybeCheckForUpdates'));
- //"load-update.php" and "load-plugins.php" or "load-themes.php".
- $this->hourlyCheckHooks = array_merge($this->hourlyCheckHooks, $hourlyHooks);
- foreach($this->hourlyCheckHooks as $hook) {
- add_action($hook, array($this, 'maybeCheckForUpdates'));
- }
- //This hook fires after a bulk update is complete.
- add_action('upgrader_process_complete', array($this, 'upgraderProcessComplete'), 11, 2);
-
- } else {
- //Periodic checks are disabled.
- wp_clear_scheduled_hook($this->cronHook);
- }
- }
-
- /**
- * Runs upon the WP action upgrader_process_complete.
- *
- * We look at the parameters to decide whether to call maybeCheckForUpdates() or not.
- * We also check if the update checker has been removed by the update.
- *
- * @param WP_Upgrader $upgrader WP_Upgrader instance
- * @param array $upgradeInfo extra information about the upgrade
- */
- public function upgraderProcessComplete(
- /** @noinspection PhpUnusedParameterInspection */
- $upgrader, $upgradeInfo
- ) {
- //Cancel all further actions if the current version of PUC has been deleted or overwritten
- //by a different version during the upgrade. If we try to do anything more in that situation,
- //we could trigger a fatal error by trying to autoload a deleted class.
- clearstatcache();
- if ( !file_exists(__FILE__) ) {
- $this->removeHooks();
- $this->updateChecker->removeHooks();
- return;
- }
-
- //Sanity check and limitation to relevant types.
- if (
- !is_array($upgradeInfo) || !isset($upgradeInfo['type'], $upgradeInfo['action'])
- || 'update' !== $upgradeInfo['action'] || !in_array($upgradeInfo['type'], array('plugin', 'theme'))
- ) {
- return;
- }
-
- //Filter out notifications of upgrades that should have no bearing upon whether or not our
- //current info is up-to-date.
- if ( is_a($this->updateChecker, 'Puc_v4p11_Theme_UpdateChecker') ) {
- if ( 'theme' !== $upgradeInfo['type'] || !isset($upgradeInfo['themes']) ) {
- return;
- }
-
- //Letting too many things going through for checks is not a real problem, so we compare widely.
- if ( !in_array(
- strtolower($this->updateChecker->directoryName),
- array_map('strtolower', $upgradeInfo['themes'])
- ) ) {
- return;
- }
- }
-
- if ( is_a($this->updateChecker, 'Puc_v4p11_Plugin_UpdateChecker') ) {
- if ( 'plugin' !== $upgradeInfo['type'] || !isset($upgradeInfo['plugins']) ) {
- return;
- }
-
- //Themes pass in directory names in the information array, but plugins use the relative plugin path.
- if ( !in_array(
- strtolower($this->updateChecker->directoryName),
- array_map('dirname', array_map('strtolower', $upgradeInfo['plugins']))
- ) ) {
- return;
- }
- }
-
- $this->maybeCheckForUpdates();
- }
-
- /**
- * Check for updates if the configured check interval has already elapsed.
- * Will use a shorter check interval on certain admin pages like "Dashboard -> Updates" or when doing cron.
- *
- * You can override the default behaviour by using the "puc_check_now-$slug" filter.
- * The filter callback will be passed three parameters:
- * - Current decision. TRUE = check updates now, FALSE = don't check now.
- * - Last check time as a Unix timestamp.
- * - Configured check period in hours.
- * Return TRUE to check for updates immediately, or FALSE to cancel.
- *
- * This method is declared public because it's a hook callback. Calling it directly is not recommended.
- */
- public function maybeCheckForUpdates() {
- if ( empty($this->checkPeriod) ){
- return;
- }
-
- $state = $this->updateChecker->getUpdateState();
- $shouldCheck = ($state->timeSinceLastCheck() >= $this->getEffectiveCheckPeriod());
-
- //Let plugin authors substitute their own algorithm.
- $shouldCheck = apply_filters(
- $this->updateChecker->getUniqueName('check_now'),
- $shouldCheck,
- $state->getLastCheck(),
- $this->checkPeriod
- );
-
- if ( $shouldCheck ) {
- $this->updateChecker->checkForUpdates();
- }
- }
-
- /**
- * Calculate the actual check period based on the current status and environment.
- *
- * @return int Check period in seconds.
- */
- protected function getEffectiveCheckPeriod() {
- $currentFilter = current_filter();
- if ( in_array($currentFilter, array('load-update-core.php', 'upgrader_process_complete')) ) {
- //Check more often when the user visits "Dashboard -> Updates" or does a bulk update.
- $period = 60;
- } else if ( in_array($currentFilter, $this->hourlyCheckHooks) ) {
- //Also check more often on /wp-admin/update.php and the "Plugins" or "Themes" page.
- $period = 3600;
- } else if ( $this->throttleRedundantChecks && ($this->updateChecker->getUpdate() !== null) ) {
- //Check less frequently if it's already known that an update is available.
- $period = $this->throttledCheckPeriod * 3600;
- } else if ( defined('DOING_CRON') && constant('DOING_CRON') ) {
- //WordPress cron schedules are not exact, so lets do an update check even
- //if slightly less than $checkPeriod hours have elapsed since the last check.
- $cronFuzziness = 20 * 60;
- $period = $this->checkPeriod * 3600 - $cronFuzziness;
- } else {
- $period = $this->checkPeriod * 3600;
- }
-
- return $period;
- }
-
- /**
- * Add our custom schedule to the array of Cron schedules used by WP.
- *
- * @param array $schedules
- * @return array
- */
- public function _addCustomSchedule($schedules) {
- if ( $this->checkPeriod && ($this->checkPeriod > 0) ){
- $scheduleName = 'every' . $this->checkPeriod . 'hours';
- $schedules[$scheduleName] = array(
- 'interval' => $this->checkPeriod * 3600,
- 'display' => sprintf('Every %d hours', $this->checkPeriod),
- );
- }
- return $schedules;
- }
-
- /**
- * Remove the scheduled cron event that the library uses to check for updates.
- *
- * @return void
- */
- public function removeUpdaterCron() {
- wp_clear_scheduled_hook($this->cronHook);
- }
-
- /**
- * Get the name of the update checker's WP-cron hook. Mostly useful for debugging.
- *
- * @return string
- */
- public function getCronHookName() {
- return $this->cronHook;
- }
-
- /**
- * Remove most hooks added by the scheduler.
- */
- public function removeHooks() {
- remove_filter('cron_schedules', array($this, '_addCustomSchedule'));
- remove_action('admin_init', array($this, 'maybeCheckForUpdates'));
- remove_action('load-update-core.php', array($this, 'maybeCheckForUpdates'));
-
- if ( $this->cronHook !== null ) {
- remove_action($this->cronHook, array($this, 'maybeCheckForUpdates'));
- }
- if ( !empty($this->hourlyCheckHooks) ) {
- foreach ($this->hourlyCheckHooks as $hook) {
- remove_action($hook, array($this, 'maybeCheckForUpdates'));
- }
- }
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/StateStore.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/StateStore.php
deleted file mode 100644
index 01abcc94..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/StateStore.php
+++ /dev/null
@@ -1,207 +0,0 @@
-optionName = $optionName;
- }
-
- /**
- * Get time elapsed since the last update check.
- *
- * If there are no recorded update checks, this method returns a large arbitrary number
- * (i.e. time since the Unix epoch).
- *
- * @return int Elapsed time in seconds.
- */
- public function timeSinceLastCheck() {
- $this->lazyLoad();
- return time() - $this->lastCheck;
- }
-
- /**
- * @return int
- */
- public function getLastCheck() {
- $this->lazyLoad();
- return $this->lastCheck;
- }
-
- /**
- * Set the time of the last update check to the current timestamp.
- *
- * @return $this
- */
- public function setLastCheckToNow() {
- $this->lazyLoad();
- $this->lastCheck = time();
- return $this;
- }
-
- /**
- * @return null|Puc_v4p11_Update
- */
- public function getUpdate() {
- $this->lazyLoad();
- return $this->update;
- }
-
- /**
- * @param Puc_v4p11_Update|null $update
- * @return $this
- */
- public function setUpdate(Puc_v4p11_Update $update = null) {
- $this->lazyLoad();
- $this->update = $update;
- return $this;
- }
-
- /**
- * @return string
- */
- public function getCheckedVersion() {
- $this->lazyLoad();
- return $this->checkedVersion;
- }
-
- /**
- * @param string $version
- * @return $this
- */
- public function setCheckedVersion($version) {
- $this->lazyLoad();
- $this->checkedVersion = strval($version);
- return $this;
- }
-
- /**
- * Get translation updates.
- *
- * @return array
- */
- public function getTranslations() {
- $this->lazyLoad();
- if ( isset($this->update, $this->update->translations) ) {
- return $this->update->translations;
- }
- return array();
- }
-
- /**
- * Set translation updates.
- *
- * @param array $translationUpdates
- */
- public function setTranslations($translationUpdates) {
- $this->lazyLoad();
- if ( isset($this->update) ) {
- $this->update->translations = $translationUpdates;
- $this->save();
- }
- }
-
- public function save() {
- $state = new stdClass();
-
- $state->lastCheck = $this->lastCheck;
- $state->checkedVersion = $this->checkedVersion;
-
- if ( isset($this->update)) {
- $state->update = $this->update->toStdClass();
-
- $updateClass = get_class($this->update);
- $state->updateClass = $updateClass;
- $prefix = $this->getLibPrefix();
- if ( Puc_v4p11_Utils::startsWith($updateClass, $prefix) ) {
- $state->updateBaseClass = substr($updateClass, strlen($prefix));
- }
- }
-
- update_site_option($this->optionName, $state);
- $this->isLoaded = true;
- }
-
- /**
- * @return $this
- */
- public function lazyLoad() {
- if ( !$this->isLoaded ) {
- $this->load();
- }
- return $this;
- }
-
- protected function load() {
- $this->isLoaded = true;
-
- $state = get_site_option($this->optionName, null);
-
- if ( !is_object($state) ) {
- $this->lastCheck = 0;
- $this->checkedVersion = '';
- $this->update = null;
- return;
- }
-
- $this->lastCheck = intval(Puc_v4p11_Utils::get($state, 'lastCheck', 0));
- $this->checkedVersion = Puc_v4p11_Utils::get($state, 'checkedVersion', '');
- $this->update = null;
-
- if ( isset($state->update) ) {
- //This mess is due to the fact that the want the update class from this version
- //of the library, not the version that saved the update.
-
- $updateClass = null;
- if ( isset($state->updateBaseClass) ) {
- $updateClass = $this->getLibPrefix() . $state->updateBaseClass;
- } else if ( isset($state->updateClass) && class_exists($state->updateClass) ) {
- $updateClass = $state->updateClass;
- }
-
- if ( $updateClass !== null ) {
- $this->update = call_user_func(array($updateClass, 'fromObject'), $state->update);
- }
- }
- }
-
- public function delete() {
- delete_site_option($this->optionName);
-
- $this->lastCheck = 0;
- $this->checkedVersion = '';
- $this->update = null;
- }
-
- private function getLibPrefix() {
- $parts = explode('_', __CLASS__, 3);
- return $parts[0] . '_' . $parts[1] . '_';
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Theme/Package.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Theme/Package.php
deleted file mode 100644
index 3cfbce98..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Theme/Package.php
+++ /dev/null
@@ -1,65 +0,0 @@
-stylesheet = $stylesheet;
- $this->theme = wp_get_theme($this->stylesheet);
-
- parent::__construct($updateChecker);
- }
-
- public function getInstalledVersion() {
- return $this->theme->get('Version');
- }
-
- public function getAbsoluteDirectoryPath() {
- if ( method_exists($this->theme, 'get_stylesheet_directory') ) {
- return $this->theme->get_stylesheet_directory(); //Available since WP 3.4.
- }
- return get_theme_root($this->stylesheet) . '/' . $this->stylesheet;
- }
-
- /**
- * Get the value of a specific plugin or theme header.
- *
- * @param string $headerName
- * @param string $defaultValue
- * @return string Either the value of the header, or $defaultValue if the header doesn't exist or is empty.
- */
- public function getHeaderValue($headerName, $defaultValue = '') {
- $value = $this->theme->get($headerName);
- if ( ($headerName === false) || ($headerName === '') ) {
- return $defaultValue;
- }
- return $value;
- }
-
- protected function getHeaderNames() {
- return array(
- 'Name' => 'Theme Name',
- 'ThemeURI' => 'Theme URI',
- 'Description' => 'Description',
- 'Author' => 'Author',
- 'AuthorURI' => 'Author URI',
- 'Version' => 'Version',
- 'Template' => 'Template',
- 'Status' => 'Status',
- 'Tags' => 'Tags',
- 'TextDomain' => 'Text Domain',
- 'DomainPath' => 'Domain Path',
- );
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Theme/Update.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Theme/Update.php
deleted file mode 100644
index 9fc46f88..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Theme/Update.php
+++ /dev/null
@@ -1,84 +0,0 @@
- $this->slug,
- 'new_version' => $this->version,
- 'url' => $this->details_url,
- );
-
- if ( !empty($this->download_url) ) {
- $update['package'] = $this->download_url;
- }
-
- return $update;
- }
-
- /**
- * Create a new instance of Theme_Update from its JSON-encoded representation.
- *
- * @param string $json Valid JSON string representing a theme information object.
- * @return self New instance of ThemeUpdate, or NULL on error.
- */
- public static function fromJson($json) {
- $instance = new self();
- if ( !parent::createFromJson($json, $instance) ) {
- return null;
- }
- return $instance;
- }
-
- /**
- * Create a new instance by copying the necessary fields from another object.
- *
- * @param StdClass|Puc_v4p11_Theme_Update $object The source object.
- * @return Puc_v4p11_Theme_Update The new copy.
- */
- public static function fromObject($object) {
- $update = new self();
- $update->copyFields($object, $update);
- return $update;
- }
-
- /**
- * Basic validation.
- *
- * @param StdClass $apiResponse
- * @return bool|WP_Error
- */
- protected function validateMetadata($apiResponse) {
- $required = array('version', 'details_url');
- foreach($required as $key) {
- if ( !isset($apiResponse->$key) || empty($apiResponse->$key) ) {
- return new WP_Error(
- 'tuc-invalid-metadata',
- sprintf('The theme metadata is missing the required "%s" key.', $key)
- );
- }
- }
- return true;
- }
-
- protected function getFieldNames() {
- return array_merge(parent::getFieldNames(), self::$extraFields);
- }
-
- protected function getPrefixedFilter($tag) {
- return parent::getPrefixedFilter($tag) . '_theme';
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Theme/UpdateChecker.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Theme/UpdateChecker.php
deleted file mode 100644
index 091445ef..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Theme/UpdateChecker.php
+++ /dev/null
@@ -1,152 +0,0 @@
-stylesheet = $stylesheet;
-
- parent::__construct(
- $metadataUrl,
- $stylesheet,
- $customSlug ? $customSlug : $stylesheet,
- $checkPeriod,
- $optionName
- );
- }
-
- /**
- * For themes, the update array is indexed by theme directory name.
- *
- * @return string
- */
- protected function getUpdateListKey() {
- return $this->directoryName;
- }
-
- /**
- * Retrieve the latest update (if any) from the configured API endpoint.
- *
- * @return Puc_v4p11_Update|null An instance of Update, or NULL when no updates are available.
- */
- public function requestUpdate() {
- list($themeUpdate, $result) = $this->requestMetadata('Puc_v4p11_Theme_Update', 'request_update');
-
- if ( $themeUpdate !== null ) {
- /** @var Puc_v4p11_Theme_Update $themeUpdate */
- $themeUpdate->slug = $this->slug;
- }
-
- $themeUpdate = $this->filterUpdateResult($themeUpdate, $result);
- return $themeUpdate;
- }
-
- protected function getNoUpdateItemFields() {
- return array_merge(
- parent::getNoUpdateItemFields(),
- array(
- 'theme' => $this->directoryName,
- 'requires' => '',
- )
- );
- }
-
- public function userCanInstallUpdates() {
- return current_user_can('update_themes');
- }
-
- /**
- * Create an instance of the scheduler.
- *
- * @param int $checkPeriod
- * @return Puc_v4p11_Scheduler
- */
- protected function createScheduler($checkPeriod) {
- return new Puc_v4p11_Scheduler($this, $checkPeriod, array('load-themes.php'));
- }
-
- /**
- * Is there an update being installed right now for this theme?
- *
- * @param WP_Upgrader|null $upgrader The upgrader that's performing the current update.
- * @return bool
- */
- public function isBeingUpgraded($upgrader = null) {
- return $this->upgraderStatus->isThemeBeingUpgraded($this->stylesheet, $upgrader);
- }
-
- protected function createDebugBarExtension() {
- return new Puc_v4p11_DebugBar_Extension($this, 'Puc_v4p11_DebugBar_ThemePanel');
- }
-
- /**
- * Register a callback for filtering query arguments.
- *
- * The callback function should take one argument - an associative array of query arguments.
- * It should return a modified array of query arguments.
- *
- * @param callable $callback
- * @return void
- */
- public function addQueryArgFilter($callback){
- $this->addFilter('request_update_query_args', $callback);
- }
-
- /**
- * Register a callback for filtering arguments passed to wp_remote_get().
- *
- * The callback function should take one argument - an associative array of arguments -
- * and return a modified array or arguments. See the WP documentation on wp_remote_get()
- * for details on what arguments are available and how they work.
- *
- * @uses add_filter() This method is a convenience wrapper for add_filter().
- *
- * @param callable $callback
- * @return void
- */
- public function addHttpRequestArgFilter($callback) {
- $this->addFilter('request_update_options', $callback);
- }
-
- /**
- * Register a callback for filtering theme updates retrieved from the external API.
- *
- * The callback function should take two arguments. If the theme update was retrieved
- * successfully, the first argument passed will be an instance of Theme_Update. Otherwise,
- * it will be NULL. The second argument will be the corresponding return value of
- * wp_remote_get (see WP docs for details).
- *
- * The callback function should return a new or modified instance of Theme_Update or NULL.
- *
- * @uses add_filter() This method is a convenience wrapper for add_filter().
- *
- * @param callable $callback
- * @return void
- */
- public function addResultFilter($callback) {
- $this->addFilter('request_update_result', $callback, 10, 2);
- }
-
- /**
- * Create a package instance that represents this plugin or theme.
- *
- * @return Puc_v4p11_InstalledPackage
- */
- protected function createInstalledPackage() {
- return new Puc_v4p11_Theme_Package($this->stylesheet, $this);
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Update.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Update.php
deleted file mode 100644
index 82c048a9..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Update.php
+++ /dev/null
@@ -1,34 +0,0 @@
-slug = $this->slug;
- $update->new_version = $this->version;
- $update->package = $this->download_url;
-
- return $update;
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/UpdateChecker.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/UpdateChecker.php
deleted file mode 100644
index 56fe8f03..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/UpdateChecker.php
+++ /dev/null
@@ -1,997 +0,0 @@
-debugMode = (bool)(constant('WP_DEBUG'));
- $this->metadataUrl = $metadataUrl;
- $this->directoryName = $directoryName;
- $this->slug = !empty($slug) ? $slug : $this->directoryName;
-
- $this->optionName = $optionName;
- if ( empty($this->optionName) ) {
- //BC: Initially the library only supported plugin updates and didn't use type prefixes
- //in the option name. Lets use the same prefix-less name when possible.
- if ( $this->filterSuffix === '' ) {
- $this->optionName = 'external_updates-' . $this->slug;
- } else {
- $this->optionName = $this->getUniqueName('external_updates');
- }
- }
-
- $this->package = $this->createInstalledPackage();
- $this->scheduler = $this->createScheduler($checkPeriod);
- $this->upgraderStatus = new Puc_v4p11_UpgraderStatus();
- $this->updateState = new Puc_v4p11_StateStore($this->optionName);
-
- if ( did_action('init') ) {
- $this->loadTextDomain();
- } else {
- add_action('init', array($this, 'loadTextDomain'));
- }
-
- $this->installHooks();
- }
-
- /**
- * @internal
- */
- public function loadTextDomain() {
- //We're not using load_plugin_textdomain() or its siblings because figuring out where
- //the library is located (plugin, mu-plugin, theme, custom wp-content paths) is messy.
- $domain = 'plugin-update-checker';
- $locale = apply_filters(
- 'plugin_locale',
- (is_admin() && function_exists('get_user_locale')) ? get_user_locale() : get_locale(),
- $domain
- );
-
- $moFile = $domain . '-' . $locale . '.mo';
- $path = realpath(dirname(__FILE__) . '/../../languages');
-
- if ($path && file_exists($path)) {
- load_textdomain($domain, $path . '/' . $moFile);
- }
- }
-
- protected function installHooks() {
- //Insert our update info into the update array maintained by WP.
- add_filter('site_transient_' . $this->updateTransient, array($this,'injectUpdate'));
-
- //Insert translation updates into the update list.
- add_filter('site_transient_' . $this->updateTransient, array($this, 'injectTranslationUpdates'));
-
- //Clear translation updates when WP clears the update cache.
- //This needs to be done directly because the library doesn't actually remove obsolete plugin updates,
- //it just hides them (see getUpdate()). We can't do that with translations - too much disk I/O.
- add_action(
- 'delete_site_transient_' . $this->updateTransient,
- array($this, 'clearCachedTranslationUpdates')
- );
-
- //Rename the update directory to be the same as the existing directory.
- if ( $this->directoryName !== '.' ) {
- add_filter('upgrader_source_selection', array($this, 'fixDirectoryName'), 10, 3);
- }
-
- //Allow HTTP requests to the metadata URL even if it's on a local host.
- add_filter('http_request_host_is_external', array($this, 'allowMetadataHost'), 10, 2);
-
- //DebugBar integration.
- if ( did_action('plugins_loaded') ) {
- $this->maybeInitDebugBar();
- } else {
- add_action('plugins_loaded', array($this, 'maybeInitDebugBar'));
- }
- }
-
- /**
- * Remove hooks that were added by this update checker instance.
- */
- public function removeHooks() {
- remove_filter('site_transient_' . $this->updateTransient, array($this,'injectUpdate'));
- remove_filter('site_transient_' . $this->updateTransient, array($this, 'injectTranslationUpdates'));
- remove_action(
- 'delete_site_transient_' . $this->updateTransient,
- array($this, 'clearCachedTranslationUpdates')
- );
-
- remove_filter('upgrader_source_selection', array($this, 'fixDirectoryName'), 10);
- remove_filter('http_request_host_is_external', array($this, 'allowMetadataHost'), 10);
- remove_action('plugins_loaded', array($this, 'maybeInitDebugBar'));
-
- remove_action('init', array($this, 'loadTextDomain'));
-
- if ( $this->scheduler ) {
- $this->scheduler->removeHooks();
- }
-
- if ( $this->debugBarExtension ) {
- $this->debugBarExtension->removeHooks();
- }
- }
-
- /**
- * Check if the current user has the required permissions to install updates.
- *
- * @return bool
- */
- abstract public function userCanInstallUpdates();
-
- /**
- * Explicitly allow HTTP requests to the metadata URL.
- *
- * WordPress has a security feature where the HTTP API will reject all requests that are sent to
- * another site hosted on the same server as the current site (IP match), a local host, or a local
- * IP, unless the host exactly matches the current site.
- *
- * This feature is opt-in (at least in WP 4.4). Apparently some people enable it.
- *
- * That can be a problem when you're developing your plugin and you decide to host the update information
- * on the same server as your test site. Update requests will mysteriously fail.
- *
- * We fix that by adding an exception for the metadata host.
- *
- * @param bool $allow
- * @param string $host
- * @return bool
- */
- public function allowMetadataHost($allow, $host) {
- if ( $this->cachedMetadataHost === 0 ) {
- $this->cachedMetadataHost = parse_url($this->metadataUrl, PHP_URL_HOST);
- }
-
- if ( is_string($this->cachedMetadataHost) && (strtolower($host) === strtolower($this->cachedMetadataHost)) ) {
- return true;
- }
- return $allow;
- }
-
- /**
- * Create a package instance that represents this plugin or theme.
- *
- * @return Puc_v4p11_InstalledPackage
- */
- abstract protected function createInstalledPackage();
-
- /**
- * @return Puc_v4p11_InstalledPackage
- */
- public function getInstalledPackage() {
- return $this->package;
- }
-
- /**
- * Create an instance of the scheduler.
- *
- * This is implemented as a method to make it possible for plugins to subclass the update checker
- * and substitute their own scheduler.
- *
- * @param int $checkPeriod
- * @return Puc_v4p11_Scheduler
- */
- abstract protected function createScheduler($checkPeriod);
-
- /**
- * Check for updates. The results are stored in the DB option specified in $optionName.
- *
- * @return Puc_v4p11_Update|null
- */
- public function checkForUpdates() {
- $installedVersion = $this->getInstalledVersion();
- //Fail silently if we can't find the plugin/theme or read its header.
- if ( $installedVersion === null ) {
- $this->triggerError(
- sprintf('Skipping update check for %s - installed version unknown.', $this->slug),
- E_USER_WARNING
- );
- return null;
- }
-
- //Start collecting API errors.
- $this->lastRequestApiErrors = array();
- add_action('puc_api_error', array($this, 'collectApiErrors'), 10, 4);
-
- $state = $this->updateState;
- $state->setLastCheckToNow()
- ->setCheckedVersion($installedVersion)
- ->save(); //Save before checking in case something goes wrong
-
- $state->setUpdate($this->requestUpdate());
- $state->save();
-
- //Stop collecting API errors.
- remove_action('puc_api_error', array($this, 'collectApiErrors'), 10);
-
- return $this->getUpdate();
- }
-
- /**
- * Load the update checker state from the DB.
- *
- * @return Puc_v4p11_StateStore
- */
- public function getUpdateState() {
- return $this->updateState->lazyLoad();
- }
-
- /**
- * Reset update checker state - i.e. last check time, cached update data and so on.
- *
- * Call this when your plugin is being uninstalled, or if you want to
- * clear the update cache.
- */
- public function resetUpdateState() {
- $this->updateState->delete();
- }
-
- /**
- * Get the details of the currently available update, if any.
- *
- * If no updates are available, or if the last known update version is below or equal
- * to the currently installed version, this method will return NULL.
- *
- * Uses cached update data. To retrieve update information straight from
- * the metadata URL, call requestUpdate() instead.
- *
- * @return Puc_v4p11_Update|null
- */
- public function getUpdate() {
- $update = $this->updateState->getUpdate();
-
- //Is there an update available?
- if ( isset($update) ) {
- //Check if the update is actually newer than the currently installed version.
- $installedVersion = $this->getInstalledVersion();
- if ( ($installedVersion !== null) && version_compare($update->version, $installedVersion, '>') ){
- return $update;
- }
- }
- return null;
- }
-
- /**
- * Retrieve the latest update (if any) from the configured API endpoint.
- *
- * Subclasses should run the update through filterUpdateResult before returning it.
- *
- * @return Puc_v4p11_Update An instance of Update, or NULL when no updates are available.
- */
- abstract public function requestUpdate();
-
- /**
- * Filter the result of a requestUpdate() call.
- *
- * @param Puc_v4p11_Update|null $update
- * @param array|WP_Error|null $httpResult The value returned by wp_remote_get(), if any.
- * @return Puc_v4p11_Update
- */
- protected function filterUpdateResult($update, $httpResult = null) {
- //Let plugins/themes modify the update.
- $update = apply_filters($this->getUniqueName('request_update_result'), $update, $httpResult);
-
- $this->fixSupportedWordpressVersion($update);
-
- if ( isset($update, $update->translations) ) {
- //Keep only those translation updates that apply to this site.
- $update->translations = $this->filterApplicableTranslations($update->translations);
- }
-
- return $update;
- }
-
- /**
- * The "Tested up to" field in the plugin metadata is supposed to be in the form of "major.minor",
- * while WordPress core's list_plugin_updates() expects the $update->tested field to be an exact
- * version, e.g. "major.minor.patch", to say it's compatible. In other case it shows
- * "Compatibility: Unknown".
- * The function mimics how wordpress.org API crafts the "tested" field out of "Tested up to".
- *
- * @param Puc_v4p11_Metadata|null $update
- */
- protected function fixSupportedWordpressVersion(Puc_v4p11_Metadata $update = null) {
- if ( !isset($update->tested) || !preg_match('/^\d++\.\d++$/', $update->tested) ) {
- return;
- }
-
- $actualWpVersions = array();
-
- $wpVersion = $GLOBALS['wp_version'];
-
- if ( function_exists('get_core_updates') ) {
- $coreUpdates = get_core_updates();
- if ( is_array($coreUpdates) ) {
- foreach ($coreUpdates as $coreUpdate) {
- if ( isset($coreUpdate->current) ) {
- $actualWpVersions[] = $coreUpdate->current;
- }
- }
- }
- }
-
- $actualWpVersions[] = $wpVersion;
-
- $actualWpPatchNumber = null;
- foreach ($actualWpVersions as $version) {
- if ( preg_match('/^(?P\d++\.\d++)(?:\.(?P\d++))?/', $version, $versionParts) ) {
- if ( $versionParts['majorMinor'] === $update->tested ) {
- $patch = isset($versionParts['patch']) ? intval($versionParts['patch']) : 0;
- if ( $actualWpPatchNumber === null ) {
- $actualWpPatchNumber = $patch;
- } else {
- $actualWpPatchNumber = max($actualWpPatchNumber, $patch);
- }
- }
- }
- }
- if ( $actualWpPatchNumber === null ) {
- $actualWpPatchNumber = 999;
- }
-
- if ( $actualWpPatchNumber > 0 ) {
- $update->tested .= '.' . $actualWpPatchNumber;
- }
- }
-
- /**
- * Get the currently installed version of the plugin or theme.
- *
- * @return string|null Version number.
- */
- public function getInstalledVersion() {
- return $this->package->getInstalledVersion();
- }
-
- /**
- * Get the full path of the plugin or theme directory.
- *
- * @return string
- */
- public function getAbsoluteDirectoryPath() {
- return $this->package->getAbsoluteDirectoryPath();
- }
-
- /**
- * Trigger a PHP error, but only when $debugMode is enabled.
- *
- * @param string $message
- * @param int $errorType
- */
- public function triggerError($message, $errorType) {
- if ( $this->isDebugModeEnabled() ) {
- trigger_error($message, $errorType);
- }
- }
-
- /**
- * @return bool
- */
- protected function isDebugModeEnabled() {
- if ( $this->debugMode === null ) {
- $this->debugMode = (bool)(constant('WP_DEBUG'));
- }
- return $this->debugMode;
- }
-
- /**
- * Get the full name of an update checker filter, action or DB entry.
- *
- * This method adds the "puc_" prefix and the "-$slug" suffix to the filter name.
- * For example, "pre_inject_update" becomes "puc_pre_inject_update-plugin-slug".
- *
- * @param string $baseTag
- * @return string
- */
- public function getUniqueName($baseTag) {
- $name = 'puc_' . $baseTag;
- if ( $this->filterSuffix !== '' ) {
- $name .= '_' . $this->filterSuffix;
- }
- return $name . '-' . $this->slug;
- }
-
- /**
- * Store API errors that are generated when checking for updates.
- *
- * @internal
- * @param WP_Error $error
- * @param array|null $httpResponse
- * @param string|null $url
- * @param string|null $slug
- */
- public function collectApiErrors($error, $httpResponse = null, $url = null, $slug = null) {
- if ( isset($slug) && ($slug !== $this->slug) ) {
- return;
- }
-
- $this->lastRequestApiErrors[] = array(
- 'error' => $error,
- 'httpResponse' => $httpResponse,
- 'url' => $url,
- );
- }
-
- /**
- * @return array
- */
- public function getLastRequestApiErrors() {
- return $this->lastRequestApiErrors;
- }
-
- /* -------------------------------------------------------------------
- * PUC filters and filter utilities
- * -------------------------------------------------------------------
- */
-
- /**
- * Register a callback for one of the update checker filters.
- *
- * Identical to add_filter(), except it automatically adds the "puc_" prefix
- * and the "-$slug" suffix to the filter name. For example, "request_info_result"
- * becomes "puc_request_info_result-your_plugin_slug".
- *
- * @param string $tag
- * @param callable $callback
- * @param int $priority
- * @param int $acceptedArgs
- */
- public function addFilter($tag, $callback, $priority = 10, $acceptedArgs = 1) {
- add_filter($this->getUniqueName($tag), $callback, $priority, $acceptedArgs);
- }
-
- /* -------------------------------------------------------------------
- * Inject updates
- * -------------------------------------------------------------------
- */
-
- /**
- * Insert the latest update (if any) into the update list maintained by WP.
- *
- * @param stdClass $updates Update list.
- * @return stdClass Modified update list.
- */
- public function injectUpdate($updates) {
- //Is there an update to insert?
- $update = $this->getUpdate();
-
- if ( !$this->shouldShowUpdates() ) {
- $update = null;
- }
-
- if ( !empty($update) ) {
- //Let plugins filter the update info before it's passed on to WordPress.
- $update = apply_filters($this->getUniqueName('pre_inject_update'), $update);
- $updates = $this->addUpdateToList($updates, $update->toWpFormat());
- } else {
- //Clean up any stale update info.
- $updates = $this->removeUpdateFromList($updates);
- //Add a placeholder item to the "no_update" list to enable auto-update support.
- //If we don't do this, the option to enable automatic updates will only show up
- //when an update is available.
- $updates = $this->addNoUpdateItem($updates);
- }
-
- return $updates;
- }
-
- /**
- * @param stdClass|null $updates
- * @param stdClass|array $updateToAdd
- * @return stdClass
- */
- protected function addUpdateToList($updates, $updateToAdd) {
- if ( !is_object($updates) ) {
- $updates = new stdClass();
- $updates->response = array();
- }
-
- $updates->response[$this->getUpdateListKey()] = $updateToAdd;
- return $updates;
- }
-
- /**
- * @param stdClass|null $updates
- * @return stdClass|null
- */
- protected function removeUpdateFromList($updates) {
- if ( isset($updates, $updates->response) ) {
- unset($updates->response[$this->getUpdateListKey()]);
- }
- return $updates;
- }
-
- /**
- * See this post for more information:
- * @link https://make.wordpress.org/core/2020/07/30/recommended-usage-of-the-updates-api-to-support-the-auto-updates-ui-for-plugins-and-themes-in-wordpress-5-5/
- *
- * @param stdClass|null $updates
- * @return stdClass
- */
- protected function addNoUpdateItem($updates) {
- if ( !is_object($updates) ) {
- $updates = new stdClass();
- $updates->response = array();
- $updates->no_update = array();
- } else if ( !isset($updates->no_update) ) {
- $updates->no_update = array();
- }
-
- $updates->no_update[$this->getUpdateListKey()] = (object) $this->getNoUpdateItemFields();
-
- return $updates;
- }
-
- /**
- * Subclasses should override this method to add fields that are specific to plugins or themes.
- * @return array
- */
- protected function getNoUpdateItemFields() {
- return array(
- 'new_version' => $this->getInstalledVersion(),
- 'url' => '',
- 'package' => '',
- 'requires_php' => '',
- );
- }
-
- /**
- * Get the key that will be used when adding updates to the update list that's maintained
- * by the WordPress core. The list is always an associative array, but the key is different
- * for plugins and themes.
- *
- * @return string
- */
- abstract protected function getUpdateListKey();
-
- /**
- * Should we show available updates?
- *
- * Usually the answer is "yes", but there are exceptions. For example, WordPress doesn't
- * support automatic updates installation for mu-plugins, so PUC usually won't show update
- * notifications in that case. See the plugin-specific subclass for details.
- *
- * Note: This method only applies to updates that are displayed (or not) in the WordPress
- * admin. It doesn't affect APIs like requestUpdate and getUpdate.
- *
- * @return bool
- */
- protected function shouldShowUpdates() {
- return true;
- }
-
- /* -------------------------------------------------------------------
- * JSON-based update API
- * -------------------------------------------------------------------
- */
-
- /**
- * Retrieve plugin or theme metadata from the JSON document at $this->metadataUrl.
- *
- * @param string $metaClass Parse the JSON as an instance of this class. It must have a static fromJson method.
- * @param string $filterRoot
- * @param array $queryArgs Additional query arguments.
- * @return array [Puc_v4p11_Metadata|null, array|WP_Error] A metadata instance and the value returned by wp_remote_get().
- */
- protected function requestMetadata($metaClass, $filterRoot, $queryArgs = array()) {
- //Query args to append to the URL. Plugins can add their own by using a filter callback (see addQueryArgFilter()).
- $queryArgs = array_merge(
- array(
- 'installed_version' => strval($this->getInstalledVersion()),
- 'php' => phpversion(),
- 'locale' => get_locale(),
- ),
- $queryArgs
- );
- $queryArgs = apply_filters($this->getUniqueName($filterRoot . '_query_args'), $queryArgs);
-
- //Various options for the wp_remote_get() call. Plugins can filter these, too.
- $options = array(
- 'timeout' => 10, //seconds
- 'headers' => array(
- 'Accept' => 'application/json',
- ),
- );
- $options = apply_filters($this->getUniqueName($filterRoot . '_options'), $options);
-
- //The metadata file should be at 'http://your-api.com/url/here/$slug/info.json'
- $url = $this->metadataUrl;
- if ( !empty($queryArgs) ){
- $url = add_query_arg($queryArgs, $url);
- }
-
- $result = wp_remote_get($url, $options);
-
- $result = apply_filters($this->getUniqueName('request_metadata_http_result'), $result, $url, $options);
-
- //Try to parse the response
- $status = $this->validateApiResponse($result);
- $metadata = null;
- if ( !is_wp_error($status) ){
- if ( version_compare(PHP_VERSION, '5.3', '>=') && (strpos($metaClass, '\\') === false) ) {
- $metaClass = __NAMESPACE__ . '\\' . $metaClass;
- }
- $metadata = call_user_func(array($metaClass, 'fromJson'), $result['body']);
- } else {
- do_action('puc_api_error', $status, $result, $url, $this->slug);
- $this->triggerError(
- sprintf('The URL %s does not point to a valid metadata file. ', $url)
- . $status->get_error_message(),
- E_USER_WARNING
- );
- }
-
- return array($metadata, $result);
- }
-
- /**
- * Check if $result is a successful update API response.
- *
- * @param array|WP_Error $result
- * @return true|WP_Error
- */
- protected function validateApiResponse($result) {
- if ( is_wp_error($result) ) { /** @var WP_Error $result */
- return new WP_Error($result->get_error_code(), 'WP HTTP Error: ' . $result->get_error_message());
- }
-
- if ( !isset($result['response']['code']) ) {
- return new WP_Error(
- 'puc_no_response_code',
- 'wp_remote_get() returned an unexpected result.'
- );
- }
-
- if ( $result['response']['code'] !== 200 ) {
- return new WP_Error(
- 'puc_unexpected_response_code',
- 'HTTP response code is ' . $result['response']['code'] . ' (expected: 200)'
- );
- }
-
- if ( empty($result['body']) ) {
- return new WP_Error('puc_empty_response', 'The metadata file appears to be empty.');
- }
-
- return true;
- }
-
- /* -------------------------------------------------------------------
- * Language packs / Translation updates
- * -------------------------------------------------------------------
- */
-
- /**
- * Filter a list of translation updates and return a new list that contains only updates
- * that apply to the current site.
- *
- * @param array $translations
- * @return array
- */
- protected function filterApplicableTranslations($translations) {
- $languages = array_flip(array_values(get_available_languages()));
- $installedTranslations = $this->getInstalledTranslations();
-
- $applicableTranslations = array();
- foreach ($translations as $translation) {
- //Does it match one of the available core languages?
- $isApplicable = array_key_exists($translation->language, $languages);
- //Is it more recent than an already-installed translation?
- if ( isset($installedTranslations[$translation->language]) ) {
- $updateTimestamp = strtotime($translation->updated);
- $installedTimestamp = strtotime($installedTranslations[$translation->language]['PO-Revision-Date']);
- $isApplicable = $updateTimestamp > $installedTimestamp;
- }
-
- if ( $isApplicable ) {
- $applicableTranslations[] = $translation;
- }
- }
-
- return $applicableTranslations;
- }
-
- /**
- * Get a list of installed translations for this plugin or theme.
- *
- * @return array
- */
- protected function getInstalledTranslations() {
- if ( !function_exists('wp_get_installed_translations') ) {
- return array();
- }
- $installedTranslations = wp_get_installed_translations($this->translationType . 's');
- if ( isset($installedTranslations[$this->directoryName]) ) {
- $installedTranslations = $installedTranslations[$this->directoryName];
- } else {
- $installedTranslations = array();
- }
- return $installedTranslations;
- }
-
- /**
- * Insert translation updates into the list maintained by WordPress.
- *
- * @param stdClass $updates
- * @return stdClass
- */
- public function injectTranslationUpdates($updates) {
- $translationUpdates = $this->getTranslationUpdates();
- if ( empty($translationUpdates) ) {
- return $updates;
- }
-
- //Being defensive.
- if ( !is_object($updates) ) {
- $updates = new stdClass();
- }
- if ( !isset($updates->translations) ) {
- $updates->translations = array();
- }
-
- //In case there's a name collision with a plugin or theme hosted on wordpress.org,
- //remove any preexisting updates that match our thing.
- $updates->translations = array_values(array_filter(
- $updates->translations,
- array($this, 'isNotMyTranslation')
- ));
-
- //Add our updates to the list.
- foreach($translationUpdates as $update) {
- $convertedUpdate = array_merge(
- array(
- 'type' => $this->translationType,
- 'slug' => $this->directoryName,
- 'autoupdate' => 0,
- //AFAICT, WordPress doesn't actually use the "version" field for anything.
- //But lets make sure it's there, just in case.
- 'version' => isset($update->version) ? $update->version : ('1.' . strtotime($update->updated)),
- ),
- (array)$update
- );
-
- $updates->translations[] = $convertedUpdate;
- }
-
- return $updates;
- }
-
- /**
- * Get a list of available translation updates.
- *
- * This method will return an empty array if there are no updates.
- * Uses cached update data.
- *
- * @return array
- */
- public function getTranslationUpdates() {
- return $this->updateState->getTranslations();
- }
-
- /**
- * Remove all cached translation updates.
- *
- * @see wp_clean_update_cache
- */
- public function clearCachedTranslationUpdates() {
- $this->updateState->setTranslations(array());
- }
-
- /**
- * Filter callback. Keeps only translations that *don't* match this plugin or theme.
- *
- * @param array $translation
- * @return bool
- */
- protected function isNotMyTranslation($translation) {
- $isMatch = isset($translation['type'], $translation['slug'])
- && ($translation['type'] === $this->translationType)
- && ($translation['slug'] === $this->directoryName);
-
- return !$isMatch;
- }
-
- /* -------------------------------------------------------------------
- * Fix directory name when installing updates
- * -------------------------------------------------------------------
- */
-
- /**
- * Rename the update directory to match the existing plugin/theme directory.
- *
- * When WordPress installs a plugin or theme update, it assumes that the ZIP file will contain
- * exactly one directory, and that the directory name will be the same as the directory where
- * the plugin or theme is currently installed.
- *
- * GitHub and other repositories provide ZIP downloads, but they often use directory names like
- * "project-branch" or "project-tag-hash". We need to change the name to the actual plugin folder.
- *
- * This is a hook callback. Don't call it from a plugin.
- *
- * @access protected
- *
- * @param string $source The directory to copy to /wp-content/plugins or /wp-content/themes. Usually a subdirectory of $remoteSource.
- * @param string $remoteSource WordPress has extracted the update to this directory.
- * @param WP_Upgrader $upgrader
- * @return string|WP_Error
- */
- public function fixDirectoryName($source, $remoteSource, $upgrader) {
- global $wp_filesystem;
- /** @var WP_Filesystem_Base $wp_filesystem */
-
- //Basic sanity checks.
- if ( !isset($source, $remoteSource, $upgrader, $upgrader->skin, $wp_filesystem) ) {
- return $source;
- }
-
- //If WordPress is upgrading anything other than our plugin/theme, leave the directory name unchanged.
- if ( !$this->isBeingUpgraded($upgrader) ) {
- return $source;
- }
-
- //Rename the source to match the existing directory.
- $correctedSource = trailingslashit($remoteSource) . $this->directoryName . '/';
- if ( $source !== $correctedSource ) {
- //The update archive should contain a single directory that contains the rest of plugin/theme files.
- //Otherwise, WordPress will try to copy the entire working directory ($source == $remoteSource).
- //We can't rename $remoteSource because that would break WordPress code that cleans up temporary files
- //after update.
- if ( $this->isBadDirectoryStructure($remoteSource) ) {
- return new WP_Error(
- 'puc-incorrect-directory-structure',
- sprintf(
- 'The directory structure of the update is incorrect. All files should be inside ' .
- 'a directory named %s , not at the root of the ZIP archive.',
- htmlentities($this->slug)
- )
- );
- }
-
- /** @var WP_Upgrader_Skin $upgrader ->skin */
- $upgrader->skin->feedback(sprintf(
- 'Renaming %s to %s…',
- '' . basename($source) . ' ',
- '' . $this->directoryName . ' '
- ));
-
- if ( $wp_filesystem->move($source, $correctedSource, true) ) {
- $upgrader->skin->feedback('Directory successfully renamed.');
- return $correctedSource;
- } else {
- return new WP_Error(
- 'puc-rename-failed',
- 'Unable to rename the update to match the existing directory.'
- );
- }
- }
-
- return $source;
- }
-
- /**
- * Is there an update being installed right now, for this plugin or theme?
- *
- * @param WP_Upgrader|null $upgrader The upgrader that's performing the current update.
- * @return bool
- */
- abstract public function isBeingUpgraded($upgrader = null);
-
- /**
- * Check for incorrect update directory structure. An update must contain a single directory,
- * all other files should be inside that directory.
- *
- * @param string $remoteSource Directory path.
- * @return bool
- */
- protected function isBadDirectoryStructure($remoteSource) {
- global $wp_filesystem;
- /** @var WP_Filesystem_Base $wp_filesystem */
-
- $sourceFiles = $wp_filesystem->dirlist($remoteSource);
- if ( is_array($sourceFiles) ) {
- $sourceFiles = array_keys($sourceFiles);
- $firstFilePath = trailingslashit($remoteSource) . $sourceFiles[0];
- return (count($sourceFiles) > 1) || (!$wp_filesystem->is_dir($firstFilePath));
- }
-
- //Assume it's fine.
- return false;
- }
-
- /* -------------------------------------------------------------------
- * DebugBar integration
- * -------------------------------------------------------------------
- */
-
- /**
- * Initialize the update checker Debug Bar plugin/add-on thingy.
- */
- public function maybeInitDebugBar() {
- if ( class_exists('Debug_Bar', false) && file_exists(dirname(__FILE__) . '/DebugBar') ) {
- $this->debugBarExtension = $this->createDebugBarExtension();
- }
- }
-
- protected function createDebugBarExtension() {
- return new Puc_v4p11_DebugBar_Extension($this);
- }
-
- /**
- * Display additional configuration details in the Debug Bar panel.
- *
- * @param Puc_v4p11_DebugBar_Panel $panel
- */
- public function onDisplayConfiguration($panel) {
- //Do nothing. Subclasses can use this to add additional info to the panel.
- }
-
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/UpgraderStatus.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/UpgraderStatus.php
deleted file mode 100644
index 8c0006ed..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/UpgraderStatus.php
+++ /dev/null
@@ -1,199 +0,0 @@
-isBeingUpgraded('plugin', $pluginFile, $upgrader);
- }
-
- /**
- * Is there an update being installed for a specific theme?
- *
- * @param string $stylesheet Theme directory name.
- * @param WP_Upgrader|null $upgrader The upgrader that's performing the current update.
- * @return bool
- */
- public function isThemeBeingUpgraded($stylesheet, $upgrader = null) {
- return $this->isBeingUpgraded('theme', $stylesheet, $upgrader);
- }
-
- /**
- * Check if a specific theme or plugin is being upgraded.
- *
- * @param string $type
- * @param string $id
- * @param Plugin_Upgrader|WP_Upgrader|null $upgrader
- * @return bool
- */
- protected function isBeingUpgraded($type, $id, $upgrader = null) {
- if ( isset($upgrader) ) {
- list($currentType, $currentId) = $this->getThingBeingUpgradedBy($upgrader);
- if ( $currentType !== null ) {
- $this->currentType = $currentType;
- $this->currentId = $currentId;
- }
- }
- return ($this->currentType === $type) && ($this->currentId === $id);
- }
-
- /**
- * Figure out which theme or plugin is being upgraded by a WP_Upgrader instance.
- *
- * Returns an array with two items. The first item is the type of the thing that's being
- * upgraded: "plugin" or "theme". The second item is either the plugin basename or
- * the theme directory name. If we can't determine what the upgrader is doing, both items
- * will be NULL.
- *
- * Examples:
- * ['plugin', 'plugin-dir-name/plugin.php']
- * ['theme', 'theme-dir-name']
- *
- * @param Plugin_Upgrader|WP_Upgrader $upgrader
- * @return array
- */
- private function getThingBeingUpgradedBy($upgrader) {
- if ( !isset($upgrader, $upgrader->skin) ) {
- return array(null, null);
- }
-
- //Figure out which plugin or theme is being upgraded.
- $pluginFile = null;
- $themeDirectoryName = null;
-
- $skin = $upgrader->skin;
- if ( isset($skin->theme_info) && ($skin->theme_info instanceof WP_Theme) ) {
- $themeDirectoryName = $skin->theme_info->get_stylesheet();
- } elseif ( $skin instanceof Plugin_Upgrader_Skin ) {
- if ( isset($skin->plugin) && is_string($skin->plugin) && ($skin->plugin !== '') ) {
- $pluginFile = $skin->plugin;
- }
- } elseif ( $skin instanceof Theme_Upgrader_Skin ) {
- if ( isset($skin->theme) && is_string($skin->theme) && ($skin->theme !== '') ) {
- $themeDirectoryName = $skin->theme;
- }
- } elseif ( isset($skin->plugin_info) && is_array($skin->plugin_info) ) {
- //This case is tricky because Bulk_Plugin_Upgrader_Skin (etc) doesn't actually store the plugin
- //filename anywhere. Instead, it has the plugin headers in $plugin_info. So the best we can
- //do is compare those headers to the headers of installed plugins.
- $pluginFile = $this->identifyPluginByHeaders($skin->plugin_info);
- }
-
- if ( $pluginFile !== null ) {
- return array('plugin', $pluginFile);
- } elseif ( $themeDirectoryName !== null ) {
- return array('theme', $themeDirectoryName);
- }
- return array(null, null);
- }
-
- /**
- * Identify an installed plugin based on its headers.
- *
- * @param array $searchHeaders The plugin file header to look for.
- * @return string|null Plugin basename ("foo/bar.php"), or NULL if we can't identify the plugin.
- */
- private function identifyPluginByHeaders($searchHeaders) {
- if ( !function_exists('get_plugins') ){
- /** @noinspection PhpIncludeInspection */
- require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
- }
-
- $installedPlugins = get_plugins();
- $matches = array();
- foreach($installedPlugins as $pluginBasename => $headers) {
- $diff1 = array_diff_assoc($headers, $searchHeaders);
- $diff2 = array_diff_assoc($searchHeaders, $headers);
- if ( empty($diff1) && empty($diff2) ) {
- $matches[] = $pluginBasename;
- }
- }
-
- //It's possible (though very unlikely) that there could be two plugins with identical
- //headers. In that case, we can't unambiguously identify the plugin that's being upgraded.
- if ( count($matches) !== 1 ) {
- return null;
- }
-
- return reset($matches);
- }
-
- /**
- * @access private
- *
- * @param mixed $input
- * @param array $hookExtra
- * @return mixed Returns $input unaltered.
- */
- public function setUpgradedThing($input, $hookExtra) {
- if ( !empty($hookExtra['plugin']) && is_string($hookExtra['plugin']) ) {
- $this->currentId = $hookExtra['plugin'];
- $this->currentType = 'plugin';
- } elseif ( !empty($hookExtra['theme']) && is_string($hookExtra['theme']) ) {
- $this->currentId = $hookExtra['theme'];
- $this->currentType = 'theme';
- } else {
- $this->currentType = null;
- $this->currentId = null;
- }
- return $input;
- }
-
- /**
- * @access private
- *
- * @param array $options
- * @return array
- */
- public function setUpgradedPluginFromOptions($options) {
- if ( isset($options['hook_extra']['plugin']) && is_string($options['hook_extra']['plugin']) ) {
- $this->currentType = 'plugin';
- $this->currentId = $options['hook_extra']['plugin'];
- } else {
- $this->currentType = null;
- $this->currentId = null;
- }
- return $options;
- }
-
- /**
- * @access private
- *
- * @param mixed $input
- * @return mixed Returns $input unaltered.
- */
- public function clearUpgradedThing($input = null) {
- $this->currentId = null;
- $this->currentType = null;
- return $input;
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Utils.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Utils.php
deleted file mode 100644
index 3004d316..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Utils.php
+++ /dev/null
@@ -1,69 +0,0 @@
-$node) ) {
- $currentValue = $currentValue->$node;
- } else {
- return $default;
- }
- }
-
- return $currentValue;
- }
-
- /**
- * Get the first array element that is not empty.
- *
- * @param array $values
- * @param mixed|null $default Returns this value if there are no non-empty elements.
- * @return mixed|null
- */
- public static function findNotEmpty($values, $default = null) {
- if ( empty($values) ) {
- return $default;
- }
-
- foreach ($values as $value) {
- if ( !empty($value) ) {
- return $value;
- }
- }
-
- return $default;
- }
-
- /**
- * Check if the input string starts with the specified prefix.
- *
- * @param string $input
- * @param string $prefix
- * @return bool
- */
- public static function startsWith($input, $prefix) {
- $length = strlen($prefix);
- return (substr($input, 0, $length) === $prefix);
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/Api.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/Api.php
deleted file mode 100644
index fc31619b..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/Api.php
+++ /dev/null
@@ -1,302 +0,0 @@
-repositoryUrl = $repositoryUrl;
- $this->setAuthentication($credentials);
- }
-
- /**
- * @return string
- */
- public function getRepositoryUrl() {
- return $this->repositoryUrl;
- }
-
- /**
- * Figure out which reference (i.e tag or branch) contains the latest version.
- *
- * @param string $configBranch Start looking in this branch.
- * @return null|Puc_v4p11_Vcs_Reference
- */
- abstract public function chooseReference($configBranch);
-
- /**
- * Get the readme.txt file from the remote repository and parse it
- * according to the plugin readme standard.
- *
- * @param string $ref Tag or branch name.
- * @return array Parsed readme.
- */
- public function getRemoteReadme($ref = 'master') {
- $fileContents = $this->getRemoteFile($this->getLocalReadmeName(), $ref);
- if ( empty($fileContents) ) {
- return array();
- }
-
- $parser = new PucReadmeParser();
- return $parser->parse_readme_contents($fileContents);
- }
-
- /**
- * Get the case-sensitive name of the local readme.txt file.
- *
- * In most cases it should just be called "readme.txt", but some plugins call it "README.txt",
- * "README.TXT", or even "Readme.txt". Most VCS are case-sensitive so we need to know the correct
- * capitalization.
- *
- * Defaults to "readme.txt" (all lowercase).
- *
- * @return string
- */
- public function getLocalReadmeName() {
- static $fileName = null;
- if ( $fileName !== null ) {
- return $fileName;
- }
-
- $fileName = 'readme.txt';
- if ( isset($this->localDirectory) ) {
- $files = scandir($this->localDirectory);
- if ( !empty($files) ) {
- foreach ($files as $possibleFileName) {
- if ( strcasecmp($possibleFileName, 'readme.txt') === 0 ) {
- $fileName = $possibleFileName;
- break;
- }
- }
- }
- }
- return $fileName;
- }
-
- /**
- * Get a branch.
- *
- * @param string $branchName
- * @return Puc_v4p11_Vcs_Reference|null
- */
- abstract public function getBranch($branchName);
-
- /**
- * Get a specific tag.
- *
- * @param string $tagName
- * @return Puc_v4p11_Vcs_Reference|null
- */
- abstract public function getTag($tagName);
-
- /**
- * Get the tag that looks like the highest version number.
- * (Implementations should skip pre-release versions if possible.)
- *
- * @return Puc_v4p11_Vcs_Reference|null
- */
- abstract public function getLatestTag();
-
- /**
- * Check if a tag name string looks like a version number.
- *
- * @param string $name
- * @return bool
- */
- protected function looksLikeVersion($name) {
- //Tag names may be prefixed with "v", e.g. "v1.2.3".
- $name = ltrim($name, 'v');
-
- //The version string must start with a number.
- if ( !is_numeric(substr($name, 0, 1)) ) {
- return false;
- }
-
- //The goal is to accept any SemVer-compatible or "PHP-standardized" version number.
- return (preg_match('@^(\d{1,5}?)(\.\d{1,10}?){0,4}?($|[abrdp+_\-]|\s)@i', $name) === 1);
- }
-
- /**
- * Check if a tag appears to be named like a version number.
- *
- * @param stdClass $tag
- * @return bool
- */
- protected function isVersionTag($tag) {
- $property = $this->tagNameProperty;
- return isset($tag->$property) && $this->looksLikeVersion($tag->$property);
- }
-
- /**
- * Sort a list of tags as if they were version numbers.
- * Tags that don't look like version number will be removed.
- *
- * @param stdClass[] $tags Array of tag objects.
- * @return stdClass[] Filtered array of tags sorted in descending order.
- */
- protected function sortTagsByVersion($tags) {
- //Keep only those tags that look like version numbers.
- $versionTags = array_filter($tags, array($this, 'isVersionTag'));
- //Sort them in descending order.
- usort($versionTags, array($this, 'compareTagNames'));
-
- return $versionTags;
- }
-
- /**
- * Compare two tags as if they were version number.
- *
- * @param stdClass $tag1 Tag object.
- * @param stdClass $tag2 Another tag object.
- * @return int
- */
- protected function compareTagNames($tag1, $tag2) {
- $property = $this->tagNameProperty;
- if ( !isset($tag1->$property) ) {
- return 1;
- }
- if ( !isset($tag2->$property) ) {
- return -1;
- }
- return -version_compare(ltrim($tag1->$property, 'v'), ltrim($tag2->$property, 'v'));
- }
-
- /**
- * Get the contents of a file from a specific branch or tag.
- *
- * @param string $path File name.
- * @param string $ref
- * @return null|string Either the contents of the file, or null if the file doesn't exist or there's an error.
- */
- abstract public function getRemoteFile($path, $ref = 'master');
-
- /**
- * Get the timestamp of the latest commit that changed the specified branch or tag.
- *
- * @param string $ref Reference name (e.g. branch or tag).
- * @return string|null
- */
- abstract public function getLatestCommitTime($ref);
-
- /**
- * Get the contents of the changelog file from the repository.
- *
- * @param string $ref
- * @param string $localDirectory Full path to the local plugin or theme directory.
- * @return null|string The HTML contents of the changelog.
- */
- public function getRemoteChangelog($ref, $localDirectory) {
- $filename = $this->findChangelogName($localDirectory);
- if ( empty($filename) ) {
- return null;
- }
-
- $changelog = $this->getRemoteFile($filename, $ref);
- if ( $changelog === null ) {
- return null;
- }
-
- /** @noinspection PhpUndefinedClassInspection */
- return Parsedown::instance()->text($changelog);
- }
-
- /**
- * Guess the name of the changelog file.
- *
- * @param string $directory
- * @return string|null
- */
- protected function findChangelogName($directory = null) {
- if ( !isset($directory) ) {
- $directory = $this->localDirectory;
- }
- if ( empty($directory) || !is_dir($directory) || ($directory === '.') ) {
- return null;
- }
-
- $possibleNames = array('CHANGES.md', 'CHANGELOG.md', 'changes.md', 'changelog.md');
- $files = scandir($directory);
- $foundNames = array_intersect($possibleNames, $files);
-
- if ( !empty($foundNames) ) {
- return reset($foundNames);
- }
- return null;
- }
-
- /**
- * Set authentication credentials.
- *
- * @param $credentials
- */
- public function setAuthentication($credentials) {
- $this->credentials = $credentials;
- }
-
- public function isAuthenticationEnabled() {
- return !empty($this->credentials);
- }
-
- /**
- * @param string $url
- * @return string
- */
- public function signDownloadUrl($url) {
- return $url;
- }
-
- /**
- * @param string $filterName
- */
- public function setHttpFilterName($filterName) {
- $this->httpFilterName = $filterName;
- }
-
- /**
- * @param string $directory
- */
- public function setLocalDirectory($directory) {
- if ( empty($directory) || !is_dir($directory) || ($directory === '.') ) {
- $this->localDirectory = null;
- } else {
- $this->localDirectory = $directory;
- }
- }
-
- /**
- * @param string $slug
- */
- public function setSlug($slug) {
- $this->slug = $slug;
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/BaseChecker.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/BaseChecker.php
deleted file mode 100644
index 8ffbae92..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/BaseChecker.php
+++ /dev/null
@@ -1,27 +0,0 @@
-[^/]+?)/(?P[^/#?&]+?)/?$@', $path, $matches) ) {
- $this->username = $matches['username'];
- $this->repository = $matches['repository'];
- } else {
- throw new InvalidArgumentException('Invalid BitBucket repository URL: "' . $repositoryUrl . '"');
- }
-
- parent::__construct($repositoryUrl, $credentials);
- }
-
- /**
- * Figure out which reference (i.e tag or branch) contains the latest version.
- *
- * @param string $configBranch Start looking in this branch.
- * @return null|Puc_v4p11_Vcs_Reference
- */
- public function chooseReference($configBranch) {
- $updateSource = null;
-
- //Check if there's a "Stable tag: 1.2.3" header that points to a valid tag.
- $updateSource = $this->getStableTag($configBranch);
-
- //Look for version-like tags.
- if ( !$updateSource && ($configBranch === 'master' || $configBranch === 'main') ) {
- $updateSource = $this->getLatestTag();
- }
- //If all else fails, use the specified branch itself.
- if ( !$updateSource ) {
- $updateSource = $this->getBranch($configBranch);
- }
-
- return $updateSource;
- }
-
- public function getBranch($branchName) {
- $branch = $this->api('/refs/branches/' . $branchName);
- if ( is_wp_error($branch) || empty($branch) ) {
- return null;
- }
-
- //The "/src/{stuff}/{path}" endpoint doesn't seem to handle branch names that contain slashes.
- //If we don't encode the slash, we get a 404. If we encode it as "%2F", we get a 401.
- //To avoid issues, if the branch name is not URL-safe, let's use the commit hash instead.
- $ref = $branch->name;
- if ((urlencode($ref) !== $ref) && isset($branch->target->hash)) {
- $ref = $branch->target->hash;
- }
-
- return new Puc_v4p11_Vcs_Reference(array(
- 'name' => $ref,
- 'updated' => $branch->target->date,
- 'downloadUrl' => $this->getDownloadUrl($branch->name),
- ));
- }
-
- /**
- * Get a specific tag.
- *
- * @param string $tagName
- * @return Puc_v4p11_Vcs_Reference|null
- */
- public function getTag($tagName) {
- $tag = $this->api('/refs/tags/' . $tagName);
- if ( is_wp_error($tag) || empty($tag) ) {
- return null;
- }
-
- return new Puc_v4p11_Vcs_Reference(array(
- 'name' => $tag->name,
- 'version' => ltrim($tag->name, 'v'),
- 'updated' => $tag->target->date,
- 'downloadUrl' => $this->getDownloadUrl($tag->name),
- ));
- }
-
- /**
- * Get the tag that looks like the highest version number.
- *
- * @return Puc_v4p11_Vcs_Reference|null
- */
- public function getLatestTag() {
- $tags = $this->api('/refs/tags?sort=-target.date');
- if ( !isset($tags, $tags->values) || !is_array($tags->values) ) {
- return null;
- }
-
- //Filter and sort the list of tags.
- $versionTags = $this->sortTagsByVersion($tags->values);
-
- //Return the first result.
- if ( !empty($versionTags) ) {
- $tag = $versionTags[0];
- return new Puc_v4p11_Vcs_Reference(array(
- 'name' => $tag->name,
- 'version' => ltrim($tag->name, 'v'),
- 'updated' => $tag->target->date,
- 'downloadUrl' => $this->getDownloadUrl($tag->name),
- ));
- }
- return null;
- }
-
- /**
- * Get the tag/ref specified by the "Stable tag" header in the readme.txt of a given branch.
- *
- * @param string $branch
- * @return null|Puc_v4p11_Vcs_Reference
- */
- protected function getStableTag($branch) {
- $remoteReadme = $this->getRemoteReadme($branch);
- if ( !empty($remoteReadme['stable_tag']) ) {
- $tag = $remoteReadme['stable_tag'];
-
- //You can explicitly opt out of using tags by setting "Stable tag" to
- //"trunk" or the name of the current branch.
- if ( ($tag === $branch) || ($tag === 'trunk') ) {
- return $this->getBranch($branch);
- }
-
- return $this->getTag($tag);
- }
-
- return null;
- }
-
- /**
- * @param string $ref
- * @return string
- */
- protected function getDownloadUrl($ref) {
- return sprintf(
- 'https://bitbucket.org/%s/%s/get/%s.zip',
- $this->username,
- $this->repository,
- $ref
- );
- }
-
- /**
- * Get the contents of a file from a specific branch or tag.
- *
- * @param string $path File name.
- * @param string $ref
- * @return null|string Either the contents of the file, or null if the file doesn't exist or there's an error.
- */
- public function getRemoteFile($path, $ref = 'master') {
- $response = $this->api('src/' . $ref . '/' . ltrim($path));
- if ( is_wp_error($response) || !is_string($response) ) {
- return null;
- }
- return $response;
- }
-
- /**
- * Get the timestamp of the latest commit that changed the specified branch or tag.
- *
- * @param string $ref Reference name (e.g. branch or tag).
- * @return string|null
- */
- public function getLatestCommitTime($ref) {
- $response = $this->api('commits/' . $ref);
- if ( isset($response->values, $response->values[0], $response->values[0]->date) ) {
- return $response->values[0]->date;
- }
- return null;
- }
-
- /**
- * Perform a BitBucket API 2.0 request.
- *
- * @param string $url
- * @param string $version
- * @return mixed|WP_Error
- */
- public function api($url, $version = '2.0') {
- $url = ltrim($url, '/');
- $isSrcResource = Puc_v4p11_Utils::startsWith($url, 'src/');
-
- $url = implode('/', array(
- 'https://api.bitbucket.org',
- $version,
- 'repositories',
- $this->username,
- $this->repository,
- $url
- ));
- $baseUrl = $url;
-
- if ( $this->oauth ) {
- $url = $this->oauth->sign($url,'GET');
- }
-
- $options = array('timeout' => 10);
- if ( !empty($this->httpFilterName) ) {
- $options = apply_filters($this->httpFilterName, $options);
- }
- $response = wp_remote_get($url, $options);
- if ( is_wp_error($response) ) {
- do_action('puc_api_error', $response, null, $url, $this->slug);
- return $response;
- }
-
- $code = wp_remote_retrieve_response_code($response);
- $body = wp_remote_retrieve_body($response);
- if ( $code === 200 ) {
- if ( $isSrcResource ) {
- //Most responses are JSON-encoded, but src resources just
- //return raw file contents.
- $document = $body;
- } else {
- $document = json_decode($body);
- }
- return $document;
- }
-
- $error = new WP_Error(
- 'puc-bitbucket-http-error',
- sprintf('BitBucket API error. Base URL: "%s", HTTP status code: %d.', $baseUrl, $code)
- );
- do_action('puc_api_error', $error, $response, $url, $this->slug);
-
- return $error;
- }
-
- /**
- * @param array $credentials
- */
- public function setAuthentication($credentials) {
- parent::setAuthentication($credentials);
-
- if ( !empty($credentials) && !empty($credentials['consumer_key']) ) {
- $this->oauth = new Puc_v4p11_OAuthSignature(
- $credentials['consumer_key'],
- $credentials['consumer_secret']
- );
- } else {
- $this->oauth = null;
- }
- }
-
- public function signDownloadUrl($url) {
- //Add authentication data to download URLs. Since OAuth signatures incorporate
- //timestamps, we have to do this immediately before inserting the update. Otherwise
- //authentication could fail due to a stale timestamp.
- if ( $this->oauth ) {
- $url = $this->oauth->sign($url);
- }
- return $url;
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/GitHubApi.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/GitHubApi.php
deleted file mode 100644
index 79f3c56e..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/GitHubApi.php
+++ /dev/null
@@ -1,441 +0,0 @@
-[^/]+?)/(?P[^/#?&]+?)/?$@', $path, $matches) ) {
- $this->userName = $matches['username'];
- $this->repositoryName = $matches['repository'];
- } else {
- throw new InvalidArgumentException('Invalid GitHub repository URL: "' . $repositoryUrl . '"');
- }
-
- parent::__construct($repositoryUrl, $accessToken);
- }
-
- /**
- * Get the latest release from GitHub.
- *
- * @return Puc_v4p11_Vcs_Reference|null
- */
- public function getLatestRelease() {
- $release = $this->api('/repos/:user/:repo/releases/latest');
- if ( is_wp_error($release) || !is_object($release) || !isset($release->tag_name) ) {
- return null;
- }
-
- $reference = new Puc_v4p11_Vcs_Reference(array(
- 'name' => $release->tag_name,
- 'version' => ltrim($release->tag_name, 'v'), //Remove the "v" prefix from "v1.2.3".
- 'downloadUrl' => $release->zipball_url,
- 'updated' => $release->created_at,
- 'apiResponse' => $release,
- ));
-
- if ( isset($release->assets[0]) ) {
- $reference->downloadCount = $release->assets[0]->download_count;
- }
-
- if ( $this->releaseAssetsEnabled && isset($release->assets, $release->assets[0]) ) {
- //Use the first release asset that matches the specified regular expression.
- $matchingAssets = array_filter($release->assets, array($this, 'matchesAssetFilter'));
- if ( !empty($matchingAssets) ) {
- if ( $this->isAuthenticationEnabled() ) {
- /**
- * Keep in mind that we'll need to add an "Accept" header to download this asset.
- *
- * @see setUpdateDownloadHeaders()
- */
- $reference->downloadUrl = $matchingAssets[0]->url;
- } else {
- //It seems that browser_download_url only works for public repositories.
- //Using an access_token doesn't help. Maybe OAuth would work?
- $reference->downloadUrl = $matchingAssets[0]->browser_download_url;
- }
-
- $reference->downloadCount = $matchingAssets[0]->download_count;
- }
- }
-
- if ( !empty($release->body) ) {
- /** @noinspection PhpUndefinedClassInspection */
- $reference->changelog = Parsedown::instance()->text($release->body);
- }
-
- return $reference;
- }
-
- /**
- * Get the tag that looks like the highest version number.
- *
- * @return Puc_v4p11_Vcs_Reference|null
- */
- public function getLatestTag() {
- $tags = $this->api('/repos/:user/:repo/tags');
-
- if ( is_wp_error($tags) || !is_array($tags) ) {
- return null;
- }
-
- $versionTags = $this->sortTagsByVersion($tags);
- if ( empty($versionTags) ) {
- return null;
- }
-
- $tag = $versionTags[0];
- return new Puc_v4p11_Vcs_Reference(array(
- 'name' => $tag->name,
- 'version' => ltrim($tag->name, 'v'),
- 'downloadUrl' => $tag->zipball_url,
- 'apiResponse' => $tag,
- ));
- }
-
- /**
- * Get a branch by name.
- *
- * @param string $branchName
- * @return null|Puc_v4p11_Vcs_Reference
- */
- public function getBranch($branchName) {
- $branch = $this->api('/repos/:user/:repo/branches/' . $branchName);
- if ( is_wp_error($branch) || empty($branch) ) {
- return null;
- }
-
- $reference = new Puc_v4p11_Vcs_Reference(array(
- 'name' => $branch->name,
- 'downloadUrl' => $this->buildArchiveDownloadUrl($branch->name),
- 'apiResponse' => $branch,
- ));
-
- if ( isset($branch->commit, $branch->commit->commit, $branch->commit->commit->author->date) ) {
- $reference->updated = $branch->commit->commit->author->date;
- }
-
- return $reference;
- }
-
- /**
- * Get the latest commit that changed the specified file.
- *
- * @param string $filename
- * @param string $ref Reference name (e.g. branch or tag).
- * @return StdClass|null
- */
- public function getLatestCommit($filename, $ref = 'master') {
- $commits = $this->api(
- '/repos/:user/:repo/commits',
- array(
- 'path' => $filename,
- 'sha' => $ref,
- )
- );
- if ( !is_wp_error($commits) && isset($commits[0]) ) {
- return $commits[0];
- }
- return null;
- }
-
- /**
- * Get the timestamp of the latest commit that changed the specified branch or tag.
- *
- * @param string $ref Reference name (e.g. branch or tag).
- * @return string|null
- */
- public function getLatestCommitTime($ref) {
- $commits = $this->api('/repos/:user/:repo/commits', array('sha' => $ref));
- if ( !is_wp_error($commits) && isset($commits[0]) ) {
- return $commits[0]->commit->author->date;
- }
- return null;
- }
-
- /**
- * Perform a GitHub API request.
- *
- * @param string $url
- * @param array $queryParams
- * @return mixed|WP_Error
- */
- protected function api($url, $queryParams = array()) {
- $baseUrl = $url;
- $url = $this->buildApiUrl($url, $queryParams);
-
- $options = array('timeout' => 10);
- if ( $this->isAuthenticationEnabled() ) {
- $options['headers'] = array('Authorization' => $this->getAuthorizationHeader());
- }
-
- if ( !empty($this->httpFilterName) ) {
- $options = apply_filters($this->httpFilterName, $options);
- }
- $response = wp_remote_get($url, $options);
- if ( is_wp_error($response) ) {
- do_action('puc_api_error', $response, null, $url, $this->slug);
- return $response;
- }
-
- $code = wp_remote_retrieve_response_code($response);
- $body = wp_remote_retrieve_body($response);
- if ( $code === 200 ) {
- $document = json_decode($body);
- return $document;
- }
-
- $error = new WP_Error(
- 'puc-github-http-error',
- sprintf('GitHub API error. Base URL: "%s", HTTP status code: %d.', $baseUrl, $code)
- );
- do_action('puc_api_error', $error, $response, $url, $this->slug);
-
- return $error;
- }
-
- /**
- * Build a fully qualified URL for an API request.
- *
- * @param string $url
- * @param array $queryParams
- * @return string
- */
- protected function buildApiUrl($url, $queryParams) {
- $variables = array(
- 'user' => $this->userName,
- 'repo' => $this->repositoryName,
- );
- foreach ($variables as $name => $value) {
- $url = str_replace('/:' . $name, '/' . urlencode($value), $url);
- }
- $url = 'https://api.github.com' . $url;
-
- if ( !empty($queryParams) ) {
- $url = add_query_arg($queryParams, $url);
- }
-
- return $url;
- }
-
- /**
- * Get the contents of a file from a specific branch or tag.
- *
- * @param string $path File name.
- * @param string $ref
- * @return null|string Either the contents of the file, or null if the file doesn't exist or there's an error.
- */
- public function getRemoteFile($path, $ref = 'master') {
- $apiUrl = '/repos/:user/:repo/contents/' . $path;
- $response = $this->api($apiUrl, array('ref' => $ref));
-
- if ( is_wp_error($response) || !isset($response->content) || ($response->encoding !== 'base64') ) {
- return null;
- }
- return base64_decode($response->content);
- }
-
- /**
- * Generate a URL to download a ZIP archive of the specified branch/tag/etc.
- *
- * @param string $ref
- * @return string
- */
- public function buildArchiveDownloadUrl($ref = 'master') {
- $url = sprintf(
- 'https://api.github.com/repos/%1$s/%2$s/zipball/%3$s',
- urlencode($this->userName),
- urlencode($this->repositoryName),
- urlencode($ref)
- );
- return $url;
- }
-
- /**
- * Get a specific tag.
- *
- * @param string $tagName
- * @return void
- */
- public function getTag($tagName) {
- //The current GitHub update checker doesn't use getTag, so I didn't bother to implement it.
- throw new LogicException('The ' . __METHOD__ . ' method is not implemented and should not be used.');
- }
-
- public function setAuthentication($credentials) {
- parent::setAuthentication($credentials);
- $this->accessToken = is_string($credentials) ? $credentials : null;
-
- //Optimization: Instead of filtering all HTTP requests, let's do it only when
- //WordPress is about to download an update.
- add_filter('upgrader_pre_download', array($this, 'addHttpRequestFilter'), 10, 1); //WP 3.7+
- }
-
- /**
- * Figure out which reference (i.e tag or branch) contains the latest version.
- *
- * @param string $configBranch Start looking in this branch.
- * @return null|Puc_v4p11_Vcs_Reference
- */
- public function chooseReference($configBranch) {
- $updateSource = null;
-
- if ( $configBranch === 'master' ) {
- //Use the latest release.
- $updateSource = $this->getLatestRelease();
- if ( $updateSource === null ) {
- //Failing that, use the tag with the highest version number.
- $updateSource = $this->getLatestTag();
- }
- }
- //Alternatively, just use the branch itself.
- if ( empty($updateSource) ) {
- $updateSource = $this->getBranch($configBranch);
- }
-
- return $updateSource;
- }
-
- /**
- * Enable updating via release assets.
- *
- * If the latest release contains no usable assets, the update checker
- * will fall back to using the automatically generated ZIP archive.
- *
- * Private repositories will only work with WordPress 3.7 or later.
- *
- * @param string|null $fileNameRegex Optional. Use only those assets where the file name matches this regex.
- */
- public function enableReleaseAssets($fileNameRegex = null) {
- $this->releaseAssetsEnabled = true;
- $this->assetFilterRegex = $fileNameRegex;
- $this->assetApiBaseUrl = sprintf(
- '//api.github.com/repos/%1$s/%2$s/releases/assets/',
- $this->userName,
- $this->repositoryName
- );
- }
-
- /**
- * Does this asset match the file name regex?
- *
- * @param stdClass $releaseAsset
- * @return bool
- */
- protected function matchesAssetFilter($releaseAsset) {
- if ( $this->assetFilterRegex === null ) {
- //The default is to accept all assets.
- return true;
- }
- return isset($releaseAsset->name) && preg_match($this->assetFilterRegex, $releaseAsset->name);
- }
-
- /**
- * @internal
- * @param bool $result
- * @return bool
- */
- public function addHttpRequestFilter($result) {
- if ( !$this->downloadFilterAdded && $this->isAuthenticationEnabled() ) {
- add_filter('http_request_args', array($this, 'setUpdateDownloadHeaders'), 10, 2);
- add_action('requests-requests.before_redirect', array($this, 'removeAuthHeaderFromRedirects'), 10, 4);
- $this->downloadFilterAdded = true;
- }
- return $result;
- }
-
- /**
- * Set the HTTP headers that are necessary to download updates from private repositories.
- *
- * See GitHub docs:
- * @link https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
- * @link https://developer.github.com/v3/auth/#basic-authentication
- *
- * @internal
- * @param array $requestArgs
- * @param string $url
- * @return array
- */
- public function setUpdateDownloadHeaders($requestArgs, $url = '') {
- //Is WordPress trying to download one of our release assets?
- if ( $this->releaseAssetsEnabled && (strpos($url, $this->assetApiBaseUrl) !== false) ) {
- $requestArgs['headers']['Accept'] = 'application/octet-stream';
- }
- //Use Basic authentication, but only if the download is from our repository.
- $repoApiBaseUrl = $this->buildApiUrl('/repos/:user/:repo/', array());
- if ( $this->isAuthenticationEnabled() && (strpos($url, $repoApiBaseUrl)) === 0 ) {
- $requestArgs['headers']['Authorization'] = $this->getAuthorizationHeader();
- }
- return $requestArgs;
- }
-
- /**
- * When following a redirect, the Requests library will automatically forward
- * the authorization header to other hosts. We don't want that because it breaks
- * AWS downloads and can leak authorization information.
- *
- * @internal
- * @param string $location
- * @param array $headers
- */
- public function removeAuthHeaderFromRedirects(&$location, &$headers) {
- $repoApiBaseUrl = $this->buildApiUrl('/repos/:user/:repo/', array());
- if ( strpos($location, $repoApiBaseUrl) === 0 ) {
- return; //This request is going to GitHub, so it's fine.
- }
- //Remove the header.
- if ( isset($headers['Authorization']) ) {
- unset($headers['Authorization']);
- }
- }
-
- /**
- * Generate the value of the "Authorization" header.
- *
- * @return string
- */
- protected function getAuthorizationHeader() {
- return 'Basic ' . base64_encode($this->userName . ':' . $this->accessToken);
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/GitLabApi.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/GitLabApi.php
deleted file mode 100644
index 75576aec..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/GitLabApi.php
+++ /dev/null
@@ -1,400 +0,0 @@
-repositoryHost = parse_url($repositoryUrl, PHP_URL_HOST) . $port;
-
- if ( $this->repositoryHost !== 'gitlab.com' ) {
- $this->repositoryProtocol = parse_url($repositoryUrl, PHP_URL_SCHEME);
- }
-
- //Find the repository information
- $path = parse_url($repositoryUrl, PHP_URL_PATH);
- if ( preg_match('@^/?(?P[^/]+?)/(?P[^/#?&]+?)/?$@', $path, $matches) ) {
- $this->userName = $matches['username'];
- $this->repositoryName = $matches['repository'];
- } elseif ( ($this->repositoryHost === 'gitlab.com') ) {
- //This is probably a repository in a subgroup, e.g. "/organization/category/repo".
- $parts = explode('/', trim($path, '/'));
- if ( count($parts) < 3 ) {
- throw new InvalidArgumentException('Invalid GitLab.com repository URL: "' . $repositoryUrl . '"');
- }
- $lastPart = array_pop($parts);
- $this->userName = implode('/', $parts);
- $this->repositoryName = $lastPart;
- } else {
- //There could be subgroups in the URL: gitlab.domain.com/group/subgroup/subgroup2/repository
- if ( $subgroup !== null ) {
- $path = str_replace(trailingslashit($subgroup), '', $path);
- }
-
- //This is not a traditional url, it could be gitlab is in a deeper subdirectory.
- //Get the path segments.
- $segments = explode('/', untrailingslashit(ltrim($path, '/')));
-
- //We need at least /user-name/repository-name/
- if ( count($segments) < 2 ) {
- throw new InvalidArgumentException('Invalid GitLab repository URL: "' . $repositoryUrl . '"');
- }
-
- //Get the username and repository name.
- $usernameRepo = array_splice($segments, -2, 2);
- $this->userName = $usernameRepo[0];
- $this->repositoryName = $usernameRepo[1];
-
- //Append the remaining segments to the host if there are segments left.
- if ( count($segments) > 0 ) {
- $this->repositoryHost = trailingslashit($this->repositoryHost) . implode('/', $segments);
- }
-
- //Add subgroups to username.
- if ( $subgroup !== null ) {
- $this->userName = $usernameRepo[0] . '/' . untrailingslashit($subgroup);
- }
- }
-
- parent::__construct($repositoryUrl, $accessToken);
- }
-
- /**
- * Get the latest release from GitLab.
- *
- * @return Puc_v4p11_Vcs_Reference|null
- */
- public function getLatestRelease() {
- $releases = $this->api('/:id/releases');
- if ( is_wp_error($releases) || empty($releases) || !is_array($releases) ) {
- return null;
- }
-
- foreach ($releases as $release) {
- if ( true !== $release->upcoming_release ) {
- break 1; //Break the loop on the first release we find that isn't an upcoming release
- }
- }
- if ( is_wp_error($release) || !is_object($release) || !isset($release->tag_name) ) {
- return null;
- }
-
- $reference = new Puc_v4p11_Vcs_Reference(array(
- 'name' => $release->tag_name,
- 'version' => ltrim($release->tag_name, 'v'), //Remove the "v" prefix from "v1.2.3".
- 'downloadUrl' => '',
- 'updated' => $release->released_at,
- 'apiResponse' => $release,
- ));
- $download_url = false;
-
- if ( $this->releasePackageEnabled && isset($release->assets, $release->assets->links) ) {
- /**
- * Use the first asset LINK that is a zip format file generated by a Gitlab Release Pipeline
- *
- * @link https://gist.github.com/timwiel/9dfd3526c768efad4973254085e065ce
- */
- foreach ($release->assets->links as $link) {
- //TODO: Check the "format" property instead of the URL suffix.
- if ( 'zip' === substr($link->url, -3) ) {
- $download_url = $link->url;
- break 1;
- }
- }
- if ( empty( $download_url ) ) {
- return null;
- }
- if ( ! empty( $this->accessToken ) ) {
- $download_url = add_query_arg('private_token', $this->accessToken, $download_url);
- }
- $reference->downloadUrl = $download_url;
- return $reference;
-
- } elseif ( isset($release->assets) ) {
- /**
- * Use the first asset SOURCE file that is a zip format from a Gitlab Release which should be a zip file
- */
- foreach ($release->assets->sources as $source) {
- if ( 'zip' === $source->format ) {
- $download_url = $source->url;
- break 1;
- }
- }
- if ( empty( $download_url ) ) {
- return null;
- }
- if ( ! empty( $this->accessToken ) ) {
- $download_url = add_query_arg('private_token', $this->accessToken, $download_url);
- }
- $reference->downloadUrl = $download_url;
- return $reference;
-
- }
-
- //If we get this far without a return then obviosuly noi release download urls were found
- return null;
- }
-
- /**
- * Get the tag that looks like the highest version number.
- *
- * @return Puc_v4p11_Vcs_Reference|null
- */
- public function getLatestTag() {
- $tags = $this->api('/:id/repository/tags');
- if ( is_wp_error($tags) || empty($tags) || !is_array($tags) ) {
- return null;
- }
-
- $versionTags = $this->sortTagsByVersion($tags);
- if ( empty($versionTags) ) {
- return null;
- }
-
- $tag = $versionTags[0];
- return new Puc_v4p11_Vcs_Reference(array(
- 'name' => $tag->name,
- 'version' => ltrim($tag->name, 'v'),
- 'downloadUrl' => $this->buildArchiveDownloadUrl($tag->name),
- 'apiResponse' => $tag,
- ));
- }
-
- /**
- * Get a branch by name.
- *
- * @param string $branchName
- * @return null|Puc_v4p11_Vcs_Reference
- */
- public function getBranch($branchName) {
- $branch = $this->api('/:id/repository/branches/' . $branchName);
- if ( is_wp_error($branch) || empty($branch) ) {
- return null;
- }
-
- $reference = new Puc_v4p11_Vcs_Reference(array(
- 'name' => $branch->name,
- 'downloadUrl' => $this->buildArchiveDownloadUrl($branch->name),
- 'apiResponse' => $branch,
- ));
-
- if ( isset($branch->commit, $branch->commit->committed_date) ) {
- $reference->updated = $branch->commit->committed_date;
- }
-
- return $reference;
- }
-
- /**
- * Get the timestamp of the latest commit that changed the specified branch or tag.
- *
- * @param string $ref Reference name (e.g. branch or tag).
- * @return string|null
- */
- public function getLatestCommitTime($ref) {
- $commits = $this->api('/:id/repository/commits/', array('ref_name' => $ref));
- if ( is_wp_error($commits) || !is_array($commits) || !isset($commits[0]) ) {
- return null;
- }
-
- return $commits[0]->committed_date;
- }
-
- /**
- * Perform a GitLab API request.
- *
- * @param string $url
- * @param array $queryParams
- * @return mixed|WP_Error
- */
- protected function api($url, $queryParams = array()) {
- $baseUrl = $url;
- $url = $this->buildApiUrl($url, $queryParams);
-
- $options = array('timeout' => 10);
- if ( !empty($this->httpFilterName) ) {
- $options = apply_filters($this->httpFilterName, $options);
- }
-
- $response = wp_remote_get($url, $options);
- if ( is_wp_error($response) ) {
- do_action('puc_api_error', $response, null, $url, $this->slug);
- return $response;
- }
-
- $code = wp_remote_retrieve_response_code($response);
- $body = wp_remote_retrieve_body($response);
- if ( $code === 200 ) {
- return json_decode($body);
- }
-
- $error = new WP_Error(
- 'puc-gitlab-http-error',
- sprintf('GitLab API error. URL: "%s", HTTP status code: %d.', $baseUrl, $code)
- );
- do_action('puc_api_error', $error, $response, $url, $this->slug);
-
- return $error;
- }
-
- /**
- * Build a fully qualified URL for an API request.
- *
- * @param string $url
- * @param array $queryParams
- * @return string
- */
- protected function buildApiUrl($url, $queryParams) {
- $variables = array(
- 'user' => $this->userName,
- 'repo' => $this->repositoryName,
- 'id' => $this->userName . '/' . $this->repositoryName,
- );
-
- foreach ($variables as $name => $value) {
- $url = str_replace("/:{$name}", '/' . urlencode($value), $url);
- }
-
- $url = substr($url, 1);
- $url = sprintf('%1$s://%2$s/api/v4/projects/%3$s', $this->repositoryProtocol, $this->repositoryHost, $url);
-
- if ( !empty($this->accessToken) ) {
- $queryParams['private_token'] = $this->accessToken;
- }
-
- if ( !empty($queryParams) ) {
- $url = add_query_arg($queryParams, $url);
- }
-
- return $url;
- }
-
- /**
- * Get the contents of a file from a specific branch or tag.
- *
- * @param string $path File name.
- * @param string $ref
- * @return null|string Either the contents of the file, or null if the file doesn't exist or there's an error.
- */
- public function getRemoteFile($path, $ref = 'master') {
- $response = $this->api('/:id/repository/files/' . $path, array('ref' => $ref));
- if ( is_wp_error($response) || !isset($response->content) || $response->encoding !== 'base64' ) {
- return null;
- }
-
- return base64_decode($response->content);
- }
-
- /**
- * Generate a URL to download a ZIP archive of the specified branch/tag/etc.
- *
- * @param string $ref
- * @return string
- */
- public function buildArchiveDownloadUrl($ref = 'master') {
- $url = sprintf(
- '%1$s://%2$s/api/v4/projects/%3$s/repository/archive.zip',
- $this->repositoryProtocol,
- $this->repositoryHost,
- urlencode($this->userName . '/' . $this->repositoryName)
- );
- $url = add_query_arg('sha', urlencode($ref), $url);
-
- if ( !empty($this->accessToken) ) {
- $url = add_query_arg('private_token', $this->accessToken, $url);
- }
-
- return $url;
- }
-
- /**
- * Get a specific tag.
- *
- * @param string $tagName
- * @return void
- */
- public function getTag($tagName) {
- throw new LogicException('The ' . __METHOD__ . ' method is not implemented and should not be used.');
- }
-
- /**
- * Figure out which reference (i.e tag or branch) contains the latest version.
- *
- * @param string $configBranch Start looking in this branch.
- * @return null|Puc_v4p11_Vcs_Reference
- */
- public function chooseReference($configBranch) {
-
- if ( $configBranch === 'main' || $configBranch === 'master' ) {
- //Use the latest release.
- $updateSource = $this->getLatestRelease();
- if ( $updateSource === null ) {
- //Failing that, use the tag with the highest version number.
- $updateSource = $this->getLatestTag();
- }
- }
- //Alternatively, just use the branch itself.
- if ( empty($updateSource) ) {
- $updateSource = $this->getBranch($configBranch);
- }
-
- return $updateSource;
- }
-
- public function setAuthentication($credentials) {
- parent::setAuthentication($credentials);
- $this->accessToken = is_string($credentials) ? $credentials : null;
- }
-
- public function enableReleaseAssets() {
- $this->releaseAssetsEnabled = true;
- $this->releasePackageEnabled = false;
- }
-
- public function enableReleasePackages() {
- $this->releaseAssetsEnabled = false;
- $this->releasePackageEnabled = true;
- }
-
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/PluginUpdateChecker.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/PluginUpdateChecker.php
deleted file mode 100644
index ff6a0f26..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/PluginUpdateChecker.php
+++ /dev/null
@@ -1,293 +0,0 @@
-api = $api;
- $this->api->setHttpFilterName($this->getUniqueName('request_info_options'));
-
- parent::__construct($api->getRepositoryUrl(), $pluginFile, $slug, $checkPeriod, $optionName, $muPluginFile);
-
- $this->api->setSlug($this->slug);
- }
-
- public function requestInfo($unusedParameter = null) {
- //We have to make several remote API requests to gather all the necessary info
- //which can take a while on slow networks.
- if ( function_exists('set_time_limit') ) {
- @set_time_limit(60);
- }
-
- $api = $this->api;
- $api->setLocalDirectory($this->package->getAbsoluteDirectoryPath());
-
- $info = new Puc_v4p11_Plugin_Info();
- $info->filename = $this->pluginFile;
- $info->slug = $this->slug;
-
- $this->setInfoFromHeader($this->package->getPluginHeader(), $info);
- $this->setIconsFromLocalAssets($info);
- $this->setBannersFromLocalAssets($info);
-
- //Pick a branch or tag.
- $updateSource = $api->chooseReference($this->branch);
- if ( $updateSource ) {
- $ref = $updateSource->name;
- $info->version = $updateSource->version;
- $info->last_updated = $updateSource->updated;
- $info->download_url = $updateSource->downloadUrl;
-
- if ( !empty($updateSource->changelog) ) {
- $info->sections['changelog'] = $updateSource->changelog;
- }
- if ( isset($updateSource->downloadCount) ) {
- $info->downloaded = $updateSource->downloadCount;
- }
- } else {
- //There's probably a network problem or an authentication error.
- do_action(
- 'puc_api_error',
- new WP_Error(
- 'puc-no-update-source',
- 'Could not retrieve version information from the repository. '
- . 'This usually means that the update checker either can\'t connect '
- . 'to the repository or it\'s configured incorrectly.'
- ),
- null, null, $this->slug
- );
- return null;
- }
-
- //Get headers from the main plugin file in this branch/tag. Its "Version" header and other metadata
- //are what the WordPress install will actually see after upgrading, so they take precedence over releases/tags.
- $mainPluginFile = basename($this->pluginFile);
- $remotePlugin = $api->getRemoteFile($mainPluginFile, $ref);
- if ( !empty($remotePlugin) ) {
- $remoteHeader = $this->package->getFileHeader($remotePlugin);
- $this->setInfoFromHeader($remoteHeader, $info);
- }
-
- //Try parsing readme.txt. If it's formatted according to WordPress.org standards, it will contain
- //a lot of useful information like the required/tested WP version, changelog, and so on.
- if ( $this->readmeTxtExistsLocally() ) {
- $this->setInfoFromRemoteReadme($ref, $info);
- }
-
- //The changelog might be in a separate file.
- if ( empty($info->sections['changelog']) ) {
- $info->sections['changelog'] = $api->getRemoteChangelog($ref, $this->package->getAbsoluteDirectoryPath());
- if ( empty($info->sections['changelog']) ) {
- $info->sections['changelog'] = __('There is no changelog available.', 'plugin-update-checker');
- }
- }
-
- if ( empty($info->last_updated) ) {
- //Fetch the latest commit that changed the tag or branch and use it as the "last_updated" date.
- $latestCommitTime = $api->getLatestCommitTime($ref);
- if ( $latestCommitTime !== null ) {
- $info->last_updated = $latestCommitTime;
- }
- }
-
- $info = apply_filters($this->getUniqueName('request_info_result'), $info, null);
- return $info;
- }
-
- /**
- * Check if the currently installed version has a readme.txt file.
- *
- * @return bool
- */
- protected function readmeTxtExistsLocally() {
- return $this->package->fileExists($this->api->getLocalReadmeName());
- }
-
- /**
- * Copy plugin metadata from a file header to a Plugin Info object.
- *
- * @param array $fileHeader
- * @param Puc_v4p11_Plugin_Info $pluginInfo
- */
- protected function setInfoFromHeader($fileHeader, $pluginInfo) {
- $headerToPropertyMap = array(
- 'Version' => 'version',
- 'Name' => 'name',
- 'PluginURI' => 'homepage',
- 'Author' => 'author',
- 'AuthorName' => 'author',
- 'AuthorURI' => 'author_homepage',
-
- 'Requires WP' => 'requires',
- 'Tested WP' => 'tested',
- 'Requires at least' => 'requires',
- 'Tested up to' => 'tested',
-
- 'Requires PHP' => 'requires_php',
- );
- foreach ($headerToPropertyMap as $headerName => $property) {
- if ( isset($fileHeader[$headerName]) && !empty($fileHeader[$headerName]) ) {
- $pluginInfo->$property = $fileHeader[$headerName];
- }
- }
-
- if ( !empty($fileHeader['Description']) ) {
- $pluginInfo->sections['description'] = $fileHeader['Description'];
- }
- }
-
- /**
- * Copy plugin metadata from the remote readme.txt file.
- *
- * @param string $ref GitHub tag or branch where to look for the readme.
- * @param Puc_v4p11_Plugin_Info $pluginInfo
- */
- protected function setInfoFromRemoteReadme($ref, $pluginInfo) {
- $readme = $this->api->getRemoteReadme($ref);
- if ( empty($readme) ) {
- return;
- }
-
- if ( isset($readme['sections']) ) {
- $pluginInfo->sections = array_merge($pluginInfo->sections, $readme['sections']);
- }
- if ( !empty($readme['tested_up_to']) ) {
- $pluginInfo->tested = $readme['tested_up_to'];
- }
- if ( !empty($readme['requires_at_least']) ) {
- $pluginInfo->requires = $readme['requires_at_least'];
- }
- if ( !empty($readme['requires_php']) ) {
- $pluginInfo->requires_php = $readme['requires_php'];
- }
-
- if ( isset($readme['upgrade_notice'], $readme['upgrade_notice'][$pluginInfo->version]) ) {
- $pluginInfo->upgrade_notice = $readme['upgrade_notice'][$pluginInfo->version];
- }
- }
-
- /**
- * Add icons from the currently installed version to a Plugin Info object.
- *
- * The icons should be in a subdirectory named "assets". Supported image formats
- * and file names are described here:
- * @link https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/#plugin-icons
- *
- * @param Puc_v4p11_Plugin_Info $pluginInfo
- */
- protected function setIconsFromLocalAssets($pluginInfo) {
- $icons = $this->getLocalAssetUrls(array(
- 'icon.svg' => 'svg',
- 'icon-256x256.png' => '2x',
- 'icon-256x256.jpg' => '2x',
- 'icon-128x128.png' => '1x',
- 'icon-128x128.jpg' => '1x',
- ));
-
- if ( !empty($icons) ) {
- //The "default" key seems to be used only as last-resort fallback in WP core (5.8/5.9),
- //but we'll set it anyway in case some code somewhere needs it.
- reset($icons);
- $firstKey = key($icons);
- $icons['default'] = $icons[$firstKey];
-
- $pluginInfo->icons = $icons;
- }
- }
-
- /**
- * Add banners from the currently installed version to a Plugin Info object.
- *
- * The banners should be in a subdirectory named "assets". Supported image formats
- * and file names are described here:
- * @link https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/#plugin-headers
- *
- * @param Puc_v4p11_Plugin_Info $pluginInfo
- */
- protected function setBannersFromLocalAssets($pluginInfo) {
- $banners = $this->getLocalAssetUrls(array(
- 'banner-772x250.png' => 'high',
- 'banner-772x250.jpg' => 'high',
- 'banner-1544x500.png' => 'low',
- 'banner-1544x500.jpg' => 'low',
- ));
-
- if ( !empty($banners) ) {
- $pluginInfo->banners = $banners;
- }
- }
-
- /**
- * @param array $filesToKeys
- * @return array
- */
- protected function getLocalAssetUrls($filesToKeys) {
- $assetDirectory = $this->package->getAbsoluteDirectoryPath() . DIRECTORY_SEPARATOR . 'assets';
- if ( !is_dir($assetDirectory) ) {
- return array();
- }
- $assetBaseUrl = trailingslashit(plugins_url('', $assetDirectory . '/imaginary.file'));
-
- $foundAssets = array();
- foreach ($filesToKeys as $fileName => $key) {
- $fullBannerPath = $assetDirectory . DIRECTORY_SEPARATOR . $fileName;
- if ( !isset($icons[$key]) && is_file($fullBannerPath) ) {
- $foundAssets[$key] = $assetBaseUrl . $fileName;
- }
- }
-
- return $foundAssets;
- }
-
- public function setBranch($branch) {
- $this->branch = $branch;
- return $this;
- }
-
- public function setAuthentication($credentials) {
- $this->api->setAuthentication($credentials);
- return $this;
- }
-
- public function getVcsApi() {
- return $this->api;
- }
-
- public function getUpdate() {
- $update = parent::getUpdate();
-
- if ( isset($update) && !empty($update->download_url) ) {
- $update->download_url = $this->api->signDownloadUrl($update->download_url);
- }
-
- return $update;
- }
-
- public function onDisplayConfiguration($panel) {
- parent::onDisplayConfiguration($panel);
- $panel->row('Branch', $this->branch);
- $panel->row('Authentication enabled', $this->api->isAuthenticationEnabled() ? 'Yes' : 'No');
- $panel->row('API client', get_class($this->api));
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/Reference.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/Reference.php
deleted file mode 100644
index 0bf8c692..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/Reference.php
+++ /dev/null
@@ -1,49 +0,0 @@
-properties = $properties;
- }
-
- /**
- * @param string $name
- * @return mixed|null
- */
- public function __get($name) {
- return array_key_exists($name, $this->properties) ? $this->properties[$name] : null;
- }
-
- /**
- * @param string $name
- * @param mixed $value
- */
- public function __set($name, $value) {
- $this->properties[$name] = $value;
- }
-
- /**
- * @param string $name
- * @return bool
- */
- public function __isset($name) {
- return isset($this->properties[$name]);
- }
-
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/ThemeUpdateChecker.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/ThemeUpdateChecker.php
deleted file mode 100644
index 1850af66..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/Puc/v4p11/Vcs/ThemeUpdateChecker.php
+++ /dev/null
@@ -1,118 +0,0 @@
-api = $api;
- $this->api->setHttpFilterName($this->getUniqueName('request_update_options'));
-
- parent::__construct($api->getRepositoryUrl(), $stylesheet, $customSlug, $checkPeriod, $optionName);
-
- $this->api->setSlug($this->slug);
- }
-
- public function requestUpdate() {
- $api = $this->api;
- $api->setLocalDirectory($this->package->getAbsoluteDirectoryPath());
-
- $update = new Puc_v4p11_Theme_Update();
- $update->slug = $this->slug;
-
- //Figure out which reference (tag or branch) we'll use to get the latest version of the theme.
- $updateSource = $api->chooseReference($this->branch);
- if ( $updateSource ) {
- $ref = $updateSource->name;
- $update->download_url = $updateSource->downloadUrl;
- } else {
- do_action(
- 'puc_api_error',
- new WP_Error(
- 'puc-no-update-source',
- 'Could not retrieve version information from the repository. '
- . 'This usually means that the update checker either can\'t connect '
- . 'to the repository or it\'s configured incorrectly.'
- ),
- null, null, $this->slug
- );
- $ref = $this->branch;
- }
-
- //Get headers from the main stylesheet in this branch/tag. Its "Version" header and other metadata
- //are what the WordPress install will actually see after upgrading, so they take precedence over releases/tags.
- $remoteHeader = $this->package->getFileHeader($api->getRemoteFile('style.css', $ref));
- $update->version = Puc_v4p11_Utils::findNotEmpty(array(
- $remoteHeader['Version'],
- Puc_v4p11_Utils::get($updateSource, 'version'),
- ));
-
- //The details URL defaults to the Theme URI header or the repository URL.
- $update->details_url = Puc_v4p11_Utils::findNotEmpty(array(
- $remoteHeader['ThemeURI'],
- $this->package->getHeaderValue('ThemeURI'),
- $this->metadataUrl,
- ));
-
- if ( empty($update->version) ) {
- //It looks like we didn't find a valid update after all.
- $update = null;
- }
-
- $update = $this->filterUpdateResult($update);
- return $update;
- }
-
- //FIXME: This is duplicated code. Both theme and plugin subclasses that use VCS share these methods.
-
- public function setBranch($branch) {
- $this->branch = $branch;
- return $this;
- }
-
- public function setAuthentication($credentials) {
- $this->api->setAuthentication($credentials);
- return $this;
- }
-
- public function getVcsApi() {
- return $this->api;
- }
-
- public function getUpdate() {
- $update = parent::getUpdate();
-
- if ( isset($update) && !empty($update->download_url) ) {
- $update->download_url = $this->api->signDownloadUrl($update->download_url);
- }
-
- return $update;
- }
-
- public function onDisplayConfiguration($panel) {
- parent::onDisplayConfiguration($panel);
- $panel->row('Branch', $this->branch);
- $panel->row('Authentication enabled', $this->api->isAuthenticationEnabled() ? 'Yes' : 'No');
- $panel->row('API client', get_class($this->api));
- }
- }
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/README.md b/wp/wp-content/plugins/divifilter/plugin-update-checker/README.md
deleted file mode 100644
index 93d8a7d0..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/README.md
+++ /dev/null
@@ -1,326 +0,0 @@
-Plugin Update Checker
-=====================
-
-This is a custom update checker library for WordPress plugins and themes. It lets you add automatic update notifications and one-click upgrades to your commercial plugins, private themes, and so on. All you need to do is put your plugin/theme details in a JSON file, place the file on your server, and pass the URL to the library. The library periodically checks the URL to see if there's a new version available and displays an update notification to the user if necessary.
-
-From the users' perspective, it works just like with plugins and themes hosted on WordPress.org. The update checker uses the default upgrade UI that is familiar to most WordPress users.
-
-
-
-**Table of Contents**
-
-- [Getting Started](#getting-started)
- - [Self-hosted Plugins and Themes](#self-hosted-plugins-and-themes)
- - [How to Release an Update](#how-to-release-an-update)
- - [Notes](#notes)
- - [GitHub Integration](#github-integration)
- - [How to Release an Update](#how-to-release-an-update-1)
- - [Notes](#notes-1)
- - [BitBucket Integration](#bitbucket-integration)
- - [How to Release an Update](#how-to-release-an-update-2)
- - [GitLab Integration](#gitlab-integration)
- - [How to Release a GitLab Update](#how-to-release-a-gitlab-update)
-- [License Management](#license-management)
-- [Resources](#resources)
-
-
-
-Getting Started
----------------
-
-*Note:* In each of the below examples, part of the instructions are to create an instance of the update checker class. It's recommended to do this either during the `plugins_loaded` action or outside of any hooks. If you do it only during an `admin_*` action, then updates will not be visible to a wide variety of WordPress maanagement tools; they will only be visible to logged-in users on dashboard pages.
-
-### Self-hosted Plugins and Themes
-
-1. Download [the latest release](https://github.com/YahnisElsts/plugin-update-checker/releases/latest) and copy the `plugin-update-checker` directory to your plugin or theme.
-2. Go to the `examples` subdirectory and open the .json file that fits your project type. Replace the placeholder data with your plugin/theme details.
- - Plugin example:
-
- ```json
- {
- "name" : "Plugin Name",
- "version" : "2.0",
- "download_url" : "http://example.com/plugin-name-2.0.zip",
- "sections" : {
- "description" : "Plugin description here. You can use HTML."
- }
- }
- ```
-
- This is a minimal example that leaves out optional fields. See [this table](https://docs.google.com/spreadsheets/d/1eOBbW7Go2qEQXReOOCdidMTf_tDYRq4JfegcO1CBPIs/edit?usp=sharing) for a full list of supported fields and their descriptions.
- - Theme example:
-
- ```json
- {
- "version": "2.0",
- "details_url": "http://example.com/version-2.0-details.html",
- "download_url": "http://example.com/example-theme-2.0.zip"
- }
- ```
-
- This is actually a complete example that shows all theme-related fields. `version` and `download_url` should be self-explanatory. The `details_url` key specifies the page that the user will see if they click the "View version 1.2.3 details" link in an update notification.
-3. Upload the JSON file to a publicly accessible location.
-4. Add the following code to the main plugin file or to the `functions.php` file:
-
- ```php
- require 'path/to/plugin-update-checker/plugin-update-checker.php';
- $myUpdateChecker = Puc_v4_Factory::buildUpdateChecker(
- 'http://example.com/path/to/details.json',
- __FILE__, //Full path to the main plugin file or functions.php.
- 'unique-plugin-or-theme-slug'
- );
- ```
- Note: If you're using the Composer autoloader, you don't need to explicitly `require` the library.
-
-#### How to Release an Update
-
-Change the `version` number in the JSON file and make sure that `download_url` points to the latest version. Update the other fields if necessary. Tip: You can use [wp-update-server](https://github.com/YahnisElsts/wp-update-server) to automate this process.
-
-By default, the library will check the specified URL for changes every 12 hours. You can force it to check immediately by clicking the "Check for updates" link on the "Plugins" page (it's next to the "Visit plugin site" link). Themes don't have that link, but you can also trigger an update check like this:
-
- 1. Install [Debug Bar](https://srd.wordpress.org/plugins/debug-bar/).
- 2. Click the "Debug" menu in the Admin Bar (a.k.a Toolbar).
- 3. Open the "PUC (your-slug)" panel.
- 4. Click the "Check Now" button.
-
-#### Notes
-- The second argument passed to `buildUpdateChecker` must be the absolute path to the main plugin file or any file in the theme directory. If you followed the "getting started" instructions, you can just use the `__FILE__` constant.
-- The third argument - i.e. the slug - is optional but recommended. In most cases, the slug should be the same as the name of your plugin directory. For example, if your plugin lives in `/wp-content/plugins/my-plugin`, set the slug to `my-plugin`. If the slug is omitted, the update checker will use the name of the main plugin file as the slug (e.g. `my-cool-plugin.php` → `my-cool-plugin`). This can lead to conflicts if your plugin has a generic file name like `plugin.php`.
-
- This doesn't affect themes because PUC uses the theme directory name as the default slug. Still, if you're planning to use the slug in your own code - e.g. to filter updates or override update checker behaviour - it can be a good idea to set it explicitly.
-
-### GitHub Integration
-
-1. Download [the latest release](https://github.com/YahnisElsts/plugin-update-checker/releases/latest) and copy the `plugin-update-checker` directory to your plugin or theme.
-2. Add the following code to the main plugin file or `functions.php`:
-
- ```php
- require 'plugin-update-checker/plugin-update-checker.php';
- $myUpdateChecker = Puc_v4_Factory::buildUpdateChecker(
- 'https://github.com/user-name/repo-name/',
- __FILE__,
- 'unique-plugin-or-theme-slug'
- );
-
- //Set the branch that contains the stable release.
- $myUpdateChecker->setBranch('stable-branch-name');
-
- //Optional: If you're using a private repository, specify the access token like this:
- $myUpdateChecker->setAuthentication('your-token-here');
- ```
-3. Plugins only: Add a `readme.txt` file formatted according to the [WordPress.org plugin readme standard](https://wordpress.org/plugins/readme.txt) to your repository. The contents of this file will be shown when the user clicks the "View version 1.2.3 details" link.
-
-#### How to Release an Update
-
-This library supports a couple of different ways to release updates on GitHub. Pick the one that best fits your workflow.
-
-- **GitHub releases**
-
- Create a new release using the "Releases" feature on GitHub. The tag name and release title don't matter. The description is optional, but if you do provide one, it will be displayed when the user clicks the "View version x.y.z details" link on the "Plugins" page. Note that PUC ignores releases marked as "This is a pre-release".
-
- If you want to use release assets, call the `enableReleaseAssets()` method after creating the update checker instance:
- ```php
- $myUpdateChecker->getVcsApi()->enableReleaseAssets();
- ```
-
-- **Tags**
-
- To release version 1.2.3, create a new Git tag named `v1.2.3` or `1.2.3`. That's it.
-
- PUC doesn't require strict adherence to [SemVer](http://semver.org/). These are all valid tag names: `v1.2.3`, `v1.2-foo`, `1.2.3_rc1-ABC`, `1.2.3.4.5`. However, be warned that it's not smart enough to filter out alpha/beta/RC versions. If that's a problem, you might want to use GitHub releases or branches instead.
-
-- **Stable branch**
-
- Point the update checker at a stable, production-ready branch:
- ```php
- $updateChecker->setBranch('branch-name');
- ```
- PUC will periodically check the `Version` header in the main plugin file or `style.css` and display a notification if it's greater than the installed version.
-
- Caveat: If you set the branch to `master` (the default), the update checker will look for recent releases and tags first. It'll only use the `master` branch if it doesn't find anything else suitable.
-
-#### Notes
-
-The library will pull update details from the following parts of a release/tag/branch:
-
-- Version number
- - The "Version" plugin header.
- - The latest GitHub release or tag name.
-- Changelog
- - The "Changelog" section of `readme.txt`.
- - One of the following files:
- CHANGES.md, CHANGELOG.md, changes.md, changelog.md
- - GitHub release notes.
-- Required and tested WordPress versions
- - The "Requires at least" and "Tested up to" fields in `readme.txt`.
- - The following plugin headers:
- `Required WP`, `Tested WP`, `Requires at least`, `Tested up to`
-- "Last updated" timestamp
- - The creation timestamp of the latest GitHub release.
- - The latest commit in the selected tag or branch.
-- Number of downloads
- - The `download_count` statistic of the latest release.
- - If you're not using GitHub releases, there will be no download stats.
-- Other plugin details - author, homepage URL, description
- - The "Description" section of `readme.txt`.
- - Remote plugin headers (i.e. the latest version on GitHub).
- - Local plugin headers (i.e. the currently installed version).
-- Ratings, banners, screenshots
- - Not supported.
-
-### BitBucket Integration
-
-1. Download [the latest release](https://github.com/YahnisElsts/plugin-update-checker/releases/latest) and copy the `plugin-update-checker` directory to your plugin or theme.
-2. Add the following code to the main plugin file or `functions.php`:
-
- ```php
- require 'plugin-update-checker/plugin-update-checker.php';
- $myUpdateChecker = Puc_v4_Factory::buildUpdateChecker(
- 'https://bitbucket.org/user-name/repo-name',
- __FILE__,
- 'unique-plugin-or-theme-slug'
- );
-
- //Optional: If you're using a private repository, create an OAuth consumer
- //and set the authentication credentials like this:
- //Note: For now you need to check "This is a private consumer" when
- //creating the consumer to work around #134:
- // https://github.com/YahnisElsts/plugin-update-checker/issues/134
- $myUpdateChecker->setAuthentication(array(
- 'consumer_key' => '...',
- 'consumer_secret' => '...',
- ));
-
- //Optional: Set the branch that contains the stable release.
- $myUpdateChecker->setBranch('stable-branch-name');
- ```
-3. Optional: Add a `readme.txt` file formatted according to the [WordPress.org plugin readme standard](https://wordpress.org/plugins/readme.txt) to your repository. For plugins, the contents of this file will be shown when the user clicks the "View version 1.2.3 details" link.
-
-#### How to Release an Update
-
-BitBucket doesn't have an equivalent to GitHub's releases, so the process is slightly different. You can use any of the following approaches:
-
-- **`Stable tag` header**
-
- This is the recommended approach if you're using tags to mark each version. Add a `readme.txt` file formatted according to the [WordPress.org plugin readme standard](https://wordpress.org/plugins/readme.txt) to your repository. Set the "stable tag" header to the tag that represents the latest release. Example:
- ```text
- Stable tag: v1.2.3
- ```
- The tag doesn't have to start with a "v" or follow any particular format. You can use any name you like as long as it's a valid Git tag.
-
- Tip: If you explicitly set a stable branch, the update checker will look for a `readme.txt` in that branch. Otherwise it will only look at the `master` branch.
-
-- **Tags**
-
- You can skip the "stable tag" bit and just create a new Git tag named `v1.2.3` or `1.2.3`. The update checker will look at the most recent tags and pick the one that looks like the highest version number.
-
- PUC doesn't require strict adherence to [SemVer](http://semver.org/). These are all valid tag names: `v1.2.3`, `v1.2-foo`, `1.2.3_rc1-ABC`, `1.2.3.4.5`. However, be warned that it's not smart enough to filter out alpha/beta/RC versions.
-
-- **Stable branch**
-
- Point the update checker at a stable, production-ready branch:
- ```php
- $updateChecker->setBranch('branch-name');
- ```
- PUC will periodically check the `Version` header in the main plugin file or `style.css` and display a notification if it's greater than the installed version. Caveat: If you set the branch to `master`, the update checker will still look for tags first.
-
-### GitLab Integration
-
-1. Download [the latest release](https://github.com/YahnisElsts/plugin-update-checker/releases/latest) and copy the `plugin-update-checker` directory to your plugin or theme.
-2. Add the following code to the main plugin file or `functions.php` and define how you want to check for updates from Gitlab (refer to: [Gitlab: How to Release an Update](#how-to-release-a-gitlab-update)):
-
- ```php
- require 'plugin-update-checker/plugin-update-checker.php';
- $myUpdateChecker = Puc_v4_Factory::buildUpdateChecker(
- 'https://gitlab.com/user-name/repo-name/',
- __FILE__,
- 'unique-plugin-or-theme-slug'
- );
-
- //Optional: If you're using a private repository, specify the access token like this:
- $myUpdateChecker->setAuthentication('your-token-here');
- ```
-
- Alternatively, if you're using a self-hosted GitLab instance, initialize the update checker like this:
- ```php
- $myUpdateChecker = new Puc_v4p11_Vcs_PluginUpdateChecker(
- new Puc_v4p11_Vcs_GitLabApi('https://myserver.com/user-name/repo-name/'),
- __FILE__,
- 'unique-plugin-or-theme-slug'
- );
- //Optional: Add setAuthentication(...) and setBranch(...) as shown above.
- ```
- If you're using a self-hosted GitLab instance and [subgroups or nested groups](https://docs.gitlab.com/ce/user/group/subgroups/index.html), you have to tell the update checker which parts of the URL are subgroups:
- ```php
- $myUpdateChecker = new Puc_v4p11_Vcs_PluginUpdateChecker(
- new Puc_v4p11_Vcs_GitLabApi('https://myserver.com/group-name/subgroup-level1/subgroup-level2/subgroup-level3/repo-name/', null, 'subgroup-level1/subgroup-level2/subgroup-level3'),
- __FILE__,
- 'unique-plugin-or-theme-slug'
- );
-
- ```
-
-3. Plugins only: Add a `readme.txt` file formatted according to the [WordPress.org plugin readme standard](https://wordpress.org/plugins/readme.txt) to your repository. The contents of this file will be shown when the user clicks the "View version 1.2.3 details" link.
-
-#### How to Release a GitLab Update
-A Gitlab repository can be checked for updates in 4 different ways.
-
-1. **Stable branch** (other than `master` or `main`):
- - Point the update checker at any stable, production-ready branch and PUC will periodically check the `Version` header in the main plugin file or `style.css` and display a notification if it's greater than the installed version.
- - Add the following code:
- ```php
- //Add the following code to your main plugin file or `functions.php` file to check for updates from a custom branch
- $myUpdateChecker->setBranch('stable-branch-name');
- ```
- - Caveats:
- - If you set the branch to `main` (the default) or `master` (the historical default), the update checker will look for recent releases and tags first. It'll only use the `main` or `master` branch if it doesn't find anything else suitable.
-
-2. **GitLab Releases using Generic Packages**:
- - Use a Gitlab CI/CD Pipeline to automatically generate your update on release using a Generic Package. The benefit of using Generic Package assets over the Source Code assets is that the code can already be built and production ready.
- - Add the following code:
- ```php
- //Add the following code to your main plugin file or `functions.php` file to check for a new update from releases using generic packages
- $myUpdateChecker->getVcsApi()->enableReleasePackages();
- ```
- - PUC will periodically check the release version (i.e. the tag name of the release) and will display a notification if the release is a greater version than the installed version.
- - The release tag name should loosely follow [SemVer](http://semver.org/) but these are all valid release names: `v1.2.3`, `v1.2-foo`, `1.2.3_rc1-ABC`, `1.2.3.4.5` However, be warned that it's not smart enough to filter out alpha/beta/RC versions. If that's a problem, you might want to use GitLab branches instead.
- - For more information about *Gitlab Release Generic Packages* refer to the following links:
- - [Gitlab CI/CD Release Documentation](https://docs.gitlab.com/ee/user/project/releases/#create-release-from-gitlab-ci)
- - [Gitlab Release Assets as Generic Package Documentation](https://gitlab.com/gitlab-org/release-cli/-/tree/master/docs/examples/release-assets-as-generic-package/)
- - [Example .gitlab-ci.yml file using Release Generic Packages for generating a update package from the Sensei-LMS wordpress plugin](https://gist.github.com/timwiel/9dfd3526c768efad4973254085e065ce)
-
-
-3. **GitLab Releases using Source Code Assets**:
- - Create a new release using the "Releases" feature on Gitlab.
- - Add the following code:
- ```php
- //Add the following code to your main plugin file or `functions.php` file to check for a new update from releases using release assets
- $myUpdateChecker->getVcsApi()->enableReleaseAssets();
- ```
- - PUC will periodically check the release version (based on release tag name) and display a notification if the release version is greater than the installed version.
- - The release name should loosely follow [SemVer](http://semver.org/) but these are all valid release names: `v1.2.3`, `v1.2-foo`, `1.2.3_rc1-ABC`, `1.2.3.4.5` However, be warned that it's not smart enough to filter out alpha/beta/RC versions. If that's a problem, you might want to use GitLab branches instead.
-
-
-4. **Tags** (this is the default option):
- - To release version 1.2.3, create a new Git tag named `v1.2.3` or `1.2.3`.
- - Optionally, add the following code:
- ```php
- //Add the following code to your main plugin file or `functions.php` file to check for updates from the default branch
- $myUpdateChecker->setBranch('master'); //or 'main'
- ```
- - PUC doesn't require strict adherence to [SemVer](http://semver.org/). These are all valid tag names: `v1.2.3`, `v1.2-foo`, `1.2.3_rc1-ABC`, `1.2.3.4.5`. However, be warned that it's not smart enough to filter out alpha/beta/RC versions. If that's a problem, you might want to use GitLab branches instead.
-
-License Management
-------------------
-
-Currently, the update checker doesn't have any built-in license management features. It only provides some hooks that you can use to, for example, append license keys to update requests (`$updateChecker->addQueryArgFilter()`). If you're looking for ways to manage and verify licenses, please post your feedback in [this issue](https://github.com/YahnisElsts/plugin-update-checker/issues/222).
-
-Resources
----------
-
-- [This blog post](http://w-shadow.com/blog/2010/09/02/automatic-updates-for-any-plugin/) has more information about the update checker API. *Slightly out of date.*
-- [Debug Bar](https://wordpress.org/plugins/debug-bar/) - useful for testing and debugging the update checker.
-- [Update format reference](https://docs.google.com/spreadsheets/d/1eOBbW7Go2qEQXReOOCdidMTf_tDYRq4JfegcO1CBPIs/edit?usp=sharing) - describes all fields supported by the JSON-based update information format used by the update checker. Only covers plugins. Themes use a similar but more limited format.
-- [Securing download links](http://w-shadow.com/blog/2013/03/19/plugin-updates-securing-download-links/) - a general overview.
-- [A GUI for entering download credentials](http://open-tools.net/documentation/tutorial-automatic-updates.html#wordpress)
-- [Theme Update Checker](http://w-shadow.com/blog/2011/06/02/automatic-updates-for-commercial-themes/) - an older, theme-only variant of this update checker.
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/composer.json b/wp/wp-content/plugins/divifilter/plugin-update-checker/composer.json
deleted file mode 100644
index 6064bd4b..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/composer.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "name": "yahnis-elsts/plugin-update-checker",
- "type": "library",
- "description": "A custom update checker for WordPress plugins and themes. Useful if you can't host your plugin in the official WP repository but still want it to support automatic updates.",
- "keywords": ["wordpress", "plugin updates", "automatic updates", "theme updates"],
- "homepage": "https://github.com/YahnisElsts/plugin-update-checker/",
- "license": "MIT",
- "authors": [
- {
- "name": "Yahnis Elsts",
- "email": "whiteshadow@w-shadow.com",
- "homepage": "http://w-shadow.com/",
- "role": "Developer"
- }
- ],
- "require": {
- "php": ">=5.2.0",
- "ext-json": "*"
- },
- "autoload": {
- "files": ["load-v4p11.php"]
- }
-}
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/css/puc-debug-bar.css b/wp/wp-content/plugins/divifilter/plugin-update-checker/css/puc-debug-bar.css
deleted file mode 100644
index 2cb3f8e6..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/css/puc-debug-bar.css
+++ /dev/null
@@ -1,70 +0,0 @@
-.puc-debug-bar-panel-v4 pre {
- margin-top: 0;
-}
-
-/* Style the debug data table to match "widefat" table style used by WordPress. */
-table.puc-debug-data {
- width: 100%;
- clear: both;
- margin: 0;
-
- border-spacing: 0;
- background-color: #f9f9f9;
-
- border-radius: 3px;
- border: 1px solid #dfdfdf;
- border-collapse: separate;
-}
-
-table.puc-debug-data * {
- word-wrap: break-word;
-}
-
-table.puc-debug-data th {
- width: 11em;
- padding: 7px 7px 8px;
- text-align: left;
-
- font-family: "Georgia", "Times New Roman", "Bitstream Charter", "Times", serif;
- font-weight: 400;
- font-size: 14px;
- line-height: 1.3em;
- text-shadow: rgba(255, 255, 255, 0.804) 0 1px 0;
-}
-
-table.puc-debug-data td, table.puc-debug-data th {
- border-width: 1px 0;
- border-style: solid;
-
- border-top-color: #fff;
- border-bottom-color: #dfdfdf;
-
- text-transform: none;
-}
-
-table.puc-debug-data td {
- color: #555;
- font-size: 12px;
- padding: 4px 7px 2px;
- vertical-align: top;
-}
-
-.puc-ajax-response {
- border: 1px solid #dfdfdf;
- border-radius: 3px;
- padding: 0.5em;
- margin: 5px 0;
- background-color: white;
-}
-
-.puc-ajax-nonce {
- display: none;
-}
-
-.puc-ajax-response dt {
- margin: 0;
-}
-
-.puc-ajax-response dd {
- margin: 0 0 1em;
-}
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/examples/plugin.json b/wp/wp-content/plugins/divifilter/plugin-update-checker/examples/plugin.json
deleted file mode 100644
index fea211a1..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/examples/plugin.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
- "name": "My Example Plugin",
- "version": "2.0",
- "download_url": "http://example.com/updates/example-plugin.zip",
-
- "homepage": "http://example.com/",
- "requires": "4.5",
- "tested": "4.8",
- "last_updated": "2017-01-01 16:17:00",
- "upgrade_notice": "Here's why you should upgrade...",
-
- "author": "Janis Elsts",
- "author_homepage": "http://example.com/",
-
- "sections": {
- "description": "(Required) Plugin description. Basic HTML can be used in all sections.",
- "installation": "(Recommended) Installation instructions.",
- "changelog": "(Recommended) Changelog. This section will be displayed by default when the user clicks 'View version x.y.z details'.
",
- "custom_section": "This is a custom section labeled 'Custom Section'."
- },
-
- "icons" : {
- "1x" : "http://w-shadow.com/files/external-update-example/assets/icon-128x128.png",
- "2x" : "http://w-shadow.com/files/external-update-example/assets/icon-256x256.png"
- },
-
- "banners": {
- "low": "http://w-shadow.com/files/external-update-example/assets/banner-772x250.png",
- "high": "http://w-shadow.com/files/external-update-example/assets/banner-1544x500.png"
- },
-
- "translations": [
- {
- "language": "fr_FR",
- "version": "4.0",
- "updated": "2016-04-22 23:22:42",
- "package": "http://example.com/updates/translations/french-language-pack.zip"
- },
- {
- "language": "de_DE",
- "version": "5.0",
- "updated": "2016-04-22 23:22:42",
- "package": "http://example.com/updates/translations/german-language-pack.zip"
- }
- ],
-
- "rating": 90,
- "num_ratings": 123,
-
- "downloaded": 1234,
- "active_installs": 12345
-}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/examples/theme.json b/wp/wp-content/plugins/divifilter/plugin-update-checker/examples/theme.json
deleted file mode 100644
index df6c8c79..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/examples/theme.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "version": "2.0",
- "details_url": "http://example.com/version-2.0-details.html",
- "download_url": "http://example.com/example-theme-2.0.zip"
-}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/js/debug-bar.js b/wp/wp-content/plugins/divifilter/plugin-update-checker/js/debug-bar.js
deleted file mode 100644
index 2452c020..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/js/debug-bar.js
+++ /dev/null
@@ -1,52 +0,0 @@
-jQuery(function($) {
-
- function runAjaxAction(button, action) {
- button = $(button);
- var panel = button.closest('.puc-debug-bar-panel-v4');
- var responseBox = button.closest('td').find('.puc-ajax-response');
-
- responseBox.text('Processing...').show();
- $.post(
- ajaxurl,
- {
- action : action,
- uid : panel.data('uid'),
- _wpnonce: panel.data('nonce')
- },
- function(data) {
- responseBox.html(data);
- },
- 'html'
- );
- }
-
- $('.puc-debug-bar-panel-v4 input[name="puc-check-now-button"]').on('click', function() {
- runAjaxAction(this, 'puc_v4_debug_check_now');
- return false;
- });
-
- $('.puc-debug-bar-panel-v4 input[name="puc-request-info-button"]').on('click', function() {
- runAjaxAction(this, 'puc_v4_debug_request_info');
- return false;
- });
-
-
- // Debug Bar uses the panel class name as part of its link and container IDs. This means we can
- // end up with multiple identical IDs if more than one plugin uses the update checker library.
- // Fix it by replacing the class name with the plugin slug.
- var panels = $('#debug-menu-targets').find('.puc-debug-bar-panel-v4');
- panels.each(function() {
- var panel = $(this);
- var uid = panel.data('uid');
- var target = panel.closest('.debug-menu-target');
-
- //Change the panel wrapper ID.
- target.attr('id', 'debug-menu-target-puc-' + uid);
-
- //Change the menu link ID as well and point it at the new target ID.
- $('#debug-bar-menu').find('.puc-debug-menu-link-' + uid)
- .closest('.debug-menu-link')
- .attr('id', 'debug-menu-link-puc-' + uid)
- .attr('href', '#' + target.attr('id'));
- });
-});
\ No newline at end of file
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ca.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ca.mo
deleted file mode 100644
index 59645fab..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ca.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ca.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ca.po
deleted file mode 100644
index 36f3ad70..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ca.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2019-09-25 18:15+0200\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.2.3\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: ca\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Comprova si hi ha actualitzacions"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "L’extensió %s està actualitzada."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Una nova versió de l’extensió %s està disponible."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "No s’ha pogut determinar si hi ha actualitzacions per a %s."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Estat del comprovador d’actualitzacions desconegut \"%s\""
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "No hi ha cap registre de canvis disponible."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-cs_CZ.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-cs_CZ.mo
deleted file mode 100644
index ac6d20ea..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-cs_CZ.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-cs_CZ.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-cs_CZ.po
deleted file mode 100644
index 2c9af18f..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-cs_CZ.po
+++ /dev/null
@@ -1,45 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-05-20 10:53+0300\n"
-"PO-Revision-Date: 2017-07-05 15:39+0000\n"
-"Last-Translator: Vojtěch Sajdl \n"
-"Language-Team: Czech (Czech Republic)\n"
-"Language: cs-CZ\n"
-"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Loco-Source-Locale: cs_CZ\n"
-"X-Generator: Loco - https://localise.biz/\n"
-"X-Poedit-Basepath: ..\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"X-Poedit-SearchPath-0: .\n"
-"X-Loco-Parser: loco_parse_po"
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:358
-msgid "Check for updates"
-msgstr "Zkontrolovat aktualizace"
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:405
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "Plugin %s je aktuální."
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:407
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Nová verze pluginu %s je dostupná."
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:409
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Neznámý status kontroly aktualizací \"%s\""
-
-#: Puc/v4p1/Vcs/PluginUpdateChecker.php:83
-msgid "There is no changelog available."
-msgstr "Changelog není dostupný."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-da_DK.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-da_DK.mo
deleted file mode 100644
index 9c596707..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-da_DK.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-da_DK.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-da_DK.po
deleted file mode 100644
index 8f2bc0d7..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-da_DK.po
+++ /dev/null
@@ -1,42 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-05-20 10:53+0300\n"
-"PO-Revision-Date: 2017-10-17 11:07+0200\n"
-"Last-Translator: Mikk3lRo\n"
-"Language-Team: Mikk3lRo\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.0.4\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Language: da_DK\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:358
-msgid "Check for updates"
-msgstr "Undersøg for opdateringer"
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:405
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "Plugin'et %s er allerede opdateret."
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:407
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "En ny version af plugin'et %s er tilgængelig."
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:409
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Ukendt opdateringsstatus: \"%s\""
-
-#: Puc/v4p1/Vcs/PluginUpdateChecker.php:83
-msgid "There is no changelog available."
-msgstr "Der er ingen ændringslog tilgængelig."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-de_DE.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-de_DE.mo
deleted file mode 100644
index 0734cae2..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-de_DE.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-de_DE.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-de_DE.po
deleted file mode 100644
index 25234ba5..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-de_DE.po
+++ /dev/null
@@ -1,38 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2016-06-29 20:21+0100\n"
-"PO-Revision-Date: 2016-06-29 20:23+0100\n"
-"Last-Translator: Igor Lückel \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.1\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e\n"
-"Language: de_DE\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: github-checker.php:137
-msgid "There is no changelog available."
-msgstr "Es ist keine Liste von Programmänderungen verfügbar."
-
-#: plugin-update-checker.php:852
-msgid "Check for updates"
-msgstr "Nach Update suchen"
-
-#: plugin-update-checker.php:896
-msgid "This plugin is up to date."
-msgstr "Das Plugin ist aktuell."
-
-#: plugin-update-checker.php:898
-msgid "A new version of this plugin is available."
-msgstr "Es ist eine neue Version für das Plugin verfügbar."
-
-#: plugin-update-checker.php:900
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Unbekannter Update Status \"%s\""
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_AR.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_AR.mo
deleted file mode 100644
index 85afecd3..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_AR.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_AR.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_AR.po
deleted file mode 100644
index 80b1c1a2..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_AR.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2020-03-21 15:13-0400\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.3\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: es_ES\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Comprobar si hay actualizaciones"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "El plugin %s está actualizado."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Una nueva versión del %s plugin está disponible."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Estado del comprobador de actualización desconocido «%s»"
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "No hay un registro de cambios disponible."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CL.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CL.mo
deleted file mode 100644
index de9c7526..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CL.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CL.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CL.po
deleted file mode 100644
index 1ab41b17..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CL.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2020-03-21 15:14-0400\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.3\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: es_ES\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Comprobar si hay actualizaciones"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "El plugin %s está actualizado."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Una nueva versión del %s plugin está disponible."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Estado del comprobador de actualización desconocido «%s»"
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "No hay un registro de cambios disponible."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CO.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CO.mo
deleted file mode 100644
index de9c7526..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CO.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CO.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CO.po
deleted file mode 100644
index 1ab41b17..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CO.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2020-03-21 15:14-0400\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.3\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: es_ES\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Comprobar si hay actualizaciones"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "El plugin %s está actualizado."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Una nueva versión del %s plugin está disponible."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Estado del comprobador de actualización desconocido «%s»"
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "No hay un registro de cambios disponible."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CR.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CR.mo
deleted file mode 100644
index de9c7526..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CR.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CR.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CR.po
deleted file mode 100644
index 1ab41b17..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_CR.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2020-03-21 15:14-0400\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.3\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: es_ES\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Comprobar si hay actualizaciones"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "El plugin %s está actualizado."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Una nueva versión del %s plugin está disponible."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Estado del comprobador de actualización desconocido «%s»"
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "No hay un registro de cambios disponible."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_DO.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_DO.mo
deleted file mode 100644
index de9c7526..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_DO.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_DO.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_DO.po
deleted file mode 100644
index 1ab41b17..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_DO.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2020-03-21 15:14-0400\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.3\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: es_ES\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Comprobar si hay actualizaciones"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "El plugin %s está actualizado."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Una nueva versión del %s plugin está disponible."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Estado del comprobador de actualización desconocido «%s»"
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "No hay un registro de cambios disponible."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_ES.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_ES.mo
deleted file mode 100644
index 1cf71f42..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_ES.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_ES.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_ES.po
deleted file mode 100644
index c404f917..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_ES.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2020-03-21 14:56-0400\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.3\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: es_ES\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Comprobar si hay actualizaciones"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "El plugin %s está actualizado."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Una nueva versión del %s plugin está disponible."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Estado del comprobador de actualización desconocido «%s»"
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "No hay un registro de cambios disponible."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_GT.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_GT.mo
deleted file mode 100644
index de9c7526..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_GT.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_GT.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_GT.po
deleted file mode 100644
index 1ab41b17..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_GT.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2020-03-21 15:14-0400\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.3\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: es_ES\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Comprobar si hay actualizaciones"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "El plugin %s está actualizado."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Una nueva versión del %s plugin está disponible."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Estado del comprobador de actualización desconocido «%s»"
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "No hay un registro de cambios disponible."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_HN.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_HN.mo
deleted file mode 100644
index de9c7526..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_HN.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_HN.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_HN.po
deleted file mode 100644
index 1ab41b17..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_HN.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2020-03-21 15:14-0400\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.3\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: es_ES\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Comprobar si hay actualizaciones"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "El plugin %s está actualizado."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Una nueva versión del %s plugin está disponible."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Estado del comprobador de actualización desconocido «%s»"
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "No hay un registro de cambios disponible."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_MX.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_MX.mo
deleted file mode 100644
index 9ce83f66..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_MX.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_MX.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_MX.po
deleted file mode 100644
index 0e29c455..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_MX.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2020-03-21 14:57-0400\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.3\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: es_ES\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Comprobar si hay actualizaciones"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "El plugin %s está actualizado."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Una nueva versión del %s plugin está disponible."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Estado del comprobador de actualización desconocido «%s»"
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "No hay un registro de cambios disponible."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_PE.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_PE.mo
deleted file mode 100644
index 92c4f342..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_PE.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_PE.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_PE.po
deleted file mode 100644
index c0db8e30..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_PE.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2020-03-21 15:15-0400\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.3\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: es_ES\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Comprobar si hay actualizaciones"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "El plugin %s está actualizado."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Una nueva versión del %s plugin está disponible."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Estado del comprobador de actualización desconocido «%s»"
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "No hay un registro de cambios disponible."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_PR.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_PR.mo
deleted file mode 100644
index 92c4f342..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_PR.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_PR.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_PR.po
deleted file mode 100644
index c0db8e30..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_PR.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2020-03-21 15:15-0400\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.3\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: es_ES\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Comprobar si hay actualizaciones"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "El plugin %s está actualizado."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Una nueva versión del %s plugin está disponible."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Estado del comprobador de actualización desconocido «%s»"
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "No hay un registro de cambios disponible."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_UY.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_UY.mo
deleted file mode 100644
index 92c4f342..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_UY.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_UY.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_UY.po
deleted file mode 100644
index c0db8e30..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_UY.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2020-03-21 15:15-0400\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.3\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: es_ES\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Comprobar si hay actualizaciones"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "El plugin %s está actualizado."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Una nueva versión del %s plugin está disponible."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Estado del comprobador de actualización desconocido «%s»"
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "No hay un registro de cambios disponible."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_VE.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_VE.mo
deleted file mode 100644
index 9ce83f66..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_VE.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_VE.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_VE.po
deleted file mode 100644
index 0e29c455..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-es_VE.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2020-03-21 14:57-0400\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.3\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: es_ES\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Comprobar si hay actualizaciones"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "El plugin %s está actualizado."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Una nueva versión del %s plugin está disponible."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "No se pudo determinar si hay actualizaciones disponibles para %s."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Estado del comprobador de actualización desconocido «%s»"
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "No hay un registro de cambios disponible."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fa_IR.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fa_IR.mo
deleted file mode 100644
index a68f1004..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fa_IR.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fa_IR.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fa_IR.po
deleted file mode 100644
index 20b69380..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fa_IR.po
+++ /dev/null
@@ -1,38 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2016-02-17 14:21+0100\n"
-"PO-Revision-Date: 2016-10-28 14:30+0330\n"
-"Last-Translator: studio RVOLA \n"
-"Language-Team: Pro Style \n"
-"Language: fa_IR\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.8\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: github-checker.php:120
-msgid "There is no changelog available."
-msgstr "شرحی برای تغییرات یافت نشد"
-
-#: plugin-update-checker.php:637
-msgid "Check for updates"
-msgstr "بررسی برای بروزرسانی "
-
-#: plugin-update-checker.php:681
-msgid "This plugin is up to date."
-msgstr "شما از آخرین نسخه استفاده میکنید . بهروز باشید"
-
-#: plugin-update-checker.php:683
-msgid "A new version of this plugin is available."
-msgstr "نسخه جدیدی برای افزونه ارائه شده است ."
-
-#: plugin-update-checker.php:685
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "وضعیت ناشناخته برای بروزرسانی \"%s\""
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fr_CA.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fr_CA.mo
deleted file mode 100644
index 24639b69..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fr_CA.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fr_CA.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fr_CA.po
deleted file mode 100644
index 5dfa8ba4..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fr_CA.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2018-02-12 10:32-0500\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.0.4\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: Eric Gagnon \n"
-"Language: fr_CA\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Vérifier les mises à jour"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "L’extension %s est à jour."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Une nouvelle version de l’extension %s est disponible."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "Impossible de déterminer si une mise à jour est disponible pour \"%s\""
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Un problème inconnu est survenu \"%s\""
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "Il n’y a aucun journal de mise à jour disponible."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fr_FR.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fr_FR.mo
deleted file mode 100644
index a492d96f..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fr_FR.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fr_FR.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fr_FR.po
deleted file mode 100644
index 9f18e2cb..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-fr_FR.po
+++ /dev/null
@@ -1,42 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-07-07 14:53+0200\n"
-"PO-Revision-Date: 2017-07-07 14:54+0200\n"
-"Language-Team: studio RVOLA \n"
-"Language: fr_FR\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.0.2\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: Nicolas GEHIN\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:358
-msgid "Check for updates"
-msgstr "Vérifier les mises à jour"
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:405
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "L’extension %s est à jour."
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:407
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Une nouvelle version de l’extension %s est disponible."
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:409
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Un problème inconnu est survenu \"%s\""
-
-#: Puc/v4p1/Vcs/PluginUpdateChecker.php:85
-msgid "There is no changelog available."
-msgstr "Il n’y a aucun journal de mise à jour disponible."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-hu_HU.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-hu_HU.mo
deleted file mode 100644
index 4789ef1d..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-hu_HU.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-hu_HU.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-hu_HU.po
deleted file mode 100644
index df22657b..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-hu_HU.po
+++ /dev/null
@@ -1,41 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2016-01-11 21:23+0100\n"
-"PO-Revision-Date: 2016-01-11 21:25+0100\n"
-"Last-Translator: Tamás András Horváth \n"
-"Language-Team: \n"
-"Language: hu_HU\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.6\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: github-checker.php:137
-msgid "There is no changelog available."
-msgstr "Nem érhető el a changelog."
-
-#: plugin-update-checker.php:852
-msgid "Check for updates"
-msgstr "Frissítés ellenőrzése"
-
-#: plugin-update-checker.php:896
-msgid "This plugin is up to date."
-msgstr "Ez a plugin naprakész."
-
-#: plugin-update-checker.php:898
-msgid "A new version of this plugin is available."
-msgstr "Új verzió érhető el a kiegészítőhöz"
-
-#: plugin-update-checker.php:900
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Ismeretlen a frissítés ellenőrző státusza \"%s\""
-
-#~ msgid "Every %d hours"
-#~ msgstr "Minden %d órában"
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-it_IT.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-it_IT.mo
deleted file mode 100644
index 4b40d323..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-it_IT.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-it_IT.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-it_IT.po
deleted file mode 100644
index db62bb1b..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-it_IT.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2020-08-08 14:36+0300\n"
-"PO-Revision-Date: 2022-05-20 00:17+0200\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 3.0\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: d79\n"
-"Language: it_IT\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p11/Plugin/Ui.php:128
-msgid "Check for updates"
-msgstr "Verifica aggiornamenti"
-
-#: Puc/v4p11/Plugin/Ui.php:213
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "Il plugin %s è aggiornato."
-
-#: Puc/v4p11/Plugin/Ui.php:215
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Una nuova versione del plugin %s è disponibile."
-
-#: Puc/v4p11/Plugin/Ui.php:217
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "Non è possibile verificare se c'è un aggiornamento disponibile per %s."
-
-#: Puc/v4p11/Plugin/Ui.php:223
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Stato di controllo aggiornamenti sconosciuto \"%s\""
-
-#: Puc/v4p11/Vcs/PluginUpdateChecker.php:98
-msgid "There is no changelog available."
-msgstr "Non c'è alcun registro delle modifiche disponibile."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ja.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ja.mo
deleted file mode 100644
index 941b6ba2..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ja.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ja.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ja.po
deleted file mode 100644
index 5a5c5ffa..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ja.po
+++ /dev/null
@@ -1,57 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"POT-Creation-Date: 2019-07-15 17:07+0900\n"
-"PO-Revision-Date: 2019-07-15 17:12+0900\n"
-"Last-Translator: tak \n"
-"Language-Team: \n"
-"Language: ja_JP\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.2.3\n"
-"X-Poedit-Basepath: ../../../../../../Applications/XAMPP/xamppfiles/htdocs/"
-"kisagai/wordpress/wp-content/plugins/simple-stripe-gateway/Puc\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Poedit-KeywordsList: __;_x:1,2c\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: v4p7/Plugin/Ui.php:54
-msgid "View details"
-msgstr "詳細を表示"
-
-#: v4p7/Plugin/Ui.php:77
-#, php-format
-msgid "More information about %s"
-msgstr "%sについての詳細"
-
-#: v4p7/Plugin/Ui.php:128
-msgid "Check for updates"
-msgstr "アップデートを確認"
-
-#: v4p7/Plugin/Ui.php:213
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "%s プラグインは、最新バージョンです。"
-
-#: v4p7/Plugin/Ui.php:215
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "%s プラグインの最新バージョンがあります。"
-
-#: v4p7/Plugin/Ui.php:217
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "%s のアップデートがあるかどうかを判断できませんでした。"
-
-#: v4p7/Plugin/Ui.php:223
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "バージョンアップの確認で想定外の状態になりました。ステータス:”%s”"
-
-#: v4p7/Vcs/PluginUpdateChecker.php:98
-msgid "There is no changelog available."
-msgstr "更新履歴はありません。"
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-nl_BE.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-nl_BE.mo
deleted file mode 100644
index 1cea26dd..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-nl_BE.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-nl_BE.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-nl_BE.po
deleted file mode 100644
index e1734bb5..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-nl_BE.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2018-03-25 18:15+0200\n"
-"PO-Revision-Date: 2018-03-25 18:32+0200\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.7.1\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: Frank Goossens \n"
-"Language: nl_BE\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Controleer op nieuwe versies"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "De meest recente %s versie is geïnstalleerd."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Er is een nieuwe versie van %s beschikbaar."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "Kon niet bepalen of er nieuwe versie van %s beschikbaar is."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Ongekende status bij controle op nieuwe versie: \"%s\""
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "Er is geen changelog beschikbaar."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-nl_NL.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-nl_NL.mo
deleted file mode 100644
index 16dde622..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-nl_NL.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-nl_NL.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-nl_NL.po
deleted file mode 100644
index 7f57a89f..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-nl_NL.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2018-03-25 18:15+0200\n"
-"PO-Revision-Date: 2018-03-25 18:32+0200\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.7.1\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: Frank Goossens \n"
-"Language: nl_NL\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Controleer op nieuwe versies"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "De meest recente %s versie is geïnstalleerd."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Er is een nieuwe versie van %s beschikbaar."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "Kon niet bepalen of er nieuwe versie van %s beschikbaar is."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Ongekende status bij controle op nieuwe versie: \"%s\""
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "Er is geen changelog beschikbaar."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-pt_BR.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-pt_BR.mo
deleted file mode 100644
index d1c0f283..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-pt_BR.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-pt_BR.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-pt_BR.po
deleted file mode 100644
index 70a0f625..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-pt_BR.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-05-19 15:41-0300\n"
-"PO-Revision-Date: 2017-05-19 15:42-0300\n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"Language: pt_BR\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.8\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x;_x:1,2c\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:358
-msgid "Check for updates"
-msgstr "Verificar Atualizações"
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:401 Puc/v4p1/Plugin/UpdateChecker.php:406
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "O plugin %s já está na sua versão mais recente."
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:408
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Há uma nova versão para o plugin %s disponível para download."
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:410
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Status \"%s\" desconhecido."
-
-#: Puc/v4p1/Vcs/PluginUpdateChecker.php:83
-msgid "There is no changelog available."
-msgstr "Não há um changelog disponível."
-
-#~ msgid "The %s plugin is up to date."
-#~ msgstr "O plugin %s já está na sua versão mais recente."
-
-#~ msgid "A new version of the %s plugin is available."
-#~ msgstr "Há uma nova versão para o plugin %s disponível para download."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ru_RU.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ru_RU.mo
deleted file mode 100644
index 50b330e9..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ru_RU.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ru_RU.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ru_RU.po
deleted file mode 100644
index 33a11990..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-ru_RU.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2020-08-08 14:36+0300\n"
-"PO-Revision-Date: 2021-12-20 17:59+0200\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.2\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: ru_RU\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p11/Plugin/Ui.php:128
-msgid "Check for updates"
-msgstr "Проверить обновления"
-
-#: Puc/v4p11/Plugin/Ui.php:213
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "Плагин %s обновлён."
-
-#: Puc/v4p11/Plugin/Ui.php:215
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Новая версия %s доступна."
-
-#: Puc/v4p11/Plugin/Ui.php:217
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "Не удалось определить, доступны ли обновления для %s."
-
-#: Puc/v4p11/Plugin/Ui.php:223
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Неизвестный статус средства проверки обновлений \"%s\""
-
-#: Puc/v4p11/Vcs/PluginUpdateChecker.php:98
-msgid "There is no changelog available."
-msgstr "Журнал изменений отсутствует."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-sl_SI.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-sl_SI.mo
deleted file mode 100644
index df47ca7c..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-sl_SI.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-sl_SI.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-sl_SI.po
deleted file mode 100644
index 385d8011..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-sl_SI.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2018-10-27 20:36+0200\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.2\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100>=3 && n%100<=4 ? 2 : 3);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: Igor Funa\n"
-"Language: sl_SI\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Preveri posodobitve"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "Vtičnik %s je že posodobljen."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Nova različica vtičnika %s je na razpolago."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "Ne morem ugotoviti če se za vtičnik %s na razpolago posodobitve."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Neznan status preverjanja posodobitev za \"%s\""
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "Dnevnik sprememb ni na razpolago."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-sv_SE.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-sv_SE.mo
deleted file mode 100644
index 4d06fc14..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-sv_SE.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-sv_SE.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-sv_SE.po
deleted file mode 100644
index b8948144..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-sv_SE.po
+++ /dev/null
@@ -1,42 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-05-20 10:53+0300\n"
-"PO-Revision-Date: 2017-10-16 15:02+0200\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.0.4\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: sv_SE\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:358
-msgid "Check for updates"
-msgstr "Sök efter uppdateringar"
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:405
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "Tillägget %s är uppdaterat."
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:407
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Det finns en ny version av tillägget %s."
-
-#: Puc/v4p1/Plugin/UpdateChecker.php:409
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Okänd status för kontroll av uppdatering “%s”"
-
-#: Puc/v4p1/Vcs/PluginUpdateChecker.php:83
-msgid "There is no changelog available."
-msgstr "Det finns ingen ändringslogg tillgänglig."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-tr_TR.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-tr_TR.mo
deleted file mode 100644
index 58be2f93..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-tr_TR.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-tr_TR.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-tr_TR.po
deleted file mode 100644
index ba5e2915..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-tr_TR.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2017-11-24 17:02+0200\n"
-"PO-Revision-Date: 2021-11-15 19:07+0300\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 3.0\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: Emre Erkan \n"
-"Language: tr\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:395
-msgid "Check for updates"
-msgstr "Güncellemeleri kontrol et"
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:548
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "%s eklentisi güncel."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:550
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "%s eklentisinin yeni bir sürümü mevcut."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:552
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "%s için güncelleme olup olmadığı belirlenemedi."
-
-#: Puc/v4p3/Plugin/UpdateChecker.php:558
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Bilinmeyen güncelleme denetleyicisi durumu \"%s\""
-
-#: Puc/v4p3/Vcs/PluginUpdateChecker.php:95
-msgid "There is no changelog available."
-msgstr "Kullanılabilir bir değişiklik yok."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-uk_UA.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-uk_UA.mo
deleted file mode 100644
index 79494e52..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-uk_UA.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-uk_UA.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-uk_UA.po
deleted file mode 100644
index b84b16ea..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-uk_UA.po
+++ /dev/null
@@ -1,48 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2020-08-08 14:36+0300\n"
-"PO-Revision-Date: 2021-12-20 17:55+0200\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.2\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"Last-Translator: \n"
-"Language: uk_UA\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p11/Plugin/Ui.php:128
-msgid "Check for updates"
-msgstr "Перевірити оновлення"
-
-#: Puc/v4p11/Plugin/Ui.php:213
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "Плагін %s оновлено."
-
-#: Puc/v4p11/Plugin/Ui.php:215
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "Нова версія %s доступна."
-
-#: Puc/v4p11/Plugin/Ui.php:217
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "Не вдалося визначити, чи доступні оновлення для %s."
-
-#: Puc/v4p11/Plugin/Ui.php:223
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "Невідомий статус перевірки оновлень \"%s\""
-
-#: Puc/v4p11/Vcs/PluginUpdateChecker.php:98
-msgid "There is no changelog available."
-msgstr "Немає доступного журналу змін."
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-zh_CN.mo b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-zh_CN.mo
deleted file mode 100644
index 86d11447..00000000
Binary files a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-zh_CN.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-zh_CN.po b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-zh_CN.po
deleted file mode 100644
index d4f70560..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker-zh_CN.po
+++ /dev/null
@@ -1,57 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2022-01-29 12:09+0800\n"
-"PO-Revision-Date: 2022-01-29 12:10+0800\n"
-"Last-Translator: Seaton Jiang \n"
-"Language-Team: \n"
-"Language: zh_CN\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.4.3\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p11/Plugin/Ui.php:54
-msgid "View details"
-msgstr "查看详情"
-
-#: Puc/v4p11/Plugin/Ui.php:77
-#, php-format
-msgid "More information about %s"
-msgstr "%s 的更多信息"
-
-#: Puc/v4p11/Plugin/Ui.php:128
-msgid "Check for updates"
-msgstr "检查更新"
-
-#: Puc/v4p11/Plugin/Ui.php:214
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr "%s 目前是最新版本。"
-
-#: Puc/v4p11/Plugin/Ui.php:216
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr "%s 当前有可用的更新。"
-
-#: Puc/v4p11/Plugin/Ui.php:218
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr "%s 无法确定是否有可用的更新。"
-
-#: Puc/v4p11/Plugin/Ui.php:224
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr "未知的更新检查状态:%s"
-
-#: Puc/v4p11/Vcs/PluginUpdateChecker.php:100
-msgid "There is no changelog available."
-msgstr "没有可用的更新日志。"
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker.pot b/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker.pot
deleted file mode 100644
index 99cc24c7..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/languages/plugin-update-checker.pot
+++ /dev/null
@@ -1,49 +0,0 @@
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: plugin-update-checker\n"
-"POT-Creation-Date: 2020-08-08 14:36+0300\n"
-"PO-Revision-Date: 2016-01-10 20:59+0100\n"
-"Last-Translator: Tamás András Horváth \n"
-"Language-Team: \n"
-"Language: en_US\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.4\n"
-"X-Poedit-Basepath: ..\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"X-Poedit-KeywordsList: __;_e;_x:1,2c;_x\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: Puc/v4p11/Plugin/Ui.php:128
-msgid "Check for updates"
-msgstr ""
-
-#: Puc/v4p11/Plugin/Ui.php:213
-#, php-format
-msgctxt "the plugin title"
-msgid "The %s plugin is up to date."
-msgstr ""
-
-#: Puc/v4p11/Plugin/Ui.php:215
-#, php-format
-msgctxt "the plugin title"
-msgid "A new version of the %s plugin is available."
-msgstr ""
-
-#: Puc/v4p11/Plugin/Ui.php:217
-#, php-format
-msgctxt "the plugin title"
-msgid "Could not determine if updates are available for %s."
-msgstr ""
-
-#: Puc/v4p11/Plugin/Ui.php:223
-#, php-format
-msgid "Unknown update checker status \"%s\""
-msgstr ""
-
-#: Puc/v4p11/Vcs/PluginUpdateChecker.php:98
-msgid "There is no changelog available."
-msgstr ""
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/license.txt b/wp/wp-content/plugins/divifilter/plugin-update-checker/license.txt
deleted file mode 100644
index be948f65..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/license.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Copyright (c) 2017 Jānis Elsts
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/load-v4p11.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/load-v4p11.php
deleted file mode 100644
index 76916cce..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/load-v4p11.php
+++ /dev/null
@@ -1,28 +0,0 @@
- 'Puc_v4p11_Plugin_UpdateChecker',
- 'Theme_UpdateChecker' => 'Puc_v4p11_Theme_UpdateChecker',
-
- 'Vcs_PluginUpdateChecker' => 'Puc_v4p11_Vcs_PluginUpdateChecker',
- 'Vcs_ThemeUpdateChecker' => 'Puc_v4p11_Vcs_ThemeUpdateChecker',
-
- 'GitHubApi' => 'Puc_v4p11_Vcs_GitHubApi',
- 'BitBucketApi' => 'Puc_v4p11_Vcs_BitBucketApi',
- 'GitLabApi' => 'Puc_v4p11_Vcs_GitLabApi',
- )
- as $pucGeneralClass => $pucVersionedClass
-) {
- Puc_v4_Factory::addVersion($pucGeneralClass, $pucVersionedClass, '4.11');
- //Also add it to the minor-version factory in case the major-version factory
- //was already defined by another, older version of the update checker.
- Puc_v4p11_Factory::addVersion($pucGeneralClass, $pucVersionedClass, '4.11');
-}
-
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/plugin-update-checker.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/plugin-update-checker.php
deleted file mode 100644
index f6ae63f0..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/plugin-update-checker.php
+++ /dev/null
@@ -1,10 +0,0 @@
-=') ) {
- require __DIR__ . '/ParsedownModern.php';
- } else {
- require __DIR__ . '/ParsedownLegacy.php';
- }
-}
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/vendor/ParsedownLegacy.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/vendor/ParsedownLegacy.php
deleted file mode 100644
index bbc2d323..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/vendor/ParsedownLegacy.php
+++ /dev/null
@@ -1,1535 +0,0 @@
-DefinitionData = array();
-
- # standardize line breaks
- $text = str_replace(array("\r\n", "\r"), "\n", $text);
-
- # remove surrounding line breaks
- $text = trim($text, "\n");
-
- # split text into lines
- $lines = explode("\n", $text);
-
- # iterate through lines to identify blocks
- $markup = $this->lines($lines);
-
- # trim line breaks
- $markup = trim($markup, "\n");
-
- return $markup;
- }
-
- #
- # Setters
- #
-
- function setBreaksEnabled($breaksEnabled)
- {
- $this->breaksEnabled = $breaksEnabled;
-
- return $this;
- }
-
- protected $breaksEnabled;
-
- function setMarkupEscaped($markupEscaped)
- {
- $this->markupEscaped = $markupEscaped;
-
- return $this;
- }
-
- protected $markupEscaped;
-
- function setUrlsLinked($urlsLinked)
- {
- $this->urlsLinked = $urlsLinked;
-
- return $this;
- }
-
- protected $urlsLinked = true;
-
- #
- # Lines
- #
-
- protected $BlockTypes = array(
- '#' => array('Header'),
- '*' => array('Rule', 'List'),
- '+' => array('List'),
- '-' => array('SetextHeader', 'Table', 'Rule', 'List'),
- '0' => array('List'),
- '1' => array('List'),
- '2' => array('List'),
- '3' => array('List'),
- '4' => array('List'),
- '5' => array('List'),
- '6' => array('List'),
- '7' => array('List'),
- '8' => array('List'),
- '9' => array('List'),
- ':' => array('Table'),
- '<' => array('Comment', 'Markup'),
- '=' => array('SetextHeader'),
- '>' => array('Quote'),
- '[' => array('Reference'),
- '_' => array('Rule'),
- '`' => array('FencedCode'),
- '|' => array('Table'),
- '~' => array('FencedCode'),
- );
-
- # ~
-
- protected $DefinitionTypes = array(
- '[' => array('Reference'),
- );
-
- # ~
-
- protected $unmarkedBlockTypes = array(
- 'Code',
- );
-
- #
- # Blocks
- #
-
- private function lines(array $lines)
- {
- $CurrentBlock = null;
-
- foreach ($lines as $line)
- {
- if (chop($line) === '')
- {
- if (isset($CurrentBlock))
- {
- $CurrentBlock['interrupted'] = true;
- }
-
- continue;
- }
-
- if (strpos($line, "\t") !== false)
- {
- $parts = explode("\t", $line);
-
- $line = $parts[0];
-
- unset($parts[0]);
-
- foreach ($parts as $part)
- {
- $shortage = 4 - mb_strlen($line, 'utf-8') % 4;
-
- $line .= str_repeat(' ', $shortage);
- $line .= $part;
- }
- }
-
- $indent = 0;
-
- while (isset($line[$indent]) and $line[$indent] === ' ')
- {
- $indent ++;
- }
-
- $text = $indent > 0 ? substr($line, $indent) : $line;
-
- # ~
-
- $Line = array('body' => $line, 'indent' => $indent, 'text' => $text);
-
- # ~
-
- if (isset($CurrentBlock['incomplete']))
- {
- $Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock);
-
- if (isset($Block))
- {
- $CurrentBlock = $Block;
-
- continue;
- }
- else
- {
- if (method_exists($this, 'block'.$CurrentBlock['type'].'Complete'))
- {
- $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
- }
-
- unset($CurrentBlock['incomplete']);
- }
- }
-
- # ~
-
- $marker = $text[0];
-
- # ~
-
- $blockTypes = $this->unmarkedBlockTypes;
-
- if (isset($this->BlockTypes[$marker]))
- {
- foreach ($this->BlockTypes[$marker] as $blockType)
- {
- $blockTypes []= $blockType;
- }
- }
-
- #
- # ~
-
- foreach ($blockTypes as $blockType)
- {
- $Block = $this->{'block'.$blockType}($Line, $CurrentBlock);
-
- if (isset($Block))
- {
- $Block['type'] = $blockType;
-
- if ( ! isset($Block['identified']))
- {
- $Blocks []= $CurrentBlock;
-
- $Block['identified'] = true;
- }
-
- if (method_exists($this, 'block'.$blockType.'Continue'))
- {
- $Block['incomplete'] = true;
- }
-
- $CurrentBlock = $Block;
-
- continue 2;
- }
- }
-
- # ~
-
- if (isset($CurrentBlock) and ! isset($CurrentBlock['type']) and ! isset($CurrentBlock['interrupted']))
- {
- $CurrentBlock['element']['text'] .= "\n".$text;
- }
- else
- {
- $Blocks []= $CurrentBlock;
-
- $CurrentBlock = $this->paragraph($Line);
-
- $CurrentBlock['identified'] = true;
- }
- }
-
- # ~
-
- if (isset($CurrentBlock['incomplete']) and method_exists($this, 'block'.$CurrentBlock['type'].'Complete'))
- {
- $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
- }
-
- # ~
-
- $Blocks []= $CurrentBlock;
-
- unset($Blocks[0]);
-
- # ~
-
- $markup = '';
-
- foreach ($Blocks as $Block)
- {
- if (isset($Block['hidden']))
- {
- continue;
- }
-
- $markup .= "\n";
- $markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']);
- }
-
- $markup .= "\n";
-
- # ~
-
- return $markup;
- }
-
- #
- # Code
-
- protected function blockCode($Line, $Block = null)
- {
- if (isset($Block) and ! isset($Block['type']) and ! isset($Block['interrupted']))
- {
- return;
- }
-
- if ($Line['indent'] >= 4)
- {
- $text = substr($Line['body'], 4);
-
- $Block = array(
- 'element' => array(
- 'name' => 'pre',
- 'handler' => 'element',
- 'text' => array(
- 'name' => 'code',
- 'text' => $text,
- ),
- ),
- );
-
- return $Block;
- }
- }
-
- protected function blockCodeContinue($Line, $Block)
- {
- if ($Line['indent'] >= 4)
- {
- if (isset($Block['interrupted']))
- {
- $Block['element']['text']['text'] .= "\n";
-
- unset($Block['interrupted']);
- }
-
- $Block['element']['text']['text'] .= "\n";
-
- $text = substr($Line['body'], 4);
-
- $Block['element']['text']['text'] .= $text;
-
- return $Block;
- }
- }
-
- protected function blockCodeComplete($Block)
- {
- $text = $Block['element']['text']['text'];
-
- $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
-
- $Block['element']['text']['text'] = $text;
-
- return $Block;
- }
-
- #
- # Comment
-
- protected function blockComment($Line)
- {
- if ($this->markupEscaped)
- {
- return;
- }
-
- if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!')
- {
- $Block = array(
- 'markup' => $Line['body'],
- );
-
- if (preg_match('/-->$/', $Line['text']))
- {
- $Block['closed'] = true;
- }
-
- return $Block;
- }
- }
-
- protected function blockCommentContinue($Line, array $Block)
- {
- if (isset($Block['closed']))
- {
- return;
- }
-
- $Block['markup'] .= "\n" . $Line['body'];
-
- if (preg_match('/-->$/', $Line['text']))
- {
- $Block['closed'] = true;
- }
-
- return $Block;
- }
-
- #
- # Fenced Code
-
- protected function blockFencedCode($Line)
- {
- if (preg_match('/^(['.$Line['text'][0].']{3,})[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches))
- {
- $Element = array(
- 'name' => 'code',
- 'text' => '',
- );
-
- if (isset($matches[2]))
- {
- $class = 'language-'.$matches[2];
-
- $Element['attributes'] = array(
- 'class' => $class,
- );
- }
-
- $Block = array(
- 'char' => $Line['text'][0],
- 'element' => array(
- 'name' => 'pre',
- 'handler' => 'element',
- 'text' => $Element,
- ),
- );
-
- return $Block;
- }
- }
-
- protected function blockFencedCodeContinue($Line, $Block)
- {
- if (isset($Block['complete']))
- {
- return;
- }
-
- if (isset($Block['interrupted']))
- {
- $Block['element']['text']['text'] .= "\n";
-
- unset($Block['interrupted']);
- }
-
- if (preg_match('/^'.$Block['char'].'{3,}[ ]*$/', $Line['text']))
- {
- $Block['element']['text']['text'] = substr($Block['element']['text']['text'], 1);
-
- $Block['complete'] = true;
-
- return $Block;
- }
-
- $Block['element']['text']['text'] .= "\n".$Line['body'];;
-
- return $Block;
- }
-
- protected function blockFencedCodeComplete($Block)
- {
- $text = $Block['element']['text']['text'];
-
- $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
-
- $Block['element']['text']['text'] = $text;
-
- return $Block;
- }
-
- #
- # Header
-
- protected function blockHeader($Line)
- {
- if (isset($Line['text'][1]))
- {
- $level = 1;
-
- while (isset($Line['text'][$level]) and $Line['text'][$level] === '#')
- {
- $level ++;
- }
-
- if ($level > 6)
- {
- return;
- }
-
- $text = trim($Line['text'], '# ');
-
- $Block = array(
- 'element' => array(
- 'name' => 'h' . min(6, $level),
- 'text' => $text,
- 'handler' => 'line',
- ),
- );
-
- return $Block;
- }
- }
-
- #
- # List
-
- protected function blockList($Line)
- {
- list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]');
-
- if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches))
- {
- $Block = array(
- 'indent' => $Line['indent'],
- 'pattern' => $pattern,
- 'element' => array(
- 'name' => $name,
- 'handler' => 'elements',
- ),
- );
-
- $Block['li'] = array(
- 'name' => 'li',
- 'handler' => 'li',
- 'text' => array(
- $matches[2],
- ),
- );
-
- $Block['element']['text'] []= & $Block['li'];
-
- return $Block;
- }
- }
-
- protected function blockListContinue($Line, array $Block)
- {
- if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches))
- {
- if (isset($Block['interrupted']))
- {
- $Block['li']['text'] []= '';
-
- unset($Block['interrupted']);
- }
-
- unset($Block['li']);
-
- $text = isset($matches[1]) ? $matches[1] : '';
-
- $Block['li'] = array(
- 'name' => 'li',
- 'handler' => 'li',
- 'text' => array(
- $text,
- ),
- );
-
- $Block['element']['text'] []= & $Block['li'];
-
- return $Block;
- }
-
- if ($Line['text'][0] === '[' and $this->blockReference($Line))
- {
- return $Block;
- }
-
- if ( ! isset($Block['interrupted']))
- {
- $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']);
-
- $Block['li']['text'] []= $text;
-
- return $Block;
- }
-
- if ($Line['indent'] > 0)
- {
- $Block['li']['text'] []= '';
-
- $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']);
-
- $Block['li']['text'] []= $text;
-
- unset($Block['interrupted']);
-
- return $Block;
- }
- }
-
- #
- # Quote
-
- protected function blockQuote($Line)
- {
- if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches))
- {
- $Block = array(
- 'element' => array(
- 'name' => 'blockquote',
- 'handler' => 'lines',
- 'text' => (array) $matches[1],
- ),
- );
-
- return $Block;
- }
- }
-
- protected function blockQuoteContinue($Line, array $Block)
- {
- if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches))
- {
- if (isset($Block['interrupted']))
- {
- $Block['element']['text'] []= '';
-
- unset($Block['interrupted']);
- }
-
- $Block['element']['text'] []= $matches[1];
-
- return $Block;
- }
-
- if ( ! isset($Block['interrupted']))
- {
- $Block['element']['text'] []= $Line['text'];
-
- return $Block;
- }
- }
-
- #
- # Rule
-
- protected function blockRule($Line)
- {
- if (preg_match('/^(['.$Line['text'][0].'])([ ]*\1){2,}[ ]*$/', $Line['text']))
- {
- $Block = array(
- 'element' => array(
- 'name' => 'hr'
- ),
- );
-
- return $Block;
- }
- }
-
- #
- # Setext
-
- protected function blockSetextHeader($Line, array $Block = null)
- {
- if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted']))
- {
- return;
- }
-
- if (chop($Line['text'], $Line['text'][0]) === '')
- {
- $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2';
-
- return $Block;
- }
- }
-
- #
- # Markup
-
- protected function blockMarkup($Line)
- {
- if ($this->markupEscaped)
- {
- return;
- }
-
- if (preg_match('/^<(\w*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches))
- {
- if (in_array($matches[1], $this->textLevelElements))
- {
- return;
- }
-
- $Block = array(
- 'name' => $matches[1],
- 'depth' => 0,
- 'markup' => $Line['text'],
- );
-
- $length = strlen($matches[0]);
-
- $remainder = substr($Line['text'], $length);
-
- if (trim($remainder) === '')
- {
- if (isset($matches[2]) or in_array($matches[1], $this->voidElements))
- {
- $Block['closed'] = true;
-
- $Block['void'] = true;
- }
- }
- else
- {
- if (isset($matches[2]) or in_array($matches[1], $this->voidElements))
- {
- return;
- }
-
- if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder))
- {
- $Block['closed'] = true;
- }
- }
-
- return $Block;
- }
- }
-
- protected function blockMarkupContinue($Line, array $Block)
- {
- if (isset($Block['closed']))
- {
- return;
- }
-
- if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', $Line['text'])) # open
- {
- $Block['depth'] ++;
- }
-
- if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', $Line['text'], $matches)) # close
- {
- if ($Block['depth'] > 0)
- {
- $Block['depth'] --;
- }
- else
- {
- $Block['closed'] = true;
- }
-
- $Block['markup'] .= $matches[1];
- }
-
- if (isset($Block['interrupted']))
- {
- $Block['markup'] .= "\n";
-
- unset($Block['interrupted']);
- }
-
- $Block['markup'] .= "\n".$Line['body'];
-
- return $Block;
- }
-
- #
- # Reference
-
- protected function blockReference($Line)
- {
- if (preg_match('/^\[(.+?)\]:[ ]*(\S+?)>?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches))
- {
- $id = strtolower($matches[1]);
-
- $Data = array(
- 'url' => $matches[2],
- 'title' => null,
- );
-
- if (isset($matches[3]))
- {
- $Data['title'] = $matches[3];
- }
-
- $this->DefinitionData['Reference'][$id] = $Data;
-
- $Block = array(
- 'hidden' => true,
- );
-
- return $Block;
- }
- }
-
- #
- # Table
-
- protected function blockTable($Line, array $Block = null)
- {
- if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted']))
- {
- return;
- }
-
- if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '')
- {
- $alignments = array();
-
- $divider = $Line['text'];
-
- $divider = trim($divider);
- $divider = trim($divider, '|');
-
- $dividerCells = explode('|', $divider);
-
- foreach ($dividerCells as $dividerCell)
- {
- $dividerCell = trim($dividerCell);
-
- if ($dividerCell === '')
- {
- continue;
- }
-
- $alignment = null;
-
- if ($dividerCell[0] === ':')
- {
- $alignment = 'left';
- }
-
- if (substr($dividerCell, - 1) === ':')
- {
- $alignment = $alignment === 'left' ? 'center' : 'right';
- }
-
- $alignments []= $alignment;
- }
-
- # ~
-
- $HeaderElements = array();
-
- $header = $Block['element']['text'];
-
- $header = trim($header);
- $header = trim($header, '|');
-
- $headerCells = explode('|', $header);
-
- foreach ($headerCells as $index => $headerCell)
- {
- $headerCell = trim($headerCell);
-
- $HeaderElement = array(
- 'name' => 'th',
- 'text' => $headerCell,
- 'handler' => 'line',
- );
-
- if (isset($alignments[$index]))
- {
- $alignment = $alignments[$index];
-
- $HeaderElement['attributes'] = array(
- 'style' => 'text-align: '.$alignment.';',
- );
- }
-
- $HeaderElements []= $HeaderElement;
- }
-
- # ~
-
- $Block = array(
- 'alignments' => $alignments,
- 'identified' => true,
- 'element' => array(
- 'name' => 'table',
- 'handler' => 'elements',
- ),
- );
-
- $Block['element']['text'] []= array(
- 'name' => 'thead',
- 'handler' => 'elements',
- );
-
- $Block['element']['text'] []= array(
- 'name' => 'tbody',
- 'handler' => 'elements',
- 'text' => array(),
- );
-
- $Block['element']['text'][0]['text'] []= array(
- 'name' => 'tr',
- 'handler' => 'elements',
- 'text' => $HeaderElements,
- );
-
- return $Block;
- }
- }
-
- protected function blockTableContinue($Line, array $Block)
- {
- if (isset($Block['interrupted']))
- {
- return;
- }
-
- if ($Line['text'][0] === '|' or strpos($Line['text'], '|'))
- {
- $Elements = array();
-
- $row = $Line['text'];
-
- $row = trim($row);
- $row = trim($row, '|');
-
- preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches);
-
- foreach ($matches[0] as $index => $cell)
- {
- $cell = trim($cell);
-
- $Element = array(
- 'name' => 'td',
- 'handler' => 'line',
- 'text' => $cell,
- );
-
- if (isset($Block['alignments'][$index]))
- {
- $Element['attributes'] = array(
- 'style' => 'text-align: '.$Block['alignments'][$index].';',
- );
- }
-
- $Elements []= $Element;
- }
-
- $Element = array(
- 'name' => 'tr',
- 'handler' => 'elements',
- 'text' => $Elements,
- );
-
- $Block['element']['text'][1]['text'] []= $Element;
-
- return $Block;
- }
- }
-
- #
- # ~
- #
-
- protected function paragraph($Line)
- {
- $Block = array(
- 'element' => array(
- 'name' => 'p',
- 'text' => $Line['text'],
- 'handler' => 'line',
- ),
- );
-
- return $Block;
- }
-
- #
- # Inline Elements
- #
-
- protected $InlineTypes = array(
- '"' => array('SpecialCharacter'),
- '!' => array('Image'),
- '&' => array('SpecialCharacter'),
- '*' => array('Emphasis'),
- ':' => array('Url'),
- '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'),
- '>' => array('SpecialCharacter'),
- '[' => array('Link'),
- '_' => array('Emphasis'),
- '`' => array('Code'),
- '~' => array('Strikethrough'),
- '\\' => array('EscapeSequence'),
- );
-
- # ~
-
- protected $inlineMarkerList = '!"*_&[:<>`~\\';
-
- #
- # ~
- #
-
- public function line($text)
- {
- $markup = '';
-
- $unexaminedText = $text;
-
- $markerPosition = 0;
-
- while ($excerpt = strpbrk($unexaminedText, $this->inlineMarkerList))
- {
- $marker = $excerpt[0];
-
- $markerPosition += strpos($unexaminedText, $marker);
-
- $Excerpt = array('text' => $excerpt, 'context' => $text);
-
- foreach ($this->InlineTypes[$marker] as $inlineType)
- {
- $Inline = $this->{'inline'.$inlineType}($Excerpt);
-
- if ( ! isset($Inline))
- {
- continue;
- }
-
- if (isset($Inline['position']) and $Inline['position'] > $markerPosition) # position is ahead of marker
- {
- continue;
- }
-
- if ( ! isset($Inline['position']))
- {
- $Inline['position'] = $markerPosition;
- }
-
- $unmarkedText = substr($text, 0, $Inline['position']);
-
- $markup .= $this->unmarkedText($unmarkedText);
-
- $markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']);
-
- $text = substr($text, $Inline['position'] + $Inline['extent']);
-
- $unexaminedText = $text;
-
- $markerPosition = 0;
-
- continue 2;
- }
-
- $unexaminedText = substr($excerpt, 1);
-
- $markerPosition ++;
- }
-
- $markup .= $this->unmarkedText($text);
-
- return $markup;
- }
-
- #
- # ~
- #
-
- protected function inlineCode($Excerpt)
- {
- $marker = $Excerpt['text'][0];
-
- if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(? strlen($matches[0]),
- 'element' => array(
- 'name' => 'code',
- 'text' => $text,
- ),
- );
- }
- }
-
- protected function inlineEmailTag($Excerpt)
- {
- if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<((mailto:)?\S+?@\S+?)>/i', $Excerpt['text'], $matches))
- {
- $url = $matches[1];
-
- if ( ! isset($matches[2]))
- {
- $url = 'mailto:' . $url;
- }
-
- return array(
- 'extent' => strlen($matches[0]),
- 'element' => array(
- 'name' => 'a',
- 'text' => $matches[1],
- 'attributes' => array(
- 'href' => $url,
- ),
- ),
- );
- }
- }
-
- protected function inlineEmphasis($Excerpt)
- {
- if ( ! isset($Excerpt['text'][1]))
- {
- return;
- }
-
- $marker = $Excerpt['text'][0];
-
- if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches))
- {
- $emphasis = 'strong';
- }
- elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches))
- {
- $emphasis = 'em';
- }
- else
- {
- return;
- }
-
- return array(
- 'extent' => strlen($matches[0]),
- 'element' => array(
- 'name' => $emphasis,
- 'handler' => 'line',
- 'text' => $matches[1],
- ),
- );
- }
-
- protected function inlineEscapeSequence($Excerpt)
- {
- if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters))
- {
- return array(
- 'markup' => $Excerpt['text'][1],
- 'extent' => 2,
- );
- }
- }
-
- protected function inlineImage($Excerpt)
- {
- if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[')
- {
- return;
- }
-
- $Excerpt['text']= substr($Excerpt['text'], 1);
-
- $Link = $this->inlineLink($Excerpt);
-
- if ($Link === null)
- {
- return;
- }
-
- $Inline = array(
- 'extent' => $Link['extent'] + 1,
- 'element' => array(
- 'name' => 'img',
- 'attributes' => array(
- 'src' => $Link['element']['attributes']['href'],
- 'alt' => $Link['element']['text'],
- ),
- ),
- );
-
- $Inline['element']['attributes'] += $Link['element']['attributes'];
-
- unset($Inline['element']['attributes']['href']);
-
- return $Inline;
- }
-
- protected function inlineLink($Excerpt)
- {
- $Element = array(
- 'name' => 'a',
- 'handler' => 'line',
- 'text' => null,
- 'attributes' => array(
- 'href' => null,
- 'title' => null,
- ),
- );
-
- $extent = 0;
-
- $remainder = $Excerpt['text'];
-
- if (preg_match('/\[((?:[^][]|(?R))*)\]/', $remainder, $matches))
- {
- $Element['text'] = $matches[1];
-
- $extent += strlen($matches[0]);
-
- $remainder = substr($remainder, $extent);
- }
- else
- {
- return;
- }
-
- if (preg_match('/^[(]((?:[^ (]|[(][^ )]+[)])+)(?:[ ]+("[^"]+"|\'[^\']+\'))?[)]/', $remainder, $matches))
- {
- $Element['attributes']['href'] = $matches[1];
-
- if (isset($matches[2]))
- {
- $Element['attributes']['title'] = substr($matches[2], 1, - 1);
- }
-
- $extent += strlen($matches[0]);
- }
- else
- {
- if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches))
- {
- $definition = $matches[1] ? $matches[1] : $Element['text'];
- $definition = strtolower($definition);
-
- $extent += strlen($matches[0]);
- }
- else
- {
- $definition = strtolower($Element['text']);
- }
-
- if ( ! isset($this->DefinitionData['Reference'][$definition]))
- {
- return;
- }
-
- $Definition = $this->DefinitionData['Reference'][$definition];
-
- $Element['attributes']['href'] = $Definition['url'];
- $Element['attributes']['title'] = $Definition['title'];
- }
-
- $Element['attributes']['href'] = str_replace(array('&', '<'), array('&', '<'), $Element['attributes']['href']);
-
- return array(
- 'extent' => $extent,
- 'element' => $Element,
- );
- }
-
- protected function inlineMarkup($Excerpt)
- {
- if ($this->markupEscaped or strpos($Excerpt['text'], '>') === false)
- {
- return;
- }
-
- if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w*[ ]*>/s', $Excerpt['text'], $matches))
- {
- return array(
- 'markup' => $matches[0],
- 'extent' => strlen($matches[0]),
- );
- }
-
- if ($Excerpt['text'][1] === '!' and preg_match('/^/s', $Excerpt['text'], $matches))
- {
- return array(
- 'markup' => $matches[0],
- 'extent' => strlen($matches[0]),
- );
- }
-
- if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w*(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*\/?>/s', $Excerpt['text'], $matches))
- {
- return array(
- 'markup' => $matches[0],
- 'extent' => strlen($matches[0]),
- );
- }
- }
-
- protected function inlineSpecialCharacter($Excerpt)
- {
- if ($Excerpt['text'][0] === '&' and ! preg_match('/^?\w+;/', $Excerpt['text']))
- {
- return array(
- 'markup' => '&',
- 'extent' => 1,
- );
- }
-
- $SpecialCharacter = array('>' => 'gt', '<' => 'lt', '"' => 'quot');
-
- if (isset($SpecialCharacter[$Excerpt['text'][0]]))
- {
- return array(
- 'markup' => '&'.$SpecialCharacter[$Excerpt['text'][0]].';',
- 'extent' => 1,
- );
- }
- }
-
- protected function inlineStrikethrough($Excerpt)
- {
- if ( ! isset($Excerpt['text'][1]))
- {
- return;
- }
-
- if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches))
- {
- return array(
- 'extent' => strlen($matches[0]),
- 'element' => array(
- 'name' => 'del',
- 'text' => $matches[1],
- 'handler' => 'line',
- ),
- );
- }
- }
-
- protected function inlineUrl($Excerpt)
- {
- if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/')
- {
- return;
- }
-
- if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE))
- {
- $Inline = array(
- 'extent' => strlen($matches[0][0]),
- 'position' => $matches[0][1],
- 'element' => array(
- 'name' => 'a',
- 'text' => $matches[0][0],
- 'attributes' => array(
- 'href' => $matches[0][0],
- ),
- ),
- );
-
- return $Inline;
- }
- }
-
- protected function inlineUrlTag($Excerpt)
- {
- if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w+:\/{2}[^ >]+)>/i', $Excerpt['text'], $matches))
- {
- $url = str_replace(array('&', '<'), array('&', '<'), $matches[1]);
-
- return array(
- 'extent' => strlen($matches[0]),
- 'element' => array(
- 'name' => 'a',
- 'text' => $url,
- 'attributes' => array(
- 'href' => $url,
- ),
- ),
- );
- }
- }
-
- #
- # ~
-
- protected $unmarkedInlineTypes = array("\n" => 'Break', '://' => 'Url');
-
- # ~
-
- protected function unmarkedText($text)
- {
- if ($this->breaksEnabled)
- {
- $text = preg_replace('/[ ]*\n/', " \n", $text);
- }
- else
- {
- $text = preg_replace('/(?:[ ][ ]+|[ ]*\\\\)\n/', " \n", $text);
- $text = str_replace(" \n", "\n", $text);
- }
-
- return $text;
- }
-
- #
- # Handlers
- #
-
- protected function element(array $Element)
- {
- $markup = '<'.$Element['name'];
-
- if (isset($Element['attributes']))
- {
- foreach ($Element['attributes'] as $name => $value)
- {
- if ($value === null)
- {
- continue;
- }
-
- $markup .= ' '.$name.'="'.$value.'"';
- }
- }
-
- if (isset($Element['text']))
- {
- $markup .= '>';
-
- if (isset($Element['handler']))
- {
- $markup .= $this->{$Element['handler']}($Element['text']);
- }
- else
- {
- $markup .= $Element['text'];
- }
-
- $markup .= ''.$Element['name'].'>';
- }
- else
- {
- $markup .= ' />';
- }
-
- return $markup;
- }
-
- protected function elements(array $Elements)
- {
- $markup = '';
-
- foreach ($Elements as $Element)
- {
- $markup .= "\n" . $this->element($Element);
- }
-
- $markup .= "\n";
-
- return $markup;
- }
-
- # ~
-
- protected function li($lines)
- {
- $markup = $this->lines($lines);
-
- $trimmedMarkup = trim($markup);
-
- if ( ! in_array('', $lines) and substr($trimmedMarkup, 0, 3) === '')
- {
- $markup = $trimmedMarkup;
- $markup = substr($markup, 3);
-
- $position = strpos($markup, "
");
-
- $markup = substr_replace($markup, '', $position, 4);
- }
-
- return $markup;
- }
-
- #
- # Deprecated Methods
- #
-
- function parse($text)
- {
- $markup = $this->text($text);
-
- return $markup;
- }
-
- #
- # Static Methods
- #
-
- static function instance($name = 'default')
- {
- if (isset(self::$instances[$name]))
- {
- return self::$instances[$name];
- }
-
- $instance = new self();
-
- self::$instances[$name] = $instance;
-
- return $instance;
- }
-
- private static $instances = array();
-
- #
- # Fields
- #
-
- protected $DefinitionData;
-
- #
- # Read-Only
-
- protected $specialCharacters = array(
- '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|',
- );
-
- protected $StrongRegex = array(
- '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s',
- '_' => '/^__((?:\\\\_|[^_]|_[^_]*_)+?)__(?!_)/us',
- );
-
- protected $EmRegex = array(
- '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s',
- '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us',
- );
-
- protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*(?:\s*=\s*(?:[^"\'=<>`\s]+|"[^"]*"|\'[^\']*\'))?';
-
- protected $voidElements = array(
- 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source',
- );
-
- protected $textLevelElements = array(
- 'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont',
- 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing',
- 'i', 'rp', 'del', 'code', 'strike', 'marquee',
- 'q', 'rt', 'ins', 'font', 'strong',
- 's', 'tt', 'sub', 'mark',
- 'u', 'xm', 'sup', 'nobr',
- 'var', 'ruby',
- 'wbr', 'span',
- 'time',
- );
-}
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/vendor/ParsedownModern.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/vendor/ParsedownModern.php
deleted file mode 100644
index 5d96071b..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/vendor/ParsedownModern.php
+++ /dev/null
@@ -1,1538 +0,0 @@
-DefinitionData = array();
-
- # standardize line breaks
- $text = str_replace(array("\r\n", "\r"), "\n", $text);
-
- # remove surrounding line breaks
- $text = trim($text, "\n");
-
- # split text into lines
- $lines = explode("\n", $text);
-
- # iterate through lines to identify blocks
- $markup = $this->lines($lines);
-
- # trim line breaks
- $markup = trim($markup, "\n");
-
- return $markup;
- }
-
- #
- # Setters
- #
-
- function setBreaksEnabled($breaksEnabled)
- {
- $this->breaksEnabled = $breaksEnabled;
-
- return $this;
- }
-
- protected $breaksEnabled;
-
- function setMarkupEscaped($markupEscaped)
- {
- $this->markupEscaped = $markupEscaped;
-
- return $this;
- }
-
- protected $markupEscaped;
-
- function setUrlsLinked($urlsLinked)
- {
- $this->urlsLinked = $urlsLinked;
-
- return $this;
- }
-
- protected $urlsLinked = true;
-
- #
- # Lines
- #
-
- protected $BlockTypes = array(
- '#' => array('Header'),
- '*' => array('Rule', 'List'),
- '+' => array('List'),
- '-' => array('SetextHeader', 'Table', 'Rule', 'List'),
- '0' => array('List'),
- '1' => array('List'),
- '2' => array('List'),
- '3' => array('List'),
- '4' => array('List'),
- '5' => array('List'),
- '6' => array('List'),
- '7' => array('List'),
- '8' => array('List'),
- '9' => array('List'),
- ':' => array('Table'),
- '<' => array('Comment', 'Markup'),
- '=' => array('SetextHeader'),
- '>' => array('Quote'),
- '[' => array('Reference'),
- '_' => array('Rule'),
- '`' => array('FencedCode'),
- '|' => array('Table'),
- '~' => array('FencedCode'),
- );
-
- # ~
-
- protected $unmarkedBlockTypes = array(
- 'Code',
- );
-
- #
- # Blocks
- #
-
- protected function lines(array $lines)
- {
- $CurrentBlock = null;
-
- foreach ($lines as $line)
- {
- if (chop($line) === '')
- {
- if (isset($CurrentBlock))
- {
- $CurrentBlock['interrupted'] = true;
- }
-
- continue;
- }
-
- if (strpos($line, "\t") !== false)
- {
- $parts = explode("\t", $line);
-
- $line = $parts[0];
-
- unset($parts[0]);
-
- foreach ($parts as $part)
- {
- $shortage = 4 - mb_strlen($line, 'utf-8') % 4;
-
- $line .= str_repeat(' ', $shortage);
- $line .= $part;
- }
- }
-
- $indent = 0;
-
- while (isset($line[$indent]) and $line[$indent] === ' ')
- {
- $indent ++;
- }
-
- $text = $indent > 0 ? substr($line, $indent) : $line;
-
- # ~
-
- $Line = array('body' => $line, 'indent' => $indent, 'text' => $text);
-
- # ~
-
- if (isset($CurrentBlock['continuable']))
- {
- $Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock);
-
- if (isset($Block))
- {
- $CurrentBlock = $Block;
-
- continue;
- }
- else
- {
- if ($this->isBlockCompletable($CurrentBlock['type']))
- {
- $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
- }
- }
- }
-
- # ~
-
- $marker = $text[0];
-
- # ~
-
- $blockTypes = $this->unmarkedBlockTypes;
-
- if (isset($this->BlockTypes[$marker]))
- {
- foreach ($this->BlockTypes[$marker] as $blockType)
- {
- $blockTypes []= $blockType;
- }
- }
-
- #
- # ~
-
- foreach ($blockTypes as $blockType)
- {
- $Block = $this->{'block'.$blockType}($Line, $CurrentBlock);
-
- if (isset($Block))
- {
- $Block['type'] = $blockType;
-
- if ( ! isset($Block['identified']))
- {
- $Blocks []= $CurrentBlock;
-
- $Block['identified'] = true;
- }
-
- if ($this->isBlockContinuable($blockType))
- {
- $Block['continuable'] = true;
- }
-
- $CurrentBlock = $Block;
-
- continue 2;
- }
- }
-
- # ~
-
- if (isset($CurrentBlock) and ! isset($CurrentBlock['type']) and ! isset($CurrentBlock['interrupted']))
- {
- $CurrentBlock['element']['text'] .= "\n".$text;
- }
- else
- {
- $Blocks []= $CurrentBlock;
-
- $CurrentBlock = $this->paragraph($Line);
-
- $CurrentBlock['identified'] = true;
- }
- }
-
- # ~
-
- if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type']))
- {
- $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
- }
-
- # ~
-
- $Blocks []= $CurrentBlock;
-
- unset($Blocks[0]);
-
- # ~
-
- $markup = '';
-
- foreach ($Blocks as $Block)
- {
- if (isset($Block['hidden']))
- {
- continue;
- }
-
- $markup .= "\n";
- $markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']);
- }
-
- $markup .= "\n";
-
- # ~
-
- return $markup;
- }
-
- protected function isBlockContinuable($Type)
- {
- return method_exists($this, 'block'.$Type.'Continue');
- }
-
- protected function isBlockCompletable($Type)
- {
- return method_exists($this, 'block'.$Type.'Complete');
- }
-
- #
- # Code
-
- protected function blockCode($Line, $Block = null)
- {
- if (isset($Block) and ! isset($Block['type']) and ! isset($Block['interrupted']))
- {
- return;
- }
-
- if ($Line['indent'] >= 4)
- {
- $text = substr($Line['body'], 4);
-
- $Block = array(
- 'element' => array(
- 'name' => 'pre',
- 'handler' => 'element',
- 'text' => array(
- 'name' => 'code',
- 'text' => $text,
- ),
- ),
- );
-
- return $Block;
- }
- }
-
- protected function blockCodeContinue($Line, $Block)
- {
- if ($Line['indent'] >= 4)
- {
- if (isset($Block['interrupted']))
- {
- $Block['element']['text']['text'] .= "\n";
-
- unset($Block['interrupted']);
- }
-
- $Block['element']['text']['text'] .= "\n";
-
- $text = substr($Line['body'], 4);
-
- $Block['element']['text']['text'] .= $text;
-
- return $Block;
- }
- }
-
- protected function blockCodeComplete($Block)
- {
- $text = $Block['element']['text']['text'];
-
- $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
-
- $Block['element']['text']['text'] = $text;
-
- return $Block;
- }
-
- #
- # Comment
-
- protected function blockComment($Line)
- {
- if ($this->markupEscaped)
- {
- return;
- }
-
- if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!')
- {
- $Block = array(
- 'markup' => $Line['body'],
- );
-
- if (preg_match('/-->$/', $Line['text']))
- {
- $Block['closed'] = true;
- }
-
- return $Block;
- }
- }
-
- protected function blockCommentContinue($Line, array $Block)
- {
- if (isset($Block['closed']))
- {
- return;
- }
-
- $Block['markup'] .= "\n" . $Line['body'];
-
- if (preg_match('/-->$/', $Line['text']))
- {
- $Block['closed'] = true;
- }
-
- return $Block;
- }
-
- #
- # Fenced Code
-
- protected function blockFencedCode($Line)
- {
- if (preg_match('/^['.$Line['text'][0].']{3,}[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches))
- {
- $Element = array(
- 'name' => 'code',
- 'text' => '',
- );
-
- if (isset($matches[1]))
- {
- $class = 'language-'.$matches[1];
-
- $Element['attributes'] = array(
- 'class' => $class,
- );
- }
-
- $Block = array(
- 'char' => $Line['text'][0],
- 'element' => array(
- 'name' => 'pre',
- 'handler' => 'element',
- 'text' => $Element,
- ),
- );
-
- return $Block;
- }
- }
-
- protected function blockFencedCodeContinue($Line, $Block)
- {
- if (isset($Block['complete']))
- {
- return;
- }
-
- if (isset($Block['interrupted']))
- {
- $Block['element']['text']['text'] .= "\n";
-
- unset($Block['interrupted']);
- }
-
- if (preg_match('/^'.$Block['char'].'{3,}[ ]*$/', $Line['text']))
- {
- $Block['element']['text']['text'] = substr($Block['element']['text']['text'], 1);
-
- $Block['complete'] = true;
-
- return $Block;
- }
-
- $Block['element']['text']['text'] .= "\n".$Line['body'];;
-
- return $Block;
- }
-
- protected function blockFencedCodeComplete($Block)
- {
- $text = $Block['element']['text']['text'];
-
- $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
-
- $Block['element']['text']['text'] = $text;
-
- return $Block;
- }
-
- #
- # Header
-
- protected function blockHeader($Line)
- {
- if (isset($Line['text'][1]))
- {
- $level = 1;
-
- while (isset($Line['text'][$level]) and $Line['text'][$level] === '#')
- {
- $level ++;
- }
-
- if ($level > 6)
- {
- return;
- }
-
- $text = trim($Line['text'], '# ');
-
- $Block = array(
- 'element' => array(
- 'name' => 'h' . min(6, $level),
- 'text' => $text,
- 'handler' => 'line',
- ),
- );
-
- return $Block;
- }
- }
-
- #
- # List
-
- protected function blockList($Line)
- {
- list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]');
-
- if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches))
- {
- $Block = array(
- 'indent' => $Line['indent'],
- 'pattern' => $pattern,
- 'element' => array(
- 'name' => $name,
- 'handler' => 'elements',
- ),
- );
-
- $Block['li'] = array(
- 'name' => 'li',
- 'handler' => 'li',
- 'text' => array(
- $matches[2],
- ),
- );
-
- $Block['element']['text'] []= & $Block['li'];
-
- return $Block;
- }
- }
-
- protected function blockListContinue($Line, array $Block)
- {
- if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches))
- {
- if (isset($Block['interrupted']))
- {
- $Block['li']['text'] []= '';
-
- unset($Block['interrupted']);
- }
-
- unset($Block['li']);
-
- $text = isset($matches[1]) ? $matches[1] : '';
-
- $Block['li'] = array(
- 'name' => 'li',
- 'handler' => 'li',
- 'text' => array(
- $text,
- ),
- );
-
- $Block['element']['text'] []= & $Block['li'];
-
- return $Block;
- }
-
- if ($Line['text'][0] === '[' and $this->blockReference($Line))
- {
- return $Block;
- }
-
- if ( ! isset($Block['interrupted']))
- {
- $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']);
-
- $Block['li']['text'] []= $text;
-
- return $Block;
- }
-
- if ($Line['indent'] > 0)
- {
- $Block['li']['text'] []= '';
-
- $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']);
-
- $Block['li']['text'] []= $text;
-
- unset($Block['interrupted']);
-
- return $Block;
- }
- }
-
- #
- # Quote
-
- protected function blockQuote($Line)
- {
- if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches))
- {
- $Block = array(
- 'element' => array(
- 'name' => 'blockquote',
- 'handler' => 'lines',
- 'text' => (array) $matches[1],
- ),
- );
-
- return $Block;
- }
- }
-
- protected function blockQuoteContinue($Line, array $Block)
- {
- if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches))
- {
- if (isset($Block['interrupted']))
- {
- $Block['element']['text'] []= '';
-
- unset($Block['interrupted']);
- }
-
- $Block['element']['text'] []= $matches[1];
-
- return $Block;
- }
-
- if ( ! isset($Block['interrupted']))
- {
- $Block['element']['text'] []= $Line['text'];
-
- return $Block;
- }
- }
-
- #
- # Rule
-
- protected function blockRule($Line)
- {
- if (preg_match('/^(['.$Line['text'][0].'])([ ]*\1){2,}[ ]*$/', $Line['text']))
- {
- $Block = array(
- 'element' => array(
- 'name' => 'hr'
- ),
- );
-
- return $Block;
- }
- }
-
- #
- # Setext
-
- protected function blockSetextHeader($Line, array $Block = null)
- {
- if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted']))
- {
- return;
- }
-
- if (chop($Line['text'], $Line['text'][0]) === '')
- {
- $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2';
-
- return $Block;
- }
- }
-
- #
- # Markup
-
- protected function blockMarkup($Line)
- {
- if ($this->markupEscaped)
- {
- return;
- }
-
- if (preg_match('/^<(\w*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches))
- {
- $element = strtolower($matches[1]);
-
- if (in_array($element, $this->textLevelElements))
- {
- return;
- }
-
- $Block = array(
- 'name' => $matches[1],
- 'depth' => 0,
- 'markup' => $Line['text'],
- );
-
- $length = strlen($matches[0]);
-
- $remainder = substr($Line['text'], $length);
-
- if (trim($remainder) === '')
- {
- if (isset($matches[2]) or in_array($matches[1], $this->voidElements))
- {
- $Block['closed'] = true;
-
- $Block['void'] = true;
- }
- }
- else
- {
- if (isset($matches[2]) or in_array($matches[1], $this->voidElements))
- {
- return;
- }
-
- if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder))
- {
- $Block['closed'] = true;
- }
- }
-
- return $Block;
- }
- }
-
- protected function blockMarkupContinue($Line, array $Block)
- {
- if (isset($Block['closed']))
- {
- return;
- }
-
- if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', $Line['text'])) # open
- {
- $Block['depth'] ++;
- }
-
- if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', $Line['text'], $matches)) # close
- {
- if ($Block['depth'] > 0)
- {
- $Block['depth'] --;
- }
- else
- {
- $Block['closed'] = true;
- }
- }
-
- if (isset($Block['interrupted']))
- {
- $Block['markup'] .= "\n";
-
- unset($Block['interrupted']);
- }
-
- $Block['markup'] .= "\n".$Line['body'];
-
- return $Block;
- }
-
- #
- # Reference
-
- protected function blockReference($Line)
- {
- if (preg_match('/^\[(.+?)\]:[ ]*(\S+?)>?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches))
- {
- $id = strtolower($matches[1]);
-
- $Data = array(
- 'url' => $matches[2],
- 'title' => null,
- );
-
- if (isset($matches[3]))
- {
- $Data['title'] = $matches[3];
- }
-
- $this->DefinitionData['Reference'][$id] = $Data;
-
- $Block = array(
- 'hidden' => true,
- );
-
- return $Block;
- }
- }
-
- #
- # Table
-
- protected function blockTable($Line, array $Block = null)
- {
- if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted']))
- {
- return;
- }
-
- if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '')
- {
- $alignments = array();
-
- $divider = $Line['text'];
-
- $divider = trim($divider);
- $divider = trim($divider, '|');
-
- $dividerCells = explode('|', $divider);
-
- foreach ($dividerCells as $dividerCell)
- {
- $dividerCell = trim($dividerCell);
-
- if ($dividerCell === '')
- {
- continue;
- }
-
- $alignment = null;
-
- if ($dividerCell[0] === ':')
- {
- $alignment = 'left';
- }
-
- if (substr($dividerCell, - 1) === ':')
- {
- $alignment = $alignment === 'left' ? 'center' : 'right';
- }
-
- $alignments []= $alignment;
- }
-
- # ~
-
- $HeaderElements = array();
-
- $header = $Block['element']['text'];
-
- $header = trim($header);
- $header = trim($header, '|');
-
- $headerCells = explode('|', $header);
-
- foreach ($headerCells as $index => $headerCell)
- {
- $headerCell = trim($headerCell);
-
- $HeaderElement = array(
- 'name' => 'th',
- 'text' => $headerCell,
- 'handler' => 'line',
- );
-
- if (isset($alignments[$index]))
- {
- $alignment = $alignments[$index];
-
- $HeaderElement['attributes'] = array(
- 'style' => 'text-align: '.$alignment.';',
- );
- }
-
- $HeaderElements []= $HeaderElement;
- }
-
- # ~
-
- $Block = array(
- 'alignments' => $alignments,
- 'identified' => true,
- 'element' => array(
- 'name' => 'table',
- 'handler' => 'elements',
- ),
- );
-
- $Block['element']['text'] []= array(
- 'name' => 'thead',
- 'handler' => 'elements',
- );
-
- $Block['element']['text'] []= array(
- 'name' => 'tbody',
- 'handler' => 'elements',
- 'text' => array(),
- );
-
- $Block['element']['text'][0]['text'] []= array(
- 'name' => 'tr',
- 'handler' => 'elements',
- 'text' => $HeaderElements,
- );
-
- return $Block;
- }
- }
-
- protected function blockTableContinue($Line, array $Block)
- {
- if (isset($Block['interrupted']))
- {
- return;
- }
-
- if ($Line['text'][0] === '|' or strpos($Line['text'], '|'))
- {
- $Elements = array();
-
- $row = $Line['text'];
-
- $row = trim($row);
- $row = trim($row, '|');
-
- preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches);
-
- foreach ($matches[0] as $index => $cell)
- {
- $cell = trim($cell);
-
- $Element = array(
- 'name' => 'td',
- 'handler' => 'line',
- 'text' => $cell,
- );
-
- if (isset($Block['alignments'][$index]))
- {
- $Element['attributes'] = array(
- 'style' => 'text-align: '.$Block['alignments'][$index].';',
- );
- }
-
- $Elements []= $Element;
- }
-
- $Element = array(
- 'name' => 'tr',
- 'handler' => 'elements',
- 'text' => $Elements,
- );
-
- $Block['element']['text'][1]['text'] []= $Element;
-
- return $Block;
- }
- }
-
- #
- # ~
- #
-
- protected function paragraph($Line)
- {
- $Block = array(
- 'element' => array(
- 'name' => 'p',
- 'text' => $Line['text'],
- 'handler' => 'line',
- ),
- );
-
- return $Block;
- }
-
- #
- # Inline Elements
- #
-
- protected $InlineTypes = array(
- '"' => array('SpecialCharacter'),
- '!' => array('Image'),
- '&' => array('SpecialCharacter'),
- '*' => array('Emphasis'),
- ':' => array('Url'),
- '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'),
- '>' => array('SpecialCharacter'),
- '[' => array('Link'),
- '_' => array('Emphasis'),
- '`' => array('Code'),
- '~' => array('Strikethrough'),
- '\\' => array('EscapeSequence'),
- );
-
- # ~
-
- protected $inlineMarkerList = '!"*_&[:<>`~\\';
-
- #
- # ~
- #
-
- public function line($text)
- {
- $markup = '';
-
- # $excerpt is based on the first occurrence of a marker
-
- while ($excerpt = strpbrk($text, $this->inlineMarkerList))
- {
- $marker = $excerpt[0];
-
- $markerPosition = strpos($text, $marker);
-
- $Excerpt = array('text' => $excerpt, 'context' => $text);
-
- foreach ($this->InlineTypes[$marker] as $inlineType)
- {
- $Inline = $this->{'inline'.$inlineType}($Excerpt);
-
- if ( ! isset($Inline))
- {
- continue;
- }
-
- # makes sure that the inline belongs to "our" marker
-
- if (isset($Inline['position']) and $Inline['position'] > $markerPosition)
- {
- continue;
- }
-
- # sets a default inline position
-
- if ( ! isset($Inline['position']))
- {
- $Inline['position'] = $markerPosition;
- }
-
- # the text that comes before the inline
- $unmarkedText = substr($text, 0, $Inline['position']);
-
- # compile the unmarked text
- $markup .= $this->unmarkedText($unmarkedText);
-
- # compile the inline
- $markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']);
-
- # remove the examined text
- $text = substr($text, $Inline['position'] + $Inline['extent']);
-
- continue 2;
- }
-
- # the marker does not belong to an inline
-
- $unmarkedText = substr($text, 0, $markerPosition + 1);
-
- $markup .= $this->unmarkedText($unmarkedText);
-
- $text = substr($text, $markerPosition + 1);
- }
-
- $markup .= $this->unmarkedText($text);
-
- return $markup;
- }
-
- #
- # ~
- #
-
- protected function inlineCode($Excerpt)
- {
- $marker = $Excerpt['text'][0];
-
- if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(? strlen($matches[0]),
- 'element' => array(
- 'name' => 'code',
- 'text' => $text,
- ),
- );
- }
- }
-
- protected function inlineEmailTag($Excerpt)
- {
- if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<((mailto:)?\S+?@\S+?)>/i', $Excerpt['text'], $matches))
- {
- $url = $matches[1];
-
- if ( ! isset($matches[2]))
- {
- $url = 'mailto:' . $url;
- }
-
- return array(
- 'extent' => strlen($matches[0]),
- 'element' => array(
- 'name' => 'a',
- 'text' => $matches[1],
- 'attributes' => array(
- 'href' => $url,
- ),
- ),
- );
- }
- }
-
- protected function inlineEmphasis($Excerpt)
- {
- if ( ! isset($Excerpt['text'][1]))
- {
- return;
- }
-
- $marker = $Excerpt['text'][0];
-
- if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches))
- {
- $emphasis = 'strong';
- }
- elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches))
- {
- $emphasis = 'em';
- }
- else
- {
- return;
- }
-
- return array(
- 'extent' => strlen($matches[0]),
- 'element' => array(
- 'name' => $emphasis,
- 'handler' => 'line',
- 'text' => $matches[1],
- ),
- );
- }
-
- protected function inlineEscapeSequence($Excerpt)
- {
- if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters))
- {
- return array(
- 'markup' => $Excerpt['text'][1],
- 'extent' => 2,
- );
- }
- }
-
- protected function inlineImage($Excerpt)
- {
- if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[')
- {
- return;
- }
-
- $Excerpt['text']= substr($Excerpt['text'], 1);
-
- $Link = $this->inlineLink($Excerpt);
-
- if ($Link === null)
- {
- return;
- }
-
- $Inline = array(
- 'extent' => $Link['extent'] + 1,
- 'element' => array(
- 'name' => 'img',
- 'attributes' => array(
- 'src' => $Link['element']['attributes']['href'],
- 'alt' => $Link['element']['text'],
- ),
- ),
- );
-
- $Inline['element']['attributes'] += $Link['element']['attributes'];
-
- unset($Inline['element']['attributes']['href']);
-
- return $Inline;
- }
-
- protected function inlineLink($Excerpt)
- {
- $Element = array(
- 'name' => 'a',
- 'handler' => 'line',
- 'text' => null,
- 'attributes' => array(
- 'href' => null,
- 'title' => null,
- ),
- );
-
- $extent = 0;
-
- $remainder = $Excerpt['text'];
-
- if (preg_match('/\[((?:[^][]|(?R))*)\]/', $remainder, $matches))
- {
- $Element['text'] = $matches[1];
-
- $extent += strlen($matches[0]);
-
- $remainder = substr($remainder, $extent);
- }
- else
- {
- return;
- }
-
- if (preg_match('/^[(]((?:[^ ()]|[(][^ )]+[)])+)(?:[ ]+("[^"]*"|\'[^\']*\'))?[)]/', $remainder, $matches))
- {
- $Element['attributes']['href'] = $matches[1];
-
- if (isset($matches[2]))
- {
- $Element['attributes']['title'] = substr($matches[2], 1, - 1);
- }
-
- $extent += strlen($matches[0]);
- }
- else
- {
- if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches))
- {
- $definition = strlen($matches[1]) ? $matches[1] : $Element['text'];
- $definition = strtolower($definition);
-
- $extent += strlen($matches[0]);
- }
- else
- {
- $definition = strtolower($Element['text']);
- }
-
- if ( ! isset($this->DefinitionData['Reference'][$definition]))
- {
- return;
- }
-
- $Definition = $this->DefinitionData['Reference'][$definition];
-
- $Element['attributes']['href'] = $Definition['url'];
- $Element['attributes']['title'] = $Definition['title'];
- }
-
- $Element['attributes']['href'] = str_replace(array('&', '<'), array('&', '<'), $Element['attributes']['href']);
-
- return array(
- 'extent' => $extent,
- 'element' => $Element,
- );
- }
-
- protected function inlineMarkup($Excerpt)
- {
- if ($this->markupEscaped or strpos($Excerpt['text'], '>') === false)
- {
- return;
- }
-
- if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w*[ ]*>/s', $Excerpt['text'], $matches))
- {
- return array(
- 'markup' => $matches[0],
- 'extent' => strlen($matches[0]),
- );
- }
-
- if ($Excerpt['text'][1] === '!' and preg_match('/^/s', $Excerpt['text'], $matches))
- {
- return array(
- 'markup' => $matches[0],
- 'extent' => strlen($matches[0]),
- );
- }
-
- if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w*(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*\/?>/s', $Excerpt['text'], $matches))
- {
- return array(
- 'markup' => $matches[0],
- 'extent' => strlen($matches[0]),
- );
- }
- }
-
- protected function inlineSpecialCharacter($Excerpt)
- {
- if ($Excerpt['text'][0] === '&' and ! preg_match('/^?\w+;/', $Excerpt['text']))
- {
- return array(
- 'markup' => '&',
- 'extent' => 1,
- );
- }
-
- $SpecialCharacter = array('>' => 'gt', '<' => 'lt', '"' => 'quot');
-
- if (isset($SpecialCharacter[$Excerpt['text'][0]]))
- {
- return array(
- 'markup' => '&'.$SpecialCharacter[$Excerpt['text'][0]].';',
- 'extent' => 1,
- );
- }
- }
-
- protected function inlineStrikethrough($Excerpt)
- {
- if ( ! isset($Excerpt['text'][1]))
- {
- return;
- }
-
- if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches))
- {
- return array(
- 'extent' => strlen($matches[0]),
- 'element' => array(
- 'name' => 'del',
- 'text' => $matches[1],
- 'handler' => 'line',
- ),
- );
- }
- }
-
- protected function inlineUrl($Excerpt)
- {
- if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/')
- {
- return;
- }
-
- if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE))
- {
- $Inline = array(
- 'extent' => strlen($matches[0][0]),
- 'position' => $matches[0][1],
- 'element' => array(
- 'name' => 'a',
- 'text' => $matches[0][0],
- 'attributes' => array(
- 'href' => $matches[0][0],
- ),
- ),
- );
-
- return $Inline;
- }
- }
-
- protected function inlineUrlTag($Excerpt)
- {
- if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w+:\/{2}[^ >]+)>/i', $Excerpt['text'], $matches))
- {
- $url = str_replace(array('&', '<'), array('&', '<'), $matches[1]);
-
- return array(
- 'extent' => strlen($matches[0]),
- 'element' => array(
- 'name' => 'a',
- 'text' => $url,
- 'attributes' => array(
- 'href' => $url,
- ),
- ),
- );
- }
- }
-
- # ~
-
- protected function unmarkedText($text)
- {
- if ($this->breaksEnabled)
- {
- $text = preg_replace('/[ ]*\n/', " \n", $text);
- }
- else
- {
- $text = preg_replace('/(?:[ ][ ]+|[ ]*\\\\)\n/', " \n", $text);
- $text = str_replace(" \n", "\n", $text);
- }
-
- return $text;
- }
-
- #
- # Handlers
- #
-
- protected function element(array $Element)
- {
- $markup = '<'.$Element['name'];
-
- if (isset($Element['attributes']))
- {
- foreach ($Element['attributes'] as $name => $value)
- {
- if ($value === null)
- {
- continue;
- }
-
- $markup .= ' '.$name.'="'.$value.'"';
- }
- }
-
- if (isset($Element['text']))
- {
- $markup .= '>';
-
- if (isset($Element['handler']))
- {
- $markup .= $this->{$Element['handler']}($Element['text']);
- }
- else
- {
- $markup .= $Element['text'];
- }
-
- $markup .= ''.$Element['name'].'>';
- }
- else
- {
- $markup .= ' />';
- }
-
- return $markup;
- }
-
- protected function elements(array $Elements)
- {
- $markup = '';
-
- foreach ($Elements as $Element)
- {
- $markup .= "\n" . $this->element($Element);
- }
-
- $markup .= "\n";
-
- return $markup;
- }
-
- # ~
-
- protected function li($lines)
- {
- $markup = $this->lines($lines);
-
- $trimmedMarkup = trim($markup);
-
- if ( ! in_array('', $lines) and substr($trimmedMarkup, 0, 3) === '')
- {
- $markup = $trimmedMarkup;
- $markup = substr($markup, 3);
-
- $position = strpos($markup, "
");
-
- $markup = substr_replace($markup, '', $position, 4);
- }
-
- return $markup;
- }
-
- #
- # Deprecated Methods
- #
-
- function parse($text)
- {
- $markup = $this->text($text);
-
- return $markup;
- }
-
- #
- # Static Methods
- #
-
- static function instance($name = 'default')
- {
- if (isset(self::$instances[$name]))
- {
- return self::$instances[$name];
- }
-
- $instance = new static();
-
- self::$instances[$name] = $instance;
-
- return $instance;
- }
-
- private static $instances = array();
-
- #
- # Fields
- #
-
- protected $DefinitionData;
-
- #
- # Read-Only
-
- protected $specialCharacters = array(
- '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|',
- );
-
- protected $StrongRegex = array(
- '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s',
- '_' => '/^__((?:\\\\_|[^_]|_[^_]*_)+?)__(?!_)/us',
- );
-
- protected $EmRegex = array(
- '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s',
- '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us',
- );
-
- protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*(?:\s*=\s*(?:[^"\'=<>`\s]+|"[^"]*"|\'[^\']*\'))?';
-
- protected $voidElements = array(
- 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source',
- );
-
- protected $textLevelElements = array(
- 'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont',
- 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing',
- 'i', 'rp', 'del', 'code', 'strike', 'marquee',
- 'q', 'rt', 'ins', 'font', 'strong',
- 's', 'tt', 'sub', 'mark',
- 'u', 'xm', 'sup', 'nobr',
- 'var', 'ruby',
- 'wbr', 'span',
- 'time',
- );
-}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/divifilter/plugin-update-checker/vendor/PucReadmeParser.php b/wp/wp-content/plugins/divifilter/plugin-update-checker/vendor/PucReadmeParser.php
deleted file mode 100644
index 1f5cec9e..00000000
--- a/wp/wp-content/plugins/divifilter/plugin-update-checker/vendor/PucReadmeParser.php
+++ /dev/null
@@ -1,348 +0,0 @@
-parse_readme_contents( $file_contents );
- }
-
- function parse_readme_contents( $file_contents ) {
- $file_contents = str_replace(array("\r\n", "\r"), "\n", $file_contents);
- $file_contents = trim($file_contents);
- if ( 0 === strpos( $file_contents, "\xEF\xBB\xBF" ) )
- $file_contents = substr( $file_contents, 3 );
-
- // Markdown transformations
- $file_contents = preg_replace( "|^###([^#]+)#*?\s*?\n|im", '=$1='."\n", $file_contents );
- $file_contents = preg_replace( "|^##([^#]+)#*?\s*?\n|im", '==$1=='."\n", $file_contents );
- $file_contents = preg_replace( "|^#([^#]+)#*?\s*?\n|im", '===$1==='."\n", $file_contents );
-
- // === Plugin Name ===
- // Must be the very first thing.
- if ( !preg_match('|^===(.*)===|', $file_contents, $_name) )
- return array(); // require a name
- $name = trim($_name[1], '=');
- $name = $this->sanitize_text( $name );
-
- $file_contents = $this->chop_string( $file_contents, $_name[0] );
-
-
- // Requires at least: 1.5
- if ( preg_match('|Requires at least:(.*)|i', $file_contents, $_requires_at_least) )
- $requires_at_least = $this->sanitize_text($_requires_at_least[1]);
- else
- $requires_at_least = NULL;
-
-
- // Tested up to: 2.1
- if ( preg_match('|Tested up to:(.*)|i', $file_contents, $_tested_up_to) )
- $tested_up_to = $this->sanitize_text( $_tested_up_to[1] );
- else
- $tested_up_to = NULL;
-
- // Requires PHP: 5.2.4
- if ( preg_match('|Requires PHP:(.*)|i', $file_contents, $_requires_php) ) {
- $requires_php = $this->sanitize_text( $_requires_php[1] );
- } else {
- $requires_php = null;
- }
-
- // Stable tag: 10.4-ride-the-fire-eagle-danger-day
- if ( preg_match('|Stable tag:(.*)|i', $file_contents, $_stable_tag) )
- $stable_tag = $this->sanitize_text( $_stable_tag[1] );
- else
- $stable_tag = NULL; // we assume trunk, but don't set it here to tell the difference between specified trunk and default trunk
-
-
- // Tags: some tag, another tag, we like tags
- if ( preg_match('|Tags:(.*)|i', $file_contents, $_tags) ) {
- $tags = preg_split('|,[\s]*?|', trim($_tags[1]));
- foreach ( array_keys($tags) as $t )
- $tags[$t] = $this->sanitize_text( $tags[$t] );
- } else {
- $tags = array();
- }
-
-
- // Contributors: markjaquith, mdawaffe, zefrank
- $contributors = array();
- if ( preg_match('|Contributors:(.*)|i', $file_contents, $_contributors) ) {
- $temp_contributors = preg_split('|,[\s]*|', trim($_contributors[1]));
- foreach ( array_keys($temp_contributors) as $c ) {
- $tmp_sanitized = $this->user_sanitize( $temp_contributors[$c] );
- if ( strlen(trim($tmp_sanitized)) > 0 )
- $contributors[$c] = $tmp_sanitized;
- unset($tmp_sanitized);
- }
- }
-
-
- // Donate Link: URL
- if ( preg_match('|Donate link:(.*)|i', $file_contents, $_donate_link) )
- $donate_link = esc_url( $_donate_link[1] );
- else
- $donate_link = NULL;
-
-
- // togs, conts, etc are optional and order shouldn't matter. So we chop them only after we've grabbed their values.
- foreach ( array('tags', 'contributors', 'requires_at_least', 'tested_up_to', 'stable_tag', 'donate_link') as $chop ) {
- if ( $$chop ) {
- $_chop = '_' . $chop;
- $file_contents = $this->chop_string( $file_contents, ${$_chop}[0] );
- }
- }
-
- $file_contents = trim($file_contents);
-
-
- // short-description fu
- if ( !preg_match('/(^(.*?))^[\s]*=+?[\s]*.+?[\s]*=+?/ms', $file_contents, $_short_description) )
- $_short_description = array( 1 => &$file_contents, 2 => &$file_contents );
- $short_desc_filtered = $this->sanitize_text( $_short_description[2] );
- $short_desc_length = strlen($short_desc_filtered);
- $short_description = substr($short_desc_filtered, 0, 150);
- if ( $short_desc_length > strlen($short_description) )
- $truncated = true;
- else
- $truncated = false;
- if ( $_short_description[1] )
- $file_contents = $this->chop_string( $file_contents, $_short_description[1] ); // yes, the [1] is intentional
-
- // == Section ==
- // Break into sections
- // $_sections[0] will be the title of the first section, $_sections[1] will be the content of the first section
- // the array alternates from there: title2, content2, title3, content3... and so forth
- $_sections = preg_split('/^[\s]*==[\s]*(.+?)[\s]*==/m', $file_contents, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
-
- $sections = array();
- for ( $i=0; $i < count($_sections); $i +=2 ) {
- $title = $this->sanitize_text( $_sections[$i] );
- if ( isset($_sections[$i+1]) ) {
- $content = preg_replace('/(^[\s]*)=[\s]+(.+?)[\s]+=/m', '$1$2 ', $_sections[$i+1]);
- $content = $this->filter_text( $content, true );
- } else {
- $content = '';
- }
- $sections[str_replace(' ', '_', strtolower($title))] = array('title' => $title, 'content' => $content);
- }
-
-
- // Special sections
- // This is where we nab our special sections, so we can enforce their order and treat them differently, if needed
- // upgrade_notice is not a section, but parse it like it is for now
- $final_sections = array();
- foreach ( array('description', 'installation', 'frequently_asked_questions', 'screenshots', 'changelog', 'change_log', 'upgrade_notice') as $special_section ) {
- if ( isset($sections[$special_section]) ) {
- $final_sections[$special_section] = $sections[$special_section]['content'];
- unset($sections[$special_section]);
- }
- }
- if ( isset($final_sections['change_log']) && empty($final_sections['changelog']) )
- $final_sections['changelog'] = $final_sections['change_log'];
-
-
- $final_screenshots = array();
- if ( isset($final_sections['screenshots']) ) {
- preg_match_all('|(.*?) |s', $final_sections['screenshots'], $screenshots, PREG_SET_ORDER);
- if ( $screenshots ) {
- foreach ( (array) $screenshots as $ss )
- $final_screenshots[] = $ss[1];
- }
- }
-
- // Parse the upgrade_notice section specially:
- // 1.0 => blah, 1.1 => fnord
- $upgrade_notice = array();
- if ( isset($final_sections['upgrade_notice']) ) {
- $split = preg_split( '#(.*?) #', $final_sections['upgrade_notice'], -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );
- if ( count($split) >= 2 ) {
- for ( $i = 0; $i < count( $split ); $i += 2 ) {
- $upgrade_notice[$this->sanitize_text( $split[$i] )] = substr( $this->sanitize_text( $split[$i + 1] ), 0, 300 );
- }
- }
- unset( $final_sections['upgrade_notice'] );
- }
-
- // No description?
- // No problem... we'll just fall back to the old style of description
- // We'll even let you use markup this time!
- $excerpt = false;
- if ( !isset($final_sections['description']) ) {
- $final_sections = array_merge(array('description' => $this->filter_text( $_short_description[2], true )), $final_sections);
- $excerpt = true;
- }
-
-
- // dump the non-special sections into $remaining_content
- // their order will be determined by their original order in the readme.txt
- $remaining_content = '';
- foreach ( $sections as $s_name => $s_data ) {
- $remaining_content .= "\n{$s_data['title']} \n{$s_data['content']}";
- }
- $remaining_content = trim($remaining_content);
-
-
- // All done!
- // $r['tags'] and $r['contributors'] are simple arrays
- // $r['sections'] is an array with named elements
- $r = array(
- 'name' => $name,
- 'tags' => $tags,
- 'requires_at_least' => $requires_at_least,
- 'tested_up_to' => $tested_up_to,
- 'requires_php' => $requires_php,
- 'stable_tag' => $stable_tag,
- 'contributors' => $contributors,
- 'donate_link' => $donate_link,
- 'short_description' => $short_description,
- 'screenshots' => $final_screenshots,
- 'is_excerpt' => $excerpt,
- 'is_truncated' => $truncated,
- 'sections' => $final_sections,
- 'remaining_content' => $remaining_content,
- 'upgrade_notice' => $upgrade_notice
- );
-
- return $r;
- }
-
- function chop_string( $string, $chop ) { // chop a "prefix" from a string: Agressive! uses strstr not 0 === strpos
- if ( $_string = strstr($string, $chop) ) {
- $_string = substr($_string, strlen($chop));
- return trim($_string);
- } else {
- return trim($string);
- }
- }
-
- function user_sanitize( $text, $strict = false ) { // whitelisted chars
- if ( function_exists('user_sanitize') ) // bbPress native
- return user_sanitize( $text, $strict );
-
- if ( $strict ) {
- $text = preg_replace('/[^a-z0-9-]/i', '', $text);
- $text = preg_replace('|-+|', '-', $text);
- } else {
- $text = preg_replace('/[^a-z0-9_-]/i', '', $text);
- }
- return $text;
- }
-
- function sanitize_text( $text ) { // not fancy
- $text = strip_tags($text);
- $text = esc_html($text);
- $text = trim($text);
- return $text;
- }
-
- function filter_text( $text, $markdown = false ) { // fancy, Markdown
- $text = trim($text);
-
- $text = call_user_func( array( __CLASS__, 'code_trick' ), $text, $markdown ); // A better parser than Markdown's for: backticks -> CODE
-
- if ( $markdown ) { // Parse markdown.
- if ( !class_exists('Parsedown', false) ) {
- /** @noinspection PhpIncludeInspection */
- require_once(dirname(__FILE__) . '/Parsedown' . (version_compare(PHP_VERSION, '5.3.0', '>=') ? '' : 'Legacy') . '.php');
- }
- $instance = Parsedown::instance();
- $text = $instance->text($text);
- }
-
- $allowed = array(
- 'a' => array(
- 'href' => array(),
- 'title' => array(),
- 'rel' => array()),
- 'blockquote' => array('cite' => array()),
- 'br' => array(),
- 'p' => array(),
- 'code' => array(),
- 'pre' => array(),
- 'em' => array(),
- 'strong' => array(),
- 'ul' => array(),
- 'ol' => array(),
- 'li' => array(),
- 'h3' => array(),
- 'h4' => array()
- );
-
- $text = balanceTags($text);
-
- $text = wp_kses( $text, $allowed );
- $text = trim($text);
- return $text;
- }
-
- function code_trick( $text, $markdown ) { // Don't use bbPress native function - it's incompatible with Markdown
- // If doing markdown, first take any user formatted code blocks and turn them into backticks so that
- // markdown will preserve things like underscores in code blocks
- if ( $markdown )
- $text = preg_replace_callback("!(|)(.*?)( |)!s", array( __CLASS__,'decodeit'), $text);
-
- $text = str_replace(array("\r\n", "\r"), "\n", $text);
- if ( !$markdown ) {
- // This gets the "inline" code blocks, but can't be used with Markdown.
- $text = preg_replace_callback("|(`)(.*?)`|", array( __CLASS__, 'encodeit'), $text);
- // This gets the "block level" code blocks and converts them to PRE CODE
- $text = preg_replace_callback("!(^|\n)`(.*?)`!s", array( __CLASS__, 'encodeit'), $text);
- } else {
- // Markdown can do inline code, we convert bbPress style block level code to Markdown style
- $text = preg_replace_callback("!(^|\n)([ \t]*?)`(.*?)`!s", array( __CLASS__, 'indent'), $text);
- }
- return $text;
- }
-
- function indent( $matches ) {
- $text = $matches[3];
- $text = preg_replace('|^|m', $matches[2] . ' ', $text);
- return $matches[1] . $text;
- }
-
- function encodeit( $matches ) {
- if ( function_exists('encodeit') ) // bbPress native
- return encodeit( $matches );
-
- $text = trim($matches[2]);
- $text = htmlspecialchars($text, ENT_QUOTES);
- $text = str_replace(array("\r\n", "\r"), "\n", $text);
- $text = preg_replace("|\n\n\n+|", "\n\n", $text);
- $text = str_replace('<', '<', $text);
- $text = str_replace('>', '>', $text);
- $text = "$text";
- if ( "`" != $matches[1] )
- $text = "$text ";
- return $text;
- }
-
- function decodeit( $matches ) {
- if ( function_exists('decodeit') ) // bbPress native
- return decodeit( $matches );
-
- $text = $matches[2];
- $trans_table = array_flip(get_html_translation_table(HTML_ENTITIES));
- $text = strtr($text, $trans_table);
- $text = str_replace(' ', '', $text);
- $text = str_replace('&', '&', $text);
- $text = str_replace(''', "'", $text);
- if ( '' == $matches[1] )
- $text = "\n$text\n";
- return "`$text`";
- }
-
-} // end class
-
-endif;
diff --git a/wp/wp-content/plugins/divifilter/readme.txt b/wp/wp-content/plugins/divifilter/readme.txt
deleted file mode 100644
index c0647860..00000000
--- a/wp/wp-content/plugins/divifilter/readme.txt
+++ /dev/null
@@ -1,155 +0,0 @@
-=== Divi Filter Premium ===
-Contributors: danielvoelk
-Tags: divi theme, filter, filterable gallery
-Requires at least: 4.5
-Tested up to: 6.0
-Requires PHP: 5.6
-Stable tag: 3.8.4
-License: GPLv2 or later
-License URI: https://www.gnu.org/licenses/gpl-2.0.html
-
-The Divi Filter plugin allows you to filter every module in the Divi theme. Just add a few classes and you're done.
-
-== Description ==
-
-### DEMOS ###
-
-[youtube https://www.youtube.com/watch?v=qcnTrKoHGA4]
-
-You can find more demos [here](https://demos.danielvoelk.de/divi-filter/).
-
-### FEATURES ###
-
-* Filter unlimited columns
-
-* Add multiple filter categories to each column (if desired)
-
-* **[PREMIUM]** Filter unlimited rows
-
-* **[PREMIUM]** Style active filter button
-
-* **[PREMIUM]** Start filtered, right after page loads.
-
-* **[PREMIUM]** Add animations to your filtering
-
-* **[PREMIUM]** Have multiple filters on one page
-
-* **[PREMIUM]** Multi select filtering (explained in [Documentation](https://docs.danielvoelk.de))
-
-* **[PREMIUM]** And more (see in ([Documentation](https://docs.danielvoelk.de))
-
-[Get the premium version](https://shop.danielvoelk.de/#divi-filter)
-
-### SETUP ###
-
-Buttons:
-
-* Click on the grey gear icon to access the Button Settings (on the button, that you want to filter with).
-* Go to Advanced -> CSS ID & Classes -> CSS Class. Here you add the df-button class.
-* Additionally add any category that you want to filter with that button like that: dfc-[your category] e.g. dfc-cats.
-* Important: Buttons have to be in a seperate section, than your filterable elements.
-
-Section:
-
-* Click on blue gear icon to access the Section Settings.
-* Go to Advanced -> CSS ID & Classes -> CSS Class. Here you add the df-area class.
-
-Columns:
-
-* Click on green gear icon to access the Row Settings.
-* In the Row Settings click on the gear icon the access the Column Settings.
-* Go to Advanced -> CSS ID & Classes -> CSS Class.
-* Here you add all the dfc-[your category] class you want e.g. your dfc-cats class.
-* Do that for all Columns you want to make filterable.
-
-A more detailed documentation
-
-== Screenshots ==
-
-1. This is a demo how a filterable section. You can filter every module. In the demo you can see: video, counter, image and contact form module.
-2. A filterable team section demo.
-3. A filterable ice cream section.
-
-== Frequently Asked Questions ==
-
-= Where can I get support? =
-You can get support in the Help Center .
-
-= Where can I download the premium plugin? =
-You can download the premium plugin here .
-
-== Changelog ==
-
-= 3.8.4 =
-* Added specialty filtering
-
-= 3.8.1 =
-* added blog filtering in blog grid, fixed bugs
-
-= 3.8.0 =
-* added blog filtering
-
-= 3.7.0 =
-* added post type filtering
-
-= 3.6.0 =
-* speed update
-* fixed bugs
-
-= 3.5.0 =
-* fixed bug for multiple filter on one page
-* fixed starting class
-
-= 3.4.0 =
-* added starting class by link ?filter=
-* support for custom layouts as module and all shortcodes
-
-= 3.3.0 =
-* df-buttons (to have buttons in same section)
-
-= 3.2.1 =
-* bug fixes
-
-= 3.2.0 =
-* added dfs- starting class
-
-= 3.1.0 =
-* added df-picky class, added .local domain as localhost
-
-= 3.0.2 =
-* bug fixes and preparations for future updates
-
-= 3.0.1 =
-* bug fixes
-
-= 3.0.0 =
-* added multiple filters one one page
-
-= 2.1.2 =
-* added automatic updating
-
-= 2.1.1 =
-* added dfs- classes that stay
-
-= 2.1.0 =
-* added filtering with multiple active buttons
-
-= 2.0.0 =
-* added row filtering
-
-= 1.1.1 =
-* fixed bug for more than 9 columns. (sort error)
-
-= 1.1.0 =
-* added optional feedback popup
-
-= 1.0.0 =
-* fixed bugs
-
-= 0.9 =
-* first version
-
-== Upgrade Notice ==
-
-= 0.9 =
-first version
\ No newline at end of file
diff --git a/wp/wp-content/plugins/facetwp/.gitignore b/wp/wp-content/plugins/facetwp/.gitignore
deleted file mode 100644
index 2f6b36f5..00000000
--- a/wp/wp-content/plugins/facetwp/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.DS_Store
-node_modules/
-yarn.lock
diff --git a/wp/wp-content/plugins/facetwp/assets/css/admin.css b/wp/wp-content/plugins/facetwp/assets/css/admin.css
deleted file mode 100644
index 7806d9a7..00000000
--- a/wp/wp-content/plugins/facetwp/assets/css/admin.css
+++ /dev/null
@@ -1,1110 +0,0 @@
-
-:root {
- --red: #dc3545;
- --red-dark: #c82333;
- --orange: #ffac66;
- --purple: #752cbd;
- --green: #62dd62;
- --blue: #50b7ff;
- --blue-light: #b4ddff;
- --blue-medium: #209cee;
- --grey-light: #f8f8f8;
- --grey-medium: #aaa;
- --grey-dark: #222;
- --grey: #ddd;
- --input-border: #8c8f94;
- --white: #fff;
-}
-
-/* Header area */
-
-body.settings_page_facetwp {
- background: var(--white);
- font-size: 14px;
-}
-
-body.settings_page_facetwp .wrap {
- margin: 20px 20px 0 0;
-}
-
-body.settings_page_facetwp #screen-meta,
-body.settings_page_facetwp #screen-meta-links {
- display: none;
-}
-
-a {
- color: var(--blue);
-}
-
-a:hover {
- color: var(--blue-medium);
-}
-
-#icon-facetwp {
- float: left;
- padding: 8px 10px 0 0;
-}
-
-.facetwp-header {
- margin: 0 0 0 -20px;
- padding: 10px 20px;
- background-color: var(--purple);
-}
-
-.facetwp-logo {
- line-height: 25px;
- background: url('../images/logo.svg?v=4.1') no-repeat;
- background-size: 32px 25px;
- display: inline-block;
- width: 32px;
-}
-
-.facetwp-version {
- margin: 0 18px 0 6px;
- color: var(--grey-medium);
- font-size: 12px;
-}
-
-.facetwp-tab {
- cursor: pointer;
- display: inline-block;
- border-radius: 3px;
- padding: 5px 15px;
- color: #d7d7d7;
-}
-
-.facetwp-tab.active {
- background-color: rgba(255, 255, 255, 0.2);
- color: var(--white);
-}
-
-.facetwp-tab:hover {
- color: var(--white);
-}
-
-.facetwp-actions {
- float: right;
-}
-
-.facetwp-response-wrap {
- position: absolute;
- right: 20px;
- margin-top: 10px;
- padding: 2px 8px;
- line-height: 1;
- color: var(--white);
-
- background-color: var(--purple);
- border-bottom-left-radius: 5px;
- border-bottom-right-radius: 5px;
- cursor: pointer;
-}
-
-.facetwp-response {
- display: none;
-}
-
-.facetwp-response.visible {
- display: inline-block;
- padding-right: 8px;
-}
-
-.facetwp-response-icon {
- display: inline-block;
- vertical-align: middle;
-}
-
-.facetwp-response-icon span {
- display: inline-block;
-}
-
-.facetwp-response-icon span::before {
- display: block;
- font-family: dashicons;
- font-size: 1.5em;
-}
-
-.facetwp-response-icon[data-status="ok"] span::before {
- content: "\f12a";
- color: var(--green);
-}
-
-.facetwp-response-icon[data-status="load"] span::before {
- content: "\f463";
-}
-
-.facetwp-response-icon[data-status="error"] span::before {
- content: "\f534";
- color: var(--orange);
-}
-
-.facetwp-response-icon[data-status="load"] span {
- animation: spin 1.1s infinite linear;
-}
-
-[v-cloak] {
- display: none;
-}
-
-.btn-split,
-.btn-normal {
- position: relative;
- display: inline-block;
- background-color: var(--red);
- border-radius: 3px;
- vertical-align: top;
- cursor: pointer;
-}
-
-.btn-split {
- margin-right: 4px;
-}
-
-.btn-normal {
- padding: 4px 8px;
- background-color: var(--grey-light);
- border: 1px solid var(--grey-medium);
-}
-
-.facetwp-header .btn-normal {
- border: 1px solid var(--white);
-}
-
-.btn-normal:hover {
- border: 1px solid var(--grey-dark);
-}
-
-.btn-split .btn-label,
-.btn-split .btn-caret {
- display: inline-block;
- padding: 5px 10px;
- color: var(--white);
-}
-
-.btn-split .btn-label {
- border-top-left-radius: 3px;
- border-bottom-left-radius: 3px;
- padding: 5px 15px;
-}
-
-.btn-split .btn-caret {
- border-top-right-radius: 3px;
- border-bottom-right-radius: 3px;
-}
-
-.btn-split .btn-label:hover,
-.btn-split .btn-caret:hover {
- background-color: var(--red-dark);
-}
-
-.btn-split .fa-caret-down {
- pointer-events: none;
-}
-
-.btn-split .btn-dropdown {
- position: absolute;
- border: 1px solid var(--grey-medium);
- border-top: none;
- background-color: var(--white);
- font-size: 12px;
- width: 180px;
- top: 34px;
- right: 0;
- z-index: 10;
-}
-
-.btn-split .dropdown-inner div {
- padding: 10px;
-}
-
-.btn-split .dropdown-inner div:hover {
- background-color: var(--grey-light);
-}
-
-/* Loading animation */
-
-.facetwp-loading {
- margin-top: 40px;
- text-align: center;
-}
-
-@keyframes spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(360deg);
- transform: rotate(360deg);
- }
-}
-
-/* Content boxes */
-
-.facetwp-region {
- display: none;
- padding-bottom: 30px;
-}
-
-.facetwp-region.active {
- display: block;
-}
-
-.facetwp-region iframe {
- width: 100%;
- height: 600px;
-}
-
-.facetwp-subnav {
- padding-bottom: 30px;
-}
-
-.facetwp-btn {
- display: inline-block;
- cursor: pointer;
- padding: 5px 8px;
- background-color: var(--white);
- border: 1px solid var(--red);
- border-radius: 3px;
- font-size: 12px;
- font-weight: normal;
- text-decoration: none;
- line-height: 1;
- color: var(--red);
-}
-
-h3 .facetwp-btn {
- margin-left: 6px;
-}
-
-.facetwp-btn:hover {
- background: var(--red);
- color: var(--white);
-}
-
-.facetwp-region h3 {
- font-weight: normal;
- font-size: 18px;
- line-height: 1;
- margin: 0 0 30px 0;
-}
-
-.facetwp-region > h3 a {
- display: inline-block;
- border-bottom: 3px solid var(--blue);
- color: var(--blue);
- cursor: pointer;
-}
-
-.facetwp-region input[type='text'],
-.facetwp-region input[type='number'],
-.facetwp-region select {
- width: 220px;
- border-radius: 4px;
-}
-
-.facet-fields input.facet-step,
-.facet-fields input.facet-count,
-.facet-fields input.facet-soft-limit {
- width: 50px;
-}
-
-.facet-fields input.facet-count-text-plural {
- width: 300px;
-}
-
-.facetwp-content .qb-wrap .facetwp-row {
- grid-template-columns: 160px 1fr;
- padding: 0;
-}
-
-.facetwp-region textarea {
- width: 100%;
- height: 320px;
- padding: 10px;
- color: var(--blue-light);
- background-color: var(--grey-dark);
- font-family: monospace;
- white-space: pre;
- overflow: auto;
-}
-
-.facetwp-region textarea.facet-modifier-values {
- width: 360px;
- height: 120px;
-}
-
-.facetwp-region .item-name {
- display: inline-block;
- margin: 0 12px;
-}
-
-.table-row {
- margin-bottom: 15px;
-}
-
-.hidden {
- display: none;
-}
-
-.facetwp-dev-mode {
- display: inline-block;
- position: absolute;
- color: var(--purple);
- right: 20px;
- margin-top: 60px;
-}
-
-.facetwp-region .open-builder:before {
- content: '\f107';
- font: 400 20px/1 dashicons;
- vertical-align: top;
- padding-right: 4px;
-}
-
-.facetwp-region .fs-dropdown {
- max-width: 400px;
- width: auto;
-}
-
-.facetwp-region .item-locked {
- padding: 10px;
- margin-bottom: 20px;
- background-color: var(--red);
- border-radius: 3px;
- color: var(--white);
-}
-
-.facetwp-region .item-locked span {
- padding-left: 5px;
- cursor: pointer;
-}
-
-.facetwp-region .facetwp-content.locked {
- opacity: 0.4;
-}
-
-/* fSelect overrides */
-
-.facetwp-region .fs-label-wrap {
- border: 1px solid var(--input-border);
- border-radius: 4px;
-}
-
-.facetwp-region .fs-label-wrap .fs-label {
- padding: 0 8px;
- line-height: 2;
-}
-
-.facetwp-region .fs-search input {
- padding: 0;
-}
-
-.facetwp-region .fs-label-wrap .fs-arrow {
- top: 6px;
- right: 5px;
- bottom: initial;
- width: 16px;
- height: 16px;
- background: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E') no-repeat;
- background-size: 16px 16px;
- border: none;
-}
-
-.facetwp-region .fs-open .fs-arrow {
- transform: rotate(-180deg);
-}
-
-/* Data Source dropdown */
-
-.name-source .fs-dropdown {
- width: 300px;
-}
-
-/* Cards UI */
-
-.facetwp-card {
- cursor: pointer;
-}
-
-.facetwp-card:nth-child(odd) {
- background-color: var(--grey-light);
-}
-
-.facetwp-card,
-.facetwp-table-header {
- display: grid;
- grid-template-columns: 30px 1fr 1fr 1fr 1fr 80px 80px;
- line-height: 22px;
- padding: 8px;
-}
-
-.facetwp-region-templates .facetwp-card,
-.facetwp-region-templates .facetwp-table-header {
- grid-template-columns: 30px 1fr 1fr 1fr 1fr 80px;
-}
-
-.facetwp-table-header {
- font-weight: bold;
-}
-
-.facetwp-card .card-drag {
- cursor: move;
- color: var(--grey);
- font-size: 18px;
- line-height: 1;
-}
-
-.facetwp-card > div {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.facetwp-card > div:hover {
- white-space: normal;
-}
-
-.facetwp-card:hover .card-label {
- color: var(--blue-medium);
-}
-
-/* Actions button */
-
-.facetwp-card .card-actions {
- text-align: right;
-}
-
-.facetwp-card .actions-wrap {
- display: inline-block;
-}
-
-.facetwp-card .actions-wrap .actions-btn {
- padding: 2px 8px;
- color: var(--grey);
-}
-
-.facetwp-card:hover .actions-wrap .actions-btn {
- color: var(--grey-dark);
-}
-
-.facetwp-card .actions-wrap .actions-modal {
- display: none;
- position: absolute;
- right: 28px;
- font-size: 12px;
- background-color: var(--white);
- border: 1px solid var(--grey);
- margin-top: -1px;
- z-index: 1;
-}
-
-.facetwp-card .actions-wrap .actions-modal div {
- padding: 4px 8px;
-}
-
-.facetwp-card .actions-wrap .actions-modal div:hover {
- background-color: var(--grey-light);
-}
-
-.facetwp-card .actions-wrap:hover .actions-modal {
- display: block;
-}
-
-/* Settings page */
-
-.facetwp-region .import-code {
- height: 160px;
-}
-
-.field-notes {
- color: var(--grey-medium);
- font-style: italic;
-}
-
-.facetwp-region .facetwp-subnav a {
- display: inline-block;
- font-size: 18px;
- margin: 0 20px 0 0;
- border-bottom: 3px solid transparent;
- cursor: pointer;
- color: var(--grey-dark);
-}
-
-.facetwp-region-facets .facetwp-subnav a,
-.facetwp-region-templates .facetwp-subnav a {
- margin: 0;
-}
-
-.facetwp-subnav a.active {
- border-color: var(--blue);
- color: var(--blue);
-}
-
-.facetwp-settings-section {
- display: none;
-}
-
-.facetwp-settings-section.active {
- display: block;
-}
-
-.facetwp-setting.slim {
- width: 100px;
-}
-
-/* Tooltips */
-
-.facetwp-tooltip {
- display: inline-block;
- cursor: help;
-}
-
-.facetwp-tooltip:after {
- display: inline-block;
- content: '?';
- line-height: 1;
- font-size: 12px;
- border: 1px solid var(--grey-medium);
- border-radius: 50%;
- margin-left: 5px;
- padding: 0 3px;
-}
-
-.facetwp-tooltip-content {
- display: none;
-}
-
-/* Edit screens */
-
-.facetwp-row {
- display: grid;
- grid-template-columns: 220px 1fr;
- padding-bottom: 20px;
-}
-
-.facetwp-content.type-search .field-data-source,
-.facetwp-content.type-pager .field-data-source,
-.facetwp-content.type-reset .field-data-source,
-.facetwp-content.type-sort .field-data-source {
- display: none;
-}
-
-/* Query builder */
-
-.qb-wrap .qb-condition {
- padding-bottom: 15px;
-}
-
-.qb-wrap .qb-actions {
- padding-top: 15px;
-}
-
-.qb-wrap .qb-compare,
-.qb-wrap .qb-orderby,
-.qb-wrap .qb-type,
-.qb-wrap .qb-order {
- width: 120px;
-}
-
-.facet-fields .qb-row {
- display: grid;
- grid-template-columns: 1fr 50px;
- background-color: var(--grey-light);
- border: 1px solid var(--grey-medium);
- border-radius: 3px;
- margin-bottom: 20px;
- padding: 15px;
-}
-
-.facet-fields .qb-row .qb-order-row {
- margin-top: 10px;
-}
-
-.qb-wrap input.qb-posts-per-page {
- width: 60px;
-}
-
-.qb-wrap .align-right {
- text-align: right;
-}
-
-.qb-add,
-.qb-move,
-.qb-remove {
- cursor: pointer;
- font-size: 18px;
- vertical-align: middle;
-}
-
-.qb-remove {
- color: var(--red);
-}
-
-.qb-wrap .fs-wrap {
- vertical-align: middle;
-}
-
-.qb-wrap .v-select {
- display: inline-block;
- vertical-align: middle;
- min-width: 160px;
- max-width: 360px;
-}
-
-.qb-wrap .v-select.vs--searchable {
- min-width: 200px;
-}
-
-.qb-wrap .v-select.vs--unsearchable {
- vertical-align: top;
-}
-
-.qb-wrap .v-select .vs__search {
- background: none;
- height: 20px;
- min-height: auto;
- margin: 4px 2px 0;
- line-height: 20px;
-}
-
-.qb-wrap .v-select .vs__search,
-.qb-wrap .v-select .vs__search:focus {
- font-size: 14px;
- border: 1px solid var(--grey);
- padding: 0 8px;
-}
-
-.qb-wrap .v-select .vs__dropdown-toggle {
- border-color: var(--input-border);
-}
-
-.qb-wrap .v-select .vs__selected {
- height: 20px;
-}
-
-.qb-wrap .v-select .vs__actions {
- display: none;
-}
-
-/* Boolean toggle */
-
-.facetwp-switch {
- position: relative;
- display: inline-block;
- width: 48px;
- height: 24px;
-}
-
-.facetwp-switch input {
- display: none;
-}
-
-.facetwp-slider {
- position: absolute;
- cursor: pointer;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- background-color: var(--grey-medium);
- border-radius: 24px;
- -webkit-transition: .4s;
- transition: .4s;
-}
-
-.facetwp-slider:before {
- position: absolute;
- content: '';
- height: 16px;
- width: 16px;
- left: 4px;
- bottom: 4px;
- background-color: white;
- border-radius: 50%;
- -webkit-transition: .4s;
- transition: .4s;
-}
-
-.facetwp-switch input:checked + .facetwp-slider {
- background-color: var(--purple);
-}
-
-.facetwp-switch input:checked + .facetwp-slider:before {
- -webkit-transform: translateX(24px);
- -ms-transform: translateX(24px);
- transform: translateX(24px);
-}
-
-/* Template content */
-
-.template-tabs {
- margin-bottom: 20px;
- border-bottom: 1px solid var(--grey);
-}
-
-.template-tabs.top-level {
- margin: 30px 0 45px 0;
-}
-
-.template-tabs span {
- display: inline-block;
- padding: 5px 15px;
- border: 1px solid var(--grey);
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
- background-color: var(--grey-light);
- color: var(--purple);
- margin-left: 5px;
- margin-bottom: -1px;
- cursor: pointer;
-}
-
-.template-tabs span.active {
- border-bottom: 1px solid var(--white);
- background-color: var(--white);
- color: var(--red);
-}
-
-/* Layout builder */
-
-.builder-wrap {
- display: grid;
- grid-template-columns: 1fr 320px;
- grid-column-gap: 20px;
- min-height: 600px;
- user-select: none;
-}
-
-.builder-canvas {
- position: relative;
- outline: 1px solid var(--grey-medium);
- border-radius: 4px;
- background-color: var(--grey-light);
-}
-
-.builder-buttons div {
- display: inline-block;
- padding: 5px;
- margin: 0 5px 5px 0;
- border: 1px solid var(--grey-medium);
- border-radius: 3px;
- background: var(--white);
- cursor: move;
-}
-
-.builder-row,
-.builder-col,
-.builder-item {
- position: relative;
-}
-
-.builder-row-inner {
- display: grid;
- grid-template-columns: 1fr;
- grid-column-gap: 6px;
- position: relative;
- min-height: 30px;
-}
-
-.builder-row-actions,
-.builder-col-actions,
-.builder-item-actions {
- display: none;
- position: absolute;
- height: 20px;
- line-height: 20px;
- color: var(--white);
- cursor: pointer;
- z-index: 10;
-}
-
-.builder-row-actions span,
-.builder-col-actions span,
-.builder-item-actions span {
- display: inline-block;
- width: 20px;
-}
-
-.builder-col-actions:hover {
- width: auto;
-}
-
-.builder-row-actions {
- top: -20px;
- left: 50%;
- transform: translateX(-50%);
- background-color: var(--purple);
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
-
- /* fixes finnicky hovering to actions buttons */
- box-shadow: inset 0 -1px var(--grey-light);
- height: 21px;
-}
-
-.builder-col-actions {
- top: 0;
- left: 0;
- width: 20px;
- overflow: hidden;
- background-color: var(--purple);
-}
-
-.builder-item-actions {
- top: 0;
- right: 0;
- width: 20px;
- overflow: hidden;
- background-color: var(--purple);
-}
-
-.builder-row:hover > .builder-row-actions,
-.builder-col:hover > .builder-col-actions,
-.builder-item:hover > .builder-item-actions {
- display: inline-block;
- line-height: 20px;
- text-align: center;
-}
-
-.builder-row:hover {
- outline: 1px solid var(--purple);
-}
-
-.builder-col .resizer {
- position: absolute;
- top: 0;
- right: -6px;
- width: 5px;
- height: 100%;
- cursor: col-resize;
-}
-
-.builder-row:hover .builder-col .resizer {
- background-color: var(--grey);
-}
-
-.builder-col-inner {
- position: relative;
- min-height: 30px;
- margin: 20px;
-}
-
-.builder-col-inner.empty-col {
- height: calc(100% - 20px);
-}
-
-.builder-item {
- background-color: var(--white);
- outline: 1px dashed var(--grey-medium);
- margin-bottom: 10px;
- padding: 2px 10px;
-}
-
-.builder-item:hover {
- outline: 1px solid var(--purple);
-}
-
-.builder-item-inner {
- height: 30px;
- line-height: 30px;
- padding-right: 20px;
- word-break: break-all;
- overflow: hidden;
- cursor: default;
-}
-
-.builder-item-inner.is-hidden {
- opacity: 0.4;
-}
-
-.builder-item-inner .item-drag {
- cursor: move;
-}
-
-.builder-first-add {
- display: flex;
- align-items: center;
- justify-content: center;
- outline: 1px dashed var(--grey-medium);
- font-size: 20px;
- color: var(--grey-medium);
- height: 30px;
- cursor: default;
-}
-
-.builder-first-add:hover {
- outline: 1px dashed var(--purple);
- background-color: var(--white);
- color: var(--purple);
-}
-
-.popover {
- position: absolute;
- width: 220px;
- top: 20px;
- left: 20px;
- background-color: var(--white);
- outline: 1px solid var(--purple);
- z-index: 10;
-}
-
-.popover-search {
- border-bottom: 1px solid var(--grey);
-}
-
-.popover-search input[type='text'] {
- width: 220px;
- box-shadow: none;
- outline-style: none;
- border-color: transparent;
- line-height: 26px;
- padding: 0px 10px;
-}
-
-.popover-choices {
- max-height: 220px;
- padding: 4px 0;
- overflow: scroll;
-}
-
-.popover-choices div {
- padding: 4px 10px;
- cursor: pointer;
-}
-
-.popover-choices div:hover {
- background-color: var(--grey-light);
-}
-
-.builder-crumb {
- display: inline-block;
-}
-
-.builder-setting {
- margin-bottom: 20px;
-}
-
-.builder-setting .setting-title {
- margin-bottom: 5px;
-}
-
-.builder-setting input[type='number'] {
- width: 60px;
-}
-
-.builder-setting .utrbl {
- display: inline-block;
- width: 50px;
-}
-
-.builder-setting .utrbl-unit {
- display: none;
-}
-
-.builder-setting .utrbl input[type='text'],
-.builder-setting .utrbl input[type='number'] {
- width: 46px;
- height: auto;
-}
-
-.builder-setting textarea {
- height: 100px;
-}
-
-.builder-setting .utrbl span {
- display: block;
- font-size: 9px;
- text-transform: uppercase;
- color: var(--grey-medium);
-}
-
-.builder-setting .text-style-icons span {
- display: inline-block;
- padding: 4px 8px;
- margin: 4px 2px 0 0;
- border: 1px solid var(--grey);
- border-radius: 3px;
- cursor: pointer;
-}
-
-.builder-setting .text-style-icons span.active {
- background-color: var(--grey-dark);
- color: var(--white);
-}
-
-/* Color picker */
-
-.color-wrap {
- position: relative;
-}
-
-.color-wrap .color-canvas {
- display: inline-block;
-}
-
-.color-wrap .color-preview {
- position: absolute;
- top: 1px;
- left: 2px;
- height: 28px;
- width: 28px;
- border-top-left-radius: 2px;
- border-bottom-left-radius: 2px;
- z-index: 1;
-}
-
-.color-wrap input.color-input {
- padding-left: 36px;
-}
-
-.color-wrap .color-clear {
- display: inline-block;
- position: relative;
- right: 30px;
- width: 20px;
- text-align: center;
- cursor: pointer;
-}
-
-@media (min-width: 783px) {
- .facetwp-header {
- position: sticky;
- z-index: 100;
- top: 32px;
- }
-}
-
-/* FontAwesome */
-
-svg:not(:root).svg-inline--fa {
- overflow: visible;
-}
-.svg-inline--fa {
- display: inline-block;
- font-size: inherit;
- height: 1em;
- overflow: visible;
- vertical-align: -.125em;
-}
-.svg-inline--fa.fa-w-10 {
- width: .625em;
-}
-.svg-inline--fa.fa-w-11 {
- width: .6875em;
-}
-.svg-inline--fa.fa-w-12 {
- width: .75em;
-}
-.svg-inline--fa.fa-w-14 {
- width: .875em;
-}
-.svg-inline--fa.fa-w-16 {
- width: 1em;
-}
-.svg-inline--fa.fa-w-18 {
- width: 1.125em;
-}
-.svg-inline--fa.fa-w-20 {
- width: 1.25em;
-}
diff --git a/wp/wp-content/plugins/facetwp/assets/css/front.css b/wp/wp-content/plugins/facetwp/assets/css/front.css
deleted file mode 100644
index 3417f13b..00000000
--- a/wp/wp-content/plugins/facetwp/assets/css/front.css
+++ /dev/null
@@ -1,327 +0,0 @@
-.facetwp-facet {
- margin-bottom: 40px;
-}
-
-.facetwp-facet.is-loading {
- opacity: 0.6;
-}
-
-.facetwp-overlay {
- position: absolute;
-}
-
-.facetwp-pager-label {
- display: inline-block;
- margin-right: 12px;
-}
-
-.facetwp-page {
- display: inline-block;
- padding: 0px 4px;
- margin-right: 6px;
- cursor: pointer;
-}
-
-.facetwp-page.dots {
- cursor: default;
-}
-
-.facetwp-page.active {
- font-weight: bold;
- cursor: default;
-}
-
-/* Checkboxes */
-
-.facetwp-type-checkboxes .facetwp-depth {
- display: none;
-}
-
-.facetwp-type-checkboxes .facetwp-depth.visible {
- display: inherit;
-}
-
-.facetwp-checkbox {
- background: url('../images/checkbox.png') 0 50% no-repeat;
- background-size: 14px 14px;
- margin-bottom: 4px;
- padding-left: 20px;
- cursor: pointer;
-}
-
-.facetwp-checkbox.checked {
- background-image: url('../images/checkbox-on.png');
-}
-
-.facetwp-checkbox.disabled,
-.facetwp-radio.disabled {
- opacity: 0.4;
- cursor: default;
-}
-
-.facetwp-checkbox .facetwp-expand {
- float: right;
-}
-
-.facetwp-display-value {
- padding-right: 5px;
-}
-
-/* Radio */
-
-.facetwp-radio {
- background: url('../images/radio.png') 0 50% no-repeat;
- background-size: 14px 14px;
- margin-bottom: 4px;
- padding-left: 20px;
- cursor: pointer;
-}
-
-.facetwp-radio.checked {
- background-image: url('../images/radio-on.png');
-}
-
-/* fSelect */
-
-.facetwp-type-fselect.is-loading {
- opacity: 1; /* prevent stack order issues */
-}
-
-.facetwp-type-fselect.is-loading .fs-label-wrap,
-.facetwp-type-fselect.is-loading .fs-search,
-.facetwp-type-fselect.is-loading .fs-no-results,
-.facetwp-type-fselect.is-loading .fs-options {
- opacity: 0.6;
-}
-
-.facetwp-type-fselect.is-loading .fs-option {
- cursor: wait;
-}
-
-.facetwp-type-fselect .fs-wrap.fs-disabled .fs-option {
- opacity: 0.4;
- cursor: wait;
-}
-
-.facetwp-type-fselect .fs-option .fs-option-label {
- white-space: nowrap;
-}
-
-.facetwp-type-fselect .fs-option.d1 .fs-option-label {
- padding-left: 20px;
-}
-
-.facetwp-type-fselect .fs-option.d2 .fs-option-label {
- padding-left: 40px;
-}
-
-.facetwp-type-fselect .fs-option.d3 .fs-option-label {
- padding-left: 60px;
-}
-
-/* Hierarchy */
-
-.facetwp-depth {
- margin-left: 12px;
-}
-
-.facetwp-link {
- cursor: pointer;
-}
-
-.facetwp-link.checked {
- font-weight: bold;
- cursor: default;
-}
-
-.facetwp-toggle {
- cursor: pointer;
-}
-
-.facetwp-hidden {
- display: none;
-}
-
-/* Slider */
-
-.facetwp-slider-wrap {
- padding-bottom: 15px;
-}
-
-.facetwp-slider-reset {
- border: 1px solid #d9d9d9;
- border-radius: 3px;
- background: #fff;
- box-shadow: inset 0 0 1px #fff, inset 0 1px 7px #ebebeb, 0 3px 6px -3px #bbb;
- padding: 4px 8px;
- cursor: pointer;
-}
-
-.facetwp-slider[data-disabled="true"] {
- opacity: 0.6;
- cursor: not-allowed;
-}
-
-.facetwp-slider[data-disabled="true"] .noUi-handle {
- cursor: not-allowed;
-}
-
-/* Search */
-
-.facetwp-input-wrap {
- display: inline-block;
- position: relative;
-}
-
-.facetwp-facet input.facetwp-search,
-.facetwp-facet input.facetwp-location {
- margin: 0;
- padding-right: 30px;
- min-width: 240px;
-}
-
-.facetwp-icon {
- right: 0;
- height: 100%;
- line-height: 1;
- position: absolute;
- cursor: pointer;
- opacity: 0.5;
-}
-
-.facetwp-icon:before {
- display: inline-block;
- content: '';
- width: 30px;
- height: 100%;
- background: url('../images/icon-search.png') no-repeat;
- background-position: 5px 50%;
- background-size: 20px 20px;
-}
-
-/* Proximity */
-
-.location-results {
- position: absolute;
- background: #fff;
- border-left: 1px solid #ddd;
- border-right: 1px solid #ddd;
- overflow: hidden;
- width: 100%;
-}
-
-.location-result {
- font-size: 11px;
- border-bottom: 1px solid #ddd;
- padding: 5px;
- cursor: pointer;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- color: #888;
-}
-
-.location-result:hover {
- background-color: #f8f8f8;
-}
-
-.location-result.active {
- background-color: #EBF2FE;
-}
-
-.location-result .result-main {
- font-size: 13px;
- color: #222;
-}
-
-.facetwp-icon.locate-me:before {
- background-image: url('../images/icon-locate.png');
-}
-
-.facetwp-icon.f-reset:before {
- background-image: url('../images/icon-close.png');
-}
-
-.facetwp-icon.f-loading:before {
- background-image: url('../images/loading.png');
- animation: spin 700ms infinite linear;
-}
-
-.location-attribution {
- border-bottom: 1px solid #ddd;
- padding: 5px;
-}
-
-.powered-by-google {
- height: 15px;
- background: url('../images/powered-by-google.png') top right no-repeat;
- background-size: auto 15px;
-}
-
-/* Rating */
-
-.facetwp-stars {
- display: inline-block;
- line-height: 1;
- padding-right: 4px;
- user-select: none;
- unicode-bidi: bidi-override;
- direction: rtl;
-}
-
-.facetwp-star {
- cursor: pointer;
- font-size: 20px;
- color: #ccc;
-}
-
-.facetwp-star:hover,
-.facetwp-star:hover ~ .facetwp-star,
-.facetwp-star.selected,
-.facetwp-star.selected ~ .facetwp-star {
- color: #000;
-}
-
-.facetwp-star.selected:hover,
-.facetwp-star.selected:hover ~ .facetwp-star {
- color: red;
-}
-
-/* CSS animations */
-
-@keyframes spin {
- from {
- transform: rotate(0deg);
- }
- to {
- transform: rotate(360deg);
- }
-}
-
-/* Selections shortcode */
-
-.facetwp-selections li {
- display: inline-block;
- line-height: 1;
-}
-
-.facetwp-selections .facetwp-selection-value {
- display: inline-block;
- margin-right: 10px;
- cursor: pointer;
-
- padding-right: 16px;
- background-image: url('../images/icon-close.png');
- background-size: 12px 12px;
- background-repeat: no-repeat;
- background-position: right center;
-}
-
-/* Layout builder */
-
-@media (max-width: 480px) {
- body .facetwp-template .fwpl-layout,
- body .facetwp-template-static .fwpl-layout {
- grid-template-columns: 1fr;
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/assets/images/checkbox-on.png b/wp/wp-content/plugins/facetwp/assets/images/checkbox-on.png
deleted file mode 100644
index f5bf39f5..00000000
Binary files a/wp/wp-content/plugins/facetwp/assets/images/checkbox-on.png and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/assets/images/checkbox.png b/wp/wp-content/plugins/facetwp/assets/images/checkbox.png
deleted file mode 100644
index ac29efb5..00000000
Binary files a/wp/wp-content/plugins/facetwp/assets/images/checkbox.png and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/assets/images/icon-close.png b/wp/wp-content/plugins/facetwp/assets/images/icon-close.png
deleted file mode 100644
index f8a96b2a..00000000
Binary files a/wp/wp-content/plugins/facetwp/assets/images/icon-close.png and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/assets/images/icon-locate.png b/wp/wp-content/plugins/facetwp/assets/images/icon-locate.png
deleted file mode 100644
index 5288a280..00000000
Binary files a/wp/wp-content/plugins/facetwp/assets/images/icon-locate.png and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/assets/images/icon-search.png b/wp/wp-content/plugins/facetwp/assets/images/icon-search.png
deleted file mode 100644
index 148264d8..00000000
Binary files a/wp/wp-content/plugins/facetwp/assets/images/icon-search.png and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/assets/images/loading.png b/wp/wp-content/plugins/facetwp/assets/images/loading.png
deleted file mode 100644
index 39a59963..00000000
Binary files a/wp/wp-content/plugins/facetwp/assets/images/loading.png and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/assets/images/logo.svg b/wp/wp-content/plugins/facetwp/assets/images/logo.svg
deleted file mode 100644
index 673dfd54..00000000
--- a/wp/wp-content/plugins/facetwp/assets/images/logo.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/wp/wp-content/plugins/facetwp/assets/images/powered-by-google.png b/wp/wp-content/plugins/facetwp/assets/images/powered-by-google.png
deleted file mode 100644
index 64b2cab5..00000000
Binary files a/wp/wp-content/plugins/facetwp/assets/images/powered-by-google.png and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/assets/images/radio-on.png b/wp/wp-content/plugins/facetwp/assets/images/radio-on.png
deleted file mode 100644
index d1e74ce8..00000000
Binary files a/wp/wp-content/plugins/facetwp/assets/images/radio-on.png and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/assets/images/radio.png b/wp/wp-content/plugins/facetwp/assets/images/radio.png
deleted file mode 100644
index ae622383..00000000
Binary files a/wp/wp-content/plugins/facetwp/assets/images/radio.png and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/assets/js/dist/admin.min.js b/wp/wp-content/plugins/facetwp/assets/js/dist/admin.min.js
deleted file mode 100644
index 55b8c6b0..00000000
--- a/wp/wp-content/plugins/facetwp/assets/js/dist/admin.min.js
+++ /dev/null
@@ -1,1684 +0,0 @@
-(function () {
- 'use strict';
-
- (function ($) {
-
- $(function () {
- init_vue();
- init_custom_js();
- });
-
- function init_vue() {
-
- Vue.config.devtools = true;
-
- Vue.component('v-select', VueSelect.VueSelect);
-
- Vue.filter('i18n', function (str) { return FWP.__(str); });
-
- // Defaults mixin
- var builder_defaults = {
- methods: {
- defaultLayout: function defaultLayout() {
- return {
- items: [this.defaultRow()],
- settings: this.getDefaultSettings('layout')
- };
- },
- defaultRow: function defaultRow() {
- return {
- type: 'row',
- items: [this.defaultCol()],
- settings: this.getDefaultSettings('row')
- };
- },
- defaultCol: function defaultCol() {
- return {
- type: 'col',
- items: [],
- settings: this.getDefaultSettings('col')
- };
- },
- defaultItem: function defaultItem(source) {
- return {
- type: 'item',
- source: source,
- settings: this.getDefaultSettings('item', source)
- };
- },
- mergeSettings: function mergeSettings(settings, type, source) {
- var defaults = this.getDefaultSettings(type, source);
- var default_keys = Object.keys(defaults);
- var setting_keys = Object.keys(settings);
-
- // Automatically inject new settings
- var missing_keys = default_keys.filter(function (name) { return !setting_keys.includes(name); });
-
- missing_keys.forEach(function (name, index) {
- Vue.set(settings, name, defaults[name]);
- });
-
- return settings;
- },
- getSettingsMeta: function getSettingsMeta() {
- var settings = {
- num_columns: {
- type: 'number',
- title: FWP.__('Number of grid columns '),
- defaultValue: 1
- },
- grid_gap: {
- type: 'number',
- title: FWP.__('Spacing between results'),
- defaultValue: 10
- },
- no_results_text: {
- type: 'textarea',
- title: FWP.__('No results text')
- },
- text_style: {
- type: 'text-style',
- title: FWP.__('Text style'),
- tab: 'style',
- defaultValue: {
- align: '',
- bold: false,
- italic: false
- }
- },
- text_color: {
- type: 'color',
- title: FWP.__('Text color'),
- tab: 'style'
- },
- font_size: {
- type: 'slider',
- title: FWP.__('Font size'),
- tab: 'style',
- defaultValue: {
- unit: 'px',
- size: 0
- }
- },
- background_color: {
- type: 'color',
- title: FWP.__('Background color'),
- tab: 'style'
- },
- border: {
- type: 'border',
- title: FWP.__('Border'),
- tab: 'style',
- defaultValue: {
- style: 'none',
- color: '',
- width: {
- unit: 'px',
- top: 0,
- right: 0,
- bottom: 0,
- left: 0
- }
- },
- children: {
- style: {
- type: 'select',
- title: FWP.__('Border style'),
- choices: {
- 'none': FWP.__('None'),
- 'solid': FWP.__('Solid'),
- 'dashed': FWP.__('Dashed'),
- 'dotted': FWP.__('Dotted'),
- 'double': FWP.__('Double')
- }
- },
- color: {
- type: 'color',
- title: FWP.__('Border color')
- },
- width: {
- type: 'utrbl',
- title: FWP.__('Border width')
- }
- }
- },
- button_text: {
- type: 'text',
- title: FWP.__('Button text')
- },
- button_text_color: {
- type: 'color',
- title: FWP.__('Button text color')
- },
- button_color: {
- type: 'color',
- title: FWP.__('Button color')
- },
- button_padding: {
- type: 'utrbl',
- title: FWP.__('Button padding'),
- defaultValue: {
- unit: 'px',
- top: 0,
- right: 0,
- bottom: 0,
- left: 0
- }
- },
- separator: {
- type: 'text',
- title: FWP.__('Separator'),
- defaultValue: ', '
- },
- custom_css: {
- type: 'textarea',
- title: FWP.__('Custom CSS'),
- tab: 'style'
- },
- grid_template_columns: {
- type: 'text',
- title: FWP.__('Column widths'),
- defaultValue: '1fr'
- },
- content: {
- type: 'textarea',
- title: FWP.__('Content')
- },
- image_size: {
- type: 'select',
- title: FWP.__('Image size'),
- defaultValue: 'thumbnail',
- choices: FWP.image_sizes,
- v_show: [
- { type: 'source', value: 'featured_image' }
- ]
- },
- author_field: {
- type: 'select',
- title: FWP.__('Author field'),
- defaultValue: 'display_name',
- choices: {
- 'display_name': FWP.__('Display name'),
- 'user_login': FWP.__('User login'),
- 'ID': FWP.__('User ID')
- }
- },
- field_type: {
- type: 'select',
- title: FWP.__('Field type'),
- defaultValue: 'text',
- choices: {
- 'text': 'Text',
- 'date': 'Date',
- 'number': 'Number'
- }
- },
- date_format: {
- type: 'text',
- title: FWP.__('Date format'),
- defaultValue: 'F j, Y',
- v_show: [
- { type: 'field_type', value: 'date' },
- { type: 'source', value: 'post_date' },
- { type: 'source', value: 'post_modified' }
- ]
- },
- input_format: {
- type: 'text',
- title: FWP.__('Input format'),
- defaultValue: 'Y-m-d',
- v_show: [
- { type: 'field_type', value: 'date' },
- { type: 'source', value: 'post_date' },
- { type: 'source', value: 'post_modified' }
- ]
- },
- number_format: {
- type: 'select',
- title: FWP.__('Number format'),
- choices: {
- '': FWP.__('None'),
- 'n': '1234',
- 'n.n': '1234.5',
- 'n.nn': '1234.56',
- 'n,n': '1,234',
- 'n,n.n': '1,234.5',
- 'n,n.nn': '1,234.56'
- },
- v_show: [
- { type: 'field_type', value: 'number' }
- ]
- },
- link: {
- type: 'link',
- title: FWP.__('Link'),
- defaultValue: {
- type: 'none',
- href: '',
- target: ''
- },
- children: {
- type: {
- type: 'select',
- title: FWP.__('Link type'),
- choices: {
- 'none': FWP.__('None'),
- 'post': FWP.__('Post URL'),
- 'custom': FWP.__('Custom URL')
- }
- }
- }
- },
- prefix: {
- type: 'text',
- title: FWP.__('Prefix')
- },
- suffix: {
- type: 'text',
- title: FWP.__('Suffix')
- },
- is_hidden: {
- type: 'checkbox',
- defaultValue: false,
- suffix: FWP.__('Hide item?')
- },
- padding: {
- type: 'utrbl',
- title: FWP.__('Padding'),
- defaultValue: {
- unit: 'px',
- top: 0,
- right: 0,
- bottom: 0,
- left: 0
- },
- tab: 'style'
- },
- name: {
- type: 'text',
- title: FWP.__('Unique name'),
- notes: '(Required) unique element name, without spaces'
- },
- css_class: {
- type: 'text',
- title: FWP.__('CSS class'),
- tab: 'style'
- }
- };
-
- settings.button_border = this.$root.cloneObj(settings.border);
- settings.button_border.title = FWP.__('Button border');
- settings.button_border.tab = 'basic';
-
- settings.term_link = this.$root.cloneObj(settings.link);
- settings.term_link.children.type.choices = {
- 'none': FWP.__('None'),
- 'term': FWP.__('Term URL'),
- 'custom': FWP.__('Custom URL')
- };
-
- return settings;
- },
- getDefaultFields: function getDefaultFields(type, source) {
- var fields = [];
-
- if ('layout' == type) {
- fields.push('num_columns', 'grid_gap', 'no_results_text');
- }
-
- if ('row' == type) {
- fields.push('grid_template_columns');
- }
-
- if ('item' == type) {
- if ('html' == source) {
- fields.push('content');
- }
- if ('featured_image' == source) {
- fields.push('image_size', 'link');
- }
- if ('button' == source) {
- fields.push('button_text', 'button_text_color', 'button_color', 'button_padding', 'button_border', 'link');
- }
- if ('post_date' == source || 'post_modified' == source) {
- fields.push('date_format');
- }
- if ('post_title' == source) {
- fields.push('link');
- }
- if ('post_author' == source) {
- fields.push('author_field');
- }
- if (0 === source.indexOf('cf/')) {
- fields.push('field_type', 'date_format', 'input_format', 'number_format', 'link');
- }
- if (0 === source.indexOf('woo/')) {
- fields.push('field_type', 'date_format', 'input_format', 'number_format');
- }
- if (0 === source.indexOf('tax/')) {
- fields.push('separator', 'term_link');
- }
- if (!['html', 'button', 'featured_image'].includes(source)) {
- fields.push('prefix', 'suffix');
- }
- }
-
- fields.push('border', 'background_color', 'padding', 'text_color', 'text_style', 'font_size', 'name', 'css_class');
-
- if ('layout' == type) {
- fields.push('custom_css');
- }
-
- if ('item' == type) {
- fields.push('is_hidden');
- }
-
- return fields;
- },
- getDefaultSettings: function getDefaultSettings(type, source) {
- var settings = {};
- var settings_meta = this.getSettingsMeta();
- var fields = this.getDefaultFields(type, source);
-
- fields.forEach(function (name) {
- var defaultValue = settings_meta[name].defaultValue || '';
-
- if ('name' == name) {
- defaultValue = 'el-' + Math.random().toString(36).substring(7);
- }
-
- settings[name] = defaultValue;
- });
-
- return settings;
- }
- }
- };
-
- /* ================ query builder ================ */
-
- Vue.component('query-builder', {
- props: {
- query_obj: {
- type: Object,
- required: true
- },
- template: {
- type: Object,
- required: true
- }
- },
- template: "\n \n
Which results should be in the listing? \n\n
\n {{ 'Fetch' | i18n }}\n \n \n\n {{ 'and show' | i18n }}\n \n {{ 'per page' | i18n }}\n
\n\n
\n {{ 'Sort by' | i18n }}\n
\n\n
\n \n \n ID \n {{ 'Post Title' | i18n }} \n {{ 'Post Name' | i18n }} \n {{ 'Post Type' | i18n }} \n {{ 'Post Date' | i18n }} \n {{ 'Post Modified' | i18n }} \n {{ 'Comment Count' | i18n }} \n {{ 'Menu Order' | i18n }} \n post__in \n \n \n {{ label }} \n \n \n \n TEXT \n NUMERIC \n \n \n ASC \n DESC \n \n \n
\n\n
\n {{ 'Narrow results by' | i18n }}\n
\n\n
\n
\n \n \n \n \n\n
\n TEXT \n NUMERIC \n DATE \n \n\n
\n = \n != \n ', row)\" value=\">\">> \n =', row)\" value=\">=\">>= \n < \n <= \n IN \n NOT IN \n EXISTS \n NOT EXISTS \n EMPTY \n NOT EMPTY \n \n\n
\n \n Type a value, then press \"Enter\" to add it\n
\n \n\n
\n
\n\n
\n {{ 'Add query sort' | i18n }} \n {{ 'Add query filter' | i18n }} \n {{ 'Convert to query args' | i18n }} \n
\n
\n ",
- methods: {
- addTag: function addTag(newTag, value) {
- value.push(newTag);
- },
- getPlaceholder: function getPlaceholder(ref) {
- var key = ref.key;
-
- return ('tax/' == key.substr(0, 4)) ? FWP.__('Enter term slugs') : FWP.__('Enter values');
- },
- maybeShowValue: function maybeShowValue(compare) {
- return !['EXISTS', 'NOT EXISTS', 'EMPTY', 'NOT EMPTY'].includes(compare);
- },
- showCompare: function showCompare(option, ref) {
- var key = ref.key;
- var type = ref.type;
-
- if ('tax/' == key.substr(0, 4)) {
- if (!['IN', 'NOT IN', 'EXISTS', 'NOT EXISTS'].includes(option)) {
- return false;
- }
- }
- else if (['ID', 'post_author', 'post_status', 'post_name'].includes(key)) {
- if (option != 'IN' && option != 'NOT IN') {
- return false;
- }
- }
- else if ('DATE' == type || 'post_date' == key || 'post_modified' == key) {
- if (!['>', '>=', '<', '<='].includes(option)) {
- return false;
- }
- }
- else if ('CHAR' == type) {
- if (['>', '>=', '<', '<='].includes(option)) {
- return false;
- }
- }
- return true;
- },
- addSortCriteria: function addSortCriteria() {
- this.query_obj.orderby.push({
- key: 'title',
- order: 'ASC',
- type: 'CHAR'
- });
- },
- addFilterCriteria: function addFilterCriteria() {
- this.query_obj.filters.push({
- key: 'ID',
- value: [],
- compare: 'IN',
- type: 'CHAR'
- });
- },
- deleteSortCriteria: function deleteSortCriteria(index) {
- Vue.delete(this.query_obj.orderby, index);
- },
- deleteFilterCriteria: function deleteFilterCriteria(index) {
- Vue.delete(this.query_obj.filters, index);
- }
- }
- });
-
- Vue.component('fselect', {
- data: function data() {
- return {
- prev_key: ''
- };
- },
- props: ['row'],
- template: "\n \n \n \n ",
- mounted: function mounted() {
- fSelect(this.$el);
- },
- /**
- * fSelects won't refresh when deleting, so we need to
- * manually reload() the changed elements
- */
- beforeUpdate: function beforeUpdate() {
- this.prev_key = this.$el.getAttribute('data-key');
- },
- updated: function updated() {
- if (this.row.key != this.prev_key) {
- this.$el.fselect.reload();
- }
- }
- });
-
- /* ================ layout builder ================ */
-
-
- Vue.component('builder', {
- props: {
- layout: Object
- },
- template: "\n \n
\n
How should an individual result appear? \n
\n \n \n \n \n
\n
\n
\n
\n "
- });
-
- Vue.component('setting-wrap', {
- mixins: [builder_defaults],
- props: ['settings', 'name', 'source', 'tab'],
- template: "\n \n ",
- computed: {
- getSettingComponent: function getSettingComponent() {
- return 'setting-' + this.type;
- },
- isVisible: function isVisible() {
- var ret = true;
- var self = this;
-
- if ('undefined' === typeof this.meta.tab) {
- this.meta.tab = 'basic';
- }
-
- if (this.meta.tab !== this.tab) {
- ret = false;
- }
- else if ('undefined' !== typeof this.meta.v_show) {
- ret = false;
- this.meta.v_show.forEach(function (cond, index) {
- var type = cond.type;
- var setting_val = ('source' == type) ? self[type] : self.settings[type];
- var cond_value = cond.value || '';
- var cond_compare = cond.compare || '==';
- var is_match = ('==' == cond_compare)
- ? setting_val == cond_value
- : setting_val != cond_value;
-
- if (is_match) {
- ret = true;
- }
- });
- }
-
- return ret;
- }
- },
- created: function created() {
- this.settings_meta = this.getSettingsMeta();
- this.meta = this.settings_meta[this.name];
- this.type = this.meta.type;
- this.title = this.meta.title;
- }
- });
-
- Vue.component('setting-text', {
- props: ['settings', 'name', 'meta'],
- template: ' '
- });
-
- Vue.component('setting-number', {
- props: ['settings', 'name', 'meta'],
- template: ' '
- });
-
- Vue.component('setting-textarea', {
- props: ['settings', 'name', 'meta'],
- template: ''
- });
-
- Vue.component('setting-slider', {
- props: ['settings', 'name', 'meta'],
- template: "\n \n \n \n
\n ",
- computed: {
- fontSizeLabel: function fontSizeLabel() {
- var val = this.settings[this.name];
- return (0 === val.size) ? 'none' : val.size + val.unit;
- }
- }
- });
-
- Vue.component('setting-color', {
- props: ['settings', 'name', 'meta'],
- template: "\n ",
- mounted: function mounted() {
- var self = this;
- var $canvas = self.$el.getElementsByClassName('color-canvas')[0];
- var $preview = self.$el.getElementsByClassName('color-preview')[0];
- var $input = self.$el.getElementsByClassName('color-input')[0];
- var $clear = self.$el.getElementsByClassName('color-clear')[0];
- $preview.style.backgroundColor = $input.value;
-
- var picker = new Picker({
- parent: $canvas,
- popup: 'left',
- alpha: false,
- onDone: function onDone(color) {
- var hex = color.hex().substr(0, 7);
- self.settings[self.name] = hex;
- $preview.style.backgroundColor = hex;
- }
- });
-
- picker.onOpen = function(color) {
- picker.setColor($input.value);
- };
-
- $clear.addEventListener('click', function() {
- self.settings[self.name] = '';
- $preview.style.backgroundColor = '';
- });
- }
- });
-
- Vue.component('setting-link', {
- props: ['settings', 'name', 'meta'],
- template: "\n \n
\n \n\n
\n \n
\n
\n \n {{ 'Open in new tab?' | i18n }}\n
\n
\n "
- });
-
- Vue.component('setting-border', {
- props: ['settings', 'name', 'meta'],
- template: "\n \n
\n \n\n
\n
\n\n
\n \n\n
\n\n
\n \n
\n
\n "
- });
-
- Vue.component('setting-checkbox', {
- props: ['settings', 'name', 'meta'],
- template: "\n \n {{ meta.suffix }}\n
\n "
- });
-
- Vue.component('setting-select', {
- props: ['settings', 'name', 'meta'],
- template: "\n \n {{ label }} \n \n "
- });
-
- Vue.component('setting-utrbl', {
- props: ['settings', 'name', 'meta'],
- template: "\n \n "
- });
-
- Vue.component('setting-text-style', {
- props: ['settings', 'name', 'meta'],
- template: "\n \n \n \n \n \n \n
\n ",
- methods: {
- toggleChoice: function toggleChoice(opt, val) {
- var old_val = this.settings[this.name][opt];
-
- if ('undefined' !== typeof val) {
- this.settings[this.name][opt] = (val !== old_val) ? val : '';
- }
- else {
- this.settings[this.name][opt] = ! old_val;
- }
- },
- isActive: function isActive(opt, val) {
- var new_val = ('undefined' !== typeof val) ? val : true;
- return this.settings[this.name][opt] === new_val;
- }
- }
- });
-
- Vue.component('builder-settings', {
- mixins: [builder_defaults],
- props: {
- layout: Object
- },
- data: function data() {
- return {
- title: '',
- type: 'layout',
- settings: this.layout.settings,
- source: '',
- active_tab: 'basic'
- }
- },
- template: "\n \n
\n
\n
\n {{ 'Basic' | i18n }} \n {{ 'Style' | i18n }} \n
\n
\n \n
\n
\n ",
- computed: {
- settingTitle: function settingTitle() {
- return ('' === this.title) ? FWP.__('Settings') : this.title;
- },
- settingsFields: function settingsFields() {
- return this.getDefaultFields(this.type, this.source);
- }
- },
- methods: {
- uniqueKey: function uniqueKey() {
- // method to prevent caching
- return Math.floor(Math.random() * 999999);
- },
- isActiveTab: function isActiveTab(which) {
- return (this.active_tab === which) ? 'active' : '';
- },
- setActiveTab: function setActiveTab(which) {
- this.active_tab = which;
- }
- },
- created: function created() {
- var self = this;
-
- this.$root.$on('edit-layout', function () {
- self.title = '';
- self.type = 'layout';
- self.settings = self.mergeSettings(self.layout.settings, self.type);
- self.source = '';
- });
-
- this.$root.$on('edit-row', function (ref, num) {
- var settings = ref.settings;
-
- self.title = FWP.__('Row') + ' ' + num;
- self.type = 'row';
- self.settings = self.mergeSettings(settings, self.type);
- self.source = '';
- });
-
- this.$root.$on('edit-col', function (ref, num) {
- var settings = ref.settings;
-
- self.title = FWP.__('Column') + ' ' + num;
- self.type = 'col';
- self.settings = self.mergeSettings(settings, self.type);
- self.source = '';
- });
-
- this.$root.$on('edit-item', function (ref) {
- var source = ref.source;
- var settings = ref.settings;
-
- self.title = FWP.layout_data[source];
- self.type = 'item';
- self.settings = self.mergeSettings(settings, self.type, source);
- self.source = source;
- });
- }
- });
-
- Vue.component('builder-row', {
- mixins: [builder_defaults],
- props: {
- row: Object,
- rows: Array,
- index: Number,
- is_child: Boolean
- },
- template: "\n \n
\n \n \n \n \n
\n
\n \n \n
\n
\n ",
- computed: {
- classIsChild: function classIsChild() {
- return this.is_child ? 'is-child' : 'not-child';
- }
- },
- methods: {
- addRow: function addRow() {
- this.rows.splice(this.index + 1, 0, this.defaultRow());
-
- if (1 < this.rows.length) {
- this.$root.$emit('edit-row', this.rows[this.index + 1], this.index + 2);
- }
- else {
- this.$root.$emit('edit-layout');
- }
- },
- addCol: function addCol() {
- var len = this.row.items.push(this.defaultCol());
- this.$root.$emit('edit-col', this.row.items[len - 1], len);
-
- var grid_str = '1fr '.repeat(this.row.items.length).trim();
- this.row.settings.grid_template_columns = grid_str;
- },
- editRow: function editRow() {
- this.$root.$emit('edit-row', this.row, this.index + 1);
- },
- deleteRow: function deleteRow() {
- Vue.delete(this.rows, this.index);
- this.$root.$emit('edit-layout');
-
- // Add default row
- if (this.rows.length < 1) {
- if (! this.is_child) {
- this.addRow();
- }
- }
- }
- }
- });
-
- Vue.component('builder-col', {
- mixins: [builder_defaults],
- props: {
- col: Object,
- cols: Array,
- index: Number
- },
- data: function data() {
- return {
- adding_item: false
- }
- },
- template: "\n \n
\n
\n
\n \n \n
\n
\n
\n \n \n \n \n \n
\n \n \n
\n
\n ",
- methods: {
- addItem: function addItem() {
- this.adding_item = ! this.adding_item;
- },
- editCol: function editCol() {
- this.$root.$emit('edit-col', this.col, this.index + 1);
- this.adding_item = false;
- },
- deleteCol: function deleteCol() {
- // Remove the column
- this.cols.splice(this.index, 1);
-
- // Show the "Layout" settings
- this.$root.$emit('edit-layout');
-
- // Add default column
- if (this.cols.length < 1) {
- this.cols.push(this.defaultCol());
- }
-
- // Adjust the row's `grid_template_columns` string
- var grid_str = '1fr '.repeat(this.cols.length).trim();
- this.$parent.row.settings.grid_template_columns = grid_str;
- },
- away: function away() {
- this.adding_item = false;
- }
- }
- });
-
- Vue.component('col-resizer', {
- props: {
- cols: Array,
- index: Number
- },
- data: function data() {
- return {
- isResizing: false
- }
- },
- template: '
',
- computed: {
- classNames: function classNames() {
- return [
- 'resizer',
- this.isResizing ? 'is-resizing' : ''
- ];
- }
- },
- methods: {
- onMouseDown: function onMouseDown(ref) {
- var this$1$1 = this;
- var resizer = ref.target;
- var initialPageX = ref.pageX;
- ref.pageY;
-
- if (! resizer.classList.contains('resizer')) {
- return;
- }
-
- var self = this;
- var pane = resizer.parentElement;
- var row_inner = pane.parentElement;
- var initialPaneWidth = pane.offsetWidth;
-
- var resize = function (initialSize, offset) {
- if ( offset === void 0 ) offset = 0;
-
- var containerWidth = row_inner.clientWidth;
- var paneWidth = initialSize + offset;
- var width = ((paneWidth / containerWidth) * 100).toFixed(1) + '%';
- var gridColumns = this$1$1.$parent.$parent.row.settings.grid_template_columns.split(' ');
-
- gridColumns[this$1$1.index] = width;
-
- this$1$1.$parent.$parent.row.settings.grid_template_columns = gridColumns.join(' ');
- };
-
- // This adds is-resizing class to container
- self.isResizing = true;
-
- var onMouseMove = function (ref) {
- var pageX = ref.pageX;
- ref.pageY;
-
- resize(initialPaneWidth, pageX - initialPageX);
- };
-
- var onMouseUp = function () {
- // Run resize one more time to set computed width/height.
- resize(pane.clientWidth);
-
- // This removes is-resizing class to container
- self.isResizing = false;
-
- window.removeEventListener('mousemove', onMouseMove);
- window.removeEventListener('mouseup', onMouseUp);
- };
-
- window.addEventListener('mousemove', onMouseMove);
- window.addEventListener('mouseup', onMouseUp);
- }
- }
- });
-
- Vue.component('builder-item', {
- props: {
- item: Object,
- items: Array,
- index: Number
- },
- template: "\n \n ",
- methods: {
- editItem: function editItem() {
- this.$root.$emit('edit-item', this.item);
- },
- deleteItem: function deleteItem() {
- this.items.splice(this.index, 1);
- this.$root.$emit('edit-layout');
- }
- }
- });
-
- Vue.component('popover', {
- mixins: [builder_defaults],
- props: {
- col: Object
- },
- data: function data() {
- return {
- keywords: ''
- }
- },
- template: "\n \n ",
- methods: {
- handleBlur: function handleBlur(e) {
- if (!e.currentTarget.contains(e.relatedTarget)) {
- this.$parent.adding_item = false;
- }
- },
- isMatch: function isMatch(label) {
- var bool = ('' == this.keywords) ? true : false;
-
- if (false === bool) {
- var needle = this.keywords.toLowerCase();
- var haystack = label.toLowerCase();
- if (haystack.includes(needle)) {
- bool = true;
- }
- }
-
- return bool;
- },
- saveItem: function saveItem(source) {
- if ('row' == source) {
- var len = this.col.items.push(this.defaultRow());
- this.$root.$emit('edit-row', this.col.items[len - 1], len);
- }
- else {
- var len$1 = this.col.items.push(this.defaultItem(source));
- this.$root.$emit('edit-item', this.col.items[len$1 - 1]);
- }
-
- this.$parent.adding_item = false;
- }
- },
- mounted: function mounted() {
- this.$refs.keywords.focus();
- }
- });
-
-
- /* ================ facets / templates ================ */
-
-
- Vue.component('facets', {
- props: ['facets'],
- template: "\n \n \n
☰
\n
\n {{ facet.label }} \n \n
\n
{{ facet.name }}
\n
{{ facet.type }}
\n
\n
{{ getRowCount(facet.name) }}
\n
\n
\n
\n
\n
Copy shortcode
\n
Duplicate
\n
Delete
\n
\n
\n
\n
\n \n ",
- methods: {
- getSource: function getSource(source) {
- return FWP.layout_data[source] || '-';
- },
- getRowCount: function getRowCount(facet_name) {
- if (this.$root.is_indexing) {
- return '...';
- }
- return this.$root.row_counts[facet_name] || '-';
- }
- }
- });
-
- Vue.component('templates', {
- props: ['templates'],
- template: "\n \n \n
☰
\n
\n {{ template.label }} \n \n
\n
{{ template.name }}
\n
{{ getDisplayMode(index) }}
\n
{{ getPostTypes(index) }}
\n
\n
\n
\n
\n
Copy shortcode
\n
Duplicate
\n
Delete
\n
\n
\n
\n
\n \n ",
- methods: {
- getDisplayMode: function getDisplayMode(index) {
- var template = this.templates[index];
- return ('undefined' !== typeof template.modes) ? template.modes.display : 'advanced';
- },
- getPostTypes: function getPostTypes(index) {
- var template = this.templates[index];
- if ('undefined' !== typeof template.modes) {
- if ('visual' == template.modes.query) {
- var post_types = template.query_obj.post_type;
- if (0 === post_types.length) {
- return '';
- }
- else {
- return post_types.map(function (type) { return type.label; }).join(', ');
- }
- }
- }
- return '';
- }
- }
- });
-
- Vue.component('facet-edit', {
- data: function data() {
- return {
- facet: {}
- }
- },
- created: function created() {
- this.facet = this.$root.editing;
- },
- methods: {
- setName: function setName(e) {
- this.facet.name = this.$root.sanitizeName(e.target.innerHTML);
- },
- unlock: function unlock() {
- Vue.delete(this.facet, '_code');
- }
- },
- template: "\n \n
\n This facet is registered in code. Click to allow edits:\n \n
\n
\n
\n
{{ 'Label' | i18n }}
\n
\n \n \n \n {{ 'Copy shortcode' | i18n }}\n \n
\n
\n
\n
{{ 'Facet type' | i18n }}
\n
\n \n \n
\n
\n
\n
{{ 'Data source' | i18n }}
\n
\n \n
\n
\n
\n
\n
\n "
- });
-
- Vue.component('template-edit', {
- mixins: [builder_defaults],
- data: function data() {
- return {
- template: {},
- tab: 'display'
- }
- },
- created: function created() {
- this.template = this.$root.editing;
-
- // Set defaults for the layout builder
- if (! this.template.layout) {
- Vue.set(this.template, 'layout', this.defaultLayout());
- }
-
- // Set defaults for the query builder
- if (! this.template.query_obj) {
- Vue.set(this.template, 'query_obj', {
- post_type: [],
- posts_per_page: 10,
- orderby: [],
- filters: []
- });
- }
-
- // Set the modes
- if (! this.template.modes) {
- Vue.set(this.template, 'modes', {
- display: ('' !== this.template.template) ? 'advanced' : 'visual',
- query: ('' !== this.template.query) ? 'advanced' : 'visual'
- });
- }
- },
- methods: {
- setName: function setName(e) {
- this.template.name = this.$root.sanitizeName(e.target.innerHTML);
- },
- isMode: function isMode(mode) {
- return this.template.modes[this.tab] === mode;
- },
- switchMode: function switchMode() {
- var now = this.template.modes[this.tab];
- this.template.modes[this.tab] = ('visual' === now) ? 'advanced' : 'visual';
- },
- unlock: function unlock() {
- Vue.delete(this.template, '_code');
- }
- },
- template: "\n \n
\n This template is registered in code. Click to allow edits:\n \n
\n
\n
\n \n \n \n {{ 'Copy shortcode' | i18n }}\n \n
\n\n
\n Dev mode?\n \n\n
\n {{ 'Display' | i18n }} \n {{ 'Query' | i18n }} \n
\n\n
\n\n
\n
\n
\n "
- });
-
- Vue.component('facet-types', {
- props: ['facet', 'selected', 'types'],
- template: "\n \n {{ type.label }} \n \n "
- });
-
- Vue.component('facet-settings', {
- props: ['facet'],
- template: ' ',
- methods: {
- getFields: function getFields(aliases) {
- var output = [];
- $.each(aliases, function(name) {
- output = output.concat(FWP.facet_fields[name].names);
- });
- return output;
- }
- },
- computed: {
- // dynamic component so the data bindings (e.g. v-model) get compiled
- dynComponent: function dynComponent() {
- return {
- template: '' + this.settingsHtml + '
',
- props: ['facet']
- }
- },
- settingsHtml: function settingsHtml() {
- var self = this;
- var facet_obj = FWP.facet_types[self.facet.type];
- var aliases = facet_obj.fields;
-
- // Support for settings_html() in < 3.9
- if ('undefined' === typeof aliases) {
- if ('undefined' !== typeof FWP.clone[self.facet.type]) {
- FWP.facet_fields[self.facet.type + '_fields'] = {
- names: [],
- html: FWP.clone[self.facet.type]
- };
-
- var $html = $(FWP.clone[self.facet.type]);
- $.each($html.nodes[0].children, function(chunk) {
- $(chunk).find('input, textarea, select, [setting-name]').each(function() {
- var $el = $(this);
- var setting_name = $el.attr('setting-name');
-
- if (null === setting_name) {
- setting_name = $el.attr('class').split(' ')[0].replace(/-/g, '_').substr(6);
- }
-
- FWP.facet_fields[self.facet.type + '_fields'].names.push(setting_name);
- });
- });
-
- aliases = [self.facet.type + '_fields'];
- }
- }
-
- // Get the actual fields by parsing the aliases (groups)
- var fields = self.getFields(aliases);
- var html = '';
-
- // Add UI-dependant fields
- if ('undefined' !== typeof facet_obj.ui_fields) {
- if ('undefined' !== typeof self.facet.ui_type && '' != self.facet.ui_type) {
- var ui_fields = facet_obj.ui_fields[self.facet.ui_type];
- aliases = aliases.concat(ui_fields);
- fields = fields.concat(this.getFields(ui_fields));
- }
- }
-
- var combined = ['label', 'name', 'type', 'source', '_code'].concat(fields);
-
- // Remove irrelevant settings
- $.each(Object.keys(self.facet), function(setting_name) {
- if (-1 == combined.indexOf(setting_name)) {
- Vue.delete(self.facet, setting_name);
- }
- });
-
- // Add new settings
- $.each(aliases, function(alias_name) {
- var $parsed = $(FWP.facet_fields[alias_name].html);
-
- $.each(FWP.facet_fields[alias_name].names, function(setting_name) {
- var name_dashed = setting_name.replace(/_/g, '-');
- var $input = $parsed.find('.facet-' + name_dashed);
- var val = $input.val();
-
- if (0 < $input.len()) {
- $input.attr('v-model', 'facet.' + setting_name);
-
- if ('undefined' === typeof self.facet[setting_name]) {
- if ($input.is('[type=checkbox]')) {
- val = $input.nodes[0].checked ? 'yes' : 'no';
- }
- if ('[]' === val) {
- val = [];
- }
- }
- else {
- val = self.facet[setting_name];
- Vue.delete(self.facet, setting_name);
- }
-
- Vue.set(self.facet, setting_name, val);
- }
- });
-
- // Update the documentFragment HTML to include the "v-model"
- $.each($parsed.nodes[0].children, function(el) {
- html += el.outerHTML;
- });
- });
-
- return html;
- }
- },
- watch: {
- 'facet.type': function(val) {
- if ('search' == val || 'pager' == val || 'reset' == val || 'sort' == val) {
- Vue.delete(this.facet, 'source');
- }
- }
- }
- });
-
- Vue.component('data-sources', {
- props: {
- facet: Object,
- settingName: {
- type: String,
- default: 'source'
- }
- },
- template: "\n \n {{ 'None' | i18n }} \n \n {{ label }} \n \n \n ",
- computed: {
- className: function className() {
- return 'facet-' + this.settingName.replace(/_/g, '-');
- }
- },
- mounted: function mounted() {
- fSelect(this.$el);
- }
- });
-
- Vue.component('facet-names', {
- props: {
- facet: Object,
- setting: String
- },
- template: "\n \n \n {{ f.label }} \n \n \n ",
- computed: {
- className: function className() {
- return 'facet-' + this.setting.replace(/_/g, '-');
- }
- },
- methods: {
- bindSelectedClass: function bindSelectedClass(name) {
- return this.facet[this.setting].includes(name) ? 'selected' : '';
- }
- },
- created: function created() {
- if ('undefined' === typeof this.facet[this.setting]) {
- this.facet[this.setting] = [];
- }
- },
- mounted: function mounted() {
- fSelect(this.$el, { 'placeholder': 'Choose facets' });
- }
- });
-
- Vue.component('ui-type', {
- props: {
- facet: Object
- },
- created: function created() {
- this.ui_fields = FWP.facet_types[this.facet.type].ui_fields || [];
- this.sorted = Object.keys(this.ui_fields).reverse();
- },
- template: "\n \n {{ 'None' | i18n }} \n {{ FWP.facet_types[name].label }} \n \n "
- });
-
- Vue.component('sort-options', {
- props: {
- facet: Object
- },
- template: "\n \n
\n
\n
\n
\n\n
\n \n \n ID \n {{ 'Post Title' | i18n }} \n {{ 'Post Name' | i18n }} \n {{ 'Post Type' | i18n }} \n {{ 'Post Date' | i18n }} \n {{ 'Post Modified' | i18n }} \n {{ 'Comment Count' | i18n }} \n {{ 'Menu Order' | i18n }} \n post__in \n \n \n {{ label }} \n \n \n \n TEXT \n NUMERIC \n \n \n ASC \n DESC \n \n \n 1\"> \n
\n
\n
\n 0\"> \n \n
\n
\n\n
\n {{ 'Add sort' | i18n }} \n
\n
\n ",
- methods: {
- addSort: function addSort() {
- this.facet.sort_options.push({
- label: 'New option',
- name: 'new_option',
- orderby: [{
- key: 'title',
- order: 'ASC',
- type: 'CHAR'
- }]
- });
- },
- addSortField: function addSortField(opts, index) {
- opts.splice(index + 1, 0, {
- key: 'title',
- order: 'ASC',
- type: 'CHAR'
- });
- },
- moveUp: function moveUp(opts, index) {
- opts.splice(index -1, 0, opts.splice(index, 1)[0]);
- },
- removeItem: function removeItem(row, index) {
- Vue.delete(row, index);
- },
- setName: function setName(row, e) {
- row.name = this.$root.sanitizeName(e.target.innerHTML);
- }
- }
- });
-
- // Vue instance
- FWP.vue = new Vue({
- el: '#app',
- data: {
- app: FWP.data,
- editing: {},
- editing_facet: false,
- editing_template: false,
- row_counts: {},
- active_tab: 'facets',
- active_subnav: 'general',
- is_support_loaded: false,
- is_name_editable: false,
- is_rebuild_open: false,
- is_indexing: false,
- timeout: null
- },
- methods: {
- addItem: function addItem(type) {
- if ('facet' == type) {
- var len = this.app.facets.push({
- 'name': 'new_facet',
- 'label': 'New Facet',
- 'type': 'checkboxes',
- 'source': 'post_type'
- });
- this.editItem('facet', this.app.facets[len-1]);
- }
- else {
- var len$1 = this.app.templates.push({
- 'name': 'new_template',
- 'label': 'New Template',
- 'query': '',
- 'template': ''
- });
- this.editItem('template', this.app.templates[len$1-1]);
- }
- },
- duplicateItem: function duplicateItem(type, index) {
- var facet = this.cloneObj(this.app[type + 's'][index]);
- facet.label += ' (copy)';
- facet.name += '_copy';
-
- this.app[type + 's'].splice(index+1, 0, facet);
- this.editItem(type, facet);
- },
- editItem: function editItem(type, data) {
- this['editing_' + type] = true;
- this.editing = data;
- window.scrollTo(0, 0);
- },
- doneEditing: function doneEditing() {
- this.editing_template = false;
- this.editing_facet = false;
- this.editing = {};
- },
- tabClick: function tabClick(which) {
- this.doneEditing();
- this.active_tab = which;
- if ('support' === which) {
- this.is_support_loaded = true;
- }
- },
- getItemLabel: function getItemLabel() {
- return this.editing.label;
- },
- deleteItem: function deleteItem(type, index) {
- this.app[type + 's'].splice(index, 1);
- },
- saveChanges: function saveChanges() {
- window.setStatus('load', FWP.__('Saving') + '...');
-
- var data = JSON.parse(JSON.stringify(FWP.data));
-
- // Remove code-based facets and templates
- data.facets = data.facets.filter(function (obj) { return 'undefined' === typeof obj['_code']; });
- data.templates = data.templates.filter(function (obj) { return 'undefined' === typeof obj['_code']; });
-
- // Settings save hook
- data = FWP.hooks.applyFilters('facetwp/save_settings', {
- action: 'facetwp_save_settings',
- nonce: FWP.nonce,
- data: data
- });
-
- $.post(ajaxurl, data, {
- done: function (ref) {
- var code = ref.code;
- var message = ref.message;
-
- var code = ('success' == code) ? 'ok' : code;
- window.setStatus(code, message);
- },
- fail: function (err) {
- window.setStatus('error', err);
- }
- });
- },
- rebuildAction: function rebuildAction() {
- this.is_indexing ? this.cancelReindex() : this.rebuildIndex();
- },
- rebuildIndex: function rebuildIndex() {
- var self = this;
-
- if (this.is_indexing) {
- return;
- }
-
- this.is_indexing = true;
-
- $.post(ajaxurl, { action: 'facetwp_rebuild_index', nonce: FWP.nonce });
- window.setStatus('load', FWP.__('Indexing') + '... 0%');
- this.timeout = setTimeout(function () {
- self.getProgress();
- }, 5000);
- },
- cancelReindex: function cancelReindex() {
- var self = this;
-
- $.post(ajaxurl, {
- action: 'facetwp_get_info',
- type: 'cancel_reindex',
- nonce: FWP.nonce
- }, {
- done: function (ref) {
- var message = ref.message;
-
- self.is_indexing = false;
- clearTimeout(self.timeout);
- window.setStatus('error', message);
- }
- });
- },
- getProgress: function getProgress() {
- var self = this;
- var isNumeric = function (obj) { return !Array.isArray(obj) && (obj - parseFloat(obj) + 1) >= 0; };
-
- $.post(ajaxurl, {
- action: 'facetwp_heartbeat',
- nonce: FWP.nonce
- }, {
- done: function (data) {
- if ('-1' == data.pct) {
- self.is_indexing = false;
-
- if (data.rows.length < 1) {
- window.setStatus('error', FWP.__('The index table is empty'));
- }
- else {
- window.setStatus('ok', FWP.__('Indexing complete'));
-
- // Update the row counts
- $.each(data.rows, function(count, facet_name) {
- Vue.set(self.row_counts, facet_name, count);
- });
- }
- }
- else if (isNumeric(data.pct)) {
- window.setStatus('load', FWP.__('Indexing') + '... ' + data.pct + '%');
- self.is_indexing = true;
-
- self.timeout = setTimeout(function () {
- self.getProgress();
- }, 5000);
- }
- else {
- window.setStatus('error', data);
- self.is_indexing = false;
- }
- }
- });
- },
- getInfo: function getInfo(type, label) {
- window.setStatus('load', FWP.__(label) + '...');
-
- $.post(ajaxurl, {
- action: 'facetwp_get_info',
- type: type,
- nonce: FWP.nonce
- }, {
- done: function (ref) {
- var message = ref.message;
-
- window.setStatus('error', message);
- }
- });
- },
- getQueryArgs: function getQueryArgs(template) {
-
- template.modes.query = 'advanced';
- template.query = FWP.__('Loading') + '...';
-
- $.post(ajaxurl, {
- action: 'facetwp_get_query_args',
- query_obj: template.query_obj,
- nonce: FWP.nonce
- }, {
- done: function (message) {
- var json = JSON.stringify(message, null, 2);
- json = "');
- template.query = json;
- }
- });
- },
- showIndexerStats: function showIndexerStats() {
- this.getInfo('indexer_stats', 'Looking');
- },
- searchablePostTypes: function searchablePostTypes() {
- this.getInfo('post_types', 'Looking');
- },
- purgeIndexTable: function purgeIndexTable() {
- this.getInfo('purge_index_table', 'Purging');
- },
- copyToClipboard: function copyToClipboard(name, type, ref) {
- var target = ref.target;
-
- var $this = $(target);
- var $el = $('.facetwp-clipboard');
- var orig_text = $this.text();
-
- try {
- $el.removeClass('hidden');
- $el.val('[facetwp ' + type + '="' + name + '"]');
- $el.nodes[0].select();
- document.execCommand('copy');
- $el.addClass('hidden');
- $this.text(FWP.__('Copied!'));
- }
- catch(err) {
- $this.text(FWP.__('Press CTRL+C to copy'));
- }
-
- window.setTimeout(function () {
- $this.text(orig_text);
- }, 2000);
- },
- activate: function activate() {
- $('.facetwp-activation-status').html(FWP.__('Activating') + '...');
-
- $.post(ajaxurl, {
- action: 'facetwp_license',
- nonce: FWP.nonce,
- license: $('.facetwp-license').val()
- }, {
- done: function (ref) {
- var message = ref.message;
-
- $('.facetwp-activation-status').html(message);
- }
- });
- },
- isNameEditable: function isNameEditable(ref) {
- var name = ref.name;
-
- this.is_name_editable = ('' == name || 'new_' == name.substr(0, 4));
- },
- maybeEditName: function maybeEditName(item) {
- if (this.is_name_editable) {
- item.name = this.sanitizeName(item.label);
- }
- },
- sanitizeName: function sanitizeName(name) {
- var val = name.trim().toLowerCase();
- val = val.replace(/[^\w- ]/g, ''); // strip invalid characters
- val = val.replace(/[- ]/g, '_'); // replace space and hyphen with underscore
- val = val.replace(/[_]{2,}/g, '_'); // strip consecutive underscores
- val = ('pager' == val || 'sort' == val || 'labels' == val) ? val + '_' : val; // reserved
- return val;
- },
- documentClick: function documentClick(ref) {
- var target = ref.target;
-
- var el = target;
-
- if (! el.classList.contains('btn-caret')) {
- this.is_rebuild_open = false;
- }
- },
- cloneObj: function cloneObj(obj) {
- return JSON.parse(JSON.stringify(obj));
- }
- },
- computed: {
- isEditing: function isEditing() {
- return this.editing_facet || this.editing_template;
- },
- indexButtonLabel: function indexButtonLabel() {
- return this.is_indexing ? FWP.__('Stop indexer') : FWP.__('Re-index');
- }
- },
- created: function created() {
- document.addEventListener('click', this.documentClick);
- },
- mounted: function mounted() {
- this.getProgress();
- }
- });
- }
-
- function init_custom_js() {
-
- window.setStatus = function (code, message) {
- $('.facetwp-response').html(message);
- $('.facetwp-response-icon').nodes[0].setAttribute('data-status', code);
-
- if ('error' == code) {
- $('.facetwp-response').addClass('visible');
- }
- };
-
- $().on('click', '.facetwp-settings-section .facetwp-switch', function () {
- window.setStatus('error', 'Press "Save changes" to apply');
- });
-
- $().on('click', '.facetwp-response-wrap', function () {
- $('.facetwp-response').toggleClass('visible');
- });
-
- // Export
- $().on('click', '.export-submit', function () {
- $('.import-code').val(FWP.__('Loading') + '...');
-
- $.post(ajaxurl, {
- action: 'facetwp_backup',
- nonce: FWP.nonce,
- action_type: 'export',
- items: $('.export-items').val()
- }, {
- done: function (resp) {
- $('.import-code').val(JSON.stringify(resp));
- }
- });
- });
-
- // Import
- $().on('click', '.import-submit', function () {
- window.setStatus('load', FWP.__('Importing') + '...');
-
- try {
- var code = JSON.parse($('.import-code').val());
-
- $.post(ajaxurl, {
- action: 'facetwp_backup',
- nonce: FWP.nonce,
- action_type: 'import',
- import_code: code,
- overwrite: $('.import-overwrite').nodes[0].checked ? 1 : 0
- }, {
- dataType: 'text',
- done: function (resp) {
- window.setStatus('ok', resp);
- setTimeout(function () {
- window.location.reload();
- }, 1500);
- }
- });
- }
- catch(err) {
- window.setStatus('error', 'Invalid JSON');
- }
- });
-
- // Initialize tooltips
- $().on('mouseover', '.facetwp-tooltip', function() {
- if (!this.classList.contains('.ftip-enabled')) {
- fTip(this, {
- content: function (node) { return $(node).find('.facetwp-tooltip-content').html(); }
- }).open();
- }
- });
-
- // fSelect
- fSelect('.export-items');
- }
-
- })(fUtil);
-
-})();
diff --git a/wp/wp-content/plugins/facetwp/assets/js/dist/front.min.js b/wp/wp-content/plugins/facetwp/assets/js/dist/front.min.js
deleted file mode 100644
index f8097d24..00000000
--- a/wp/wp-content/plugins/facetwp/assets/js/dist/front.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(){"use strict";var e;window.fUtil=(()=>{class e{constructor(e){if("string"==typeof e||e instanceof String)if(""===(e=e.replace(":selected",":checked")))this.nodes=[];else if(this.isValidSelector(e))this.nodes=Array.from(document.querySelectorAll(e));else{var a=document.createElement("template");a.innerHTML=e,this.nodes=[a.content]}else Array.isArray(e)?this.nodes=e:"object"==typeof e&&e.nodeName?this.nodes=[e]:"function"==typeof e?this.ready(e):e===window?this.nodes=[window]:this.nodes=[document];t.each(t.fn,((e,t)=>{this[t]=e}))}static isset(e){return void 0!==e}static post(e,a,s){(s=Object.assign({},{dataType:"json",contentType:"application/json",headers:{},done:()=>{},fail:()=>{}},s)).headers["Content-Type"]=s.contentType,a="application/json"===s.contentType?JSON.stringify(a):t.toEncoded(a),fetch(e,{method:"POST",headers:s.headers,body:a}).then((e=>e[s.dataType]())).then((e=>s.done(e))).catch((e=>s.fail(e)))}static toEncoded(e,a,s){s=s||[],a=a||"";return Array.isArray(e)?e.length?e.forEach((e=>{t.toEncoded(e,a+"[]",s)})):t.toEncoded("",a,s):"object"==typeof e&&null!==e?Object.keys(e).forEach((n=>{var o=a?a+"["+n+"]":n;t.toEncoded(e[n],o,s)})):s.push(encodeURIComponent(a)+"="+encodeURIComponent(e)),s.join("&")}static forEach(e,t){return"object"==typeof e&&null!==e&&(Array.isArray(e)?e.forEach(((e,a)=>t.bind(e)(e,a))):Object.keys(e).forEach((a=>{var s=e[a];t.bind(s)(s,a)}))),e}isValidSelector(e){try{document.createDocumentFragment().querySelector(e)}catch(e){return!1}return!0}clone(){return t(this.nodes)}len(){return this.nodes.length}each(e){return this.nodes.forEach(((t,a)=>{e.bind(t)(t,a)})),this}ready(e){if("function"==typeof e)return"complete"===document.readyState?e():void document.addEventListener("DOMContentLoaded",e,!1)}addClass(e){return this.each((t=>t.classList.add(e))),this}removeClass(e){return this.each((t=>t.classList.remove(e))),this}hasClass(e){return t.isset(this.nodes.find((t=>t.classList.contains(e))))}toggleClass(e){return this.each((t=>t.classList.toggle(e))),this}is(e){for(let t=0;t{t=t.concat(Array.from(a.querySelectorAll(e)))})),a.nodes=t,a}first(){let e=this.clone();return e.len()&&(e.nodes=this.nodes.slice(0,1)),e}last(){let e=this.clone();return e.len()&&(e.nodes=this.nodes.slice(-1)),e}prev(e){let a=[],s=this.clone();return s.each((s=>{let n=s.previousElementSibling;for(;n&&t.isset(e)&&!n.matches(e);)n=n.previousElementSibling;n&&a.push(n)})),s.nodes=a,s}next(e){let a=[],s=this.clone();return s.each((s=>{let n=s.nextElementSibling;for(;n&&t.isset(e)&&!n.matches(e);)n=n.nextElementSibling;n&&a.push(n)})),s.nodes=a,s}prepend(e){return this.each((t=>t.insertAdjacentHTML("afterbegin",e))),this}append(e){return this.each((t=>t.insertAdjacentHTML("beforeend",e))),this}parents(e){let t=[],a=this.clone();return a.each((a=>{let s=a.parentNode;for(;s&&s!==document;)s.matches(e)&&t.push(s),s=s.parentNode})),a.nodes=[...new Set(t)],a}closest(e){let t=[],a=this.clone();return a.each((a=>{let s=a.closest(e);s&&t.push(s)})),a.nodes=t,a}remove(){return this.each((e=>e.remove())),this}on(e,a,s){if(t.isset(a)){if(!t.isset(s))s=a,a=null;var n=e=>{if(null===a||e.target.matches(a))s.bind(e.target)(e);else if(e.target.closest(a)){var t=e.target.closest(a);s.bind(t)(e)}};return this.each((o=>{t.isset(o._id)||(o._id=t.event.count,t.event.store[t.event.count]=o,t.event.count++);var c=o._id;n._str=s.toString(),t.isset(t.event.map[c])||(t.event.map[c]={}),t.isset(t.event.map[c][e])||(t.event.map[c][e]={}),t.isset(t.event.map[c][e][a])||(t.event.map[c][e][a]=[]);let i=t.event.map[c][e][a].push(n);o.addEventListener(e,t.event.map[c][e][a][i-1])})),this}}off(e,a,s){if(!t.isset(s))s=a,a=null;return this.each((n=>{var o=n._id;t.each(t.event.map[o],((c,i)=>{t.each(c,((c,r)=>{t.each(c,((c,l)=>{e&&i!==e||a&&r!==a||s&&c._str!==s.toString()||(n.removeEventListener(i,t.event.map[o][i][r][l]),delete t.event.map[o][i][r][l])}))}))}))})),this}trigger(e,t){return this.each((a=>a.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0})))),this}attr(e,a){return t.isset(a)?(this.each((t=>t.setAttribute(e,a))),this):this.len()?this.nodes[0].getAttribute(e):null}data(e,a){return t.isset(a)?(this.each((t=>t._fdata[e]=a)),this):this.len()?this.nodes[0]._fdata[e]:null}html(e){return t.isset(e)?(this.each((t=>t.innerHTML=e)),this):this.len()?this.nodes[0].innerHTML:null}text(e){return t.isset(e)?(this.each((t=>t.textContent=e)),this):this.len()?this.nodes[0].textContent:null}val(e){if(t.isset(e))return this.each((t=>t.value=e)),this;if(this.len()){var a=this.nodes[0];return"select"===a.nodeName.toLowerCase()&&a.multiple?[...a.options].filter((e=>e.selected)).map((e=>e.value)):a.value}return null}}var t=t=>new e(t);return t.fn={},t.post=e.post,t.isset=e.isset,t.each=e.forEach,t.toEncoded=e.toEncoded,t.event={map:{},store:[],count:0},t})(),(e=window).FWP=e.FWP||{},e.FWP.hooks=e.FWP.hooks||new function(){function e(e,t,a,s){var n,c,i;if(o[e][t])if(a)if(n=o[e][t],s)for(i=n.length;i--;)(c=n[i]).callback===a&&c.context===s&&n.splice(i,1);else for(i=n.length;i--;)n[i].callback===a&&n.splice(i,1);else o[e][t]=[]}function t(e,t,a,s,n){var c={callback:a,priority:s,context:n},i=o[e][t];i?(i.push(c),i=function(e){for(var t,a,s,n=1,o=e.length;nt.priority;)e[a]=e[a-1],--a;e[a]=t}return e}(i)):i=[c],o[e][t]=i}function a(e,t,a){var s,n,c=o[e][t];if(!c)return"filters"===e&&a[0];if(n=c.length,"filters"===e)for(s=0;s{class t{constructor(){this.import(),this.bindEvents()}import(){"undefined"!=typeof FWP&&e.each(FWP,((e,t)=>this[t]=e))}init(){var t=this;if(this.setDefaults(),00)){var a=t.helper.detectLoop(document.body);if(!a)return;e(a).addClass("facetwp-template")}var s=e(".facetwp-template").first();t.template=s.attr("data-name")?s.attr("data-name"):"wp",s.find(".facetwp-facet").len()>0&&console.error('Facets should not be inside the "facetwp-template" container'),t.hooks.doAction("facetwp/ready"),t.extras.selections&&t.hooks.addAction("facetwp/loaded",(()=>{var a="",s=["pager","reset","sort"];e.each(t.facets,((n,o)=>{if(n.length<1||!e.isset(t.settings.labels[o])||s.includes(t.facet_type[o]))return!0;var c=n,i=e(".facetwp-facet-"+o),r=i.attr("data-ui")||i.attr("data-type");(c=t.hooks.applyFilters("facetwp/selections/"+r,c,{el:i,selected_values:c})).length&&("string"==typeof c?c=[{value:"",label:c}]:e.isset(c[0].label)||(c=[{value:"",label:c[0]}]));var l="";e.each(c,(e=>{l+=''+t.helper.escapeHtml(e.label)+" "})),a+=''+t.settings.labels[o]+": "+l+" "})),""!==a&&(a=""),e(".facetwp-selections").html(a)})),t.refresh()}setDefaults(){let t={facets:{},template:null,settings:{},is_reset:!1,is_refresh:!1,is_bfcache:!1,is_hash_click:!1,is_load_more:!1,auto_refresh:!0,soft_refresh:!1,frozen_facets:{},active_facet:null,facet_type:{},loaded:!1,extras:{},paged:1};for(var a in t)e.isset(this[a])||(this[a]=t[a])}refresh(){FWP.is_refresh=!0,FWP.toggleOverlay("on"),FWP.is_reset||FWP.parseFacets(),FWP.loaded||FWP.loadFromHash(),e().trigger("facetwp-refresh"),!FWP.loaded||FWP.is_popstate||FWP.is_load_more||FWP.setHash(),FWP.loaded||FWP.is_bfcache||!e.isset(FWP_JSON.preload_data)?FWP.fetchData():FWP.render(FWP_JSON.preload_data),e.each(FWP.frozen_facets,((e,t)=>{"hard"!==e&&delete FWP.frozen_facets[t]})),FWP.paged=1,FWP.soft_refresh=!1,FWP.is_refresh=!1,FWP.is_reset=!1}autoload(){FWP.auto_refresh&&!FWP.is_refresh&&FWP.refresh()}parseFacets(){FWP.facets={},e(".facetwp-facet").each((function(){var t=e(this),a=t.attr("data-name"),s=t.attr("data-type"),n=t.hasClass("facetwp-ignore");null!==t.attr("data-ui")&&(s=t.attr("data-ui")),FWP.facet_type[a]=s,n||FWP.hooks.doAction("facetwp/refresh/"+s,t,a)}))}buildQueryString(){var t="",a=[],s=window.location.search.replace("?","").split("&");e.each(s,(e=>{0!==e.split("=")[0].indexOf(FWP_JSON.prefix)&&a.push(e)})),a=a.join("&");var n=Object.assign({},FWP.facets);return 1{var t=e.split("=");""!=t[0]&&(FWP_HTTP.get[t[0]]=t[1])}))}loadFromHash(){var t=[],a=window.location.search.replace("?","").split("&");e.each(a,(e=>{0===e.split("=")[0].indexOf(FWP_JSON.prefix)&&t.push(e.replace(FWP_JSON.prefix,""))})),t=t.join("&"),e.each(FWP.facets,((e,t)=>{FWP.facets[t]=[]})),FWP.paged=1,FWP.extras.sort="default",""!==t&&(t=t.split("&"),e.each(t,(t=>{var a=t.split("=")[0],s=t.split("=")[1];if("paged"===a)FWP.paged=s;else if("per_page"===a||"sort"===a)FWP.extras[a]=s;else if(""!==s){var n=e.isset(FWP.facet_type[a])?FWP.facet_type[a]:"";FWP.facets[a]="search"===n||"autocomplete"===n?decodeURIComponent(s):decodeURIComponent(s).split(",")}})))}buildPostData(){return{facets:FWP.facets,frozen_facets:FWP.frozen_facets,http_params:FWP_HTTP,template:FWP.template,extras:FWP.extras,soft_refresh:FWP.soft_refresh?1:0,is_bfcache:FWP.is_bfcache?1:0,first_load:FWP.loaded?0:1,paged:FWP.paged}}fetchData(){var t="wp"===FWP.template?document.URL:FWP_JSON.ajaxurl,a={action:"facetwp_refresh",data:FWP.buildPostData()},s={dataType:"text",done:t=>{try{var a=JSON.parse(t);FWP.render(a)}catch(n){var s=t.indexOf('{"facets');if(-1{console.log(e)}};s=FWP.hooks.applyFilters("facetwp/ajax_settings",s),e.post(t,a,s)}render(t){if(FWP.response=t,"wp"!==FWP.template&&""!==t.template||FWP.loaded||FWP.is_bfcache){o=t.template;if("wp"===FWP.template){var a=e(t.template),s=a.find(".facetwp-template");if(s.len()<1){var n=FWP.helper.detectLoop(a.nodes[0]);n&&(s=e(n).addClass("facetwp-template"))}if(s.len()>0)o=s.html();else o=FWP_JSON.no_results_text}}else var o=!1;!1!==o&&(FWP.hooks.applyFilters("facetwp/template_html",!1,{response:t,html:o})||e(".facetwp-template").html(o)),e.each(t.facets,((t,a)=>{e(".facetwp-facet-"+a).html(t)})),e.isset(t.counts)&&e(".facetwp-counts").html(t.counts),e.isset(t.pager)&&e(".facetwp-pager").html(t.pager),e.isset(t.per_page)&&(e(".facetwp-per-page").html(t.per_page),"default"!==FWP.extras.per_page&&e(".facetwp-per-page-select").val(FWP.extras.per_page)),e.isset(t.sort)&&(e(".facetwp-sort").html(t.sort),e(".facetwp-sort-select").val(FWP.extras.sort)),e.each(t.settings,((e,t)=>{FWP.settings[t]=e})),"function"==typeof WPPlaylistView&&e(".facetwp-template .wp-playlist").each((e=>new WPPlaylistView({el:e}))),e().trigger("facetwp-loaded"),FWP.hooks.doAction("facetwp/loaded"),FWP.toggleOverlay("off"),FWP.active_facet=null,FWP.is_bfcache=!0,FWP.loaded=!0}reset(t){FWP.parseFacets();var a={};"string"==typeof t?a[t]="":Array.isArray(t)?e.each(t,(e=>{a[e]=""})):"object"==typeof t&&t&&(a=t);var s=Object.keys(a).length<1;e.each(FWP.facets,((t,n)=>{var o=e.isset(a[n]),c=Array.isArray(t)?t:[t];if(o&&-1{FWP.is_bfcache&&(FWP.loaded=!1),!FWP.loaded&&!FWP.is_bfcache||FWP.is_refresh||FWP.is_hash_click||(FWP.is_popstate=!0,FWP.refresh(),FWP.is_popstate=!1),FWP.is_hash_click=!1})),e().on("click",'a[href^="#"]',(()=>{FWP.is_hash_click=!0})),e().on("click",".facetwp-selections .facetwp-selection-value",(function(){if(!FWP.is_refresh){var t=e(this).closest("li").attr("data-facet"),a=e(this).attr("data-value");if(""!=a){var s={};s[t]=a,FWP.reset(s)}else FWP.reset(t)}})),e().on("click",".facetwp-page[data-page]",(function(){e(".facetwp-page").removeClass("active"),e(this).addClass("active"),FWP.paged=e(this).attr("data-page"),FWP.soft_refresh=!0,FWP.refresh()}));var t="function"==typeof jQuery?jQuery:fUtil;t(document).on("change",".facetwp-per-page-select",(function(){FWP.extras.per_page=e(this).val(),FWP.soft_refresh=!0,FWP.autoload()})),t(document).on("change",".facetwp-sort-select",(function(){FWP.extras.sort=e(this).val(),FWP.soft_refresh=!0,FWP.autoload()})),t((()=>{this.init()}))}}return t.prototype.helper={getUrlVar:e=>{e=FWP_JSON.prefix+e;for(var t=window.location.search.replace("?","").split("&"),a=0;a{var a;return function(...s){var n=e.bind(this,...s);clearTimeout(a),a=setTimeout(n,t)}},serialize:(t,a)=>{var s=[];a=e.isset(a)?a:"";for(var n in t)""!=t[n]&&s.push(a+encodeURIComponent(n)+"="+encodeURIComponent(t[n]));return s.join("&")},escapeHtml:e=>{var t={"&":"&","<":"<",">":">",'"':""","'":"'"};return e.replace(/[&<>"']/g,(e=>t[e])).trim()},detectLoop:e=>{for(var t=null,a=document.createNodeIterator(e,NodeFilter.SHOW_COMMENT,(()=>NodeFilter.FILTER_ACCEPT),!1);t=a.nextNode();)if(8===t.nodeType&&"fwp-loop"===t.nodeValue)return t.parentNode;return!1}},new t})(fUtil),function(e){function t(t){let a=e(t);return a.val()===a.attr("placeholder")?"":a.val()}FWP.logic=FWP.logic||{},e(".facetwp-facet").each((function(){this.addEventListener("click",(function(){var t=e(".facetwp-facet-"+e(this).attr("data-name"));1e.post(s,{action:"facetwp_autocomplete_load",facet_name:a,query:t.value,data:FWP.buildPostData()},{done:e=>{this.fcomplete.render(e)}}),n.onSelect=()=>FWP.autoload(),fComplete(t,n)}))})),e().on("keyup",".facetwp-autocomplete",(function(e){13!==e.which||FWP.is_refresh||FWP.autoload()})),e().on("click",".facetwp-autocomplete-update",(function(){FWP.autoload()})),FWP.hooks.addAction("facetwp/refresh/checkboxes",(function(t,a){var s=[];t.find(".facetwp-checkbox.checked").each((function(){s.push(e(this).attr("data-value"))})),FWP.facets[a]=s})),FWP.hooks.addFilter("facetwp/selections/checkboxes",(function(t,a){var s=[];return e.each(a.selected_values,(function(t){var n=a.el.find('.facetwp-checkbox[data-value="'+t+'"]');if(n.len()){var o=e(n.html());o.find(".facetwp-counter").remove(),o.find(".facetwp-expand").remove(),s.push({value:t,label:o.text()})}})),s})),e().on("click",".facetwp-type-checkboxes .facetwp-expand",(function(t){var a=e(this).closest(".facetwp-checkbox").next(".facetwp-depth");a.toggleClass("visible");var s=a.hasClass("visible")?FWP_JSON.collapse:FWP_JSON.expand;e(this).html(s),t.stopImmediatePropagation()})),e().on("click",".facetwp-type-checkboxes .facetwp-checkbox:not(.disabled)",(function(){var t=e(this),a=!t.hasClass("checked"),s=t.closest(".facetwp-depth").len()>0;t.next().hasClass("facetwp-depth")&&t.next(".facetwp-depth").find(".facetwp-checkbox").removeClass("checked"),s&&t.parents(".facetwp-depth").each((function(){e(this).prev(".facetwp-checkbox").removeClass("checked")})),t.toggleClass("checked",a),FWP.autoload()})),e().on("click",".facetwp-type-checkboxes .facetwp-toggle",(function(){var t=e(this).closest(".facetwp-facet");t.find(".facetwp-toggle").toggleClass("facetwp-hidden"),t.find(".facetwp-overflow").toggleClass("facetwp-hidden")})),e().on("facetwp-loaded",(function(){e(".facetwp-type-checkboxes .facetwp-overflow").each((function(){var t=e(this).find(".facetwp-checkbox").len(),a=e(this).next(".facetwp-toggle");a.text(a.text().replace("{num}",t)),0t.find(".facetwp-expand").len()&&(t.find(".facetwp-checkbox.checked").each((function(){e(this).parents(".facetwp-depth").addClass("visible")})),t.find(".facetwp-depth").each((function(){var t=e(this).hasClass("visible")?"collapse":"expand";e(this).prev(".facetwp-checkbox").append(' '+FWP_JSON[t]+" ")}))))}))})),FWP.hooks.addAction("facetwp/refresh/radio",(function(t,a){var s=[];t.find(".facetwp-radio.checked").each((function(){var t=e(this).attr("data-value");""!==t&&s.push(t)})),FWP.facets[a]=s})),FWP.hooks.addFilter("facetwp/selections/radio",(function(t,a){var s=[];return e.each(a.selected_values,(function(t){var n=a.el.find('.facetwp-radio[data-value="'+t+'"]');if(n.len()){var o=e(n.html());o.find(".facetwp-counter").remove(),s.push({value:t,label:o.text()})}})),s})),e().on("click",".facetwp-type-radio .facetwp-radio:not(.disabled)",(function(){var t=e(this).hasClass("checked");e(this).closest(".facetwp-facet").find(".facetwp-radio").removeClass("checked"),t||e(this).addClass("checked"),FWP.autoload()})),FWP.hooks.addAction("facetwp/refresh/date_range",(function(e,a){var s=e.find(".facetwp-date-min"),n=e.find(".facetwp-date-max"),o=s.len()?t(s.nodes[0]):"",c=n.len()?t(n.nodes[0]):"";FWP.facets[a]=""!==o||""!==c?[o,c]:[]})),FWP.hooks.addFilter("facetwp/selections/date_range",(function(e,t){var a=t.el,s=t.selected_values,n=a.attr("data-name"),o=FWP.settings[n].fields,c="";return"exact"==o?""!==s[0]&&(c=s[0]):"start_date"==o?""!==s[0]&&(c="[>=] "+s[0]):"end_date"==o?""!==s[1]&&(c="[<=] "+s[1]):"both"==o&&(""===s[0]&&""===s[1]||(""!==s[0]&&""!==s[1]?c=s[0]+" - "+s[1]:""!==s[0]?c="[>=] "+s[0]:""!==s[1]&&(c="[<=] "+s[1]))),c})),e().on("facetwp-loaded",(function(){var t=e(".facetwp-type-date_range .facetwp-date:not(.ready)");0!==t.len()&&t.each((function(){var t=e(this),a=t.closest(".facetwp-facet").attr("data-name"),s=FWP.settings[a],n={onChange:function(e){FWP.autoload()}};if(""!==s.locale&&(n.i18n=s.locale),""!==s.format&&(n.altFormat=s.format),"both"==s.fields){var o=t.hasClass("facetwp-date-min")?"min":"max";n.minDate=s.range[o].minDate,n.maxDate=s.range[o].maxDate}else n.minDate=s.range.minDate,n.maxDate=s.range.maxDate;n=FWP.hooks.applyFilters("facetwp/set_options/date_range",n,{facet_name:a,element:t}),t.addClass("ready"),new fDate(this,n)}))})),FWP.hooks.addAction("facetwp/refresh/dropdown",(function(e,t){var a=e.find(".facetwp-dropdown").val();FWP.facets[t]=a?[a]:[]})),FWP.hooks.addFilter("facetwp/selections/dropdown",(function(e,t){var a=t.el.find(".facetwp-dropdown");if(a.len()){var s=a.nodes[0];return s.options[s.selectedIndex].text.replace(/\(\d+\)$/,"")}return""})),("function"==typeof jQuery?jQuery:fUtil)(document).on("change",".facetwp-type-dropdown select",(function(){var t=e(this).closest(".facetwp-facet").attr("data-name");""!==e(this).val()&&(FWP.frozen_facets[t]="soft"),FWP.autoload()})),FWP.hooks.addAction("facetwp/refresh/fselect",(function(e,t){var a=e.find("select").val();null!==a&&""!==a||(a=[]),FWP.facets[t]=Array.isArray(a)?a:[a]})),FWP.hooks.addFilter("facetwp/selections/fselect",(function(t,a){var s=[];return e.each(a.selected_values,(e=>{var t=a.el.find('option[value="'+e+'"]');t.len()&&s.push({value:e,label:t.text()})})),s})),FWP.hooks.addAction("facetwp/loaded",(function(){if(null!==FWP.active_facet){var e=FWP.active_facet;if("fselect"==e.attr("data-type")){var t=e.find(".facetwp-dropdown").nodes[0];t.fselect.settings.multiple&&t.fselect.open()}}})),e().on("facetwp-loaded",(function(){e(".facetwp-type-fselect select:not(.fs-hidden)").each((function(){var t=e(this).closest(".facetwp-facet").attr("data-name"),a=FWP.settings[t];a.optionFormatter=function(e,t){var a=t.getAttribute("data-counter");return a?e+" ("+a+")":e};var s=FWP.hooks.applyFilters("facetwp/set_options/fselect",a,{facet_name:t});fSelect(this,s)}))})),e().on("fs:changed",(function(t){var a=e(t.detail[0]).closest(".facetwp-type-fselect").len()>0;!FWP.is_refresh&&a&&FWP.autoload()})),e().on("fs:closed",(function(){FWP.active_facet=null})),FWP.hooks.addAction("facetwp/refresh/hierarchy",(function(t,a){var s=[];t.find(".facetwp-link.checked").each((function(){s.push(e(this).attr("data-value"))})),FWP.facets[a]=s})),FWP.hooks.addFilter("facetwp/selections/hierarchy",(function(e,t){var a=t.el.find(".facetwp-link.checked");return a.len()?a.text():""})),e().on("click",".facetwp-type-hierarchy .facetwp-link",(function(){e(this).closest(".facetwp-facet").find(".facetwp-link").removeClass("checked"),""!==e(this).attr("data-value")&&e(this).addClass("checked"),FWP.autoload()})),e().on("click",".facetwp-type-hierarchy .facetwp-toggle",(function(){var t=e(this).closest(".facetwp-facet");t.find(".facetwp-toggle").toggleClass("facetwp-hidden"),t.find(".facetwp-overflow").toggleClass("facetwp-hidden")})),FWP.hooks.addAction("facetwp/refresh/number_range",(function(e,t){var a=e.find(".facetwp-number-min").val()||"",s=e.find(".facetwp-number-max").val()||"";FWP.facets[t]=""!==a||""!==s?[a,s]:[]})),FWP.hooks.addFilter("facetwp/selections/number_range",(function(e,t){var a=t.el,s=t.selected_values,n=a.attr("data-name"),o=FWP.settings[n].fields,c="";return"exact"==o?""!==s[0]&&(c=s[0]):"min"==o?""!==s[0]&&(c="[>=] "+s[0]):"max"==o?""!==s[1]&&(c="[<=] "+s[1]):"both"==o&&(""===s[0]&&""===s[1]||(""!==s[0]&&""!==s[1]?c=s[0]+" - "+s[1]:""!==s[0]?c="[>=] "+s[0]:""!==s[1]&&(c="[<=] "+s[1]))),c})),e().on("keyup",".facetwp-type-number_range .facetwp-number",(function(e){13!==e.which||FWP.is_refresh||FWP.autoload()})),e().on("click",".facetwp-type-number_range .facetwp-submit",(function(){FWP.refresh()})),e().on("facetwp-loaded",(function(){var t=e(".facetwp-location");t.len()<1||(FWP.loaded||(window.FWP_MAP=window.FWP_MAP||{},FWP_MAP.sessionToken=new google.maps.places.AutocompleteSessionToken,FWP_MAP.autocompleteService=new google.maps.places.AutocompleteService,FWP_MAP.placesService=new google.maps.places.PlacesService(document.createElement("div")),e().on("input",".facetwp-location",FWP.helper.debounce((function(t){var a=e(t.target).val(),s=e(t.target).closest(".facetwp-facet");if(""==a||a.length',a+=''+e.structured_formatting.main_text+" ",a+=''+e.structured_formatting.secondary_text+" ",a+=''+e.description+" ",a+=""})),a+='',s.find(".location-results").html(a).removeClass("facetwp-hidden")}}))}}),FWP_JSON.proximity.queryDelay))),t.each((function(t,a){e(this).trigger("keyup")})))})),e().on("click",".location-result",(function(){var t=e(this).closest(".facetwp-facet"),a=e(this).attr("data-id"),s=e(this).find(".result-description").text();FWP_MAP.placesService.getDetails({placeId:a,fields:["geometry"]},(function(e,a){a===google.maps.places.PlacesServiceStatus.OK&&(t.find(".facetwp-lat").val(e.geometry.location.lat()),t.find(".facetwp-lng").val(e.geometry.location.lng()),FWP.autoload())})),e(".facetwp-location").val(s),e(".location-results").addClass("facetwp-hidden")})),e().on("click",".facetwp-type-proximity .locate-me",(function(t){var a=e(this),s=a.closest(".facetwp-facet"),n=s.find(".facetwp-location"),o=s.find(".facetwp-lat"),c=s.find(".facetwp-lng");if(a.hasClass("f-reset"))return o.val(""),c.val(""),n.val(""),void FWP.autoload();a.addClass("f-loading"),navigator.geolocation.getCurrentPosition((function(e){var t=e.coords.latitude,i=e.coords.longitude;o.val(t),c.val(i);var r=new google.maps.Geocoder,l={lat:parseFloat(t),lng:parseFloat(i)};r.geocode({location:l},(function(e,t){t===google.maps.GeocoderStatus.OK?n.val(e[0].formatted_address):n.val("Your location"),a.addClass("f-reset"),FWP.autoload()})),a.removeClass("f-loading"),FWP.hooks.doAction("facetwp/geolocation/success",{facet:s,position:e})}),(function(e){a.removeClass("f-loading"),FWP.hooks.doAction("facetwp/geolocation/error",{facet:s,error:e})}))})),e().on("keyup",".facetwp-location",(function(t){var a=e(this).closest(".facetwp-facet"),s=""!==e(this).val()?"addClass":"removeClass";if(a.find(".locate-me")[s]("f-reset"),38===t.which||40===t.which||13===t.which)var n=parseInt(a.find(".location-result.active").attr("data-index")),o=parseInt(a.find(".location-result").last().attr("data-index"));if(38===t.which){var c=0e.removeAttribute("disabled")))})),FWP.hooks.addAction("facetwp/set_label/slider",(function(e){var t=e.attr("data-name"),a=FWP.settings[t].lower,s=FWP.settings[t].upper,n=FWP.settings[t].format,o={decimal_separator:FWP.settings[t].decimal_separator,thousands_separator:FWP.settings[t].thousands_separator},c=FWP.settings[t].prefix,i=FWP.settings[t].suffix;if(a===s)var r=c+nummy(a).format(n,o)+i;else r=c+nummy(a).format(n,o)+i+" — "+c+nummy(s).format(n,o)+i;e.find(".facetwp-slider-label").html(r)})),FWP.hooks.addFilter("facetwp/selections/slider",(function(e,t){var a=t.el.find(".facetwp-slider-label");return a.len()?a.text():""})),e().on("facetwp-loaded",(function(){e(".facetwp-type-slider .facetwp-slider").each((function(){var t=e(this),a=t.closest(".facetwp-facet"),s=a.attr("data-name"),n=FWP.settings[s],o=FWP.hooks.applyFilters("facetwp/set_options/slider",{range:n.range,start:n.start,step:parseFloat(n.step),connect:!0},{facet_name:s});if(t.hasClass("ready"))t.nodes[0].noUiSlider.updateOptions({range:o.range},!1);else{if(void 0!==this.noUiSlider)return;if(null===o.start[0])return;if(parseFloat(n.range.min)>parseFloat(n.range.max))return FWP.settings[s].lower=n.range.min,FWP.settings[s].upper=n.range.max,void FWP.hooks.doAction("facetwp/set_label/slider",a);parseFloat(n.range.min)==parseFloat(n.range.max)&&t.attr("data-disabled","true");var c=this;noUiSlider.create(c,o),c.noUiSlider.on("update",(function(e,t){FWP.settings[s].lower=e[0],FWP.settings[s].upper=e[1],FWP.hooks.doAction("facetwp/set_label/slider",a)})),c.noUiSlider.on("set",(function(){FWP.active_facet=t.closest(".facetwp-facet"),FWP.autoload()})),t.addClass("ready")}})),e(".facetwp-type-slider").each((function(){var t=e(this).attr("data-name");e(this).find(".facetwp-slider-reset")[FWP.facets[t].length?"removeClass":"addClass"]("facetwp-hidden")}))})),e().on("click",".facetwp-type-slider .facetwp-slider-reset",(function(){var t=e(this).closest(".facetwp-facet").attr("data-name");FWP.reset(t)})),FWP.hooks.addAction("facetwp/refresh/rating",(function(t,a){var s=[];t.find(".facetwp-star.selected").each((function(){var t=e(this).attr("data-value");""!=t&&s.push(t)})),FWP.facets[a]=s})),e().on("mouseover",".facetwp-star",(function(){var t=e(this).closest(".facetwp-facet");if(e(this).hasClass("selected"))t.find(".facetwp-star-label").text(FWP_JSON.rating.Undo);else{var a="5"==e(this).attr("data-value")?"":FWP_JSON.rating["& up"];t.find(".facetwp-star-label").text(a),t.find(".facetwp-counter").text("("+e(this).attr("data-counter")+")")}})),e().on("mouseout",".facetwp-star",(function(){var t=e(this).closest(".facetwp-facet");t.find(".facetwp-star-label").text(""),t.find(".facetwp-counter").text("")})),e().on("click",".facetwp-star",(function(){var t=e(this).closest(".facetwp-facet"),a=e(this).hasClass("selected");t.find(".facetwp-star").removeClass("selected"),a||e(this).addClass("selected"),FWP.autoload()})),FWP.hooks.addAction("facetwp/refresh/sort",(function(e,t){var a=e.find("select").val();FWP.facets[t]=a?[a]:[]})),e().on("change",".facetwp-type-sort select",(function(){var t=e(this).closest(".facetwp-facet").attr("data-name");""!==e(this).val()&&(FWP.frozen_facets[t]="hard"),FWP.autoload()})),FWP.hooks.addAction("facetwp/refresh/pager",(function(e,t){FWP.facets[t]=[]})),FWP.hooks.addFilter("facetwp/template_html",(function(t,a){if(FWP.is_load_more){if(FWP.is_load_more=!1,0!s.includes(e)))),t.nodes[0]._facets=s})),e(".facetwp-hide-empty").each((function(){let t=e(this),a=t.closest(".facetwp-facet");t.nodes[0]._facets.every((e=>FWP.facets[e].length<1))?a.addClass("facetwp-hidden"):a.removeClass("facetwp-hidden")}))}))}(fUtil)}();
diff --git a/wp/wp-content/plugins/facetwp/assets/js/src/accessibility.js b/wp/wp-content/plugins/facetwp/assets/js/src/accessibility.js
deleted file mode 100644
index 74f70c2f..00000000
--- a/wp/wp-content/plugins/facetwp/assets/js/src/accessibility.js
+++ /dev/null
@@ -1,104 +0,0 @@
-(function($) {
- var last_checked = null;
-
- if ('undefined' !== typeof FWP.hooks) {
- FWP.hooks.addAction('facetwp/loaded', function() {
-
- // checkbox, radio, fselect
- $('.facetwp-checkbox, .facetwp-radio, .fs-option').each(function() {
- let $el = $(this);
- if (! $el.hasClass('disabled')) {
- $el.attr('role', 'checkbox');
- $el.attr('aria-checked', $el.hasClass('checked') ? 'true' : 'false');
- $el.attr('aria-label', $el.text());
- $el.attr('tabindex', 0);
- }
- });
-
- // pager, show more, user selections, hierarchy
- $('.facetwp-page, .facetwp-toggle, .facetwp-selection-value, .facetwp-link').each(function() {
- let $el = $(this);
- let label = $el.text();
-
- if ($el.hasClass('facetwp-page')) {
- label = FWP_JSON.a11y.label_page + ' ' + label;
-
- if ($el.hasClass('next')) {
- label = FWP_JSON.a11y.label_page_next;
- }
- else if ($el.hasClass('prev')) {
- label = FWP_JSON.a11y.label_page_prev;
- }
- }
-
- $el.attr('role', 'link');
- $el.attr('aria-label', label);
- $el.attr('tabindex', 0);
- });
-
- // dropdown, sort facet, old sort feature
- $('.facetwp-type-dropdown select, .facetwp-type-sort select, .facetwp-sort-select select').each(function() {
- $(this).attr('aria-label', $(this).find('option:selected').text());
- });
-
- // search, date
- $('.facetwp-search, .facetwp-date').each(function() {
- $(this).attr('aria-label', $(this).attr('placeholder'));
- });
-
- // checkbox group
- $('.facetwp-type-checkboxes').each(function() {
- let facet_name = $(this).attr('data-name');
- $(this).attr('aria-label', FWP.settings.labels[facet_name]);
- $(this).attr('role', 'group');
- });
-
- // fselect
- $('.fs-wrap').each(function() {
- $(this).attr('role', 'button');
- $(this).attr('aria-haspopup', 'true');
- $(this).attr('aria-expanded', $(this).hasClass('fs-open') ? 'true' : 'false');
- });
-
- $('.facetwp-type-fselect .facetwp-dropdown').attr('aria-hidden', 'true');
-
- // pager
- $('.facetwp-pager').attr('role', 'navigation');
- $('.facetwp-page.active').attr('aria-current', 'true');
-
- // focus on selection
- if (null != last_checked) {
- var $el = $('.facetwp-facet [data-value="' + last_checked + '"]');
- if ($el.len()) {
- $el.nodes[0].focus();
- }
- last_checked = null;
- }
- }, 999);
- }
-
- // keyboard support
- $().on('keydown', '.facetwp-checkbox, .facetwp-radio, .facetwp-link', function(e) {
- if (32 == e.keyCode || 13 == e.keyCode) {
- last_checked = $(this).attr('data-value');
- e.preventDefault();
- this.click();
- }
- });
-
- $().on('keydown', '.facetwp-page, .facetwp-toggle, .facetwp-selection-value', function(e) {
- if (32 == e.keyCode || 13 == e.keyCode) {
- e.preventDefault();
- this.click();
- }
- });
-
- // fselect - determine "aria-expanded"
- function toggleExpanded(e) {
- var $fs = $(e.detail[0]);
- $fs.attr('aria-expanded', $fs.hasClass('fs-open') ? 'true' : 'false');
- }
-
- $().on('fs:opened', toggleExpanded);
- $().on('fs:closed', toggleExpanded);
-})(fUtil);
\ No newline at end of file
diff --git a/wp/wp-content/plugins/facetwp/assets/js/src/admin.js b/wp/wp-content/plugins/facetwp/assets/js/src/admin.js
deleted file mode 100644
index 47b5abd8..00000000
--- a/wp/wp-content/plugins/facetwp/assets/js/src/admin.js
+++ /dev/null
@@ -1,2189 +0,0 @@
-(($) => {
-
- $(() => {
- init_vue();
- init_custom_js();
- });
-
- function init_vue() {
-
- Vue.config.devtools = true;
-
- Vue.component('v-select', VueSelect.VueSelect);
-
- Vue.filter('i18n', str => FWP.__(str));
-
- // Defaults mixin
- const builder_defaults = {
- methods: {
- defaultLayout() {
- return {
- items: [this.defaultRow()],
- settings: this.getDefaultSettings('layout')
- };
- },
- defaultRow() {
- return {
- type: 'row',
- items: [this.defaultCol()],
- settings: this.getDefaultSettings('row')
- };
- },
- defaultCol() {
- return {
- type: 'col',
- items: [],
- settings: this.getDefaultSettings('col')
- };
- },
- defaultItem(source) {
- return {
- type: 'item',
- source,
- settings: this.getDefaultSettings('item', source)
- };
- },
- mergeSettings(settings, type, source) {
- let defaults = this.getDefaultSettings(type, source);
- let default_keys = Object.keys(defaults);
- let setting_keys = Object.keys(settings);
-
- // Automatically inject new settings
- let missing_keys = default_keys.filter(name => !setting_keys.includes(name));
-
- missing_keys.forEach((name, index) => {
- Vue.set(settings, name, defaults[name]);
- });
-
- return settings;
- },
- getSettingsMeta() {
- let settings = {
- num_columns: {
- type: 'number',
- title: FWP.__('Number of grid columns '),
- defaultValue: 1
- },
- grid_gap: {
- type: 'number',
- title: FWP.__('Spacing between results'),
- defaultValue: 10
- },
- no_results_text: {
- type: 'textarea',
- title: FWP.__('No results text')
- },
- text_style: {
- type: 'text-style',
- title: FWP.__('Text style'),
- tab: 'style',
- defaultValue: {
- align: '',
- bold: false,
- italic: false
- }
- },
- text_color: {
- type: 'color',
- title: FWP.__('Text color'),
- tab: 'style'
- },
- font_size: {
- type: 'slider',
- title: FWP.__('Font size'),
- tab: 'style',
- defaultValue: {
- unit: 'px',
- size: 0
- }
- },
- background_color: {
- type: 'color',
- title: FWP.__('Background color'),
- tab: 'style'
- },
- border: {
- type: 'border',
- title: FWP.__('Border'),
- tab: 'style',
- defaultValue: {
- style: 'none',
- color: '',
- width: {
- unit: 'px',
- top: 0,
- right: 0,
- bottom: 0,
- left: 0
- }
- },
- children: {
- style: {
- type: 'select',
- title: FWP.__('Border style'),
- choices: {
- 'none': FWP.__('None'),
- 'solid': FWP.__('Solid'),
- 'dashed': FWP.__('Dashed'),
- 'dotted': FWP.__('Dotted'),
- 'double': FWP.__('Double')
- }
- },
- color: {
- type: 'color',
- title: FWP.__('Border color')
- },
- width: {
- type: 'utrbl',
- title: FWP.__('Border width')
- }
- }
- },
- button_text: {
- type: 'text',
- title: FWP.__('Button text')
- },
- button_text_color: {
- type: 'color',
- title: FWP.__('Button text color')
- },
- button_color: {
- type: 'color',
- title: FWP.__('Button color')
- },
- button_padding: {
- type: 'utrbl',
- title: FWP.__('Button padding'),
- defaultValue: {
- unit: 'px',
- top: 0,
- right: 0,
- bottom: 0,
- left: 0
- }
- },
- separator: {
- type: 'text',
- title: FWP.__('Separator'),
- defaultValue: ', '
- },
- custom_css: {
- type: 'textarea',
- title: FWP.__('Custom CSS'),
- tab: 'style'
- },
- grid_template_columns: {
- type: 'text',
- title: FWP.__('Column widths'),
- defaultValue: '1fr'
- },
- content: {
- type: 'textarea',
- title: FWP.__('Content')
- },
- image_size: {
- type: 'select',
- title: FWP.__('Image size'),
- defaultValue: 'thumbnail',
- choices: FWP.image_sizes,
- v_show: [
- { type: 'source', value: 'featured_image' }
- ]
- },
- author_field: {
- type: 'select',
- title: FWP.__('Author field'),
- defaultValue: 'display_name',
- choices: {
- 'display_name': FWP.__('Display name'),
- 'user_login': FWP.__('User login'),
- 'ID': FWP.__('User ID')
- }
- },
- field_type: {
- type: 'select',
- title: FWP.__('Field type'),
- defaultValue: 'text',
- choices: {
- 'text': 'Text',
- 'date': 'Date',
- 'number': 'Number'
- }
- },
- date_format: {
- type: 'text',
- title: FWP.__('Date format'),
- defaultValue: 'F j, Y',
- v_show: [
- { type: 'field_type', value: 'date' },
- { type: 'source', value: 'post_date' },
- { type: 'source', value: 'post_modified' }
- ]
- },
- input_format: {
- type: 'text',
- title: FWP.__('Input format'),
- defaultValue: 'Y-m-d',
- v_show: [
- { type: 'field_type', value: 'date' },
- { type: 'source', value: 'post_date' },
- { type: 'source', value: 'post_modified' }
- ]
- },
- number_format: {
- type: 'select',
- title: FWP.__('Number format'),
- choices: {
- '': FWP.__('None'),
- 'n': '1234',
- 'n.n': '1234.5',
- 'n.nn': '1234.56',
- 'n,n': '1,234',
- 'n,n.n': '1,234.5',
- 'n,n.nn': '1,234.56'
- },
- v_show: [
- { type: 'field_type', value: 'number' }
- ]
- },
- link: {
- type: 'link',
- title: FWP.__('Link'),
- defaultValue: {
- type: 'none',
- href: '',
- target: ''
- },
- children: {
- type: {
- type: 'select',
- title: FWP.__('Link type'),
- choices: {
- 'none': FWP.__('None'),
- 'post': FWP.__('Post URL'),
- 'custom': FWP.__('Custom URL')
- }
- }
- }
- },
- prefix: {
- type: 'text',
- title: FWP.__('Prefix')
- },
- suffix: {
- type: 'text',
- title: FWP.__('Suffix')
- },
- is_hidden: {
- type: 'checkbox',
- defaultValue: false,
- suffix: FWP.__('Hide item?')
- },
- padding: {
- type: 'utrbl',
- title: FWP.__('Padding'),
- defaultValue: {
- unit: 'px',
- top: 0,
- right: 0,
- bottom: 0,
- left: 0
- },
- tab: 'style'
- },
- name: {
- type: 'text',
- title: FWP.__('Unique name'),
- notes: '(Required) unique element name, without spaces'
- },
- css_class: {
- type: 'text',
- title: FWP.__('CSS class'),
- tab: 'style'
- }
- };
-
- settings.button_border = this.$root.cloneObj(settings.border);
- settings.button_border.title = FWP.__('Button border');
- settings.button_border.tab = 'basic';
-
- settings.term_link = this.$root.cloneObj(settings.link);
- settings.term_link.children.type.choices = {
- 'none': FWP.__('None'),
- 'term': FWP.__('Term URL'),
- 'custom': FWP.__('Custom URL')
- };
-
- return settings;
- },
- getDefaultFields(type, source) {
- let fields = [];
-
- if ('layout' == type) {
- fields.push('num_columns', 'grid_gap', 'no_results_text');
- }
-
- if ('row' == type) {
- fields.push('grid_template_columns');
- }
-
- if ('item' == type) {
- if ('html' == source) {
- fields.push('content');
- }
- if ('featured_image' == source) {
- fields.push('image_size', 'link');
- }
- if ('button' == source) {
- fields.push('button_text', 'button_text_color', 'button_color', 'button_padding', 'button_border', 'link');
- }
- if ('post_date' == source || 'post_modified' == source) {
- fields.push('date_format');
- }
- if ('post_title' == source) {
- fields.push('link');
- }
- if ('post_author' == source) {
- fields.push('author_field');
- }
- if (0 === source.indexOf('cf/')) {
- fields.push('field_type', 'date_format', 'input_format', 'number_format', 'link');
- }
- if (0 === source.indexOf('woo/')) {
- fields.push('field_type', 'date_format', 'input_format', 'number_format');
- }
- if (0 === source.indexOf('tax/')) {
- fields.push('separator', 'term_link');
- }
- if (!['html', 'button', 'featured_image'].includes(source)) {
- fields.push('prefix', 'suffix');
- }
- }
-
- fields.push('border', 'background_color', 'padding', 'text_color', 'text_style', 'font_size', 'name', 'css_class');
-
- if ('layout' == type) {
- fields.push('custom_css');
- }
-
- if ('item' == type) {
- fields.push('is_hidden');
- }
-
- return fields;
- },
- getDefaultSettings(type, source) {
- let settings = {};
- let settings_meta = this.getSettingsMeta();
- let fields = this.getDefaultFields(type, source);
-
- fields.forEach(name => {
- let defaultValue = settings_meta[name].defaultValue || '';
-
- if ('name' == name) {
- defaultValue = 'el-' + Math.random().toString(36).substring(7);
- }
-
- settings[name] = defaultValue;
- });
-
- return settings;
- }
- }
- };
-
- /* ================ query builder ================ */
-
- Vue.component('query-builder', {
- props: {
- query_obj: {
- type: Object,
- required: true
- },
- template: {
- type: Object,
- required: true
- }
- },
- template: `
-
-
Which results should be in the listing?
-
-
- {{ 'Fetch' | i18n }}
-
-
-
- {{ 'and show' | i18n }}
-
- {{ 'per page' | i18n }}
-
-
-
- {{ 'Sort by' | i18n }}
-
-
-
-
-
- ID
- {{ 'Post Title' | i18n }}
- {{ 'Post Name' | i18n }}
- {{ 'Post Type' | i18n }}
- {{ 'Post Date' | i18n }}
- {{ 'Post Modified' | i18n }}
- {{ 'Comment Count' | i18n }}
- {{ 'Menu Order' | i18n }}
- post__in
-
-
- {{ label }}
-
-
-
- TEXT
- NUMERIC
-
-
- ASC
- DESC
-
-
-
-
-
- {{ 'Narrow results by' | i18n }}
-
-
-
-
-
-
-
-
-
-
- TEXT
- NUMERIC
- DATE
-
-
-
- =
- !=
- >
- >=
- <
- <=
- IN
- NOT IN
- EXISTS
- NOT EXISTS
- EMPTY
- NOT EMPTY
-
-
-
-
- Type a value, then press "Enter" to add it
-
-
-
-
-
-
-
- {{ 'Add query sort' | i18n }}
- {{ 'Add query filter' | i18n }}
- {{ 'Convert to query args' | i18n }}
-
-
- `,
- methods: {
- addTag(newTag, value) {
- value.push(newTag);
- },
- getPlaceholder({key}) {
- return ('tax/' == key.substr(0, 4)) ? FWP.__('Enter term slugs') : FWP.__('Enter values');
- },
- maybeShowValue(compare) {
- return !['EXISTS', 'NOT EXISTS', 'EMPTY', 'NOT EMPTY'].includes(compare);
- },
- showCompare(option, {key, type}) {
- if ('tax/' == key.substr(0, 4)) {
- if (!['IN', 'NOT IN', 'EXISTS', 'NOT EXISTS'].includes(option)) {
- return false;
- }
- }
- else if (['ID', 'post_author', 'post_status', 'post_name'].includes(key)) {
- if (option != 'IN' && option != 'NOT IN') {
- return false;
- }
- }
- else if ('DATE' == type || 'post_date' == key || 'post_modified' == key) {
- if (!['>', '>=', '<', '<='].includes(option)) {
- return false;
- }
- }
- else if ('CHAR' == type) {
- if (['>', '>=', '<', '<='].includes(option)) {
- return false;
- }
- }
- return true;
- },
- addSortCriteria() {
- this.query_obj.orderby.push({
- key: 'title',
- order: 'ASC',
- type: 'CHAR'
- });
- },
- addFilterCriteria() {
- this.query_obj.filters.push({
- key: 'ID',
- value: [],
- compare: 'IN',
- type: 'CHAR'
- });
- },
- deleteSortCriteria(index) {
- Vue.delete(this.query_obj.orderby, index);
- },
- deleteFilterCriteria(index) {
- Vue.delete(this.query_obj.filters, index);
- }
- }
- });
-
- Vue.component('fselect', {
- data() {
- return {
- prev_key: ''
- };
- },
- props: ['row'],
- template: `
-
-
-
- `,
- mounted() {
- fSelect(this.$el);
- },
- /**
- * fSelects won't refresh when deleting, so we need to
- * manually reload() the changed elements
- */
- beforeUpdate() {
- this.prev_key = this.$el.getAttribute('data-key');
- },
- updated() {
- if (this.row.key != this.prev_key) {
- this.$el.fselect.reload();
- }
- }
- });
-
- /* ================ layout builder ================ */
-
-
- Vue.component('builder', {
- props: {
- layout: Object
- },
- template: `
-
-
-
How should an individual result appear?
-
-
-
-
-
-
-
-
-
- `
- });
-
- Vue.component('setting-wrap', {
- mixins: [builder_defaults],
- props: ['settings', 'name', 'source', 'tab'],
- template: `
-
- `,
- computed: {
- getSettingComponent() {
- return 'setting-' + this.type;
- },
- isVisible() {
- let ret = true;
- let self = this;
-
- if ('undefined' === typeof this.meta.tab) {
- this.meta.tab = 'basic';
- }
-
- if (this.meta.tab !== this.tab) {
- ret = false;
- }
- else if ('undefined' !== typeof this.meta.v_show) {
- ret = false;
- this.meta.v_show.forEach((cond, index) => {
- let type = cond.type;
- let setting_val = ('source' == type) ? self[type] : self.settings[type];
- let cond_value = cond.value || '';
- let cond_compare = cond.compare || '==';
- let is_match = ('==' == cond_compare)
- ? setting_val == cond_value
- : setting_val != cond_value;
-
- if (is_match) {
- ret = true;
- }
- });
- }
-
- return ret;
- }
- },
- created() {
- this.settings_meta = this.getSettingsMeta();
- this.meta = this.settings_meta[this.name];
- this.type = this.meta.type;
- this.title = this.meta.title;
- }
- });
-
- Vue.component('setting-text', {
- props: ['settings', 'name', 'meta'],
- template: ' '
- });
-
- Vue.component('setting-number', {
- props: ['settings', 'name', 'meta'],
- template: ' '
- });
-
- Vue.component('setting-textarea', {
- props: ['settings', 'name', 'meta'],
- template: ''
- });
-
- Vue.component('setting-slider', {
- props: ['settings', 'name', 'meta'],
- template: `
-
-
-
-
- `,
- computed: {
- fontSizeLabel() {
- let val = this.settings[this.name];
- return (0 === val.size) ? 'none' : val.size + val.unit;
- }
- }
- });
-
- Vue.component('setting-color', {
- props: ['settings', 'name', 'meta'],
- template: `
- `,
- mounted() {
- let self = this;
- let $canvas = self.$el.getElementsByClassName('color-canvas')[0];
- let $preview = self.$el.getElementsByClassName('color-preview')[0];
- let $input = self.$el.getElementsByClassName('color-input')[0];
- let $clear = self.$el.getElementsByClassName('color-clear')[0];
- $preview.style.backgroundColor = $input.value;
-
- let picker = new Picker({
- parent: $canvas,
- popup: 'left',
- alpha: false,
- onDone(color) {
- let hex = color.hex().substr(0, 7);
- self.settings[self.name] = hex;
- $preview.style.backgroundColor = hex;
- }
- });
-
- picker.onOpen = function(color) {
- picker.setColor($input.value);
- };
-
- $clear.addEventListener('click', function() {
- self.settings[self.name] = '';
- $preview.style.backgroundColor = '';
- });
- }
- });
-
- Vue.component('setting-link', {
- props: ['settings', 'name', 'meta'],
- template: `
-
-
-
-
-
-
-
-
-
- {{ 'Open in new tab?' | i18n }}
-
-
- `
- });
-
- Vue.component('setting-border', {
- props: ['settings', 'name', 'meta'],
- template: `
-
- `
- });
-
- Vue.component('setting-checkbox', {
- props: ['settings', 'name', 'meta'],
- template: `
-
- {{ meta.suffix }}
-
- `
- });
-
- Vue.component('setting-select', {
- props: ['settings', 'name', 'meta'],
- template: `
-
- {{ label }}
-
- `
- });
-
- Vue.component('setting-utrbl', {
- props: ['settings', 'name', 'meta'],
- template: `
-
- `
- });
-
- Vue.component('setting-text-style', {
- props: ['settings', 'name', 'meta'],
- template: `
-
-
-
-
-
-
-
- `,
- methods: {
- toggleChoice(opt, val) {
- let old_val = this.settings[this.name][opt];
-
- if ('undefined' !== typeof val) {
- this.settings[this.name][opt] = (val !== old_val) ? val : '';
- }
- else {
- this.settings[this.name][opt] = ! old_val;
- }
- },
- isActive(opt, val) {
- let new_val = ('undefined' !== typeof val) ? val : true;
- return this.settings[this.name][opt] === new_val;
- }
- }
- });
-
- Vue.component('builder-settings', {
- mixins: [builder_defaults],
- props: {
- layout: Object
- },
- data() {
- return {
- title: '',
- type: 'layout',
- settings: this.layout.settings,
- source: '',
- active_tab: 'basic'
- }
- },
- template: `
-
-
-
-
- {{ 'Basic' | i18n }}
- {{ 'Style' | i18n }}
-
-
-
-
-
- `,
- computed: {
- settingTitle() {
- return ('' === this.title) ? FWP.__('Settings') : this.title;
- },
- settingsFields() {
- return this.getDefaultFields(this.type, this.source);
- }
- },
- methods: {
- uniqueKey() {
- // method to prevent caching
- return Math.floor(Math.random() * 999999);
- },
- isActiveTab(which) {
- return (this.active_tab === which) ? 'active' : '';
- },
- setActiveTab(which) {
- this.active_tab = which;
- }
- },
- created() {
- let self = this;
-
- this.$root.$on('edit-layout', () => {
- self.title = '';
- self.type = 'layout';
- self.settings = self.mergeSettings(self.layout.settings, self.type);
- self.source = '';
- });
-
- this.$root.$on('edit-row', ({settings}, num) => {
- self.title = FWP.__('Row') + ' ' + num;
- self.type = 'row';
- self.settings = self.mergeSettings(settings, self.type);
- self.source = '';
- });
-
- this.$root.$on('edit-col', ({settings}, num) => {
- self.title = FWP.__('Column') + ' ' + num;
- self.type = 'col';
- self.settings = self.mergeSettings(settings, self.type);
- self.source = '';
- });
-
- this.$root.$on('edit-item', ({source, settings}) => {
- self.title = FWP.layout_data[source];
- self.type = 'item';
- self.settings = self.mergeSettings(settings, self.type, source);
- self.source = source;
- });
- }
- });
-
- Vue.component('builder-row', {
- mixins: [builder_defaults],
- props: {
- row: Object,
- rows: Array,
- index: Number,
- is_child: Boolean
- },
- template: `
-
- `,
- computed: {
- classIsChild() {
- return this.is_child ? 'is-child' : 'not-child';
- }
- },
- methods: {
- addRow() {
- this.rows.splice(this.index + 1, 0, this.defaultRow());
-
- if (1 < this.rows.length) {
- this.$root.$emit('edit-row', this.rows[this.index + 1], this.index + 2);
- }
- else {
- this.$root.$emit('edit-layout');
- }
- },
- addCol() {
- let len = this.row.items.push(this.defaultCol());
- this.$root.$emit('edit-col', this.row.items[len - 1], len);
-
- let grid_str = '1fr '.repeat(this.row.items.length).trim();
- this.row.settings.grid_template_columns = grid_str;
- },
- editRow() {
- this.$root.$emit('edit-row', this.row, this.index + 1);
- },
- deleteRow() {
- Vue.delete(this.rows, this.index);
- this.$root.$emit('edit-layout');
-
- // Add default row
- if (this.rows.length < 1) {
- if (! this.is_child) {
- this.addRow();
- }
- }
- }
- }
- });
-
- Vue.component('builder-col', {
- mixins: [builder_defaults],
- props: {
- col: Object,
- cols: Array,
- index: Number
- },
- data() {
- return {
- adding_item: false
- }
- },
- template: `
-
- `,
- methods: {
- addItem() {
- this.adding_item = ! this.adding_item;
- },
- editCol() {
- this.$root.$emit('edit-col', this.col, this.index + 1);
- this.adding_item = false;
- },
- deleteCol() {
- // Remove the column
- this.cols.splice(this.index, 1);
-
- // Show the "Layout" settings
- this.$root.$emit('edit-layout');
-
- // Add default column
- if (this.cols.length < 1) {
- this.cols.push(this.defaultCol());
- }
-
- // Adjust the row's `grid_template_columns` string
- let grid_str = '1fr '.repeat(this.cols.length).trim();
- this.$parent.row.settings.grid_template_columns = grid_str;
- },
- away() {
- this.adding_item = false;
- }
- }
- });
-
- Vue.component('col-resizer', {
- props: {
- cols: Array,
- index: Number
- },
- data() {
- return {
- isResizing: false
- }
- },
- template: '
',
- computed: {
- classNames() {
- return [
- 'resizer',
- this.isResizing ? 'is-resizing' : ''
- ];
- }
- },
- methods: {
- onMouseDown({ target: resizer, pageX: initialPageX, pageY: initialPageY }) {
- if (! resizer.classList.contains('resizer')) {
- return;
- }
-
- let self = this;
- let pane = resizer.parentElement;
- let row_inner = pane.parentElement;
- let initialPaneWidth = pane.offsetWidth;
-
- const resize = (initialSize, offset = 0) => {
- let containerWidth = row_inner.clientWidth;
- let paneWidth = initialSize + offset;
- let width = ((paneWidth / containerWidth) * 100).toFixed(1) + '%';
- let gridColumns = this.$parent.$parent.row.settings.grid_template_columns.split(' ');
-
- gridColumns[this.index] = width;
-
- this.$parent.$parent.row.settings.grid_template_columns = gridColumns.join(' ');
- };
-
- // This adds is-resizing class to container
- self.isResizing = true;
-
- const onMouseMove = ({ pageX, pageY }) => {
- resize(initialPaneWidth, pageX - initialPageX);
- };
-
- const onMouseUp = () => {
- // Run resize one more time to set computed width/height.
- resize(pane.clientWidth);
-
- // This removes is-resizing class to container
- self.isResizing = false;
-
- window.removeEventListener('mousemove', onMouseMove);
- window.removeEventListener('mouseup', onMouseUp);
- };
-
- window.addEventListener('mousemove', onMouseMove);
- window.addEventListener('mouseup', onMouseUp);
- }
- }
- });
-
- Vue.component('builder-item', {
- props: {
- item: Object,
- items: Array,
- index: Number
- },
- template: `
-
- `,
- methods: {
- editItem() {
- this.$root.$emit('edit-item', this.item);
- },
- deleteItem() {
- this.items.splice(this.index, 1);
- this.$root.$emit('edit-layout');
- }
- }
- });
-
- Vue.component('popover', {
- mixins: [builder_defaults],
- props: {
- col: Object
- },
- data() {
- return {
- keywords: ''
- }
- },
- template: `
-
- `,
- methods: {
- handleBlur(e) {
- if (!e.currentTarget.contains(e.relatedTarget)) {
- this.$parent.adding_item = false;
- }
- },
- isMatch(label) {
- let bool = ('' == this.keywords) ? true : false;
-
- if (false === bool) {
- let needle = this.keywords.toLowerCase();
- let haystack = label.toLowerCase();
- if (haystack.includes(needle)) {
- bool = true;
- }
- }
-
- return bool;
- },
- saveItem(source) {
- if ('row' == source) {
- let len = this.col.items.push(this.defaultRow());
- this.$root.$emit('edit-row', this.col.items[len - 1], len);
- }
- else {
- let len = this.col.items.push(this.defaultItem(source));
- this.$root.$emit('edit-item', this.col.items[len - 1]);
- }
-
- this.$parent.adding_item = false;
- }
- },
- mounted() {
- this.$refs.keywords.focus();
- }
- });
-
-
- /* ================ facets / templates ================ */
-
-
- Vue.component('facets', {
- props: ['facets'],
- template: `
-
-
-
☰
-
- {{ facet.label }}
-
-
-
{{ facet.name }}
-
{{ facet.type }}
-
-
{{ getRowCount(facet.name) }}
-
-
-
-
-
Copy shortcode
-
Duplicate
-
Delete
-
-
-
-
-
- `,
- methods: {
- getSource(source) {
- return FWP.layout_data[source] || '-';
- },
- getRowCount(facet_name) {
- if (this.$root.is_indexing) {
- return '...';
- }
- return this.$root.row_counts[facet_name] || '-';
- }
- }
- });
-
- Vue.component('templates', {
- props: ['templates'],
- template: `
-
-
-
☰
-
- {{ template.label }}
-
-
-
{{ template.name }}
-
{{ getDisplayMode(index) }}
-
{{ getPostTypes(index) }}
-
-
-
-
-
Copy shortcode
-
Duplicate
-
Delete
-
-
-
-
-
- `,
- methods: {
- getDisplayMode(index) {
- let template = this.templates[index];
- return ('undefined' !== typeof template.modes) ? template.modes.display : 'advanced';
- },
- getPostTypes(index) {
- let template = this.templates[index];
- if ('undefined' !== typeof template.modes) {
- if ('visual' == template.modes.query) {
- let post_types = template.query_obj.post_type;
- if (0 === post_types.length) {
- return '';
- }
- else {
- return post_types.map(type => type.label).join(', ');
- }
- }
- }
- return '';
- }
- }
- });
-
- Vue.component('facet-edit', {
- data() {
- return {
- facet: {}
- }
- },
- created() {
- this.facet = this.$root.editing;
- },
- methods: {
- setName(e) {
- this.facet.name = this.$root.sanitizeName(e.target.innerHTML);
- },
- unlock() {
- Vue.delete(this.facet, '_code');
- }
- },
- template: `
-
-
- This facet is registered in code. Click to allow edits:
-
-
-
-
-
{{ 'Label' | i18n }}
-
-
-
-
- {{ 'Copy shortcode' | i18n }}
-
-
-
-
-
{{ 'Facet type' | i18n }}
-
-
-
-
-
-
-
{{ 'Data source' | i18n }}
-
-
-
-
-
-
-
- `
- });
-
- Vue.component('template-edit', {
- mixins: [builder_defaults],
- data() {
- return {
- template: {},
- tab: 'display'
- }
- },
- created() {
- this.template = this.$root.editing;
-
- // Set defaults for the layout builder
- if (! this.template.layout) {
- Vue.set(this.template, 'layout', this.defaultLayout());
- }
-
- // Set defaults for the query builder
- if (! this.template.query_obj) {
- Vue.set(this.template, 'query_obj', {
- post_type: [],
- posts_per_page: 10,
- orderby: [],
- filters: []
- });
- }
-
- // Set the modes
- if (! this.template.modes) {
- Vue.set(this.template, 'modes', {
- display: ('' !== this.template.template) ? 'advanced' : 'visual',
- query: ('' !== this.template.query) ? 'advanced' : 'visual'
- });
- }
- },
- methods: {
- setName(e) {
- this.template.name = this.$root.sanitizeName(e.target.innerHTML);
- },
- isMode(mode) {
- return this.template.modes[this.tab] === mode;
- },
- switchMode() {
- const now = this.template.modes[this.tab];
- this.template.modes[this.tab] = ('visual' === now) ? 'advanced' : 'visual';
- },
- unlock() {
- Vue.delete(this.template, '_code');
- }
- },
- template: `
-
-
- This template is registered in code. Click to allow edits:
-
-
-
-
-
-
-
- {{ 'Copy shortcode' | i18n }}
-
-
-
-
- Dev mode?
-
-
-
- {{ 'Display' | i18n }}
- {{ 'Query' | i18n }}
-
-
-
-
-
-
-
- `
- });
-
- Vue.component('facet-types', {
- props: ['facet', 'selected', 'types'],
- template: `
-
- {{ type.label }}
-
- `
- });
-
- Vue.component('facet-settings', {
- props: ['facet'],
- template: ' ',
- methods: {
- getFields(aliases) {
- let output = [];
- $.each(aliases, function(name) {
- output = output.concat(FWP.facet_fields[name].names);
- });
- return output;
- }
- },
- computed: {
- // dynamic component so the data bindings (e.g. v-model) get compiled
- dynComponent() {
- return {
- template: '' + this.settingsHtml + '
',
- props: ['facet']
- }
- },
- settingsHtml() {
- let self = this;
- let facet_obj = FWP.facet_types[self.facet.type];
- let aliases = facet_obj.fields;
-
- // Support for settings_html() in < 3.9
- if ('undefined' === typeof aliases) {
- if ('undefined' !== typeof FWP.clone[self.facet.type]) {
- FWP.facet_fields[self.facet.type + '_fields'] = {
- names: [],
- html: FWP.clone[self.facet.type]
- };
-
- var $html = $(FWP.clone[self.facet.type]);
- $.each($html.nodes[0].children, function(chunk) {
- $(chunk).find('input, textarea, select, [setting-name]').each(function() {
- let $el = $(this);
- let setting_name = $el.attr('setting-name');
-
- if (null === setting_name) {
- setting_name = $el.attr('class').split(' ')[0].replace(/-/g, '_').substr(6);
- }
-
- FWP.facet_fields[self.facet.type + '_fields'].names.push(setting_name);
- });
- });
-
- aliases = [self.facet.type + '_fields'];
- }
- }
-
- // Get the actual fields by parsing the aliases (groups)
- let fields = self.getFields(aliases);
- let html = '';
-
- // Add UI-dependant fields
- if ('undefined' !== typeof facet_obj.ui_fields) {
- if ('undefined' !== typeof self.facet.ui_type && '' != self.facet.ui_type) {
- let ui_fields = facet_obj.ui_fields[self.facet.ui_type];
- aliases = aliases.concat(ui_fields);
- fields = fields.concat(this.getFields(ui_fields));
- }
- }
-
- let combined = ['label', 'name', 'type', 'source', '_code'].concat(fields);
-
- // Remove irrelevant settings
- $.each(Object.keys(self.facet), function(setting_name) {
- if (-1 == combined.indexOf(setting_name)) {
- Vue.delete(self.facet, setting_name);
- }
- });
-
- // Add new settings
- $.each(aliases, function(alias_name) {
- let $parsed = $(FWP.facet_fields[alias_name].html);
-
- $.each(FWP.facet_fields[alias_name].names, function(setting_name) {
- let name_dashed = setting_name.replace(/_/g, '-');
- let $input = $parsed.find('.facet-' + name_dashed);
- let val = $input.val();
-
- if (0 < $input.len()) {
- $input.attr('v-model', 'facet.' + setting_name);
-
- if ('undefined' === typeof self.facet[setting_name]) {
- if ($input.is('[type=checkbox]')) {
- val = $input.nodes[0].checked ? 'yes' : 'no';
- }
- if ('[]' === val) {
- val = [];
- }
- }
- else {
- val = self.facet[setting_name];
- Vue.delete(self.facet, setting_name);
- }
-
- Vue.set(self.facet, setting_name, val);
- }
- });
-
- // Update the documentFragment HTML to include the "v-model"
- $.each($parsed.nodes[0].children, function(el) {
- html += el.outerHTML;
- });
- });
-
- return html;
- }
- },
- watch: {
- 'facet.type': function(val) {
- if ('search' == val || 'pager' == val || 'reset' == val || 'sort' == val) {
- Vue.delete(this.facet, 'source');
- }
- }
- }
- });
-
- Vue.component('data-sources', {
- props: {
- facet: Object,
- settingName: {
- type: String,
- default: 'source'
- }
- },
- template: `
-
- {{ 'None' | i18n }}
-
- {{ label }}
-
-
- `,
- computed: {
- className() {
- return 'facet-' + this.settingName.replace(/_/g, '-');
- }
- },
- mounted() {
- fSelect(this.$el);
- }
- });
-
- Vue.component('facet-names', {
- props: {
- facet: Object,
- setting: String
- },
- template: `
-
-
- {{ f.label }}
-
-
- `,
- computed: {
- className() {
- return 'facet-' + this.setting.replace(/_/g, '-');
- }
- },
- methods: {
- bindSelectedClass(name) {
- return this.facet[this.setting].includes(name) ? 'selected' : '';
- }
- },
- created() {
- if ('undefined' === typeof this.facet[this.setting]) {
- this.facet[this.setting] = [];
- }
- },
- mounted() {
- fSelect(this.$el, { 'placeholder': 'Choose facets' });
- }
- });
-
- Vue.component('ui-type', {
- props: {
- facet: Object
- },
- created() {
- this.ui_fields = FWP.facet_types[this.facet.type].ui_fields || [];
- this.sorted = Object.keys(this.ui_fields).reverse();
- },
- template: `
-
- {{ 'None' | i18n }}
- {{ FWP.facet_types[name].label }}
-
- `
- });
-
- Vue.component('sort-options', {
- props: {
- facet: Object
- },
- template: `
-
-
-
-
-
-
-
-
-
- ID
- {{ 'Post Title' | i18n }}
- {{ 'Post Name' | i18n }}
- {{ 'Post Type' | i18n }}
- {{ 'Post Date' | i18n }}
- {{ 'Post Modified' | i18n }}
- {{ 'Comment Count' | i18n }}
- {{ 'Menu Order' | i18n }}
- post__in
-
-
- {{ label }}
-
-
-
- TEXT
- NUMERIC
-
-
- ASC
- DESC
-
-
-
-
-
-
-
-
-
-
-
-
- {{ 'Add sort' | i18n }}
-
-
- `,
- methods: {
- addSort() {
- this.facet.sort_options.push({
- label: 'New option',
- name: 'new_option',
- orderby: [{
- key: 'title',
- order: 'ASC',
- type: 'CHAR'
- }]
- });
- },
- addSortField(opts, index) {
- opts.splice(index + 1, 0, {
- key: 'title',
- order: 'ASC',
- type: 'CHAR'
- });
- },
- moveUp(opts, index) {
- opts.splice(index -1, 0, opts.splice(index, 1)[0]);
- },
- removeItem(row, index) {
- Vue.delete(row, index);
- },
- setName(row, e) {
- row.name = this.$root.sanitizeName(e.target.innerHTML);
- }
- }
- });
-
- // Vue instance
- FWP.vue = new Vue({
- el: '#app',
- data: {
- app: FWP.data,
- editing: {},
- editing_facet: false,
- editing_template: false,
- row_counts: {},
- active_tab: 'facets',
- active_subnav: 'general',
- is_support_loaded: false,
- is_name_editable: false,
- is_rebuild_open: false,
- is_indexing: false,
- timeout: null
- },
- methods: {
- addItem(type) {
- if ('facet' == type) {
- let len = this.app.facets.push({
- 'name': 'new_facet',
- 'label': 'New Facet',
- 'type': 'checkboxes',
- 'source': 'post_type'
- });
- this.editItem('facet', this.app.facets[len-1]);
- }
- else {
- let len = this.app.templates.push({
- 'name': 'new_template',
- 'label': 'New Template',
- 'query': '',
- 'template': ''
- });
- this.editItem('template', this.app.templates[len-1]);
- }
- },
- duplicateItem(type, index) {
- let facet = this.cloneObj(this.app[type + 's'][index]);
- facet.label += ' (copy)';
- facet.name += '_copy';
-
- this.app[type + 's'].splice(index+1, 0, facet)
- this.editItem(type, facet);
- },
- editItem(type, data) {
- this['editing_' + type] = true;
- this.editing = data;
- window.scrollTo(0, 0);
- },
- doneEditing() {
- this.editing_template = false;
- this.editing_facet = false;
- this.editing = {};
- },
- tabClick(which) {
- this.doneEditing();
- this.active_tab = which;
- if ('support' === which) {
- this.is_support_loaded = true;
- }
- },
- getItemLabel() {
- return this.editing.label;
- },
- deleteItem(type, index) {
- this.app[type + 's'].splice(index, 1);
- },
- saveChanges() {
- window.setStatus('load', FWP.__('Saving') + '...');
-
- let data = JSON.parse(JSON.stringify(FWP.data));
-
- // Remove code-based facets and templates
- data.facets = data.facets.filter(obj => 'undefined' === typeof obj['_code']);
- data.templates = data.templates.filter(obj => 'undefined' === typeof obj['_code']);
-
- // Settings save hook
- data = FWP.hooks.applyFilters('facetwp/save_settings', {
- action: 'facetwp_save_settings',
- nonce: FWP.nonce,
- data: data
- });
-
- $.post(ajaxurl, data, {
- done: ({code, message}) => {
- var code = ('success' == code) ? 'ok' : code;
- window.setStatus(code, message);
- },
- fail: (err) => {
- window.setStatus('error', err);
- }
- });
- },
- rebuildAction() {
- this.is_indexing ? this.cancelReindex() : this.rebuildIndex();
- },
- rebuildIndex() {
- let self = this;
-
- if (this.is_indexing) {
- return;
- }
-
- this.is_indexing = true;
-
- $.post(ajaxurl, { action: 'facetwp_rebuild_index', nonce: FWP.nonce });
- window.setStatus('load', FWP.__('Indexing') + '... 0%');
- this.timeout = setTimeout(() => {
- self.getProgress();
- }, 5000);
- },
- cancelReindex() {
- let self = this;
-
- $.post(ajaxurl, {
- action: 'facetwp_get_info',
- type: 'cancel_reindex',
- nonce: FWP.nonce
- }, {
- done: ({message}) => {
- self.is_indexing = false;
- clearTimeout(self.timeout);
- window.setStatus('error', message);
- }
- });
- },
- getProgress() {
- let self = this;
- let isNumeric = (obj) => !Array.isArray(obj) && (obj - parseFloat(obj) + 1) >= 0;
-
- $.post(ajaxurl, {
- action: 'facetwp_heartbeat',
- nonce: FWP.nonce
- }, {
- done: (data) => {
- if ('-1' == data.pct) {
- self.is_indexing = false;
-
- if (data.rows.length < 1) {
- window.setStatus('error', FWP.__('The index table is empty'));
- }
- else {
- window.setStatus('ok', FWP.__('Indexing complete'));
-
- // Update the row counts
- $.each(data.rows, function(count, facet_name) {
- Vue.set(self.row_counts, facet_name, count);
- });
- }
- }
- else if (isNumeric(data.pct)) {
- window.setStatus('load', FWP.__('Indexing') + '... ' + data.pct + '%');
- self.is_indexing = true;
-
- self.timeout = setTimeout(() => {
- self.getProgress();
- }, 5000);
- }
- else {
- window.setStatus('error', data);
- self.is_indexing = false;
- }
- }
- });
- },
- getInfo(type, label) {
- window.setStatus('load', FWP.__(label) + '...');
-
- $.post(ajaxurl, {
- action: 'facetwp_get_info',
- type,
- nonce: FWP.nonce
- }, {
- done: ({message}) => {
- window.setStatus('error', message);
- }
- });
- },
- getQueryArgs(template) {
- let self = this;
-
- template.modes.query = 'advanced';
- template.query = FWP.__('Loading') + '...';
-
- $.post(ajaxurl, {
- action: 'facetwp_get_query_args',
- query_obj: template.query_obj,
- nonce: FWP.nonce
- }, {
- done: (message) => {
- var json = JSON.stringify(message, null, 2);
- json = "');
- template.query = json;
- }
- })
- },
- showIndexerStats() {
- this.getInfo('indexer_stats', 'Looking');
- },
- searchablePostTypes() {
- this.getInfo('post_types', 'Looking');
- },
- purgeIndexTable() {
- this.getInfo('purge_index_table', 'Purging');
- },
- copyToClipboard(name, type, {target}) {
- const $this = $(target);
- const $el = $('.facetwp-clipboard');
- const orig_text = $this.text();
-
- try {
- $el.removeClass('hidden');
- $el.val('[facetwp ' + type + '="' + name + '"]');
- $el.nodes[0].select();
- document.execCommand('copy');
- $el.addClass('hidden');
- $this.text(FWP.__('Copied!'));
- }
- catch(err) {
- $this.text(FWP.__('Press CTRL+C to copy'));
- }
-
- window.setTimeout(() => {
- $this.text(orig_text);
- }, 2000);
- },
- activate() {
- $('.facetwp-activation-status').html(FWP.__('Activating') + '...');
-
- $.post(ajaxurl, {
- action: 'facetwp_license',
- nonce: FWP.nonce,
- license: $('.facetwp-license').val()
- }, {
- done: ({message}) => {
- $('.facetwp-activation-status').html(message);
- }
- })
- },
- isNameEditable({name}) {
- this.is_name_editable = ('' == name || 'new_' == name.substr(0, 4));
- },
- maybeEditName(item) {
- if (this.is_name_editable) {
- item.name = this.sanitizeName(item.label);
- }
- },
- sanitizeName(name) {
- let val = name.trim().toLowerCase();
- val = val.replace(/[^\w- ]/g, ''); // strip invalid characters
- val = val.replace(/[- ]/g, '_'); // replace space and hyphen with underscore
- val = val.replace(/[_]{2,}/g, '_'); // strip consecutive underscores
- val = ('pager' == val || 'sort' == val || 'labels' == val) ? val + '_' : val; // reserved
- return val;
- },
- documentClick({target}) {
- let el = target;
-
- if (! el.classList.contains('btn-caret')) {
- this.is_rebuild_open = false;
- }
- },
- cloneObj(obj) {
- return JSON.parse(JSON.stringify(obj));
- }
- },
- computed: {
- isEditing() {
- return this.editing_facet || this.editing_template;
- },
- indexButtonLabel() {
- return this.is_indexing ? FWP.__('Stop indexer') : FWP.__('Re-index');
- }
- },
- created() {
- document.addEventListener('click', this.documentClick);
- },
- mounted() {
- this.getProgress();
- }
- });
- }
-
- function init_custom_js() {
-
- window.setStatus = (code, message) => {
- $('.facetwp-response').html(message);
- $('.facetwp-response-icon').nodes[0].setAttribute('data-status', code);
-
- if ('error' == code) {
- $('.facetwp-response').addClass('visible');
- }
- };
-
- $().on('click', '.facetwp-settings-section .facetwp-switch', () => {
- window.setStatus('error', 'Press "Save changes" to apply');
- });
-
- $().on('click', '.facetwp-response-wrap', () => {
- $('.facetwp-response').toggleClass('visible');
- });
-
- // Export
- $().on('click', '.export-submit', () => {
- $('.import-code').val(FWP.__('Loading') + '...');
-
- $.post(ajaxurl, {
- action: 'facetwp_backup',
- nonce: FWP.nonce,
- action_type: 'export',
- items: $('.export-items').val()
- }, {
- done: (resp) => {
- $('.import-code').val(JSON.stringify(resp));
- }
- })
- });
-
- // Import
- $().on('click', '.import-submit', () => {
- window.setStatus('load', FWP.__('Importing') + '...');
-
- try {
- var code = JSON.parse($('.import-code').val());
-
- $.post(ajaxurl, {
- action: 'facetwp_backup',
- nonce: FWP.nonce,
- action_type: 'import',
- import_code: code,
- overwrite: $('.import-overwrite').nodes[0].checked ? 1 : 0
- }, {
- dataType: 'text',
- done: (resp) => {
- window.setStatus('ok', resp);
- setTimeout(() => {
- window.location.reload();
- }, 1500);
- }
- });
- }
- catch(err) {
- window.setStatus('error', 'Invalid JSON');
- }
- });
-
- // Initialize tooltips
- $().on('mouseover', '.facetwp-tooltip', function() {
- if (!this.classList.contains('.ftip-enabled')) {
- fTip(this, {
- content: (node) => $(node).find('.facetwp-tooltip-content').html()
- }).open();
- }
- });
-
- // fSelect
- fSelect('.export-items');
- }
-
-})(fUtil);
diff --git a/wp/wp-content/plugins/facetwp/assets/js/src/deprecated.js b/wp/wp-content/plugins/facetwp/assets/js/src/deprecated.js
deleted file mode 100644
index 30ae25ca..00000000
--- a/wp/wp-content/plugins/facetwp/assets/js/src/deprecated.js
+++ /dev/null
@@ -1,10 +0,0 @@
-FWP.deprecated = (old_method, new_method, ...args) => {
- console.warn('FWP.' + old_method + '() has changed to FWP.' + new_method + '()');
- return FWP[new_method](...args);
-};
-FWP.build_post_data = (...args) => FWP.deprecated('build_post_data', 'buildPostData', ...args);
-FWP.build_query_string = (...args) => FWP.deprecated('build_query_string', 'buildQueryString', ...args);
-FWP.fetch_data = (...args) => FWP.deprecated('fetch_data', 'fetchData', ...args);
-FWP.load_from_hash = (...args) => FWP.deprecated('load_from_hash', 'loadFromHash', ...args);
-FWP.parse_facets = (...args) => FWP.deprecated('parse_facets', 'parseFacets', ...args);
-FWP.set_hash = (...args) => FWP.deprecated('set_hash', 'setHash', ...args);
diff --git a/wp/wp-content/plugins/facetwp/assets/js/src/event-manager.js b/wp/wp-content/plugins/facetwp/assets/js/src/event-manager.js
deleted file mode 100644
index 738ba6f3..00000000
--- a/wp/wp-content/plugins/facetwp/assets/js/src/event-manager.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * WP-JS-Hooks
- * @version 1.0.0
- * @author Carl Danley & 10up
- */
-!function(t,n){"use strict";t.FWP=t.FWP||{},t.FWP.hooks=t.FWP.hooks||new function(){function t(t,n,r,i){var e,o,c;if(f[t][n])if(r)if(e=f[t][n],i)for(c=e.length;c--;)(o=e[c]).callback===r&&o.context===i&&e.splice(c,1);else for(c=e.length;c--;)e[c].callback===r&&e.splice(c,1);else f[t][n]=[]}function n(t,n,i,e,o){var c={callback:i,priority:e,context:o},l=f[t][n];l?(l.push(c),l=r(l)):l=[c],f[t][n]=l}function r(t){for(var n,r,i,e=1,o=t.length;en.priority;)t[r]=t[r-1],--r;t[r]=n}return t}function i(t,n,r){var i,e,o=f[t][n];if(!o)return"filters"===t&&r[0];if(e=o.length,"filters"===t)for(i=0;i {
- return $.post(endpoint, {
- action: 'facetwp_autocomplete_load',
- facet_name: facet_name,
- query: el.value,
- data: FWP.buildPostData()
- }, {
- done: (resp) => {
- this.fcomplete.render(resp);
- }
- });
- };
- options.onSelect = () => FWP.autoload();
-
- fComplete(el, options);
- });
- });
-
- $().on('keyup', '.facetwp-autocomplete', function(e) {
- if (13 === e.which && ! FWP.is_refresh) {
- FWP.autoload();
- }
- });
-
- $().on('click', '.facetwp-autocomplete-update', function() {
- FWP.autoload();
- });
-
- /* ======== Checkboxes ======== */
-
- FWP.hooks.addAction('facetwp/refresh/checkboxes', function($this, facet_name) {
- var selected_values = [];
- $this.find('.facetwp-checkbox.checked').each(function() {
- selected_values.push(
- $(this).attr('data-value')
- );
- });
- FWP.facets[facet_name] = selected_values;
- });
-
- FWP.hooks.addFilter('facetwp/selections/checkboxes', function(output, params) {
- var choices = [];
- $.each(params.selected_values, function(val) {
- var $item = params.el.find('.facetwp-checkbox[data-value="' + val + '"]');
- if ($item.len()) {
- var choice = $($item.html());
- choice.find('.facetwp-counter').remove();
- choice.find('.facetwp-expand').remove();
- choices.push({
- value: val,
- label: choice.text()
- });
- }
- });
- return choices;
- });
-
- $().on('click', '.facetwp-type-checkboxes .facetwp-expand', function(e) {
- var $wrap = $(this).closest('.facetwp-checkbox').next('.facetwp-depth');
- $wrap.toggleClass('visible');
- var content = $wrap.hasClass('visible') ? FWP_JSON['collapse'] : FWP_JSON['expand'];
- $(this).html(content);
- e.stopImmediatePropagation();
- });
-
- $().on('click', '.facetwp-type-checkboxes .facetwp-checkbox:not(.disabled)', function() {
- var $cb = $(this);
- var is_checked = ! $cb.hasClass('checked');
- var is_child = $cb.closest('.facetwp-depth').len() > 0;
- var is_parent = $cb.next().hasClass('facetwp-depth');
-
- // if a parent is clicked, deselect all of its children
- if (is_parent) {
- $cb.next('.facetwp-depth').find('.facetwp-checkbox').removeClass('checked');
- }
- // if a child is clicked, deselects all of its parents
- if (is_child) {
- $cb.parents('.facetwp-depth').each(function() {
- $(this).prev('.facetwp-checkbox').removeClass('checked');
- });
- }
-
- $cb.toggleClass('checked', is_checked);
- FWP.autoload();
- });
-
- $().on('click', '.facetwp-type-checkboxes .facetwp-toggle', function() {
- var $parent = $(this).closest('.facetwp-facet');
- $parent.find('.facetwp-toggle').toggleClass('facetwp-hidden');
- $parent.find('.facetwp-overflow').toggleClass('facetwp-hidden');
- });
-
- $().on('facetwp-loaded', function() {
- $('.facetwp-type-checkboxes .facetwp-overflow').each(function() {
- var num = $(this).find('.facetwp-checkbox').len();
- var $el = $(this).next('.facetwp-toggle');
- $el.text($el.text().replace('{num}', num));
-
- // auto-expand if a checkbox within the overflow is checked
- if (0 < $(this).find('.facetwp-checkbox.checked').len()) {
- $el.trigger('click');
- }
- });
-
- // hierarchy expand / collapse buttons
- $('.facetwp-type-checkboxes').each(function() {
- var $facet = $(this);
- var name = $facet.attr('data-name');
-
- // error handling
- if (Object.keys(FWP.settings).length < 1) {
- return;
- }
-
- // expand children
- if ('yes' === FWP.settings[name]['show_expanded']) {
- $facet.find('.facetwp-depth').addClass('visible');
- }
-
- if (1 > $facet.find('.facetwp-expand').len()) {
-
- // expand groups with selected items
- $facet.find('.facetwp-checkbox.checked').each(function() {
- $(this).parents('.facetwp-depth').addClass('visible');
- });
-
- // add the toggle button
- $facet.find('.facetwp-depth').each(function() {
- var which = $(this).hasClass('visible') ? 'collapse' : 'expand';
- $(this).prev('.facetwp-checkbox').append(' ' + FWP_JSON[which] + ' ');
- });
- }
- });
- });
-
- /* ======== Radio ======== */
-
- FWP.hooks.addAction('facetwp/refresh/radio', function($this, facet_name) {
- var selected_values = [];
- $this.find('.facetwp-radio.checked').each(function() {
- var val = $(this).attr('data-value');
- if ('' !== val) {
- selected_values.push(val);
- }
- });
- FWP.facets[facet_name] = selected_values;
- });
-
- FWP.hooks.addFilter('facetwp/selections/radio', function(output, params) {
- var choices = [];
- $.each(params.selected_values, function(val) {
- var $item = params.el.find('.facetwp-radio[data-value="' + val + '"]');
- if ($item.len()) {
- var choice = $($item.html());
- choice.find('.facetwp-counter').remove();
- choices.push({
- value: val,
- label: choice.text()
- });
- }
- });
- return choices;
- });
-
- $().on('click', '.facetwp-type-radio .facetwp-radio:not(.disabled)', function() {
- var is_checked = $(this).hasClass('checked');
- $(this).closest('.facetwp-facet').find('.facetwp-radio').removeClass('checked');
- if (! is_checked) {
- $(this).addClass('checked');
- }
- FWP.autoload();
- });
-
- /* ======== Date Range ======== */
-
- FWP.hooks.addAction('facetwp/refresh/date_range', function($this, facet_name) {
- var minNode = $this.find('.facetwp-date-min');
- var maxNode = $this.find('.facetwp-date-max');
- var min = (minNode.len()) ? pVal(minNode.nodes[0]) : '';
- var max = (maxNode.len()) ? pVal(maxNode.nodes[0]) : '';
- FWP.facets[facet_name] = ('' !== min || '' !== max) ? [min, max] : [];
- });
-
- FWP.hooks.addFilter('facetwp/selections/date_range', function(output, params) {
- var $el = params.el;
- var vals = params.selected_values;
- var facet_name = $el.attr('data-name');
- var fields = FWP.settings[facet_name].fields;
- var out = '';
-
- if ('exact' == fields) {
- if ('' !== vals[0]) {
- out = vals[0];
- }
- }
- else if ('start_date' == fields) {
- if ('' !== vals[0]) {
- out = '[>=] ' + vals[0];
- }
- }
- else if ('end_date' == fields) {
- if ('' !== vals[1]) {
- out = '[<=] ' + vals[1];
- }
- }
- else if ('both' == fields) {
- if ('' !== vals[0] || '' !== vals[1]) {
- if ('' !== vals[0] && '' !== vals[1]) {
- out = vals[0] + ' - ' + vals[1];
- }
- else if ('' !== vals[0]) {
- out = '[>=] ' + vals[0];
- }
- else if ('' !== vals[1]) {
- out = '[<=] ' + vals[1];
- }
- }
- }
-
- return out;
- });
-
- $().on('facetwp-loaded', function() {
- var $dates = $('.facetwp-type-date_range .facetwp-date:not(.ready)');
-
- if (0 === $dates.len()) {
- return;
- }
-
- $dates.each(function() {
- var $this = $(this);
- var facet_name = $this.closest('.facetwp-facet').attr('data-name');
- var settings = FWP.settings[facet_name];
- var opts = {
- onChange: function(obj) {
- FWP.autoload();
- }
- };
-
- if ('' !== settings.locale) {
- opts.i18n = settings.locale;
- }
-
- if ('' !== settings.format) {
- opts.altFormat = settings.format;
- }
-
- if ('both' == settings.fields) {
- var which = $this.hasClass('facetwp-date-min') ? 'min' : 'max';
- opts.minDate = settings.range[which].minDate;
- opts.maxDate = settings.range[which].maxDate;
- }
- else {
- opts.minDate = settings.range.minDate;
- opts.maxDate = settings.range.maxDate;
- }
-
- opts = FWP.hooks.applyFilters('facetwp/set_options/date_range', opts, {
- 'facet_name': facet_name,
- 'element': $this
- });
-
- $this.addClass('ready'); // add class before fDate()
-
- new fDate(this, opts);
- });
- });
-
- /* ======== Dropdown ======== */
-
- FWP.hooks.addAction('facetwp/refresh/dropdown', function($this, facet_name) {
- var val = $this.find('.facetwp-dropdown').val();
- FWP.facets[facet_name] = val ? [val] : [];
- });
-
- FWP.hooks.addFilter('facetwp/selections/dropdown', function(output, params) {
- var $item = params.el.find('.facetwp-dropdown');
- if ($item.len()) {
- var dd = $item.nodes[0];
- var text = dd.options[dd.selectedIndex].text;
- return text.replace(/\(\d+\)$/, '');
- }
- return '';
- });
-
- // Use jQuery if available for select2
- var $f = ('function' === typeof jQuery) ? jQuery : fUtil;
-
- $f(document).on('change', '.facetwp-type-dropdown select', function() {
- var $facet = $(this).closest('.facetwp-facet');
- var facet_name = $facet.attr('data-name');
-
- if ('' !== $(this).val()) {
- FWP.frozen_facets[facet_name] = 'soft';
- }
- FWP.autoload();
- });
-
- /* ======== fSelect ======== */
-
- FWP.hooks.addAction('facetwp/refresh/fselect', function($this, facet_name) {
- var val = $this.find('select').val();
- if (null === val || '' === val) {
- val = [];
- }
- FWP.facets[facet_name] = Array.isArray(val) ? val : [val];
- });
-
- FWP.hooks.addFilter('facetwp/selections/fselect', function(output, params) {
- var choices = [];
- $.each(params.selected_values, (val) => {
- var $item = params.el.find('option[value="' + val + '"]');
- if ($item.len()) {
- choices.push({
- value: val,
- label: $item.text()
- });
- }
- });
- return choices;
- });
-
- FWP.hooks.addAction('facetwp/loaded', function() {
- if (null !== FWP.active_facet) {
- var facet = FWP.active_facet;
- if ('fselect' == facet.attr('data-type')) {
- var input = facet.find('.facetwp-dropdown').nodes[0];
- if (input.fselect.settings.multiple) {
- input.fselect.open();
- }
- }
- }
- });
-
- $().on('facetwp-loaded', function() {
- $('.facetwp-type-fselect select:not(.fs-hidden)').each(function() {
- var facet_name = $(this).closest('.facetwp-facet').attr('data-name');
- var settings = FWP.settings[facet_name];
-
- settings.optionFormatter = function(label, node) {
- var counter = node.getAttribute('data-counter');
- return (counter) ? label + ' (' + counter + ')' : label;
- };
-
- var opts = FWP.hooks.applyFilters('facetwp/set_options/fselect', settings, {
- 'facet_name': facet_name
- });
-
- fSelect(this, opts);
- });
- });
-
- $().on('fs:changed', function(e) {
- var is_facet = $(e.detail[0]).closest('.facetwp-type-fselect').len() > 0;
- if (! FWP.is_refresh && is_facet) {
- FWP.autoload();
- }
- });
-
- $().on('fs:closed', function() {
- FWP.active_facet = null;
- });
-
- /* ======== Hierarchy ======== */
-
- FWP.hooks.addAction('facetwp/refresh/hierarchy', function($this, facet_name) {
- var selected_values = [];
- $this.find('.facetwp-link.checked').each(function() {
- selected_values.push(
- $(this).attr('data-value')
- );
- });
- FWP.facets[facet_name] = selected_values;
- });
-
- FWP.hooks.addFilter('facetwp/selections/hierarchy', function(output, params) {
- var $item = params.el.find('.facetwp-link.checked');
- return $item.len() ? $item.text() : '';
- });
-
- $().on('click', '.facetwp-type-hierarchy .facetwp-link', function() {
- $(this).closest('.facetwp-facet').find('.facetwp-link').removeClass('checked');
- if ('' !== $(this).attr('data-value')) {
- $(this).addClass('checked');
- }
- FWP.autoload();
- });
-
- $().on('click', '.facetwp-type-hierarchy .facetwp-toggle', function() {
- var $parent = $(this).closest('.facetwp-facet');
- $parent.find('.facetwp-toggle').toggleClass('facetwp-hidden');
- $parent.find('.facetwp-overflow').toggleClass('facetwp-hidden');
- });
-
- /* ======== Number Range ======== */
-
- FWP.hooks.addAction('facetwp/refresh/number_range', function($this, facet_name) {
- var min = $this.find('.facetwp-number-min').val() || '';
- var max = $this.find('.facetwp-number-max').val() || '';
- FWP.facets[facet_name] = ('' !== min || '' !== max) ? [min, max] : [];
- });
-
- FWP.hooks.addFilter('facetwp/selections/number_range', function(output, params) {
- var $el = params.el;
- var vals = params.selected_values;
- var facet_name = $el.attr('data-name');
- var fields = FWP.settings[facet_name].fields;
- var out = '';
-
- if ('exact' == fields) {
- if ('' !== vals[0]) {
- out = vals[0];
- }
- }
- else if ('min' == fields) {
- if ('' !== vals[0]) {
- out = '[>=] ' + vals[0];
- }
- }
- else if ('max' == fields) {
- if ('' !== vals[1]) {
- out = '[<=] ' + vals[1];
- }
- }
- else if ('both' == fields) {
- if ('' !== vals[0] || '' !== vals[1]) {
- if ('' !== vals[0] && '' !== vals[1]) {
- out = vals[0] + ' - ' + vals[1];
- }
- else if ('' !== vals[0]) {
- out = '[>=] ' + vals[0];
- }
- else if ('' !== vals[1]) {
- out = '[<=] ' + vals[1];
- }
- }
- }
-
- return out;
- });
-
- $().on('keyup', '.facetwp-type-number_range .facetwp-number', function(e) {
- if (13 === e.which && ! FWP.is_refresh) {
- FWP.autoload();
- }
- });
-
- $().on('click', '.facetwp-type-number_range .facetwp-submit', function() {
- FWP.refresh();
- });
-
- /* ======== Proximity ======== */
-
- $().on('facetwp-loaded', function() {
- var $locations = $('.facetwp-location');
-
- if ($locations.len() < 1) {
- return;
- }
-
- if (! FWP.loaded) {
- window.FWP_MAP = window.FWP_MAP || {};
- FWP_MAP.sessionToken = new google.maps.places.AutocompleteSessionToken();
- FWP_MAP.autocompleteService = new google.maps.places.AutocompleteService();
- FWP_MAP.placesService = new google.maps.places.PlacesService(
- document.createElement('div')
- );
-
- // We need FWP_JSON available to grab the queryDelay
- $().on('input', '.facetwp-location', FWP.helper.debounce(function(e) {
- var val = $(e.target).val();
- var $facet = $(e.target).closest('.facetwp-facet');
-
- if ('' == val || val.length < FWP_JSON['proximity']['minLength']) {
- $facet.find('.location-results').addClass('facetwp-hidden');
- return;
- }
-
- var options = FWP_JSON['proximity']['autocomplete_options'];
- options.sessionToken = FWP_MAP.sessionToken;
- options.input = val;
-
- FWP_MAP.autocompleteService.getPredictions(options, function(results, status) {
- if (status === google.maps.places.PlacesServiceStatus.OK) {
- var html = '';
-
- results.forEach(function(result, index) {
- var css = (0 === index) ? ' active' : '';
- html += '';
- html += '' + result.structured_formatting.main_text + ' ';
- html += '' + result.structured_formatting.secondary_text + ' ';
- html += '' + result.description + ' ';
- html += '
';
- });
-
- html += '';
-
- $facet.find('.location-results').html(html).removeClass('facetwp-hidden');
- }
- });
- }, FWP_JSON['proximity']['queryDelay']));
- }
-
- $locations.each(function(el, idx) {
- $(this).trigger('keyup');
- });
- });
-
- $().on('click', '.location-result', function() {
- var $facet = $(this).closest('.facetwp-facet');
- var place_id = $(this).attr('data-id');
- var description = $(this).find('.result-description').text();
-
- FWP_MAP.placesService.getDetails({
- placeId: place_id,
- fields: ['geometry']
- }, function(place, status) {
- if (status === google.maps.places.PlacesServiceStatus.OK) {
- $facet.find('.facetwp-lat').val(place.geometry.location.lat());
- $facet.find('.facetwp-lng').val(place.geometry.location.lng());
- FWP.autoload();
- }
- });
-
- $('.facetwp-location').val(description);
- $('.location-results').addClass('facetwp-hidden');
- });
-
- $().on('click', '.facetwp-type-proximity .locate-me', function(e) {
- var $this = $(this);
- var $facet = $this.closest('.facetwp-facet');
- var $input = $facet.find('.facetwp-location');
- var $lat = $facet.find('.facetwp-lat');
- var $lng = $facet.find('.facetwp-lng');
-
- // reset
- if ($this.hasClass('f-reset')) {
- $lat.val('');
- $lng.val('');
- $input.val('');
- FWP.autoload();
- return;
- }
-
- // loading icon
- $this.addClass('f-loading');
-
- // HTML5 geolocation
- navigator.geolocation.getCurrentPosition(function(position) {
- var lat = position.coords.latitude;
- var lng = position.coords.longitude;
-
- $lat.val(lat);
- $lng.val(lng);
-
- var geocoder = new google.maps.Geocoder();
- var latlng = {lat: parseFloat(lat), lng: parseFloat(lng)};
- geocoder.geocode({'location': latlng}, function(results, status) {
- if (status === google.maps.GeocoderStatus.OK) {
- $input.val(results[0].formatted_address);
- }
- else {
- $input.val('Your location');
- }
- $this.addClass('f-reset');
- FWP.autoload();
- });
-
- $this.removeClass('f-loading');
-
- FWP.hooks.doAction('facetwp/geolocation/success', {
- 'facet': $facet,
- 'position': position
- });
- },
- function(error) {
- $this.removeClass('f-loading');
-
- FWP.hooks.doAction('facetwp/geolocation/error', {
- 'facet': $facet,
- 'error': error
- });
- });
- });
-
- $().on('keyup', '.facetwp-location', function(e) {
- var $facet = $(this).closest('.facetwp-facet');
- var method = ('' !== $(this).val()) ? 'addClass' : 'removeClass';
- $facet.find('.locate-me')[method]('f-reset');
-
- if (38 === e.which || 40 === e.which || 13 === e.which) {
- var curr_index = parseInt($facet.find('.location-result.active').attr('data-index'));
- var max_index = parseInt($facet.find('.location-result').last().attr('data-index'));
- }
-
- if (38 === e.which) { // up
- var new_index = (0 < curr_index) ? (curr_index - 1) : max_index;
- $facet.find('.location-result.active').removeClass('active');
- $facet.find('.location-result[data-index="' + new_index + '"]').addClass('active');
- }
- else if (40 === e.which) { // down
- var new_index = (curr_index < max_index) ? (curr_index + 1) : 0;
- $facet.find('.location-result.active').removeClass('active');
- $facet.find('.location-result[data-index="' + new_index + '"]').addClass('active');
- }
- else if (13 === e.which) { // enter
- $facet.find('.location-result.active').trigger('click');
- }
- });
-
- var hideDropdown = function(e) {
- var $el = $(e.target);
- var $wrap = $el.closest('.facetwp-input-wrap');
-
- if ($wrap.len() < 1 || $el.hasClass('f-reset')) {
- $('.location-results').addClass('facetwp-hidden');
- }
- };
-
- $().on('click', hideDropdown);
- $().on('focusout', hideDropdown);
-
- $().on('focusin', '.facetwp-location', function() {
- var $facet = $(this).closest('.facetwp-facet');
- if ('' != $(this).val()) {
- $facet.find('.location-results').removeClass('facetwp-hidden');
- }
- });
-
- $().on('change', '.facetwp-radius', function() {
- var $facet = $(this).closest('.facetwp-facet');
- if ('' !== $facet.find('.facetwp-location').val()) {
- FWP.autoload();
- }
- });
-
- $().on('input', '.facetwp-radius-slider', function(e) {
- var $facet = $(this).closest('.facetwp-facet');
- $facet.find('.facetwp-radius-dist').text(e.target.value);
- });
-
- FWP.hooks.addAction('facetwp/refresh/proximity', function($this, facet_name) {
- var lat = $this.find('.facetwp-lat').val();
- var lng = $this.find('.facetwp-lng').val();
- var radius = $this.find('.facetwp-radius').val();
- var location = encodeURIComponent($this.find('.facetwp-location').val());
- FWP.frozen_facets[facet_name] = 'hard';
- FWP.facets[facet_name] = ('' !== lat && 'undefined' !== typeof lat) ?
- [lat, lng, radius, location] : [];
- });
-
- FWP.hooks.addFilter('facetwp/selections/proximity', function(label, params) {
- return FWP_JSON['proximity']['clearText'];
- });
-
- /* ======== Search ======== */
-
- FWP.logic.search = {
- delay_refresh: FWP.helper.debounce(function(facet_name) {
- FWP.frozen_facets[facet_name] = 'soft';
- FWP.autoload();
- }, 500)
- };
-
- FWP.hooks.addAction('facetwp/refresh/search', function($this, facet_name) {
- var $input = $this.find('.facetwp-search');
- FWP.facets[facet_name] = $input.val() || '';
- $this.find('.facetwp-icon').addClass('f-loading');
- });
-
- FWP.hooks.addAction('facetwp/loaded', function() {
- $('.facetwp-type-search .facetwp-icon').removeClass('f-loading');
- });
-
- $().on('keyup', '.facetwp-type-search .facetwp-search', function(e) {
- if (FWP.is_refresh) {
- return;
- }
-
- var $facet = $(this).closest('.facetwp-facet');
- var facet_name = $facet.attr('data-name');
-
- if ('undefined' !== typeof FWP.settings[facet_name]) {
- if ('yes' === FWP.settings[facet_name]['auto_refresh']) {
- FWP.logic.search['delay_refresh'](facet_name);
- }
- else if (13 === e.keyCode) {
- FWP.autoload();
- }
- }
- });
-
- $().on('click', '.facetwp-type-search .facetwp-icon', function() {
- if (! FWP.is_refresh) {
- FWP.autoload();
- }
- });
-
- /* ======== Slider ======== */
-
- FWP.hooks.addAction('facetwp/refresh/slider', function($this, facet_name) {
- FWP.facets[facet_name] = [];
-
- var $active = FWP.active_facet;
- var url_var = FWP.helper.getUrlVar(facet_name);
-
- if (null !== $active && facet_name === $active.attr('data-name')) {
- var node = $active.find('.facetwp-slider').nodes[0];
- if ('undefined' !== typeof node.noUiSlider) {
- FWP.facets[facet_name] = node.noUiSlider.get();
- }
- }
- else if (false !== url_var) {
- FWP.facets[facet_name] = url_var.replace('%2C', ',').split(',');
- }
-
- // prevent changes during loading
- $this.find('.facetwp-slider').attr('disabled', true);
- });
-
- FWP.hooks.addAction('facetwp/loaded', function() {
- $('.facetwp-type-slider .facetwp-slider').nodes.forEach(node => node.removeAttribute('disabled'));
- });
-
- FWP.hooks.addAction('facetwp/set_label/slider', function($this) {
- var facet_name = $this.attr('data-name');
- var min = FWP.settings[facet_name]['lower'];
- var max = FWP.settings[facet_name]['upper'];
- var format = FWP.settings[facet_name]['format'];
- var opts = {
- decimal_separator: FWP.settings[facet_name]['decimal_separator'],
- thousands_separator: FWP.settings[facet_name]['thousands_separator']
- };
-
- var prefix = FWP.settings[facet_name]['prefix'];
- var suffix = FWP.settings[facet_name]['suffix'];
-
- if ( min === max ) {
- var label = prefix + nummy(min).format(format, opts) + suffix;
- }
- else {
- var label = prefix + nummy(min).format(format, opts) + suffix + ' — ' +
- prefix + nummy(max).format(format, opts) + suffix;
- }
- $this.find('.facetwp-slider-label').html(label);
- });
-
- FWP.hooks.addFilter('facetwp/selections/slider', function(output, params) {
- var $item = params.el.find('.facetwp-slider-label');
- return $item.len() ? $item.text() : '';
- });
-
- $().on('facetwp-loaded', function() {
- $('.facetwp-type-slider .facetwp-slider').each(function() {
- var $this = $(this);
- var $parent = $this.closest('.facetwp-facet');
- var facet_name = $parent.attr('data-name');
- var opts = FWP.settings[facet_name];
-
- // custom slider options
- var slider_opts = FWP.hooks.applyFilters('facetwp/set_options/slider', {
- range: opts.range,
- start: opts.start,
- step: parseFloat(opts.step),
- connect: true
- }, { 'facet_name': facet_name });
-
- if ($this.hasClass('ready')) {
- $this.nodes[0].noUiSlider.updateOptions({
- range: slider_opts.range
- }, false);
- }
- else {
-
- // fail on slider already initialized
- if ('undefined' !== typeof this.noUiSlider) {
- return;
- }
-
- // fail if start values are null
- if (null === slider_opts.start[0]) {
- return;
- }
-
- // fail on invalid ranges
- if (parseFloat(opts.range.min) > parseFloat(opts.range.max)) {
- FWP.settings[facet_name]['lower'] = opts.range.min;
- FWP.settings[facet_name]['upper'] = opts.range.max;
- FWP.hooks.doAction('facetwp/set_label/slider', $parent);
- return;
- }
-
- // disable the UI if only 1 value
- if (parseFloat(opts.range.min) == parseFloat(opts.range.max)) {
- $this.attr('data-disabled', 'true');
- }
-
- var slider = this;
- noUiSlider.create(slider, slider_opts);
- slider.noUiSlider.on('update', function(values, handle) {
- FWP.settings[facet_name]['lower'] = values[0];
- FWP.settings[facet_name]['upper'] = values[1];
- FWP.hooks.doAction('facetwp/set_label/slider', $parent);
- });
- slider.noUiSlider.on('set', function() {
- FWP.active_facet = $this.closest('.facetwp-facet');
- FWP.autoload();
- });
-
- $this.addClass('ready');
- }
- });
-
- // hide reset buttons
- $('.facetwp-type-slider').each(function() {
- var name = $(this).attr('data-name');
- var $button = $(this).find('.facetwp-slider-reset');
- var method = FWP.facets[name].length ? 'removeClass' : 'addClass';
- $button[method]('facetwp-hidden');
- });
- });
-
- $().on('click', '.facetwp-type-slider .facetwp-slider-reset', function() {
- var facet_name = $(this).closest('.facetwp-facet').attr('data-name');
- FWP.reset(facet_name);
- });
-
- /* ======== Rating ======== */
-
- FWP.hooks.addAction('facetwp/refresh/rating', function($this, facet_name) {
- var selected_values = [];
- $this.find('.facetwp-star.selected').each(function() {
- var val = $(this).attr('data-value');
- if ('' != val) {
- selected_values.push(val);
- }
- });
- FWP.facets[facet_name] = selected_values;
- });
-
- $().on('mouseover', '.facetwp-star', function() {
- var $facet = $(this).closest('.facetwp-facet');
-
- if ($(this).hasClass('selected')) {
- $facet.find('.facetwp-star-label').text(FWP_JSON['rating']['Undo']);
- }
- else {
- var label = ('5' == $(this).attr('data-value')) ? '' : FWP_JSON['rating']['& up'];
- $facet.find('.facetwp-star-label').text(label);
- $facet.find('.facetwp-counter').text('(' + $(this).attr('data-counter') + ')');
- }
- });
-
- $().on('mouseout', '.facetwp-star', function() {
- var $facet = $(this).closest('.facetwp-facet');
- $facet.find('.facetwp-star-label').text('');
- $facet.find('.facetwp-counter').text('');
- });
-
- $().on('click', '.facetwp-star', function() {
- var $facet = $(this).closest('.facetwp-facet');
- var is_selected = $(this).hasClass('selected');
- $facet.find('.facetwp-star').removeClass('selected');
- if (! is_selected) {
- $(this).addClass('selected');
- }
- FWP.autoload();
- });
-
- /* ======== Sort ======== */
-
- FWP.hooks.addAction('facetwp/refresh/sort', function($this, facet_name) {
- var val = $this.find('select').val();
- FWP.facets[facet_name] = val ? [val] : [];
- });
-
- $().on('change', '.facetwp-type-sort select', function() {
- var $facet = $(this).closest('.facetwp-facet');
- var facet_name = $facet.attr('data-name');
-
- if ('' !== $(this).val()) {
- FWP.frozen_facets[facet_name] = 'hard';
- }
- FWP.autoload();
- });
-
- /* ======== Pager ======== */
-
- FWP.hooks.addAction('facetwp/refresh/pager', function($this, facet_name) {
- FWP.facets[facet_name] = [];
- });
-
- FWP.hooks.addFilter('facetwp/template_html', function(resp, params) {
- if (FWP.is_load_more) {
- FWP.is_load_more = false;
-
- // layout builder
- if ( 0 < $('.fwpl-layout').len() ) {
- var layout = $(params.html).find('.fwpl-layout').html();
- $('.fwpl-layout').append(layout);
- }
- // other
- else {
- $('.facetwp-template').append(params.html);
- }
- return true;
- }
- return resp;
- });
-
- $().on('click', '.facetwp-load-more', function() {
- var loading_text = $(this).attr('data-loading');
- $(this).html(loading_text);
-
- FWP.is_load_more = true; // set the flag
- FWP.load_more_paged += 1; // next page
- FWP.paged = FWP.load_more_paged; // grab the next page of results
- FWP.soft_refresh = true; // don't process facets
- FWP.refresh();
- });
-
- $().on('facetwp-loaded', function() {
- var is_visible = (FWP.settings.pager.page < FWP.settings.pager.total_pages);
- var method = is_visible ? 'removeClass' : 'addClass';
- $('.facetwp-load-more')[method]('facetwp-hidden');
- });
-
- $().on('facetwp-refresh', function() {
- if (! FWP.loaded || ! FWP.is_load_more) {
- FWP.load_more_paged = 1;
- }
- });
-
- /* ======== Reset ======== */
-
- $().on('click', '.facetwp-reset', function() {
- let values = $(this).nodes[0]._facets;
- FWP.reset(values);
- });
-
- $().on('facetwp-loaded', function() {
- if (! FWP.loaded) {
- $('.facetwp-reset').each(function() {
- let $this = $(this);
- let mode = $this.attr('data-mode');
- let values = $this.attr('data-values');
-
- values = (null == values) ? Object.keys(FWP.facets) : values.split(',');
-
- if ('exclude' == mode) {
- values = Object.keys(FWP.facets).filter(name => {
- return !values.includes(name);
- });
- }
-
- // store the target facets (array) within the DOM element
- $this.nodes[0]._facets = values;
- });
- }
-
- // hide the reset if its target facets are all empty
- $('.facetwp-hide-empty').each(function() {
- let $this = $(this);
- let $wrap = $this.closest('.facetwp-facet');
- let facets = $this.nodes[0]._facets;
- let all_empty = facets.every(val => FWP.facets[val].length < 1);
- all_empty ? $wrap.addClass('facetwp-hidden') : $wrap.removeClass('facetwp-hidden');
- });
- });
-
-})(fUtil);
diff --git a/wp/wp-content/plugins/facetwp/assets/js/src/front.js b/wp/wp-content/plugins/facetwp/assets/js/src/front.js
deleted file mode 100644
index aaa1f70b..00000000
--- a/wp/wp-content/plugins/facetwp/assets/js/src/front.js
+++ /dev/null
@@ -1,659 +0,0 @@
-window.FWP = (($) => {
-
- class FacetWP {
- constructor() {
- this.import();
- this.bindEvents();
- }
-
- import() {
- if ('undefined' !== typeof FWP) {
- $.each(FWP, (val, key) => this[key] = val);
- }
- }
-
- init() {
- var FWP = this;
-
- this.setDefaults();
-
- if (0 < $('.facetwp-sort').len()) {
- FWP.extras.sort = 'default';
- }
-
- if (0 < $('.facetwp-pager').len()) {
- FWP.extras.pager = true;
- }
-
- if (0 < $('.facetwp-per-page').len()) {
- FWP.extras.per_page = 'default';
- }
-
- if (0 < $('.facetwp-counts').len()) {
- FWP.extras.counts = true;
- }
-
- if (0 < $('.facetwp-selections').len()) {
- FWP.extras.selections = true;
- }
-
- // Make sure there's a template
- var has_template = $('.facetwp-template').len() > 0;
-
- if (! has_template) {
- var has_loop = FWP.helper.detectLoop(document.body);
-
- if (has_loop) {
- $(has_loop).addClass('facetwp-template');
- }
- else {
- return;
- }
- }
-
- var $div = $('.facetwp-template').first();
- FWP.template = $div.attr('data-name') ? $div.attr('data-name') : 'wp';
-
- // Facets inside the template?
- if ($div.find('.facetwp-facet').len() > 0) {
- console.error('Facets should not be inside the "facetwp-template" container');
- }
-
- FWP.hooks.doAction('facetwp/ready');
-
- // Generate the user selections
- if (FWP.extras.selections) {
- FWP.hooks.addAction('facetwp/loaded', () => {
-
- var selections = '';
- var skipped = ['pager', 'reset', 'sort'];
-
- $.each(FWP.facets, (val, key) => {
- if (val.length < 1 || ! $.isset(FWP.settings.labels[key]) || skipped.includes(FWP.facet_type[key])) {
- return true; // skip facet
- }
-
- var choices = val;
- var $el = $('.facetwp-facet-' + key);
- var facet_type = $el.attr('data-ui') || $el.attr('data-type');
- choices = FWP.hooks.applyFilters('facetwp/selections/' + facet_type, choices, {
- 'el': $el,
- 'selected_values': choices
- });
-
- if (choices.length) {
- if ('string' === typeof choices) {
- choices = [{ value: '', label: choices }];
- }
- else if (! $.isset(choices[0].label)) {
- choices = [{ value: '', label: choices[0] }];
- }
- }
-
- var values = '';
- $.each(choices, (choice) => {
- values += '' + FWP.helper.escapeHtml(choice.label) + ' ';
- });
-
- selections += '' + FWP.settings.labels[key] + ': ' + values + ' ';
- });
-
- if ('' !== selections) {
- selections = '';
- }
-
- $('.facetwp-selections').html(selections);
- });
- }
-
- FWP.refresh();
- }
-
- setDefaults() {
- let defaults = {
- 'facets': {},
- 'template': null,
- 'settings': {},
- 'is_reset': false,
- 'is_refresh': false,
- 'is_bfcache': false,
- 'is_hash_click': false,
- 'is_load_more': false,
- 'auto_refresh': true,
- 'soft_refresh': false,
- 'frozen_facets': {},
- 'active_facet': null,
- 'facet_type': {},
- 'loaded': false,
- 'extras': {},
- 'paged': 1
- };
-
- for (var prop in defaults) {
- if (!$.isset(this[prop])) {
- this[prop] = defaults[prop];
- }
- }
- }
-
- refresh() {
- FWP.is_refresh = true;
-
- // Add the loading overlay
- FWP.toggleOverlay('on');
-
- // Load facet DOM values
- if (! FWP.is_reset) {
- FWP.parseFacets();
- }
-
- // Check the URL on pageload
- if (! FWP.loaded) {
- FWP.loadFromHash();
- }
-
- // Fire a notification event
- $().trigger('facetwp-refresh');
-
- // Trigger window.onpopstate
- if (FWP.loaded && ! FWP.is_popstate && ! FWP.is_load_more) {
- FWP.setHash();
- }
-
- // Preload?
- if (! FWP.loaded && ! FWP.is_bfcache && $.isset(FWP_JSON.preload_data)) {
- FWP.render(FWP_JSON.preload_data);
- }
- else {
- FWP.fetchData();
- }
-
- // Unfreeze any soft-frozen facets
- $.each(FWP.frozen_facets, (type, name) => {
- if ('hard' !== type) {
- delete FWP.frozen_facets[name];
- }
- });
-
- // Cleanup
- FWP.paged = 1;
- FWP.soft_refresh = false;
- FWP.is_refresh = false;
- FWP.is_reset = false;
- }
-
- autoload() {
- if (FWP.auto_refresh && ! FWP.is_refresh) {
- FWP.refresh();
- }
- }
-
- parseFacets() {
- FWP.facets = {};
-
- $('.facetwp-facet').each(function() {
- var $this = $(this);
- var facet_name = $this.attr('data-name');
- var facet_type = $this.attr('data-type');
- var is_ignored = $this.hasClass('facetwp-ignore');
-
- if (null !== $this.attr('data-ui')) {
- facet_type = $this.attr('data-ui');
- }
-
- // Store the facet type
- FWP.facet_type[facet_name] = facet_type;
-
- // Plugin hook
- if (! is_ignored) {
- FWP.hooks.doAction('facetwp/refresh/' + facet_type, $this, facet_name);
- }
- });
- }
-
- buildQueryString() {
- var query_string = '';
-
- // Non-FacetWP URL variables
- var hash = [];
- var get_str = window.location.search.replace('?', '').split('&');
- $.each(get_str, (val) => {
- var param_name = val.split('=')[0];
- if (0 !== param_name.indexOf(FWP_JSON.prefix)) {
- hash.push(val);
- }
- });
- hash = hash.join('&');
-
- // FacetWP URL variables
- var fwp_vars = Object.assign({}, FWP.facets);
-
- // Add pagination to the URL hash
- if (1 < FWP.paged) {
- fwp_vars['paged'] = FWP.paged;
- }
-
- // Add "per page" to the URL hash
- if (FWP.extras.per_page && 'default' !== FWP.extras.per_page) {
- fwp_vars['per_page'] = FWP.extras.per_page;
- }
-
- // Add sorting to the URL hash
- if (FWP.extras.sort && 'default' !== FWP.extras.sort) {
- fwp_vars['sort'] = FWP.extras.sort;
- }
-
- fwp_vars = FWP.helper.serialize(fwp_vars, FWP_JSON.prefix);
-
- if ('' !== hash) {
- query_string += hash;
- }
- if ('' !== fwp_vars) {
- query_string += ('' !== hash ? '&' : '') + fwp_vars;
- }
-
- return query_string;
- }
-
- setHash() {
- var query_string = FWP.buildQueryString();
-
- if ('' !== query_string) {
- query_string = '?' + query_string;
- }
-
- if (history.pushState) {
- history.pushState(null, null, window.location.pathname + query_string);
- }
-
- // Update FWP_HTTP.get
- FWP_HTTP.get = {};
- window.location.search.replace('?', '').split('&').forEach((el) => {
- var item = el.split('=');
-
- if ('' != item[0]) {
- FWP_HTTP.get[item[0]] = item[1];
- }
- });
- }
-
- loadFromHash() {
- var hash = [];
- var get_str = window.location.search.replace('?', '').split('&');
- $.each(get_str, (val) => {
- var param_name = val.split('=')[0];
- if (0 === param_name.indexOf(FWP_JSON.prefix)) {
- hash.push(val.replace(FWP_JSON.prefix, ''));
- }
- });
- hash = hash.join('&');
-
- // Reset facet values
- $.each(FWP.facets, (val, key) => {
- FWP.facets[key] = [];
- });
-
- FWP.paged = 1;
- FWP.extras.sort = 'default';
-
- if ('' !== hash) {
- hash = hash.split('&');
- $.each(hash, (chunk) => {
- var obj = chunk.split('=')[0];
- var val = chunk.split('=')[1];
-
- if ('paged' === obj) {
- FWP.paged = val;
- }
- else if ('per_page' === obj || 'sort' === obj) {
- FWP.extras[obj] = val;
- }
- else if ('' !== val) {
- var type = $.isset(FWP.facet_type[obj]) ? FWP.facet_type[obj] : '';
- if ('search' === type || 'autocomplete' === type) {
- FWP.facets[obj] = decodeURIComponent(val);
- }
- else {
- FWP.facets[obj] = decodeURIComponent(val).split(',');
- }
- }
- });
- }
- }
-
- buildPostData() {
- return {
- 'facets': FWP.facets,
- 'frozen_facets': FWP.frozen_facets,
- 'http_params': FWP_HTTP,
- 'template': FWP.template,
- 'extras': FWP.extras,
- 'soft_refresh': FWP.soft_refresh ? 1 : 0,
- 'is_bfcache': FWP.is_bfcache ? 1 : 0,
- 'first_load': FWP.loaded ? 0 : 1,
- 'paged': FWP.paged
- };
- }
-
- fetchData() {
- var endpoint = ('wp' === FWP.template) ? document.URL : FWP_JSON.ajaxurl;
- var data = {
- action: 'facetwp_refresh',
- data: FWP.buildPostData()
- };
-
- var settings = {
- dataType: 'text', // better JSON error handling
- done: (resp) => {
- try {
- var json = JSON.parse(resp);
- FWP.render(json);
- }
- catch(e) {
- var pos = resp.indexOf('{"facets');
- if (-1 < pos) {
- var json = JSON.parse(resp.substr(pos));
- FWP.render(json);
- }
- else {
- $('.facetwp-template').text('FacetWP was unable to auto-detect the post listing');
- console.log(resp);
- }
- }
- },
- fail: (err) => {
- console.log(err);
- }
- };
-
- settings = FWP.hooks.applyFilters('facetwp/ajax_settings', settings);
-
- $.post(endpoint, data, settings);
- }
-
- render(response) {
- FWP.response = response;
-
- // Don't render CSS-based (or empty) templates on pageload
- // The template has already been pre-loaded
- if (('wp' === FWP.template || '' === response.template) && ! FWP.loaded && ! FWP.is_bfcache) {
- var inject = false;
- }
- else {
- var inject = response.template;
-
- if ('wp' === FWP.template) {
- var obj = $(response.template);
- var $tpl = obj.find('.facetwp-template');
-
- if ($tpl.len() < 1) {
- var loop = FWP.helper.detectLoop(obj.nodes[0]);
-
- if (loop) {
- $tpl = $(loop).addClass('facetwp-template');
- }
- }
-
- if ($tpl.len() > 0) {
- var inject = $tpl.html();
- }
- else {
- // Fallback until "loop_no_results" action is added to WP core
- var inject = FWP_JSON['no_results_text'];
- }
- }
- }
-
- if (false !== inject) {
- if (! FWP.hooks.applyFilters('facetwp/template_html', false, { 'response': response, 'html': inject })) {
- $('.facetwp-template').html(inject);
- }
- }
-
- // Populate each facet box
- $.each(response.facets, (val, name) => {
- $('.facetwp-facet-' + name).html(val);
- });
-
- // Populate the counts
- if ($.isset(response.counts)) {
- $('.facetwp-counts').html(response.counts);
- }
-
- // Populate the pager
- if ($.isset(response.pager)) {
- $('.facetwp-pager').html(response.pager);
- }
-
- // Populate the "per page" box
- if ($.isset(response.per_page)) {
- $('.facetwp-per-page').html(response.per_page);
- if ('default' !== FWP.extras.per_page) {
- $('.facetwp-per-page-select').val(FWP.extras.per_page);
- }
- }
-
- // Populate the sort box
- if ($.isset(response.sort)) {
- $('.facetwp-sort').html(response.sort);
- $('.facetwp-sort-select').val(FWP.extras.sort);
- }
-
- // Populate the settings object (iterate to preserve static facet settings)
- $.each(response.settings, (val, key) => {
- FWP.settings[key] = val;
- });
-
- // WP Playlist support
- if ('function' === typeof WPPlaylistView) {
- $('.facetwp-template .wp-playlist').each((item) => {
- return new WPPlaylistView({ el: item });
- });
- }
-
- // Fire a notification event
- $().trigger('facetwp-loaded');
-
- // Allow final actions
- FWP.hooks.doAction('facetwp/loaded');
-
- // Remove the loading overlay
- FWP.toggleOverlay('off');
-
- // Clear the active facet
- FWP.active_facet = null;
-
- // Detect "back-forward" cache
- FWP.is_bfcache = true;
-
- // Done loading?
- FWP.loaded = true;
- }
-
- reset(facets) {
- FWP.parseFacets();
-
- var opts = {};
-
- if ('string' === typeof facets) {
- opts[facets] = '';
- }
- else if (Array.isArray(facets)) {
- $.each(facets, (facet_name) => {
- opts[facet_name] = '';
- });
- }
- else if ('object' === typeof facets && !! facets) {
- opts = facets;
- }
-
- var reset_all = Object.keys(opts).length < 1;
-
- $.each(FWP.facets, (vals, facet_name) => {
- var has_reset = $.isset(opts[facet_name]);
- var selected_vals = Array.isArray(vals) ? vals : [vals];
-
- if (has_reset && -1 < selected_vals.indexOf(opts[facet_name])) {
- var pos = selected_vals.indexOf(opts[facet_name]);
- selected_vals.splice(pos, 1); // splice() is mutable!
- FWP.facets[facet_name] = selected_vals;
- }
-
- if (has_reset && (selected_vals.length < 1 || '' === opts[facet_name])) {
- delete FWP.frozen_facets[facet_name];
- }
-
- if (reset_all || (has_reset && '' === opts[facet_name])) {
- FWP.facets[facet_name] = [];
- }
- });
-
- if (reset_all) {
- FWP.extras.per_page = 'default';
- FWP.extras.sort = 'default';
- FWP.frozen_facets = {};
- }
-
- FWP.hooks.doAction('facetwp/reset');
- FWP.is_reset = true;
- FWP.refresh();
- }
-
- toggleOverlay(which) {
- var method = ('on' === which) ? 'addClass' : 'removeClass';
- $('.facetwp-facet')[method]('is-loading');
- }
-
- bindEvents() {
- window.addEventListener('popstate', () => {
-
- // Detect browser "back-foward" cache
- if (FWP.is_bfcache) {
- FWP.loaded = false;
- }
-
- if ((FWP.loaded || FWP.is_bfcache) && ! FWP.is_refresh && ! FWP.is_hash_click) {
- FWP.is_popstate = true;
- FWP.refresh();
- FWP.is_popstate = false;
- }
-
- FWP.is_hash_click = false;
- });
-
- // Prevent hash clicks from triggering a refresh
- $().on('click', 'a[href^="#"]', () => {
- FWP.is_hash_click = true;
- });
-
- // Click on a user selection
- $().on('click', '.facetwp-selections .facetwp-selection-value', function() {
- if (FWP.is_refresh) {
- return;
- }
-
- var facet_name = $(this).closest('li').attr('data-facet');
- var facet_value = $(this).attr('data-value');
-
- if ('' != facet_value) {
- var obj = {};
- obj[facet_name] = facet_value;
- FWP.reset(obj);
- }
- else {
- FWP.reset(facet_name);
- }
- });
-
- // Pagination
- $().on('click', '.facetwp-page[data-page]', function() {
- $('.facetwp-page').removeClass('active');
- $(this).addClass('active');
-
- FWP.paged = $(this).attr('data-page');
- FWP.soft_refresh = true;
- FWP.refresh();
- });
-
- // Use jQuery if available for select2
- var $f = ('function' === typeof jQuery) ? jQuery : fUtil;
-
- // Per page
- $f(document).on('change', '.facetwp-per-page-select', function() {
- FWP.extras.per_page = $(this).val();
- FWP.soft_refresh = true;
- FWP.autoload();
- });
-
- // Sorting
- $f(document).on('change', '.facetwp-sort-select', function() {
- FWP.extras.sort = $(this).val();
- FWP.soft_refresh = true;
- FWP.autoload();
- });
-
- $f(() => {
- this.init();
- });
- }
- }
-
- FacetWP.prototype.helper = {
- getUrlVar: (name) => {
- var name = FWP_JSON.prefix + name;
- var url_vars = window.location.search.replace('?', '').split('&');
- for (var i = 0; i < url_vars.length; i++) {
- var item = url_vars[i].split('=');
- if (item[0] === name) {
- return item[1];
- }
- }
- return false;
- },
- debounce: (func, wait) => {
- var timeout;
- return function(...args) {
- var boundFunc = func.bind(this, ...args);
- clearTimeout(timeout);
- timeout = setTimeout(boundFunc, wait);
- };
- },
- serialize: (obj, prefix) => {
- var str = [];
- var prefix = $.isset(prefix) ? prefix : '';
- for (var p in obj) {
- if ('' != obj[p]) { // Needs to be "!=" instead of "!=="
- str.push(prefix + encodeURIComponent(p) + '=' + encodeURIComponent(obj[p]));
- }
- }
- return str.join('&');
- },
- escapeHtml: (text) => {
- var map = {
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"',
- "'": '''
- };
- return text.replace(/[&<>"']/g,(m) => map[m]).trim();
- },
- detectLoop: (node) => {
- var curNode = null;
- var iterator = document.createNodeIterator(node, NodeFilter.SHOW_COMMENT, () => {
- return NodeFilter.FILTER_ACCEPT; /* IE expects a function */
- }, false);
-
- while (curNode = iterator.nextNode()) {
- if (8 === curNode.nodeType && 'fwp-loop' === curNode.nodeValue) {
- return curNode.parentNode;
- }
- }
-
- return false;
- }
- };
-
- return new FacetWP();
-
-})(fUtil);
diff --git a/wp/wp-content/plugins/facetwp/assets/js/src/sample.json b/wp/wp-content/plugins/facetwp/assets/js/src/sample.json
deleted file mode 100644
index 33037851..00000000
--- a/wp/wp-content/plugins/facetwp/assets/js/src/sample.json
+++ /dev/null
@@ -1 +0,0 @@
-{"facets":[{"name":"categories","label":"Categories","type":"checkboxes","source":"tax/category","parent_term":"","hierarchical":"no","show_expanded":"no","ghosts":"no","preserve_ghosts":"no","operator":"and","orderby":"count","count":"10","soft_limit":"5"}],"templates":[{"name":"blog_posts","label":"Blog posts","query":"","template":"","layout":{"items":[{"type":"row","items":[{"type":"col","items":[{"type":"item","source":"post_title","settings":{"link":{"type":"post","href":"","target":""},"prefix":"","suffix":"","border":{"style":"none","color":"","width":{"unit":"px","top":0,"right":0,"bottom":0,"left":0}},"background_color":"","padding":{"unit":"px","top":0,"right":0,"bottom":0,"left":0},"text_color":"","text_style":{"align":"","bold":false,"italic":false},"font_size":{"unit":"px","size":0},"name":"el-fz703r","css_class":"","is_hidden":""}}],"settings":{"border":{"style":"none","color":"","width":{"unit":"px","top":0,"right":0,"bottom":0,"left":0}},"background_color":"","padding":{"unit":"px","top":0,"right":0,"bottom":0,"left":0},"text_color":"","text_style":{"align":"","bold":false,"italic":false},"font_size":{"unit":"px","size":0},"name":"el-1tvcxf","css_class":""}}],"settings":{"grid_template_columns":"1fr","border":{"style":"none","color":"","width":{"unit":"px","top":0,"right":0,"bottom":0,"left":0}},"background_color":"","padding":{"unit":"px","top":0,"right":0,"bottom":0,"left":0},"text_color":"","text_style":{"align":"","bold":false,"italic":false},"font_size":{"unit":"px","size":0},"name":"el-8cjrpw","css_class":""}}],"settings":{"num_columns":1,"grid_gap":10,"border":{"style":"none","color":"","width":{"unit":"px","top":0,"right":0,"bottom":0,"left":0}},"background_color":"","padding":{"unit":"px","top":0,"right":0,"bottom":0,"left":0},"text_color":"","text_style":{"align":"","bold":false,"italic":false},"font_size":{"unit":"px","size":0},"name":"el-hkhimk","css_class":"","custom_css":""}},"query_obj":{"post_type":[{"label":"Posts","value":"post"}],"posts_per_page":10,"orderby":[{"key":"date","order":"DESC","type":"CHAR"}],"filters":[]},"modes":{"display":"visual","query":"visual"}}],"settings":{"thousands_separator":",","decimal_separator":".","prefix":"_"}}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/facetwp/assets/vendor/fComplete/fComplete.css b/wp/wp-content/plugins/facetwp/assets/vendor/fComplete/fComplete.css
deleted file mode 100644
index 1edbd6cb..00000000
--- a/wp/wp-content/plugins/facetwp/assets/vendor/fComplete/fComplete.css
+++ /dev/null
@@ -1,29 +0,0 @@
-.fcomplete-wrap {
- position: absolute;
- border: 1px solid #ddd;
- border-top: none;
- background-color: #fff;
- max-width: 400px;
-}
-
-.fcomplete-result,
-.fcomplete-status {
- padding: 6px 8px;
-}
-
-.fcomplete-result {
- cursor: pointer;
-}
-
-.fcomplete-result:hover {
- background-color: #f5f5f5;
-}
-
-.fcomplete-status {
- font-size: 13px;
- font-style: italic;
-}
-
-.fcomplete-hidden {
- display: none;
-}
diff --git a/wp/wp-content/plugins/facetwp/assets/vendor/fComplete/fComplete.js b/wp/wp-content/plugins/facetwp/assets/vendor/fComplete/fComplete.js
deleted file mode 100644
index 31fdd1e1..00000000
--- a/wp/wp-content/plugins/facetwp/assets/vendor/fComplete/fComplete.js
+++ /dev/null
@@ -1,283 +0,0 @@
-window.fComplete = (() => {
-
- class fComplete {
-
- constructor(selector, options) {
- let that = this;
-
- var defaults = {
- data: [],
- minChars: 3,
- maxResults: 10,
- searchDelay: 200,
- loadingText: 'Loading...',
- minCharsText: 'Enter {n} or more characters',
- noResultsText: 'No results',
- beforeRender: null,
- onSelect: null
- };
-
- that.settings = Object.assign({}, defaults, options);
- that.settings.minChars = Math.max(1, that.settings.minChars);
- that.settings.maxResults = Math.max(1, that.settings.maxResults);
- that.settings.searchDelay = Math.max(0, that.settings.searchDelay);
-
- if ('string' === typeof selector) {
- var nodes = Array.from(document.querySelectorAll(selector));
- }
- else if (selector instanceof Node) {
- var nodes = [selector];
- }
- else if (Array.isArray(selector)) {
- var nodes = selector;
- }
- else {
- var nodes = [];
- }
-
- if ('undefined' === typeof window.fCompleteInit) {
- window.fCompleteInit = {
- lastFocus: null,
- eventsBound: true
- };
- that.bindEvents();
- }
-
- nodes.forEach((input) => {
- that.input = input;
- input.fcomplete = that;
- input.classList.add('fcomplete-enabled');
- that.create();
- });
- }
-
- create() {
- var that = this;
-
- var html = `
-
- `;
-
- var rect = that.input.getBoundingClientRect();
-
- var tpl = document.createElement('template');
- tpl.innerHTML = html;
- var wrap = tpl.content.querySelector('.fcomplete-wrap');
- wrap.style.minWidth = rect.width + 'px';
- that.input.parentNode.insertBefore(wrap, that.input.nextSibling);
-
- // add a relationship link
- that.input._rel = wrap;
- wrap._rel = that.input;
- }
-
- destroy() {
- this.input._rel.remove();
- delete this.input._rel;
- }
-
- reload() {
- this.destroy();
- this.create();
- }
-
- open() {
- this.input._rel.classList.remove('fcomplete-hidden');
- }
-
- close() {
- window.fCompleteInit.lastFocus = null;
- this.input._rel.classList.add('fcomplete-hidden');
- }
-
- setStatus(text) {
- var text = text.replace('{n}', this.settings.minChars);
- var node = this.input._rel.querySelector('.fcomplete-status');
- node.innerHTML = text;
-
- var method = (text) ? 'remove' : 'add';
- node.classList[method]('fcomplete-hidden');
- }
-
- render(data) {
- var data = (this.settings.beforeRender) ? this.settings.beforeRender(data) : data;
- var wrap = this.input._rel;
-
- if (data.length) {
- var html = '';
- var len = Math.min(data.length, this.settings.maxResults);
-
- for (var i = 0; i < len; i++) {
- html += `${data[i].label}
`;
- }
-
- wrap.querySelector('.fcomplete-results').innerHTML = html;
- this.setStatus('');
- }
- else {
- wrap.querySelector('.fcomplete-results').innerHTML = '';
- this.setStatus(this.settings.noResultsText);
- }
-
- this.input.fcomplete.open();
- }
-
- getAdjacentSibling(which) {
- var that = this;
- var which = which || 'next';
- var sibling = window.fCompleteInit.lastFocus;
- var selector = '.fcomplete-result';
-
- if (sibling) {
- sibling = sibling[which + 'ElementSibling'];
-
- while (sibling) {
- if (sibling.matches(selector)) break;
- sibling = sibling[which + 'ElementSibling'];
- }
-
- return sibling;
- }
- else if ('next' == which) {
- sibling = that.input._rel.querySelector(selector);
- }
-
- return sibling;
- }
-
- debounce(func, wait) {
- var timeout;
- return (...args) => {
- var boundFunc = func.bind(this, ...args);
- clearTimeout(timeout);
- timeout = setTimeout(boundFunc, wait);
- }
- }
-
- trigger(eventName, ...args) {
- document.dispatchEvent(new CustomEvent(eventName, {detail: [...args]}));
- }
-
- on(eventName, elementSelector, handler) {
- document.addEventListener(eventName, function(e) {
- // loop parent nodes from the target to the delegation node
- for (var target = e.target; target && target != this; target = target.parentNode) {
- if (target.matches(elementSelector)) {
- handler.call(target, e);
- break;
- }
- }
- }, false);
- }
-
- bindEvents() {
- let that = this;
-
- that.on('click', '*', function(e) {
- var wrap = this.closest('.fcomplete-wrap');
- var isInput = this.classList.contains('fcomplete-enabled');
-
- if (isInput) {
- var input = this;
- var settings = input.fcomplete.settings;
- var status = (settings.minChars > input.value.length) ? settings.minCharsText : '';
- input.fcomplete.setStatus(status);
- this.fcomplete.open();
- }
- else if (!wrap && !isInput) {
- document.querySelectorAll('.fcomplete-wrap').forEach((node) => node.classList.add('fcomplete-hidden'));
- }
- });
-
- that.on('click', '.fcomplete-result', function(e) {
- var wrap = e.target.closest('.fcomplete-wrap');
- var input = wrap._rel;
- input.value = e.target.getAttribute('data-value');
-
- if (typeof input.fcomplete.settings.onSelect === 'function') {
- input.fcomplete.settings.onSelect();
- }
-
- input.fcomplete.close();
- });
- that.on('keydown', '*', function(e) {
- var wrap = this.closest('.fcomplete-wrap');
- var isInput = this.classList.contains('fcomplete-enabled');
-
- if (!wrap && !isInput) return;
-
- var input = (wrap) ? wrap._rel : this;
- wrap = (wrap) ? wrap : input._rel;
-
- if (-1 < [13, 38, 40, 27].indexOf(e.which)) {
- e.preventDefault();
- }
-
- if (13 == e.which) { // enter
- if (this.classList.contains('fcomplete-result')) {
- this.click();
- }
- }
- else if (38 == e.which) { // up
- if (this.classList.contains('fcomplete-result')) {
- var sibling = wrap._rel.fcomplete.getAdjacentSibling('previous');
- window.fCompleteInit.lastFocus = sibling; // stop at the search box
- (sibling) ? sibling.focus() : input.focus();
- }
- }
- else if (40 == e.which) { // down
- if (this === input) {
- var firstResult = wrap.querySelector('.fcomplete-result');
-
- if (firstResult) {
- firstResult.focus();
- window.fCompleteInit.lastFocus = firstResult;
- }
- }
- else if (this.classList.contains('fcomplete-result')) {
- var sibling = wrap._rel.fcomplete.getAdjacentSibling('next');
-
- if (sibling) {
- sibling.focus();
- window.fCompleteInit.lastFocus = sibling; // stop at the bottom
- }
- }
- }
- else if (9 == e.which || 27 == e.which) { // tab, esc
- wrap._rel.fcomplete.close();
- }
- });
-
- that.on('keyup', '.fcomplete-enabled', that.debounce(function(e) {
- if (-1 < [13, 38, 40, 27].indexOf(e.which)) {
- return;
- }
-
- var input = e.target;
- var settings = input.fcomplete.settings;
-
- if (settings.minChars <= input.value.length) {
- if (Array.isArray(settings.data)) {
- input.fcomplete.render(settings.data);
- }
- else if (typeof settings.data === 'function') {
- input.fcomplete.setStatus(settings.loadingText);
- settings.data();
- }
- }
- else {
- input.fcomplete.render([]);
- input.fcomplete.setStatus(settings.minCharsText);
- }
- }, that.settings.searchDelay));
- }
- }
-
- var $ = (selector, options) => new fComplete(selector, options);
-
- return $;
-
-})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/facetwp/assets/vendor/fDate/LICENSE.md b/wp/wp-content/plugins/facetwp/assets/vendor/fDate/LICENSE.md
deleted file mode 100644
index 09116e9f..00000000
--- a/wp/wp-content/plugins/facetwp/assets/vendor/fDate/LICENSE.md
+++ /dev/null
@@ -1,7 +0,0 @@
-Copyright 2021 FacetWP, LLC
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/wp/wp-content/plugins/facetwp/assets/vendor/fDate/fDate.css b/wp/wp-content/plugins/facetwp/assets/vendor/fDate/fDate.css
deleted file mode 100644
index 48575cbf..00000000
--- a/wp/wp-content/plugins/facetwp/assets/vendor/fDate/fDate.css
+++ /dev/null
@@ -1,87 +0,0 @@
-.fdate-input {
- outline: none;
-}
-
-.fdate-wrap {
- width: 300px;
- display: none;
- background: #fff;
- border-radius: 5px;
- border: 1px solid #ddd;
- font-size: 14px;
- user-select: none;
- -webkit-user-select: none;
- z-index: 10000;
-}
-
-.fdate-wrap.opened {
- display: block;
-}
-
-.fdate-wrap .disabled {
- opacity: 0.1;
-}
-
-.fdate-nav {
- display: grid;
- grid-template-columns: 1fr 5fr 1fr;
-}
-
-.fdate-nav > div,
-.fdate-clear {
- padding: 10px 0;
- text-align: center;
- cursor: pointer;
-}
-
-.fdate-grid {
- display: grid;
- grid-template-columns: repeat(4, 1fr);
- text-align: center;
-}
-
-.fdate-grid.grid-day {
- grid-template-columns: repeat(7, 1fr);
-}
-
-.fdate-grid > div {
- padding: 20px 0;
- opacity: 0.3;
-}
-
-.fdate-grid > div:hover {
- background-color: #ddd;
- cursor: pointer;
-}
-
-.fdate-grid .fdate-day {
- padding: 8px 0;
-}
-
-.fdate-grid .weekday,
-.fdate-grid .inner {
- opacity: 1;
-}
-
-.fdate-grid .today {
- background-color: #F8F8F8;
-}
-
-.fdate-grid .selected {
- background-color: #DDD6FE;
-}
-
-.fdate-day.weekday {
- font-weight: bold;
- padding-top: 0;
-}
-
-.fdate-grid .weekday:hover,
-.fdate-grid .disabled:hover {
- background-color: transparent;
- cursor: default;
-}
-
-.fdate-wrap .disabled:hover {
- cursor: not-allowed;
-}
diff --git a/wp/wp-content/plugins/facetwp/assets/vendor/fDate/fDate.js b/wp/wp-content/plugins/facetwp/assets/vendor/fDate/fDate.js
deleted file mode 100644
index 182d7727..00000000
--- a/wp/wp-content/plugins/facetwp/assets/vendor/fDate/fDate.js
+++ /dev/null
@@ -1,679 +0,0 @@
-window.fDate = (() => {
-
- var qs = (selector) => document.querySelector(selector);
- var isset = (input) => 'undefined' !== typeof input;
- var ymd = (...args) => {
- var d = new Date(...args);
- var zeroed = (num) => (num > 9) ? num : '0' + num;
- // toJSON() produces unexpected results due to timezones
- return d.getFullYear() + '-' + zeroed(d.getMonth() + 1) + '-' + zeroed(d.getDate());
- };
-
- class fDate {
-
- constructor(selector, options) {
- let that = this;
-
- var defaults = {
- i18n: {
- weekdays_short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
- months_short: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
- months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
- clearText: 'Clear',
- firstDayOfWeek: 0
- },
- minDate: '',
- maxDate: '',
- altFormat: '',
- onChange: null
- };
-
- that.settings = Object.assign({}, defaults, options);
-
- if ('string' === typeof selector) {
- var inputs = document.querySelectorAll(selector);
- }
- else if (selector instanceof Node) {
- var inputs = [selector];
- }
- else {
- var inputs = selector;
- }
-
- if (inputs.length) {
- inputs.forEach(function(input) {
- input.setAttribute('readonly', 'readonly');
-
- if ('' !== that.settings.altFormat) {
- that.el = input;
-
- let altInput = input.cloneNode();
- altInput.classList.add('fdate-alt-input');
- altInput.value = that.getAltDate();
- altInput._input = input;
-
- input._altInput = altInput;
- input.setAttribute('type', 'hidden');
- input.parentNode.insertBefore(altInput, input.nextSibling); // append()
- }
-
- input.classList.add('fdate-input');
- input._input = input;
- input.fdate = {
- settings: that.settings,
- refresh() {
- input.click();
- },
- open() {
- input.click();
- },
- close() {
- that.setCalVisibility('hide');
- },
- clear() {
- input.value = '';
-
- if (isset(input._altInput)) {
- input._altInput.value = '';
- }
-
- that.triggerEvent('onChange');
- },
- destroy() {
- input.classList.remove('fdate-input');
- delete input._altInput;
- delete input._input;
- delete input.fdate;
- }
- };
- });
- }
-
- if (null === qs('.fdate-wrap')) {
- this.initCalendar();
- this.bindEvents();
- }
- }
-
- initCalendar() {
- var html = `
-
-
-
-
${this.settings.i18n.clearText}
-
- `;
-
- document.body.insertAdjacentHTML('beforeend', html);
- }
-
- setInput(input) {
- this.el = input;
- this.mode = 'day';
- this.settings = input.fdate.settings;
-
- this.setDateBounds();
-
- // valid YYYY-MM-DD?
- if (null !== input.value.match(/^\d{4}-\d{2}-\d{2}$/)) {
- var date_str = input.value;
- }
- // use the min date or today, whichever is higher
- else {
- var today = ymd();
- var date_str = (this.min.str < today) ? today : this.min.str;
- }
-
- // rewind the calendar if beyond the maxDate
- if (date_str < this.max.str) {
- var temp_date = new Date(date_str + 'T00:00');
- this.year = temp_date.getFullYear();
- this.month = temp_date.getMonth();
- }
- else {
- this.year = this.max.year;
- this.month = this.max.month;
- }
- }
-
- setDateBounds() {
- let min = this.settings.minDate || '1000-01-01';
- let max = this.settings.maxDate || '3000-01-01';
- let minDate = new Date(min + 'T00:00');
- let maxDate = new Date(max + 'T00:00');
-
- this.min = {
- year: minDate.getFullYear(),
- month: minDate.getMonth(),
- str: min
- };
-
- this.max = {
- year: maxDate.getFullYear(),
- month: maxDate.getMonth(),
- str: max
- };
- }
-
- isInBounds(val) {
- if ('year' == this.mode) {
- let year = parseInt(val);
-
- if (year < this.min.year || year > this.max.year) {
- return false;
- }
- }
- else if ('month' == this.mode) {
- let month = parseInt(val);
- let valStr = ymd(this.year, month).substr(0, 7);
- let monthMin = this.min.str.substr(0, 7);
- let monthMax = this.max.str.substr(0, 7);
-
- if (valStr < monthMin || valStr > monthMax) {
- return false;
- }
- }
- else if ('day' == this.mode) {
- if (val < this.min.str || val > this.max.str) {
- return false;
- }
- }
-
- return true;
- }
-
- isNavAllowed(type) {
- if ('year' == this.mode) {
- let decade = parseInt(this.year.toString().substr(0, 3) + '0');
-
- return ('next' == type) ?
- decade < parseInt(this.max.str.substr(0, 4)) :
- decade > parseInt(this.min.str.substr(0, 4));
- }
- else if ('month' == this.mode) {
- return ('next' == type) ?
- ymd(this.year + 1, 0, 0) < this.max.str :
- ymd(this.year, 0) > this.min.str;
- }
- else if ('day' == this.mode) {
- return ('next' == type) ?
- ymd(this.year, this.month + 1, 0) < this.max.str :
- ymd(this.year, this.month) > this.min.str;
- }
- }
-
- setDisplay(which) {
- var that = this;
-
- this.mode = which;
-
- qs('.fdate-grid').classList.remove('grid-day');
-
- // show or hide the nav arrows
- qs('.fdate-nav-prev').classList.add('disabled');
- qs('.fdate-nav-next').classList.add('disabled');
-
- if (that.isNavAllowed('prev')) {
- qs('.fdate-nav-prev').classList.remove('disabled');
- }
-
- if ( that.isNavAllowed('next')) {
- qs('.fdate-nav-next').classList.remove('disabled');
- }
-
- // month
- if ('month' == which) {
- var output = '';
- this.settings.i18n.months_short.forEach(function(item, index) {
- var css = that.isInBounds(index) ? ' inner' : ' disabled';
- output += '' + item + '
';
- });
-
- qs('.fdate-grid').innerHTML = output;
- qs('.fdate-nav-label').innerHTML = this.year;
- }
- // year
- else if ('year' == which) {
- var output = '';
- var decade = parseInt(this.year.toString().substr(0, 3) + '0');
- for (var i = 0; i < 10; i++) {
- var css = that.isInBounds(decade + i) ? ' inner' : ' disabled';
- output += '' + (decade + i) + '
';
- }
-
- qs('.fdate-grid').innerHTML = output;
-
- var prefix = this.year.toString().substr(0, 3);
- var decade = prefix + '0 - ' + prefix + '9';
- qs('.fdate-nav-label').innerHTML = decade;
- }
- // day
- else {
- qs('.fdate-grid').classList.add('grid-day');
-
- var output = '';
- var days = this.generateDays(this.year, this.month);
- days.forEach(function(item) {
- output += '' + item.text + '
';
- });
-
- qs('.fdate-grid').innerHTML = output;
- qs('.fdate-nav-label').innerHTML = this.settings.i18n.months[this.month] + ' ' + this.year;
- }
- }
-
- generateDays(year, month) {
- let that = this;
- var output = [];
- let i18n = that.settings.i18n;
- let weekdays = i18n.weekdays_short;
- let firstDayOfWeek = i18n.firstDayOfWeek; // 0 = Sunday
- let firstDayNum = new Date(year, month).getDay(); // between 0 and 6
- let offset = firstDayNum - firstDayOfWeek;
- offset = (offset < 0) ? 7 + offset : offset; // negative offset (e.g. August 2021)
- let num_days = new Date(year, month + 1, 0).getDate();
- let today = ymd();
-
- // shift weekdays according to firstDayOfWeek
- if (0 < firstDayOfWeek) {
- let temp = JSON.parse(JSON.stringify(weekdays));
- let append = temp.splice(0, firstDayOfWeek);
- weekdays = temp.concat(append);
- }
-
- // get weekdays
- weekdays.forEach(function(item) {
- output.push({
- text: item,
- value: '',
- class: ' weekday'
- });
- });
-
- // get days from the previous month
- if (0 < offset) {
- let year_prev = (0 == month) ? year - 1 : year;
- let month_prev = (0 == month) ? 11 : month - 1;
- let num_days_prev = new Date(year_prev, month_prev + 1, 0).getDate();
-
- for (var i = (num_days_prev - offset + 1); i <= num_days_prev; i++) {
- var val = ymd(year_prev, month_prev, i);
- var css = that.isInBounds(val) ? '' : ' disabled';
- output.push({
- text: i,
- value: val,
- class: css
- });
- }
- }
-
- // get days from the current month
- for (var i = 1; i <= num_days; i++) {
- var val = ymd(year, month, i);
-
- if ( that.isInBounds(val)) {
- var css = ' inner';
- css += (val == today) ? ' today' : '';
- css += (val == this.el.value) ? ' selected' : '';
- }
- else {
- var css = ' disabled';
- }
-
- output.push({
- text: i,
- value: val,
- class: css
- });
- }
-
- // get days from the next month
- let year_next = (11 == month) ? year + 1 : year;
- let month_next = (11 == month) ? 0 : month + 1;
- let num_filler = 42 - num_days - offset;
-
- for (var i = 1; i <= num_filler; i++) {
- var val = ymd(year_next, month_next, i);
- var css = that.isInBounds(val) ? '' : ' disabled';
- output.push({
- text: i,
- value: val,
- class: css
- });
- }
-
- return output;
- }
-
- adjustDate(increment, unit) {
- var temp_year = ('year' == unit) ? this.year + increment : this.year;
- var temp_month = ('month' == unit) ? this.month + increment : this.month;
- var temp_date = new Date(temp_year, temp_month);
-
- this.year = temp_date.getFullYear();
- this.month = temp_date.getMonth();
- }
-
- on(eventName, elementSelector, handler) {
- document.addEventListener(eventName, function(e) {
- // loop parent nodes from the target to the delegation node
- for (var target = e.target; target && target != this; target = target.parentNode) {
- if (target.matches(elementSelector)) {
- handler.call(target, e);
- break;
- }
- }
- }, false);
- }
-
- getAltDate() {
- let that = this;
-
- if ('' === that.el.value) {
- return '';
- }
-
- let date_array = that.el.value.split('-');
- let format_array = that.settings.altFormat.split('');
- let output = '';
-
- let escaped = false;
- format_array.forEach(function(token) {
- if ('\\' === token) {
- escaped = true;
- return;
- }
-
- output += escaped ? token : that.parseDateToken(token, date_array);
- escaped = false;
- });
-
- return output;
- }
-
- parseDateToken(token, date_array) {
- let i18n = this.settings.i18n;
-
- let tokens = {
- 'd': () => date_array[2],
- 'j': () => parseInt(date_array[2]),
- 'm': () => date_array[1],
- 'n': () => parseInt(date_array[1]),
- 'F': () => i18n.months[parseInt(date_array[1]) - 1],
- 'M': () => i18n.months_short[parseInt(date_array[1]) - 1],
- 'y': () => date_array[0].substring(2),
- 'Y': () => date_array[0]
- };
-
- return isset(tokens[token]) ? tokens[token]() : token;
- }
-
- setPosition(input) {
- let wrap = qs('.fdate-wrap');
- let inputBounds = input.getBoundingClientRect();
- let calendarWidth = wrap.getBoundingClientRect().width;
- let calendarHeight = wrap.getBoundingClientRect().height;
- let distanceFromRight = document.body.clientWidth - inputBounds.left;
- let distanceFromBottom = document.body.clientHeight - inputBounds.bottom;
- let showOnTop = (distanceFromBottom < calendarHeight && inputBounds.top > calendarHeight);
- let showOnLeft = (distanceFromRight < calendarWidth && inputBounds.left > calendarWidth);
-
- let top = window.pageYOffset + inputBounds.top + (!showOnTop ? input.offsetHeight + 2 : -calendarHeight - 2);
- let left = window.pageXOffset + inputBounds.left;
- let right = window.pageXOffset + inputBounds.right - calendarWidth;
- let pixels = showOnLeft ? right : left;
-
- wrap.style.position = 'absolute';
- wrap.style.top = top + 'px';
- wrap.style.left = pixels + 'px';
- }
-
- setCalVisibility(which) {
- var wrap = qs('.fdate-wrap');
-
- if ('hide' === which) {
- if (wrap.classList.contains('opened')) {
- wrap.classList.remove('opened');
- }
- }
- else {
- if (! wrap.classList.contains('opened')) {
- wrap.classList.add('opened');
- }
- }
- }
-
- triggerEvent(name) {
- if (typeof this.settings[name] === 'function') {
- this.settings[name](this);
- }
- }
-
- bindEvents() {
- var that = this;
-
- that.on('click', '.fdate-day:not(.disabled):not(.weekday)', function(e) {
- that.el.value = e.target.getAttribute('data-value');
-
- if (isset(that.el._altInput)) {
- that.el._altInput.value = that.getAltDate();
- }
-
- that.triggerEvent('onChange');
- that.setCalVisibility('hide');
- e.stopImmediatePropagation(); // important
- });
-
- that.on('click', '.fdate-month:not(.disabled)', function(e) {
- that.month = parseInt(e.target.getAttribute('data-value'));
- that.setDisplay('day');
- e.stopImmediatePropagation(); // important
- });
-
- that.on('click', '.fdate-year:not(.disabled)', function(e) {
- that.year = parseInt(e.target.getAttribute('data-value'));
- that.setDisplay('month');
- e.stopImmediatePropagation(); // important
- });
-
- that.on('click', '.fdate-nav-prev:not(.disabled)', function() {
- var incr = ('year' == that.mode) ? -10 : -1;
- var unit = ('day' == that.mode) ? 'month' : 'year';
-
- that.adjustDate(incr, unit);
- that.setDisplay(that.mode);
- });
-
- that.on('click', '.fdate-nav-next:not(.disabled)', function() {
- var incr = ('year' == that.mode) ? 10 : 1;
- var unit = ('day' == that.mode) ? 'month' : 'year';
-
- that.adjustDate(incr, unit);
- that.setDisplay(that.mode);
- });
-
- that.on('click', '.fdate-nav-label', function() {
- if ('day' == that.mode) {
- that.setDisplay('month');
- }
- else if ('month' == that.mode) {
- that.setDisplay('year');
- }
- else if ('year' == that.mode) {
- that.setDisplay('day');
- }
- });
-
- that.on('click', '.fdate-clear', function() {
- that.el.fdate.clear();
- });
-
- that.on('click', '*', function(e) {
- var is_input = e.target.classList.contains('fdate-input') || e.target.classList.contains('fdate-alt-input');
- var is_cal = (null !== e.target.closest('.fdate-wrap'));
- var is_clear = e.target.classList.contains('fdate-clear');
-
- if (is_input || (is_cal && ! is_clear)) {
- that.setCalVisibility('show');
-
- // set position and render calendar
- if (is_input) {
- let visibleInput = e.target._altInput || e.target;
- that.setInput(e.target._input);
- that.setDisplay('day');
- that.setPosition(visibleInput);
- }
- }
- else {
- that.setCalVisibility('hide');
- }
- });
-
- // a11y support
- window.addEventListener('keyup', function(e) {
- if ('Tab' === e.key) {
- if (e.target.classList.contains('fdate-input') || e.target.classList.contains('fdate-alt-input')) {
- e.target._input.click();
- }
- else {
- that.setCalVisibility('hide');
- }
- }
- });
-
- window.addEventListener('keydown', function(e) {
- if ('Enter' === e.key) {
- if (e.target.closest('.fdate-grid')) {
- qs('.fdate-nav-label').focus();
- }
- if (e.target.closest('.fdate-wrap')) {
- e.target.click();
- }
- }
- else if ('Escape' === e.key) {
- if (e.target.closest('.fdate-wrap') || e.target.classList.contains('fdate-input') || e.target.classList.contains('fdate-alt-input')) {
- that.el.fdate.close();
- }
- }
- else if ('ArrowUp' === e.key) {
- if (e.target.classList.contains('fdate-input') || e.target.classList.contains('fdate-alt-input')) { // from input
- qs('.fdate-clear').focus();
- e.preventDefault();
- }
- else if (e.target.classList.contains('fdate-nav-label')) {
- that.el.focus();
- e.preventDefault();
- }
- else if (e.target.classList.contains('fdate-clear')) {
- let days = document.querySelectorAll('.fdate-day.inner');
- let item = (days.length) ? days[days.length - 1] : qs('.fdate-nav-label');
- item.focus();
-
- e.preventDefault();
- }
- else if (e.target.closest('.fdate-grid')) {
- let offset = ('day' === that.mode) ? -7 : -4;
- let el = that.getSibling(e.target, offset);
-
- if (el) {
- el.focus();
- }
- else {
- qs('.fdate-nav-label').focus();
- }
- e.preventDefault();
- }
- }
- else if ('ArrowDown' === e.key) {
- if (e.target.classList.contains('fdate-input') || e.target.classList.contains('fdate-alt-input')) { // from input
- let selected = qs('.fdate-grid .selected');
- let today = qs('.fdate-grid .today');
-
- if (selected) {
- selected.focus();
- }
- else if (today) {
- today.focus();
- }
- else {
- qs('.fdate-nav-label').focus();
- }
-
- e.preventDefault();
- }
- else if (e.target.classList.contains('fdate-nav-label')) { // from nav
- qs('.fdate-grid .inner').focus();
- e.preventDefault();
- }
- else if (e.target.classList.contains('fdate-clear')) {
- that.el.focus();
- e.preventDefault();
- }
- else if (e.target.closest('.fdate-grid')) { // from grid
- let offset = ('day' === that.mode) ? 7 : 4;
- let el = that.getSibling(e.target, offset);
-
- if (el) {
- el.focus();
- }
- else {
- qs('.fdate-clear').focus();
- }
- e.preventDefault();
- }
- }
- else if ('ArrowLeft' === e.key) {
- if (e.target.classList.contains('fdate-nav-label')) { // into the past
- qs('.fdate-nav-prev').click();
- e.preventDefault();
- }
- if (e.target.closest('.fdate-grid')) { // previous grid item
- let prev = e.target.previousElementSibling;
- if (prev && prev.classList.contains('inner')) {
- prev.focus();
- }
- else {
- let days = document.querySelectorAll('.fdate-day.inner');
- days[days.length - 1].focus(); // last valid day of month
- }
- e.preventDefault();
- }
- }
- else if ('ArrowRight' === e.key) {
- if (e.target.classList.contains('fdate-nav-label')) { // into the future
- qs('.fdate-nav-next').click();
- e.preventDefault();
- }
- if (e.target.closest('.fdate-grid')) { // next grid item
- let next = e.target.nextElementSibling;
- if (next && next.classList.contains('inner')) {
- next.focus();
- }
- else {
- qs('.fdate-day.inner').focus(); // first valid day of month
- }
- e.preventDefault();
- }
- }
- });
- }
-
- getSibling(orig, offset) {
- let el = orig;
- for (var i = 0; i < Math.abs(offset); i++) {
- el = (0 < offset) ? el.nextElementSibling : el.previousElementSibling;
- if (null === el || !el.classList.contains('inner')) {
- return null;
- }
- }
-
- return el;
- }
- }
-
- return fDate;
-})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/facetwp/assets/vendor/fDate/fDate.min.js b/wp/wp-content/plugins/facetwp/assets/vendor/fDate/fDate.min.js
deleted file mode 100644
index cef20a4c..00000000
--- a/wp/wp-content/plugins/facetwp/assets/vendor/fDate/fDate.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(){"use strict";var t,e,a,n;window.fDate=(t=function(t){return document.querySelector(t)},e=function(t){return void 0!==t},a=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var a=new(Function.prototype.bind.apply(Date,[null].concat(t))),n=function(t){return t>9?t:"0"+t};return a.getFullYear()+"-"+n(a.getMonth()+1)+"-"+n(a.getDate())},(n=function(a,n){var s=this;if(s.settings=Object.assign({},{i18n:{weekdays_short:["Su","Mo","Tu","We","Th","Fr","Sa"],months_short:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],clearText:"Clear",firstDayOfWeek:0},minDate:"",maxDate:"",altFormat:"",onChange:null},n),"string"==typeof a)var i=document.querySelectorAll(a);else i=a instanceof Node?[a]:a;i.length&&i.forEach((function(t){if(t.setAttribute("readonly","readonly"),""!==s.settings.altFormat){s.el=t;var a=t.cloneNode();a.classList.add("fdate-alt-input"),a.value=s.getAltDate(),a._input=t,t._altInput=a,t.setAttribute("type","hidden"),t.parentNode.insertBefore(a,t.nextSibling)}t.classList.add("fdate-input"),t._input=t,t.fdate={settings:s.settings,refresh:function(){t.click()},open:function(){t.click()},close:function(){s.setCalVisibility("hide")},clear:function(){t.value="",e(t._altInput)&&(t._altInput.value=""),s.triggerEvent("onChange")},destroy:function(){t.classList.remove("fdate-input"),delete t._altInput,delete t._input,delete t.fdate}}})),null===t(".fdate-wrap")&&(this.initCalendar(),this.bindEvents())}).prototype.initCalendar=function(){var t='\n \n
\n
\n
'+this.settings.i18n.clearText+"
\n
\n ";document.body.insertAdjacentHTML("beforeend",t)},n.prototype.setInput=function(t){if(this.el=t,this.mode="day",this.settings=t.fdate.settings,this.setDateBounds(),null!==t.value.match(/^\d{4}-\d{2}-\d{2}$/))var e=t.value;else{var n=a();e=this.min.strthis.max.year)return!1}else if("month"==this.mode){var n=parseInt(t),s=a(this.year,n).substr(0,7),i=this.min.str.substr(0,7),r=this.max.str.substr(0,7);if(sr)return!1}else if("day"==this.mode&&(tthis.max.str))return!1;return!0},n.prototype.isNavAllowed=function(t){if("year"==this.mode){var e=parseInt(this.year.toString().substr(0,3)+"0");return"next"==t?eparseInt(this.min.str.substr(0,4))}return"month"==this.mode?"next"==t?a(this.year+1,0,0)this.min.str:"day"==this.mode?"next"==t?a(this.year,this.month+1,0)this.min.str:void 0},n.prototype.setDisplay=function(e){var a=this;if(this.mode=e,t(".fdate-grid").classList.remove("grid-day"),t(".fdate-nav-prev").classList.add("disabled"),t(".fdate-nav-next").classList.add("disabled"),a.isNavAllowed("prev")&&t(".fdate-nav-prev").classList.remove("disabled"),a.isNavAllowed("next")&&t(".fdate-nav-next").classList.remove("disabled"),"month"==e){var n="";this.settings.i18n.months_short.forEach((function(t,e){var s=a.isInBounds(e)?" inner":" disabled";n+=''+t+"
"})),t(".fdate-grid").innerHTML=n,t(".fdate-nav-label").innerHTML=this.year}else if("year"==e){n="";for(var s=parseInt(this.year.toString().substr(0,3)+"0"),i=0;i<10;i++){var r=a.isInBounds(s+i)?" inner":" disabled";n+=''+(s+i)+"
"}t(".fdate-grid").innerHTML=n;var o=this.year.toString().substr(0,3);s=o+"0 - "+o+"9",t(".fdate-nav-label").innerHTML=s}else t(".fdate-grid").classList.add("grid-day"),n="",this.generateDays(this.year,this.month).forEach((function(t){n+=''+t.text+"
"})),t(".fdate-grid").innerHTML=n,t(".fdate-nav-label").innerHTML=this.settings.i18n.months[this.month]+" "+this.year},n.prototype.generateDays=function(t,e){var n=this,s=[],i=n.settings.i18n,r=i.weekdays_short,o=i.firstDayOfWeek,l=new Date(t,e).getDay()-o;l=l<0?7+l:l;var d=new Date(t,e+1,0).getDate(),c=a();if(0i,l=rs,d=window.pageYOffset+n.top+(o?-i-2:e.offsetHeight+2),c=window.pageXOffset+n.left,f=window.pageXOffset+n.right-s,u=l?f:c;a.style.position="absolute",a.style.top=d+"px",a.style.left=u+"px"},n.prototype.setCalVisibility=function(e){var a=t(".fdate-wrap");"hide"===e?a.classList.contains("opened")&&a.classList.remove("opened"):a.classList.contains("opened")||a.classList.add("opened")},n.prototype.triggerEvent=function(t){"function"==typeof this.settings[t]&&this.settings[t](this)},n.prototype.bindEvents=function(){var a=this;a.on("click",".fdate-day:not(.disabled):not(.weekday)",(function(t){a.el.value=t.target.getAttribute("data-value"),e(a.el._altInput)&&(a.el._altInput.value=a.getAltDate()),a.triggerEvent("onChange"),a.setCalVisibility("hide"),t.stopImmediatePropagation()})),a.on("click",".fdate-month:not(.disabled)",(function(t){a.month=parseInt(t.target.getAttribute("data-value")),a.setDisplay("day"),t.stopImmediatePropagation()})),a.on("click",".fdate-year:not(.disabled)",(function(t){a.year=parseInt(t.target.getAttribute("data-value")),a.setDisplay("month"),t.stopImmediatePropagation()})),a.on("click",".fdate-nav-prev:not(.disabled)",(function(){var t="year"==a.mode?-10:-1,e="day"==a.mode?"month":"year";a.adjustDate(t,e),a.setDisplay(a.mode)})),a.on("click",".fdate-nav-next:not(.disabled)",(function(){var t="year"==a.mode?10:1,e="day"==a.mode?"month":"year";a.adjustDate(t,e),a.setDisplay(a.mode)})),a.on("click",".fdate-nav-label",(function(){"day"==a.mode?a.setDisplay("month"):"month"==a.mode?a.setDisplay("year"):"year"==a.mode&&a.setDisplay("day")})),a.on("click",".fdate-clear",(function(){a.el.fdate.clear()})),a.on("click","*",(function(t){var e=t.target.classList.contains("fdate-input")||t.target.classList.contains("fdate-alt-input"),n=null!==t.target.closest(".fdate-wrap"),s=t.target.classList.contains("fdate-clear");if(e||n&&!s){if(a.setCalVisibility("show"),e){var i=t.target._altInput||t.target;a.setInput(t.target._input),a.setDisplay("day"),a.setPosition(i)}}else a.setCalVisibility("hide")})),window.addEventListener("keyup",(function(t){"Tab"===t.key&&(t.target.classList.contains("fdate-input")||t.target.classList.contains("fdate-alt-input")?t.target._input.click():a.setCalVisibility("hide"))})),window.addEventListener("keydown",(function(e){if("Enter"===e.key)e.target.closest(".fdate-grid")&&t(".fdate-nav-label").focus(),e.target.closest(".fdate-wrap")&&e.target.click();else if("Escape"===e.key)(e.target.closest(".fdate-wrap")||e.target.classList.contains("fdate-input")||e.target.classList.contains("fdate-alt-input"))&&a.el.fdate.close();else if("ArrowUp"===e.key){if(e.target.classList.contains("fdate-input")||e.target.classList.contains("fdate-alt-input"))t(".fdate-clear").focus(),e.preventDefault();else if(e.target.classList.contains("fdate-nav-label"))a.el.focus(),e.preventDefault();else if(e.target.classList.contains("fdate-clear")){var n=document.querySelectorAll(".fdate-day.inner");(n.length?n[n.length-1]:t(".fdate-nav-label")).focus(),e.preventDefault()}else if(e.target.closest(".fdate-grid")){var s="day"===a.mode?-7:-4,i=a.getSibling(e.target,s);i?i.focus():t(".fdate-nav-label").focus(),e.preventDefault()}}else if("ArrowDown"===e.key){if(e.target.classList.contains("fdate-input")||e.target.classList.contains("fdate-alt-input")){var r=t(".fdate-grid .selected"),o=t(".fdate-grid .today");r?r.focus():o?o.focus():t(".fdate-nav-label").focus(),e.preventDefault()}else if(e.target.classList.contains("fdate-nav-label"))t(".fdate-grid .inner").focus(),e.preventDefault();else if(e.target.classList.contains("fdate-clear"))a.el.focus(),e.preventDefault();else if(e.target.closest(".fdate-grid")){var l="day"===a.mode?7:4,d=a.getSibling(e.target,l);d?d.focus():t(".fdate-clear").focus(),e.preventDefault()}}else if("ArrowLeft"===e.key){if(e.target.classList.contains("fdate-nav-label")&&(t(".fdate-nav-prev").click(),e.preventDefault()),e.target.closest(".fdate-grid")){var c=e.target.previousElementSibling;if(c&&c.classList.contains("inner"))c.focus();else{var f=document.querySelectorAll(".fdate-day.inner");f[f.length-1].focus()}e.preventDefault()}}else if("ArrowRight"===e.key&&(e.target.classList.contains("fdate-nav-label")&&(t(".fdate-nav-next").click(),e.preventDefault()),e.target.closest(".fdate-grid"))){var u=e.target.nextElementSibling;u&&u.classList.contains("inner")?u.focus():t(".fdate-day.inner").focus(),e.preventDefault()}}))},n.prototype.getSibling=function(t,e){for(var a=t,n=0;n {
-
- var build = {};
-
- class fSelect {
-
- constructor(selector, options) {
- let that = this;
-
- var defaults = {
- placeholder: 'Select some options',
- numDisplayed: 3,
- overflowText: '{n} selected',
- searchText: 'Search',
- noResultsText: 'No results found',
- showSearch: true,
- optionFormatter: false
- };
-
- that.settings = Object.assign({}, defaults, options);
- build = {output: '', optgroup: 0, idx: 0};
-
- if ('string' === typeof selector) {
- var nodes = Array.from(document.querySelectorAll(selector));
- }
- else if (selector instanceof Node) {
- var nodes = [selector];
- }
- else if (Array.isArray(selector)) {
- var nodes = selector;
- }
- else {
- var nodes = [];
- }
-
- if ('undefined' === typeof window.fSelectInit) {
- window.fSelectInit = {
- searchCache: '',
- lastChoice: null,
- lastFocus: null,
- activeEl: null
- };
- that.bindEvents();
- }
-
- nodes.forEach((input) => {
- if (typeof input.fselect === 'object') {
- input.fselect.destroy();
- }
-
- that.settings.multiple = input.matches('[multiple]');
- input.fselect = that;
- that.input = input;
- that.create();
- });
- }
-
- create() {
- var that = this;
- var options = that.buildOptions();
- var label = that.getDropdownLabel();
- var mode = (that.settings.multiple) ? 'multiple' : 'single';
- var searchClass = (that.settings.showSearch) ? '' : ' fs-hidden';
- var noResultsClass = (build.idx < 2) ? '' : ' fs-hidden';
-
- var html = `
-
-
-
-
-
-
-
${that.settings.noResultsText}
-
${options}
-
-
- `;
-
- var tpl = document.createElement('template');
- tpl.innerHTML = html;
- var wrap = tpl.content.querySelector('.fs-wrap');
- that.input.parentNode.insertBefore(wrap, that.input.nextSibling);
- that.input.classList.add('fs-hidden');
-
- // add a relationship link
- that.input._rel = wrap;
- wrap._rel = that.input;
- }
-
- destroy() {
- this.input._rel.remove();
- this.input.classList.remove('fs-hidden');
- delete this.input._rel;
- }
-
- reload() {
- this.destroy();
- this.create();
- }
-
- open() {
- var wrap = this.input._rel;
- wrap.classList.add('fs-open');
- wrap.querySelector('.fs-dropdown').classList.remove('fs-hidden');
-
- // don't auto-focus for touch devices
- if (! window.matchMedia("(pointer: coarse)").matches) {
- wrap.querySelector('.fs-search input').focus();
- }
-
- window.fSelectInit.lastChoice = this.getSelectedOptions('value');
- window.fSelectInit.activeEl = wrap;
-
- this.trigger('fs:opened', wrap);
- }
-
- close() {
- this.input._rel.classList.remove('fs-open');
- this.input._rel.querySelector('.fs-dropdown').classList.add('fs-hidden');
-
- window.fSelectInit.searchCache = '';
- window.fSelectInit.lastChoice = null;
- window.fSelectInit.lastFocus = null;
- window.fSelectInit.activeEl = null;
-
- this.trigger('fs:closed', this.input._rel);
- }
-
- buildOptions(parent) {
- var that = this;
- var parent = parent || that.input;
-
- Array.from(parent.children).forEach((node) => {
- if ('optgroup' === node.nodeName.toLowerCase()) {
- var opt = `${node.label}
`;
- build.output += opt;
- that.buildOptions(node);
- build.optgroup++;
- }
- else {
- var val = node.value;
-
- // skip the first choice in multi-select mode
- if (0 === build.idx && '' === val && that.settings.multiple) {
- build.idx++;
- return;
- }
-
- var classes = ['fs-option', 'g' + build.optgroup];
-
- // append existing classes
- node.className.split(' ').forEach((className) => {
- if ('' !== className) {
- classes.push(className);
- }
- });
-
- if (node.matches('[disabled]')) classes.push('disabled');
- if (node.matches('[selected]')) classes.push('selected');
- classes = classes.join(' ');
-
- if ('function' === typeof that.settings.optionFormatter) {
- node.label = that.settings.optionFormatter(node.label, node);
- }
-
- var opt = ``;
-
- build.output += opt;
- build.idx++;
- }
- });
-
- return build.output;
- }
-
- getSelectedOptions(field, context) {
- var context = context || this.input;
- return Array.from(context.selectedOptions).map((opt) => {
- return (field) ? opt[field] : opt;
- });
- }
-
- getAdjacentSibling(which) {
- var that = this;
- var which = which || 'next';
- var sibling = window.fSelectInit.lastFocus;
- var selector = '.fs-option:not(.fs-hidden):not(.disabled)';
-
- if (sibling) {
- sibling = sibling[which + 'ElementSibling'];
-
- while (sibling) {
- if (sibling.matches(selector)) break;
- sibling = sibling[which + 'ElementSibling'];
- }
-
- return sibling;
- }
- else if ('next' == which) {
- sibling = that.input._rel.querySelector(selector);
- }
-
- return sibling;
- }
-
- getDropdownLabel() {
- var that = this;
- var labelText = that.getSelectedOptions('text');
-
- if (labelText.length < 1) {
- labelText = that.settings.placeholder;
- }
- else if (labelText.length > that.settings.numDisplayed) {
- labelText = that.settings.overflowText.replace('{n}', labelText.length);
- }
- else {
- labelText = labelText.join(', ');
- }
-
- return labelText;
- }
-
- debounce(func, wait) {
- var timeout;
- return (...args) => {
- var boundFunc = func.bind(this, ...args);
- clearTimeout(timeout);
- timeout = setTimeout(boundFunc, wait);
- }
- }
-
- trigger(eventName, ...args) {
- document.dispatchEvent(new CustomEvent(eventName, {detail: [...args]}));
- }
-
- on(eventName, elementSelector, handler) {
- document.addEventListener(eventName, function(e) {
- // loop parent nodes from the target to the delegation node
- for (var target = e.target; target && target != this; target = target.parentNode) {
- if (target.matches(elementSelector)) {
- handler.call(target, e);
- break;
- }
- }
- }, false);
- }
-
- bindEvents() {
- var that = this;
- var optionSelector = '.fs-option:not(.fs-hidden):not(.disabled)';
- var unaccented = (str) => str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
-
- // debounce search for better performance
- that.on('keyup', '.fs-search input', that.debounce(function(e) {
- var wrap = e.target.closest('.fs-wrap');
- var options = wrap._rel.options;
-
- var matchOperators = /[|\\{}()[\]^$+*?.]/g;
- var keywords = e.target.value.replace(matchOperators, '\\$&');
- keywords = unaccented(keywords);
-
- // if the searchCache already has a prefixed version of this search
- // then don't un-hide the existing exclusions
- if (0 !== keywords.indexOf(window.fSelectInit.searchCache)) {
- wrap.querySelectorAll('.fs-option, .fs-optgroup-label').forEach((node) => node.classList.remove('fs-hidden'));
- }
-
- window.fSelectInit.searchCache = keywords;
-
- for (var i = 0; i < options.length; i++) {
- if ('' === options[i].value) continue;
-
- var needle = new RegExp(keywords, 'gi');
- var haystack = unaccented(options[i].text);
-
- if (null === haystack.match(needle)) {
- wrap.querySelector('.fs-option[data-idx="' + i + '"]').classList.add('fs-hidden');
- }
- }
-
- // hide optgroups if no choices
- wrap.querySelectorAll('.fs-optgroup-label').forEach((node) => {
- var group = node.getAttribute('data-group');
- var container = node.closest('.fs-options');
- var count = container.querySelectorAll('.fs-option.g' + group + ':not(.fs-hidden)').length;
-
- if (count < 1) {
- node.classList.add('fs-hidden');
- }
- });
-
- // toggle the noResultsText div
- if (wrap.querySelectorAll('.fs-option:not(.fs-hidden').length) {
- wrap.querySelector('.fs-no-results').classList.add('fs-hidden');
- }
- else {
- wrap.querySelector('.fs-no-results').classList.remove('fs-hidden');
- }
-
- }, 100));
-
- that.on('click', optionSelector, function(e) {
- var wrap = this.closest('.fs-wrap');
- var value = this.getAttribute('data-value');
- var input = wrap._rel;
- var isMultiple = wrap.classList.contains('multiple');
-
- if (!isMultiple) {
- input.value = value;
- wrap.querySelectorAll('.fs-option.selected').forEach((node) => node.classList.remove('selected'));
- }
- else {
- var idx = parseInt(this.getAttribute('data-idx'));
- input.options[idx].selected = !this.classList.contains('selected');
- }
-
- this.classList.toggle('selected');
-
- var label = input.fselect.getDropdownLabel();
- wrap.querySelector('.fs-label').innerHTML = label;
-
- // fire a change event
- input.dispatchEvent(new Event('change', { bubbles: true }));
- input.fselect.trigger('fs:changed', wrap);
-
- if (!isMultiple) {
- input.fselect.close();
- }
-
- e.stopImmediatePropagation();
- });
-
- that.on('keydown', '*', function(e) {
- var wrap = this.closest('.fs-wrap');
-
- if (!wrap) return;
-
- if (-1 < [38, 40, 27].indexOf(e.which)) {
- e.preventDefault();
- }
-
- if (32 == e.which || 13 == e.which) { // space, enter
- if (e.target.closest('.fs-search')) {
- // preserve spaces for search
- }
- else if (e.target.matches(optionSelector)) {
- e.target.click();
- e.preventDefault();
- }
- else {
- wrap.querySelector('.fs-label').click();
- e.preventDefault();
- }
- }
- else if (38 == e.which) { // up
- var sibling = wrap._rel.fselect.getAdjacentSibling('previous');
- window.fSelectInit.lastFocus = sibling; // stop at the search box
-
- if (sibling) {
- sibling.focus();
- }
- else {
- wrap.querySelector('.fs-search input').focus();
- }
- }
- else if (40 == e.which) { // down
- var sibling = wrap._rel.fselect.getAdjacentSibling('next');
-
- if (sibling) {
- sibling.focus();
- window.fSelectInit.lastFocus = sibling; // stop at the bottom
- }
- }
- else if (9 == e.which || 27 == e.which) { // tab, esc
- wrap._rel.fselect.close();
- }
- });
-
- that.on('click', '*', function(e) {
- var wrap = this.closest('.fs-wrap');
- var lastActive = window.fSelectInit.activeEl;
-
- if (wrap) {
- var labelWrap = this.closest('.fs-label-wrap');
-
- if (labelWrap) {
- if (lastActive) {
- lastActive._rel.fselect.close();
- }
- if (wrap !== lastActive) {
- wrap._rel.fselect.open();
- }
- }
- }
- else {
- if (lastActive) {
- lastActive._rel.fselect.close();
- }
- }
- });
- }
- }
-
- var $ = (selector, options) => new fSelect(selector, options);
-
- return $;
-
-})();
-
-if ('undefined' !== typeof fUtil) {
- fUtil.fn.fSelect = function(opts) {
- this.each(function() { // no arrow function to preserve "this"
- fSelect(this, opts);
- });
- return this;
- };
-}
diff --git a/wp/wp-content/plugins/facetwp/assets/vendor/fTip/fTip.css b/wp/wp-content/plugins/facetwp/assets/vendor/fTip/fTip.css
deleted file mode 100644
index 23479a24..00000000
--- a/wp/wp-content/plugins/facetwp/assets/vendor/fTip/fTip.css
+++ /dev/null
@@ -1,18 +0,0 @@
-.ftip-wrap {
- position: absolute;
- display: none;
- max-width: 400px;
- padding: 6px 8px;
- background-color: #222;
- border-radius: 6px;
- opacity: 0;
- color: #fff;
- cursor: default;
- transition: height 0s, opacity 1s;
-}
-
-.ftip-wrap.active {
- height: auto;
- display: inline-block;
- opacity: 0.9;
-}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/facetwp/assets/vendor/fTip/fTip.js b/wp/wp-content/plugins/facetwp/assets/vendor/fTip/fTip.js
deleted file mode 100644
index b9011e7a..00000000
--- a/wp/wp-content/plugins/facetwp/assets/vendor/fTip/fTip.js
+++ /dev/null
@@ -1,100 +0,0 @@
-window.fTip = (() => {
-
- var qs = (selector) => document.querySelector(selector);
-
- class fTip {
-
- constructor(selector, options) {
- let that = this;
-
- var defaults = {
- content: (node) => node.getAttribute('title')
- };
-
- that.settings = Object.assign({}, defaults, options);
-
- var inputs = [];
-
- if ('string' === typeof selector) {
- var inputs = Array.from(document.querySelectorAll(selector));
- }
- else if (selector instanceof Node) {
- var inputs = [selector];
- }
- else if (Array.isArray(selector)) {
- var inputs = selector;
- }
-
- if (null === qs('.ftip-wrap')) {
- that.buildHtml();
- that.bindEvents();
- }
-
- inputs.forEach(function(input) {
- that.input = input;
- input.ftip = that;
- input.classList.add('ftip-enabled');
- });
- }
-
- open() {
- let input = this.input;
- let wrap = qs('.ftip-wrap');
-
- wrap.innerHTML = this.settings.content(input);
- wrap.classList.add('active');
-
- let wrapBounds = wrap.getBoundingClientRect();
- let inputBounds = input.getBoundingClientRect();
- let top = window.pageYOffset + inputBounds.top;
- let left = window.pageXOffset + inputBounds.right;
- let centered = ((inputBounds.height - wrapBounds.height) / 2);
-
- wrap.style.top = (top + centered) + 'px';
- wrap.style.left = (left + 10) + 'px';
- }
-
- buildHtml() {
- let html = '
';
- document.body.insertAdjacentHTML('beforeend', html);
- }
-
- bindEvents() {
- var that = this;
- let wrap = qs('.ftip-wrap');
-
- var delayHandler = () => {
- that.delay = setTimeout(() => {
- wrap.classList.remove('active');
- }, 250);
- };
-
- that.on('mouseover', '.ftip-enabled', function(e) {
- clearTimeout(that.delay);
- this.ftip.open();
- });
-
- that.on('mouseout', '.ftip-enabled', delayHandler);
- that.on('mouseout', '.ftip-wrap', delayHandler);
- that.on('mouseover', '.ftip-wrap', () => {
- clearTimeout(that.delay);
- });
- }
-
- on(eventName, elementSelector, handler) {
- document.addEventListener(eventName, function(e) {
- // loop parent nodes from the target to the delegation node
- for (var target = e.target; target && target != this; target = target.parentNode) {
- if (target.matches(elementSelector)) {
- handler.call(target, e);
- break;
- }
- }
- }, false);
- }
- }
-
- var $ = (selector, options) => new fTip(selector, options);
-
- return $;
-})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/facetwp/assets/vendor/fUtil/LICENSE.md b/wp/wp-content/plugins/facetwp/assets/vendor/fUtil/LICENSE.md
deleted file mode 100644
index 09116e9f..00000000
--- a/wp/wp-content/plugins/facetwp/assets/vendor/fUtil/LICENSE.md
+++ /dev/null
@@ -1,7 +0,0 @@
-Copyright 2021 FacetWP, LLC
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/wp/wp-content/plugins/facetwp/assets/vendor/fUtil/fUtil.js b/wp/wp-content/plugins/facetwp/assets/vendor/fUtil/fUtil.js
deleted file mode 100644
index 9264d15f..00000000
--- a/wp/wp-content/plugins/facetwp/assets/vendor/fUtil/fUtil.js
+++ /dev/null
@@ -1,451 +0,0 @@
-window.fUtil = (() => {
-
- class fUtil {
-
- constructor(selector) {
- if (typeof selector === 'string' || selector instanceof String) { // string
- var selector = selector.replace(':selected', ':checked');
-
- if ('' === selector) {
- this.nodes = [];
- }
- else if (this.isValidSelector(selector)) {
- this.nodes = Array.from(document.querySelectorAll(selector));
- }
- else {
- var tpl = document.createElement('template');
- tpl.innerHTML = selector;
- this.nodes = [tpl.content];
- }
- }
- else if (Array.isArray(selector)) { // array of nodes
- this.nodes = selector;
- }
- else if (typeof selector === 'object' && selector.nodeName) { // node
- this.nodes = [selector];
- }
- else if (typeof selector === 'function') { // function
- this.ready(selector);
- }
- else if (selector === window) { // window
- this.nodes = [window];
- }
- else { // document
- this.nodes = [document];
- }
-
- // custom plugins
- $.each($.fn, (handler, method) => {
- this[method] = handler;
- });
- }
-
- static isset(input) {
- return typeof input !== 'undefined';
- }
-
- static post(url, data, settings) {
- var settings = Object.assign({}, {
- dataType: 'json',
- contentType: 'application/json',
- headers: {},
- done: () => {},
- fail: () => {}
- }, settings);
-
- settings.headers['Content-Type'] = settings.contentType;
-
- data = ('application/json' === settings.contentType) ? JSON.stringify(data) : $.toEncoded(data);
-
- fetch(url, {
- method: 'POST',
- headers: settings.headers,
- body: data
- })
- .then(response => response[settings.dataType]())
- .then(json => settings.done(json))
- .catch(err => settings.fail(err));
- }
-
- static toEncoded(obj, prefix, out) {
- var out = out || [];
- var prefix = prefix || '';
-
- if (Array.isArray(obj)) {
- if (obj.length) {
- obj.forEach((val) => {
- $.toEncoded(val, prefix + '[]', out);
- });
- }
- else {
- $.toEncoded('', prefix, out);
- }
- }
- else if (typeof obj === 'object' && obj !== null) {
- Object.keys(obj).forEach((key) => {
- var new_prefix = prefix ? prefix + '[' + key + ']' : key;
- $.toEncoded(obj[key], new_prefix, out);
- });
- }
- else {
- out.push(encodeURIComponent(prefix) + '=' + encodeURIComponent(obj));
- }
-
- return out.join('&');
- }
-
- static forEach(items, callback) {
- if (typeof items === 'object' && items !== null) {
- if (Array.isArray(items)) {
- items.forEach((val, key) => callback.bind(val)(val, key));
- }
- else {
- Object.keys(items).forEach(key => {
- var val = items[key];
- callback.bind(val)(val, key);
- });
- }
- }
-
- return items;
- }
-
- isValidSelector(string) {
- try {
- document.createDocumentFragment().querySelector(string);
- }
- catch(err) {
- return false;
- }
- return true;
- }
-
- clone() {
- return $(this.nodes);
- }
-
- len() {
- return this.nodes.length;
- }
-
- each(callback) {
- this.nodes.forEach((node, key) => {
- let func = callback.bind(node); // set "this"
- func(node, key);
- });
-
- return this;
- }
-
- ready(callback) {
- if (typeof callback !== 'function') return;
-
- if (document.readyState === 'complete') {
- return callback();
- }
-
- document.addEventListener('DOMContentLoaded', callback, false);
- }
-
- addClass(className) {
- this.each(node => node.classList.add(className));
- return this;
- }
-
- removeClass(className) {
- this.each(node => node.classList.remove(className));
- return this;
- }
-
- hasClass(className) {
- return $.isset(this.nodes.find(node => node.classList.contains(className)));
- }
-
- toggleClass(className) {
- this.each(node => node.classList.toggle(className));
- return this;
- }
-
- is(selector) {
- for (let i = 0; i < this.len(); i++) { // forEach prevents loop exiting
- if (this.nodes[i].matches(selector)) {
- return true;
- }
- }
- return false;
- }
-
- find(selector) {
- var selector = selector.replace(':selected', ':checked');
- let nodes = [];
- let clone = this.clone();
-
- clone.each(node => {
- nodes = nodes.concat(Array.from(node.querySelectorAll(selector)));
- });
-
- clone.nodes = nodes;
- return clone;
- }
-
- first() {
- let clone = this.clone();
- if (clone.len()) {
- clone.nodes = this.nodes.slice(0, 1);
- }
- return clone;
- }
-
- last() {
- let clone = this.clone();
- if (clone.len()) {
- clone.nodes = this.nodes.slice(-1);
- }
- return clone;
- }
-
- prev(selector) {
- let nodes = [];
- let clone = this.clone();
-
- clone.each(node => {
- let sibling = node.previousElementSibling;
-
- while (sibling) {
- if (!$.isset(selector) || sibling.matches(selector)) break;
- sibling = sibling.previousElementSibling;
- }
-
- if (sibling) {
- nodes.push(sibling);
- }
- });
-
- clone.nodes = nodes;
- return clone;
- }
-
- next(selector) {
- let nodes = [];
- let clone = this.clone();
-
- clone.each(node => {
- let sibling = node.nextElementSibling;
-
- while (sibling) {
- if (!$.isset(selector) || sibling.matches(selector)) break;
- sibling = sibling.nextElementSibling;
- }
-
- if (sibling) {
- nodes.push(sibling);
- }
- });
-
- clone.nodes = nodes;
- return clone;
- }
-
- prepend(html) {
- this.each(node => node.insertAdjacentHTML('afterbegin', html));
- return this;
- }
-
- append(html) {
- this.each(node => node.insertAdjacentHTML('beforeend', html));
- return this;
- }
-
- parents(selector) {
- let parents = [];
- let clone = this.clone();
-
- clone.each(node => {
- let parent = node.parentNode;
- while (parent && parent !== document) {
- if (parent.matches(selector)) parents.push(parent);
- parent = parent.parentNode;
- }
- });
-
- clone.nodes = [...new Set(parents)]; // remove dupes
- return clone;
- }
-
- closest(selector) {
- let nodes = [];
- let clone = this.clone();
-
- clone.each(node => {
- let closest = node.closest(selector);
-
- if (closest) {
- nodes.push(closest);
- }
- });
-
- clone.nodes = nodes;
- return clone;
- }
-
- remove() {
- this.each(node => node.remove());
- return this;
- }
-
- on(eventName, selector, callback) {
- if (!$.isset(selector)) return;
- if (!$.isset(callback)) {
- var callback = selector;
- var selector = null;
- }
-
- // Reusable callback
- var checkForMatch = (e) => {
- if (null === selector || e.target.matches(selector)) {
- callback.bind(e.target)(e);
- }
- else if (e.target.closest(selector)) {
- var $this = e.target.closest(selector);
- callback.bind($this)(e);
- }
- };
-
- this.each(node => {
-
- // Attach a unique ID to each node
- if (!$.isset(node._id)) {
- node._id = $.event.count;
- $.event.store[$.event.count] = node;
- $.event.count++;
- }
-
- var id = node._id;
-
- // Store the raw callback, needed for .off()
- checkForMatch._str = callback.toString();
-
- if (!$.isset($.event.map[id])) {
- $.event.map[id] = {};
- }
- if (!$.isset($.event.map[id][eventName])) {
- $.event.map[id][eventName] = {};
- }
- if (!$.isset($.event.map[id][eventName][selector])) {
- $.event.map[id][eventName][selector] = [];
- }
-
- // Use $.event.map to store event references
- // removeEventListener needs named callbacks, so we're creating
- // one for every handler
- let length = $.event.map[id][eventName][selector].push(checkForMatch);
-
- node.addEventListener(eventName, $.event.map[id][eventName][selector][length - 1]);
- });
-
- return this;
- }
-
- off(eventName, selector, callback) {
- if (!$.isset(callback)) {
- var callback = selector;
- var selector = null;
- }
-
- this.each(node => {
- var id = node._id;
-
- $.each($.event.map[id], (selectors, theEventName) => {
- $.each(selectors, (callbacks, theSelector) => {
- $.each(callbacks, (theCallback, index) => {
- if (
- (!eventName || theEventName === eventName) &&
- (!selector || theSelector === selector) &&
- (!callback || theCallback._str === callback.toString())
- ) {
- node.removeEventListener(theEventName, $.event.map[id][theEventName][theSelector][index]);
- delete $.event.map[id][theEventName][theSelector][index];
- }
- });
- });
- });
- });
-
- return this;
- }
-
- trigger(eventName, extraData) {
- this.each(node => node.dispatchEvent(new CustomEvent(eventName, {
- detail: extraData,
- bubbles: true
- })));
- return this;
- }
-
- attr(attributeName, value) {
- if (!$.isset(value)) {
- return (this.len()) ? this.nodes[0].getAttribute(attributeName) : null;
- }
-
- this.each(node => node.setAttribute(attributeName, value));
- return this;
-
- }
-
- data(key, value) {
- if (!$.isset(value)) {
- return (this.len()) ? this.nodes[0]._fdata[key] : null;
- }
-
- this.each(node => node._fdata[key] = value);
- return this;
- }
-
- html(htmlString) {
- if (!$.isset(htmlString)) {
- return (this.len()) ? this.nodes[0].innerHTML : null;
- }
-
- this.each(node => node.innerHTML = htmlString);
- return this;
- }
-
- text(textString) {
- if (!$.isset(textString)) {
- return (this.len()) ? this.nodes[0].textContent : null;
- }
- else {
- this.each(node => node.textContent = textString);
- return this;
- }
- }
-
- val(value) {
- if (!$.isset(value)) {
- if (this.len()) {
- var field = this.nodes[0];
- if (field.nodeName.toLowerCase() === 'select' && field.multiple) {
- return [...field.options].filter((x) => x.selected).map((x) => x.value);
- }
- return field.value;
- }
- return null;
- }
- else {
- this.each(node => node.value = value);
- return this;
- }
- }
- }
-
- var $ = selector => new fUtil(selector);
-
- // Set object methods
- $.fn = {};
- $.post = fUtil.post;
- $.isset = fUtil.isset;
- $.each = fUtil.forEach;
- $.toEncoded = fUtil.toEncoded;
- $.event = {map: {}, store: [], count: 0};
- return $;
-})();
diff --git a/wp/wp-content/plugins/facetwp/assets/vendor/noUiSlider/nouislider.css b/wp/wp-content/plugins/facetwp/assets/vendor/noUiSlider/nouislider.css
deleted file mode 100644
index 7bdc08a4..00000000
--- a/wp/wp-content/plugins/facetwp/assets/vendor/noUiSlider/nouislider.css
+++ /dev/null
@@ -1,150 +0,0 @@
-.noUi-target,
-.noUi-target * {
- touch-action: none;
- user-select: none;
- box-sizing: border-box;
-}
-.noUi-target {
- position: relative;
-}
-.noUi-base,
-.noUi-connects {
- width: 100%;
- height: 100%;
- position: relative;
- z-index: 1;
-}
-.noUi-connects {
- overflow: hidden;
- z-index: 0;
-}
-.noUi-connect,
-.noUi-origin {
- will-change: transform;
- position: absolute;
- z-index: 1;
- top: 0;
- right: 0;
- height: 100%;
- width: 100%;
- transform-origin: 0 0;
- transform-style: flat;
-}
-.noUi-txt-dir-rtl.noUi-horizontal .noUi-origin {
- left: 0;
- right: auto;
-}
-.noUi-horizontal .noUi-origin {
- height: 0;
-}
-.noUi-handle {
- backface-visibility: hidden;
- position: absolute;
-}
-.noUi-touch-area {
- height: 100%;
- width: 100%;
-}
-.noUi-state-tap .noUi-connect,
-.noUi-state-tap .noUi-origin {
- transition: transform 0.3s;
-}
-.noUi-horizontal {
- height: 14px;
-}
-.noUi-horizontal .noUi-handle {
- width: 20px;
- height: 20px;
- right: -10px;
- top: -4px;
-}
-.noUi-target {
- background: #FAFAFA;
- border-radius: 4px;
- border: 1px solid #D3D3D3;
- padding: 0 8px;
-}
-.noUi-connects {
- border-radius: 3px;
-}
-.noUi-connect {
- background: #ddd;
-}
-.noUi-handle {
- border: 1px solid #D9D9D9;
- border-radius: 3px;
- background: #FFF;
- cursor: default;
-}
-.noUi-pips,
-.noUi-pips * {
- box-sizing: border-box;
-}
-.noUi-pips {
- position: absolute;
- color: #999;
-}
-.noUi-value {
- position: absolute;
- white-space: nowrap;
- text-align: center;
-}
-.noUi-value-sub {
- color: #ccc;
- font-size: 10px;
-}
-.noUi-marker {
- position: absolute;
- background: #CCC;
-}
-.noUi-marker-sub {
- background: #AAA;
-}
-.noUi-marker-large {
- background: #AAA;
-}
-.noUi-pips-horizontal {
- padding: 10px 0;
- height: 80px;
- top: 100%;
- left: 0;
- width: 100%;
-}
-.noUi-value-horizontal {
- transform: translate(-50%, 50%);
-}
-.noUi-rtl .noUi-value-horizontal {
- transform: translate(50%, 50%);
-}
-.noUi-marker-horizontal.noUi-marker {
- margin-left: -1px;
- width: 2px;
- height: 5px;
-}
-.noUi-marker-horizontal.noUi-marker-sub {
- height: 10px;
-}
-.noUi-marker-horizontal.noUi-marker-large {
- height: 15px;
-}
-.noUi-tooltip {
- display: block;
- position: absolute;
- border: 1px solid #D9D9D9;
- border-radius: 3px;
- background: #fff;
- color: #000;
- padding: 5px;
- text-align: center;
- white-space: nowrap;
-}
-.noUi-horizontal .noUi-tooltip {
- transform: translate(-50%, 0);
- left: 50%;
- bottom: 120%;
-}
-.noUi-horizontal .noUi-origin > .noUi-tooltip {
- transform: translate(50%, 0);
- left: auto;
- bottom: 10px;
-}
diff --git a/wp/wp-content/plugins/facetwp/assets/vendor/noUiSlider/nouislider.min.js b/wp/wp-content/plugins/facetwp/assets/vendor/noUiSlider/nouislider.min.js
deleted file mode 100644
index e175fb27..00000000
--- a/wp/wp-content/plugins/facetwp/assets/vendor/noUiSlider/nouislider.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! noUiSlider - 15.6.1 custom - 2022-09-06 */
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).noUiSlider={})}(this,function(ut){"use strict";function n(t){return"object"==typeof t&&"function"==typeof t.to}function ct(t){t.parentElement.removeChild(t)}function pt(t){return null!=t}function ft(t){t.preventDefault()}function i(t){return"number"==typeof t&&!isNaN(t)&&isFinite(t)}function dt(t,e,r){0=e[r];)r+=1;return r}function r(t,e,r){var n,i,o;return r>=t.slice(-1)[0]?100:(o=l(r,t),n=t[o-1],t=t[o],i=e[o-1],e=e[o],i+(o=r,a(r=[n,t],r[0]<0?o+Math.abs(r[0]):o-r[0],0)/s(i,e)))}function o(t,e,r,n){var i,o,s;return 100===n?n:(o=t[(i=l(n,t))-1],s=t[i],r?(s-o)/2this.xPct[n+1];)n++;else t===this.xPct[this.xPct.length-1]&&(n=this.xPct.length-2);r||t!==this.xPct[n+1]||n++;for(var i,o=1,s=(e=null===e?[]:e)[n],a=0,l=0,u=0,c=r?(t-this.xPct[n])/(this.xPct[n+1]-this.xPct[n]):(this.xPct[n+1]-t)/(this.xPct[n+1]-this.xPct[n]);0= 2) required for mode 'count'.");for(var e=t.values-1,r=100/e,n=[];e--;)n[e]=e*r;return n.push(100),q(n,t.stepped)}(d),m={},t=S.xVal[0],e=S.xVal[S.xVal.length-1],g=!1,v=!1,b=0;return(h=h.slice().sort(function(t,e){return t-e}).filter(function(t){return!this[t]&&(this[t]=!0)},{}))[0]!==t&&(h.unshift(t),g=!0),h[h.length-1]!==e&&(h.push(e),v=!0),h.forEach(function(t,e){var r,n,i,o,s,a,l,u,c=h[e+1],p=d.mode===ut.PipsMode.Steps,f=(f=p?S.xNumSteps[e]:f)||c-t;for(void 0===c&&(c=t),f=Math.max(f,1e-7),r=t;r<=c;r=Number((r+f).toFixed(7))){for(a=(s=(i=S.toStepping(r))-b)/(d.density||1),u=s/(l=Math.round(a)),n=1;n<=l;n+=1)m[(o=b+n*u).toFixed(5)]=[S.fromStepping(o),0];s=-1ut.PipsType.NoValue&&((n=y(a,!1)).className=p(t,f.cssClasses.value),n.setAttribute("data-value",String(r)),n.style[f.style]=e+"%",n.innerHTML=String(s.to(r))))}),a}function P(){n&&(ct(n),n=null)}function C(t){P();var e=X(t),r=t.filter,t=t.format||{to:function(t){return String(Math.round(t))}};return n=c.appendChild(Y(e,r,t))}function I(){var t=i.getBoundingClientRect(),e="offset"+["Width","Height"][f.ort];return 0===f.ort?t.width||i[e]:t.height||i[e]}function N(n,i,o,s){function e(t){var e,r;return!!(t=function(e,t,r){var n=0===e.type.indexOf("touch"),i=0===e.type.indexOf("mouse"),o=0===e.type.indexOf("pointer"),s=0,a=0;0===e.type.indexOf("MSPointer")&&(o=!0);if("mousedown"===e.type&&!e.buttons&&!e.touches)return!1;if(n){n=function(t){t=t.target;return t===r||r.contains(t)||e.composed&&e.composedPath().shift()===r};if("touchstart"===e.type){var l=Array.prototype.filter.call(e.touches,n);if(1r.stepAfter.startValue&&(n=r.stepAfter.startValue-t),i=t>r.thisStep.startValue?r.thisStep.step:!1!==r.stepBefore.step&&t-r.stepBefore.highestStep,100===e?n=null:0===e&&(i=null);t=S.countStepDecimals();return null!==n&&!1!==n&&(n=Number(n.toFixed(t))),[i=null!==i&&!1!==i?Number(i.toFixed(t)):i,n]}gt(t=c,f.cssClasses.target),0===f.dir?gt(t,f.cssClasses.ltr):gt(t,f.cssClasses.rtl),0===f.ort?gt(t,f.cssClasses.horizontal):gt(t,f.cssClasses.vertical),gt(t,"rtl"===getComputedStyle(t).direction?f.cssClasses.textDirectionRtl:f.cssClasses.textDirectionLtr),i=y(t,f.cssClasses.base);var O,st=f.connect,at=i,lt=y(at,f.cssClasses.connects);l=[],(a=[]).push(F(lt,st[0]));for(var L=0;L*{margin:.5em}.layout_default.picker_wrapper::before{content:'';display:block;width:100%;height:0;order:1}.layout_default .picker_slider,.layout_default .picker_selector{padding:1em}.layout_default .picker_hue{width:100%}.layout_default .picker_sl{flex:1 1 auto}.layout_default .picker_sl::before{content:'';display:block;padding-bottom:100%}.layout_default .picker_editor{order:1;width:6rem}.layout_default .picker_editor input{width:calc(100% + 2px);height:calc(100% + 2px)}.layout_default .picker_sample{order:1;flex:1 1 auto}.layout_default .picker_done{order:1}.picker_wrapper{box-sizing:border-box;background:#f2f2f2;box-shadow:0 0 0 1px silver;cursor:default;font-family:sans-serif;color:#444;pointer-events:auto}.picker_wrapper:focus{outline:none}.picker_wrapper button,.picker_wrapper input{margin:-1px}.picker_selector{position:absolute;z-index:1;display:block;transform:translate(-50%, -50%);border:2px solid white;border-radius:100%;box-shadow:0 0 3px 1px #67b9ff;background:currentColor;cursor:pointer}.picker_slider .picker_selector{border-radius:2px}.picker_hue{position:relative;background-image:linear-gradient(90deg, red, yellow, lime, cyan, blue, magenta, red);box-shadow:0 0 0 1px silver}.picker_sl{position:relative;box-shadow:0 0 0 1px silver;background-image:linear-gradient(180deg, white, rgba(255,255,255,0) 50%),linear-gradient(0deg, black, rgba(0,0,0,0) 50%),linear-gradient(90deg, gray, rgba(128,128,128,0))}.picker_alpha,.picker_sample{position:relative;background:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='2' height='2'%3E%3Cpath d='M1,0H0V1H2V2H1' fill='lightgrey'/%3E%3C/svg%3E\") left top/contain white;box-shadow:0 0 0 1px silver}.picker_alpha .picker_selector,.picker_sample .picker_selector{background:none}.picker_editor input{box-sizing:border-box;font-family:monospace;padding:.1em .2em}.picker_sample::before{content:'';position:absolute;display:block;width:100%;height:100%;background:currentColor}.picker_done button{box-sizing:border-box;padding:.2em .5em;cursor:pointer}.picker_arrow{position:absolute;z-index:-1}.picker_wrapper.popup{position:absolute;z-index:2;margin:1.5em}.picker_wrapper.popup,.picker_wrapper.popup .picker_arrow::before,.picker_wrapper.popup .picker_arrow::after{background:#f2f2f2;box-shadow:0 0 10px 1px rgba(0,0,0,0.4)}.picker_wrapper.popup .picker_arrow{width:3em;height:3em;margin:0}.picker_wrapper.popup .picker_arrow::before,.picker_wrapper.popup .picker_arrow::after{content:\"\";display:block;position:absolute;top:0;left:0;z-index:-99}.picker_wrapper.popup .picker_arrow::before{width:100%;height:100%;transform:skew(45deg);transform-origin:0 100%}.picker_wrapper.popup .picker_arrow::after{width:150%;height:150%;box-shadow:none}.popup.popup_top{bottom:100%;left:0}.popup.popup_top .picker_arrow{bottom:0;left:0;transform:rotate(-90deg)}.popup.popup_bottom{top:100%;left:0}.popup.popup_bottom .picker_arrow{top:0;left:0;transform:rotate(90deg) scale(1, -1)}.popup.popup_left{top:0;right:100%}.popup.popup_left .picker_arrow{top:0;right:0;transform:scale(-1, 1)}.popup.popup_right{top:0;left:100%}.popup.popup_right .picker_arrow{top:0;left:0}";var e=t.prototype;return e.setOptions=function(t){if(t){var e=this.settings;if(t instanceof HTMLElement)e.parent=t;else{e.parent&&t.parent&&e.parent!==t.parent&&(e.parent.removeEventListener("click",this._openProxy,!1),this._popupInited=!1),function(t,e,i){for(var o in t)i&&0<=i.indexOf(o)||(e[o]=t[o])}(t,e),t.onChange&&(this.onChange=t.onChange),t.onDone&&(this.onDone=t.onDone),t.onOpen&&(this.onOpen=t.onOpen),t.onClose&&(this.onClose=t.onClose);var i=t.color;i&&this._setColor(i)}var o=e.parent;o&&e.popup&&!this._popupInited?(a(o,"click",this._openProxy),p(o,[" ","Spacebar","Enter"],this._openProxy),this._popupInited=!0):t.parent&&!e.popup&&this.show()}},e.openHandler=function(t){if(this.show()){t&&t.preventDefault(),this.settings.parent.style.pointerEvents="none";var e=t&&t.type===o?this._domEdit:this.domElement;setTimeout(function(){e.focus()},100),this.onOpen&&this.onOpen(this.color)}},e.closeHandler=function(t){var e,i=this.settings.parent,o=t&&t.type,r=!1;t?o===n||o===s?this.domElement.contains(t.target)||(r=!0):((e=t).preventDefault(),e.stopPropagation(),r=!0):r=!0,r&&this.hide()&&(i.style.pointerEvents="",o!==n&&i.focus(),this.onClose&&this.onClose(this.color))},e.movePopup=function(t,e){this.closeHandler(),this.setOptions(t),e&&this.openHandler()},e.setColor=function(t,e){this._setColor(t,{silent:e})},e._setColor=function(t,e){if("string"==typeof t&&(t=t.trim()),t){var i;e=e||{};try{i=new r(t)}catch(t){if(e.failSilently)return;throw t}if(!this.settings.alpha){var o=i.hsla();o[3]=1,i.hsla(o)}this.color=i,this._setHSLA(null,null,null,null,e)}},e.show=function(){var t=this.settings;if(!t.parent)return!1;if(this.domElement){var e=this._toggleDOM(!0);return this._setPosition(),e}var i,o,r=t.template||'',n=(i=r,(o=document.createElement("div")).innerHTML=i,o.firstElementChild);return this.domElement=n,this._domH=w(".picker_hue",n),this._domSL=w(".picker_sl",n),this._domA=w(".picker_alpha",n),this._domEdit=w(".picker_editor input",n),this._domSample=w(".picker_sample",n),this._domOkay=w(".picker_done button",n),n.classList.add("layout_"+t.layout),t.alpha||n.classList.add("no_alpha"),t.editor||n.classList.add("no_editor"),this._ifPopup(function(){n.classList.add("popup")}),this._setPosition(),this.color?this._updateUI():this._setColor("#0cf"),this._bindEvents(),!0},e.hide=function(){return this._toggleDOM(!1)},e._bindEvents=function(){var i=this,t=this.domElement;a(t,"click",function(t){t.preventDefault()}),l(this._domH,function(t,e){i._setHSLA(t)}),l(this._domSL,function(t,e){i._setHSLA(null,t,1-e)}),this.settings.alpha&&l(this._domA,function(t,e){i._setHSLA(null,null,null,1-e)});var e=this._domEdit;function o(t){i._ifPopup(function(){i.closeHandler(t)})}function r(t){i._ifPopup(function(){i.closeHandler(t)}),i.onDone&&i.onDone(i.color)}a(e,"input",function(t){i._setColor(this.value,{fromEditor:!0,failSilently:!0})}),a(e,"focus",function(t){this.selectionStart===this.selectionEnd&&this.select()}),a(window,n,o),a(window,s,o),p(t,["Esc","Escape"],o),a(this._domOkay,"click",r),p(t,["Enter"],r)},e._setPosition=function(){var i=this.settings.parent,o=this.domElement;i!==o.parentNode&&i.appendChild(o),this._ifPopup(function(t){"static"===getComputedStyle(i).position&&(i.style.position="relative");var e=!0===t?"popup_right":"popup_"+t;["popup_top","popup_bottom","popup_left","popup_right"].forEach(function(t){t===e?o.classList.add(t):o.classList.remove(t)}),o.classList.add(e)})},e._setHSLA=function(t,e,i,o,r){r=r||{};var n=this.color,s=n.hsla();[t,e,i,o].forEach(function(t,e){(t||0===t)&&(s[e]=t)}),n.hsla(s),this._updateUI(r),this.onChange&&!r.silent&&this.onChange(n)},e._updateUI=function(t){if(this.domElement){t=t||{};var e=this.color,i=e.hsla(),o="hsl("+360*i[0]+", 100%, 50%)",r=e.hslString(),n=e.hslaString(),s=this._domH,p=this._domSL,a=this._domA,l=w(".picker_selector",s),c=w(".picker_selector",p),u=w(".picker_selector",a);g(0,l,i[0]),this._domSL.style.backgroundColor=this._domH.style.color=o,g(0,c,i[1]),m(0,c,1-i[2]),p.style.color=r,m(0,u,1-i[3]);var h=r,d=h.replace("hsl","hsla").replace(")",", 0)"),f="linear-gradient("+[h,d]+")";if(this._domA.style.backgroundImage=f+", url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='2' height='2'%3E%3Cpath d='M1,0H0V1H2V2H1' fill='lightgrey'/%3E%3C/svg%3E\")",!t.fromEditor){var _=e.hex();this._domEdit.value=this.settings.alpha?_:_.substr(0,7)}this._domSample.style.color=n}function g(t,e,i){e.style.left=100*i+"%"}function m(t,e,i){e.style.top=100*i+"%"}},e._ifPopup=function(t,e){var i=this.settings;i.parent&&i.popup?t&&t(i.popup):e&&e()},e._toggleDOM=function(t){var e=this.domElement;if(!e)return!1;var i=t?"":"none",o=e.style.display!==i;return o&&(e.style.display=i),o},t}()});
\ No newline at end of file
diff --git a/wp/wp-content/plugins/facetwp/assets/vendor/vue/Sortable.min.js b/wp/wp-content/plugins/facetwp/assets/vendor/vue/Sortable.min.js
deleted file mode 100644
index 17bb16c7..00000000
--- a/wp/wp-content/plugins/facetwp/assets/vendor/vue/Sortable.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! Sortable 1.15.0 - MIT | git://github.com/SortableJS/Sortable.git */
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).Sortable=e()}(this,function(){"use strict";function e(e,t){var n,o=Object.keys(e);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(e),t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,n)),o}function M(o){for(var t=1;tt.length)&&(e=t.length);for(var n=0,o=new Array(e);n"===e[0]&&(e=e.substring(1)),t))try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return}}function N(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"!==e[0]||t.parentNode===n)&&p(t,e)||o&&t===n)return t}while(t!==n&&(t=(i=t).host&&i!==document&&i.host.nodeType?i.host:i.parentNode))}var i;return null}var g,m=/\s+/g;function I(t,e,n){var o;t&&e&&(t.classList?t.classList[n?"add":"remove"](e):(o=(" "+t.className+" ").replace(m," ").replace(" "+e+" "," "),t.className=(o+(n?" "+e:"")).replace(m," ")))}function P(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];o[e=!(e in o||-1!==e.indexOf("webkit"))?"-webkit-"+e:e]=n+("string"==typeof n?"":"px")}}function v(t,e){var n="";if("string"==typeof t)n=t;else do{var o=P(t,"transform")}while(o&&"none"!==o&&(n=o+" "+n),!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function b(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i=n.left-e&&i<=n.right+e,e=r>=n.top-e&&r<=n.bottom+e;return o&&e?a=t:void 0}}),a);if(e){var n,o={};for(n in t)t.hasOwnProperty(n)&&(o[n]=t[n]);o.target=o.rootEl=e,o.preventDefault=void 0,o.stopPropagation=void 0,e[j]._onDragOver(o)}}var i,r,a}function Yt(t){q&&q.parentNode[j]._isOutsideThisEl(t.target)}function Bt(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[j]=this;var n,o,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return It(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Bt.supportPointer&&"PointerEvent"in window&&!u,emptyInsertThreshold:5};for(n in K.initializePlugins(this,t,i),i)n in e||(e[n]=i[n]);for(o in Pt(e),this)"_"===o.charAt(0)&&"function"==typeof this[o]&&(this[o]=this[o].bind(this));this.nativeDraggable=!e.forceFallback&&Mt,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?h(t,"pointerdown",this._onTapStart):(h(t,"mousedown",this._onTapStart),h(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(h(t,"dragover",this),h(t,"dragenter",this)),Et.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,x())}function Ft(t,e,n,o,i,r,a,l){var s,c,u=t[j],d=u.options.onMove;return!window.CustomEvent||y||w?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||k(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),c=d?d.call(u,s,a):c}function jt(t){t.draggable=!1}function Ht(){Ct=!1}function Lt(t){return setTimeout(t,0)}function Kt(t){return clearTimeout(t)}Bt.prototype={constructor:Bt,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(gt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,q):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,o=this.el,t=this.options,i=t.preventOnFilter,r=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=t.filter;if(!function(t){Tt.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&Tt.push(o)}}(o),!q&&!(/mousedown|pointerdown/.test(r)&&0!==e.button||t.disabled)&&!s.isContentEditable&&(this.nativeDraggable||!u||!l||"SELECT"!==l.tagName.toUpperCase())&&!((l=N(l,t.draggable,o,!1))&&l.animated||J===l)){if(nt=B(l),it=B(l,t.draggable),"function"==typeof c){if(c.call(this,e,l,this))return U({sortable:n,rootEl:s,name:"filter",targetEl:l,toEl:o,fromEl:o}),z("filter",n,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c=c&&c.split(",").some(function(t){if(t=N(s,t.trim(),o,!1))return U({sortable:n,rootEl:t,name:"filter",targetEl:l,fromEl:o,toEl:o}),z("filter",n,{evt:e}),!0}))return void(i&&e.cancelable&&e.preventDefault());t.handle&&!N(s,t.handle,o,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;n&&!q&&n.parentNode===r&&(o=k(n),$=r,V=(q=n).parentNode,Q=q.nextSibling,J=n,at=a.group,st={target:Bt.dragged=q,clientX:(e||t).clientX,clientY:(e||t).clientY},ht=st.clientX-o.left,ft=st.clientY-o.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,q.style["will-change"]="all",o=function(){z("delayEnded",i,{evt:t}),Bt.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!s&&i.nativeDraggable&&(q.draggable=!0),i._triggerDragStart(t,e),U({sortable:i,name:"choose",originalEvent:t}),I(q,a.chosenClass,!0))},a.ignore.split(",").forEach(function(t){b(q,t.trim(),jt)}),h(l,"dragover",Xt),h(l,"mousemove",Xt),h(l,"touchmove",Xt),h(l,"mouseup",i._onDrop),h(l,"touchend",i._onDrop),h(l,"touchcancel",i._onDrop),s&&this.nativeDraggable&&(this.options.touchStartThreshold=4,q.draggable=!0),z("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(w||y)?o():Bt.eventCanceled?this._onDrop():(h(l,"mouseup",i._disableDelayedDrag),h(l,"touchend",i._disableDelayedDrag),h(l,"touchcancel",i._disableDelayedDrag),h(l,"mousemove",i._delayedDragTouchMoveHandler),h(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&h(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)))},_delayedDragTouchMoveHandler:function(t){t=t.touches?t.touches[0]:t;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){q&&jt(q),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;f(t,"mouseup",this._disableDelayedDrag),f(t,"touchend",this._disableDelayedDrag),f(t,"touchcancel",this._disableDelayedDrag),f(t,"mousemove",this._delayedDragTouchMoveHandler),f(t,"touchmove",this._delayedDragTouchMoveHandler),f(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?h(document,"pointermove",this._onTouchMove):h(document,e?"touchmove":"mousemove",this._onTouchMove):(h(q,"dragend",this),h($,"dragstart",this._onDragStart));try{document.selection?Lt(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){var n;yt=!1,$&&q?(z("dragStarted",this,{evt:e}),this.nativeDraggable&&h(document,"dragover",Yt),n=this.options,t||I(q,n.dragClass,!1),I(q,n.ghostClass,!0),Bt.active=this,t&&this._appendGhost(),U({sortable:this,name:"start",originalEvent:e})):this._nulling()},_emulateDragOver:function(){if(ct){this._lastX=ct.clientX,this._lastY=ct.clientY,kt();for(var t=document.elementFromPoint(ct.clientX,ct.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(ct.clientX,ct.clientY))!==e;)e=t;if(q.parentNode[j]._isOutsideThisEl(t),e)do{if(e[j])if(e[j]._onDragOver({clientX:ct.clientX,clientY:ct.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}while(e=(t=e).parentNode);Rt()}},_onTouchMove:function(t){if(st){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=Z&&v(Z,!0),a=Z&&r&&r.a,l=Z&&r&&r.d,e=Ot&&bt&&E(bt),a=(i.clientX-st.clientX+o.x)/(a||1)+(e?e[0]-_t[0]:0)/(a||1),l=(i.clientY-st.clientY+o.y)/(l||1)+(e?e[1]-_t[1]:0)/(l||1);if(!Bt.active&&!yt){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))n.right+10||t.clientX<=n.right&&t.clientY>n.bottom&&t.clientX>=n.left:t.clientX>n.right&&t.clientY>n.top||t.clientX<=n.right&&t.clientY>n.bottom+10}(n,r,this)&&!g.animated){if(g===q)return O(!1);if((l=g&&a===n.target?g:l)&&(w=k(l)),!1!==Ft($,a,q,o,l,w,n,!!l))return x(),g&&g.nextSibling?a.insertBefore(q,g.nextSibling):a.appendChild(q),V=a,A(),O(!0)}else if(g&&function(t,e,n){n=k(X(n.el,0,n.options,!0));return e?t.clientX{t.exports=function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e{t.exports=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}},860:t=>{t.exports=function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}},206:t=>{t.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}},319:(t,e,n)=>{var o=n(646),i=n(860),s=n(206);t.exports=function(t){return o(t)||i(t)||s()}},8:e=>{function n(t){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?e.exports=n=function(t){return typeof t}:e.exports=n=function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}e.exports=n}},o={},y.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return y.d(e,{a:e}),e},y.d=(t,e)=>{for(var n in e)y.o(e,n)&&!y.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},y.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),y.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},b={},(()=>{"use strict";y.r(b),y.d(b,{VueSelect:()=>h,default:()=>f,mixins:()=>d});var t=y(319),o=y.n(t),t=y(8),i=y.n(t),t=y(713),s=y.n(t),t={props:{autoscroll:{type:Boolean,default:!0}},watch:{typeAheadPointer:function(){this.autoscroll&&this.maybeAdjustScroll()},open:function(t){var e=this;this.autoscroll&&t&&this.$nextTick(function(){return e.maybeAdjustScroll()})}},methods:{maybeAdjustScroll:function(){var t,e,n,o,i=(null==(i=this.$refs.dropdownMenu)?void 0:i.children[this.typeAheadPointer])||!1;if(i)return t=this.getDropdownViewport(),e=(o=i.getBoundingClientRect()).top,n=o.bottom,o=o.height,et.bottom?this.$refs.dropdownMenu.scrollTop=i.offsetTop-(t.height-o):void 0},getDropdownViewport:function(){return this.$refs.dropdownMenu?this.$refs.dropdownMenu.getBoundingClientRect():{height:0,top:0,bottom:0}}}},e={data:function(){return{typeAheadPointer:-1}},watch:{filteredOptions:function(){for(var t=0;t=0&&Math.floor(e)===e&&isFinite(t)}function f(t){return r(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function d(t){return null==t?"":Array.isArray(t)||u(t)&&t.toString===c?JSON.stringify(t,null,2):String(t)}function p(t){var e=parseFloat(t);return isNaN(e)?t:e}function v(t,e){for(var n=Object.create(null),r=t.split(","),o=0;o-1)return t.splice(n,1)}}var y=Object.prototype.hasOwnProperty;function _(t,e){return y.call(t,e)}function b(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var $=/-(\w)/g,w=b((function(t){return t.replace($,(function(t,e){return e?e.toUpperCase():""}))})),x=b((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),C=/\B([A-Z])/g,k=b((function(t){return t.replace(C,"-$1").toLowerCase()}));var S=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function O(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function T(t,e){for(var n in e)t[n]=e[n];return t}function A(t){for(var e={},n=0;n0,G=q&&q.indexOf("edge/")>0;q&&q.indexOf("android");var X=q&&/iphone|ipad|ipod|ios/.test(q);q&&/chrome\/\d+/.test(q),q&&/phantomjs/.test(q);var Y,Q=q&&q.match(/firefox\/(\d+)/),tt={}.watch,et=!1;if(J)try{var nt={};Object.defineProperty(nt,"passive",{get:function(){et=!0}}),window.addEventListener("test-passive",null,nt)}catch(t){}var rt=function(){return void 0===Y&&(Y=!J&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),Y},ot=J&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function it(t){return"function"==typeof t&&/native code/.test(t.toString())}var at,st="undefined"!=typeof Symbol&&it(Symbol)&&"undefined"!=typeof Reflect&&it(Reflect.ownKeys);at="undefined"!=typeof Set&&it(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ct=null;function ut(t){void 0===t&&(t=null),t||ct&&ct._scope.off(),ct=t,t&&t._scope.on()}var lt=function(){function t(t,e,n,r,o,i,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),ft=function(t){void 0===t&&(t="");var e=new lt;return e.text=t,e.isComment=!0,e};function dt(t){return new lt(void 0,void 0,void 0,String(t))}function pt(t){var e=new lt(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var vt=0,ht=function(){function t(){this.id=vt++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){g(this.subs,t)},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){for(var e=this.subs.slice(),n=0,r=e.length;n0&&(Xt((c=Yt(c,"".concat(a||"","_").concat(s)))[0])&&Xt(l)&&(f[u]=dt(l.text+c[0].text),c.shift()),f.push.apply(f,c)):i(c)?Xt(l)?f[u]=dt(l.text+c):""!==c&&f.push(dt(c)):Xt(c)&&Xt(l)?f[u]=dt(l.text+c.text):(o(t._isVList)&&r(c.tag)&&n(c.key)&&r(a)&&(c.key="__vlist".concat(a,"_").concat(s,"__")),f.push(c)));return f}function Qt(t,n,c,u,l,f){return(e(c)||i(c))&&(l=u,u=c,c=void 0),o(f)&&(l=2),function(t,n,o,i,c){if(r(o)&&r(o.__ob__))return ft();r(o)&&r(o.is)&&(n=o.is);if(!n)return ft();e(i)&&a(i[0])&&((o=o||{}).scopedSlots={default:i[0]},i.length=0);2===c?i=Gt(i):1===c&&(i=function(t){for(var n=0;n0,s=n?!!n.$stable:!a,c=n&&n.$key;if(n){if(n._normalized)return n._normalized;if(s&&o&&o!==t&&c===o.$key&&!a&&!o.$hasNormal)return o;for(var u in i={},n)n[u]&&"$"!==u[0]&&(i[u]=be(e,r,u,n[u]))}else i={};for(var l in r)l in i||(i[l]=$e(r,l));return n&&Object.isExtensible(n)&&(n._normalized=i),z(i,"$stable",s),z(i,"$key",c),z(i,"$hasNormal",a),i}function be(t,n,r,o){var i=function(){var n=ct;ut(t);var r=arguments.length?o.apply(null,arguments):o({}),i=(r=r&&"object"==typeof r&&!e(r)?[r]:Gt(r))&&r[0];return ut(n),r&&(!i||1===r.length&&i.isComment&&!ye(i))?void 0:r};return o.proxy&&Object.defineProperty(n,r,{get:i,enumerable:!0,configurable:!0}),i}function $e(t,e){return function(){return t[e]}}function we(e){return{get attrs(){return function(e){if(!e._attrsProxy){var n=e._attrsProxy={};z(n,"_v_attr_proxy",!0),xe(n,e.$attrs,t,e)}return e._attrsProxy}(e)},get slots(){return function(t){t._slotsProxy||ke(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(e)},emit:S(e.$emit,e),expose:function(t){t&&Object.keys(t).forEach((function(n){return Ht(e,t,n)}))}}}function xe(t,e,n,r){var o=!1;for(var i in e)i in t?e[i]!==n[i]&&(o=!0):(o=!0,Ce(t,i,r));for(var i in t)i in e||(o=!0,delete t[i]);return o}function Ce(t,e,n){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n.$attrs[e]}})}function ke(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}function Se(){var t=ct;return t._setupContext||(t._setupContext=we(t))}var Oe,Te=null;function Ae(t,e){return(t.__esModule||st&&"Module"===t[Symbol.toStringTag])&&(t=t.default),s(t)?e.extend(t):t}function je(t){if(e(t))for(var n=0;ndocument.createEvent("Event").timeStamp&&(We=function(){return Ze.now()})}var Ge=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function Xe(){var t,e;for(qe=We(),Ke=!0,Be.sort(Ge),Je=0;JeJe&&Be[n].id>t.id;)n--;Be.splice(n+1,0,t)}else Be.push(t);Ve||(Ve=!0,xn(Xe))}}var Qe="watcher",tn="".concat(Qe," callback"),en="".concat(Qe," getter"),nn="".concat(Qe," cleanup");function rn(t,e){return sn(t,null,{flush:"post"})}var on,an={};function sn(n,r,o){var i=void 0===o?t:o,s=i.immediate,c=i.deep,u=i.flush,l=void 0===u?"pre":u;i.onTrack,i.onTrigger;var f,d,p=ct,v=function(t,e,n){return void 0===n&&(n=null),fn(t,null,n,p,e)},h=!1,m=!1;if(Rt(n)?(f=function(){return n.value},h=Mt(n)):Pt(n)?(f=function(){return n.__ob__.dep.depend(),n},c=!0):e(n)?(m=!0,h=n.some((function(t){return Pt(t)||Mt(t)})),f=function(){return n.map((function(t){return Rt(t)?t.value:Pt(t)?Hn(t):a(t)?v(t,en):void 0}))}):f=a(n)?r?function(){return v(n,en)}:function(){if(!p||!p._isDestroyed)return d&&d(),v(n,Qe,[y])}:j,r&&c){var g=f;f=function(){return Hn(g())}}var y=function(t){d=_.onStop=function(){v(t,nn)}};if(rt())return y=j,r?s&&v(r,tn,[f(),m?[]:void 0,y]):f(),j;var _=new zn(ct,f,j,{lazy:!0});_.noRecurse=!r;var b=m?[]:an;return _.run=function(){if(_.active||"pre"===l&&p&&p._isBeingDestroyed)if(r){var t=_.get();(c||h||(m?t.some((function(t,e){return I(t,b[e])})):I(t,b)))&&(d&&d(),v(r,tn,[t,b===an?void 0:b,y]),b=t)}else _.get()},"sync"===l?_.update=_.run:"post"===l?(_.post=!0,_.update=function(){return Ye(_)}):_.update=function(){if(p&&p===ct&&!p._isMounted){var t=p._preWatchers||(p._preWatchers=[]);t.indexOf(_)<0&&t.push(_)}else Ye(_)},r?s?_.run():b=_.get():"post"===l&&p?p.$once("hook:mounted",(function(){return _.get()})):_.get(),function(){_.teardown()}}var cn=function(){function t(t){void 0===t&&(t=!1),this.active=!0,this.effects=[],this.cleanups=[],!t&&on&&(this.parent=on,this.index=(on.scopes||(on.scopes=[])).push(this)-1)}return t.prototype.run=function(t){if(this.active){var e=on;try{return on=this,t()}finally{on=e}}},t.prototype.on=function(){on=this},t.prototype.off=function(){on=this.parent},t.prototype.stop=function(t){if(this.active){var e=void 0,n=void 0;for(e=0,n=this.effects.length;e1)return n&&a(e)?e.call(r):e}},h:function(t,e,n){return Qt(ct,t,e,n,2,!0)},getCurrentInstance:function(){return ct&&{proxy:ct}},useSlots:function(){return Se().slots},useAttrs:function(){return Se().attrs},mergeDefaults:function(t,n){var r=e(t)?t.reduce((function(t,e){return t[e]={},t}),{}):t;for(var o in n){var i=r[o];i?e(i)||a(i)?r[o]={type:i,default:n[o]}:i.default=n[o]:null===i&&(r[o]={default:n[o]})}return r},nextTick:xn,set:At,del:jt,useCssModule:function(e){return t},useCssVars:function(t){if(J){var e=ct;e&&rn((function(){var n=e.$el,r=t(e,e._setupProxy);if(n&&1===n.nodeType){var o=n.style;for(var i in r)o.setProperty("--".concat(i),r[i])}}))}},defineAsyncComponent:function(t){a(t)&&(t={loader:t});var e=t.loader,n=t.loadingComponent,r=t.errorComponent,o=t.delay,i=void 0===o?200:o,s=t.timeout;t.suspensible;var c=t.onError,u=null,l=0,f=function(){var t;return u||(t=u=e().catch((function(t){if(t=t instanceof Error?t:new Error(String(t)),c)return new Promise((function(e,n){c(t,(function(){return e((l++,u=null,f()))}),(function(){return n(t)}),l+1)}));throw t})).then((function(e){return t!==u&&u?u:(e&&(e.__esModule||"Module"===e[Symbol.toStringTag])&&(e=e.default),e)})))};return function(){return{component:f(),delay:i,timeout:s,error:r,loading:n}}},onBeforeMount:kn,onMounted:Sn,onBeforeUpdate:On,onUpdated:Tn,onBeforeUnmount:An,onUnmounted:jn,onErrorCaptured:En,onActivated:Nn,onDeactivated:Dn,onServerPrefetch:Pn,onRenderTracked:Mn,onRenderTriggered:In}),Fn=new at;function Hn(t){return Bn(t,Fn),Fn.clear(),t}function Bn(t,n){var r,o,i=e(t);if(!(!i&&!s(t)||Object.isFrozen(t)||t instanceof lt)){if(t.__ob__){var a=t.__ob__.dep.id;if(n.has(a))return;n.add(a)}if(i)for(r=t.length;r--;)Bn(t[r],n);else if(Rt(t))Bn(t.value,n);else for(r=(o=Object.keys(t)).length;r--;)Bn(t[o[r]],n)}}var Un=0,zn=function(){function t(t,e,n,r,o){!function(t,e){void 0===e&&(e=on),e&&e.active&&e.effects.push(t)}(this,on||(t?t._scope:void 0)),(this.vm=t)&&o&&(t._watcher=this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++Un,this.active=!0,this.post=!1,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new at,this.newDepIds=new at,this.expression="",a(e)?this.getter=e:(this.getter=function(t){if(!V.test(t)){var e=t.split(".");return function(t){for(var n=0;n-1)if(i&&!_(o,"default"))s=!1;else if(""===s||s===k(t)){var u=wr(String,o.type);(u<0||c-1:"string"==typeof t?t.split(",").indexOf(n)>-1:(r=t,"[object RegExp]"===c.call(r)&&t.test(n));var r}function Or(t,e){var n=t.cache,r=t.keys,o=t._vnode;for(var i in n){var a=n[i];if(a){var s=a.name;s&&!e(s)&&Tr(n,i,r,o)}}}function Tr(t,e,n,r){var o=t[e];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),t[e]=null,g(n,e)}!function(e){e.prototype._init=function(e){var n=this;n._uid=Qn++,n._isVue=!0,n.__v_skip=!0,n._scope=new cn(!0),e&&e._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var o=r.componentOptions;n.propsData=o.propsData,n._parentListeners=o.listeners,n._renderChildren=o.children,n._componentTag=o.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(n,e):n.$options=mr(tr(n.constructor),e||{},n),n._renderProxy=n,n._self=n,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(n),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Pe(t,e)}(n),function(e){e._vnode=null,e._staticTrees=null;var n=e.$options,r=e.$vnode=n._parentVnode,o=r&&r.context;e.$slots=me(n._renderChildren,o),e.$scopedSlots=r?_e(e.$parent,r.data.scopedSlots,e.$slots):t,e._c=function(t,n,r,o){return Qt(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return Qt(e,t,n,r,o,!0)};var i=r&&r.data;Tt(e,"$attrs",i&&i.attrs||t,null,!0),Tt(e,"$listeners",n._parentListeners||t,null,!0)}(n),He(n,"beforeCreate",void 0,!1),function(t){var e=Yn(t.$options.inject,t);e&&(Ct(!1),Object.keys(e).forEach((function(n){Tt(t,n,e[n])})),Ct(!0))}(n),Jn(n),function(t){var e=t.$options.provide;if(e){var n=a(e)?e.call(t):e;if(!s(n))return;for(var r=un(t),o=st?Reflect.ownKeys(n):Object.keys(n),i=0;i1?O(n):n;for(var r=O(arguments,1),o='event handler for "'.concat(t,'"'),i=0,a=n.length;iparseInt(this.max)&&Tr(e,n[0],n,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Tr(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Or(t,(function(t){return Sr(e,t)}))})),this.$watch("exclude",(function(e){Or(t,(function(t){return!Sr(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=je(t),n=e&&e.componentOptions;if(n){var r=kr(n),o=this.include,i=this.exclude;if(o&&(!r||!Sr(o,r))||i&&r&&Sr(i,r))return e;var a=this.cache,s=this.keys,c=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[c]?(e.componentInstance=a[c].componentInstance,g(s,c),s.push(c)):(this.vnodeToCache=e,this.keyToCache=c),e.data.keepAlive=!0}return e||t&&t[0]}},Er={KeepAlive:jr};!function(t){var e={get:function(){return H}};Object.defineProperty(t,"config",e),t.util={warn:ur,extend:T,mergeOptions:mr,defineReactive:Tt},t.set=At,t.delete=jt,t.nextTick=xn,t.observable=function(t){return Ot(t),t},t.options=Object.create(null),R.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,T(t.options.components,Er),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=O(arguments,1);return n.unshift(this),a(t.install)?t.install.apply(t,n):a(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=mr(this.options,t),this}}(t),Cr(t),function(t){R.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&u(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&a(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(xr),Object.defineProperty(xr.prototype,"$isServer",{get:rt}),Object.defineProperty(xr.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(xr,"FunctionalRenderContext",{value:er}),xr.version=Ln;var Nr=v("style,class"),Dr=v("input,textarea,option,select,progress"),Pr=function(t,e,n){return"value"===n&&Dr(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},Mr=v("contenteditable,draggable,spellcheck"),Ir=v("events,caret,typing,plaintext-only"),Lr=v("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Rr="http://www.w3.org/1999/xlink",Fr=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Hr=function(t){return Fr(t)?t.slice(6,t.length):""},Br=function(t){return null==t||!1===t};function Ur(t){for(var e=t.data,n=t,o=t;r(o.componentInstance);)(o=o.componentInstance._vnode)&&o.data&&(e=zr(o.data,e));for(;r(n=n.parent);)n&&n.data&&(e=zr(e,n.data));return function(t,e){if(r(t)||r(e))return Vr(t,Kr(e));return""}(e.staticClass,e.class)}function zr(t,e){return{staticClass:Vr(t.staticClass,e.staticClass),class:r(t.class)?[t.class,e.class]:e.class}}function Vr(t,e){return t?e?t+" "+e:t:e||""}function Kr(t){return Array.isArray(t)?function(t){for(var e,n="",o=0,i=t.length;o-1?yo(t,e,n):Lr(e)?Br(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Mr(e)?t.setAttribute(e,function(t,e){return Br(e)||"false"===e?"false":"contenteditable"===t&&Ir(e)?e:"true"}(e,n)):Fr(e)?Br(n)?t.removeAttributeNS(Rr,Hr(e)):t.setAttributeNS(Rr,e,n):yo(t,e,n)}function yo(t,e,n){if(Br(n))t.removeAttribute(e);else{if(W&&!Z&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var _o={create:mo,update:mo};function bo(t,e){var o=e.elm,i=e.data,a=t.data;if(!(n(i.staticClass)&&n(i.class)&&(n(a)||n(a.staticClass)&&n(a.class)))){var s=Ur(e),c=o._transitionClasses;r(c)&&(s=Vr(s,Kr(c))),s!==o._prevClass&&(o.setAttribute("class",s),o._prevClass=s)}}var $o,wo,xo,Co,ko,So,Oo={create:bo,update:bo},To=/[\w).+\-_$\]]/;function Ao(t){var e,n,r,o,i,a=!1,s=!1,c=!1,u=!1,l=0,f=0,d=0,p=0;for(r=0;r=0&&" "===(h=t.charAt(v));v--);h&&To.test(h)||(u=!0)}}else void 0===o?(p=r+1,o=t.slice(0,r).trim()):m();function m(){(i||(i=[])).push(t.slice(p,r).trim()),p=r+1}if(void 0===o?o=t.slice(0,r).trim():0!==p&&m(),i)for(r=0;r-1?{exp:t.slice(0,Co),key:'"'+t.slice(Co+1)+'"'}:{exp:t,key:null};wo=t,Co=ko=So=0;for(;!Jo();)qo(xo=Ko())?Zo(xo):91===xo&&Wo(xo);return{exp:t.slice(0,ko),key:t.slice(ko+1,So)}}(t);return null===n.key?"".concat(t,"=").concat(e):"$set(".concat(n.exp,", ").concat(n.key,", ").concat(e,")")}function Ko(){return wo.charCodeAt(++Co)}function Jo(){return Co>=$o}function qo(t){return 34===t||39===t}function Wo(t){var e=1;for(ko=Co;!Jo();)if(qo(t=Ko()))Zo(t);else if(91===t&&e++,93===t&&e--,0===e){So=Co;break}}function Zo(t){for(var e=t;!Jo()&&(t=Ko())!==e;);}var Go,Xo="__r";function Yo(t,e,n){var r=Go;return function o(){var i=e.apply(null,arguments);null!==i&&ei(t,o,n,r)}}var Qo=hn&&!(Q&&Number(Q[1])<=53);function ti(t,e,n,r){if(Qo){var o=qe,i=e;e=i._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=o||t.timeStamp<=0||t.target.ownerDocument!==document)return i.apply(this,arguments)}}Go.addEventListener(t,e,et?{capture:n,passive:r}:n)}function ei(t,e,n,r){(r||Go).removeEventListener(t,e._wrapper||e,n)}function ni(t,e){if(!n(t.data.on)||!n(e.data.on)){var o=e.data.on||{},i=t.data.on||{};Go=e.elm||t.elm,function(t){if(r(t.__r)){var e=W?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}r(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(o),qt(o,i,ti,ei,Yo,e.context),Go=void 0}}var ri,oi={create:ni,update:ni,destroy:function(t){return ni(t,oo)}};function ii(t,e){if(!n(t.data.domProps)||!n(e.data.domProps)){var i,a,s=e.elm,c=t.data.domProps||{},u=e.data.domProps||{};for(i in(r(u.__ob__)||o(u._v_attr_proxy))&&(u=e.data.domProps=T({},u)),c)i in u||(s[i]="");for(i in u){if(a=u[i],"textContent"===i||"innerHTML"===i){if(e.children&&(e.children.length=0),a===c[i])continue;1===s.childNodes.length&&s.removeChild(s.childNodes[0])}if("value"===i&&"PROGRESS"!==s.tagName){s._value=a;var l=n(a)?"":String(a);ai(s,l)&&(s.value=l)}else if("innerHTML"===i&&Wr(s.tagName)&&n(s.innerHTML)){(ri=ri||document.createElement("div")).innerHTML="".concat(a," ");for(var f=ri.firstChild;s.firstChild;)s.removeChild(s.firstChild);for(;f.firstChild;)s.appendChild(f.firstChild)}else if(a!==c[i])try{s[i]=a}catch(t){}}}}function ai(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,o=t._vModifiers;if(r(o)){if(o.number)return p(n)!==p(e);if(o.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var si={create:ii,update:ii},ci=b((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function ui(t){var e=li(t.style);return t.staticStyle?T(t.staticStyle,e):e}function li(t){return Array.isArray(t)?A(t):"string"==typeof t?ci(t):t}var fi,di=/^--/,pi=/\s*!important$/,vi=function(t,e,n){if(di.test(e))t.style.setProperty(e,n);else if(pi.test(n))t.style.setProperty(k(e),n.replace(pi,""),"important");else{var r=mi(e);if(Array.isArray(n))for(var o=0,i=n.length;o-1?e.split(_i).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function $i(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(_i).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function wi(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&T(e,xi(t.name||"v")),T(e,t),e}return"string"==typeof t?xi(t):void 0}}var xi=b((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),Ci=J&&!Z,ki="transition",Si="animation",Oi="transition",Ti="transitionend",Ai="animation",ji="animationend";Ci&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Oi="WebkitTransition",Ti="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Ai="WebkitAnimation",ji="webkitAnimationEnd"));var Ei=J?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Ni(t){Ei((function(){Ei(t)}))}function Di(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),bi(t,e))}function Pi(t,e){t._transitionClasses&&g(t._transitionClasses,e),$i(t,e)}function Mi(t,e,n){var r=Li(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s=o===ki?Ti:ji,c=0,u=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++c>=a&&u()};setTimeout((function(){c0&&(n=ki,l=a,f=i.length):e===Si?u>0&&(n=Si,l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?ki:Si:null)?n===ki?i.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n===ki&&Ii.test(r[Oi+"Property"])}}function Ri(t,e){for(;t.length1}function Vi(t,e){!0!==e.data.show&&Hi(e)}var Ki=function(t){var a,s,c={},u=t.modules,l=t.nodeOps;for(a=0;av?b(t,n(o[g+1])?null:o[g+1].elm,o,p,g,i):p>g&&w(e,f,v)}(f,h,m,i,u):r(m)?(r(t.text)&&l.setTextContent(f,""),b(f,null,m,0,m.length-1,i)):r(h)?w(h,0,h.length-1):r(t.text)&&l.setTextContent(f,""):t.text!==e.text&&l.setTextContent(f,e.text),r(v)&&r(p=v.hook)&&r(p=p.postpatch)&&p(t,e)}}}function S(t,e,n){if(o(n)&&r(t.parent))t.parent.data.pendingInsert=e;else for(var i=0;i-1,a.selected!==i&&(a.selected=i);else if(D(Gi(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function Zi(t,e){return e.every((function(e){return!D(e,t)}))}function Gi(t){return"_value"in t?t._value:t.value}function Xi(t){t.target.composing=!0}function Yi(t){t.target.composing&&(t.target.composing=!1,Qi(t.target,"input"))}function Qi(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function ta(t){return!t.componentInstance||t.data&&t.data.transition?t:ta(t.componentInstance._vnode)}var ea={bind:function(t,e,n){var r=e.value,o=(n=ta(n)).data&&n.data.transition,i=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&o?(n.data.show=!0,Hi(n,(function(){t.style.display=i}))):t.style.display=r?i:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=ta(n)).data&&n.data.transition?(n.data.show=!0,r?Hi(n,(function(){t.style.display=t.__vOriginalDisplay})):Bi(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}},na={model:Ji,show:ea},ra={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function oa(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?oa(je(e.children)):t}function ia(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var r in o)e[w(r)]=o[r];return e}function aa(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var sa=function(t){return t.tag||ye(t)},ca=function(t){return"show"===t.name},ua={name:"transition",props:ra,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(sa)).length){var r=this.mode,o=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return o;var a=oa(o);if(!a)return o;if(this._leaving)return aa(t,o);var s="__transition-".concat(this._uid,"-");a.key=null==a.key?a.isComment?s+"comment":s+a.tag:i(a.key)?0===String(a.key).indexOf(s)?a.key:s+a.key:a.key;var c=(a.data||(a.data={})).transition=ia(this),u=this._vnode,l=oa(u);if(a.data.directives&&a.data.directives.some(ca)&&(a.data.show=!0),l&&l.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(a,l)&&!ye(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=T({},c);if("out-in"===r)return this._leaving=!0,Wt(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),aa(t,o);if("in-out"===r){if(ye(a))return u;var d,p=function(){d()};Wt(c,"afterEnter",p),Wt(c,"enterCancelled",p),Wt(f,"delayLeave",(function(t){d=t}))}}return o}}},la=T({tag:String,moveClass:String},ra);delete la.mode;var fa={props:la,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var o=Ie(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,o(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=ia(this),s=0;s-1?Xr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Xr[t]=/HTMLUnknownElement/.test(e.toString())},T(xr.options.directives,na),T(xr.options.components,ha),xr.prototype.__patch__=J?Ki:j,xr.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=ft),He(t,"beforeMount"),r=function(){t._update(t._render(),n)},new zn(t,r,j,{before:function(){t._isMounted&&!t._isDestroyed&&He(t,"beforeUpdate")}},!0),n=!1;var o=t._preWatchers;if(o)for(var i=0;i\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Oa=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Ta="[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(B.source,"]*"),Aa="((?:".concat(Ta,"\\:)?").concat(Ta,")"),ja=new RegExp("^<".concat(Aa)),Ea=/^\s*(\/?)>/,Na=new RegExp("^<\\/".concat(Aa,"[^>]*>")),Da=/^]+>/i,Pa=/^",""":'"',"&":"&","
":"\n"," ":"\t","'":"'"},Fa=/&(?:lt|gt|quot|amp|#39);/g,Ha=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Ba=v("pre,textarea",!0),Ua=function(t,e){return t&&Ba(t)&&"\n"===e[0]};function za(t,e){var n=e?Ha:Fa;return t.replace(n,(function(t){return Ra[t]}))}function Va(t,e){for(var n,r,o=[],i=e.expectHTML,a=e.isUnaryTag||E,s=e.canBeLeftOpenTag||E,c=0,u=function(){if(n=t,r&&Ia(r)){var u=0,d=r.toLowerCase(),p=La[d]||(La[d]=new RegExp("([\\s\\S]*?)("+d+"[^>]*>)","i"));w=t.replace(p,(function(t,n,r){return u=r.length,Ia(d)||"noscript"===d||(n=n.replace(//g,"$1").replace(//g,"$1")),Ua(d,n)&&(n=n.slice(1)),e.chars&&e.chars(n),""}));c+=t.length-w.length,t=w,f(d,c-u,c)}else{var v=t.indexOf("<");if(0===v){if(Pa.test(t)){var h=t.indexOf("--\x3e");if(h>=0)return e.shouldKeepComment&&e.comment&&e.comment(t.substring(4,h),c,c+h+3),l(h+3),"continue"}if(Ma.test(t)){var m=t.indexOf("]>");if(m>=0)return l(m+2),"continue"}var g=t.match(Da);if(g)return l(g[0].length),"continue";var y=t.match(Na);if(y){var _=c;return l(y[0].length),f(y[1],_,c),"continue"}var b=function(){var e=t.match(ja);if(e){var n={tagName:e[1],attrs:[],start:c};l(e[0].length);for(var r=void 0,o=void 0;!(r=t.match(Ea))&&(o=t.match(Oa)||t.match(Sa));)o.start=c,l(o[0].length),o.end=c,n.attrs.push(o);if(r)return n.unarySlash=r[1],l(r[0].length),n.end=c,n}}();if(b)return function(t){var n=t.tagName,c=t.unarySlash;i&&("p"===r&&ka(n)&&f(r),s(n)&&r===n&&f(n));for(var u=a(n)||!!c,l=t.attrs.length,d=new Array(l),p=0;p=0){for(w=t.slice(v);!(Na.test(w)||ja.test(w)||Pa.test(w)||Ma.test(w)||(x=w.indexOf("<",1))<0);)v+=x,w=t.slice(v);$=t.substring(0,v)}v<0&&($=t),$&&l($.length),e.chars&&$&&e.chars($,c-$.length,c)}if(t===n)return e.chars&&e.chars(t),"break"};t;){if("break"===u())break}function l(e){c+=e,t=t.substring(e)}function f(t,n,i){var a,s;if(null==n&&(n=c),null==i&&(i=c),t)for(s=t.toLowerCase(),a=o.length-1;a>=0&&o[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var u=o.length-1;u>=a;u--)e.end&&e.end(o[u].tag,n,i);o.length=a,r=a&&o[a-1].tag}else"br"===s?e.start&&e.start(t,[],!0,n,i):"p"===s&&(e.start&&e.start(t,[],!1,n,i),e.end&&e.end(t,n,i))}f()}var Ka,Ja,qa,Wa,Za,Ga,Xa,Ya,Qa=/^@|^v-on:/,ts=/^v-|^@|^:|^#/,es=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,ns=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,rs=/^\(|\)$/g,os=/^\[.*\]$/,is=/:(.*)$/,as=/^:|^\.|^v-bind:/,ss=/\.[^.\]]+(?=[^\]]*$)/g,cs=/^v-slot(:|$)|^#/,us=/[\r\n]/,ls=/[ \f\t\r\n]+/g,fs=b(wa),ds="_empty_";function ps(t,e,n){return{type:1,tag:t,attrsList:e,attrsMap:bs(e),rawAttrsMap:{},parent:n,children:[]}}function vs(t,e){Ka=e.warn||Eo,Ga=e.isPreTag||E,Xa=e.mustUseProp||E,Ya=e.getTagNamespace||E,e.isReservedTag,qa=No(e.modules,"transformNode"),Wa=No(e.modules,"preTransformNode"),Za=No(e.modules,"postTransformNode"),Ja=e.delimiters;var n,r,o=[],i=!1!==e.preserveWhitespace,a=e.whitespace,s=!1,c=!1;function u(t){if(l(t),s||t.processed||(t=hs(t,e)),o.length||t===n||n.if&&(t.elseif||t.else)&&gs(n,{exp:t.elseif,block:t}),r&&!t.forbidden)if(t.elseif||t.else)a=t,u=function(t){for(var e=t.length;e--;){if(1===t[e].type)return t[e];t.pop()}}(r.children),u&&u.if&&gs(u,{exp:a.elseif,block:a});else{if(t.slotScope){var i=t.slotTarget||'"default"';(r.scopedSlots||(r.scopedSlots={}))[i]=t}r.children.push(t),t.parent=r}var a,u;t.children=t.children.filter((function(t){return!t.slotScope})),l(t),t.pre&&(s=!1),Ga(t.tag)&&(c=!1);for(var f=0;fc&&(s.push(i=t.slice(c,o)),a.push(JSON.stringify(i)));var u=Ao(r[1].trim());a.push("_s(".concat(u,")")),s.push({"@binding":u}),c=o+r[0].length}return c-1")+("true"===i?":(".concat(e,")"):":_q(".concat(e,",").concat(i,")"))),Ro(t,"change","var $$a=".concat(e,",")+"$$el=$event.target,"+"$$c=$$el.checked?(".concat(i,"):(").concat(a,");")+"if(Array.isArray($$a)){"+"var $$v=".concat(r?"_n("+o+")":o,",")+"$$i=_i($$a,$$v);"+"if($$el.checked){$$i<0&&(".concat(Vo(e,"$$a.concat([$$v])"),")}")+"else{$$i>-1&&(".concat(Vo(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))"),")}")+"}else{".concat(Vo(e,"$$c"),"}"),null,!0)}(t,r,o);else if("input"===i&&"radio"===a)!function(t,e,n){var r=n&&n.number,o=Fo(t,"value")||"null";o=r?"_n(".concat(o,")"):o,Do(t,"checked","_q(".concat(e,",").concat(o,")")),Ro(t,"change",Vo(e,o),null,!0)}(t,r,o);else if("input"===i||"textarea"===i)!function(t,e,n){var r=t.attrsMap.type,o=n||{},i=o.lazy,a=o.number,s=o.trim,c=!i&&"range"!==r,u=i?"change":"range"===r?Xo:"input",l="$event.target.value";s&&(l="$event.target.value.trim()");a&&(l="_n(".concat(l,")"));var f=Vo(e,l);c&&(f="if($event.target.composing)return;".concat(f));Do(t,"value","(".concat(e,")")),Ro(t,u,f,null,!0),(s||a)&&Ro(t,"blur","$forceUpdate()")}(t,r,o);else if(!H.isReservedTag(i))return zo(t,r,o),!1;return!0},text:function(t,e){e.value&&Do(t,"textContent","_s(".concat(e.value,")"),e)},html:function(t,e){e.value&&Do(t,"innerHTML","_s(".concat(e.value,")"),e)}},Ts={expectHTML:!0,modules:Cs,directives:Os,isPreTag:function(t){return"pre"===t},isUnaryTag:xa,mustUseProp:Pr,canBeLeftOpenTag:Ca,isReservedTag:Zr,getTagNamespace:Gr,staticKeys:function(t){return t.reduce((function(t,e){return t.concat(e.staticKeys||[])}),[]).join(",")}(Cs)},As=b((function(t){return v("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(t?","+t:""))}));function js(t,e){t&&(ks=As(e.staticKeys||""),Ss=e.isReservedTag||E,Es(t),Ns(t,!1))}function Es(t){if(t.static=function(t){if(2===t.type)return!1;if(3===t.type)return!0;return!(!t.pre&&(t.hasBindings||t.if||t.for||h(t.tag)||!Ss(t.tag)||function(t){for(;t.parent;){if("template"!==(t=t.parent).tag)return!1;if(t.for)return!0}return!1}(t)||!Object.keys(t).every(ks)))}(t),1===t.type){if(!Ss(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var e=0,n=t.children.length;e|^function(?:\s+[\w$]+)?\s*\(/,Ps=/\([^)]*?\);*$/,Ms=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Is={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ls={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Rs=function(t){return"if(".concat(t,")return null;")},Fs={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Rs("$event.target !== $event.currentTarget"),ctrl:Rs("!$event.ctrlKey"),shift:Rs("!$event.shiftKey"),alt:Rs("!$event.altKey"),meta:Rs("!$event.metaKey"),left:Rs("'button' in $event && $event.button !== 0"),middle:Rs("'button' in $event && $event.button !== 1"),right:Rs("'button' in $event && $event.button !== 2")};function Hs(t,e){var n=e?"nativeOn:":"on:",r="",o="";for(var i in t){var a=Bs(t[i]);t[i]&&t[i].dynamic?o+="".concat(i,",").concat(a,","):r+='"'.concat(i,'":').concat(a,",")}return r="{".concat(r.slice(0,-1),"}"),o?n+"_d(".concat(r,",[").concat(o.slice(0,-1),"])"):n+r}function Bs(t){if(!t)return"function(){}";if(Array.isArray(t))return"[".concat(t.map((function(t){return Bs(t)})).join(","),"]");var e=Ms.test(t.value),n=Ds.test(t.value),r=Ms.test(t.value.replace(Ps,""));if(t.modifiers){var o="",i="",a=[],s=function(e){if(Fs[e])i+=Fs[e],Is[e]&&a.push(e);else if("exact"===e){var n=t.modifiers;i+=Rs(["ctrl","shift","alt","meta"].filter((function(t){return!n[t]})).map((function(t){return"$event.".concat(t,"Key")})).join("||"))}else a.push(e)};for(var c in t.modifiers)s(c);a.length&&(o+=function(t){return"if(!$event.type.indexOf('key')&&"+"".concat(t.map(Us).join("&&"),")return null;")}(a)),i&&(o+=i);var u=e?"return ".concat(t.value,".apply(null, arguments)"):n?"return (".concat(t.value,").apply(null, arguments)"):r?"return ".concat(t.value):t.value;return"function($event){".concat(o).concat(u,"}")}return e||n?t.value:"function($event){".concat(r?"return ".concat(t.value):t.value,"}")}function Us(t){var e=parseInt(t,10);if(e)return"$event.keyCode!==".concat(e);var n=Is[t],r=Ls[t];return"_k($event.keyCode,"+"".concat(JSON.stringify(t),",")+"".concat(JSON.stringify(n),",")+"$event.key,"+"".concat(JSON.stringify(r))+")"}var zs={on:function(t,e){t.wrapListeners=function(t){return"_g(".concat(t,",").concat(e.value,")")}},bind:function(t,e){t.wrapData=function(n){return"_b(".concat(n,",'").concat(t.tag,"',").concat(e.value,",").concat(e.modifiers&&e.modifiers.prop?"true":"false").concat(e.modifiers&&e.modifiers.sync?",true":"",")")}},cloak:j},Vs=function(t){this.options=t,this.warn=t.warn||Eo,this.transforms=No(t.modules,"transformCode"),this.dataGenFns=No(t.modules,"genData"),this.directives=T(T({},zs),t.directives);var e=t.isReservedTag||E;this.maybeComponent=function(t){return!!t.component||!e(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Ks(t,e){var n=new Vs(e),r=t?"script"===t.tag?"null":Js(t,n):'_c("div")';return{render:"with(this){return ".concat(r,"}"),staticRenderFns:n.staticRenderFns}}function Js(t,e){if(t.parent&&(t.pre=t.pre||t.parent.pre),t.staticRoot&&!t.staticProcessed)return Ws(t,e);if(t.once&&!t.onceProcessed)return Zs(t,e);if(t.for&&!t.forProcessed)return Ys(t,e);if(t.if&&!t.ifProcessed)return Gs(t,e);if("template"!==t.tag||t.slotTarget||e.pre){if("slot"===t.tag)return function(t,e){var n=t.slotName||'"default"',r=nc(t,e),o="_t(".concat(n).concat(r?",function(){return ".concat(r,"}"):""),i=t.attrs||t.dynamicAttrs?ic((t.attrs||[]).concat(t.dynamicAttrs||[]).map((function(t){return{name:w(t.name),value:t.value,dynamic:t.dynamic}}))):null,a=t.attrsMap["v-bind"];!i&&!a||r||(o+=",null");i&&(o+=",".concat(i));a&&(o+="".concat(i?"":",null",",").concat(a));return o+")"}(t,e);var n=void 0;if(t.component)n=function(t,e,n){var r=e.inlineTemplate?null:nc(e,n,!0);return"_c(".concat(t,",").concat(Qs(e,n)).concat(r?",".concat(r):"",")")}(t.component,t,e);else{var r=void 0,o=e.maybeComponent(t);(!t.plain||t.pre&&o)&&(r=Qs(t,e));var i=void 0,a=e.options.bindings;o&&a&&!1!==a.__isScriptSetup&&(i=qs(a,t.tag)||qs(a,w(t.tag))||qs(a,x(w(t.tag)))),i||(i="'".concat(t.tag,"'"));var s=t.inlineTemplate?null:nc(t,e,!0);n="_c(".concat(i).concat(r?",".concat(r):"").concat(s?",".concat(s):"",")")}for(var c=0;c>>0}(a)):"",")")}(t,t.scopedSlots,e),",")),t.model&&(n+="model:{value:".concat(t.model.value,",callback:").concat(t.model.callback,",expression:").concat(t.model.expression,"},")),t.inlineTemplate){var i=function(t,e){var n=t.children[0];if(n&&1===n.type){var r=Ks(n,e.options);return"inlineTemplate:{render:function(){".concat(r.render,"},staticRenderFns:[").concat(r.staticRenderFns.map((function(t){return"function(){".concat(t,"}")})).join(","),"]}")}}(t,e);i&&(n+="".concat(i,","))}return n=n.replace(/,$/,"")+"}",t.dynamicAttrs&&(n="_b(".concat(n,',"').concat(t.tag,'",').concat(ic(t.dynamicAttrs),")")),t.wrapData&&(n=t.wrapData(n)),t.wrapListeners&&(n=t.wrapListeners(n)),n}function tc(t){return 1===t.type&&("slot"===t.tag||t.children.some(tc))}function ec(t,e){var n=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!n)return Gs(t,e,ec,"null");if(t.for&&!t.forProcessed)return Ys(t,e,ec);var r=t.slotScope===ds?"":String(t.slotScope),o="function(".concat(r,"){")+"return ".concat("template"===t.tag?t.if&&n?"(".concat(t.if,")?").concat(nc(t,e)||"undefined",":undefined"):nc(t,e)||"undefined":Js(t,e),"}"),i=r?"":",proxy:true";return"{key:".concat(t.slotTarget||'"default"',",fn:").concat(o).concat(i,"}")}function nc(t,e,n,r,o){var i=t.children;if(i.length){var a=i[0];if(1===i.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var s=n?e.maybeComponent(a)?",1":",0":"";return"".concat((r||Js)(a,e)).concat(s)}var c=n?function(t,e){for(var n=0,r=0;r ':'
',lc.innerHTML.indexOf("
")>0}var vc=!!J&&pc(!1),hc=!!J&&pc(!0),mc=b((function(t){var e=Qr(t);return e&&e.innerHTML})),gc=xr.prototype.$mount;return xr.prototype.$mount=function(t,e){if((t=t&&Qr(t))===document.body||t===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=mc(r));else{if(!r.nodeType)return this;r=r.innerHTML}else t&&(r=function(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}(t));if(r){var o=dc(r,{outputSourceRange:!1,shouldDecodeNewlines:vc,shouldDecodeNewlinesForHref:hc,delimiters:n.delimiters,comments:n.comments},this),i=o.render,a=o.staticRenderFns;n.render=i,n.staticRenderFns=a}}return gc.call(this,t,e)},xr.compile=dc,T(xr,Rn),xr.effect=function(t,e){var n=new zn(ct,t,j,{sync:!0});e&&(n.update=function(){e((function(){return n.run()}))})},xr}));
\ No newline at end of file
diff --git a/wp/wp-content/plugins/facetwp/assets/vendor/vue/vuedraggable.min.js b/wp/wp-content/plugins/facetwp/assets/vendor/vue/vuedraggable.min.js
deleted file mode 100644
index c863726e..00000000
--- a/wp/wp-content/plugins/facetwp/assets/vendor/vue/vuedraggable.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Vue.Draggable 2.24.3 */
-(function(t,e){"object"===typeof exports&&"object"===typeof module?module.exports=e(require("sortablejs")):"function"===typeof define&&define.amd?define(["sortablejs"],e):"object"===typeof exports?exports["vuedraggable"]=e(require("sortablejs")):t["vuedraggable"]=e(t["Sortable"])})("undefined"!==typeof self?self:this,(function(t){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"===typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t["default"]}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s="fb15")}({"01f9":function(t,e,n){"use strict";var r=n("2d00"),o=n("5ca1"),i=n("2aba"),c=n("32e9"),u=n("84f2"),a=n("41a0"),s=n("7f20"),f=n("38fd"),l=n("2b4c")("iterator"),d=!([].keys&&"next"in[].keys()),p="@@iterator",h="keys",v="values",g=function(){return this};t.exports=function(t,e,n,b,m,y,x){a(n,e,b);var O,S,w,j=function(t){if(!d&&t in _)return _[t];switch(t){case h:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},M=e+" Iterator",C=m==v,T=!1,_=t.prototype,L=_[l]||_[p]||m&&_[m],I=L||j(m),E=m?C?j("entries"):I:void 0,P="Array"==e&&_.entries||L;if(P&&(w=f(P.call(new t)),w!==Object.prototype&&w.next&&(s(w,M,!0),r||"function"==typeof w[l]||c(w,l,g))),C&&L&&L.name!==v&&(T=!0,I=function(){return L.call(this)}),r&&!x||!d&&!T&&_[l]||c(_,l,I),u[e]=I,u[M]=g,m)if(O={values:C?I:j(v),keys:y?I:j(h),entries:E},x)for(S in O)S in _||i(_,S,O[S]);else o(o.P+o.F*(d||T),e,O);return O}},"02f4":function(t,e,n){var r=n("4588"),o=n("be13");t.exports=function(t){return function(e,n){var i,c,u=String(o(e)),a=r(n),s=u.length;return a<0||a>=s?t?"":void 0:(i=u.charCodeAt(a),i<55296||i>56319||a+1===s||(c=u.charCodeAt(a+1))<56320||c>57343?t?u.charAt(a):i:t?u.slice(a,a+2):c-56320+(i-55296<<10)+65536)}}},"0390":function(t,e,n){"use strict";var r=n("02f4")(!0);t.exports=function(t,e,n){return e+(n?r(t,e).length:1)}},"0bfb":function(t,e,n){"use strict";var r=n("cb7c");t.exports=function(){var t=r(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},"0d58":function(t,e,n){var r=n("ce10"),o=n("e11e");t.exports=Object.keys||function(t){return r(t,o)}},1495:function(t,e,n){var r=n("86cc"),o=n("cb7c"),i=n("0d58");t.exports=n("9e1e")?Object.defineProperties:function(t,e){o(t);var n,c=i(e),u=c.length,a=0;while(u>a)r.f(t,n=c[a++],e[n]);return t}},"214f":function(t,e,n){"use strict";n("b0c5");var r=n("2aba"),o=n("32e9"),i=n("79e5"),c=n("be13"),u=n("2b4c"),a=n("520a"),s=u("species"),f=!i((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")})),l=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2===n.length&&"a"===n[0]&&"b"===n[1]}();t.exports=function(t,e,n){var d=u(t),p=!i((function(){var e={};return e[d]=function(){return 7},7!=""[t](e)})),h=p?!i((function(){var e=!1,n=/a/;return n.exec=function(){return e=!0,null},"split"===t&&(n.constructor={},n.constructor[s]=function(){return n}),n[d](""),!e})):void 0;if(!p||!h||"replace"===t&&!f||"split"===t&&!l){var v=/./[d],g=n(c,d,""[t],(function(t,e,n,r,o){return e.exec===a?p&&!o?{done:!0,value:v.call(e,n,r)}:{done:!0,value:t.call(n,e,r)}:{done:!1}})),b=g[0],m=g[1];r(String.prototype,t,b),o(RegExp.prototype,d,2==e?function(t,e){return m.call(t,this,e)}:function(t){return m.call(t,this)})}}},"230e":function(t,e,n){var r=n("d3f4"),o=n("7726").document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},"23c6":function(t,e,n){var r=n("2d95"),o=n("2b4c")("toStringTag"),i="Arguments"==r(function(){return arguments}()),c=function(t,e){try{return t[e]}catch(n){}};t.exports=function(t){var e,n,u;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=c(e=Object(t),o))?n:i?r(e):"Object"==(u=r(e))&&"function"==typeof e.callee?"Arguments":u}},2621:function(t,e){e.f=Object.getOwnPropertySymbols},"2aba":function(t,e,n){var r=n("7726"),o=n("32e9"),i=n("69a8"),c=n("ca5a")("src"),u=n("fa5b"),a="toString",s=(""+u).split(a);n("8378").inspectSource=function(t){return u.call(t)},(t.exports=function(t,e,n,u){var a="function"==typeof n;a&&(i(n,"name")||o(n,"name",e)),t[e]!==n&&(a&&(i(n,c)||o(n,c,t[e]?""+t[e]:s.join(String(e)))),t===r?t[e]=n:u?t[e]?t[e]=n:o(t,e,n):(delete t[e],o(t,e,n)))})(Function.prototype,a,(function(){return"function"==typeof this&&this[c]||u.call(this)}))},"2aeb":function(t,e,n){var r=n("cb7c"),o=n("1495"),i=n("e11e"),c=n("613b")("IE_PROTO"),u=function(){},a="prototype",s=function(){var t,e=n("230e")("iframe"),r=i.length,o="<",c=">";e.style.display="none",n("fab2").appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(o+"script"+c+"document.F=Object"+o+"/script"+c),t.close(),s=t.F;while(r--)delete s[a][i[r]];return s()};t.exports=Object.create||function(t,e){var n;return null!==t?(u[a]=r(t),n=new u,u[a]=null,n[c]=t):n=s(),void 0===e?n:o(n,e)}},"2b4c":function(t,e,n){var r=n("5537")("wks"),o=n("ca5a"),i=n("7726").Symbol,c="function"==typeof i,u=t.exports=function(t){return r[t]||(r[t]=c&&i[t]||(c?i:o)("Symbol."+t))};u.store=r},"2d00":function(t,e){t.exports=!1},"2d95":function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},"2fdb":function(t,e,n){"use strict";var r=n("5ca1"),o=n("d2c8"),i="includes";r(r.P+r.F*n("5147")(i),"String",{includes:function(t){return!!~o(this,t,i).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},"32e9":function(t,e,n){var r=n("86cc"),o=n("4630");t.exports=n("9e1e")?function(t,e,n){return r.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},"38fd":function(t,e,n){var r=n("69a8"),o=n("4bf8"),i=n("613b")("IE_PROTO"),c=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=o(t),r(t,i)?t[i]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?c:null}},"41a0":function(t,e,n){"use strict";var r=n("2aeb"),o=n("4630"),i=n("7f20"),c={};n("32e9")(c,n("2b4c")("iterator"),(function(){return this})),t.exports=function(t,e,n){t.prototype=r(c,{next:o(1,n)}),i(t,e+" Iterator")}},"456d":function(t,e,n){var r=n("4bf8"),o=n("0d58");n("5eda")("keys",(function(){return function(t){return o(r(t))}}))},4588:function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},4630:function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},"4bf8":function(t,e,n){var r=n("be13");t.exports=function(t){return Object(r(t))}},5147:function(t,e,n){var r=n("2b4c")("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,!"/./"[t](e)}catch(o){}}return!0}},"520a":function(t,e,n){"use strict";var r=n("0bfb"),o=RegExp.prototype.exec,i=String.prototype.replace,c=o,u="lastIndex",a=function(){var t=/a/,e=/b*/g;return o.call(t,"a"),o.call(e,"a"),0!==t[u]||0!==e[u]}(),s=void 0!==/()??/.exec("")[1],f=a||s;f&&(c=function(t){var e,n,c,f,l=this;return s&&(n=new RegExp("^"+l.source+"$(?!\\s)",r.call(l))),a&&(e=l[u]),c=o.call(l,t),a&&c&&(l[u]=l.global?c.index+c[0].length:e),s&&c&&c.length>1&&i.call(c[0],n,(function(){for(f=1;f1?arguments[1]:void 0)}}),n("9c6c")("includes")},6821:function(t,e,n){var r=n("626a"),o=n("be13");t.exports=function(t){return r(o(t))}},"69a8":function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},"6a99":function(t,e,n){var r=n("d3f4");t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},7333:function(t,e,n){"use strict";var r=n("0d58"),o=n("2621"),i=n("52a7"),c=n("4bf8"),u=n("626a"),a=Object.assign;t.exports=!a||n("79e5")((function(){var t={},e={},n=Symbol(),r="abcdefghijklmnopqrst";return t[n]=7,r.split("").forEach((function(t){e[t]=t})),7!=a({},t)[n]||Object.keys(a({},e)).join("")!=r}))?function(t,e){var n=c(t),a=arguments.length,s=1,f=o.f,l=i.f;while(a>s){var d,p=u(arguments[s++]),h=f?r(p).concat(f(p)):r(p),v=h.length,g=0;while(v>g)l.call(p,d=h[g++])&&(n[d]=p[d])}return n}:a},7726:function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},"77f1":function(t,e,n){var r=n("4588"),o=Math.max,i=Math.min;t.exports=function(t,e){return t=r(t),t<0?o(t+e,0):i(t,e)}},"79e5":function(t,e){t.exports=function(t){try{return!!t()}catch(e){return!0}}},"7f20":function(t,e,n){var r=n("86cc").f,o=n("69a8"),i=n("2b4c")("toStringTag");t.exports=function(t,e,n){t&&!o(t=n?t:t.prototype,i)&&r(t,i,{configurable:!0,value:e})}},8378:function(t,e){var n=t.exports={version:"2.6.5"};"number"==typeof __e&&(__e=n)},"84f2":function(t,e){t.exports={}},"86cc":function(t,e,n){var r=n("cb7c"),o=n("c69a"),i=n("6a99"),c=Object.defineProperty;e.f=n("9e1e")?Object.defineProperty:function(t,e,n){if(r(t),e=i(e,!0),r(n),o)try{return c(t,e,n)}catch(u){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},"9b43":function(t,e,n){var r=n("d8e8");t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},"9c6c":function(t,e,n){var r=n("2b4c")("unscopables"),o=Array.prototype;void 0==o[r]&&n("32e9")(o,r,{}),t.exports=function(t){o[r][t]=!0}},"9def":function(t,e,n){var r=n("4588"),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},"9e1e":function(t,e,n){t.exports=!n("79e5")((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},a352:function(e,n){e.exports=t},a481:function(t,e,n){"use strict";var r=n("cb7c"),o=n("4bf8"),i=n("9def"),c=n("4588"),u=n("0390"),a=n("5f1b"),s=Math.max,f=Math.min,l=Math.floor,d=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g,h=function(t){return void 0===t?t:String(t)};n("214f")("replace",2,(function(t,e,n,v){return[function(r,o){var i=t(this),c=void 0==r?void 0:r[e];return void 0!==c?c.call(r,i,o):n.call(String(i),r,o)},function(t,e){var o=v(n,t,this,e);if(o.done)return o.value;var l=r(t),d=String(this),p="function"===typeof e;p||(e=String(e));var b=l.global;if(b){var m=l.unicode;l.lastIndex=0}var y=[];while(1){var x=a(l,d);if(null===x)break;if(y.push(x),!b)break;var O=String(x[0]);""===O&&(l.lastIndex=u(d,i(l.lastIndex),m))}for(var S="",w=0,j=0;j=w&&(S+=d.slice(w,C)+E,w=C+M.length)}return S+d.slice(w)}];function g(t,e,r,i,c,u){var a=r+t.length,s=i.length,f=p;return void 0!==c&&(c=o(c),f=d),n.call(u,f,(function(n,o){var u;switch(o.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,r);case"'":return e.slice(a);case"<":u=c[o.slice(1,-1)];break;default:var f=+o;if(0===f)return n;if(f>s){var d=l(f/10);return 0===d?n:d<=s?void 0===i[d-1]?o.charAt(1):i[d-1]+o.charAt(1):n}u=i[f-1]}return void 0===u?"":u}))}}))},aae3:function(t,e,n){var r=n("d3f4"),o=n("2d95"),i=n("2b4c")("match");t.exports=function(t){var e;return r(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==o(t))}},ac6a:function(t,e,n){for(var r=n("cadf"),o=n("0d58"),i=n("2aba"),c=n("7726"),u=n("32e9"),a=n("84f2"),s=n("2b4c"),f=s("iterator"),l=s("toStringTag"),d=a.Array,p={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},h=o(p),v=0;vf)if(u=a[f++],u!=u)return!0}else for(;s>f;f++)if((t||f in a)&&a[f]===n)return t||f||0;return!t&&-1}}},c649:function(t,e,n){"use strict";(function(t){n.d(e,"c",(function(){return s})),n.d(e,"a",(function(){return u})),n.d(e,"b",(function(){return o})),n.d(e,"d",(function(){return a}));n("a481");function r(){return"undefined"!==typeof window?window.console:t.console}var o=r();function i(t){var e=Object.create(null);return function(n){var r=e[n];return r||(e[n]=t(n))}}var c=/-(\w)/g,u=i((function(t){return t.replace(c,(function(t,e){return e?e.toUpperCase():""}))}));function a(t){null!==t.parentElement&&t.parentElement.removeChild(t)}function s(t,e,n){var r=0===n?t.children[0]:t.children[n-1].nextSibling;t.insertBefore(e,r)}}).call(this,n("c8ba"))},c69a:function(t,e,n){t.exports=!n("9e1e")&&!n("79e5")((function(){return 7!=Object.defineProperty(n("230e")("div"),"a",{get:function(){return 7}}).a}))},c8ba:function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"===typeof window&&(n=window)}t.exports=n},ca5a:function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},cadf:function(t,e,n){"use strict";var r=n("9c6c"),o=n("d53b"),i=n("84f2"),c=n("6821");t.exports=n("01f9")(Array,"Array",(function(t,e){this._t=c(t),this._i=0,this._k=e}),(function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,o(1)):o(0,"keys"==e?n:"values"==e?t[n]:[n,t[n]])}),"values"),i.Arguments=i.Array,r("keys"),r("values"),r("entries")},cb7c:function(t,e,n){var r=n("d3f4");t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},ce10:function(t,e,n){var r=n("69a8"),o=n("6821"),i=n("c366")(!1),c=n("613b")("IE_PROTO");t.exports=function(t,e){var n,u=o(t),a=0,s=[];for(n in u)n!=c&&r(u,n)&&s.push(n);while(e.length>a)r(u,n=e[a++])&&(~i(s,n)||s.push(n));return s}},d2c8:function(t,e,n){var r=n("aae3"),o=n("be13");t.exports=function(t,e,n){if(r(e))throw TypeError("String#"+n+" doesn't accept regex!");return String(o(t))}},d3f4:function(t,e){t.exports=function(t){return"object"===typeof t?null!==t:"function"===typeof t}},d53b:function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},d8e8:function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},e11e:function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},f559:function(t,e,n){"use strict";var r=n("5ca1"),o=n("9def"),i=n("d2c8"),c="startsWith",u=""[c];r(r.P+r.F*n("5147")(c),"String",{startsWith:function(t){var e=i(this,t,c),n=o(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),r=String(t);return u?u.call(e,r,n):e.slice(n,n+r.length)===r}})},f6fd:function(t,e){(function(t){var e="currentScript",n=t.getElementsByTagName("script");e in t||Object.defineProperty(t,e,{get:function(){try{throw new Error}catch(r){var t,e=(/.*at [^\(]*\((.*):.+:.+\)$/gi.exec(r.stack)||[!1])[1];for(t in n)if(n[t].src==e||"interactive"==n[t].readyState)return n[t];return null}}})})(document)},f751:function(t,e,n){var r=n("5ca1");r(r.S+r.F,"Object",{assign:n("7333")})},fa5b:function(t,e,n){t.exports=n("5537")("native-function-to-string",Function.toString)},fab2:function(t,e,n){var r=n("7726").document;t.exports=r&&r.documentElement},fb15:function(t,e,n){"use strict";var r;(n.r(e),"undefined"!==typeof window)&&(n("f6fd"),(r=window.document.currentScript)&&(r=r.src.match(/(.+\/)[^/]+\.js(\?.*)?$/))&&(n.p=r[1]));n("f751"),n("f559"),n("ac6a"),n("cadf"),n("456d");function o(t){if(Array.isArray(t))return t}function i(t,e){if("undefined"!==typeof Symbol&&Symbol.iterator in Object(t)){var n=[],r=!0,o=!1,i=void 0;try{for(var c,u=t[Symbol.iterator]();!(r=(c=u.next()).done);r=!0)if(n.push(c.value),e&&n.length===e)break}catch(a){o=!0,i=a}finally{try{r||null==u["return"]||u["return"]()}finally{if(o)throw i}}return n}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n=i?o.length:o.indexOf(t)}));return n?c.filter((function(t){return-1!==t})):c}function x(t,e){var n=this;this.$nextTick((function(){return n.$emit(t.toLowerCase(),e)}))}function O(t){var e=this;return function(n){null!==e.realList&&e["onDrag"+t](n),x.call(e,t,n)}}function S(t){return["transition-group","TransitionGroup"].includes(t)}function w(t){if(!t||1!==t.length)return!1;var e=s(t,1),n=e[0].componentOptions;return!!n&&S(n.tag)}function j(t,e,n){return t[n]||(e[n]?e[n]():void 0)}function M(t,e,n){var r=0,o=0,i=j(e,n,"header");i&&(r=i.length,t=t?[].concat(p(i),p(t)):p(i));var c=j(e,n,"footer");return c&&(o=c.length,t=t?[].concat(p(t),p(c)):p(c)),{children:t,headerOffset:r,footerOffset:o}}function C(t,e){var n=null,r=function(t,e){n=b(n,t,e)},o=Object.keys(t).filter((function(t){return"id"===t||t.startsWith("data-")})).reduce((function(e,n){return e[n]=t[n],e}),{});if(r("attrs",o),!e)return n;var i=e.on,c=e.props,u=e.attrs;return r("on",i),r("props",c),Object.assign(n.attrs,u),n}var T=["Start","Add","Remove","Update","End"],_=["Choose","Unchoose","Sort","Filter","Clone"],L=["Move"].concat(T,_).map((function(t){return"on"+t})),I=null,E={options:Object,list:{type:Array,required:!1,default:null},value:{type:Array,required:!1,default:null},noTransitionOnDrag:{type:Boolean,default:!1},clone:{type:Function,default:function(t){return t}},element:{type:String,default:"div"},tag:{type:String,default:null},move:{type:Function,default:null},componentData:{type:Object,required:!1,default:null}},P={name:"draggable",inheritAttrs:!1,props:E,data:function(){return{transitionMode:!1,noneFunctionalComponentMode:!1}},render:function(t){var e=this.$slots.default;this.transitionMode=w(e);var n=M(e,this.$slots,this.$scopedSlots),r=n.children,o=n.headerOffset,i=n.footerOffset;this.headerOffset=o,this.footerOffset=i;var c=C(this.$attrs,this.componentData);return t(this.getTag(),c,r)},created:function(){null!==this.list&&null!==this.value&&g["b"].error("Value and list props are mutually exclusive! Please set one or another."),"div"!==this.element&&g["b"].warn("Element props is deprecated please use tag props instead. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#element-props"),void 0!==this.options&&g["b"].warn("Options props is deprecated, add sortable options directly as vue.draggable item, or use v-bind. See https://github.com/SortableJS/Vue.Draggable/blob/master/documentation/migrate.md#options-props")},mounted:function(){var t=this;if(this.noneFunctionalComponentMode=this.getTag().toLowerCase()!==this.$el.nodeName.toLowerCase()&&!this.getIsFunctional(),this.noneFunctionalComponentMode&&this.transitionMode)throw new Error("Transition-group inside component is not supported. Please alter tag value or remove transition-group. Current tag value: ".concat(this.getTag()));var e={};T.forEach((function(n){e["on"+n]=O.call(t,n)})),_.forEach((function(n){e["on"+n]=x.bind(t,n)}));var n=Object.keys(this.$attrs).reduce((function(e,n){return e[Object(g["a"])(n)]=t.$attrs[n],e}),{}),r=Object.assign({},this.options,n,e,{onMove:function(e,n){return t.onDragMove(e,n)}});!("draggable"in r)&&(r.draggable=">*"),this._sortable=new v.a(this.rootContainer,r),this.computeIndexes()},beforeDestroy:function(){void 0!==this._sortable&&this._sortable.destroy()},computed:{rootContainer:function(){return this.transitionMode?this.$el.children[0]:this.$el},realList:function(){return this.list?this.list:this.value}},watch:{options:{handler:function(t){this.updateOptions(t)},deep:!0},$attrs:{handler:function(t){this.updateOptions(t)},deep:!0},realList:function(){this.computeIndexes()}},methods:{getIsFunctional:function(){var t=this._vnode.fnOptions;return t&&t.functional},getTag:function(){return this.tag||this.element},updateOptions:function(t){for(var e in t){var n=Object(g["a"])(e);-1===L.indexOf(n)&&this._sortable.option(n,t[e])}},getChildrenNodes:function(){if(this.noneFunctionalComponentMode)return this.$children[0].$slots.default;var t=this.$slots.default;return this.transitionMode?t[0].child.$slots.default:t},computeIndexes:function(){var t=this;this.$nextTick((function(){t.visibleIndexes=y(t.getChildrenNodes(),t.rootContainer.children,t.transitionMode,t.footerOffset)}))},getUnderlyingVm:function(t){var e=m(this.getChildrenNodes()||[],t);if(-1===e)return null;var n=this.realList[e];return{index:e,element:n}},getUnderlyingPotencialDraggableComponent:function(t){var e=t.__vue__;return e&&e.$options&&S(e.$options._componentTag)?e.$parent:!("realList"in e)&&1===e.$children.length&&"realList"in e.$children[0]?e.$children[0]:e},emitChanges:function(t){var e=this;this.$nextTick((function(){e.$emit("change",t)}))},alterList:function(t){if(this.list)t(this.list);else{var e=p(this.value);t(e),this.$emit("input",e)}},spliceList:function(){var t=arguments,e=function(e){return e.splice.apply(e,p(t))};this.alterList(e)},updatePosition:function(t,e){var n=function(n){return n.splice(e,0,n.splice(t,1)[0])};this.alterList(n)},getRelatedContextFromMoveEvent:function(t){var e=t.to,n=t.related,r=this.getUnderlyingPotencialDraggableComponent(e);if(!r)return{component:r};var o=r.realList,i={list:o,component:r};if(e!==n&&o&&r.getUnderlyingVm){var c=r.getUnderlyingVm(n);if(c)return Object.assign(c,i)}return i},getVmIndex:function(t){var e=this.visibleIndexes,n=e.length;return t>n-1?n:e[t]},getComponent:function(){return this.$slots.default[0].componentInstance},resetTransitionData:function(t){if(this.noTransitionOnDrag&&this.transitionMode){var e=this.getChildrenNodes();e[t].data=null;var n=this.getComponent();n.children=[],n.kept=void 0}},onDragStart:function(t){this.context=this.getUnderlyingVm(t.item),t.item._underlying_vm_=this.clone(this.context.element),I=t.item},onDragAdd:function(t){var e=t.item._underlying_vm_;if(void 0!==e){Object(g["d"])(t.item);var n=this.getVmIndex(t.newIndex);this.spliceList(n,0,e),this.computeIndexes();var r={element:e,newIndex:n};this.emitChanges({added:r})}},onDragRemove:function(t){if(Object(g["c"])(this.rootContainer,t.item,t.oldIndex),"clone"!==t.pullMode){var e=this.context.index;this.spliceList(e,1);var n={element:this.context.element,oldIndex:e};this.resetTransitionData(e),this.emitChanges({removed:n})}else Object(g["d"])(t.clone)},onDragUpdate:function(t){Object(g["d"])(t.item),Object(g["c"])(t.from,t.item,t.oldIndex);var e=this.context.index,n=this.getVmIndex(t.newIndex);this.updatePosition(e,n);var r={element:this.context.element,oldIndex:e,newIndex:n};this.emitChanges({moved:r})},updateProperty:function(t,e){t.hasOwnProperty(e)&&(t[e]+=this.headerOffset)},computeFutureIndex:function(t,e){if(!t.element)return 0;var n=p(e.to.children).filter((function(t){return"none"!==t.style["display"]})),r=n.indexOf(e.related),o=t.component.getVmIndex(r),i=-1!==n.indexOf(I);return i||!e.willInsertAfter?o:o+1},onDragMove:function(t,e){var n=this.move;if(!n||!this.realList)return!0;var r=this.getRelatedContextFromMoveEvent(t),o=this.context,i=this.computeFutureIndex(r,t);Object.assign(o,{futureIndex:i});var c=Object.assign({},t,{relatedContext:r,draggedContext:o});return n(c,e)},onDragEnd:function(){this.computeIndexes(),I=null}}};"undefined"!==typeof window&&"Vue"in window&&window.Vue.component("draggable",P);var $=P;e["default"]=$}})["default"]}));
diff --git a/wp/wp-content/plugins/facetwp/includes/api/fetch.php b/wp/wp-content/plugins/facetwp/includes/api/fetch.php
deleted file mode 100644
index 07334663..00000000
--- a/wp/wp-content/plugins/facetwp/includes/api/fetch.php
+++ /dev/null
@@ -1,180 +0,0 @@
- 'POST',
- 'callback' => [ $this, 'callback' ],
- 'permission_callback' => [ $this, 'permission_callback' ]
- ] );
- }
-
-
- // PHP < 5.3
- function callback( $request ) {
- $data = $request->get_param( 'data' );
-
- if ( ! $request->is_json_content_type()) {
- $data = empty( $data ) ? [] : json_decode( $data, true );
- }
-
- return $this->process_request( $data );
- }
-
-
- // PHP < 5.3
- function permission_callback( $request ) {
- return apply_filters( 'facetwp_api_can_access', false, $request );
- }
-
-
- function process_request( $params = [] ) {
- global $wpdb;
-
- $defaults = [
- 'facets' => [
- // 'category' => [ 'acf' ]
- ],
- 'query_args' => [
- 'post_type' => 'post',
- 'post_status' => 'publish',
- 'posts_per_page' => 10,
- 'paged' => 1,
- ],
- 'settings' => [
- 'first_load' => true
- ]
- ];
-
- $params = array_merge( $defaults, $params );
- $facet_types = FWP()->helper->facet_types;
- $valid_facets = [];
- $facets = [];
-
- // Validate input
- $page = (int) ( $params['query_args']['paged'] ?? 1 );
- $per_page = (int) ( $params['query_args']['posts_per_page'] ?? 10 );
-
- $page = max( $page, 1 );
- $per_page = ( 0 === $per_page ) ? 10 : $per_page;
- $per_page = ( -1 > $per_page ) ? absint( $per_page ) : $per_page;
-
- $params['query_args']['paged'] = $page;
- $params['query_args']['posts_per_page'] = $per_page;
-
- // Generate FWP()->facet->facets
- // Required by FWP()->helper->facet_setting_exists()
- foreach ( $params['facets'] as $facet_name => $facet_value ) {
- $facet = FWP()->helper->get_facet_by_name( $facet_name );
- if ( false !== $facet ) {
- $facet['selected_values'] = (array) $facet_value;
- $valid_facets[ $facet_name ] = $facet;
- FWP()->facet->facets[ $facet_name ] = $facet;
- }
- }
-
- // Get bucket of post IDs
- $query_args = $params['query_args'];
- FWP()->facet->query_args = $query_args;
- $post_ids = FWP()->facet->get_filtered_post_ids( $query_args );
-
- // SQL WHERE used by facets
- $where_clause = ' AND post_id IN (' . implode( ',', $post_ids ) . ')';
-
- // Check if empty
- if ( 0 === $post_ids[0] && 1 === count( $post_ids ) ) {
- $post_ids = [];
- }
-
- // get_where_clause() needs "found_posts" (keep this BELOW the empty check)
- FWP()->facet->query = (object) [ 'found_posts' => count( $post_ids ) ];
-
- // Get valid facets and their values
- foreach ( $valid_facets as $facet_name => $facet ) {
- $args = [
- 'facet' => $facet,
- 'where_clause' => $where_clause,
- 'selected_values' => $facet['selected_values'],
- ];
-
- $facet_data = [
- 'name' => $facet['name'],
- 'label' => $facet['label'],
- 'type' => $facet['type'],
- 'selected' => $facet['selected_values'],
- ];
-
- // Load facet choices if available
- if ( method_exists( $facet_types[ $facet['type'] ], 'load_values' ) ) {
- $choices = $facet_types[ $facet['type'] ]->load_values( $args );
- foreach ( $choices as $key => $choice ) {
- $row = [
- 'value' => $choice['facet_value'],
- 'label' => $choice['facet_display_value'],
- 'depth' => (int) $choice['depth'],
- 'count' => (int) $choice['counter'],
- ];
-
- if ( isset( $choice['term_id'] ) ) {
- $row['term_id'] = (int) $choice['term_id'];
- }
-
- if ( isset( $choice['parent_id'] ) ) {
- $row['parent_id'] = (int) $choice['parent_id'];
- }
-
- $choices[ $key ] = $row;
- }
-
- $facet_data['choices'] = $choices;
- }
-
- // Load facet settings if available
- if ( method_exists( $facet_types[ $facet['type'] ], 'settings_js' ) ) {
- $facet_data['settings'] = $facet_types[ $facet['type'] ]->settings_js( $args );
- }
-
- $facets[ $facet_name ] = $facet_data;
- }
-
- $total_rows = count( $post_ids );
-
- // Paginate?
- if ( 0 < $per_page ) {
- $total_pages = ceil( $total_rows / $per_page );
-
- if ( $page > $total_pages ) {
- $post_ids = [];
- }
- else {
- $offset = ( $per_page * ( $page - 1 ) );
- $post_ids = array_slice( $post_ids, $offset, $per_page );
- }
- }
- else {
- $total_pages = ( 0 < $total_rows ) ? 1 : 0;
- }
-
- // Generate the output
- $output = [
- 'results' => $post_ids,
- 'facets' => $facets,
- 'pager' => [
- 'page' => $page,
- 'per_page' => $per_page,
- 'total_rows' => $total_rows,
- 'total_pages' => $total_pages,
- ]
- ];
-
- return apply_filters( 'facetwp_api_output', $output );
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/api/refresh.php b/wp/wp-content/plugins/facetwp/includes/api/refresh.php
deleted file mode 100644
index bbc08212..00000000
--- a/wp/wp-content/plugins/facetwp/includes/api/refresh.php
+++ /dev/null
@@ -1,27 +0,0 @@
- 'POST',
- 'callback' => 'facetwp_api_refresh',
- 'permission_callback' => '__return_true'
- ] );
-});
-
-function facetwp_api_refresh( $request ) {
- $params = $request->get_params();
- $action = $params['action'] ?? '';
-
- $valid_actions = [
- 'facetwp_refresh',
- 'facetwp_autocomplete_load'
- ];
-
- $valid_actions = apply_filters( 'facetwp_api_valid_actions', $valid_actions );
-
- if ( in_array( $action, $valid_actions ) ) {
- do_action( $action );
- }
-
- return [];
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/class-ajax.php b/wp/wp-content/plugins/facetwp/includes/class-ajax.php
deleted file mode 100644
index e8645b3b..00000000
--- a/wp/wp-content/plugins/facetwp/includes/class-ajax.php
+++ /dev/null
@@ -1,321 +0,0 @@
-$action();
- }
-
- // Authenticated
- elseif ( current_user_can( 'manage_options' ) ) {
- if ( wp_verify_nonce( $_POST['nonce'], 'fwp_admin_nonce' ) ) {
- $this->$action();
- }
- }
- }
-
- // Listen for API refresh call
- add_action( 'facetwp_refresh', [ $this, 'refresh' ] );
-
- // Backwards compatibility
- $this->url_vars = FWP()->request->url_vars;
- $this->is_preload = FWP()->request->is_preload;
- }
-
-
- /**
- * Save admin settings
- */
- function save_settings() {
- $settings = $_POST['data'];
-
- if ( isset( $settings['settings'] ) ) {
- update_option( 'facetwp_settings', json_encode( $settings ), 'no' );
-
- if ( FWP()->diff->is_reindex_needed() ) {
- $response = [
- 'code' => 'error',
- 'message' => __( 'Settings saved, please re-index', 'fwp' )
- ];
- }
- else {
- $response = [
- 'code' => 'success',
- 'message' => __( 'Settings saved', 'fwp' )
- ];
- }
- }
- else {
- $response = [
- 'code' => 'error',
- 'message' => __( 'Error: invalid JSON', 'fwp' )
- ];
- }
-
- wp_send_json( $response );
- }
-
-
- /**
- * Rebuild the index table
- */
- function rebuild_index() {
- update_option( 'facetwp_indexing_cancelled', 'no', 'no' );
- FWP()->indexer->index();
- exit;
- }
-
-
- function get_info() {
- $type = $_POST['type'];
-
- if ( 'post_types' == $type ) {
- $post_types = get_post_types( [ 'exclude_from_search' => false, '_builtin' => false ] );
- $post_types = [ 'post', 'page' ] + $post_types;
- sort( $post_types );
-
- $response = [
- 'code' => 'success',
- 'message' => implode( ', ', $post_types )
- ];
- }
- elseif ( 'indexer_stats' == $type ) {
- $last_indexed = get_option( 'facetwp_last_indexed' );
- $last_indexed = $last_indexed ? human_time_diff( $last_indexed ) . ' ago' : 'never';
-
- $response = [
- 'code' => 'success',
- 'message' => "last indexed: $last_indexed"
- ];
- }
- elseif ( 'cancel_reindex' == $type ) {
- update_option( 'facetwp_indexing_cancelled', 'yes' );
-
- $response = [
- 'code' => 'success',
- 'message' => 'Indexing cancelled'
- ];
- }
- elseif ( 'purge_index_table' == $type ) {
- global $wpdb;
-
- $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}facetwp_index" );
- delete_option( 'facetwp_version' );
- delete_option( 'facetwp_indexing' );
- delete_option( 'facetwp_transients' );
-
- $response = [
- 'code' => 'success',
- 'message' => __( 'Done, please re-index', 'fwp' )
- ];
- }
-
- wp_send_json( $response );
- }
-
-
- /**
- * Return query arguments based on a Query Builder object
- */
- function get_query_args() {
- $query_obj = $_POST['query_obj'];
-
- if ( is_array( $query_obj ) ) {
- $query_args = FWP()->builder->parse_query_obj( $query_obj );
- }
-
- wp_send_json( $query_args );
- }
-
-
- /**
- * Keep track of indexing progress
- */
- function heartbeat() {
- $output = [
- 'pct' => FWP()->indexer->get_progress()
- ];
-
- if ( -1 == $output['pct'] ) {
- $output['rows'] = FWP()->helper->get_row_counts();
- }
-
- wp_send_json( $output );
- }
-
-
- /**
- * License activation
- */
- function license() {
- $license = sanitize_key( $_POST['license'] );
-
- $request = wp_remote_post( 'https://api.facetwp.com', [
- 'body' => [
- 'action' => 'activate',
- 'slug' => 'facetwp',
- 'license' => $license,
- 'host' => FWP()->helper->get_http_host(),
- ]
- ] );
-
- if ( ! is_wp_error( $request ) || 200 == wp_remote_retrieve_response_code( $request ) ) {
- update_option( 'facetwp_license', $license );
- update_option( 'facetwp_activation', $request['body'] );
- update_option( 'facetwp_updater_last_checked', 0 );
- echo $request['body'];
- }
- else {
- echo json_encode( [
- 'status' => 'error',
- 'message' => __( 'Error', 'fwp' ) . ': ' . $request->get_error_message(),
- ] );
- }
-
- exit;
- }
-
-
- /**
- * Import / export functionality
- */
- function backup() {
- $action_type = $_POST['action_type'];
- $output = [];
-
- if ( 'export' == $action_type ) {
- $items = $_POST['items'];
-
- if ( ! empty( $items ) ) {
- foreach ( $items as $item ) {
- if ( 'facet' == substr( $item, 0, 5 ) ) {
- $item_name = substr( $item, 6 );
- $output['facets'][] = FWP()->helper->get_facet_by_name( $item_name );
- }
- elseif ( 'template' == substr( $item, 0, 8 ) ) {
- $item_name = substr( $item, 9 );
- $output['templates'][] = FWP()->helper->get_template_by_name( $item_name );
- }
- }
- }
- echo json_encode( $output );
- }
- elseif ( 'import' == $action_type ) {
- $settings = FWP()->helper->settings;
- $import_code = $_POST['import_code'];
- $overwrite = (int) $_POST['overwrite'];
-
- if ( empty( $import_code ) || ! is_array( $import_code ) ) {
- _e( 'Nothing to import', 'fwp' );
- exit;
- }
-
- $status = [
- 'imported' => [],
- 'skipped' => [],
- ];
-
- foreach ( $import_code as $object_type => $object_items ) {
- foreach ( $object_items as $object_item ) {
- $is_match = false;
- foreach ( $settings[$object_type] as $key => $settings_item ) {
- if ( $object_item['name'] == $settings_item['name'] ) {
- if ( $overwrite ) {
- $settings[$object_type][$key] = $object_item;
- $status['imported'][] = $object_item['label'];
- }
- else {
- $status['skipped'][] = $object_item['label'];
- }
- $is_match = true;
- break;
- }
- }
-
- if ( ! $is_match ) {
- $settings[$object_type][] = $object_item;
- $status['imported'][] = $object_item['label'];
- }
- }
- }
-
- update_option( 'facetwp_settings', json_encode( $settings ) );
-
- if ( ! empty( $status['imported'] ) ) {
- echo ' [' . __( 'Imported', 'fwp' ) . ' ] ' . implode( ', ', $status['imported'] );
- }
- if ( ! empty( $status['skipped'] ) ) {
- echo ' [' . __( 'Skipped', 'fwp' ) . ' ] ' . implode( ', ', $status['skipped'] );
- }
- }
-
- exit;
- }
-
-
- /**
- * The AJAX facet refresh handler
- */
- function refresh() {
- global $wpdb;
-
- $params = FWP()->request->process_post_data();
- $output = FWP()->facet->render( $params );
- $data = stripslashes_deep( $_POST['data'] );
-
- // Ignore invalid UTF-8 characters in PHP 7.2+
- if ( version_compare( phpversion(), '7.2', '<' ) ) {
- $output = json_encode( $output );
- }
- else {
- $output = json_encode( $output, JSON_INVALID_UTF8_IGNORE );
- }
-
- echo apply_filters( 'facetwp_ajax_response', $output, [
- 'data' => $data
- ] );
-
- exit;
- }
-
-
- /**
- * Resume stalled indexer
- */
- function resume_index() {
- $touch = (int) FWP()->indexer->get_transient( 'touch' );
- if ( 0 < $touch && $_POST['touch'] == $touch ) {
- FWP()->indexer->index();
- }
- exit;
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/class-builder.php b/wp/wp-content/plugins/facetwp/includes/class-builder.php
deleted file mode 100644
index 9f92289c..00000000
--- a/wp/wp-content/plugins/facetwp/includes/class-builder.php
+++ /dev/null
@@ -1,839 +0,0 @@
-custom_css = $settings['custom_css'];
-
- $selector = '.fwpl-layout';
- $selector .= empty( $settings['name'] ) ? '' : '.' . $settings['name'];
-
- $this->css = [
- '.fwpl-layout, .fwpl-row' => [
- 'display' => 'grid'
- ],
- $selector => [
- 'grid-template-columns' => 'repeat(' . $settings['num_columns'] . ', 1fr)',
- 'grid-gap' => $settings['grid_gap'] . 'px'
- ],
- $selector . ' .fwpl-result' => $this->build_styles( $settings )
- ];
-
- $classes = $this->get_classes( 'fwpl-layout', $settings );
-
- $output = '';
-
- if ( have_posts() ) {
- while ( have_posts() ) : the_post();
- $counter++;
-
- // Default dynamic tags
- $tags = [
- 'post:id' => $post->ID,
- 'post:name' => $post->post_name,
- 'post:type' => $post->post_type,
- 'post:title' => $post->post_title,
- 'post:url' => get_permalink()
- ];
-
- $params = [
- 'layout' => $layout,
- 'post' => $post
- ];
-
- $this->data = apply_filters( 'facetwp_builder_dynamic_tags', $tags, $params );
-
- $output .= '
';
-
- foreach ( $layout['items'] as $row ) {
- $output .= $this->render_row( $row );
- }
-
- $output .= '
';
-
- $output = $this->parse_dynamic_tags( $output, $params );
-
- endwhile;
- }
- else {
- $no_results_text = $settings['no_results_text'] ?? '';
- $output .= do_shortcode( $no_results_text );
- }
-
- $output .= '
';
-
- $output .= $this->render_css();
-
- return $output;
- }
-
-
- /**
- * Generate the row HTML
- * @since 3.2.0
- */
- function render_row( $row ) {
- $settings = $row['settings'];
-
- $this->css['.fwpl-row.' . $settings['name'] ] = $this->build_styles( $settings );
-
- $classes = $this->get_classes( 'fwpl-row', $settings );
-
- $output = '';
-
- foreach ( $row['items'] as $col ) {
- $output .= $this->render_col( $col );
- }
-
- $output .= '
';
-
- return $output;
- }
-
-
- /**
- * Generate the col HTML
- * @since 3.2.0
- */
- function render_col( $col ) {
- $settings = $col['settings'];
-
- $this->css['.fwpl-col.' . $settings['name'] ] = $this->build_styles( $settings );
-
- $classes = $this->get_classes( 'fwpl-col', $settings );
-
- $output = '';
-
- foreach ( $col['items'] as $item ) {
- if ( 'row' == $item['type'] ) {
- $output .= $this->render_row( $item );
- }
- elseif ( 'item' == $item['type'] ) {
- $output .= $this->render_item( $item );
- }
- }
-
- $output .= '
';
-
- return $output;
- }
-
-
- /**
- * Generate the item HTML
- * @since 3.2.0
- */
- function render_item( $item ) {
- global $post;
-
- $settings = $item['settings'];
- $name = $settings['name'];
- $source = $item['source'];
- $value = $source;
-
- $selector = '.fwpl-item.' . $name;
- $selector = ( 'button' == $source ) ? $selector . ' button' : $selector;
- $this->css[ $selector ] = $this->build_styles( $settings );
-
- if ( 0 === strpos( $source, 'post_' ) || 'ID' == $source ) {
- if ( 'post_title' == $source ) {
- $value = $this->linkify( $post->$source, $settings['link'] );
- }
- elseif ( 'post_excerpt' == $source ) {
- $value = get_the_excerpt( $post->ID );
- }
- elseif ( 'post_content' == $source ) {
- $value = apply_filters( 'the_content', $post->post_content );
- }
- elseif ( 'post_author' == $source ) {
- $field = $settings['author_field'];
- $user = get_user_by( 'id', $post->$source );
- $value = $user->$field;
- }
- elseif ( 'post_type' == $source ) {
- $pt_obj = get_post_type_object( $post->$source );
- $value = $pt_obj->labels->singular_name ?? $post->$source;
- }
- else {
- $value = $post->$source;
- }
- }
- elseif ( 0 === strpos( $source, 'cf/' ) ) {
- $value = get_post_meta( $post->ID, substr( $source, 3 ), true );
- $value = $this->linkify( $value, $settings['link'] );
- }
- elseif ( 0 === strpos( $source, 'tax/' ) ) {
- $temp = [];
- $taxonomy = substr( $source, 4 );
- $terms = get_the_terms( $post->ID, $taxonomy );
-
- if ( is_array( $terms ) ) {
- foreach ( $terms as $term_obj ) {
- $term = $this->linkify( $term_obj->name, $settings['term_link'], [
- 'term_id' => $term_obj->term_id,
- 'taxonomy' => $taxonomy
- ] );
-
- $temp[] = '' . $term . ' ';
- }
- }
-
- $value = implode( $settings['separator'], $temp );
- }
- elseif ( 0 === strpos( $source, 'woo/' ) ) {
- $field = substr( $source, 4 );
- $product = wc_get_product( $post->ID );
-
- // Invalid product
- if ( ! is_object( $product ) ) {
- $value = '';
- }
-
- // Price
- elseif ( 'price' == $field || 'sale_price' == $field || 'regular_price' == $field ) {
- if ( $product->is_type( 'variable' ) ) {
- $method_name = "get_variation_$field";
- $value = $product->$method_name( 'min' ); // get_variation_price()
- }
- else {
- $method_name = "get_$field";
- $value = $product->$method_name(); // get_price()
- }
- }
-
- // Average Rating
- elseif ( 'average_rating' == $field ) {
- $value = $product->get_average_rating();
- }
-
- // Stock Status
- elseif ( 'stock_status' == $field ) {
- $value = $product->is_in_stock() ? __( 'In Stock', 'fwp' ) : __( 'Out of Stock', 'fwp' );
- }
-
- // On Sale
- elseif ( 'on_sale' == $field ) {
- $value = $product->is_on_sale() ? __( 'On Sale', 'fwp' ) : '';
- }
-
- // Product Type
- elseif ( 'product_type' == $field ) {
- $value = $product->get_type();
- }
- }
- elseif ( 0 === strpos( $source, 'acf/' ) && isset( FWP()->acf ) ) {
- $value = FWP()->acf->get_field( $source, $post->ID );
- }
- elseif ( 'featured_image' == $source ) {
- $value = get_the_post_thumbnail( $post->ID, $settings['image_size'] );
- $value = $this->linkify( $value, $settings['link'] );
- }
- elseif ( 'button' == $source ) {
- $value = '' . $settings['button_text'] . ' ';
- $value = $this->linkify( $value, $settings['link'] );
- }
- elseif ( 'html' == $source ) {
- $value = do_shortcode( $settings['content'] );
- }
-
- // Date format
- if ( ! empty( $settings['date_format'] ) && ! empty( $value ) ) {
- if ( ! empty( $settings['input_format'] ) ) {
- $date = DateTime::createFromFormat( $settings['input_format'], $value );
- }
- else {
- $date = new DateTime( $value );
- }
-
- // Use wp_date() to support i18n
- if ( $date ) {
- $value = wp_date( $settings['date_format'], $date->getTimestamp(), new DateTimeZone( 'UTC' ) );
- }
- }
-
- // Number format
- if ( ! empty( $settings['number_format'] ) && ! empty( $value ) ) {
- $decimals = 2;
- $format = $settings['number_format'];
- $decimal_sep = FWP()->helper->get_setting( 'decimal_separator' );
- $thousands_sep = FWP()->helper->get_setting( 'thousands_separator' );
-
- // No thousands separator
- if ( false === strpos( $format, ',' ) ) {
- $thousands_sep = '';
- }
-
- // Handle decimals
- if ( false === ( $pos = strpos( $format, '.' ) ) ) {
- $decimals = 0;
- }
- else {
- $decimals = strlen( $format ) - $pos - 1;
- }
-
- $value = number_format( $value, $decimals, $decimal_sep, $thousands_sep );
- }
-
- $output = '';
- $prefix = $settings['prefix'] ?? '';
- $suffix = $settings['suffix'] ?? '';
-
- // Allow value hooks
- $value = apply_filters( 'facetwp_builder_item_value', $value, $item );
-
- // Convert array to string
- if ( is_array( $value ) ) {
- $value = implode( ', ', $value );
- }
-
- // Store the RAW short-tag
- $this->data[ "$name:raw" ] = $value;
-
- // Attach the prefix / suffix to the value
- if ( '' != $value ) {
- $value = $prefix . $value . $suffix;
- }
-
- // Store the short-tag
- $this->data[ $name ] = $value;
-
- // Build the list of CSS classes
- $classes = $this->get_classes( 'fwpl-item', $settings );
-
- if ( '' == $value ) {
- $classes .= ' is-empty';
- }
-
- // Prevent output
- if ( ! $settings['is_hidden'] ) {
- $output = '' . $value . '
';
- }
-
- return $output;
- }
-
-
- /**
- * Parse dynamic tags, e.g. {{ first_name }}
- */
- function parse_dynamic_tags( $output, $params ) {
- $pattern = '/({{[ ]?(.*?)[ ]?}})/s';
-
- return preg_replace_callback( $pattern, function( $matches ) use( $params ) {
- $tag_name = $matches[2];
- $tag_value = $this->data[ $tag_name ] ?? '';
- return apply_filters( 'facetwp_builder_dynamic_tag_value', $tag_value, $tag_name, $params );
- }, $output );
- }
-
-
- /**
- * Calculate some dynamic tag values on-the-fly, to prevent
- * unnecessary queries and extra load time
- */
- function dynamic_tag_value( $tag_value, $tag_name, $params ) {
- if ( 'post:image' == $tag_name ) {
- $tag_value = get_the_post_thumbnail_url( $params['post']->ID, 'full' );
- }
-
- return $tag_value;
- }
-
-
- /**
- * Build the redundant styles (border, padding,etc)
- * @since 3.2.0
- */
- function build_styles( $settings ) {
- $styles = [];
-
- if ( isset( $settings['grid_template_columns'] ) ) {
- $styles['grid-template-columns'] = $settings['grid_template_columns'];
- }
- if ( isset( $settings['border'] ) ) {
- $styles['border-style'] = $settings['border']['style'];
- $styles['border-color'] = $settings['border']['color'];
- $styles['border-width'] = $this->get_widths( $settings['border']['width'] );
- }
- if ( isset( $settings['background_color'] ) ) {
- $styles['background-color'] = $settings['background_color'];
- }
- if ( isset( $settings['padding'] ) ) {
- $styles['padding'] = $this->get_widths( $settings['padding'] );
- }
- if ( isset( $settings['text_style'] ) ) {
- $styles['text-align'] = $settings['text_style']['align'];
- $styles['font-weight'] = $settings['text_style']['bold'] ? 'bold' : '';
- $styles['font-style'] = $settings['text_style']['italic'] ? 'italic' : '';
- }
- if ( isset( $settings['font_size'] ) ) {
- $styles['font-size'] = $settings['font_size']['size'] . $settings['font_size']['unit'];
- }
- if ( isset( $settings['text_color'] ) ) {
- $styles['color'] = $settings['text_color'];
- }
- if ( isset( $settings['button_border'] ) ) {
- $border = $settings['button_border'];
- $width = $border['width'];
- $unit = $width['unit'];
-
- $styles['color'] = $settings['button_text_color'];
- $styles['background-color'] = $settings['button_color'];
- $styles['padding'] = $this->get_widths( $settings['button_padding'] );
- $styles['border-style'] = $border['style'];
- $styles['border-color'] = $border['color'];
- $styles['border-top-width'] = $width['top'] . $unit;
- $styles['border-right-width'] = $width['right'] . $unit;
- $styles['border-bottom-width'] = $width['bottom'] . $unit;
- $styles['border-left-width'] = $width['left'] . $unit;
- }
-
- return $styles;
- }
-
-
- /**
- * Build the CSS widths, e.g. for "padding" or "border-width"
- * @since 3.2.0
- */
- function get_widths( $data ) {
- $unit = $data['unit'];
- $top = $data['top'];
- $right = $data['right'];
- $bottom = $data['bottom'];
- $left = $data['left'];
-
- if ( $top == $right && $right == $bottom && $bottom == $left ) {
- return "$top$unit";
- }
- elseif ( $top == $bottom && $left == $right ) {
- return "$top$unit $left$unit";
- }
-
- return "$top$unit $right$unit $bottom$unit $left$unit";
- }
-
-
- /**
- * Convert a value into a link
- * @since 3.2.0
- */
- function linkify( $value, $link_data, $term_data = [] ) {
- global $post;
-
- $type = $link_data['type'];
- $href = $link_data['href'];
- $target = $link_data['target'];
-
- if ( 'none' !== $type ) {
- if ( 'post' == $type ) {
- $href = get_permalink();
- }
- if ( 'term' == $type ) {
- $href = get_term_link( $term_data['term_id'], $term_data['taxonomy'] );
- }
-
- if ( ! empty( $target ) ) {
- $target = ' target="' . $target . '"';
- }
-
- $value = '' . $value . ' ';
- }
-
- return $value;
- }
-
-
- /**
- * Turn the CSS array into valid CSS
- * @since 3.2.0
- */
- function render_css() {
- $output = "\n\n";
-
- return $output;
- }
-
-
- /**
- * Filter out empty or invalid rules
- * @since 3.2.0
- */
- function get_valid_css_rules( $props ) {
- $rules = [];
-
- foreach ( $props as $prop => $value ) {
- if ( $this->is_valid_css_rule( $prop, $value ) ) {
- $rules[ $prop ] = $value;
- }
- }
-
- return $rules;
- }
-
-
- /**
- * Optimize CSS rules
- * @since 3.2.0
- */
- function is_valid_css_rule( $prop, $value ) {
- $return = true;
-
- if ( empty( $value ) || 'px' === $value || '0px' === $value || 'none' === $value ) {
- $return = false;
- }
-
- if ( 'font-size' === $prop && '0px' === $value ) {
- $return = false;
- }
-
- return $return;
- }
-
-
- /**
- * Make sure the query is valid
- * @since 3.2.0
- */
- function parse_query_obj( $query_obj ) {
- $output = [];
- $tax_query = [];
- $meta_query = [];
- $date_query = [];
- $post_type = 'any';
- $post_status = [ 'publish' ];
- $posts_per_page = 10;
- $post_in = [];
- $post_not_in = [];
- $author_in = [];
- $author_not_in = [];
- $orderby = [];
-
- if ( ! empty( $query_obj['posts_per_page'] ) ) {
- $posts_per_page = (int) $query_obj['posts_per_page'];
- }
-
- if ( ! empty( $query_obj['post_type'] ) ) {
- $post_type = array_column( $query_obj['post_type'], 'value' );
- }
-
- if ( empty( $query_obj['filters'] ) ) {
- $query_obj['filters'] = [];
- }
-
- if ( empty( $query_obj['orderby'] ) ) {
- $query_obj['orderby'] = [];
- }
-
- foreach ( $query_obj['filters'] as $filter ) {
- $key = $filter['key'];
- $value = $filter['value'];
- $compare = $filter['compare'];
- $type = $filter['type'];
-
- // Cast as decimal for more accuracy
- $type = ( 'NUMERIC' == $type ) ? 'DECIMAL(16,4)' : $type;
- $exists_bypass = false;
- $value_bypass = false;
-
- // Clear the value for certain compare types
- if ( in_array( $compare, [ 'EXISTS', 'NOT EXISTS', 'EMPTY', 'NOT EMPTY' ] ) ) {
- $value_bypass = true;
- $value = '';
- }
-
- if ( in_array( $compare, [ 'EXISTS', 'NOT EXISTS' ] ) ) {
- $exists_bypass = true;
- }
-
- // If "EMPTY", use "=" compare type w/ empty string value
- if ( in_array( $compare, [ 'EMPTY', 'NOT EMPTY' ] ) ) {
- $compare = ( 'EMPTY' == $compare ) ? '=' : '!=';
- }
-
- // Handle multiple values
- if ( is_array( $value ) ) {
- if ( in_array( $compare, [ '=', '!=' ] ) ) {
- $compare = ( '=' == $compare ) ? 'IN' : 'NOT IN';
- }
-
- if ( ! in_array( $compare, [ 'IN', 'NOT IN' ] ) ) {
- $value = $value[0];
- }
- }
-
- if ( empty( $value ) && ! $value_bypass ) {
- continue;
- }
-
- // Support dynamic URL vars
- $value = $this->parse_uri_tags( $value );
-
- // Prepend with "date|" so we can populate with hydrate_date_values()
- if ( 'DATE' == $type ) {
- $value = 'date|' . $value;
- }
-
- if ( 'ID' == $key ) {
- $arg_name = ( 'IN' == $compare ) ? 'post_in' : 'post_not_in';
- $$arg_name = $value;
- }
- elseif ( 'post_author' == $key ) {
- $arg_name = ( 'IN' == $compare ) ? 'author_in' : 'author_not_in';
- $$arg_name = $value;
- }
- elseif ( 'post_status' == $key ) {
- $post_status = $value;
- }
- elseif ( 'post_date' == $key || 'post_modified' == $key ) {
- if ( '>' == $compare || '>=' == $compare ) {
- $date_query[] = [
- 'after' => $value,
- 'inclusive' => ( '>=' == $compare )
- ];
- }
- if ( '<' == $compare || '<=' == $compare ) {
- $date_query[] = [
- 'before' => $value,
- 'inclusive' => ( '<=' == $compare )
- ];
- }
- }
- elseif ( 0 === strpos( $key, 'tax/' ) ) {
- $temp = [
- 'taxonomy' => substr( $key, 4 ),
- 'field' => 'slug',
- 'operator' => $compare
- ];
-
- if ( ! $exists_bypass ) {
- $temp['terms'] = $value;
- }
-
- $tax_query[] = $temp;
- }
- else {
- $temp = [
- 'key' => substr( $key, strpos( $key, '/' ) + 1 ),
- 'compare' => $compare,
- 'type' => $type
- ];
-
- if ( ! $exists_bypass ) {
- $temp['value'] = $value;
- }
-
- $meta_query[] = $temp;
- }
- }
-
- foreach ( $query_obj['orderby'] as $index => $data ) {
- if ( 'cf/' == substr( $data['key'], 0, 3 ) ) {
- $type = $data['type'];
-
- // Cast as decimal for more accuracy
- $type = ( 'NUMERIC' == $type ) ? 'DECIMAL(16,4)' : $type;
-
- $meta_query['sort_' . $index] = [
- 'key' => substr( $data['key'], 3 ),
- 'type' => $type
- ];
-
- $orderby['sort_' . $index] = $data['order'];
- }
- else {
- $orderby[ $data['key'] ] = $data['order'];
- }
- }
-
- $temp = [
- 'post_type' => $post_type,
- 'post_status' => $post_status,
- 'meta_query' => $meta_query,
- 'tax_query' => $tax_query,
- 'date_query' => $date_query,
- 'post__in' => $post_in,
- 'post__not_in' => $post_not_in,
- 'author__in' => $author_in,
- 'author__not_in' => $author_not_in,
- 'orderby' => $orderby,
- 'posts_per_page' => $posts_per_page
- ];
-
- foreach ( $temp as $key => $val ) {
- if ( ! empty( $val ) ) {
- $output[ $key ] = $val;
- }
- }
-
- return $output;
- }
-
-
- /**
- * Get necessary values for the layout builder
- * @since 3.2.0
- */
- function get_layout_data() {
- $sources = FWP()->helper->get_data_sources();
- unset( $sources['post'] );
-
- // Static options
- $output = [
- 'row' => 'Child Row',
- 'html' => 'HTML',
- 'button' => 'Button',
- 'featured_image' => 'Featured Image',
- 'ID' => 'Post ID',
- 'post_title' => 'Post Title',
- 'post_name' => 'Post Name',
- 'post_content' => 'Post Content',
- 'post_excerpt' => 'Post Excerpt',
- 'post_date' => 'Post Date',
- 'post_modified' => 'Post Modified',
- 'post_author' => 'Post Author',
- 'post_type' => 'Post Type'
- ];
-
- foreach ( $sources as $group ) {
- foreach ( $group['choices'] as $name => $label ) {
- $output[ $name ] = $label;
- }
- }
-
- return $output;
- }
-
-
- /**
- * Get necessary data for the query builder
- * @since 3.0.0
- */
- function get_query_data() {
- $builder_post_types = [];
-
- $post_types = get_post_types( [ 'public' => true ], 'objects' );
- $data_sources = FWP()->helper->get_data_sources( 'builder' );
-
- // Remove ACF choices
- unset( $data_sources['acf'] );
-
- foreach ( $post_types as $type ) {
- $builder_post_types[] = [
- 'label' => $type->labels->name,
- 'value' => $type->name
- ];
- }
-
- $data_sources['posts']['choices'] = [
- 'ID' => 'ID',
- 'post_author' => 'Post Author',
- 'post_status' => 'Post Status',
- 'post_date' => 'Post Date',
- 'post_modified' => 'Post Modified'
- ];
-
- return apply_filters( 'facetwp_builder_query_data', [
- 'post_types' => $builder_post_types,
- 'filter_by' => $data_sources
- ] );
- }
-
-
- /**
- * Replace "date|" placeholders with actual dates
- */
- function hydrate_date_values( $query_args ) {
- if ( isset( $query_args['meta_query'] ) ) {
- foreach ( $query_args['meta_query'] as $index => $row ) {
- if ( isset( $row['value'] ) && is_string( $row['value'] ) && 0 === strpos( $row['value'], 'date|' ) ) {
- $value = trim( substr( $row['value'], 5 ) );
- $value = date( 'Y-m-d', strtotime( $value ) );
- $query_args['meta_query'][ $index ]['value'] = $value;
- }
- }
- }
-
- return $query_args;
- }
-
-
- /**
- * Let users pull URI or GET params into the query builder
- * E.g. "http:uri", "http:uri:0", or "http:get:year"
- * @since 3.6.0
- */
- function parse_uri_tags( $values ) {
- $temp = (array) $values;
-
- foreach ( $temp as $key => $value ) {
- if ( 0 === strpos( $value, 'http:uri' ) ) {
- $uri = FWP()->helper->get_uri();
- $uri_parts = explode( '/', $uri );
- $tag_parts = explode( ':', $value );
- if ( isset( $tag_parts[2] ) ) {
- $index = (int) $tag_parts[2];
- $index = ( $index < 0 ) ? count( $uri_parts ) + $index : $index;
- $temp[ $key ] = $uri_parts[ $index ] ?? '';
- }
- else {
- $temp[ $key ] = $uri;
- }
- }
- elseif ( 0 === strpos( $value, 'http:get:' ) ) {
- $tag_parts = explode( ':', $value );
- $temp[ $key ] = $_GET[ $tag_parts[2] ] ?? '';
- }
- }
-
- return is_array( $values ) ? $temp : $temp[0];
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/class-diff.php b/wp/wp-content/plugins/facetwp/includes/class-diff.php
deleted file mode 100644
index 1f16795e..00000000
--- a/wp/wp-content/plugins/facetwp/includes/class-diff.php
+++ /dev/null
@@ -1,73 +0,0 @@
-helper->load_settings();
- $s2 = FWP()->helper->load_settings( true );
-
- // Compare settings
- $to_check = [ 'thousands_separator', 'decimal_separator', 'wc_enable_variations', 'wc_index_all' ];
-
- foreach ( $to_check as $name ) {
- $attr1 = $this->get_attr( $name, $s1['settings'] );
- $attr2 = $this->get_attr( $name, $s2['settings'] );
- if ( $attr1 !== $attr2 ) {
- return true;
- }
- }
-
- // Get facets, removing non-indexable ones
- $f1 = array_filter( $s1['facets'], [ $this, 'is_indexable' ] );
- $f2 = array_filter( $s2['facets'], [ $this, 'is_indexable' ] );
-
- // The facet count is different
- if ( count( $f1 ) !== count( $f2 ) ) {
- return true;
- }
-
- // Sort the facets alphabetically
- usort( $f1, function( $a, $b ) {
- return strcmp( $a['name'], $b['name'] );
- });
-
- usort( $f2, function( $a, $b ) {
- return strcmp( $a['name'], $b['name'] );
- });
-
- // Compare facet properties
- $to_check = [ 'name', 'type', 'source', 'source_other', 'parent_term', 'hierarchical', 'modifier_type', 'modifier_values' ];
-
- foreach ( $f1 as $index => $facet ) {
- foreach ( $to_check as $attr ) {
- $attr1 = $this->get_attr( $attr, $facet );
- $attr2 = $this->get_attr( $attr, $f2[ $index ] );
- if ( $attr1 !== $attr2 ) {
- return true;
- }
- }
- }
-
- return false;
- }
-
-
- function is_indexable( $facet ) {
- return ! in_array( $facet['type'], [ 'search', 'pager', 'reset', 'sort' ] );
- }
-
-
- /**
- * Get an array element
- * @since 3.0.9
- */
- function get_attr( $name, $collection ) {
- return $collection[ $name ] ?? false;
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/class-display.php b/wp/wp-content/plugins/facetwp/includes/class-display.php
deleted file mode 100644
index d4cf1ea1..00000000
--- a/wp/wp-content/plugins/facetwp/includes/class-display.php
+++ /dev/null
@@ -1,244 +0,0 @@
-get( 'facetwp' ) && did_action( 'wp_head' ) ) {
- echo "\n";
- }
- }
-
-
- /**
- * Set default values for atts
- *
- * Old: [facetwp template="foo" static]
- * New: [facetwp template="foo" static="true"]
- */
- function normalize_atts( $atts ) {
- foreach ( $atts as $key => $val ) {
- if ( is_int( $key ) ) {
- $atts[ $val ] = true;
- unset( $atts[ $key ] );
- }
- }
- return $atts;
- }
-
-
- /**
- * Register shortcodes
- */
- function shortcode( $atts ) {
- $atts = $this->normalize_atts( $atts );
- $this->shortcode_atts[] = $atts;
-
- $output = '';
- if ( isset( $atts['facet'] ) ) {
- $facet = FWP()->helper->get_facet_by_name( $atts['facet'] );
-
- if ( $facet ) {
- $ui = empty( $facet['ui_type'] ) ? $facet['type'] : $facet['ui_type'];
- $ui_attr = empty( $facet['ui_type'] ) ? '' : ' data-ui="' . $ui . '"';
- $output = '
';
-
- // Build list of active facet types
- $this->active_types[ $facet['type'] ] = $facet['type'];
- $this->active_facets[ $facet['name'] ] = $facet['name'];
- $this->load_assets = true;
- }
- }
- elseif ( isset( $atts['template'] ) ) {
- $template = FWP()->helper->get_template_by_name( $atts['template'] );
-
- if ( $template ) {
- $class_name = 'facetwp-template';
-
- // Static template
- if ( isset( $atts['static'] ) ) {
- $renderer = new FacetWP_Renderer();
- $renderer->template = $template;
- $renderer->query_args = $renderer->get_query_args();
- $renderer->query = new WP_Query( $renderer->query_args );
- $html = $renderer->get_template_html();
- $class_name .= '-static';
- }
- // Preload template (search engine visible)
- else {
- global $wp_query;
-
- $temp_query = $wp_query;
- $args = FWP()->request->process_preload_data( $template['name'] );
- $preload_data = FWP()->facet->render( $args );
- $html = $preload_data['template'];
- $wp_query = $temp_query;
- }
-
- $output = '{html}
';
- $output = str_replace( '{class}', $class_name, $output );
- $output = str_replace( '{name}', $atts['template'], $output );
- $output = str_replace( '{html}', $html, $output );
-
- $this->load_assets = true;
- }
- }
- elseif ( isset( $atts['sort'] ) ) {
- $this->active_extras['sort'] = true;
- $output = '
';
- }
- elseif ( isset( $atts['selections'] ) ) {
- $output = '
';
- }
- elseif ( isset( $atts['counts'] ) ) {
- $this->active_extras['counts'] = true;
- $output = '
';
- }
- elseif ( isset( $atts['pager'] ) ) {
- $this->active_extras['pager'] = true;
- $output = '';
- }
- elseif ( isset( $atts['per_page'] ) ) {
- $this->active_extras['per_page'] = true;
- $output = '
';
- }
-
- $output = apply_filters( 'facetwp_shortcode_html', $output, $atts );
-
- return $output;
- }
-
-
- /**
- * Output facet scripts
- */
- function front_scripts() {
-
- // Not enqueued - front.js needs to load before front_scripts()
- if ( apply_filters( 'facetwp_load_assets', $this->load_assets ) ) {
-
- // Load CSS?
- if ( apply_filters( 'facetwp_load_css', true ) ) {
- $this->assets['front.css'] = FACETWP_URL . '/assets/css/front.css';
- }
-
- // Load required JS
- $this->assets['front.js'] = FACETWP_URL . '/assets/js/dist/front.min.js';
-
- // Backwards compat?
- if ( apply_filters( 'facetwp_load_deprecated', false ) ) {
- $this->assets['front-deprecated.js'] = FACETWP_URL . '/assets/js/src/deprecated.js';
- }
-
- // Load a11y?
- $a11y = FWP()->helper->get_setting( 'load_a11y', 'no' );
- $a11y_hook = apply_filters( 'facetwp_load_a11y', false );
-
- if ( 'yes' == $a11y || $a11y_hook ) {
- $this->assets['accessibility.js'] = FACETWP_URL . '/assets/js/src/accessibility.js';
- $this->json['a11y'] = [
- 'label_page' => __( 'Go to page', 'fwp-front' ),
- 'label_page_next' => __( 'Go to next page', 'fwp-front' ),
- 'label_page_prev' => __( 'Go to previous page', 'fwp-front' )
- ];
- }
-
- // Pass GET and URI params
- $http_params = [
- 'get' => $_GET,
- 'uri' => FWP()->helper->get_uri(),
- 'url_vars' => FWP()->request->url_vars,
- ];
-
- // See FWP()->facet->get_query_args()
- if ( ! empty( FWP()->facet->archive_args ) ) {
- $http_params['archive_args'] = FWP()->facet->archive_args;
- }
-
- // Populate the FWP_JSON object
- $this->json['prefix'] = FWP()->helper->get_setting( 'prefix' );
- $this->json['no_results_text'] = __( 'No results found', 'fwp-front' );
- $this->json['ajaxurl'] = get_rest_url() . 'facetwp/v1/refresh';
- $this->json['nonce'] = wp_create_nonce( 'wp_rest' );
-
- if ( apply_filters( 'facetwp_use_preloader', true ) ) {
- $overrides = FWP()->request->process_preload_overrides([
- 'facets' => $this->active_facets,
- 'extras' => $this->active_extras,
- ]);
- $args = FWP()->request->process_preload_data( false, $overrides );
- $this->json['preload_data'] = FWP()->facet->render( $args );
- }
-
- ob_start();
-
- foreach ( $this->active_types as $type ) {
- $facet_class = FWP()->helper->facet_types[ $type ];
- if ( method_exists( $facet_class, 'front_scripts' ) ) {
- $facet_class->front_scripts();
- }
- }
-
- $inline_scripts = ob_get_clean();
- $assets = apply_filters( 'facetwp_assets', $this->assets );
-
- foreach ( $assets as $slug => $data ) {
- $data = (array) $data;
- $is_css = ( 'css' == substr( $slug, -3 ) );
- $version = empty( $data[1] ) ? FACETWP_VERSION : $data[1];
- $url = $data[0];
-
- if ( false !== strpos( $url, 'facetwp' ) ) {
- $prefix = ( false !== strpos( $url, '?' ) ) ? '&' : '?';
- $url .= $prefix . 'ver=' . $version;
- }
-
- $html = $is_css ? ' ' : '';
- $html = apply_filters( 'facetwp_asset_html', $html, $url );
- echo str_replace( '{url}', $url, $html ) . "\n";
- }
-
- echo $inline_scripts;
-?>
-
-facet_types = $this->get_facet_types();
- $this->settings = $this->load_settings();
- }
-
-
- /**
- * Parse the URL hostname
- */
- function get_http_host() {
- return parse_url( get_option( 'home' ), PHP_URL_HOST );
- }
-
-
- /**
- * Get the current page URI
- */
- function get_uri() {
- if ( isset( FWP()->facet->http_params ) ) {
- return FWP()->facet->http_params['uri'];
- }
-
- $uri = parse_url( $_SERVER['REQUEST_URI'] );
- return isset( $uri['path'] ) ? trim( $uri['path'], '/' ) : '';
- }
-
-
- /**
- * Get available facet types
- */
- function get_facet_types() {
- if ( ! empty( $this->facet_types ) ) {
- return $this->facet_types;
- }
-
- include( FACETWP_DIR . '/includes/facets/base.php' );
-
- $types = [
- 'checkboxes' => 'Facetwp_Facet_Checkboxes',
- 'dropdown' => 'Facetwp_Facet_Dropdown',
- 'radio' => 'Facetwp_Facet_Radio_Core',
- 'fselect' => 'Facetwp_Facet_fSelect',
- 'hierarchy' => 'Facetwp_Facet_Hierarchy',
- 'slider' => 'Facetwp_Facet_Slider',
- 'search' => 'Facetwp_Facet_Search',
- 'autocomplete' => 'Facetwp_Facet_Autocomplete',
- 'date_range' => 'Facetwp_Facet_Date_Range',
- 'number_range' => 'Facetwp_Facet_Number_Range',
- 'rating' => 'FacetWP_Facet_Rating',
- 'proximity' => 'Facetwp_Facet_Proximity_Core',
- 'pager' => 'FacetWP_Facet_Pager',
- 'reset' => 'FacetWP_Facet_Reset',
- 'sort' => 'FacetWP_Facet_Sort'
- ];
-
- $facet_types = [];
-
- foreach ( $types as $slug => $class_name ) {
- include( FACETWP_DIR . "/includes/facets/$slug.php" );
- $facet_types[ $slug ] = new $class_name();
- }
-
- return apply_filters( 'facetwp_facet_types', $facet_types );
- }
-
-
- /**
- * Get settings and allow for developer hooks
- */
- function load_settings( $last_index = false ) {
- $name = $last_index ? 'facetwp_settings_last_index' : 'facetwp_settings';
- $option = get_option( $name );
-
- $defaults = [
- 'facets' => [],
- 'templates' => [],
- 'settings' => [
- 'thousands_separator' => ',',
- 'decimal_separator' => '.',
- 'prefix' => '_',
- 'load_jquery' => 'no'
- ]
- ];
-
- $settings = ( false !== $option ) ? json_decode( $option, true ) : [];
- $settings = array_merge( $defaults, $settings );
- $settings['settings'] = array_merge( $defaults['settings'], $settings['settings'] );
-
- // Store DB-based facet & template names
- $db_names = [];
-
- foreach ( $settings['facets'] as $facet ) {
- $db_names[ 'facet-' . $facet['name'] ] = true;
- }
-
- foreach ( $settings['templates'] as $template ) {
- $db_names[ 'template-' . $template['name'] ] = true;
- }
-
- // Programmatically registered
- $facets = apply_filters( 'facetwp_facets', $settings['facets'] );
- $templates = apply_filters( 'facetwp_templates', $settings['templates'] );
-
- $tmp_facets = [];
- $tmp_templates = [];
-
- // Merge DB + code-based facets
- foreach ( $facets as $facet ) {
- $name = $facet['name'];
- $is_db_based = isset( $db_names[ "facet-$name" ] );
-
- if ( ! $is_db_based ) {
- $facet['_code'] = true;
- }
-
- if ( ! $is_db_based || empty( $tmp_facets[ $name ] ) ) {
-
- // Valid facet type?
- if ( in_array( $facet['type'], array_keys( $this->facet_types ) ) ) {
- $tmp_facets[ $name ] = $facet;
- }
- }
- }
-
- // Merge DB + code-based templates
- foreach ( $templates as $template ) {
- $name = $template['name'];
- $is_db_based = isset( $db_names[ "template-$name" ] );
-
- if ( ! $is_db_based ) {
- $template['_code'] = true;
- }
-
- if ( ! $is_db_based || empty( $tmp_templates[ $name ] ) ) {
- $tmp_templates[ $name ] = $template;
- }
- }
-
- // Convert back to numerical arrays
- $settings['facets'] = array_values( $tmp_facets );
- $settings['templates'] = array_values( $tmp_templates );
-
- // Filtered settings
- return $settings;
- }
-
-
- /**
- * Get a general setting value
- *
- * @param string $name The setting name
- * @param mixed $default The default value
- * @since 1.9
- */
- function get_setting( $name, $default = '' ) {
- return $this->settings['settings'][ $name ] ?? $default;
- }
-
-
- /**
- * Get an array of all facets
- * @return array
- */
- function get_facets() {
- return $this->settings['facets'];
- }
-
-
- /**
- * Get an array of all templates
- * @return array
- */
- function get_templates() {
- return $this->settings['templates'];
- }
-
-
- /**
- * Get all properties for a single facet
- * @param string $facet_name
- * @return mixed An array of facet info, or false
- */
- function get_facet_by_name( $facet_name ) {
- foreach ( $this->get_facets() as $facet ) {
- if ( $facet_name == $facet['name'] ) {
- return $facet;
- }
- }
-
- return false;
- }
-
-
- /**
- * Get all properties for a single template
- *
- * @param string $template_name
- * @return mixed An array of template info, or false
- */
- function get_template_by_name( $template_name ) {
- foreach ( $this->get_templates() as $template ) {
- if ( $template_name == $template['name'] ) {
- return $template;
- }
- }
-
- return false;
- }
-
-
- /**
- * Fetch facets using one of its settings
- * @param string $setting_name
- * @param mixed $setting_value
- * @return array
- */
- function get_facets_by( $setting, $value ) {
- $matches = [];
-
- foreach ( $this->get_facets() as $facet ) {
- if ( isset( $facet[ $setting ] ) && $value === $facet[ $setting ] ) {
- $matches[] = $facet;
- }
- }
-
- return $matches;
- }
-
-
- /**
- * Get terms across all languages (thanks, WPML)
- * @since 3.8.5
- */
- function get_terms( $taxonomy ) {
- global $wpdb;
-
- $sql = "
- SELECT t.term_id, t.name, t.slug, tt.parent FROM {$wpdb->term_taxonomy} tt
- INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id
- WHERE tt.taxonomy = %s";
-
- return $wpdb->get_results( $wpdb->prepare( $sql, $taxonomy ) );
- }
-
-
- /**
- * Get an array of term information, including depth
- * @param string $taxonomy The taxonomy name
- * @return array Term information
- * @since 0.9.0
- */
- function get_term_depths( $taxonomy ) {
-
- if ( isset( $this->term_cache[ $taxonomy ] ) ) {
- return $this->term_cache[ $taxonomy ];
- }
-
- $output = [];
- $parents = [];
-
- $terms = $this->get_terms( $taxonomy );
-
- // Get term parents
- foreach ( $terms as $term ) {
- $parents[ $term->term_id ] = $term->parent;
- }
-
- // Build the term array
- foreach ( $terms as $term ) {
- $output[ $term->term_id ] = [
- 'term_id' => $term->term_id,
- 'name' => $term->name,
- 'slug' => $term->slug,
- 'parent_id' => $term->parent,
- 'depth' => 0
- ];
-
- $current_parent = $term->parent;
- while ( 0 < (int) $current_parent ) {
- $current_parent = $parents[ $current_parent ];
- $output[ $term->term_id ]['depth']++;
-
- // Prevent an infinite loop
- if ( 50 < $output[ $term->term_id ]['depth'] ) {
- break;
- }
- }
- }
-
- $this->term_cache[ $taxonomy ] = $output;
-
- return $output;
- }
-
-
- /**
- * Finish sorting the facet values
- * The results are already sorted by depth and (name OR count), we just need
- * to move the children directly below their parents
- */
- function sort_taxonomy_values( $values = [], $orderby = 'count' ) {
- $final = [];
- $cache = [];
-
- // Create an "order" sort value based on the top-level items
- foreach ( $values as $key => $val ) {
- if ( 0 == $val['depth'] ) {
- $val['order'] = $key;
- $cache[ $val['term_id'] ] = $key;
- $final[] = $val;
- }
- elseif ( isset( $cache[ $val['parent_id'] ] ) ) { // skip orphans
- $val['order'] = $cache[ $val['parent_id'] ] . ".$key"; // dot-separated hierarchy string
- $cache[ $val['term_id'] ] = $val['order'];
- $final[] = $val;
- }
- }
-
- // Sort the array based on the new "order" element
- // Since this is a dot-separated hierarchy string, use version_compare
- usort( $final, function( $a, $b ) {
- return version_compare( $a['order'], $b['order'] );
- });
-
- return $final;
- }
-
-
- /**
- * Sanitize SQL data
- * @return mixed The sanitized value(s)
- * @since 3.0.7
- */
- function sanitize( $input ) {
- global $wpdb;
-
- if ( is_array( $input ) ) {
- $output = [];
-
- foreach ( $input as $key => $val ) {
- $output[ $key ] = $this->sanitize( $val );
- }
- }
- else {
- if ( $wpdb->dbh && $wpdb->use_mysqli ) {
- $output = mysqli_real_escape_string( $wpdb->dbh, $input );
- }
- else {
- $output = addslashes( $input );
- }
- }
-
- return $output;
- }
-
-
- /**
- * Does an active facet with the specified setting exist?
- * @return boolean
- * @since 1.4.0
- */
- function facet_setting_exists( $setting_name, $setting_value ) {
- foreach ( FWP()->facet->facets as $f ) {
- if ( isset( $f[ $setting_name ] ) && $f[ $setting_name ] == $setting_value ) {
- return true;
- }
- }
-
- return false;
- }
-
-
- /**
- * Does this facet have a setting with the specified value?
- * @return boolean
- * @since 2.3.4
- */
- function facet_is( $facet, $setting_name, $setting_value ) {
- if ( is_string( $facet ) ) {
- $facet = $this->get_facet_by_name( $facet );
- }
-
- if ( isset( $facet[ $setting_name ] ) && $facet[ $setting_name ] == $setting_value ) {
- return true;
- }
-
- return false;
- }
-
-
- /**
- * Hash a facet value if needed
- * @return string
- * @since 2.1
- */
- function safe_value( $value ) {
- $value = remove_accents( $value );
-
- if ( preg_match( '/[^a-z0-9_.\- ]/i', $value ) ) {
- if ( ! preg_match( '/^\d{4}-(0[1-9]|1[012])-([012]\d|3[01])/', $value ) ) {
- $value = md5( $value );
- }
- }
-
- $value = str_replace( ' ', '-', strtolower( $value ) );
- $value = preg_replace( '/[-]{2,}/', '-', $value );
- $value = ( 50 < strlen( $value ) ) ? substr( $value, 0, 50 ) : $value;
- return $value;
- }
-
-
- /**
- * Properly format numbers, taking separators into account
- * @return number
- * @since 2.7.5
- */
- function format_number( $num ) {
- $sep_decimal = $this->get_setting( 'decimal_separator' );
- $sep_thousands = $this->get_setting( 'thousands_separator' );
-
- $num = str_replace( $sep_thousands, '', $num );
- $num = ( ',' == $sep_decimal ) ? str_replace( ',', '.', $num ) : $num;
- $num = preg_replace( '/[^0-9-.]/', '', $num );
-
- return $num;
- }
-
-
- /**
- * Get facet data sources
- * @return array
- * @since 2.2.1
- */
- function get_data_sources( $context = 'default' ) {
- global $wpdb;
-
- // Cached?
- if ( ! empty( $this->data_sources ) ) {
- $sources = $this->data_sources;
- }
- else {
-
- // Get excluded meta keys
- $excluded_fields = apply_filters( 'facetwp_excluded_custom_fields', [
- '_edit_last',
- '_edit_lock',
- ] );
-
- // Get taxonomies
- $taxonomies = get_taxonomies( [], 'object' );
-
- // Get custom fields
- $meta_keys = $wpdb->get_col( "SELECT DISTINCT meta_key FROM {$wpdb->postmeta} ORDER BY meta_key" );
- $custom_fields = array_diff( $meta_keys, $excluded_fields );
-
- $sources = [
- 'posts' => [
- 'label' => __( 'Posts', 'fwp' ),
- 'choices' => [
- 'post_type' => __( 'Post Type', 'fwp' ),
- 'post_date' => __( 'Post Date', 'fwp' ),
- 'post_modified' => __( 'Post Modified', 'fwp' ),
- 'post_title' => __( 'Post Title', 'fwp' ),
- 'post_author' => __( 'Post Author', 'fwp' )
- ],
- 'weight' => 10
- ],
- 'taxonomies' => [
- 'label' => __( 'Taxonomies', 'fwp' ),
- 'choices' => [],
- 'weight' => 20
- ],
- 'custom_fields' => [
- 'label' => __( 'Custom Fields', 'fwp' ),
- 'choices' => [],
- 'weight' => 30
- ]
- ];
-
- foreach ( $taxonomies as $tax ) {
- $sources['taxonomies']['choices'][ 'tax/' . $tax->name ] = $tax->labels->name . ' (' . $tax->name . ')';
- }
-
- foreach ( $custom_fields as $cf ) {
- if ( 0 !== strpos( $cf, '_oembed_' ) ) {
- $sources['custom_fields']['choices'][ 'cf/' . $cf ] = $cf;
- }
- }
-
- $this->data_sources = $sources;
- }
-
- $sources = apply_filters( 'facetwp_facet_sources', $sources, $context );
-
- uasort( $sources, [ $this, 'sort_by_weight' ] );
-
- return $sources;
- }
-
-
- /**
- * Sort facetwp_facet_sources by weight
- * @since 2.7.5
- */
- function sort_by_weight( $a, $b ) {
- $a['weight'] = $a['weight'] ?? 10;
- $b['weight'] = $b['weight'] ?? 10;
-
- if ( $a['weight'] == $b['weight'] ) {
- return 0;
- }
-
- return ( $a['weight'] < $b['weight'] ) ? -1 : 1;
- }
-
-
- /**
- * Get row counts for all facets
- * @since 3.3.4
- */
- function get_row_counts() {
- if ( isset( $this->row_counts ) ) {
- return $this->row_counts;
- }
-
- global $wpdb;
-
- $output = [];
- $results = $wpdb->get_results( "SELECT facet_name, COUNT(*) AS row_count FROM {$wpdb->prefix}facetwp_index GROUP BY facet_name" );
-
- foreach ( $results as $result ) {
- $output[ $result->facet_name ] = (int) $result->row_count;
- }
-
- $this->row_counts = $output;
-
- return $output;
- }
-
-
- /**
- * Grab the license key
- * @since 3.0.3
- */
- function get_license_key() {
- $license_key = defined( 'FACETWP_LICENSE_KEY' ) ? FACETWP_LICENSE_KEY : get_option( 'facetwp_license' );
- $license_key = apply_filters( 'facetwp_license_key', $license_key );
- return sanitize_key( trim( $license_key ) );
- }
-
-
- /**
- * Determine whether the license is active
- * @since 3.3.0
- */
- function is_license_active() {
- return ( 'success' == $this->get_license_meta( 'status' ) );
- }
-
-
- /**
- * Get a license meta value
- * Possible keys: status, message, expiration, payment_id, price_id
- * @since 3.5.3
- */
- function get_license_meta( $key = 'status' ) {
- $activation = get_option( 'facetwp_activation' );
-
- if ( ! empty( $activation ) ) {
- $data = json_decode( $activation, true );
-
- if ( isset( $data[ $key ] ) ) {
- return $data[ $key ];
- }
- }
-
- return false;
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/class-indexer.php b/wp/wp-content/plugins/facetwp/includes/class-indexer.php
deleted file mode 100644
index 851fcc77..00000000
--- a/wp/wp-content/plugins/facetwp/includes/class-indexer.php
+++ /dev/null
@@ -1,691 +0,0 @@
-set_table( 'auto' );
- $this->run_cron();
-
- if ( apply_filters( 'facetwp_indexer_is_enabled', true ) ) {
- $this->run_hooks();
- }
- }
-
-
- /**
- * Event listeners
- * @since 2.8.4
- */
- function run_hooks() {
- add_action( 'save_post', [ $this, 'save_post' ] );
- add_action( 'delete_post', [ $this, 'delete_post' ] );
- add_action( 'edited_term', [ $this, 'edit_term' ], 10, 3 );
- add_action( 'delete_term', [ $this, 'delete_term' ], 10, 3 );
- add_action( 'set_object_terms', [ $this, 'set_object_terms' ] );
- add_action( 'facetwp_indexer_cron', [ $this, 'get_progress' ] );
- add_filter( 'wp_insert_post_parent', [ $this, 'is_wp_insert_post' ] );
- }
-
-
- /**
- * Cron task
- * @since 2.8.5
- */
- function run_cron() {
- if ( ! wp_next_scheduled( 'facetwp_indexer_cron' ) ) {
- wp_schedule_single_event( time() + 300, 'facetwp_indexer_cron' );
- }
- }
-
-
- /**
- * Update the index when posts get saved
- * @since 0.1.0
- */
- function save_post( $post_id ) {
- if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
- return;
- }
-
- if ( false !== wp_is_post_revision( $post_id ) ) {
- return;
- }
-
- if ( 'auto-draft' == get_post_status( $post_id ) ) {
- return;
- }
-
- $this->index( $post_id );
- $this->is_saving = false;
- }
-
-
- /**
- * Update the index when posts get deleted
- * @since 0.6.0
- */
- function delete_post( $post_id ) {
- global $wpdb;
-
- $wpdb->query( "DELETE FROM {$this->table} WHERE post_id = $post_id" );
- }
-
-
- /**
- * Update the index when terms get saved
- * @since 0.6.0
- */
- function edit_term( $term_id, $tt_id, $taxonomy ) {
- global $wpdb;
-
- $term = get_term( $term_id, $taxonomy );
- $slug = FWP()->helper->safe_value( $term->slug );
- $matches = FWP()->helper->get_facets_by( 'source', "tax/$taxonomy" );
-
- if ( ! empty( $matches ) ) {
- $facet_names = wp_list_pluck( $matches, 'name' );
- $facet_names = implode( "','", esc_sql( $facet_names ) );
-
- $wpdb->query( $wpdb->prepare( "
- UPDATE {$this->table}
- SET facet_value = %s, facet_display_value = %s
- WHERE facet_name IN ('$facet_names') AND term_id = %d",
- $slug, $term->name, $term_id
- ) );
- }
- }
-
-
- /**
- * Update the index when terms get deleted
- * @since 0.6.0
- */
- function delete_term( $term_id, $tt_id, $taxonomy ) {
- global $wpdb;
-
- $matches = FWP()->helper->get_facets_by( 'source', "tax/$taxonomy" );
-
- if ( ! empty( $matches ) ) {
- $facet_names = wp_list_pluck( $matches, 'name' );
- $facet_names = implode( "','", esc_sql( $facet_names ) );
-
- $wpdb->query( "
- DELETE FROM {$this->table}
- WHERE facet_name IN ('$facet_names') AND term_id = $term_id"
- );
- }
- }
-
-
- /**
- * We're hijacking wp_insert_post_parent
- * Prevent our set_object_terms() hook from firing within wp_insert_post
- * @since 2.2.2
- */
- function is_wp_insert_post( $post_parent ) {
- $this->is_saving = true;
- return $post_parent;
- }
-
-
- /**
- * Support for manual taxonomy associations
- * @since 0.8.0
- */
- function set_object_terms( $object_id ) {
- if ( ! $this->is_saving ) {
- $this->index( $object_id );
- }
- }
-
-
- /**
- * Rebuild the facet index
- * @param mixed $post_id The post ID (set to FALSE to re-index everything)
- */
- function index( $post_id = false ) {
- global $wpdb;
-
- $this->index_all = ( false === $post_id );
-
- // Index everything
- if ( $this->index_all ) {
-
- // Store the pre-index settings (see FacetWP_Diff)
- update_option( 'facetwp_settings_last_index', get_option( 'facetwp_settings' ), 'no' );
-
- // PHP sessions are blocking, so close if active
- if ( PHP_SESSION_ACTIVE === session_status() ) {
- session_write_close();
- }
-
- // Bypass the PHP timeout
- ini_set( 'max_execution_time', 0 );
-
- // Prevent multiple indexing processes
- $touch = (int) $this->get_transient( 'touch' );
-
- if ( 0 < $touch ) {
- // Run only if the indexer is inactive or stalled
- if ( ( time() - $touch ) < 60 ) {
- exit;
- }
- }
- else {
- // Create temp table
- $this->manage_temp_table( 'create' );
- }
- }
- // Index a single post
- elseif ( is_int( $post_id ) ) {
-
- // Clear table values
- $wpdb->query( "DELETE FROM {$this->table} WHERE post_id = $post_id" );
- }
- // Exit
- else {
- return;
- }
-
- // Resume indexing?
- $offset = (int) ( $_POST['offset'] ?? 0 );
- $attempt = (int) ( $_POST['retries'] ?? 0 );
-
- if ( 0 < $offset ) {
- $post_ids = json_decode( get_option( 'facetwp_indexing' ), true );
- }
- else {
- $post_ids = $this->get_post_ids_to_index( $post_id );
-
- // Store post IDs
- if ( $this->index_all ) {
- update_option( 'facetwp_indexing', json_encode( $post_ids ) );
- }
- }
-
- // Count total posts
- $num_total = count( $post_ids );
-
- // Get all facet sources
- $facets = FWP()->helper->get_facets();
-
- // Populate an array of facet value modifiers
- $this->load_value_modifiers( $facets );
-
- foreach ( $post_ids as $counter => $post_id ) {
-
- // Advance until we reach the offset
- if ( $counter < $offset ) {
- continue;
- }
-
- // Update the progress bar
- if ( $this->index_all ) {
- if ( 0 == ( $counter % $this->chunk_size ) ) {
- $num_retries = (int) $this->get_transient( 'retries' );
-
- // Exit if newer retries exist
- if ( $attempt < $num_retries ) {
- exit;
- }
-
- // Exit if the indexer was cancelled
- wp_cache_delete( 'facetwp_indexing_cancelled', 'options' );
-
- if ( 'yes' === get_option( 'facetwp_indexing_cancelled', 'no' ) ) {
- update_option( 'facetwp_transients', '' );
- update_option( 'facetwp_indexing', '' );
- $this->manage_temp_table( 'delete' );
- exit;
- }
-
- $transients = [
- 'num_indexed' => $counter,
- 'num_total' => $num_total,
- 'retries' => $attempt,
- 'touch' => time(),
- ];
- update_option( 'facetwp_transients', json_encode( $transients ) );
- }
- }
-
- // If the indexer stalled, start from the last valid chunk
- if ( 0 < $offset && ( $counter - $offset < $this->chunk_size ) ) {
- $wpdb->query( "DELETE FROM {$this->table} WHERE post_id = $post_id" );
- }
-
- $this->index_post( $post_id, $facets );
- }
-
- // Indexing complete
- if ( $this->index_all ) {
- update_option( 'facetwp_last_indexed', time(), 'no' );
- update_option( 'facetwp_transients', '', 'no' );
- update_option( 'facetwp_indexing', '', 'no' );
-
- $this->manage_temp_table( 'replace' );
- $this->manage_temp_table( 'delete' );
- }
-
- do_action( 'facetwp_indexer_complete' );
- }
-
-
- /**
- * Get an array of post IDs to index
- * @since 3.6.8
- */
- function get_post_ids_to_index( $post_id = false ) {
- $args = [
- 'post_type' => 'any',
- 'post_status' => 'publish',
- 'posts_per_page' => -1,
- 'fields' => 'ids',
- 'orderby' => 'ID',
- 'cache_results' => false,
- 'no_found_rows' => true,
- ];
-
- if ( is_int( $post_id ) ) {
- $args['p'] = $post_id;
- $args['posts_per_page'] = 1;
- }
-
- $args = apply_filters( 'facetwp_indexer_query_args', $args );
-
- $query = new WP_Query( $args );
- return (array) $query->posts;
- }
-
-
- /**
- * Index an individual post
- * @since 3.6.8
- */
- function index_post( $post_id, $facets ) {
-
- // Force WPML to change the language
- do_action( 'facetwp_indexer_post', [ 'post_id' => $post_id ] );
-
- // Loop through all facets
- foreach ( $facets as $facet ) {
-
- // Do not index search facets
- if ( 'search' == $facet['type'] ) {
- continue;
- }
-
- $this->facet = $facet;
- $source = $facet['source'] ?? '';
-
- // Set default index_row() params
- $defaults = [
- 'post_id' => $post_id,
- 'facet_name' => $facet['name'],
- 'facet_source' => $source,
- 'facet_value' => '',
- 'facet_display_value' => '',
- 'term_id' => 0,
- 'parent_id' => 0,
- 'depth' => 0,
- 'variation_id' => 0,
- ];
-
- $defaults = apply_filters( 'facetwp_indexer_post_facet_defaults', $defaults, [
- 'facet' => $facet
- ] );
-
- // Set flag for custom handling
- $this->is_overridden = true;
-
- // Bypass default indexing
- $bypass = apply_filters( 'facetwp_indexer_post_facet', false, [
- 'defaults' => $defaults,
- 'facet' => $facet
- ] );
-
- if ( $bypass ) {
- continue;
- }
-
- $this->is_overridden = false;
-
- // Get rows to insert
- $rows = $this->get_row_data( $defaults );
-
- foreach ( $rows as $row ) {
- $this->index_row( $row );
- }
- }
- }
-
-
- /**
- * Get data for a table row
- * @since 2.1.1
- */
- function get_row_data( $defaults ) {
- $output = [];
-
- $facet = $this->facet;
- $post_id = $defaults['post_id'];
- $source = $defaults['facet_source'];
-
- if ( 'tax/' == substr( $source, 0, 4 ) ) {
- $used_terms = [];
- $taxonomy = substr( $source, 4 );
- $term_objects = wp_get_object_terms( $post_id, $taxonomy );
- if ( is_wp_error( $term_objects ) ) {
- return $output;
- }
-
- // Store the term depths
- $hierarchy = FWP()->helper->get_term_depths( $taxonomy );
-
- // Only index child terms
- $children = false;
- if ( ! empty( $facet['parent_term'] ) ) {
- $children = get_term_children( $facet['parent_term'], $taxonomy );
- }
-
- foreach ( $term_objects as $term ) {
-
- // If "parent_term" is set, only index children
- if ( false !== $children && ! in_array( $term->term_id, $children ) ) {
- continue;
- }
-
- // Prevent duplicate terms
- if ( isset( $used_terms[ $term->term_id ] ) ) {
- continue;
- }
- $used_terms[ $term->term_id ] = true;
-
- // Handle hierarchical taxonomies
- $term_info = $hierarchy[ $term->term_id ];
- $depth = $term_info['depth'];
-
- // Adjust depth if parent_term is set
- if ( ! empty( $facet['parent_term'] ) ) {
- if ( isset( $hierarchy[ $facet['parent_term'] ] ) ) {
- $anchor = (int) $hierarchy[ $facet['parent_term'] ]['depth'] + 1;
- $depth = ( $depth - $anchor );
- }
- }
-
- $params = $defaults;
- $params['facet_value'] = $term->slug;
- $params['facet_display_value'] = $term->name;
- $params['term_id'] = $term->term_id;
- $params['parent_id'] = $term_info['parent_id'];
- $params['depth'] = $depth;
- $output[] = $params;
-
- // Automatically index implicit parents
- if ( 'hierarchy' == $facet['type'] || FWP()->helper->facet_is( $facet, 'hierarchical', 'yes' ) ) {
- while ( $depth > 0 ) {
- $term_id = $term_info['parent_id'];
- $term_info = $hierarchy[ $term_id ];
- $depth = $depth - 1;
-
- if ( ! isset( $used_terms[ $term_id ] ) ) {
- $used_terms[ $term_id ] = true;
-
- $params = $defaults;
- $params['facet_value'] = $term_info['slug'];
- $params['facet_display_value'] = $term_info['name'];
- $params['term_id'] = $term_id;
- $params['parent_id'] = $term_info['parent_id'];
- $params['depth'] = $depth;
- $output[] = $params;
- }
- }
- }
- }
- }
- elseif ( 'cf/' == substr( $source, 0, 3 ) ) {
- $source_noprefix = substr( $source, 3 );
- $values = get_post_meta( $post_id, $source_noprefix, false );
- foreach ( $values as $value ) {
- $params = $defaults;
- $params['facet_value'] = $value;
- $params['facet_display_value'] = $value;
- $output[] = $params;
- }
- }
- elseif ( 'post' == substr( $source, 0, 4 ) ) {
- $post = get_post( $post_id );
- $value = $post->{$source};
- $display_value = $value;
- if ( 'post_author' == $source ) {
- $user = get_user_by( 'id', $value );
- $display_value = ( $user instanceof WP_User ) ? $user->display_name : $value;
- }
- elseif ( 'post_type' == $source ) {
- $post_type = get_post_type_object( $value );
- if ( isset( $post_type->labels->name ) ) {
- $display_value = $post_type->labels->name;
- }
- }
-
- $params = $defaults;
- $params['facet_value'] = $value;
- $params['facet_display_value'] = $display_value;
- $output[] = $params;
- }
-
- return apply_filters( 'facetwp_indexer_row_data', $output, [
- 'defaults' => $defaults,
- 'facet' => $this->facet
- ] );
- }
-
-
- /**
- * Index a facet value
- * @since 0.6.0
- */
- function index_row( $params ) {
-
- // Allow for custom indexing
- $params = apply_filters( 'facetwp_index_row', $params, $this );
-
- // Allow hooks to bypass the row insertion
- if ( is_array( $params ) ) {
- $this->insert( $params );
- }
- }
-
-
- /**
- * Save a facet value to DB
- * This can be trigged by "facetwp_index_row" to handle multiple values
- * @since 1.2.5
- */
- function insert( $params ) {
- global $wpdb;
-
- $value = $params['facet_value'];
- $display_value = $params['facet_display_value'];
-
- // Only accept scalar values
- if ( '' === $value || ! is_scalar( $value ) ) {
- return;
- }
-
- // Apply UI-based modifiers
- if ( isset( $this->modifiers[ $params['facet_name'] ] ) ) {
- $mod = $this->modifiers[ $params['facet_name' ] ];
- $is_match = in_array( $display_value, $mod['values'] );
-
- if ( ( 'exclude' == $mod['type'] && $is_match ) || ( 'include' == $mod['type'] && ! $is_match ) ) {
- return;
- }
- }
-
- $wpdb->query( $wpdb->prepare( "INSERT INTO {$this->table}
- (post_id, facet_name, facet_value, facet_display_value, term_id, parent_id, depth, variation_id) VALUES (%d, %s, %s, %s, %d, %d, %d, %d)",
- $params['post_id'],
- $params['facet_name'],
- FWP()->helper->safe_value( $value ),
- $display_value,
- $params['term_id'],
- $params['parent_id'],
- $params['depth'],
- $params['variation_id']
- ) );
- }
-
-
- /**
- * Get the indexing completion percentage
- * @return mixed The decimal percentage, or -1
- * @since 0.1.0
- */
- function get_progress() {
- $return = -1;
- $num_indexed = (int) $this->get_transient( 'num_indexed' );
- $num_total = (int) $this->get_transient( 'num_total' );
- $retries = (int) $this->get_transient( 'retries' );
- $touch = (int) $this->get_transient( 'touch' );
-
- if ( 0 < $num_total ) {
-
- // Resume a stalled indexer
- if ( 60 < ( time() - $touch ) ) {
- $post_data = [
- 'blocking' => false,
- 'timeout' => 0.02,
- 'body' => [
- 'action' => 'facetwp_resume_index',
- 'offset' => $num_indexed,
- 'retries' => $retries + 1,
- 'touch' => $touch
- ]
- ];
- wp_remote_post( admin_url( 'admin-ajax.php' ), $post_data );
- }
-
- // Calculate the percent completion
- if ( $num_indexed != $num_total ) {
- $return = round( 100 * ( $num_indexed / $num_total ), 2 );
- }
- }
-
- return $return;
- }
-
-
- /**
- * Get indexer transient variables
- * @since 1.7.8
- */
- function get_transient( $name = false ) {
- $transients = get_option( 'facetwp_transients' );
-
- if ( ! empty( $transients ) ) {
- $transients = json_decode( $transients, true );
- if ( $name ) {
- return $transients[ $name ] ?? false;
- }
-
- return $transients;
- }
-
- return false;
- }
-
-
- /**
- * Set either the index or temp table
- * @param string $table 'auto', 'index', or 'temp'
- * @since 4.1.4
- */
- function set_table( $table = 'auto' ) {
- global $wpdb;
-
- if ( 'auto' == $table ) {
- $table = ( '' == get_option( 'facetwp_indexing', '' ) ) ? 'index' : 'temp';
- }
-
- $this->table = $wpdb->prefix . 'facetwp_' . $table;
- }
-
-
- /**
- * Index table management
- * @since 3.5
- */
- function manage_temp_table( $action = 'create' ) {
- global $wpdb;
-
- $table = $wpdb->prefix . 'facetwp_index';
- $temp_table = $wpdb->prefix . 'facetwp_temp';
-
- if ( 'create' == $action ) {
- $wpdb->query( "CREATE TABLE $temp_table LIKE $table" );
- $this->set_table( 'temp' );
- }
- elseif ( 'replace' == $action ) {
- $wpdb->query( "TRUNCATE TABLE $table" );
- $wpdb->query( "INSERT INTO $table SELECT * FROM $temp_table" );
- }
- elseif ( 'delete' == $action ) {
- $wpdb->query( "DROP TABLE IF EXISTS $temp_table" );
- $this->set_table( 'index' );
- }
- }
-
-
- /**
- * Populate an array of facet value modifiers (defined in the admin UI)
- * @since 3.5.6
- */
- function load_value_modifiers( $facets ) {
- $output = [];
-
- foreach ( $facets as $facet ) {
- $name = $facet['name'];
- $type = empty( $facet['modifier_type'] ) ? 'off' : $facet['modifier_type'];
-
- if ( 'include' == $type || 'exclude' == $type ) {
- $temp = preg_split( '/\r\n|\r|\n/', trim( $facet['modifier_values'] ) );
- $values = [];
-
- // Compare using both original and encoded values
- foreach ( $temp as $val ) {
- $val = trim( $val );
- $val_encoded = htmlentities( $val );
- $val_decoded = html_entity_decode( $val );
- $values[ $val ] = true;
- $values[ $val_encoded ] = true;
- $values[ $val_decoded ] = true;
- }
-
- $output[ $name ] = [ 'type' => $type, 'values' => array_keys( $values ) ];
- }
- }
-
- $this->modifiers = $output;
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/class-init.php b/wp/wp-content/plugins/facetwp/includes/class-init.php
deleted file mode 100644
index 990f8e95..00000000
--- a/wp/wp-content/plugins/facetwp/includes/class-init.php
+++ /dev/null
@@ -1,157 +0,0 @@
-load_textdomain();
-
- // is_plugin_active
- include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
-
- $includes = [
- 'api/fetch',
- 'api/refresh',
- 'class-helper',
- 'class-ajax',
- 'class-request',
- 'class-renderer',
- 'class-diff',
- 'class-indexer',
- 'class-display',
- 'class-builder',
- 'class-overrides',
- 'class-settings',
- 'class-upgrade',
- 'functions'
- ];
-
- foreach ( $includes as $inc ) {
- include ( FACETWP_DIR . "/includes/$inc.php" );
- }
-
- new FacetWP_Upgrade();
- new FacetWP_Overrides();
-
- FWP()->api = new FacetWP_API_Fetch();
- FWP()->helper = new FacetWP_Helper();
- FWP()->facet = new FacetWP_Renderer();
- FWP()->settings = new FacetWP_Settings();
- FWP()->diff = new FacetWP_Diff();
- FWP()->indexer = new FacetWP_Indexer();
- FWP()->display = new FacetWP_Display();
- FWP()->builder = new FacetWP_Builder();
- FWP()->request = new FacetWP_Request();
- FWP()->ajax = new FacetWP_Ajax();
-
- // integrations
- include( FACETWP_DIR . '/includes/integrations/searchwp/searchwp.php' );
- include( FACETWP_DIR . '/includes/integrations/woocommerce/woocommerce.php' );
- include( FACETWP_DIR . '/includes/integrations/edd/edd.php' );
- include( FACETWP_DIR . '/includes/integrations/acf/acf.php' );
- include( FACETWP_DIR . '/includes/integrations/wp-cli/wp-cli.php' );
- include( FACETWP_DIR . '/includes/integrations/wp-rocket/wp-rocket.php' );
-
- // update checks
- include( FACETWP_DIR . '/includes/class-updater.php' );
-
- // hooks
- add_action( 'admin_menu', [ $this, 'admin_menu' ] );
- add_action( 'wp_enqueue_scripts', [ $this, 'front_scripts' ] );
- add_filter( 'redirect_canonical', [ $this, 'redirect_canonical' ], 10, 2 );
- add_filter( 'plugin_action_links_facetwp/index.php', [ $this, 'plugin_action_links' ] );
-
- do_action( 'facetwp_init' );
- }
-
-
- /**
- * i18n support
- */
- function load_textdomain() {
-
- // admin-facing
- load_plugin_textdomain( 'fwp' );
-
- // front-facing
- load_plugin_textdomain( 'fwp-front', false, basename( FACETWP_DIR ) . '/languages' );
- }
-
-
- /**
- * Register the FacetWP settings page
- */
- function admin_menu() {
- add_options_page( 'FacetWP', 'FacetWP', 'manage_options', 'facetwp', [ $this, 'settings_page' ] );
- }
-
-
- /**
- * Enqueue jQuery
- */
- function front_scripts() {
- if ( 'yes' == FWP()->helper->get_setting( 'load_jquery', 'yes' ) ) {
- wp_enqueue_script( 'jquery' );
- }
- }
-
-
- /**
- * Route to the correct edit screen
- */
- function settings_page() {
- include( FACETWP_DIR . '/templates/page-settings.php' );
- }
-
-
- /**
- * Prevent WP from redirecting FWP pager to /page/X
- */
- function redirect_canonical( $redirect_url, $requested_url ) {
- if ( false !== strpos( $redirect_url, FWP()->helper->get_setting( 'prefix' ) . 'paged' ) ) {
- return false;
- }
- return $redirect_url;
- }
-
-
- /**
- * Add "Settings" link to plugin listing page
- */
- function plugin_action_links( $links ) {
- $settings_link = admin_url( 'options-general.php?page=facetwp' );
- $settings_link = '' . __( 'Settings', 'fwp' ) . ' ';
- array_unshift( $links, $settings_link );
- return $links;
- }
-
-
- /**
- * WooCommerce 3.6+ doesn't load its frontend includes for REST API requests
- * We need to force-load these includes for FacetWP refreshes
- * See includes() within class-woocommerce.php
- *
- * This code isn't within /integrations/woocommerce/ because it runs *before* init
- *
- * @since 3.3.10
- */
- function is_rest_api_request( $request ) {
- if ( false !== strpos( $_SERVER['REQUEST_URI'], 'facetwp' ) ) {
- return false;
- }
- return $request;
- }
-}
-
-$this->init = new FacetWP_Init();
diff --git a/wp/wp-content/plugins/facetwp/includes/class-overrides.php b/wp/wp-content/plugins/facetwp/includes/class-overrides.php
deleted file mode 100644
index b04edc9a..00000000
--- a/wp/wp-content/plugins/facetwp/includes/class-overrides.php
+++ /dev/null
@@ -1,103 +0,0 @@
-is_overridden ) {
- return $params;
- }
-
- $facet = FWP()->helper->get_facet_by_name( $params['facet_name'] );
-
- // Store raw numbers to format later
- if ( in_array( $facet['type'], [ 'number_range', 'slider' ] ) ) {
- $this->raw = [
- 'value' => $params['facet_value'],
- 'label' => $params['facet_display_value']
- ];
- }
-
- // Support "Other data source" values
- if ( ! empty( $facet['source_other'] ) ) {
- $other_params = $params;
- $other_params['facet_source'] = $facet['source_other'];
- $rows = $class->get_row_data( $other_params );
- $params['facet_display_value'] = $rows[0]['facet_display_value'];
- }
-
- return $params;
- }
-
-
- /**
- * Make sure that numbers are properly formatted
- */
- function format_numbers( $params, $class ) {
-
- if ( empty( $this->raw ) ) {
- return $params;
- }
-
- $value = $params['facet_value'];
- $label = $params['facet_display_value'];
-
- // Only format if un-altered
- if ( $this->raw['value'] === $value && $this->raw['label'] === $label ) {
- $params['facet_value'] = FWP()->helper->format_number( $this->raw['value'] );
- $params['facet_display_value'] = FWP()->helper->format_number( $this->raw['label'] );
- }
-
- $this->raw = null;
-
- return $params;
- }
-
-
- /**
- * Ignore certain post types
- */
- function ignore_post_types( $is_main_query, $query ) {
- $blacklist = [
- 'acf-field',
- 'acf-field-group',
- 'advanced_ads',
- 'carts',
- 'cookielawinfo',
- 'edd_wish_list',
- 'ms_relationship',
- 'nav_menu_item',
- 'wc_user_membership',
- 'wp_block',
- 'wp_global_styles',
- 'wp_navigation',
- 'wp_template',
- 'wp_template_part'
- ];
- $post_type = $query->get( 'post_type' );
-
- if ( is_string( $post_type ) && in_array( $post_type, $blacklist ) ) {
- $is_main_query = false;
- }
-
- // Ignore the "WP GDPR Compliance" plugin
- if ( '[wpgdprc_access_request_form]' == $query->get( 's' ) ) {
- $is_main_query = false;
- }
-
- return $is_main_query;
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/class-renderer.php b/wp/wp-content/plugins/facetwp/includes/class-renderer.php
deleted file mode 100644
index 6b4d5879..00000000
--- a/wp/wp-content/plugins/facetwp/includes/class-renderer.php
+++ /dev/null
@@ -1,662 +0,0 @@
-facet_types = FWP()->helper->facet_types;
- }
-
-
- /**
- * Generate the facet output
- * @param array $params An array of arrays (see the FacetWP->refresh() method)
- * @return array
- */
- function render( $params ) {
-
- $output = [
- 'facets' => [],
- 'template' => '',
- 'settings' => [],
- ];
-
- // Hook params
- $params = apply_filters( 'facetwp_render_params', $params );
-
- // First ajax refresh?
- $first_load = (bool) $params['first_load'];
- $is_bfcache = (bool) $params['is_bfcache'];
-
- // Initial pageload?
- $this->is_preload = isset( $params['is_preload'] );
-
- // Set the AJAX and HTTP params
- $this->ajax_params = $params;
- $this->http_params = $params['http_params'];
-
- // Validate facets
- $this->facets = [];
- foreach ( $params['facets'] as $f ) {
- $name = $f['facet_name'];
- $facet = FWP()->helper->get_facet_by_name( $name );
- if ( $facet ) {
-
- // Default to "OR" mode
- $facet['operator'] = $facet['operator'] ?? 'or';
-
- // Support the "facetwp_preload_url_vars" hook
- if ( $first_load && empty( $f['selected_values'] ) && ! empty( $this->http_params['url_vars'][ $name ] ) ) {
- $f['selected_values'] = $this->http_params['url_vars'][ $name ];
- }
-
- // Support commas within search / autocomplete facets
- if ( 'search' == $facet['type'] || 'autocomplete' == $facet['type'] ) {
- $f['selected_values'] = implode( ',', (array) $f['selected_values'] );
- }
-
- $facet['selected_values'] = FWP()->helper->sanitize( $f['selected_values'] );
-
- $this->facets[ $name ] = $facet;
- }
- }
-
- // Get the template from $helper->settings
- if ( 'wp' == $params['template'] ) {
- $this->template = [ 'name' => 'wp' ];
- $query_args = FWP()->request->query_vars ?? [];
- }
- else {
- $this->template = FWP()->helper->get_template_by_name( $params['template'] );
- $query_args = $this->get_query_args();
- }
-
- // Detect search string
- if ( ! empty( $query_args['s'] ) ) {
- $this->is_search = true;
- }
-
- // Run the query once (prevent duplicate queries when preloading)
- if ( empty( $this->query_args ) ) {
-
- // Support "post__in"
- if ( empty( $query_args['post__in'] ) ) {
- $query_args['post__in'] = [];
- }
-
- // Get the template "query" field
- $query_args = apply_filters( 'facetwp_query_args', $query_args, $this );
-
- // Pagination
- $query_args['paged'] = empty( $params['paged'] ) ? 1 : (int) $params['paged'];
-
- // Preserve SQL_CALC_FOUND_ROWS
- unset( $query_args['no_found_rows'] );
-
- // Narrow posts based on facet selections
- $post_ids = $this->get_filtered_post_ids( $query_args );
-
- // Update the SQL query
- if ( ! empty( $post_ids ) ) {
- if ( FWP()->is_filtered ) {
- $query_args['post__in'] = $post_ids;
- }
-
- $this->where_clause = ' AND post_id IN (' . implode( ',', $post_ids ) . ')';
- }
-
- // Set the default limit
- if ( empty( $query_args['posts_per_page'] ) ) {
- $query_args['posts_per_page'] = (int) get_option( 'posts_per_page' );
- }
-
- // Adhere to the "per page" box
- $per_page = isset( $params['extras']['per_page'] ) ? $params['extras']['per_page'] : '';
- if ( ! empty( $per_page ) && 'default' != $per_page ) {
- $query_args['posts_per_page'] = (int) $per_page;
- }
-
- $this->query_args = apply_filters( 'facetwp_filtered_query_args', $query_args, $this );
-
- // Run the WP_Query
- $this->query = new WP_Query( $this->query_args );
- }
-
- // Debug
- if ( 'on' == FWP()->helper->get_setting( 'debug_mode', 'off' ) ) {
- $output['settings']['debug'] = $this->get_debug_info();
- }
-
- // Generate the template HTML
- // For performance gains, skip the template on pageload
- if ( 'wp' != $this->template['name'] ) {
- if ( ! $first_load || $is_bfcache || apply_filters( 'facetwp_template_force_load', false ) ) {
- $output['template'] = $this->get_template_html();
- }
- }
-
- // Don't render these facets
- $frozen_facets = $params['frozen_facets'];
-
- // Calculate pager args
- $pager_args = [
- 'page' => (int) $this->query_args['paged'],
- 'per_page' => (int) $this->query_args['posts_per_page'],
- 'total_rows' => (int) $this->query->found_posts,
- 'total_pages' => 1,
- ];
-
- if ( 0 < $pager_args['per_page'] ) {
- $pager_args['total_pages'] = ceil( $pager_args['total_rows'] / $pager_args['per_page'] );
- }
-
- $pager_args = apply_filters( 'facetwp_pager_args', $pager_args, $this );
-
- $this->pager_args = $pager_args;
-
- // Stick the pager args into the JSON response
- $output['settings']['pager'] = $pager_args;
-
- // Display the pagination HTML
- if ( isset( $params['extras']['pager'] ) ) {
- $output['pager'] = $this->paginate( $pager_args );
- }
-
- // Display the "per page" HTML
- if ( isset( $params['extras']['per_page'] ) ) {
- $output['per_page'] = $this->get_per_page_box();
- }
-
- // Display the counts HTML
- if ( isset( $params['extras']['counts'] ) ) {
- $output['counts'] = $this->get_result_count( $pager_args );
- }
-
- // Not paging
- if ( 0 == $params['soft_refresh'] ) {
- $output['settings']['num_choices'] = [];
- }
-
- // Get facet data
- foreach ( $this->facets as $facet_name => $the_facet ) {
- $facet_type = $the_facet['type'];
- $ui_type = empty( $the_facet['ui_type'] ) ? $facet_type : $the_facet['ui_type'];
-
- // Invalid facet type
- if ( ! isset( $this->facet_types[ $facet_type ] ) ) {
- continue;
- }
-
- // Skip facets when paging
- if ( 0 < $params['soft_refresh'] && 'pager' != $facet_type ) {
- continue;
- }
-
- // Get facet labels
- if ( 0 == $params['soft_refresh'] ) {
- $output['settings']['labels'][ $facet_name ] = facetwp_i18n( $the_facet['label'] );
- }
-
- // Load all facets on back / forward button press (first_load = true)
- if ( ! $first_load ) {
-
- // Skip frozen facets
- if ( isset( $frozen_facets[ $facet_name ] ) ) {
- continue;
- }
- }
-
- $args = [
- 'facet' => $the_facet,
- 'where_clause' => $this->where_clause,
- 'selected_values' => $the_facet['selected_values'],
- ];
-
- // Load facet values if needed
- if ( method_exists( $this->facet_types[ $facet_type ], 'load_values' ) ) {
-
- // Grab preloaded values if available
- if ( isset( $this->preloaded_values[ $facet_name ] ) ) {
- $args['values'] = $this->preloaded_values[ $facet_name ];
- }
- else {
- $args['values'] = $this->facet_types[ $facet_type ]->load_values( $args );
-
- if ( $this->is_preload ) {
- $this->preloaded_values[ $facet_name ] = $args['values'];
- }
- }
- }
-
- // Filter the render args
- $args = apply_filters( 'facetwp_facet_render_args', $args );
-
- // Return the number of available choices
- if ( isset( $args['values'] ) ) {
- $num_choices = 0;
- $is_ghost = FWP()->helper->facet_is( $the_facet, 'ghosts', 'yes' );
-
- foreach ( $args['values'] as $choice ) {
- if ( isset( $choice['counter'] ) && ( 0 < $choice['counter'] || $is_ghost ) ) {
- $num_choices++;
- }
- }
-
- $output['settings']['num_choices'][ $facet_name ] = $num_choices;
- }
-
- // Generate the facet HTML
- $html = $this->facet_types[ $ui_type ]->render( $args );
- $output['facets'][ $facet_name ] = apply_filters( 'facetwp_facet_html', $html, $args );
-
- // Return any JS settings
- if ( method_exists( $this->facet_types[ $ui_type ], 'settings_js' ) ) {
- $output['settings'][ $facet_name ] = $this->facet_types[ $ui_type ]->settings_js( $args );
- }
-
- // Grab num_choices for slider facets
- if ( 'slider' == $the_facet['type'] ) {
- $min = $output['settings'][ $facet_name ]['range']['min'];
- $max = $output['settings'][ $facet_name ]['range']['max'];
- $output['settings']['num_choices'][ $facet_name ] = ( $min == $max ) ? 0 : 1;
- }
- }
-
- return apply_filters( 'facetwp_render_output', $output, $params );
- }
-
-
- /**
- * Get WP_Query arguments by executing the template "query" field
- * @return null
- */
- function get_query_args() {
-
- $defaults = [];
-
- // Allow templates to piggyback archives
- if ( apply_filters( 'facetwp_template_use_archive', false ) ) {
- $main_query = $GLOBALS['wp_the_query'];
-
- // Initial pageload
- if ( $main_query->is_archive || $main_query->is_search ) {
- if ( $main_query->is_category ) {
- $defaults['cat'] = $main_query->get( 'cat' );
- }
- elseif ( $main_query->is_tag ) {
- $defaults['tag_id'] = $main_query->get( 'tag_id' );
- }
- elseif ( $main_query->is_tax ) {
- $defaults['taxonomy'] = $main_query->get( 'taxonomy' );
- $defaults['term'] = $main_query->get( 'term' );
- }
- elseif ( $main_query->is_search ) {
- $defaults['s'] = $main_query->get( 's' );
- }
-
- $this->archive_args = $defaults;
- }
- // Subsequent ajax requests
- elseif ( ! empty( $this->http_params['archive_args'] ) ) {
- foreach ( $this->http_params['archive_args'] as $key => $val ) {
- if ( in_array( $key, [ 'cat', 'tag_id', 'taxonomy', 'term', 's' ] ) ) {
- $defaults[ $key ] = $val;
- }
- }
- }
- }
-
- // Use the query builder
- if ( isset( $this->template['modes'] ) && 'visual' == $this->template['modes']['query'] ) {
- $query_args = FWP()->builder->parse_query_obj( $this->template['query_obj'] );
- }
- else {
-
- // remove UTF-8 non-breaking spaces
- $query_args = preg_replace( "/\xC2\xA0/", ' ', $this->template['query'] );
- $query_args = (array) eval( '?>' . $query_args );
- }
-
- // Merge the two arrays
- return array_merge( $defaults, $query_args );
- }
-
-
- /**
- * Get ALL post IDs for the matching query
- * @return array An array of post IDs
- */
- function get_filtered_post_ids( $query_args = [] ) {
-
- if ( empty( $query_args ) ) {
- $query_args = $this->query_args;
- }
-
- // Only get relevant post IDs
- $args = array_merge( $query_args, [
- 'paged' => 1,
- 'posts_per_page' => -1,
- 'update_post_meta_cache' => false,
- 'update_post_term_cache' => false,
- 'cache_results' => false,
- 'no_found_rows' => true,
- 'nopaging' => true, // prevent "offset" issues
- 'facetwp' => false,
- 'fields' => 'ids',
- ] );
-
- $query = new WP_Query( $args );
-
- // Allow hooks to modify the default post IDs
- $post_ids = apply_filters( 'facetwp_pre_filtered_post_ids', $query->posts, $this );
-
- // Store the unfiltered post IDs
- FWP()->unfiltered_post_ids = $post_ids;
-
- foreach ( $this->facets as $facet_name => $the_facet ) {
- $facet_type = $the_facet['type'];
-
- // Stop looping
- if ( empty( $post_ids ) ) {
- break;
- }
-
- $matches = [];
- $selected_values = $the_facet['selected_values'];
-
- if ( empty( $selected_values ) ) {
- continue;
- }
-
- // Handle each facet
- if ( isset( $this->facet_types[ $facet_type ] ) ) {
-
- $hook_params = [
- 'facet' => $the_facet,
- 'selected_values' => $selected_values,
- ];
-
- // Hook to support custom filter_posts() handler
- $matches = apply_filters( 'facetwp_facet_filter_posts', false, $hook_params );
-
- if ( false === $matches ) {
- $matches = $this->facet_types[ $facet_type ]->filter_posts( $hook_params );
- }
- }
-
- // Skip this facet
- if ( 'continue' == $matches ) {
- continue;
- }
-
- // Force array
- $matches = (array) $matches;
-
- // Store post IDs per facet (needed for "OR" mode)
- FWP()->or_values[ $facet_name ] = $matches;
-
- if ( 'search' == $facet_type ) {
- $this->is_search = true;
- }
-
- // For search facets, loop through $matches to set order
- // For other facets, loop through $post_ids to preserve the existing order
- $needles = ( 'search' == $facet_type ) ? $matches : $post_ids;
- $haystack = ( 'search' == $facet_type ) ? $post_ids : $matches;
- $haystack = array_flip( $haystack );
- $intersected_ids = [];
-
- foreach ( $needles as $post_id ) {
- if ( isset( $haystack[ $post_id ] ) ) {
- $intersected_ids[] = $post_id;
- }
- }
-
- $post_ids = $intersected_ids;
- }
-
- $post_ids = apply_filters( 'facetwp_filtered_post_ids', array_values( $post_ids ), $this );
-
- // Store the filtered post IDs
- FWP()->filtered_post_ids = $post_ids;
-
- // Set a flag for whether filtering is applied
- FWP()->is_filtered = ( FWP()->filtered_post_ids !== FWP()->unfiltered_post_ids );
-
- // Return a zero array if no matches
- return empty( $post_ids ) ? [ 0 ] : $post_ids;
- }
-
-
- /**
- * Run the template display code
- * @return string (HTML)
- */
- function get_template_html() {
- global $post, $wp_query;
-
- $output = apply_filters( 'facetwp_template_html', false, $this );
-
- if ( false === $output ) {
- ob_start();
-
- // Preserve globals
- $temp_post = is_object( $post ) ? clone $post : $post;
- $temp_wp_query = is_object( $wp_query ) ? clone $wp_query : $wp_query;
-
- $query = $this->query;
- $wp_query = $query; // Make $query->blah() optional
-
- if ( isset( $this->template['modes'] ) && 'visual' == $this->template['modes']['display'] ) {
- echo FWP()->builder->render_layout( $this->template['layout'] );
- }
- else {
-
- // Remove UTF-8 non-breaking spaces
- $display_code = $this->template['template'];
- $display_code = preg_replace( "/\xC2\xA0/", ' ', $display_code );
- eval( '?>' . $display_code );
- }
-
- // Reset globals
- $post = $temp_post;
- $wp_query = $temp_wp_query;
-
- // Store buffered output
- $output = ob_get_clean();
- }
-
- $output = preg_replace( "/\xC2\xA0/", ' ', $output );
- return $output;
- }
-
-
- /**
- * Result count (1-10 of 234)
- * @param array $params An array with "page", "per_page", and "total_rows"
- * @return string
- */
- function get_result_count( $params = [] ) {
- $text_of = __( 'of', 'fwp-front' );
-
- $page = (int) $params['page'];
- $per_page = (int) $params['per_page'];
- $total_rows = (int) $params['total_rows'];
-
- if ( $per_page < $total_rows ) {
- $lower = ( 1 + ( ( $page - 1 ) * $per_page ) );
- $upper = ( $page * $per_page );
- $upper = ( $total_rows < $upper ) ? $total_rows : $upper;
- $output = "$lower-$upper $text_of $total_rows";
- }
- else {
- $lower = ( 0 < $total_rows ) ? 1 : 0;
- $upper = $total_rows;
- $output = $total_rows;
- }
-
- return apply_filters( 'facetwp_result_count', $output, [
- 'lower' => $lower,
- 'upper' => $upper,
- 'total' => $total_rows,
- ] );
- }
-
-
- /**
- * Pagination
- * @param array $params An array with "page", "per_page", and "total_rows"
- * @return string
- */
- function paginate( $params = [] ) {
- $pager_class = FWP()->helper->facet_types['pager'];
- $pager_class->pager_args = $params;
-
- $output = $pager_class->render_numbers([
- 'inner_size' => 2,
- 'dots_label' => '…',
- 'prev_label' => '<<',
- 'next_label' => '>>',
- ]);
-
- return apply_filters( 'facetwp_pager_html', $output, $params );
- }
-
-
- /**
- * "Per Page" dropdown box
- * @return string
- */
- function get_per_page_box() {
- $pager_class = FWP()->helper->facet_types['pager'];
- $pager_class->pager_args = $this->pager_args;
-
- $options = apply_filters( 'facetwp_per_page_options', [ 10, 25, 50, 100 ] );
-
- $output = $pager_class->render_per_page([
- 'default_label' => __( 'Per page', 'fwp-front' ),
- 'per_page_options' => implode( ',', $options )
- ]);
-
- return apply_filters( 'facetwp_per_page_html', $output, [
- 'options' => $options
- ] );
- }
-
-
- /**
- * Get debug info for the browser console
- * @since 3.5.7
- */
- function get_debug_info() {
- $last_indexed = get_option( 'facetwp_last_indexed' );
- $last_indexed = $last_indexed ? human_time_diff( $last_indexed ) : 'never';
-
- $debug = [
- 'query_args' => $this->query_args,
- 'sql' => $this->query->request,
- 'facets' => $this->facets,
- 'template' => $this->template,
- 'settings' => FWP()->helper->settings['settings'],
- 'last_indexed' => $last_indexed,
- 'row_counts' => FWP()->helper->get_row_counts(),
- 'hooks_used' => $this->get_hooks_used()
- ];
-
- // Reduce debug payload
- if ( ! empty( $this->query_args['post__in'] ) ) {
- $debug['query_args']['post__in_count'] = count( $this->query_args['post__in'] );
- $debug['query_args']['post__in'] = array_slice( $this->query_args['post__in'], 0, 10 );
-
- $debug['sql'] = preg_replace_callback( '/posts.ID IN \((.*?)\)/s', function( $matches ) {
- $count = substr_count( $matches[1], ',' ) + 1;
- return ( $count <= 10 ) ? $matches[0] : "posts.ID IN (<$count IDs>)";
- }, $debug['sql'] );
- }
-
- return $debug;
- }
-
-
- /**
- * Display the location of relevant hooks (for Debug Mode)
- * @since 3.5.7
- */
- function get_hooks_used() {
- $relevant_hooks = [];
-
- foreach ( $GLOBALS['wp_filter'] as $tag => $hook_data ) {
- if ( 0 === strpos( $tag, 'facetwp' ) || 'pre_get_posts' == $tag ) {
- foreach ( $hook_data->callbacks as $callbacks ) {
- foreach ( $callbacks as $cb ) {
- if ( is_string( $cb['function'] ) && false !== strpos( $cb['function'], '::' ) ) {
- $cb['function'] = explode( '::', $cb['function'] );
- }
-
- if ( is_array( $cb['function'] ) ) {
- $class = is_object( $cb['function'][0] ) ? get_class( $cb['function'][0] ) : $cb['function'][0];
- $ref = new ReflectionMethod( $class, $cb['function'][1] );
- }
- elseif ( is_object( $cb['function'] ) ) {
- if ( is_a( $cb['function'], 'Closure' ) ) {
- $ref = new ReflectionFunction( $cb['function'] );
- }
- else {
- $class = get_class( $cb['function'] );
- $ref = new ReflectionMethod( $class, '__invoke' );
- }
- }
- else {
- $ref = new ReflectionFunction( $cb['function'] );
- }
-
- $filename = str_replace( ABSPATH, '', $ref->getFileName() );
-
- // ignore built-in hooks
- if ( false === strpos( $filename, 'plugins/facetwp' ) ) {
- if ( false !== strpos( $filename, 'wp-content' ) ) {
- $relevant_hooks[ $tag ][] = $filename . ':' . $ref->getStartLine();
- }
- }
- }
- }
- }
- }
-
- return $relevant_hooks;
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/class-request.php b/wp/wp-content/plugins/facetwp/includes/class-request.php
deleted file mode 100644
index dfd78147..00000000
--- a/wp/wp-content/plugins/facetwp/includes/class-request.php
+++ /dev/null
@@ -1,379 +0,0 @@
-process_json();
- $this->intercept_request();
- }
-
-
- /**
- * application/json requires processing the raw PHP input stream
- */
- function process_json() {
- $json = file_get_contents( 'php://input' );
- if ( 0 === strpos( $json, '{' ) ) {
- $post_data = json_decode( $json, true );
- $action = $post_data['action'] ?? '';
-
- if ( is_string( $action ) && 0 === strpos( $action, 'facetwp' ) ) {
- $_POST = $post_data;
- }
- }
- }
-
-
- /**
- * If AJAX and the template is "wp", return the buffered HTML
- * Otherwise, store the GET variables for later use
- */
- function intercept_request() {
- $action = isset( $_POST['action'] ) ? sanitize_key( $_POST['action'] ) : '';
-
- $valid_actions = [
- 'facetwp_refresh',
- 'facetwp_autocomplete_load'
- ];
-
- $this->is_refresh = ( 'facetwp_refresh' == $action );
- $this->is_preload = ! in_array( $action, $valid_actions );
- $prefix = FWP()->helper->get_setting( 'prefix' );
- $is_css_tpl = isset( $_POST['data']['template'] ) && 'wp' == $_POST['data']['template'];
-
- // Disable the admin bar to prevent JSON issues
- if ( $this->is_refresh ) {
- add_filter( 'show_admin_bar', '__return_false' );
- }
-
- // Pageload
- if ( $this->is_preload ) {
- $features = [ 'paged', 'per_page', 'sort' ];
- $valid_names = wp_list_pluck( FWP()->helper->get_facets(), 'name' );
- $valid_names = array_merge( $valid_names, $features );
-
- // Store GET variables
- foreach ( $valid_names as $name ) {
- if ( isset( $_GET[ $prefix . $name ] ) && '' !== $_GET[ $prefix . $name ] ) {
- $new_val = stripslashes_deep( $_GET[ $prefix . $name ] );
- $new_val = in_array( $name, $features ) ? $new_val : explode( ',', $new_val );
- $this->url_vars[ $name ] = $new_val;
- }
- }
-
- $this->url_vars = apply_filters( 'facetwp_preload_url_vars', $this->url_vars );
- }
- // Populate $_GET
- else {
- $data = stripslashes_deep( $_POST['data'] );
-
- if ( ! empty( $data['http_params']['get'] ) ) {
- foreach ( $data['http_params']['get'] as $key => $val ) {
- if ( ! isset( $_GET[ $key ] ) ) {
- $_GET[ $key ] = $val;
- }
- }
- }
- }
-
- if ( $this->is_preload || $is_css_tpl ) {
- add_filter( 'posts_pre_query', [ $this, 'maybe_abort_query' ], 10, 2 );
- add_action( 'pre_get_posts', [ $this, 'sacrificial_lamb' ], 998 );
- add_action( 'pre_get_posts', [ $this, 'update_query_vars' ], 999 );
- }
-
- if ( ! $this->is_preload && $is_css_tpl && 'facetwp_autocomplete_load' != $action ) {
- add_action( 'shutdown', [ $this, 'inject_template' ], 0 );
- ob_start();
- }
- }
-
-
- /**
- * FacetWP runs the archive query before WP gets the chance.
- * This hook prevents the query from running twice, by letting us inject the
- * first query's posts (and counts) into the "main" query.
- */
- function maybe_abort_query( $posts, $query ) {
- $do_abort = apply_filters( 'facetwp_archive_abort_query', true, $query );
- $has_query_run = ( ! empty( FWP()->facet->query ) );
-
- if ( $do_abort && $has_query_run && isset( $this->query_vars ) ) {
-
- // New var; any changes to $query will cause is_main_query() to return false
- $query_vars = $query->query_vars;
-
- // If paged = 0, set to 1 or the compare will fail
- if ( empty( $query_vars['paged'] ) ) {
- $query_vars['paged'] = 1;
- }
-
- // Only intercept the identical query
- if ( $query_vars === $this->query_vars ) {
- $posts = FWP()->facet->query->posts;
- $query->found_posts = FWP()->facet->query->found_posts;
- $query->max_num_pages = FWP()->facet->query->max_num_pages;
- }
- }
-
- return $posts;
- }
-
-
- /**
- * Fixes https://core.trac.wordpress.org/ticket/40393
- */
- function sacrificial_lamb( $query ) {
- }
-
-
- /**
- * Force FacetWP to use the default WP query
- */
- function update_query_vars( $query ) {
-
- if ( isset( $this->query_vars ) // Ran already
- || $this->is_shortcode // Skip shortcode template
- || ( is_admin() && ! wp_doing_ajax() ) // Skip admin
- || ( wp_doing_ajax() && ! $this->is_refresh ) // Skip other ajax
- || ! $this->is_main_query( $query ) // Not the main query
- ) {
- return;
- }
-
- // Set the flag
- $query->set( 'facetwp', true );
-
- // If "s" is an empty string and no post_type is set, WP sets
- // post_type = "any". We want to prevent this except on the search page.
- if ( '' == $query->get( 's' ) && ! isset( $_GET['s'] ) ) {
- $query->set( 's', null );
- }
-
- // Set the initial query vars, needed for render()
- $this->query_vars = $query->query_vars;
-
- // Notify
- do_action( 'facetwp_found_main_query' );
-
- // Generate the FWP output
- $data = ( $this->is_preload ) ? $this->process_preload_data() : $this->process_post_data();
- $this->output = FWP()->facet->render( $data );
-
- // Set the updated query vars, needed for maybe_abort_query()
- $this->query_vars = FWP()->facet->query->query_vars;
-
- // Set the updated query vars
- $force_query = apply_filters( 'facetwp_preload_force_query', false, $query );
-
- if ( ! $this->is_preload || ! empty( $this->url_vars ) || $force_query ) {
- $query->query_vars = FWP()->facet->query_args;
- }
-
- if ( 'product_query' == $query->get( 'wc_query' ) ) {
- wc_set_loop_prop( 'total', FWP()->facet->pager_args['total_rows'] );
- wc_set_loop_prop( 'per_page', FWP()->facet->pager_args['per_page'] );
- wc_set_loop_prop( 'total_pages', FWP()->facet->pager_args['total_pages'] );
- wc_set_loop_prop( 'current_page', FWP()->facet->pager_args['page'] );
- }
- }
-
-
- /**
- * Is this the main query?
- */
- function is_main_query( $query ) {
- if ( 'yes' == FWP()->helper->get_setting( 'strict_query_detection', 'no' ) ) {
- $is_main_query = ( $query->is_main_query() );
- }
- else {
- $is_main_query = ( $query->is_main_query() || $query->is_archive );
- }
-
- $is_main_query = ( $query->is_singular || $query->is_feed ) ? false : $is_main_query;
- $is_main_query = ( $query->get( 'suppress_filters', false ) ) ? false : $is_main_query; // skip get_posts()
- $is_main_query = ( '' !== $query->get( 'facetwp' ) ) ? (bool) $query->get( 'facetwp' ) : $is_main_query; // flag
- return apply_filters( 'facetwp_is_main_query', $is_main_query, $query );
- }
-
-
- /**
- * Process the AJAX $_POST data
- * This gets passed into FWP()->facet->render()
- */
- function process_post_data() {
- $data = stripslashes_deep( $_POST['data'] );
- $facets = $data['facets'];
- $extras = $data['extras'] ?? [];
- $frozen_facets = $data['frozen_facets'] ?? [];
-
- $params = [
- 'facets' => [],
- 'template' => $data['template'],
- 'frozen_facets' => $frozen_facets,
- 'http_params' => $data['http_params'],
- 'extras' => $extras,
- 'soft_refresh' => (int) $data['soft_refresh'],
- 'is_bfcache' => (int) $data['is_bfcache'],
- 'first_load' => (int) $data['first_load'], // skip the template?
- 'paged' => (int) $data['paged'],
- ];
-
- foreach ( $facets as $facet_name => $selected_values ) {
- $params['facets'][] = [
- 'facet_name' => $facet_name,
- 'selected_values' => $selected_values,
- ];
- }
-
- return $params;
- }
-
-
- /**
- * On initial pageload, preload the data
- *
- * This gets called twice; once in the template shortcode (to grab only the template)
- * and again in FWP()->display->front_scripts() to grab everything else.
- *
- * Two calls are needed for timing purposes; the template shortcode often renders
- * before some or all of the other FacetWP-related shortcodes.
- */
- function process_preload_data( $template_name = false, $overrides = [] ) {
-
- if ( false === $template_name ) {
- $template_name = $this->template_name ?? 'wp';
- }
-
- $this->template_name = $template_name;
-
- // Is this a template shortcode?
- $this->is_shortcode = ( 'wp' != $template_name );
-
- $params = [
- 'facets' => [],
- 'template' => $template_name,
- 'http_params' => [
- 'get' => $_GET,
- 'uri' => FWP()->helper->get_uri(),
- 'url_vars' => $this->url_vars,
- ],
- 'frozen_facets' => [],
- 'soft_refresh' => 1, // skip the facets
- 'is_preload' => 1,
- 'is_bfcache' => 0,
- 'first_load' => 0, // load the template
- 'extras' => [],
- 'paged' => 1,
- ];
-
- // Support "/page/X/" on preload
- if ( ! empty( $this->query_vars['paged'] ) ) {
- $params['paged'] = (int) $this->query_vars['paged'];
- }
-
- foreach ( $this->url_vars as $key => $val ) {
- if ( 'paged' == $key ) {
- $params['paged'] = $val;
- }
- elseif ( 'per_page' == $key || 'sort' == $key ) {
- $params['extras'][ $key ] = $val;
- }
- else {
- $params['facets'][] = [
- 'facet_name' => $key,
- 'selected_values' => $val,
- ];
- }
- }
-
- // Override the defaults
- $params = array_merge( $params, $overrides );
-
- return $params;
- }
-
-
- /**
- * This gets called from FWP()->display->front_scripts(), when we finally
- * know which shortcodes are on the page.
- *
- * Since we already got the template HTML on the first process_preload_data() call,
- * this time we're grabbing everything but the template.
- *
- * The return value of this method gets passed into the 2nd argument of
- * process_preload_data().
- */
- function process_preload_overrides( $items ) {
- $overrides = [];
- $url_vars = FWP()->request->url_vars;
-
- foreach ( $items['facets'] as $name ) {
- $overrides['facets'][] = [
- 'facet_name' => $name,
- 'selected_values' => $url_vars[ $name ] ?? [],
- ];
- }
-
- if ( isset( $items['extras']['counts'] ) ) {
- $overrides['extras']['counts'] = true;
- }
- if ( isset( $items['extras']['pager'] ) ) {
- $overrides['extras']['pager'] = true;
- }
- if ( isset( $items['extras']['per_page'] ) ) {
- $overrides['extras']['per_page'] = $url_vars['per_page'] ?? 'default';
- }
- if ( isset( $items['extras']['sort'] ) ) {
- $overrides['extras']['sort'] = $url_vars['sort'] ?? 'default';
- }
-
- $overrides['soft_refresh'] = 0; // load the facets
- $overrides['first_load'] = 1; // skip the template
-
- return $overrides;
- }
-
-
- /**
- * Inject the page HTML into the JSON response
- * We'll cherry-pick the content from the HTML using front.js
- */
- function inject_template() {
- $html = ob_get_clean();
-
- // Throw an error
- if ( empty( $this->output['settings'] ) ) {
- $html = __( 'FacetWP was unable to auto-detect the post listing', 'fwp' );
- }
- // Grab the contents
- else {
- preg_match( "/(.*?)<\/body>/s", $html, $matches );
-
- if ( ! empty( $matches ) ) {
- $html = trim( $matches[2] );
- }
- }
-
- $this->output['template'] = $html;
- do_action( 'facetwp_inject_template', $this->output );
- wp_send_json( $this->output );
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/class-settings.php b/wp/wp-content/plugins/facetwp/includes/class-settings.php
deleted file mode 100644
index 3ca509ad..00000000
--- a/wp/wp-content/plugins/facetwp/includes/class-settings.php
+++ /dev/null
@@ -1,646 +0,0 @@
- [
- 'label' => __( 'General', 'fwp' ),
- 'fields' => [
- 'license_key' => [
- 'label' => __( 'License key', 'fwp' ),
- 'html' => $this->get_setting_html( 'license_key' )
- ],
- 'gmaps_api_key' => [
- 'label' => __( 'Google Maps API key', 'fwp' ),
- 'html' => $this->get_setting_html( 'gmaps_api_key' )
- ],
- 'separators' => [
- 'label' => __( 'Separators', 'fwp' ),
- 'notes' => 'Enter the thousands and decimal separators, respectively',
- 'html' => $this->get_setting_html( 'separators' )
- ],
- 'prefix' => [
- 'label' => __( 'URL prefix', 'fwp' ),
- 'html' => $this->get_setting_html( 'prefix', 'dropdown', [
- 'choices' => [ 'fwp_' => 'fwp_', '_' => '_' ]
- ])
- ],
- 'load_jquery' => [
- 'label' => __( 'Load jQuery', 'fwp' ),
- 'notes' => 'FacetWP no longer requires jQuery, but enable if needed',
- 'html' => $this->get_setting_html( 'load_jquery', 'toggle', [
- 'true_value' => 'yes',
- 'false_value' => 'no'
- ])
- ],
- 'load_a11y' => [
- 'label' => __( 'Load a11y support', 'fwp' ),
- 'notes' => 'Improved accessibility for users with disabilities',
- 'html' => $this->get_setting_html( 'load_a11y', 'toggle', [
- 'true_value' => 'yes',
- 'false_value' => 'no'
- ])
- ],
- 'strict_query_detection' => [
- 'label' => __( 'Strict query detection', 'fwp' ),
- 'notes' => 'Enable if FacetWP auto-detects the wrong archive query',
- 'html' => $this->get_setting_html( 'strict_query_detection', 'toggle', [
- 'true_value' => 'yes',
- 'false_value' => 'no'
- ])
- ],
- 'debug_mode' => [
- 'label' => __( 'Debug mode', 'fwp' ),
- 'notes' => 'After enabling, type "FWP.settings.debug" into the browser console on your front-end facet page',
- 'html' => $this->get_setting_html( 'debug_mode', 'toggle', [
- 'true_value' => 'on',
- 'false_value' => 'off'
- ])
- ]
- ]
- ],
- 'woocommerce' => [
- 'label' => __( 'WooCommerce', 'fwp' ),
- 'fields' => [
- 'wc_enable_variations' => [
- 'label' => __( 'Support product variations?', 'fwp' ),
- 'notes' => __( 'Enable if your store uses variable products.', 'fwp' ),
- 'html' => $this->get_setting_html( 'wc_enable_variations', 'toggle' )
- ],
- 'wc_index_all' => [
- 'label' => __( 'Index out-of-stock products?', 'fwp' ),
- 'notes' => __( 'Show facet choices for out-of-stock products?', 'fwp' ),
- 'html' => $this->get_setting_html( 'wc_index_all', 'toggle' )
- ]
- ]
- ],
- 'backup' => [
- 'label' => __( 'Import / Export', 'fwp' ),
- 'fields' => [
- 'export' => [
- 'label' => __( 'Export', 'fwp' ),
- 'html' => $this->get_setting_html( 'export' )
- ],
- 'import' => [
- 'label' => __( 'Import', 'fwp' ),
- 'html' => $this->get_setting_html( 'import' )
- ]
- ]
- ]
- ];
-
- if ( ! is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
- unset( $defaults['woocommerce'] );
- }
-
- if ( '_' == FWP()->helper->settings['settings']['prefix'] ) {
- unset( $defaults['general']['fields']['prefix'] );
- }
-
- return apply_filters( 'facetwp_settings_admin', $defaults, $this );
- }
-
-
- /**
- * All facet admin fields
- * @since 3.9
- */
- function get_registered_facet_fields() {
- $settings = [
- 'label_any' => [
- 'label' => __( 'Default label', 'fwp' ),
- 'notes' => 'Customize the "Any" label',
- 'default' => __( 'Any', 'fwp' )
- ],
- 'placeholder' => [
- 'label' => __( 'Placeholder text', 'fwp' )
- ],
- 'parent_term' => [
- 'label' => __( 'Parent term', 'fwp' ),
- 'notes' => 'To show only child terms, enter the parent term ID . Otherwise, leave blank.',
- 'show' => "facet.source.substr(0, 3) == 'tax'"
- ],
- 'hierarchical' => [
- 'type' => 'toggle',
- 'label' => __( 'Hierarchical', 'fwp' ),
- 'notes' => 'Is this a hierarchical taxonomy?',
- 'show' => "facet.source.substr(0, 3) == 'tax'"
- ],
- 'show_expanded' => [
- 'type' => 'toggle',
- 'label' => __( 'Show expanded', 'fwp' ),
- 'notes' => 'Should child terms be visible by default?',
- 'show' => "facet.hierarchical == 'yes'"
- ],
- 'multiple' => [
- 'type' => 'toggle',
- 'label' => __( 'Multi-select', 'fwp' ),
- 'notes' => 'Allow multiple selections?'
- ],
- 'ghosts' => [
- 'type' => 'alias',
- 'items' => [
- 'ghosts' => [
- 'type' => 'toggle',
- 'label' => __( 'Show ghosts', 'fwp' ),
- 'notes' => 'Show choices that would return zero results?'
- ],
- 'preserve_ghosts' => [
- 'type' => 'toggle',
- 'label' => __( 'Preserve ghost order', 'fwp' ),
- 'notes' => 'Keep ghost choices in the same order?',
- 'show' => "facet.ghosts == 'yes'"
- ]
- ]
- ],
- 'modifiers' => [
- 'type' => 'alias',
- 'items' => [
- 'modifier_type' => [
- 'type' => 'select',
- 'label' => __( 'Value modifiers', 'fwp' ),
- 'notes' => 'Include or exclude certain values?',
- 'choices' => [
- 'off' => __( 'Off', 'fwp' ),
- 'exclude' => __( 'Exclude these values', 'fwp' ),
- 'include' => __( 'Show only these values', 'fwp' )
- ]
- ],
- 'modifier_values' => [
- 'type' => 'textarea',
- 'label' => '',
- 'placeholder' => 'Add one value per line',
- 'show' => "facet.modifier_type != 'off'"
- ]
- ]
- ],
- 'operator' => [
- 'type' => 'select',
- 'label' => __( 'Facet logic', 'fwp' ),
- 'notes' => 'How should multiple selections affect the results?',
- 'choices' => [
- 'and' => __( 'AND (match all)', 'fwp' ),
- 'or' => __( 'OR (match any)', 'fwp' )
- ]
- ],
- 'orderby' => [
- 'type' => 'select',
- 'label' => __( 'Sort by', 'fwp' ),
- 'choices' => [
- 'count' => __( 'Highest count', 'fwp' ),
- 'display_value' => __( 'Display value', 'fwp' ),
- 'raw_value' => __( 'Raw value', 'fwp' ),
- 'term_order' => __( 'Term order', 'fwp' )
- ]
- ],
- 'count' => [
- 'label' => __( 'Count', 'fwp' ),
- 'notes' => 'The maximum number of choices to show (-1 for no limit)',
- 'default' => 10
- ],
- 'soft_limit' => [
- 'label' => __( 'Soft limit', 'fwp' ),
- 'notes' => 'Show a toggle link after this many choices',
- 'default' => 5,
- 'show' => "facet.hierarchical != 'yes'"
- ],
- 'source_other' => [
- 'label' => __( 'Other data source', 'fwp' ),
- 'notes' => 'Use a separate value for the upper limit?',
- 'html' => ' '
- ],
- 'compare_type' => [
- 'type' => 'select',
- 'label' => __( 'Compare type', 'fwp' ),
- 'notes' => "Basic - entered range surrounds the post's rangeEnclose - entered range is fully inside the post's rangeIntersect - entered range overlaps the post's range When in doubt, choose Basic ",
- 'choices' => [
- '' => __( 'Basic', 'fwp' ),
- 'enclose' => __( 'Enclose', 'fwp' ),
- 'intersect' => __( 'Intersect', 'fwp' )
- ]
- ],
- 'ui_type' => [
- 'label' => __( 'UI type', 'fwp' ),
- 'html' => ' '
- ],
- 'reset_text' => [
- 'label' => __( 'Reset text', 'fwp' ),
- 'default' => 'Reset'
- ]
- ];
-
- foreach ( FWP()->helper->facet_types as $name => $obj ) {
- if ( method_exists( $obj, 'register_fields' ) ) {
- $settings = array_merge( $settings, $obj->register_fields() );
- }
- }
-
- return $settings;
- }
-
-
- /**
- * Return HTML for a single facet field (supports aliases)
- * @since 3.9
- */
- function get_facet_field_html( $name ) {
- ob_start();
-
- $fields = FWP()->settings->get_registered_facet_fields();
-
- if ( isset( $fields[ $name ] ) ) {
- $field = $fields[ $name ];
-
- if ( isset( $field['type'] ) && 'alias' == $field['type'] ) {
- foreach ( $field['items'] as $k => $v ) {
- $v['name'] = $k;
- $this->render_facet_field( $v );
- }
- }
- else {
- $field['name'] = $name;
- $this->render_facet_field( $field );
- }
- }
-
- return ob_get_clean();
- }
-
-
- /**
- * Render a facet field
- * @since 3.9
- */
- function render_facet_field( $field ) {
- $name = str_replace( '_', '-', $field['name'] );
- $type = $field['type'] ?? 'text';
- $placeholder = $field['placeholder'] ?? '';
- $show = isset( $field['show'] ) ? ' v-show="' . $field['show'] . '"' : '';
- $default = isset( $field['default'] ) ? ' value="' . $field['default'] . '"' : '';
- $label = empty( $field['label'] ) ? '' : $field['label'];
-
- if ( isset( $field['notes'] ) ) {
- $label = '';
- }
-
- ob_start();
-
- if ( isset( $field['html'] ) ) {
- echo $field['html'];
- }
- elseif ( 'text' == $type ) {
-?>
- />
-
-
-
-
-
-
-
-
-
- $v ) : ?>
-
-
-
-
-
-
-
- />
-
- get_activation_status(); ?>
-
-
-
-
-
-
-
-
- Thousands:
-
- Decimal:
-
-
-
-
-
- get_export_choices() as $val => $label ) : ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- $label ) : ?>
-
-
-
-
-
-
-
-
-
-
-
-helper->settings;
-
- foreach ( $settings['facets'] as $facet ) {
- $export['facet-' . $facet['name']] = 'Facet - ' . $facet['label'];
- }
-
- foreach ( $settings['templates'] as $template ) {
- $export['template-' . $template['name']] = 'Template - '. $template['label'];
- }
-
- return $export;
- }
-
-
- /**
- * Get the activation status
- * @since 3.0.0
- */
- function get_activation_status() {
- $message = __( 'Not yet activated', 'fwp' );
- $status = FWP()->helper->get_license_meta( 'status' );
-
- if ( false !== $status ) {
- if ( 'success' == $status ) {
- $expiration = FWP()->helper->get_license_meta( 'expiration' );
- $expiration = date( 'M j, Y', strtotime( $expiration ) );
- $message = __( 'Valid until', 'fwp' ) . ' ' . $expiration;
- }
- else {
- $message = FWP()->helper->get_license_meta( 'message' );
- }
- }
-
- return $message;
- }
-
-
- /**
- * Load i18n admin strings
- * @since 3.2.0
- */
- function get_i18n_strings() {
- return [
- 'Number of grid columns' => __( 'Number of grid columns', 'fwp' ),
- 'Spacing between results' => __( 'Spacing between results', 'fwp' ),
- 'No results text' => __( 'No results text', 'fwp' ),
- 'Text style' => __( 'Text style', 'fwp' ),
- 'Text color' => __( 'Text color', 'fwp' ),
- 'Font size' => __( 'Font size', 'fwp' ),
- 'Background color' => __( 'Background color', 'fwp' ),
- 'Border' => __( 'Border', 'fwp' ),
- 'Border style' => __( 'Border style', 'fwp' ),
- 'None' => __( 'None', 'fwp' ),
- 'Solid' => __( 'Solid', 'fwp' ),
- 'Dashed' => __( 'Dashed', 'fwp' ),
- 'Dotted' => __( 'Dotted', 'fwp' ),
- 'Double' => __( 'Double', 'fwp' ),
- 'Border color' => __( 'Border color', 'fwp' ),
- 'Border width' => __( 'Border width', 'fwp' ),
- 'Button text' => __( 'Button text', 'fwp' ),
- 'Button text color' => __( 'Button text color', 'fwp' ),
- 'Button padding' => __( 'Button padding', 'fwp' ),
- 'Separator' => __( 'Separator', 'fwp' ),
- 'Custom CSS' => __( 'Custom CSS', 'fwp' ),
- 'Column widths' => __( 'Column widths', 'fwp' ),
- 'Content' => __( 'Content', 'fwp' ),
- 'Image size' => __( 'Image size', 'fwp' ),
- 'Author field' => __( 'Author field', 'fwp' ),
- 'Display name' => __( 'Display name', 'fwp' ),
- 'User login' => __( 'User login', 'fwp' ),
- 'User ID' => __( 'User ID', 'fwp' ),
- 'Field type' => __( 'Field type', 'fwp' ),
- 'Text' => __( 'Text', 'fwp' ),
- 'Date' => __( 'Date', 'fwp' ),
- 'Number' => __( 'Number', 'fwp' ),
- 'Date format' => __( 'Date format', 'fwp' ),
- 'Input format' => __( 'Input format', 'fwp' ),
- 'Number format' => __( 'Number format', 'fwp' ),
- 'Link' => __( 'Link', 'fwp' ),
- 'Link type' => __( 'Link type', 'fwp' ),
- 'Post URL' => __( 'Post URL', 'fwp' ),
- 'Custom URL' => __( 'Custom URL', 'fwp' ),
- 'Open in new tab?' => __( 'Open in new tab?', 'fwp' ),
- 'Prefix' => __( 'Prefix', 'fwp' ),
- 'Suffix' => __( 'Suffix', 'fwp' ),
- 'Hide item?' => __( 'Hide item?', 'fwp' ),
- 'Padding' => __( 'Padding', 'fwp' ),
- 'CSS class' => __( 'CSS class', 'fwp' ),
- 'Button Border' => __( 'Button border', 'fwp' ),
- 'Term URL' => __( 'Term URL', 'fwp' ),
- 'Fetch' => __( 'Fetch', 'fwp' ),
- 'All post types' => __( 'All post types', 'fwp' ),
- 'and show' => __( 'and show', 'fwp' ),
- 'per page' => __( 'per page', 'fwp' ),
- 'Sort by' => __( 'Sort by', 'fwp' ),
- 'Posts' => __( 'Posts', 'fwp' ),
- 'Post Title' => __( 'Post Title', 'fwp' ),
- 'Post Name' => __( 'Post Name', 'fwp' ),
- 'Post Type' => __( 'Post Type', 'fwp' ),
- 'Post Date' => __( 'Post Date', 'fwp' ),
- 'Post Modified' => __( 'Post Modified', 'fwp' ),
- 'Comment Count' => __( 'Comment Count', 'fwp' ),
- 'Menu Order' => __( 'Menu Order', 'fwp' ),
- 'Custom Fields' => __( 'Custom Fields', 'fwp' ),
- 'Narrow results by' => __( 'Narrow results by', 'fwp' ),
- 'Hit Enter' => __( 'Hit Enter', 'fwp' ),
- 'Add query sort' => __( 'Add query sort', 'fwp' ),
- 'Add query filter' => __( 'Add query filter', 'fwp' ),
- 'Clear' => __( 'Clear', 'fwp' ),
- 'Enter term slugs' => __( 'Enter term slugs', 'fwp' ),
- 'Enter values' => __( 'Enter values', 'fwp' ),
- 'Layout' => __( 'Layout', 'fwp' ),
- 'Content' => __( 'Content', 'fwp' ),
- 'Style' => __( 'Style', 'fwp' ),
- 'Row' => __( 'Row', 'fwp' ),
- 'Column' => __( 'Column', 'fwp' ),
- 'Start typing' => __( 'Start typing', 'fwp' ),
- 'Label' => __( 'Label', 'fwp' ),
- 'Unique name' => __( 'Unique name', 'fwp' ),
- 'Facet type' => __( 'Facet type', 'fwp' ),
- 'Copy shortcode' => __( 'Copy shortcode', 'fwp' ),
- 'Data source' => __( 'Data source', 'fwp' ),
- 'Switch to advanced mode' => __( 'Switch to advanced mode', 'fwp' ),
- 'Switch to visual mode' => __( 'Switch to visual mode', 'fwp' ),
- 'Display' => __( 'Display', 'fwp' ),
- 'Query' => __( 'Query', 'fwp' ),
- 'Help' => __( 'Help', 'fwp' ),
- 'Display Code' => __( 'Display Code', 'fwp' ),
- 'Query Arguments' => __( 'Query Arguments', 'fwp' ),
- 'Saving' => __( 'Saving', 'fwp' ),
- 'Indexing' => __( 'Indexing', 'fwp' ),
- 'The index table is empty' => __( 'The index table is empty', 'fwp' ),
- 'Indexing complete' => __( 'Indexing complete', 'fwp' ),
- 'Looking' => __( 'Looking', 'fwp' ),
- 'Purging' => __( 'Purging', 'fwp' ),
- 'Copied!' => __( 'Copied!', 'fwp' ),
- 'Press CTRL+C to copy' => __( 'Press CTRL+C to copy', 'fwp' ),
- 'Activating' => __( 'Activating', 'fwp' ),
- 'Re-index' => __( 'Re-index', 'fwp' ),
- 'Stop indexer' => __( 'Stop indexer', 'fwp' ),
- 'Loading' => __( 'Loading', 'fwp' ),
- 'Importing' => __( 'Importing', 'fwp' ),
- 'Convert to query args' => __( 'Convert to query args', 'fwp' )
- ];
- }
-
-
- /**
- * Get available image sizes
- * @since 3.2.7
- */
- function get_image_sizes() {
- global $_wp_additional_image_sizes;
-
- $sizes = [];
-
- $default_sizes = [ 'thumbnail', 'medium', 'medium_large', 'large', 'full' ];
-
- foreach ( get_intermediate_image_sizes() as $size ) {
- if ( in_array( $size, $default_sizes ) ) {
- $sizes[ $size ]['width'] = (int) get_option( "{$size}_size_w" );
- $sizes[ $size ]['height'] = (int) get_option( "{$size}_size_h" );
- }
- elseif ( isset( $_wp_additional_image_sizes[ $size ] ) ) {
- $sizes[ $size ] = $_wp_additional_image_sizes[ $size ];
- }
- }
-
- return $sizes;
- }
-
-
- /**
- * Return an array of formatted image sizes
- * @since 3.2.7
- */
- function get_image_size_labels() {
- $labels = [];
- $sizes = $this->get_image_sizes();
-
- foreach ( $sizes as $size => $data ) {
- $height = ( 0 === $data['height'] ) ? 'w' : 'x' . $data['height'];
- $label = $size . ' (' . $data['width'] . $height . ')';
- $labels[ $size ] = $label;
- }
-
- $labels['full'] = __( 'full', 'fwp' );
-
- return $labels;
- }
-
-
- /**
- * Create SVG images (based on Font Awesome)
- * @license https://fontawesome.com/license/free CC BY 4.0
- * @since 3.6.5
- */
- function get_svg() {
- $output = [];
-
- $icons = [
- // [viewBox width, viewBox height, icon width, svg data]
- "align-center" => [448, 512, 14, "M432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM108.1 96h231.81A12.09 12.09 0 0 0 352 83.9V44.09A12.09 12.09 0 0 0 339.91 32H108.1A12.09 12.09 0 0 0 96 44.09V83.9A12.1 12.1 0 0 0 108.1 96zm231.81 256A12.09 12.09 0 0 0 352 339.9v-39.81A12.09 12.09 0 0 0 339.91 288H108.1A12.09 12.09 0 0 0 96 300.09v39.81a12.1 12.1 0 0 0 12.1 12.1z"],
- "align-left" => [448, 512, 14, "M12.83 352h262.34A12.82 12.82 0 0 0 288 339.17v-38.34A12.82 12.82 0 0 0 275.17 288H12.83A12.82 12.82 0 0 0 0 300.83v38.34A12.82 12.82 0 0 0 12.83 352zm0-256h262.34A12.82 12.82 0 0 0 288 83.17V44.83A12.82 12.82 0 0 0 275.17 32H12.83A12.82 12.82 0 0 0 0 44.83v38.34A12.82 12.82 0 0 0 12.83 96zM432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"],
- "align-right" => [448, 512, 14, "M16 224h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm416 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-384H172.83A12.82 12.82 0 0 0 160 44.83v38.34A12.82 12.82 0 0 0 172.83 96h262.34A12.82 12.82 0 0 0 448 83.17V44.83A12.82 12.82 0 0 0 435.17 32zm0 256H172.83A12.82 12.82 0 0 0 160 300.83v38.34A12.82 12.82 0 0 0 172.83 352h262.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288z"],
- "arrow-circle-up" => [512, 512, 16, "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z"],
- "bold" => [384, 512, 12, "M333.49 238a122 122 0 0 0 27-65.21C367.87 96.49 308 32 233.42 32H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h31.87v288H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h209.32c70.8 0 134.14-51.75 141-122.4 4.74-48.45-16.39-92.06-50.83-119.6zM145.66 112h87.76a48 48 0 0 1 0 96h-87.76zm87.76 288h-87.76V288h87.76a56 56 0 0 1 0 112z"],
- "caret-down" => [320, 512, 10, "M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"],
- "cog" => [512, 512, 16, "M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"],
- "columns" => [512, 512, 16, "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z"],
- "eye-slash" => [640, 512, 20, "M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z"],
- "italic" => [320, 512, 10, "M320 48v32a16 16 0 0 1-16 16h-62.76l-80 320H208a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h62.76l80-320H112a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h192a16 16 0 0 1 16 16z"],
- "lock" => [448, 512, 14, "M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z"],
- "lock-open" => [576, 512, 18, "M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z"],
- "minus-circle" => [512, 512, 16, "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z"],
- "plus" => [448, 512, 14, "M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"],
- "plus-circle" => [512, 512, 16, "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"],
- "times" => [352, 512, 11, "M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"]
- ];
-
- foreach ( $icons as $name => $attr ) {
- $svg = ' ';
- $search = [ '{name}', '{w}', '{h}', '{faw}', '{d}' ];
- $replace = [ $name, $attr[0], $attr[1], $attr[2], $attr[3] ];
- $output[ $name ] = str_replace( $search, $replace, $svg );
- }
-
- return $output;
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/class-updater.php b/wp/wp-content/plugins/facetwp/includes/class-updater.php
deleted file mode 100644
index cd1483b3..00000000
--- a/wp/wp-content/plugins/facetwp/includes/class-updater.php
+++ /dev/null
@@ -1,183 +0,0 @@
- path
- }
- else {
- $active_plugins = get_option( 'active_plugins', [] );
- }
-
- foreach ( $active_plugins as $plugin_path ) {
- if ( is_multisite() ) {
- $plugin_path = str_replace( WP_PLUGIN_DIR, '', $plugin_path );
- }
-
- if ( isset( $plugins[ $plugin_path ] ) ) {
- $info = $plugins[ $plugin_path ];
- $slug = trim( dirname( $plugin_path ), '/' );
-
- // only intercept FacetWP and its add-ons
- $is_valid = in_array( $slug, [ 'facetwp', 'user-post-type' ] );
- $is_valid = ( 0 === strpos( $slug, 'facetwp-' ) ) ? true : $is_valid;
-
- if ( $is_valid ) {
- $output[ $slug ] = [
- 'name' => $info['Name'],
- 'version' => $info['Version'],
- 'description' => $info['Description'],
- 'plugin_path' => $plugin_path,
- ];
- }
- }
- }
-
- return $output;
- }
-
-
- /**
- * Handle the "View Details" popup
- *
- * $args->slug = "facetwp-flyout"
- * plugin_path = "facetwp-flyout/facetwp-flyout.php"
- */
- function plugins_api( $result, $action, $args ) {
- if ( 'plugin_information' == $action ) {
- $slug = $args->slug;
- $to_check = $this->get_plugins_to_check();
-
- $response = get_option( 'facetwp_updater_response', '' );
- $response = json_decode( $response, true );
-
- if ( isset( $to_check[ $slug ] ) && isset( $response[ $slug ] ) ) {
- $local_data = $to_check[ $slug ];
- $remote_data = $response[ $slug ];
-
- return (object) [
- 'name' => $local_data['name'],
- 'slug' => $local_data['plugin_path'],
- 'version' => $remote_data['version'],
- 'last_updated' => $remote_data['last_updated'],
- 'download_link' => $remote_data['package'],
- 'sections' => [
- 'description' => $local_data['description'],
- 'changelog' => $remote_data['sections']['changelog']
- ],
- 'homepage' => 'https://facetwp.com/',
- 'rating' => 100,
- 'num_ratings' => 1
- ];
- }
- }
-
- return $result;
- }
-
-
- /**
- * Grab (and cache) plugin update data
- */
- function check_update( $transient ) {
- if ( empty( $transient->checked ) ) {
- return $transient;
- }
-
- $now = strtotime( 'now' );
- $response = get_option( 'facetwp_updater_response', '' );
- $ts = (int) get_option( 'facetwp_updater_last_checked' );
- $plugins = $this->get_plugins_to_check();
-
- if ( empty( $response ) || $ts + 14400 < $now ) {
-
- $request = wp_remote_post( 'https://api.facetwp.com', [
- 'body' => [
- 'action' => 'check_plugins',
- 'slugs' => array_keys( $plugins ),
- 'license' => FWP()->helper->get_license_key(),
- 'host' => FWP()->helper->get_http_host(),
- 'wp_v' => get_bloginfo( 'version' ),
- 'fwp_v' => FACETWP_VERSION,
- 'php_v' => phpversion(),
- ]
- ] );
-
- if ( ! is_wp_error( $request ) || 200 == wp_remote_retrieve_response_code( $request ) ) {
- $body = json_decode( $request['body'], true );
- $activation = json_encode( $body['activation'] );
- $response = json_encode( $body['slugs'] );
- }
-
- update_option( 'facetwp_activation', $activation );
- update_option( 'facetwp_updater_response', $response, 'no' );
- update_option( 'facetwp_updater_last_checked', $now, 'no' );
- }
-
- if ( ! empty( $response ) ) {
- $response = json_decode( $response, true );
-
- foreach ( $response as $slug => $info ) {
- if ( isset( $plugins[ $slug ] ) ) {
- $plugin_path = $plugins[ $slug ]['plugin_path'];
- $response_obj = (object) [
- 'slug' => $slug,
- 'plugin' => $plugin_path,
- 'new_version' => $info['version'],
- 'package' => $info['package'],
- 'requires' => $info['requires'],
- 'tested' => $info['tested']
- ];
-
- if ( version_compare( $plugins[ $slug ]['version'], $info['version'], '<' ) ) {
- $transient->response[ $plugin_path ] = $response_obj;
- }
- else {
- $transient->no_update[ $plugin_path ] = $response_obj;
- }
- }
- }
- }
-
- return $transient;
- }
-
-
- /**
- * Display a license reminder on the plugin list screen
- */
- function in_plugin_update_message( $plugin_data, $response ) {
- if ( ! FWP()->helper->is_license_active() ) {
- $price_id = (int) FWP()->helper->get_license_meta( 'price_id' );
- $license = FWP()->helper->get_license_key();
-
- if ( 0 < $price_id ) {
- echo ' ' . sprintf(
- __( 'Please renew your license for automatic updates.', 'fwp' ),
- esc_url( "https://facetwp.com/checkout/?edd_action=add_to_cart&download_id=24&edd_options[price_id]=$price_id&discount=$license" )
- );
- }
- else {
- echo ' ' . __( 'Please activate your FacetWP license for automatic updates.', 'fwp' );
- }
- }
- }
-}
-
-new FacetWP_Updater();
diff --git a/wp/wp-content/plugins/facetwp/includes/class-upgrade.php b/wp/wp-content/plugins/facetwp/includes/class-upgrade.php
deleted file mode 100644
index bf5c1ee6..00000000
--- a/wp/wp-content/plugins/facetwp/includes/class-upgrade.php
+++ /dev/null
@@ -1,106 +0,0 @@
-version = FACETWP_VERSION;
- $this->last_version = get_option( 'facetwp_version' );
-
- if ( version_compare( $this->last_version, $this->version, '<' ) ) {
- if ( version_compare( $this->last_version, '0.1.0', '<' ) ) {
- require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
- $this->clean_install();
- }
- else {
- $this->run_upgrade();
- }
-
- update_option( 'facetwp_version', $this->version );
- }
- }
-
-
- private function clean_install() {
- global $wpdb;
-
- $int = apply_filters( 'facetwp_use_bigint', false ) ? 'BIGINT' : 'INT';
-
- $charset_collate = $wpdb->get_charset_collate();
-
- $sql = "
- CREATE TABLE IF NOT EXISTS {$wpdb->prefix}facetwp_index (
- id BIGINT unsigned not null auto_increment,
- post_id $int unsigned,
- facet_name VARCHAR(50),
- facet_value VARCHAR(50),
- facet_display_value VARCHAR(200),
- term_id $int unsigned default '0',
- parent_id $int unsigned default '0',
- depth INT unsigned default '0',
- variation_id $int unsigned default '0',
- PRIMARY KEY (id),
- INDEX post_id_idx (post_id),
- INDEX facet_name_idx (facet_name),
- INDEX facet_name_value_idx (facet_name, facet_value)
- ) $charset_collate";
- dbDelta( $sql );
-
- // Add default settings
- $settings = file_get_contents( FACETWP_DIR . '/assets/js/src/sample.json' );
- add_option( 'facetwp_settings', $settings );
- }
-
-
- private function run_upgrade() {
- global $wpdb;
-
- $table = sanitize_key( $wpdb->prefix . 'facetwp_index' );
-
- if ( version_compare( $this->last_version, '3.1.0', '<' ) ) {
- $wpdb->query( "ALTER TABLE $table MODIFY facet_name VARCHAR(50)" );
- $wpdb->query( "ALTER TABLE $table MODIFY facet_value VARCHAR(50)" );
- $wpdb->query( "ALTER TABLE $table MODIFY facet_display_value VARCHAR(200)" );
- $wpdb->query( "CREATE INDEX facet_name_value_idx ON $table (facet_name, facet_value)" );
- }
-
- if ( version_compare( $this->last_version, '3.3.2', '<' ) ) {
- $wpdb->query( "CREATE INDEX post_id_idx ON $table (post_id)" );
- $wpdb->query( "DROP INDEX facet_source_idx ON $table" );
- $wpdb->query( "ALTER TABLE $table DROP COLUMN facet_source" );
- }
-
- if ( version_compare( $this->last_version, '3.3.3', '<' ) ) {
- if ( function_exists( 'SWP' ) ) {
- $engines = array_keys( SWP()->settings['engines'] );
- $settings = get_option( 'facetwp_settings' );
- $settings = json_decode( $settings, true );
-
- foreach ( $settings['facets'] as $key => $facet ) {
- if ( 'search' == $facet['type'] ) {
- if ( in_array( $facet['search_engine'], $engines ) ) {
- $settings['facets'][ $key ]['search_engine'] = 'swp_' . $facet['search_engine'];
- }
- }
- }
-
- update_option( 'facetwp_settings', json_encode( $settings ) );
- }
- }
-
- if ( version_compare( $this->last_version, '3.5.3', '<' ) ) {
- update_option( 'facetwp_updater_response', '', 'no' );
- update_option( 'facetwp_updater_last_checked', '', 'no' );
- }
-
- if ( version_compare( $this->last_version, '3.5.4', '<' ) ) {
- $settings = get_option( 'facetwp_settings' );
- $settings = json_decode( $settings, true );
-
- if ( ! isset( $settings['settings']['prefix'] ) ) {
- $settings['settings']['prefix'] = 'fwp_';
-
- update_option( 'facetwp_settings', json_encode( $settings ) );
- }
- }
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/facets/autocomplete.php b/wp/wp-content/plugins/facetwp/includes/facets/autocomplete.php
deleted file mode 100644
index a03774d5..00000000
--- a/wp/wp-content/plugins/facetwp/includes/facets/autocomplete.php
+++ /dev/null
@@ -1,163 +0,0 @@
-label = __( 'Autocomplete', 'fwp' );
- $this->fields = [ 'placeholder' ];
-
- // ajax
- add_action( 'facetwp_autocomplete_load', [ $this, 'ajax_load' ] );
-
- // css-based template
- add_action( 'facetwp_init', [ $this, 'maybe_buffer_output' ] );
- add_action( 'facetwp_found_main_query', [ $this, 'template_handler' ] );
-
- // result limit
- $this->limit = (int) apply_filters( 'facetwp_facet_autocomplete_limit', 10 );
- }
-
-
- /**
- * For page templates with a custom WP_Query, we need to prevent the
- * page header from being output with the autocomplete JSON
- */
- function maybe_buffer_output() {
- if ( isset( $_POST['action'] ) && 'facetwp_autocomplete_load' == $_POST['action'] ) {
- $this->is_buffering = true;
- ob_start();
- }
- }
-
-
- /**
- * For CSS-based templates, the "facetwp_autocomplete_load" action isn't fired
- * so we need to manually check the action
- */
- function template_handler() {
- if ( isset( $_POST['action'] ) && 'facetwp_autocomplete_load' == $_POST['action'] ) {
- if ( $this->is_buffering ) {
- while ( ob_get_level() ) {
- ob_end_clean();
- }
- }
- $this->ajax_load();
- }
- }
-
-
- /**
- * Generate the facet HTML
- */
- function render( $params ) {
-
- $output = '';
- $facet = $params['facet'];
- $value = (array) $params['selected_values'];
- $value = empty( $value ) ? '' : stripslashes( $value[0] );
- $placeholder = empty( $facet['placeholder'] ) ? __( 'Start typing', 'fwp-front' ) : $facet['placeholder'];
- $placeholder = facetwp_i18n( $placeholder );
- $output .= ' ';
- $output .= ' ';
- return $output;
- }
-
-
- /**
- * Filter the query based on selected values
- */
- function filter_posts( $params ) {
- global $wpdb;
-
- $facet = $params['facet'];
- $selected_values = $params['selected_values'];
- $selected_values = is_array( $selected_values ) ? $selected_values[0] : $selected_values;
- $selected_values = stripslashes( $selected_values );
-
- if ( empty( $selected_values ) ) {
- return 'continue';
- }
-
- $sql = "
- SELECT DISTINCT post_id FROM {$wpdb->prefix}facetwp_index
- WHERE facet_name = %s AND facet_display_value LIKE %s";
-
- $sql = $wpdb->prepare( $sql, $facet['name'], '%' . $selected_values . '%' );
- return facetwp_sql( $sql, $facet );
- }
-
-
- /**
- * Output any front-end scripts
- */
- function front_scripts() {
- FWP()->display->json['no_results'] = __( 'No results', 'fwp-front' );
- FWP()->display->assets['fComplete.js'] = FACETWP_URL . '/assets/vendor/fComplete/fComplete.js';
- FWP()->display->assets['fComplete.css'] = FACETWP_URL . '/assets/vendor/fComplete/fComplete.css';
- }
-
-
- /**
- * Load facet values via AJAX
- */
- function ajax_load() {
- global $wpdb;
-
- // optimizations
- $_POST['data']['soft_refresh'] = 1;
- $_POST['data']['extras'] = [];
-
- $query = stripslashes( $_POST['query'] );
- $query = FWP()->helper->sanitize( $wpdb->esc_like( $query ) );
- $facet_name = FWP()->helper->sanitize( $_POST['facet_name'] );
- $output = [];
-
- // simulate a refresh
- FWP()->facet->render(
- FWP()->request->process_post_data()
- );
-
- // then grab the matching post IDs
- $where_clause = $this->get_where_clause( [ 'name' => $facet_name ] );
-
- if ( ! empty( $query ) && ! empty( $facet_name ) ) {
- $sql = "
- SELECT DISTINCT facet_display_value
- FROM {$wpdb->prefix}facetwp_index
- WHERE
- facet_name = '$facet_name' AND
- facet_display_value LIKE '%$query%'
- $where_clause
- ORDER BY facet_display_value ASC
- LIMIT $this->limit";
-
- $results = $wpdb->get_results( $sql );
-
- foreach ( $results as $result ) {
- $output[] = [
- 'value' => $result->facet_display_value,
- 'label' => $result->facet_display_value,
- ];
- }
- }
-
- wp_send_json( $output );
- }
-
-
- /**
- * (Front-end) Attach settings to the AJAX response
- */
- function settings_js( $params ) {
- return [
- 'loadingText' => __( 'Loading', 'fwp-front' ) . '...',
- 'minCharsText' => __( 'Enter {n} or more characters', 'fwp-front' ),
- 'noResultsText' => __( 'No results', 'fwp-front' ),
- 'maxResults' => $this->limit
- ];
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/facets/base.php b/wp/wp-content/plugins/facetwp/includes/facets/base.php
deleted file mode 100644
index f338708c..00000000
--- a/wp/wp-content/plugins/facetwp/includes/facets/base.php
+++ /dev/null
@@ -1,106 +0,0 @@
- str_replace( 'tax/', '', $facet['source'] ),
- 'term_order' => true, // Custom flag
- 'fields' => 'ids',
- ] );
-
- if ( ! empty( $term_ids ) && ! is_wp_error( $term_ids ) ) {
- $term_ids = implode( ',', $term_ids );
- $orderby = "FIELD(f.term_id, $term_ids)";
- }
- }
-
- // Sort by depth
- if ( FWP()->helper->facet_is( $facet, 'hierarchical', 'yes' ) ) {
- $orderby = "f.depth, $orderby";
- }
-
- return $orderby;
- }
-
-
- /**
- * Grab the limit, and support -1
- * @since 3.5.4
- */
- function get_limit( $facet, $default = 10 ) {
- $count = $facet['count'];
-
- if ( '-1' == $count ) {
- return 1000;
- }
- elseif ( ctype_digit( $count ) ) {
- return $count;
- }
-
- return $default;
- }
-
-
- /**
- * Adjust the $where_clause for facets in "OR" mode
- *
- * FWP()->or_values contains EVERY facet and their matching post IDs
- * FWP()->unfiltered_post_ids contains original post IDs
- *
- * @since 3.2.0
- */
- function get_where_clause( $facet ) {
-
- // Ignore the current facet's selections
- if ( isset( FWP()->or_values ) && ( 1 < count( FWP()->or_values ) || ! isset( FWP()->or_values[ $facet['name'] ] ) ) ) {
- $post_ids = [];
- $or_values = FWP()->or_values; // Preserve original
- unset( $or_values[ $facet['name'] ] );
-
- $counter = 0;
- foreach ( $or_values as $name => $vals ) {
- $post_ids = ( 0 == $counter ) ? $vals : array_intersect( $post_ids, $vals );
- $counter++;
- }
-
- $post_ids = array_intersect( $post_ids, FWP()->unfiltered_post_ids );
- }
- else {
- $post_ids = FWP()->unfiltered_post_ids;
- }
-
- $post_ids = empty( $post_ids ) ? [ 0 ] : $post_ids;
- return ' AND post_id IN (' . implode( ',', $post_ids ) . ')';
- }
-
-
- /**
- * Render some commonly used admin settings
- * @since 3.5.6
- * @deprecated 3.9
- */
- function render_setting( $name ) {
- echo FWP()->settings->get_facet_field_html( $name );
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/facets/checkboxes.php b/wp/wp-content/plugins/facetwp/includes/facets/checkboxes.php
deleted file mode 100644
index a72ac356..00000000
--- a/wp/wp-content/plugins/facetwp/includes/facets/checkboxes.php
+++ /dev/null
@@ -1,258 +0,0 @@
-label = __( 'Checkboxes', 'fwp' );
- $this->fields = [ 'parent_term', 'modifiers', 'hierarchical', 'show_expanded',
- 'ghosts', 'operator', 'orderby', 'count', 'soft_limit' ];
- }
-
-
- /**
- * Load the available choices
- */
- function load_values( $params ) {
- global $wpdb;
-
- $facet = $params['facet'];
- $from_clause = $wpdb->prefix . 'facetwp_index f';
- $where_clause = $params['where_clause'];
-
- // Orderby
- $orderby = $this->get_orderby( $facet );
-
- // Limit
- $limit = $this->get_limit( $facet );
-
- // Use "OR" mode when necessary
- $is_single = FWP()->helper->facet_is( $facet, 'multiple', 'no' );
- $using_or = FWP()->helper->facet_is( $facet, 'operator', 'or' );
-
- // Facet in "OR" mode
- if ( $is_single || $using_or ) {
- $where_clause = $this->get_where_clause( $facet );
- }
-
- $orderby = apply_filters( 'facetwp_facet_orderby', $orderby, $facet );
- $from_clause = apply_filters( 'facetwp_facet_from', $from_clause, $facet );
- $where_clause = apply_filters( 'facetwp_facet_where', $where_clause, $facet );
-
- $sql = "
- SELECT f.facet_value, f.facet_display_value, f.term_id, f.parent_id, f.depth, COUNT(DISTINCT f.post_id) AS counter
- FROM $from_clause
- WHERE f.facet_name = '{$facet['name']}' $where_clause
- GROUP BY f.facet_value
- ORDER BY $orderby
- LIMIT $limit";
-
- $output = $wpdb->get_results( $sql, ARRAY_A );
-
- // Show "ghost" facet choices
- // For performance gains, only run if facets are in use
- $show_ghosts = FWP()->helper->facet_is( $facet, 'ghosts', 'yes' );
-
- if ( $show_ghosts && FWP()->is_filtered ) {
- $raw_post_ids = implode( ',', FWP()->unfiltered_post_ids );
-
- $sql = "
- SELECT f.facet_value, f.facet_display_value, f.term_id, f.parent_id, f.depth, 0 AS counter
- FROM $from_clause
- WHERE f.facet_name = '{$facet['name']}' AND post_id IN ($raw_post_ids)
- GROUP BY f.facet_value
- ORDER BY $orderby
- LIMIT $limit";
-
- $ghost_output = $wpdb->get_results( $sql, ARRAY_A );
- $tmp = [];
-
- $preserve_ghosts = FWP()->helper->facet_is( $facet, 'preserve_ghosts', 'yes' );
- $orderby_count = FWP()->helper->facet_is( $facet, 'orderby', 'count' );
-
- // Keep the facet placement intact
- if ( $preserve_ghosts && ! $orderby_count ) {
- foreach ( $ghost_output as $row ) {
- $tmp[ $row['facet_value'] . ' ' ] = $row;
- }
-
- foreach ( $output as $row ) {
- $tmp[ $row['facet_value'] . ' ' ] = $row;
- }
-
- $output = $tmp;
- }
- else {
- // Make the array key equal to the facet_value (for easy lookup)
- foreach ( $output as $row ) {
- $tmp[ $row['facet_value'] . ' ' ] = $row; // Force a string array key
- }
-
- $output = $tmp;
-
- foreach ( $ghost_output as $row ) {
- $facet_value = $row['facet_value'];
- if ( ! isset( $output[ "$facet_value " ] ) ) {
- $output[ "$facet_value " ] = $row;
- }
- }
- }
-
- $output = array_splice( $output, 0, $limit );
- $output = array_values( $output );
- }
-
- return $output;
- }
-
-
- /**
- * Generate the facet HTML
- */
- function render( $params ) {
- $facet = $params['facet'];
-
- if ( FWP()->helper->facet_is( $facet, 'hierarchical', 'yes' ) ) {
- return $this->render_hierarchy( $params );
- }
-
- $output = '';
- $values = (array) $params['values'];
- $soft_limit = empty( $facet['soft_limit'] ) ? 0 : (int) $facet['soft_limit'];
-
- $key = 0;
- foreach ( $values as $key => $row ) {
- if ( 0 < $soft_limit && $key == $soft_limit ) {
- $output .= '';
- }
- $output .= $this->render_choice( $row, $params );
- }
-
- if ( 0 < $soft_limit && $soft_limit <= $key ) {
- $output .= '
';
- $output .= '' . __( 'See {num} more', 'fwp-front' ) . ' ';
- $output .= '' . __( 'See less', 'fwp-front' ) . ' ';
- }
-
- return $output;
- }
-
-
- /**
- * Generate the facet HTML (hierarchical taxonomies)
- */
- function render_hierarchy( $params ) {
-
- $output = '';
- $facet = $params['facet'];
- $values = FWP()->helper->sort_taxonomy_values( $params['values'], $facet['orderby'] );
-
- $init_depth = -1;
- $last_depth = -1;
-
- foreach ( $values as $row ) {
- $depth = (int) $row['depth'];
-
- if ( -1 == $last_depth ) {
- $init_depth = $depth;
- }
- elseif ( $depth > $last_depth ) {
- $output .= '';
- }
- elseif ( $depth < $last_depth ) {
- for ( $i = $last_depth; $i > $depth; $i-- ) {
- $output .= '
';
- }
- }
-
- $output .= $this->render_choice( $row, $params );
-
- $last_depth = $depth;
- }
-
- for ( $i = $last_depth; $i > $init_depth; $i-- ) {
- $output .= '';
- }
-
- return $output;
- }
-
-
- /**
- * Render a single facet choice
- */
- function render_choice( $row, $params ) {
- $label = esc_html( $row['facet_display_value'] );
-
- $output = '';
- $selected_values = (array) $params['selected_values'];
- $selected = in_array( $row['facet_value'], $selected_values ) ? ' checked' : '';
- $selected .= ( '' != $row['counter'] && 0 == $row['counter'] && '' == $selected ) ? ' disabled' : '';
- $output .= '';
- $output .= '';
- $output .= apply_filters( 'facetwp_facet_display_value', $label, [
- 'selected' => ( '' !== $selected ),
- 'facet' => $params['facet'],
- 'row' => $row
- ]);
- $output .= ' ';
- $output .= '(' . $row['counter'] . ') ';
- $output .= '
';
- return $output;
- }
-
-
- /**
- * Filter the query based on selected values
- */
- function filter_posts( $params ) {
- global $wpdb;
-
- $output = [];
- $facet = $params['facet'];
- $selected_values = $params['selected_values'];
-
- $sql = $wpdb->prepare( "SELECT DISTINCT post_id
- FROM {$wpdb->prefix}facetwp_index
- WHERE facet_name = %s",
- $facet['name']
- );
-
- // Match ALL values
- if ( 'and' == $facet['operator'] ) {
- foreach ( $selected_values as $key => $value ) {
- $results = facetwp_sql( $sql . " AND facet_value IN ('$value')", $facet );
- $output = ( $key > 0 ) ? array_intersect( $output, $results ) : $results;
-
- if ( empty( $output ) ) {
- break;
- }
- }
- }
- // Match ANY value
- else {
- $selected_values = implode( "','", $selected_values );
- $output = facetwp_sql( $sql . " AND facet_value IN ('$selected_values')", $facet );
- }
-
- return $output;
- }
-
-
- /**
- * Output any front-end scripts
- */
- function front_scripts() {
- FWP()->display->json['expand'] = '[+]';
- FWP()->display->json['collapse'] = '[-]';
- }
-
-
- /**
- * (Front-end) Attach settings to the AJAX response
- */
- function settings_js( $params ) {
- $expand = empty( $params['facet']['show_expanded'] ) ? 'no' : $params['facet']['show_expanded'];
- return [ 'show_expanded' => $expand ];
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/facets/date_range.php b/wp/wp-content/plugins/facetwp/includes/facets/date_range.php
deleted file mode 100644
index e1507dfe..00000000
--- a/wp/wp-content/plugins/facetwp/includes/facets/date_range.php
+++ /dev/null
@@ -1,292 +0,0 @@
-label = __( 'Date Range', 'fwp' );
- $this->fields = [ 'source_other', 'compare_type', 'date_fields', 'date_format' ];
- }
-
-
- /**
- * Generate the facet HTML
- */
- function render( $params ) {
-
- $output = '';
- $value = $params['selected_values'];
- $value = empty( $value ) ? [ '', '' ] : $value;
- $fields = empty( $params['facet']['fields'] ) ? 'both' : $params['facet']['fields'];
-
- $text_date = facetwp_i18n( __( 'Date', 'fwp-front' ) );
- $text_start_date = facetwp_i18n( __( 'Start Date', 'fwp-front' ) );
- $text_end_date = facetwp_i18n( __( 'End Date', 'fwp-front' ) );
-
- if ( 'exact' == $fields ) {
- $output .= ' ';
- }
- if ( 'both' == $fields || 'start_date' == $fields ) {
- $output .= ' ';
- }
- if ( 'both' == $fields || 'end_date' == $fields ) {
- $output .= ' ';
- }
-
- return $output;
- }
-
-
- /**
- * Filter the query based on selected values
- */
- function filter_posts( $params ) {
- global $wpdb;
-
- $facet = $params['facet'];
- $values = $params['selected_values'];
- $where = '';
-
- $min = empty( $values[0] ) ? false : $values[0];
- $max = empty( $values[1] ) ? false : $values[1];
-
- $fields = $facet['fields'] ?? 'both';
- $compare_type = empty( $facet['compare_type'] ) ? 'basic' : $facet['compare_type'];
- $is_dual = ! empty( $facet['source_other'] );
-
- if ( $is_dual && 'basic' != $compare_type ) {
- if ( 'exact' == $fields ) {
- $max = $min;
- }
-
- $min = ( false !== $min ) ? $min : '0000-00-00';
- $max = ( false !== $max ) ? $max : '3000-12-31';
-
- /**
- * Enclose compare
- * The post's range must surround the user-defined range
- */
- if ( 'enclose' == $compare_type ) {
- $where .= " AND LEFT(facet_value, 10) <= '$min'";
- $where .= " AND LEFT(facet_display_value, 10) >= '$max'";
- }
-
- /**
- * Intersect compare
- * @link http://stackoverflow.com/a/325964
- */
- if ( 'intersect' == $compare_type ) {
- $where .= " AND LEFT(facet_value, 10) <= '$max'";
- $where .= " AND LEFT(facet_display_value, 10) >= '$min'";
- }
- }
-
- /**
- * Basic compare
- * The user-defined range must surround the post's range
- */
- else {
- if ( 'exact' == $fields ) {
- $max = $min;
- }
- if ( false !== $min ) {
- $where .= " AND LEFT(facet_value, 10) >= '$min'";
- }
- if ( false !== $max ) {
- $where .= " AND LEFT(facet_display_value, 10) <= '$max'";
- }
- }
-
- $sql = "
- SELECT DISTINCT post_id FROM {$wpdb->prefix}facetwp_index
- WHERE facet_name = '{$facet['name']}' $where";
- return facetwp_sql( $sql, $facet );
- }
-
-
- /**
- * Output any front-end scripts
- */
- function front_scripts() {
- FWP()->display->assets['fDate.css'] = FACETWP_URL . '/assets/vendor/fDate/fDate.css';
- FWP()->display->assets['fDate.js'] = FACETWP_URL . '/assets/vendor/fDate/fDate.min.js';
- }
-
-
- function register_fields() {
- return [
- 'date_fields' => [
- 'type' => 'alias',
- 'items' => [
- 'fields' => [
- 'type' => 'select',
- 'label' => __( 'Fields to show', 'fwp' ),
- 'choices' => [
- 'both' => __( 'Start + End Dates', 'fwp' ),
- 'exact' => __( 'Exact Date', 'fwp' ),
- 'start_date' => __( 'Start Date', 'fwp' ),
- 'end_date' => __( 'End Date', 'fwp' )
- ]
- ]
- ]
- ],
- 'date_format' => [
- 'type' => 'alias',
- 'items' => [
- 'format' => [
- 'label' => __( 'Display format', 'fwp' ),
- 'notes' => 'See available formatting tokens ',
- 'placeholder' => 'Y-m-d'
- ]
- ]
- ]
- ];
- }
-
-
- /**
- * (Front-end) Attach settings to the AJAX response
- */
- function settings_js( $params ) {
- global $wpdb;
-
- $facet = $params['facet'];
- $selected_values = $params['selected_values'];
- $fields = empty( $facet['fields'] ) ? 'both' : $facet['fields'];
- $format = empty( $facet['format'] ) ? '' : $facet['format'];
-
- // Use "OR" mode by excluding the facet's own selection
- $where_clause = $this->get_where_clause( $facet );
-
- $sql = "
- SELECT MIN(facet_value) AS `minDate`, MAX(facet_display_value) AS `maxDate` FROM {$wpdb->prefix}facetwp_index
- WHERE facet_name = '{$facet['name']}' AND facet_display_value != '' $where_clause";
- $row = $wpdb->get_row( $sql );
-
- $min = substr( $row->minDate, 0, 10 );
- $max = substr( $row->maxDate, 0, 10 );
-
- if ( 'both' == $fields ) {
- $min_upper = ! empty( $selected_values[1] ) ? $selected_values[1] : $max;
- $max_lower = ! empty( $selected_values[0] ) ? $selected_values[0] : $min;
-
- $range = [
- 'min' => [
- 'minDate' => $min,
- 'maxDate' => $min_upper
- ],
- 'max' => [
- 'minDate' => $max_lower,
- 'maxDate' => $max
- ]
- ];
- }
- else {
- $range = [
- 'minDate' => $min,
- 'maxDate' => $max
- ];
- }
-
- return [
- 'locale' => $this->get_i18n_labels(),
- 'format' => $format,
- 'fields' => $fields,
- 'range' => $range
- ];
- }
-
-
- function get_i18n_labels() {
- $locale = get_locale();
- $locale = empty( $locale ) ? 'en' : substr( $locale, 0, 2 );
-
- $locales = [
- 'ca' => [
- 'weekdays_short' => ['Dg', 'Dl', 'Dt', 'Dc', 'Dj', 'Dv', 'Ds'],
- 'months_short' => ['Gen', 'Febr', 'Març', 'Abr', 'Maig', 'Juny', 'Jul', 'Ag', 'Set', 'Oct', 'Nov', 'Des'],
- 'months' => ['Gener', 'Febrer', 'Març', 'Abril', 'Maig', 'Juny', 'Juliol', 'Agost', 'Setembre', 'Octubre', 'Novembre', 'Desembre'],
- 'firstDayOfWeek' => 1
- ],
- 'da' => [
- 'weekdays_short' => ['søn', 'man', 'tir', 'ons', 'tors', 'fre', 'lør'],
- 'months_short' => ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
- 'months' => ['januar', 'februar', 'marts', 'april', 'maj', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'december'],
- 'firstDayOfWeek' => 1
- ],
- 'de' => [
- 'weekdays_short' => ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
- 'months_short' => ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
- 'months' => ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
- 'firstDayOfWeek' => 1
- ],
- 'es' => [
- 'weekdays_short' => ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'],
- 'months_short' => ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
- 'months' => ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
- 'firstDayOfWeek' => 1
- ],
- 'fr' => [
- 'weekdays_short' => ['dim', 'lun', 'mar', 'mer', 'jeu', 'ven', 'sam'],
- 'months_short' => ['janv', 'févr', 'mars', 'avr', 'mai', 'juin', 'juil', 'août', 'sept', 'oct', 'nov', 'déc'],
- 'months' => ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
- 'firstDayOfWeek' => 1
- ],
- 'it' => [
- 'weekdays_short' => ['Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'],
- 'months_short' => ['Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'],
- 'months' => ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'],
- 'firstDayOfWeek' => 1
- ],
- 'nb' => [
- 'weekdays_short' => ['Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør'],
- 'months_short' => ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
- 'months' => ['Januar', 'Februar', 'Mars', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Desember'],
- 'firstDayOfWeek' => 1
- ],
- 'nl' => [
- 'weekdays_short' => ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
- 'months_short' => ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun', 'jul', 'aug', 'sept', 'okt', 'nov', 'dec'],
- 'months' => ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
- 'firstDayOfWeek' => 1
- ],
- 'pl' => [
- 'weekdays_short' => ['Nd', 'Pn', 'Wt', 'Śr', 'Cz', 'Pt', 'So'],
- 'months_short' => ['Sty', 'Lut', 'Mar', 'Kwi', 'Maj', 'Cze', 'Lip', 'Sie', 'Wrz', 'Paź', 'Lis', 'Gru'],
- 'months' => ['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'],
- 'firstDayOfWeek' => 1
- ],
- 'pt' => [
- 'weekdays_short' => ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],
- 'months_short' => ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],
- 'months' => ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],
- 'firstDayOfWeek' => 0
- ],
- 'ro' => [
- 'weekdays_short' => ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'],
- 'months_short' => ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', 'Iul', 'Aug', 'Sep', 'Oct', 'Noi', 'Dec'],
- 'months' => ['Ianuarie', 'Februarie', 'Martie', 'Aprilie', 'Mai', 'Iunie', 'Iulie', 'August', 'Septembrie', 'Octombrie', 'Noiembrie', 'Decembrie'],
- 'firstDayOfWeek' => 1
- ],
- 'ru' => [
- 'weekdays_short' => ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],
- 'months_short' => ['Янв', 'Фев', 'Март', 'Апр', 'Май', 'Июнь', 'Июль', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'],
- 'months' => ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
- 'firstDayOfWeek' => 1
- ],
- 'sv' => [
- 'weekdays_short' => ['Sön', 'Mån', 'Tis', 'Ons', 'Tor', 'Fre', 'Lör'],
- 'months_short' => ['Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'],
- 'months' => ['Januari', 'Februari', 'Mars', 'April', 'Maj', 'Juni', 'Juli', 'Augusti', 'September', 'Oktober', 'November', 'December'],
- 'firstDayOfWeek' => 1
- ]
- ];
-
- if ( isset( $locales[ $locale ] ) ) {
- $locales[ $locale ]['clearText'] = __( 'Clear', 'fwp-front' );
- return $locales[ $locale ];
- }
-
- return '';
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/facets/dropdown.php b/wp/wp-content/plugins/facetwp/includes/facets/dropdown.php
deleted file mode 100644
index 5d8b1dc1..00000000
--- a/wp/wp-content/plugins/facetwp/includes/facets/dropdown.php
+++ /dev/null
@@ -1,73 +0,0 @@
-label = __( 'Dropdown', 'fwp' );
- $this->fields = [ 'label_any', 'parent_term', 'modifiers', 'hierarchical', 'orderby', 'count' ];
- }
-
-
- /**
- * Load the available choices
- */
- function load_values( $params ) {
- return FWP()->helper->facet_types['checkboxes']->load_values( $params );
- }
-
-
- /**
- * Generate the facet HTML
- */
- function render( $params ) {
-
- $output = '';
- $facet = $params['facet'];
- $values = (array) $params['values'];
- $selected_values = (array) $params['selected_values'];
- $is_hierarchical = FWP()->helper->facet_is( $facet, 'hierarchical', 'yes' );
-
- if ( $is_hierarchical ) {
- $values = FWP()->helper->sort_taxonomy_values( $params['values'], $facet['orderby'] );
- }
-
- $label_any = empty( $facet['label_any'] ) ? __( 'Any', 'fwp-front' ) : $facet['label_any'];
- $label_any = facetwp_i18n( $label_any );
-
- $output .= '';
- $output .= '' . esc_attr( $label_any ) . ' ';
-
- foreach ( $values as $row ) {
- $selected = in_array( $row['facet_value'], $selected_values ) ? ' selected' : '';
- $indent = $is_hierarchical ? str_repeat( ' ', (int) $row['depth'] ) : '';
-
- // Determine whether to show counts
- $label = esc_attr( $row['facet_display_value'] );
- $label = apply_filters( 'facetwp_facet_display_value', $label, [
- 'selected' => ( '' !== $selected ),
- 'facet' => $facet,
- 'row' => $row
- ]);
-
- $show_counts = apply_filters( 'facetwp_facet_dropdown_show_counts', true, [ 'facet' => $facet ] );
-
- if ( $show_counts ) {
- $label .= ' (' . $row['counter'] . ')';
- }
-
- $output .= '' . $indent . $label . ' ';
- }
-
- $output .= ' ';
- return $output;
- }
-
-
- /**
- * Filter the query based on selected values
- */
- function filter_posts( $params ) {
- return FWP()->helper->facet_types['checkboxes']->filter_posts( $params );
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/facets/fselect.php b/wp/wp-content/plugins/facetwp/includes/facets/fselect.php
deleted file mode 100644
index fd530803..00000000
--- a/wp/wp-content/plugins/facetwp/includes/facets/fselect.php
+++ /dev/null
@@ -1,100 +0,0 @@
-label = __( 'fSelect', 'fwp' );
- $this->fields = [ 'label_any', 'parent_term', 'modifiers', 'hierarchical', 'multiple',
- 'ghosts', 'operator', 'orderby', 'count' ];
- }
-
-
- /**
- * Load the available choices
- */
- function load_values( $params ) {
- return FWP()->helper->facet_types['checkboxes']->load_values( $params );
- }
-
-
- /**
- * Generate the facet HTML
- */
- function render( $params ) {
-
- $output = '';
- $facet = $params['facet'];
- $values = (array) $params['values'];
- $selected_values = (array) $params['selected_values'];
- $is_hierarchical = FWP()->helper->facet_is( $facet, 'hierarchical', 'yes' );
-
- if ( $is_hierarchical ) {
- $values = FWP()->helper->sort_taxonomy_values( $params['values'], $facet['orderby'] );
- }
-
- $multiple = FWP()->helper->facet_is( $facet, 'multiple', 'yes' ) ? ' multiple="multiple"' : '';
- $label_any = empty( $facet['label_any'] ) ? __( 'Any', 'fwp-front' ) : $facet['label_any'];
- $label_any = facetwp_i18n( $label_any );
-
- $output .= '';
- $output .= '' . esc_html( $label_any ) . ' ';
-
- foreach ( $values as $row ) {
- $selected = in_array( $row['facet_value'], $selected_values, true ) ? ' selected' : '';
- $disabled = ( 0 == $row['counter'] && '' == $selected ) ? ' disabled' : '';
-
- $label = esc_html( $row['facet_display_value'] );
- $label = apply_filters( 'facetwp_facet_display_value', $label, [
- 'selected' => ( '' !== $selected ),
- 'facet' => $facet,
- 'row' => $row
- ]);
-
- $show_counts = apply_filters( 'facetwp_facet_dropdown_show_counts', true, [ 'facet' => $facet ] );
- $counter = $show_counts ? $row['counter'] : '';
- $depth = $is_hierarchical ? $row['depth'] : 0;
-
- $output .= '' . $label . ' ';
- }
-
- $output .= ' ';
- return $output;
- }
-
-
- /**
- * Filter the query based on selected values
- */
- function filter_posts( $params ) {
- return FWP()->helper->facet_types['checkboxes']->filter_posts( $params );
- }
-
-
- /**
- * (Front-end) Attach settings to the AJAX response
- */
- function settings_js( $params ) {
- $facet = $params['facet'];
-
- $label_any = empty( $facet['label_any'] ) ? __( 'Any', 'fwp-front' ) : $facet['label_any'];
- $label_any = facetwp_i18n( $label_any );
-
- return [
- 'placeholder' => $label_any,
- 'overflowText' => __( '{n} selected', 'fwp-front' ),
- 'searchText' => __( 'Search', 'fwp-front' ),
- 'noResultsText' => __( 'No results found', 'fwp-front' ),
- 'operator' => $facet['operator']
- ];
- }
-
-
- /**
- * Output any front-end scripts
- */
- function front_scripts() {
- FWP()->display->assets['fSelect.css'] = FACETWP_URL . '/assets/vendor/fSelect/fSelect.css';
- FWP()->display->assets['fSelect.js'] = FACETWP_URL . '/assets/vendor/fSelect/fSelect.js';
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/facets/hierarchy.php b/wp/wp-content/plugins/facetwp/includes/facets/hierarchy.php
deleted file mode 100644
index a9ff1c49..00000000
--- a/wp/wp-content/plugins/facetwp/includes/facets/hierarchy.php
+++ /dev/null
@@ -1,179 +0,0 @@
-label = __( 'Hierarchy', 'fwp' );
- $this->fields = [ 'label_any', 'modifiers', 'orderby', 'count' ];
- }
-
-
- /**
- * Load the available choices
- */
- function load_values( $params ) {
- global $wpdb;
-
- $facet = $params['facet'];
- $from_clause = $wpdb->prefix . 'facetwp_index f';
- $where_clause = $params['where_clause'];
-
- $selected_values = (array) $params['selected_values'];
- $facet_parent_id = 0;
- $output = [];
-
- $label_any = empty( $facet['label_any'] ) ? __( 'Any', 'fwp-front' ) : $facet['label_any'];
- $label_any = facetwp_i18n( $label_any );
-
- // Orderby
- $orderby = $this->get_orderby( $facet );
-
- // Determine the parent_id and depth
- if ( ! empty( $selected_values[0] ) ) {
-
- // Get term ID from slug
- $sql = "
- SELECT t.term_id
- FROM {$wpdb->terms} t
- INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_id = t.term_id AND tt.taxonomy = %s
- WHERE t.slug = %s
- LIMIT 1";
-
- $value = $selected_values[0];
- $taxonomy = str_replace( 'tax/', '', $facet['source'] );
- $facet_parent_id = (int) $wpdb->get_var( $wpdb->prepare( $sql, $taxonomy, $value ) );
-
- // Invalid term
- if ( $facet_parent_id < 1 ) {
- return [];
- }
-
- // Create term lookup array
- $depths = FWP()->helper->get_term_depths( $taxonomy );
- $max_depth = (int) $depths[ $facet_parent_id ]['depth'];
- $last_parent_id = $facet_parent_id;
-
- // Loop backwards
- for ( $i = 0; $i <= $max_depth; $i++ ) {
- $output[] = [
- 'facet_value' => $depths[ $last_parent_id ]['slug'],
- 'facet_display_value' => $depths[ $last_parent_id ]['name'],
- 'depth' => $depths[ $last_parent_id ]['depth'] + 1,
- 'counter' => 1, // FWP.settings.num_choices
- ];
-
- $last_parent_id = (int) $depths[ $last_parent_id ]['parent_id'];
- }
-
- $output[] = [
- 'facet_value' => '',
- 'facet_display_value' => $label_any,
- 'depth' => 0,
- 'counter' => 1,
- ];
-
- // Reverse it
- $output = array_reverse( $output );
- }
-
- // Update the WHERE clause
- $where_clause .= " AND parent_id = '$facet_parent_id'";
-
- $orderby = apply_filters( 'facetwp_facet_orderby', $orderby, $facet );
- $from_clause = apply_filters( 'facetwp_facet_from', $from_clause, $facet );
- $where_clause = apply_filters( 'facetwp_facet_where', $where_clause, $facet );
-
- $sql = "
- SELECT f.facet_value, f.facet_display_value, COUNT(DISTINCT f.post_id) AS counter
- FROM $from_clause
- WHERE f.facet_name = '{$facet['name']}' $where_clause
- GROUP BY f.facet_value
- ORDER BY $orderby";
-
- $results = $wpdb->get_results( $sql, ARRAY_A );
- $new_depth = empty( $output ) ? 0 : $output[ count( $output ) - 1 ]['depth'] + 1;
-
- foreach ( $results as $result ) {
- $result['depth'] = $new_depth;
- $result['is_choice'] = true;
- $output[] = $result;
- }
-
- return $output;
- }
-
-
- /**
- * Generate the facet HTML
- */
- function render( $params ) {
- $facet = $params['facet'];
- $values = (array) $params['values'];
- $selected_values = (array) $params['selected_values'];
-
- $output = '';
- $num_visible = $this->get_limit( $facet );
- $num = 0;
-
- if ( ! empty( $values ) ) {
- foreach ( $values as $row ) {
- $last_depth = $last_depth ?? $row['depth'];
- $selected = ( ! empty( $selected_values ) && $row['facet_value'] == $selected_values[0] );
-
- $label = esc_html( $row['facet_display_value'] );
- $label = apply_filters( 'facetwp_facet_display_value', $label, [
- 'selected' => $selected,
- 'facet' => $facet,
- 'row' => $row
- ]);
-
- if ( $row['depth'] > $last_depth ) {
- $output .= '';
- }
-
- if ( $num == $num_visible ) {
- $output .= '
';
- }
-
- if ( ! $selected ) {
- if ( isset( $row['is_choice'] ) ) {
- $label .= '
(' . $row['counter'] . ') ';
- }
- else {
- $arrow = apply_filters( 'facetwp_facet_hierarchy_arrow', '‹ ' );
- $label = $arrow . $label;
- }
- }
-
- $output .= '
' . $label . '
';
-
- if ( isset( $row['is_choice'] ) ) {
- $num++;
- }
-
- $last_depth = $row['depth'];
- }
-
- if ( $num_visible < $num ) {
- $output .= '
';
- $output .= '
' . __( 'See more', 'fwp-front' ) . ' ';
- $output .= '
' . __( 'See less', 'fwp-front' ) . ' ';
- }
-
- for ( $i = 0; $i <= $last_depth; $i++ ) {
- $output .= '
';
- }
- }
-
- return $output;
- }
-
-
- /**
- * Filter the query based on selected values
- */
- function filter_posts( $params ) {
- return FWP()->helper->facet_types['checkboxes']->filter_posts( $params );
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/facets/number_range.php b/wp/wp-content/plugins/facetwp/includes/facets/number_range.php
deleted file mode 100644
index 889c2233..00000000
--- a/wp/wp-content/plugins/facetwp/includes/facets/number_range.php
+++ /dev/null
@@ -1,137 +0,0 @@
-label = __( 'Number Range', 'fwp' );
- $this->fields = [ 'source_other', 'compare_type', 'number_fields' ];
- }
-
-
- /**
- * Generate the facet HTML
- */
- function render( $params ) {
-
- $output = '';
- $value = $params['selected_values'];
- $value = empty( $value ) ? [ '', '', ] : $value;
- $fields = empty( $params['facet']['fields'] ) ? 'both' : $params['facet']['fields'];
-
- if ( 'exact' == $fields ) {
- $output .= ' ';
- }
- if ( 'both' == $fields || 'min' == $fields ) {
- $output .= ' ';
- }
- if ( 'both' == $fields || 'max' == $fields ) {
- $output .= ' ';
- }
-
- $output .= ' ';
-
- return $output;
- }
-
-
- /**
- * Filter the query based on selected values
- */
- function filter_posts( $params ) {
- global $wpdb;
-
- $facet = $params['facet'];
- $values = $params['selected_values'];
- $where = '';
-
- $min = ( '' == $values[0] ) ? false : $values[0];
- $max = ( '' == $values[1] ) ? false : $values[1];
-
- $fields = $facet['fields'] ?? 'both';
- $compare_type = empty( $facet['compare_type'] ) ? 'basic' : $facet['compare_type'];
- $is_dual = ! empty( $facet['source_other'] );
-
- if ( $is_dual && 'basic' != $compare_type ) {
- if ( 'exact' == $fields ) {
- $max = $min;
- }
-
- $min = ( false !== $min ) ? $min : -999999999999;
- $max = ( false !== $max ) ? $max : 999999999999;
-
- /**
- * Enclose compare
- * The post's range must surround the user-defined range
- */
- if ( 'enclose' == $compare_type ) {
- $where .= " AND (facet_value + 0) <= '$min'";
- $where .= " AND (facet_display_value + 0) >= '$max'";
- }
-
- /**
- * Intersect compare
- * @link http://stackoverflow.com/a/325964
- */
- if ( 'intersect' == $compare_type ) {
- $where .= " AND (facet_value + 0) <= '$max'";
- $where .= " AND (facet_display_value + 0) >= '$min'";
- }
- }
-
- /**
- * Basic compare
- * The user-defined range must surround the post's range
- */
- else {
- if ( 'exact' == $fields ) {
- $max = $min;
- }
- if ( false !== $min ) {
- $where .= " AND (facet_value + 0) >= '$min'";
- }
- if ( false !== $max ) {
- $where .= " AND (facet_display_value + 0) <= '$max'";
- }
- }
-
- $sql = "
- SELECT DISTINCT post_id FROM {$wpdb->prefix}facetwp_index
- WHERE facet_name = '{$facet['name']}' $where";
- return facetwp_sql( $sql, $facet );
- }
-
-
- function register_fields() {
- return [
- 'number_fields' => [
- 'type' => 'alias',
- 'items' => [
- 'fields' => [
- 'type' => 'select',
- 'label' => __( 'Fields to show', 'fwp' ),
- 'choices' => [
- 'both' => __( 'Min + Max', 'fwp' ),
- 'exact' => __( 'Exact', 'fwp' ),
- 'min' => __( 'Min', 'fwp' ),
- 'max' => __( 'Max', 'fwp' )
- ]
- ]
- ]
- ]
- ];
- }
-
-
- /**
- * (Front-end) Attach settings to the AJAX response
- */
- function settings_js( $params ) {
- $facet = $params['facet'];
- $fields = empty( $facet['fields'] ) ? 'both' : $facet['fields'];
-
- return [
- 'fields' => $fields
- ];
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/facets/pager.php b/wp/wp-content/plugins/facetwp/includes/facets/pager.php
deleted file mode 100644
index 8162c79d..00000000
--- a/wp/wp-content/plugins/facetwp/includes/facets/pager.php
+++ /dev/null
@@ -1,277 +0,0 @@
-label = __( 'Pager', 'fwp' );
- $this->fields = [ 'pager_type', 'inner_size', 'dots_label', 'prev_label', 'next_label',
- 'count_text_plural', 'count_text_singular', 'count_text_none', 'load_more_text',
- 'loading_text', 'default_label', 'per_page_options' ];
- }
-
-
- /**
- * Generate the facet HTML
- */
- function render( $params ) {
- $facet = $params['facet'];
- $pager_type = $facet['pager_type'];
- $this->pager_args = FWP()->facet->pager_args;
-
- $method = 'render_' . $pager_type;
- if ( method_exists( $this, $method ) ) {
- return $this->$method( $facet );
- }
- }
-
-
- function render_numbers( $facet ) {
- $inner_size = (int) $facet['inner_size'];
- $dots_label = facetwp_i18n( $facet['dots_label'] );
- $prev_label = facetwp_i18n( $facet['prev_label'] );
- $next_label = facetwp_i18n( $facet['next_label'] );
-
- $output = '';
- $page = (int) $this->pager_args['page'];
- $total_pages = (int) $this->pager_args['total_pages'];
- $inner_first = max( $page - $inner_size, 2 );
- $inner_last = min( $page + $inner_size, $total_pages - 1 );
-
- if ( 1 < $total_pages ) {
-
- // Prev button
- if ( 1 < $page && '' != $prev_label ) {
- $output .= $this->render_page( $page - 1, $prev_label, 'prev' );
- }
-
- // First page
- $output .= $this->render_page( 1, false, 'first' );
-
- // Dots
- if ( 2 < $inner_first && '' != $dots_label ) {
- $output .= $this->render_page( '', $dots_label, 'dots' );
- }
-
- for ( $i = $inner_first; $i <= $inner_last; $i++ ) {
- $output .= $this->render_page( $i );
- }
-
- // Dots
- if ( $inner_last < $total_pages - 1 && '' != $dots_label ) {
- $output .= $this->render_page( '', $dots_label, 'dots' );
- }
-
- // Last page
- $output .= $this->render_page( $total_pages, false, 'last' );
-
- // Next button
- if ( $page < $total_pages && '' != $next_label ) {
- $output .= $this->render_page( $page + 1, $next_label, 'next' );
- }
- }
-
- return '';
- }
-
-
- function render_page( $page, $label = false, $extra_class = false ) {
- $label = ( false === $label ) ? $page : $label;
- $class = 'facetwp-page';
-
- if ( ! empty( $extra_class ) ) {
- $class .= ' ' . $extra_class;
- }
-
- if ( $page == $this->pager_args['page'] ) {
- $class .= ' active';
- }
-
- $data = empty( $page ) ? '' : ' data-page="' . $page . '"';
- $html = '' . $label . ' ';
-
- return apply_filters( 'facetwp_facet_pager_link', $html, [
- 'page' => $page,
- 'label' => $label,
- 'extra_class' => $extra_class
- ]);
- }
-
-
- function render_counts( $facet ) {
- $text_singular = facetwp_i18n( $facet['count_text_singular'] );
- $text_plural = facetwp_i18n( $facet['count_text_plural'] );
- $text_none = facetwp_i18n( $facet['count_text_none'] );
-
- $page = $this->pager_args['page'];
- $per_page = $this->pager_args['per_page'];
- $total_rows = $this->pager_args['total_rows'];
- $total_pages = $this->pager_args['total_pages'];
-
- if ( -1 == $per_page ) {
- $per_page = $total_rows;
- }
-
- if ( 1 < $total_rows ) {
- $lower = ( 1 + ( ( $page - 1 ) * $per_page ) );
- $upper = ( $page * $per_page );
- $upper = ( $total_rows < $upper ) ? $total_rows : $upper;
-
- // If a load_more pager is in use, force $lower = 1
- if ( FWP()->helper->facet_setting_exists( 'pager_type', 'load_more' ) ) {
- $lower = 1;
- }
-
- $output = $text_plural;
- $output = str_replace( '[lower]', $lower, $output );
- $output = str_replace( '[upper]', $upper, $output );
- $output = str_replace( '[total]', $total_rows, $output );
- $output = str_replace( '[page]', $page, $output );
- $output = str_replace( '[per_page]', $per_page, $output );
- $output = str_replace( '[total_pages]', $total_pages, $output );
- }
- else {
- $output = ( 0 < $total_rows ) ? $text_singular : $text_none;
- }
-
- return $output;
- }
-
-
- function render_load_more( $facet ) {
- $text = facetwp_i18n( $facet['load_more_text'] );
- $loading_text = facetwp_i18n( $facet['loading_text'] );
-
- return '' . esc_attr( $text ) . ' ';
- }
-
-
- function render_per_page( $facet ) {
- $default = facetwp_i18n( $facet['default_label'] );
- $options = explode( ',', $facet['per_page_options'] );
- $options = array_map( 'trim', $options );
- $output = '';
-
- if ( ! empty( $default ) ) {
- $output .= '' . esc_attr( $default ) . ' ';
- }
-
- $per_page = $this->pager_args['per_page'];
- $var_exists = isset( FWP()->request->url_vars['per_page'] );
-
- foreach ( $options as $option ) {
- $val = $label = $option;
-
- // Support "All" option
- if ( ! ctype_digit( $val ) ) {
- $val = -1;
- $label = facetwp_i18n( $label );
- }
-
- $selected = ( $var_exists && $val == $per_page ) ? ' selected' : '';
- $output .= '' . esc_attr( $label ) . ' ';
- }
-
- return '' . $output . ' ';
- }
-
-
- /**
- * Filter the query based on selected values
- */
- function filter_posts( $params ) {
- return 'continue';
- }
-
-
- /**
- * (Front-end) Attach settings to the AJAX response
- */
- function settings_js( $params ) {
- $facet = $params['facet'];
-
- return [
- 'pager_type' => $facet['pager_type']
- ];
- }
-
-
- function register_fields() {
- return [
- 'pager_type' => [
- 'type' => 'select',
- 'label' => __( 'Pager type', 'fwp' ),
- 'choices' => [
- 'numbers' => __( 'Page numbers', 'fwp' ),
- 'counts' => __( 'Result counts', 'fwp' ),
- 'load_more' => __( 'Load more', 'fwp' ),
- 'per_page' => __( 'Per page', 'fwp' )
- ]
- ],
- 'inner_size' => [
- 'label' => __( 'Inner size', 'fwp' ),
- 'notes' => 'Number of pages to show on each side of the current page',
- 'default' => 2,
- 'show' => "facet.pager_type == 'numbers'"
- ],
- 'dots_label' => [
- 'label' => __( 'Dots label', 'fwp' ),
- 'notes' => 'The filler between the inner and outer pages',
- 'default' => '…',
- 'show' => "facet.pager_type == 'numbers'"
- ],
- 'prev_label' => [
- 'label' => __( 'Prev button label', 'fwp' ),
- 'notes' => 'Leave blank to hide',
- 'default' => '« Prev',
- 'show' => "facet.pager_type == 'numbers'"
- ],
- 'next_label' => [
- 'label' => __( 'Next button label', 'fwp' ),
- 'notes' => 'Leave blank to hide',
- 'default' => 'Next »',
- 'show' => "facet.pager_type == 'numbers'"
- ],
- 'count_text_plural' => [
- 'label' => __( 'Count text (plural)', 'fwp' ),
- 'notes' => 'Available tags: [lower], [upper], [total], [page], [per_page], [total_pages]',
- 'default' => '[lower] - [upper] of [total] results',
- 'show' => "facet.pager_type == 'counts'"
- ],
- 'count_text_singular' => [
- 'label' => __( 'Count text (singular)', 'fwp' ),
- 'default' => '1 result',
- 'show' => "facet.pager_type == 'counts'"
- ],
- 'count_text_none' => [
- 'label' => __( 'Count text (no results)', 'fwp' ),
- 'default' => 'No results',
- 'show' => "facet.pager_type == 'counts'"
- ],
- 'load_more_text' => [
- 'label' => __( 'Load more text', 'fwp' ),
- 'default' => 'Load more',
- 'show' => "facet.pager_type == 'load_more'"
- ],
- 'loading_text' => [
- 'label' => __( 'Loading text', 'fwp' ),
- 'default' => 'Loading...',
- 'show' => "facet.pager_type == 'load_more'"
- ],
- 'default_label' => [
- 'label' => __( 'Default label', 'fwp' ),
- 'default' => 'Per page',
- 'show' => "facet.pager_type == 'per_page'"
- ],
- 'per_page_options' => [
- 'label' => __( 'Per page options', 'fwp' ),
- 'notes' => 'A comma-separated list of choices. Optionally add a non-numeric choice to be used as a "Show all" option.',
- 'default' => '10, 25, 50, 100',
- 'show' => "facet.pager_type == 'per_page'"
- ]
- ];
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/facets/proximity.php b/wp/wp-content/plugins/facetwp/includes/facets/proximity.php
deleted file mode 100644
index f9f23dfc..00000000
--- a/wp/wp-content/plugins/facetwp/includes/facets/proximity.php
+++ /dev/null
@@ -1,354 +0,0 @@
- distance */
- public $distance = [];
-
- /* (array) Associative array containing post_id => [lat, lng] */
- public $post_latlng = [];
-
-
- function __construct() {
- $this->label = __( 'Proximity', 'fwp' );
- $this->fields = [ 'longitude', 'unit', 'radius_ui', 'radius_options', 'radius_min', 'radius_max', 'radius_default' ];
-
- add_filter( 'facetwp_index_row', [ $this, 'index_latlng' ], 1, 2 );
- add_filter( 'facetwp_sort_options', [ $this, 'sort_options' ], 1, 2 );
- add_filter( 'facetwp_filtered_post_ids', [ $this, 'sort_by_distance' ], 10, 2 );
- }
-
-
- /**
- * Generate the facet HTML
- */
- function render( $params ) {
-
- $output = '';
- $facet = $params['facet'];
- $value = $params['selected_values'];
- $unit = empty( $facet['unit'] ) ? 'mi' : $facet['unit'];
-
- $lat = empty( $value[0] ) ? '' : $value[0];
- $lng = empty( $value[1] ) ? '' : $value[1];
- $chosen_radius = empty( $value[2] ) ? '' : (float) $value[2];
- $location_name = empty( $value[3] ) ? '' : urldecode( $value[3] );
-
- $radius_options = [ 10, 25, 50, 100, 250 ];
-
- // Grab the radius UI
- $radius_ui = empty( $facet['radius_ui'] ) ? 'dropdown' : $facet['radius_ui'];
-
- // Grab radius options from the UI
- if ( ! empty( $facet['radius_options'] ) ) {
- $radius_options = explode( ',', preg_replace( '/\s+/', '', $facet['radius_options'] ) );
- }
-
- // Grab default radius from the UI
- if ( empty( $chosen_radius ) && ! empty( $facet['radius_default'] ) ) {
- $chosen_radius = (float) $facet['radius_default'];
- }
-
- // Support dynamic radius
- if ( ! empty( $chosen_radius ) && 0 < $chosen_radius ) {
- if ( ! in_array( $chosen_radius, $radius_options ) ) {
- $radius_options[] = $chosen_radius;
- }
- }
-
- $radius_options = apply_filters( 'facetwp_proximity_radius_options', $radius_options );
-
- ob_start();
-?>
-
-
-
-
-
-
-
-
-
-
-
-
- >
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-prefix}facetwp_index
- WHERE facet_name = '{$facet['name']}'";
-
- $results = $wpdb->get_results( $sql );
-
- foreach ( $results as $row ) {
- $lat2 = (float) $row->lat;
- $lng2 = (float) $row->lng;
-
- if ( ( $lat1 == $lat2 ) && ( $lng1 == $lng2 ) ) {
- $dist = 0;
- }
- else {
- $calc = sin( $lat1 * $rad ) * sin( $lat2 * $rad ) +
- cos( $lat1 * $rad ) * cos( $lat2 * $rad ) *
- cos( $lng2 * $rad - $lng1 * $rad );
-
- // acos() must be between -1 and 1
- $dist = acos( max( -1, min( 1, $calc ) ) ) * $earth_radius;
- }
-
- if ( $dist <= $radius ) {
- $existing = $this->distance[ $row->post_id ] ?? -1;
-
- if ( -1 == $existing || $dist < $existing ) {
- $this->distance[ $row->post_id ] = $dist;
-
- if ( apply_filters( 'facetwp_proximity_store_latlng', false ) ) {
- $this->post_latlng[ $row->post_id ] = [ $lat2, $lng2 ];
- }
- }
- }
- }
-
- asort( $this->distance, SORT_NUMERIC );
-
- return array_keys( $this->distance );
- }
-
-
- /**
- * Output front-end scripts
- */
- function front_scripts() {
- if ( apply_filters( 'facetwp_proximity_load_js', true ) ) {
-
- // hard-coded
- $api_key = defined( 'GMAPS_API_KEY' ) ? GMAPS_API_KEY : '';
-
- // admin ui
- $tmp_key = FWP()->helper->get_setting( 'gmaps_api_key' );
- $api_key = empty( $tmp_key ) ? $api_key : $tmp_key;
-
- // hook
- $api_key = apply_filters( 'facetwp_gmaps_api_key', $api_key );
-
- FWP()->display->assets['gmaps'] = '//maps.googleapis.com/maps/api/js?libraries=places&key=' . trim( $api_key ) . '&callback=Function.prototype';
- }
-
- // Pass extra options into Places Autocomplete
- $options = apply_filters( 'facetwp_proximity_autocomplete_options', [] );
- FWP()->display->json['proximity']['autocomplete_options'] = $options;
- FWP()->display->json['proximity']['clearText'] = __( 'Clear location', 'fwp-front' );
- FWP()->display->json['proximity']['queryDelay'] = 250;
- FWP()->display->json['proximity']['minLength'] = 3;
- }
-
-
- function register_fields() {
- return [
- 'longitude' => [
- 'type' => 'alias',
- 'items' => [
- 'source_other' => [
- 'label' => __( 'Longitude', 'fwp' ),
- 'notes' => '(Optional) use a separate longitude field',
- 'html' => ' '
- ]
- ]
- ],
- 'unit' => [
- 'type' => 'select',
- 'label' => __( 'Unit of measurement', 'fwp' ),
- 'choices' => [
- 'mi' => __( 'Miles', 'fwp' ),
- 'km' => __( 'Kilometers', 'fwp' )
- ]
- ],
- 'radius_ui' => [
- 'type' => 'select',
- 'label' => __( 'Radius UI', 'fwp' ),
- 'choices' => [
- 'dropdown' => __( 'Dropdown', 'fwp' ),
- 'slider' => __( 'Slider', 'fwp' ),
- 'none' => __( 'None', 'fwp' )
- ]
- ],
- 'radius_options' => [
- 'label' => __( 'Radius options', 'fwp' ),
- 'notes' => 'A comma-separated list of radius choices',
- 'default' => '10, 25, 50, 100, 250',
- 'show' => "facet.radius_ui == 'dropdown'"
- ],
- 'radius_min' => [
- 'label' => __( 'Range (min)', 'fwp' ),
- 'default' => 1,
- 'show' => "facet.radius_ui == 'slider'"
- ],
- 'radius_max' => [
- 'label' => __( 'Range (max)', 'fwp' ),
- 'default' => 50,
- 'show' => "facet.radius_ui == 'slider'"
- ],
- 'radius_default' => [
- 'label' => __( 'Default radius', 'fwp' ),
- 'default' => 25
- ]
- ];
- }
-
-
- /**
- * Index the coordinates
- * We expect a comma-separated "latitude, longitude"
- */
- function index_latlng( $params, $class ) {
-
- $facet = FWP()->helper->get_facet_by_name( $params['facet_name'] );
-
- if ( false !== $facet && 'proximity' == $facet['type'] ) {
- $latlng = $params['facet_value'];
-
- // Only handle "lat, lng" strings
- if ( ! empty( $latlng ) && is_string( $latlng ) ) {
- $latlng = preg_replace( '/[^0-9.,-]/', '', $latlng );
-
- if ( ! empty( $facet['source_other'] ) ) {
- $other_params = $params;
- $other_params['facet_source'] = $facet['source_other'];
- $rows = $class->get_row_data( $other_params );
-
- if ( ! empty( $rows ) && false === strpos( $latlng, ',' ) ) {
- $lng = $rows[0]['facet_display_value'];
- $lng = preg_replace( '/[^0-9.,-]/', '', $lng );
- $latlng .= ',' . $lng;
- }
- }
-
- if ( preg_match( "/^([\d.-]+),([\d.-]+)$/", $latlng ) ) {
- $latlng = explode( ',', $latlng );
- $params['facet_value'] = $latlng[0];
- $params['facet_display_value'] = $latlng[1];
- }
- }
- }
-
- return $params;
- }
-
-
- /**
- * Add "Distance" to the sort box
- */
- function sort_options( $options, $params ) {
-
- if ( FWP()->helper->facet_setting_exists( 'type', 'proximity' ) ) {
- $options['distance'] = [
- 'label' => __( 'Distance', 'fwp-front' ),
- 'query_args' => [
- 'orderby' => 'post__in',
- 'order' => 'ASC',
- ],
- ];
- }
-
- return $options;
- }
-
-
- /**
- * Sort the final (filtered) post IDs by distance
- */
- function sort_by_distance( $post_ids, $class ) {
-
- $distance = FWP()->helper->facet_types['proximity']->distance;
-
- if ( ! empty( $distance ) ) {
- $ordered_posts = array_keys( $distance );
- $filtered_posts = array_flip( $post_ids );
- $intersected_ids = [];
-
- foreach ( $ordered_posts as $p ) {
- if ( isset( $filtered_posts[ $p ] ) ) {
- $intersected_ids[] = $p;
- }
- }
-
- $post_ids = $intersected_ids;
- }
-
- return $post_ids;
- }
-}
-
-
-/**
- * Get a post's distance
- */
-function facetwp_get_distance( $post_id = false ) {
- global $post;
-
- // Get the post ID
- $post_id = ( false === $post_id ) ? $post->ID : $post_id;
-
- // Get the proximity class
- $facet_type = FWP()->helper->facet_types['proximity'];
-
- // Get the distance
- $distance = $facet_type->distance[ $post_id ] ?? -1;
-
- if ( -1 < $distance ) {
- return apply_filters( 'facetwp_proximity_distance_output', $distance );
- }
-
- return false;
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/facets/radio.php b/wp/wp-content/plugins/facetwp/includes/facets/radio.php
deleted file mode 100644
index 9407ecb6..00000000
--- a/wp/wp-content/plugins/facetwp/includes/facets/radio.php
+++ /dev/null
@@ -1,64 +0,0 @@
-label = __( 'Radio', 'fwp' );
- $this->fields = [ 'label_any', 'parent_term', 'modifiers', 'ghosts', 'orderby', 'count' ];
- }
-
-
- /**
- * Load the available choices
- */
- function load_values( $params ) {
- $params['facet']['operator'] = 'or';
- return FWP()->helper->facet_types['checkboxes']->load_values( $params );
- }
-
-
- /**
- * Generate the facet HTML
- */
- function render( $params ) {
-
- $output = '';
- $facet = $params['facet'];
- $values = (array) $params['values'];
- $selected_values = (array) $params['selected_values'];
- $label_any = empty( $facet['label_any'] ) ? false : facetwp_i18n( $facet['label_any'] );
-
- if ( $label_any ) {
- $selected = empty( $selected_values ) ? ' checked' : '';
- $output .= '' . esc_attr( $label_any ) . '
';
- }
-
- foreach ( $values as $row ) {
- $label = esc_html( $row['facet_display_value'] );
- $selected = in_array( $row['facet_value'], $selected_values ) ? ' checked' : '';
- $selected .= ( 0 == $row['counter'] && '' == $selected ) ? ' disabled' : '';
- $output .= '';
- $output .= '';
- $output .= apply_filters( 'facetwp_facet_display_value', $label, [
- 'selected' => ( '' !== $selected ),
- 'facet' => $facet,
- 'row' => $row
- ]);
- $output .= ' ';
- $output .= '(' . $row['counter'] . ') ';
- $output .= '
';
- }
-
- return $output;
- }
-
-
- /**
- * Filter the query based on selected values
- */
- function filter_posts( $params ) {
- $params['facet']['operator'] = 'or';
- return FWP()->helper->facet_types['checkboxes']->filter_posts( $params );
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/facets/rating.php b/wp/wp-content/plugins/facetwp/includes/facets/rating.php
deleted file mode 100644
index e644a981..00000000
--- a/wp/wp-content/plugins/facetwp/includes/facets/rating.php
+++ /dev/null
@@ -1,114 +0,0 @@
-label = __( 'Star Rating', 'fwp' );
- $this->fields = [];
- }
-
-
- /**
- * Load the available choices
- */
- function load_values( $params ) {
- global $wpdb;
-
- $facet = $params['facet'];
- $from_clause = $wpdb->prefix . 'facetwp_index f';
-
- // Facet in "OR" mode
- $where_clause = $this->get_where_clause( $facet );
-
- $output = [
- 1 => [ 'counter' => 0 ],
- 2 => [ 'counter' => 0 ],
- 3 => [ 'counter' => 0 ],
- 4 => [ 'counter' => 0 ],
- 5 => [ 'counter' => 0 ]
- ];
-
- $sql = "
- SELECT COUNT(*) AS `count`, FLOOR(f.facet_value) AS `rating`
- FROM $from_clause
- WHERE f.facet_name = '{$facet['name']}' AND FLOOR(f.facet_value) >= 1 $where_clause
- GROUP BY rating";
-
- $results = $wpdb->get_results( $sql );
-
- foreach ( $results as $result ) {
- $output[ $result->rating ]['counter'] = $result->count;
- }
-
- $total = 0;
-
- // The lower rating should include higher rating counts
- for ( $i = 5; $i > 0; $i-- ) {
- $output[ $i ]['counter'] += $total;
- $total = $output[ $i ]['counter'];
- }
-
- return $output;
- }
-
-
- /**
- * Generate the facet HTML
- */
- function render( $params ) {
-
- $output = '';
- $facet = $params['facet'];
- $values = (array) $params['values'];
- $selected_values = (array) $params['selected_values'];
-
- $num_stars = 0;
- foreach ( $values as $val ) {
- if ( 0 < $val['counter'] ) {
- $num_stars++;
- }
- }
-
- if ( 0 < $num_stars ) {
- $output .= '';
-
- for ( $i = $num_stars; $i >= 1; $i-- ) {
- $class = in_array( $i, $selected_values ) ? ' selected' : '';
- $output .= '★ ';
- }
-
- $output .= ' ';
- $output .= ' ';
- $output .= ' ';
- }
-
- return $output;
- }
-
-
- /**
- * Filter the query based on selected values
- */
- function filter_posts( $params ) {
- global $wpdb;
-
- $facet = $params['facet'];
- $selected_values = $params['selected_values'];
- $selected_values = is_array( $selected_values ) ? $selected_values[0] : $selected_values;
-
- $sql = "
- SELECT DISTINCT post_id FROM {$wpdb->prefix}facetwp_index
- WHERE facet_name = '{$facet['name']}' AND facet_value >= '$selected_values'";
- return $wpdb->get_col( $sql );
- }
-
-
- /**
- * Output front-end scripts
- */
- function front_scripts() {
- FWP()->display->json['rating']['& up'] = __( '& up', 'fwp-front' );
- FWP()->display->json['rating']['Undo'] = __( 'Undo', 'fwp-front' );
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/facets/reset.php b/wp/wp-content/plugins/facetwp/includes/facets/reset.php
deleted file mode 100644
index 75048d85..00000000
--- a/wp/wp-content/plugins/facetwp/includes/facets/reset.php
+++ /dev/null
@@ -1,85 +0,0 @@
-label = __( 'Reset', 'fwp' );
- $this->fields = [ 'reset_ui', 'reset_text', 'reset_mode', 'reset_facets', 'auto_hide' ];
- }
-
-
- function render( $params ) {
- $facet = $params['facet'];
- $reset_ui = $facet['reset_ui'];
- $reset_text = empty( $facet['reset_text'] ) ? __( 'Reset', 'fwp-front' ) : $facet['reset_text'];
- $reset_text = facetwp_i18n( $reset_text );
-
- $classes = [ 'facetwp-reset' ];
- $attrs = '';
-
- if ( ! FWP()->helper->facet_is( $facet, 'reset_mode', 'off' ) ) {
- if ( ! empty( $facet['reset_facets'] ) ) {
- $vals = implode( ',', $facet['reset_facets'] );
- $attrs = ' data-mode="{mode}" data-values="{vals}"';
- $attrs = str_replace( '{mode}', $facet['reset_mode'], $attrs );
- $attrs = str_replace( '{vals}', esc_attr( $vals ), $attrs );
- }
- }
-
- if ( FWP()->helper->facet_is( $facet, 'auto_hide', 'yes' ) ) {
- $classes[] = 'facetwp-hide-empty';
- }
-
- if ( 'button' == $reset_ui ) {
- $output = '{label} ';
- }
- else {
- $output = '{label} ';
- }
-
- $output = str_replace( '{classes}', implode( ' ', $classes ), $output );
- $output = str_replace( '{label}', esc_attr( $reset_text ), $output );
- $output = str_replace( '{attrs}', $attrs, $output );
- return $output;
- }
-
-
- function filter_posts( $params ) {
- return 'continue';
- }
-
-
- function register_fields() {
- return [
- 'reset_ui' => [
- 'type' => 'select',
- 'label' => __( 'Reset UI', 'fwp' ),
- 'choices' => [
- 'button' => __( 'Button', 'fwp' ),
- 'link' => __( 'Link', 'fwp' )
- ]
- ],
- 'reset_mode' => [
- 'type' => 'select',
- 'label' => __( 'Include / exclude', 'fwp' ),
- 'notes' => 'Include or exclude certain facets?',
- 'choices' => [
- 'off' => __( 'Reset everything', 'fwp' ),
- 'include' => __( 'Reset only these facets', 'fwp' ),
- 'exclude' => __( 'Reset all except these facets', 'fwp' )
- ]
- ],
- 'reset_facets' => [
- 'label' => '',
- 'html' => ' ',
- 'show' => "facet.reset_mode != 'off'"
- ],
- 'auto_hide' => [
- 'type' => 'toggle',
- 'label' => __( 'Auto-hide', 'fwp' ),
- 'notes' => 'Hide when no facets have selected values'
- ]
- ];
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/facets/search.php b/wp/wp-content/plugins/facetwp/includes/facets/search.php
deleted file mode 100644
index eaacf422..00000000
--- a/wp/wp-content/plugins/facetwp/includes/facets/search.php
+++ /dev/null
@@ -1,89 +0,0 @@
-label = __( 'Search', 'fwp' );
- $this->fields = [ 'search_engine', 'placeholder', 'auto_refresh' ];
- }
-
-
- /**
- * Generate the facet HTML
- */
- function render( $params ) {
-
- $output = '';
- $facet = $params['facet'];
- $value = (array) $params['selected_values'];
- $value = empty( $value ) ? '' : stripslashes( $value[0] );
- $placeholder = empty( $facet['placeholder'] ) ? __( 'Enter keywords', 'fwp-front' ) : $facet['placeholder'];
- $placeholder = facetwp_i18n( $placeholder );
- $output .= '';
- $output .= ' ';
- $output .= ' ';
- $output .= ' ';
- return $output;
- }
-
-
- /**
- * Filter the query based on selected values
- */
- function filter_posts( $params ) {
-
- $facet = $params['facet'];
- $selected_values = $params['selected_values'];
- $selected_values = is_array( $selected_values ) ? $selected_values[0] : $selected_values;
-
- if ( empty( $selected_values ) ) {
- return 'continue';
- }
-
- // Default WP search
- $search_args = [
- 's' => $selected_values,
- 'posts_per_page' => 200,
- 'fields' => 'ids',
- ];
-
- $search_args = apply_filters( 'facetwp_search_query_args', $search_args, $params );
-
- $query = new WP_Query( $search_args );
-
- return (array) $query->posts;
- }
-
-
- function register_fields() {
- $engines = apply_filters( 'facetwp_facet_search_engines', [] );
- $choices = [ '' => __( 'WP Default', 'fwp' ) ];
-
- foreach ( $engines as $key => $label ) {
- $choices[ $key ] = $label;
- }
-
- return [
- 'search_engine' => [
- 'type' => 'select',
- 'label' => __( 'Search engine', 'fwp' ),
- 'choices' => $choices
- ],
- 'auto_refresh' => [
- 'type' => 'toggle',
- 'label' => __( 'Auto refresh', 'fwp' ),
- 'notes' => 'Automatically refresh the results while typing?'
- ]
- ];
- }
-
-
- /**
- * (Front-end) Attach settings to the AJAX response
- */
- function settings_js( $params ) {
- $auto_refresh = empty( $params['facet']['auto_refresh'] ) ? 'no' : $params['facet']['auto_refresh'];
- return [ 'auto_refresh' => $auto_refresh ];
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/facets/slider.php b/wp/wp-content/plugins/facetwp/includes/facets/slider.php
deleted file mode 100644
index 24462cee..00000000
--- a/wp/wp-content/plugins/facetwp/includes/facets/slider.php
+++ /dev/null
@@ -1,160 +0,0 @@
-label = __( 'Slider', 'fwp' );
- $this->fields = [ 'source_other', 'compare_type', 'prefix', 'suffix',
- 'reset_text', 'slider_format', 'step' ];
-
- add_filter( 'facetwp_render_output', [ $this, 'maybe_prevent_facet_html' ], 10, 2 );
- }
-
-
- /**
- * Generate the facet HTML
- */
- function render( $params ) {
- $facet = $params['facet'];
- $reset_text = __( 'Reset', 'fwp-front' );
-
- if ( ! empty( $facet['reset_text'] ) ) {
- $reset_text = facetwp_i18n( $facet['reset_text'] );
- }
-
- $output = '';
- $output .= '
';
- $output .= '
';
- $output .= ' ';
- $output .= '
';
- return $output;
- }
-
-
- /**
- * Filter the query based on selected values
- */
- function filter_posts( $params ) {
- return FWP()->helper->facet_types['number_range']->filter_posts( $params );
- }
-
-
- /**
- * (Front-end) Attach settings to the AJAX response
- */
- function settings_js( $params ) {
- global $wpdb;
-
- $facet = $params['facet'];
- $where_clause = $this->get_where_clause( $facet );
- $selected_values = $params['selected_values'];
-
- // Set default slider values
- $defaults = [
- 'format' => '',
- 'prefix' => '',
- 'suffix' => '',
- 'step' => 1,
- ];
- $facet = array_merge( $defaults, $facet );
-
- $sql = "
- SELECT MIN(facet_value + 0) AS `min`, MAX(facet_display_value + 0) AS `max` FROM {$wpdb->prefix}facetwp_index
- WHERE facet_name = '{$facet['name']}' AND facet_display_value != '' $where_clause";
- $row = $wpdb->get_row( $sql );
-
- $range_min = (float) $row->min;
- $range_max = (float) $row->max;
-
- $selected_min = (float) ( $selected_values[0] ?? $range_min );
- $selected_max = (float) ( $selected_values[1] ?? $range_max );
-
- return [
- 'range' => [ // outer (bar)
- 'min' => min( $range_min, $selected_min ),
- 'max' => max( $range_max, $selected_max )
- ],
- 'decimal_separator' => FWP()->helper->get_setting( 'decimal_separator' ),
- 'thousands_separator' => FWP()->helper->get_setting( 'thousands_separator' ),
- 'start' => [ $selected_min, $selected_max ], // inner (handles)
- 'format' => $facet['format'],
- 'prefix' => facetwp_i18n( $facet['prefix'] ),
- 'suffix' => facetwp_i18n( $facet['suffix'] ),
- 'step' => $facet['step']
- ];
- }
-
-
- /**
- * Prevent the slider HTML from refreshing when active
- * @since 3.8.11
- */
- function maybe_prevent_facet_html( $output, $params ) {
- if ( ! empty( $output['facets'] && 0 === $params['first_load' ] ) ) {
- foreach ( FWP()->facet->facets as $name => $facet ) {
- if ( 'slider' == $facet['type'] && ! empty( $facet['selected_values'] ) ) {
- unset( $output['facets'][ $name ] );
- }
- }
- }
- return $output;
- }
-
-
- /**
- * Output any front-end scripts
- */
- function front_scripts() {
- FWP()->display->assets['nouislider.css'] = FACETWP_URL . '/assets/vendor/noUiSlider/nouislider.css';
- FWP()->display->assets['nouislider.js'] = FACETWP_URL . '/assets/vendor/noUiSlider/nouislider.min.js';
- FWP()->display->assets['nummy.js'] = FACETWP_URL . '/assets/vendor/nummy/nummy.min.js';
- }
-
-
- function register_fields() {
- $thousands = FWP()->helper->get_setting( 'thousands_separator' );
- $decimal = FWP()->helper->get_setting( 'decimal_separator' );
- $choices = [];
-
- if ( '' != $thousands ) {
- $choices['0,0'] = "5{$thousands}280";
- $choices['0,0.0'] = "5{$thousands}280{$decimal}4";
- $choices['0,0.00'] = "5{$thousands}280{$decimal}42";
- }
-
- $choices['0'] = '5280';
- $choices['0.0'] = "5280{$decimal}4";
- $choices['0.00'] = "5280{$decimal}42";
- $choices['0a'] = '5k';
- $choices['0.0a'] = "5{$decimal}3k";
- $choices['0.00a'] = "5{$decimal}28k";
-
- return [
- 'prefix' => [
- 'label' => __( 'Prefix', 'fwp' ),
- 'notes' => 'Text that appears before each slider value',
- ],
- 'suffix' => [
- 'label' => __( 'Suffix', 'fwp' ),
- 'notes' => 'Text that appears after each slider value',
- ],
- 'slider_format' => [
- 'type' => 'alias',
- 'items' => [
- 'format' => [
- 'type' => 'select',
- 'label' => __( 'Format', 'fwp' ),
- 'notes' => 'If the number separators are wrong, change the [Separators] setting in the Settings tab, then save and reload the page',
- 'choices' => $choices
- ]
- ]
- ],
- 'step' => [
- 'label' => __( 'Step', 'fwp' ),
- 'notes' => 'The amount of increase between intervals',
- 'default' => 1
- ]
- ];
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/facets/sort.php b/wp/wp-content/plugins/facetwp/includes/facets/sort.php
deleted file mode 100644
index 6c56c98e..00000000
--- a/wp/wp-content/plugins/facetwp/includes/facets/sort.php
+++ /dev/null
@@ -1,226 +0,0 @@
-label = __( 'Sort', 'fwp' );
- $this->fields = [ 'sort_default_label', 'sort_options' ];
-
- add_filter( 'facetwp_filtered_query_args', [ $this, 'apply_sort' ], 1, 2 );
- add_filter( 'facetwp_render_output', [ $this, 'render_sort_feature' ], 1, 2 );
- }
-
-
- /**
- * Render the sort facet
- */
- function render( $params ) {
- $facet = $this->parse_sort_facet( $params['facet'] );
- $selected_values = (array) $params['selected_values'];
-
- $label = facetwp_i18n( $facet['default_label'] );
- $output = '' . esc_attr( $label ) . ' ';
-
- foreach ( $facet['sort_options'] as $key => $choice ) {
- $label = facetwp_i18n( $choice['label'] );
- $selected = in_array( $key, $selected_values ) ? ' selected' : '';
- $output .= '' . esc_attr( $label ) . ' ';
- }
-
- return '' . $output . ' ';
- }
-
-
- /**
- * Sort facets don't narrow results
- */
- function filter_posts( $params ) {
- return 'continue';
- }
-
-
- /**
- * Register admin settings
- */
- function register_fields() {
- return [
- 'sort_default_label' => [
- 'type' => 'alias',
- 'items' => [
- 'default_label' => [
- 'label' => __( 'Default label', 'fwp' ),
- 'notes' => 'The sort box placeholder text',
- 'default' => __( 'Sort by', 'fwp' )
- ]
- ]
- ],
- 'sort_options' => [
- 'label' => __( 'Sort options', 'fwp' ),
- 'notes' => 'Define the choices that appear in the sort box',
- 'html' => ' '
- ]
- ];
- }
-
-
- /**
- * Convert a sort facet's sort options into WP_Query arguments
- * @since 4.0.8
- */
- function parse_sort_facet( $facet ) {
- $sort_options = [];
-
- foreach ( $facet['sort_options'] as $row ) {
- $parsed = FWP()->builder->parse_query_obj([ 'orderby' => $row['orderby'] ]);
-
- $sort_options[ $row['name'] ] = [
- 'label' => $row['label'],
- 'query_args' => array_intersect_key( $parsed, [
- 'meta_query' => true,
- 'orderby' => true
- ])
- ];
- }
-
- $sort_options = apply_filters( 'facetwp_facet_sort_options', $sort_options, [
- 'facet' => $facet,
- 'template_name' => FWP()->facet->template['name']
- ]);
-
- $facet['sort_options'] = $sort_options;
-
- return $facet;
- }
-
-
- /**
- * Handle both sort facets and the (old) sort feature
- * @since 4.0.6
- */
- function apply_sort( $query_args, $class ) {
-
- foreach ( $class->facets as $facet ) {
- if ( 'sort' == $facet['type'] ) {
- $sort_facet = $this->parse_sort_facet( $facet );
- break;
- }
- }
-
- // Support the (old) sort feature
- $sort_value = 'default';
- $this->sort_options = $this->get_sort_options();
-
- if ( ! empty( $class->ajax_params['extras']['sort'] ) ) {
- $sort_value = $class->ajax_params['extras']['sort'];
-
- if ( ! empty( $this->sort_options[ $sort_value ] ) ) {
- $args = $this->sort_options[ $sort_value ]['query_args'];
- $query_args = array_merge( $query_args, $args );
- }
- }
-
- // Preserve relevancy sort
- $use_relevancy = apply_filters( 'facetwp_use_search_relevancy', true, $class );
- $is_default_sort = ( 'default' == $sort_value && empty( $class->http_params['get']['orderby'] ) );
- if ( $class->is_search && $use_relevancy && $is_default_sort && FWP()->is_filtered ) {
- $query_args['orderby'] = 'post__in';
- }
-
- // Support the (new) sort facet
- if ( ! empty( $sort_facet['selected_values'] ) ) {
- $chosen = $sort_facet['selected_values'][0];
- $sort_options = $sort_facet['sort_options'];
-
- if ( isset( $sort_options[ $chosen ] ) ) {
- $qa = $sort_options[ $chosen ]['query_args'];
-
- if ( isset( $qa['meta_query'] ) ) {
- $meta_query = $query_args['meta_query'] ?? [];
- $query_args['meta_query'] = array_merge( $meta_query, $qa['meta_query'] );
- }
-
- $query_args['orderby'] = $qa['orderby'];
- }
- }
-
- return $query_args;
- }
-
-
- /**
- * Generate choices for the (old) sort feature
- * @since 4.0.6
- */
- function get_sort_options() {
-
- $options = [
- 'default' => [
- 'label' => __( 'Sort by', 'fwp-front' ),
- 'query_args' => []
- ],
- 'title_asc' => [
- 'label' => __( 'Title (A-Z)', 'fwp-front' ),
- 'query_args' => [
- 'orderby' => 'title',
- 'order' => 'ASC',
- ]
- ],
- 'title_desc' => [
- 'label' => __( 'Title (Z-A)', 'fwp-front' ),
- 'query_args' => [
- 'orderby' => 'title',
- 'order' => 'DESC',
- ]
- ],
- 'date_desc' => [
- 'label' => __( 'Date (Newest)', 'fwp-front' ),
- 'query_args' => [
- 'orderby' => 'date',
- 'order' => 'DESC',
- ]
- ],
- 'date_asc' => [
- 'label' => __( 'Date (Oldest)', 'fwp-front' ),
- 'query_args' => [
- 'orderby' => 'date',
- 'order' => 'ASC',
- ]
- ]
- ];
-
- return apply_filters( 'facetwp_sort_options', $options, [
- 'template_name' => FWP()->facet->template['name'],
- ] );
- }
-
-
- /**
- * Render the (old) sort feature
- * @since 4.0.6
- */
- function render_sort_feature( $output, $params ) {
- $has_sort = isset( $params['extras']['sort'] );
- $has_choices = isset( $this->sort_options );
-
- if ( 0 == $params['soft_refresh'] && $has_sort && $has_choices ) {
- $html = '';
-
- foreach ( $this->sort_options as $key => $atts ) {
- $html .= '' . $atts['label'] . ' ';
- }
-
- $html = '' . $html . ' ';
-
- $output['sort'] = apply_filters( 'facetwp_sort_html', $html, [
- 'sort_options' => $this->sort_options,
- 'template_name' => FWP()->facet->template['name'],
- ]);
- }
-
- return $output;
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/functions.php b/wp/wp-content/plugins/facetwp/includes/functions.php
deleted file mode 100644
index 25ea10dc..00000000
--- a/wp/wp-content/plugins/facetwp/includes/functions.php
+++ /dev/null
@@ -1,43 +0,0 @@
- true ] );
- *
- * @since 1.7.5
- */
-function facetwp_display() {
- $args = array_replace( [ 'pager', true, [] ], func_get_args() );
-
- $atts = (array) $args[2];
- $atts[ $args[0] ] = $args[1];
-
- return FWP()->display->shortcode( $atts );
-}
-
-
-/**
- * Allow for translation of dynamic strings
- * @since 2.1
- */
-function facetwp_i18n( $string ) {
- return apply_filters( 'facetwp_i18n', $string );
-}
-
-
-/**
- * Support SQL modifications
- * @since 2.7
- */
-function facetwp_sql( $sql, $facet ) {
- global $wpdb;
-
- $sql = apply_filters( 'facetwp_wpdb_sql', $sql, $facet );
- return apply_filters( 'facetwp_wpdb_get_col', $wpdb->get_col( $sql ), $sql, $facet );
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/integrations/acf/acf.php b/wp/wp-content/plugins/facetwp/includes/integrations/acf/acf.php
deleted file mode 100644
index 893303db..00000000
--- a/wp/wp-content/plugins/facetwp/includes/integrations/acf/acf.php
+++ /dev/null
@@ -1,517 +0,0 @@
-get_fields();
- $choices = [];
-
- foreach ( $fields as $field ) {
- $field_id = $field['hierarchy'];
- $field_name = $field['name'];
- $field_label = '[' . $field['group_title'] . '] ' . $field['parents'] . $field['label'];
- $choices[ "acf/$field_id" ] = $field_label;
-
- // remove "hidden" ACF fields
- unset( $sources['custom_fields']['choices'][ "cf/_$field_name" ] );
- }
-
- if ( ! empty( $choices ) ) {
- $sources['acf'] = [
- 'label' => 'ACF',
- 'choices' => $choices,
- 'weight' => 5
- ];
- }
-
- return $sources;
- }
-
-
- /**
- * If the facet "Sort by" value is "Term order", then preserve
- * the custom order of certain ACF fields (checkboxes, radio, etc.)
- */
- function facet_orderby( $orderby, $facet ) {
- if ( isset( $facet['source'] ) && isset( $facet['orderby'] ) ) {
- if ( 0 === strpos( $facet['source'], 'acf/' ) && 'term_order' == $facet['orderby'] ) {
- $source_parts = explode( '/', $facet['source'] );
- $field_id = array_pop( $source_parts );
- $field_object = get_field_object( $field_id );
- if ( ! empty( $field_object['choices'] ) ) {
- $choices = $field_object['choices'];
- $choices = implode( "','", esc_sql( $choices ) );
- $orderby = "FIELD(f.facet_display_value, '$choices')";
- }
- }
- }
-
- return $orderby;
- }
-
-
- /**
- * Index ACF field data
- */
- function index_acf_values( $return, $params ) {
- $defaults = $params['defaults'];
- $facet = $params['facet'];
-
- if ( isset( $facet['source'] ) && 'acf/' == substr( $facet['source'], 0, 4 ) ) {
- $hierarchy = explode( '/', substr( $facet['source'], 4 ) );
-
- // support "User Post Type" plugin
- $object_id = apply_filters( 'facetwp_acf_object_id', $defaults['post_id'] );
-
- // get values (for sub-fields, use the parent repeater)
- $value = get_field( $hierarchy[0], $object_id, false );
-
- // handle repeater values
- if ( 1 < count( $hierarchy ) ) {
-
- $parent_field_key = array_shift( $hierarchy );
- $value = $this->process_field_value( $value, $hierarchy, $parent_field_key );
-
- // get the sub-field properties
- $sub_field = get_field_object( $hierarchy[0], $object_id, false, false );
-
- foreach ( $value as $key => $val ) {
- $this->repeater_row = $key;
- $rows = $this->get_values_to_index( $val, $sub_field, $defaults );
- $this->index_field_values( $rows );
- }
- }
- else {
-
- // get the field properties
- $field = get_field_object( $hierarchy[0], $object_id, false, false );
-
- // index values
- $rows = $this->get_values_to_index( $value, $field, $defaults );
- $this->index_field_values( $rows );
- }
-
- return true;
- }
-
- return $return;
- }
-
-
- /**
- * Hijack the "facetwp_indexer_query_args" hook to lookup the fields once
- */
- function lookup_acf_fields( $args ) {
- $this->get_fields();
- return $args;
- }
-
-
- /**
- * Grab all ACF fields
- */
- function get_fields() {
-
- add_action( 'pre_get_posts', [ $this, 'disable_wpml' ] );
- $field_groups = acf_get_field_groups();
- remove_action( 'pre_get_posts', [ $this, 'disable_wpml' ] );
-
- foreach ( $field_groups as $field_group ) {
- $fields = acf_get_fields( $field_group );
-
- if ( ! empty( $fields ) ) {
- $this->flatten_fields( $fields, $field_group );
- }
- }
-
- return $this->fields;
- }
-
-
- /**
- * We need to get field groups in ALL languages
- */
- function disable_wpml( $query ) {
- $query->set( 'suppress_filters', true );
- $query->set( 'lang', '' );
- }
-
-
- /**
- * Extract field values from the repeater array
- */
- function process_field_value( $value, $hierarchy, $parent_field_key ) {
- $temp_val = [];
-
- // prevent PHP8 fatal error on invalid lookup field
- $parent_field_type = $this->parent_type_lookup[ $parent_field_key ] ?? 'none';
-
- if ( ! is_array( $value ) || 'none' == $parent_field_type ) {
- return $temp_val;
- }
-
- // reduce the hierarchy array
- $field_key = array_shift( $hierarchy );
-
- // group
- if ( 'group' == $parent_field_type ) {
- if ( 0 == count( $hierarchy ) ) {
- $temp_val[] = $value[ $field_key ];
- }
- else {
- return $this->process_field_value( $value[ $field_key ], $hierarchy, $field_key );
- }
- }
- // repeater
- else {
- if ( 0 == count( $hierarchy ) ) {
- foreach ( $value as $val ) {
- $temp_val[] = $val[ $field_key ];
- }
- }
- else {
- foreach ( $value as $outer ) {
- if ( isset( $outer[ $field_key ] ) ) {
- foreach ( $outer[ $field_key ] as $inner ) {
- $temp_val[] = $inner;
- }
- }
- }
-
- return $this->process_field_value( $temp_val, $hierarchy, $field_key );
- }
- }
-
- return $temp_val;
- }
-
-
- /**
- * Get an array of $params arrays
- * Useful for indexing and grabbing values for the Layout Builder
- * @since 3.4.0
- */
- function get_values_to_index( $value, $field, $params ) {
- $value = maybe_unserialize( $value );
- $type = $field['type'];
- $output = [];
-
- // checkboxes
- if ( 'checkbox' == $type || 'select' == $type || 'radio' == $type ) {
- if ( false !== $value ) {
- foreach ( (array) $value as $val ) {
- $display_value = isset( $field['choices'][ $val ] ) ?
- $field['choices'][ $val ] :
- $val;
-
- $params['facet_value'] = $val;
- $params['facet_display_value'] = $display_value;
- $output[] = $params;
- }
- }
- }
-
- // relationship
- elseif ( 'relationship' == $type || 'post_object' == $type || 'page_link' == $type ) {
- if ( false !== $value ) {
- foreach ( (array) $value as $val ) {
-
- // does the post exist?
- if ( false !== get_post_type( $val ) ) {
- $params['facet_value'] = $val;
- $params['facet_display_value'] = get_the_title( $val );
- $output[] = $params;
- }
- }
- }
- }
-
- // user
- elseif ( 'user' == $type ) {
- if ( false !== $value ) {
- foreach ( (array) $value as $val ) {
- $user = get_user_by( 'id', $val );
-
- // does the user exist?
- if ( false !== $user ) {
- $params['facet_value'] = $val;
- $params['facet_display_value'] = $user->display_name;
- $output[] = $params;
- }
- }
- }
- }
-
- // taxonomy
- elseif ( 'taxonomy' == $type ) {
- if ( ! empty( $value ) ) {
- foreach ( (array) $value as $val ) {
- global $wpdb;
-
- $term_id = (int) $val;
- $term = $wpdb->get_row( "SELECT name, slug FROM {$wpdb->terms} WHERE term_id = '$term_id' LIMIT 1" );
-
- // does the term exist?
- if ( null !== $term ) {
- $params['facet_value'] = $term->slug;
- $params['facet_display_value'] = $term->name;
- $params['term_id'] = $term_id;
- $output[] = $params;
- }
- }
- }
- }
-
- // date_picker
- elseif ( 'date_picker' == $type ) {
- $formatted = $this->format_date( $value );
- $params['facet_value'] = $formatted;
- $params['facet_display_value'] = apply_filters( 'facetwp_acf_display_value', $formatted, $params );
- $output[] = $params;
- }
-
- // true_false
- elseif ( 'true_false' == $type ) {
- $display_value = ( 0 < (int) $value ) ? __( 'Yes', 'fwp-front' ) : __( 'No', 'fwp-front' );
- $params['facet_value'] = $value;
- $params['facet_display_value'] = $display_value;
- $output[] = $params;
- }
-
- // google_map
- elseif ( 'google_map' == $type ) {
- if ( isset( $value['lat'] ) && isset( $value['lng'] ) ) {
- $params['facet_value'] = $value['lat'];
- $params['facet_display_value'] = $value['lng'];
- $params['place_details'] = $value;
- $output[] = $params;
- }
- }
-
- // text
- else {
- $params['facet_value'] = $value;
- $params['facet_display_value'] = apply_filters( 'facetwp_acf_display_value', $value, $params );
- $output[] = $params;
- }
-
- return $output;
- }
-
-
- /**
- * Index values
- */
- function index_field_values( $rows ) {
- foreach ( $rows as $params ) {
- FWP()->indexer->index_row( $params );
- }
- }
-
-
- /**
- * Handle "source_other" setting
- */
- function index_source_other( $value, $params ) {
- if ( ! empty( $params['facet_name'] ) ) {
- $facet = FWP()->helper->get_facet_by_name( $params['facet_name'] );
-
- if ( ! empty( $facet['source_other'] ) ) {
- $hierarchy = explode( '/', substr( $facet['source_other'], 4 ) );
-
- // support "User Post Type" plugin
- $object_id = apply_filters( 'facetwp_acf_object_id', $params['post_id'] );
-
- // get the value
- $value = get_field( $hierarchy[0], $object_id, false );
-
- // handle repeater values
- if ( 1 < count( $hierarchy ) ) {
- $parent_field_key = array_shift( $hierarchy );
- $value = $this->process_field_value( $value, $hierarchy, $parent_field_key );
- $value = $value[ $this->repeater_row ];
- }
- }
-
- if ( 'date_range' == $facet['type'] ) {
- $value = $this->format_date( $value );
- }
- }
-
- return $value;
- }
-
-
- /**
- * Format dates in YYYY-MM-DD
- */
- function format_date( $str ) {
- if ( 8 == strlen( $str ) && ctype_digit( $str ) ) {
- $str = substr( $str, 0, 4 ) . '-' . substr( $str, 4, 2 ) . '-' . substr( $str, 6, 2 );
- }
-
- return $str;
- }
-
-
- /**
- * Generates a flat array of fields within a specific field group
- */
- function flatten_fields( $fields, $field_group, $hierarchy = '', $parents = '' ) {
- foreach ( $fields as $field ) {
-
- // append the hierarchy string
- $new_hierarchy = $hierarchy . '/' . $field['key'];
-
- // loop again for repeater or group fields
- if ( 'repeater' == $field['type'] || 'group' == $field['type'] ) {
- $new_parents = $parents . $field['label'] . ' → ';
-
- $this->parent_type_lookup[ $field['key'] ] = $field['type'];
- $this->flatten_fields( $field['sub_fields'], $field_group, $new_hierarchy, $new_parents );
- }
- else {
- $this->fields[] = [
- 'key' => $field['key'],
- 'name' => $field['name'],
- 'label' => $field['label'],
- 'hierarchy' => trim( $new_hierarchy, '/' ),
- 'parents' => $parents,
- 'group_title' => $field_group['title'],
- ];
- }
- }
- }
-
-
- /**
- * Get the field value (support User Post Type)
- * @since 3.4.1
- */
- function get_field( $source, $post_id ) {
- $hierarchy = explode( '/', substr( $source, 4 ) );
- $object_id = apply_filters( 'facetwp_acf_object_id', $post_id );
- return get_field( $hierarchy[0], $object_id );
- }
-
-
- /**
- * Fallback values for the layout builder
- * @since 3.4.0
- *
- * ACF return formats:
- * [image, file] = array, url, id
- * [select, checkbox, radio, button_group] = value, label, array (both)
- * [post_object, relationship, taxonomy] = object, id
- * [user] = array, object, id
- * [link] = array, url
- */
- function layout_builder_values( $value, $item ) {
- global $post;
-
- // exit if not an object or array
- if ( is_scalar( $value ) || is_null( $value ) ) {
- return $value;
- }
-
- $hierarchy = explode( '/', substr( $item['source'], 4 ) );
-
- // support "User Post Type" plugin
- $object_id = apply_filters( 'facetwp_acf_object_id', $post->ID );
-
- // get the field properties
- $field = get_field_object( $hierarchy[0], $object_id, false, false );
-
- $type = $field['type'];
- $format = $field['return_format'] ?? '';
- $is_multiple = (bool) ( $field['multiple'] ?? false );
-
- if ( ( 'post_object' == $type || 'relationship' == $type ) && 'object' == $format ) {
- $output = [];
-
- $value = is_array( $value ) ? $value : [ $value ];
-
- foreach ( $value as $val ) {
- $output[] = '' . esc_html( $val->post_title ) . ' ';
- }
-
- $value = $output;
- }
-
- if ( 'taxonomy' == $type && 'object' == $format ) {
- $output = [];
-
- foreach ( $value as $val ) {
- $output[] = $val->name;
- }
-
- $value = $output;
- }
-
- if ( ( 'select' == $type || 'checkbox' == $type || 'radio' == $type || 'button_group' == $type ) && 'array' == $format ) {
- $value = $value['label'] ?? wp_list_pluck( $value, 'label' );
- }
-
- if ( ( 'image' == $type || 'gallery' == $type ) && 'array' == $format ) {
- $value = ( 'image' == $type ) ? [ $value ] : $value;
-
- foreach ( $value as $val ) {
- $value = ' ';
- }
- }
-
- if ( 'file' == $type && 'array' == $format ) {
- $value = '' . esc_html( $value['filename'] ) . ' (' . size_format( $value['filesize'], 1 ) . ')';
- }
-
- if ( 'link' == $type && 'array' == $format ) {
- $value = '' . esc_html( $value['title'] ) . ' ';
- }
-
- if ( 'google_map' == $type ) {
- $value = '' . esc_html( $value['address'] ) . ' ';
- }
-
- if ( 'user' == $type && ( 'object' == $format || 'array' == $format ) ) {
- $output = [];
-
- $value = $is_multiple ? $value : [ $value ];
-
- foreach ( $value as $val ) {
- if ( 'object' == $format ) {
- $output[] = $val->display_name;
- }
- elseif ( 'array' == $format ) {
- $output[] = $val['display_name'];
- }
- }
- $value = $output;
- }
-
- return $value;
- }
-}
-
-
-if ( function_exists( 'acf' ) && version_compare( acf()->settings['version'], '5.0', '>=' ) ) {
- FWP()->acf = new FacetWP_Integration_ACF();
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/integrations/edd/edd.js b/wp/wp-content/plugins/facetwp/includes/integrations/edd/edd.js
deleted file mode 100644
index f7745467..00000000
--- a/wp/wp-content/plugins/facetwp/includes/integrations/edd/edd.js
+++ /dev/null
@@ -1,6 +0,0 @@
-(function($) {
- $().on('facetwp-loaded', function() {
- $('.edd-no-js').addClass('facetwp-hidden');
- $('a.edd-add-to-cart').addClass('edd-has-js');
- });
-})(fUtil);
\ No newline at end of file
diff --git a/wp/wp-content/plugins/facetwp/includes/integrations/edd/edd.php b/wp/wp-content/plugins/facetwp/includes/integrations/edd/edd.php
deleted file mode 100644
index 77d0caa3..00000000
--- a/wp/wp-content/plugins/facetwp/includes/integrations/edd/edd.php
+++ /dev/null
@@ -1,51 +0,0 @@
- $val ) {
- if ( 0 === strpos( $val, '_edd_' ) ) {
- unset( $sources['custom_fields']['choices'][ $key ] );
- }
- }
-
- return $sources;
- }
-}
-
-
-if ( is_plugin_active( 'easy-digital-downloads/easy-digital-downloads.php' ) ) {
- new FacetWP_Integration_EDD();
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/integrations/searchwp/searchwp.php b/wp/wp-content/plugins/facetwp/includes/integrations/searchwp/searchwp.php
deleted file mode 100644
index c7573d33..00000000
--- a/wp/wp-content/plugins/facetwp/includes/integrations/searchwp/searchwp.php
+++ /dev/null
@@ -1,215 +0,0 @@
-is_search() && ! empty( $query->get( 's' ) ) ) {
- $args = stripslashes_deep( $this->get_valid_args( $query ) );
- $this->keywords = $args['s'];
- $this->swp_query = $this->run_query( $args );
- $query->set( 'using_searchwp', true );
- $query->set( 'searchwp', false );
- }
-
- return $is_main_query;
- }
-
-
- /**
- * Whitelist supported SWP_Query arguments
- *
- * @link https://searchwp.com/documentation/classes/swp_query/#arguments
- */
- function get_valid_args( $query ) {
- $output = [];
-
- $valid = [
- 's', 'engine', 'post__in', 'post__not_in', 'post_type', 'post_status',
- 'tax_query', 'meta_query', 'date_query', 'order', 'orderby'
- ];
-
- foreach ( $valid as $arg ) {
- $val = $query->get( $arg );
- if ( ! empty( $val ) ) {
- $output[ $arg ] = $val;
- }
- }
-
- return $output;
- }
-
-
- /**
- * Modify FacetWP's render() query to use SearchWP's results while bypassing
- * WP core search. We're using this additional query to support custom query
- * modifications, such as for FacetWP's sort box.
- *
- * The hook priority (1000) is important because this needs to run after
- * FacetWP_Request->update_query_vars()
- */
- function pre_get_posts( $query ) {
- if ( true === $query->get( 'using_searchwp' ) ) {
- if ( true === $query->get( 'facetwp' ) && ! $this->first_run ) {
- $query->set( 's', '' );
-
- $post_ids = FWP()->filtered_post_ids;
- $post_ids = empty( $post_ids ) ? [ 0 ] : $post_ids;
- $query->set( 'post__in', $post_ids );
-
- if ( '' === $query->get( 'post_type' ) ) {
- $query->set( 'post_type', 'any' );
- $query->set( 'post_status', 'any' );
- }
-
- if ( '' === $query->get( 'orderby' ) ) {
- $query->set( 'orderby', 'post__in' );
- }
- }
- }
- }
-
-
- /**
- * If [facetwp => false] then it's the get_filtered_post_ids() query. Return
- * the raw SearchWP results to prevent the additional query.
- *
- * If [facetwp => true] and [first_run => true] then it's the main WP query. Return
- * a non-null value to kill the query, since we don't use the results.
- *
- * If [facetwp => true] and [first_run => false] then it's the FacetWP render() query.
- */
- function posts_pre_query( $posts, $query ) {
- if ( true === $query->get( 'using_searchwp' ) ) {
- if ( true === $query->get( 'facetwp' ) ) {
- $query->set( 's', $this->keywords );
-
- // kill the main WP query
- if ( $this->first_run ) {
- $this->first_run = false;
-
- $page = max( $query->get( 'paged' ), 1 );
- $per_page = (int) $query->get( 'posts_per_page', get_option( 'posts_per_page' ) );
- $query->found_posts = count( FWP()->filtered_post_ids );
- $query->max_num_pages = ( 0 < $per_page ) ? ceil( $query->found_posts / $per_page ) : 0;
-
- return [];
- }
- }
- else {
- return $this->swp_query->posts;
- }
- }
-
- return $posts;
- }
-
-
- /**
- * Apply highlighting if available
- */
- function posts_results( $posts, $query ) {
- if ( true === $query->get( 'using_searchwp' ) ) {
- if ( true === $query->get( 'facetwp' ) && ! $this->first_run ) {
-
- // SearchWP 4.1+
- if ( isset( $this->swp_query->query ) ) {
- foreach ( $posts as $index => $post ) {
- $source = \SearchWP\Utils::get_post_type_source_name( $post->post_type );
- $entry = new \SearchWP\Entry( $source, $post->ID, false );
- $posts[ $index ] = $entry->native( $this->swp_query->query );
- }
- }
- }
- }
-
- return $posts;
- }
-
-
- /**
- * For search facets, run \SWP_Query and return matching post IDs
- */
- function search_facet( $return, $params ) {
- $facet = $params['facet'];
- $selected_values = $params['selected_values'];
- $selected_values = is_array( $selected_values ) ? $selected_values[0] : $selected_values;
- $engine = $facet['search_engine'] ?? '';
-
- if ( 'search' == $facet['type'] && 0 === strpos( $engine, 'swp_' ) ) {
- $return = [];
-
- if ( empty( $selected_values ) ) {
- $return = 'continue';
- }
- elseif ( ! empty( FWP()->unfiltered_post_ids ) ) {
- $swp_query = $this->run_query([
- 's' => $selected_values,
- 'engine' => substr( $engine, 4 ),
- 'post__in' => FWP()->unfiltered_post_ids
- ]);
- $return = $swp_query->posts;
- }
- }
-
- return $return;
- }
-
-
- /**
- * Run a search and return the \SWP_Query object
- */
- function run_query( $args ) {
- $overrides = [ 'posts_per_page' => 200, 'fields' => 'ids', 'facetwp' => true ];
- $args = array_merge( $args, $overrides );
- return new \SWP_Query( $args );
- }
-
-
- /**
- * Add engines to the search facet
- */
- function search_engines( $engines ) {
-
- if ( version_compare( SEARCHWP_VERSION, '4.0', '>=' ) ) {
- $settings = get_option( SEARCHWP_PREFIX . 'engines' );
-
- foreach ( $settings as $key => $info ) {
- $engines[ 'swp_' . $key ] = 'SearchWP - ' . $info['label'];
- }
- }
- else {
- $settings = get_option( SEARCHWP_PREFIX . 'settings' );
-
- foreach ( $settings['engines'] as $key => $info ) {
- $label = $info['searchwp_engine_label'] ?? __( 'Default', 'fwp' );
- $engines[ 'swp_' . $key ] = 'SearchWP - ' . $label;
- }
- }
-
- return $engines;
- }
-}
-
-
-if ( defined( 'SEARCHWP_VERSION' ) ) {
- new FacetWP_Integration_SearchWP();
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/integrations/woocommerce/taxonomy.php b/wp/wp-content/plugins/facetwp/includes/integrations/woocommerce/taxonomy.php
deleted file mode 100644
index f75fa4d4..00000000
--- a/wp/wp-content/plugins/facetwp/includes/integrations/woocommerce/taxonomy.php
+++ /dev/null
@@ -1,85 +0,0 @@
-\n";
- }
- }
-
-
- /**
- * Adjust the category listing counts when facets are selected
- * @since 3.3.10
- */
- function adjust_term_counts( $terms, $taxonomy, $query_vars ) {
- if ( FWP()->request->is_refresh || ! empty( FWP()->request->url_vars ) ) {
- if ( 'product_cat' == reset( $taxonomy ) ) {
- global $wpdb, $wp_query;
-
- $sql = $wp_query->request;
- if ( false !== ( $pos = strpos( $sql, ' ORDER BY' ) ) ) {
- $sql = substr( $sql, 0, $pos );
- }
-
- $post_ids = $wpdb->get_col( $sql );
-
- if ( ! empty( $post_ids ) ) {
- $term_counts = [];
- $post_ids_str = implode( ',', $post_ids );
-
- $query = "
- SELECT term_id, COUNT(term_id) AS term_count
- FROM {$wpdb->prefix}facetwp_index
- WHERE post_id IN ($post_ids_str)
- GROUP BY term_id";
-
- $results = $wpdb->get_results( $query );
-
- foreach ( $results as $row ) {
- $term_counts[ $row->term_id ] = (int) $row->term_count;
- }
-
- foreach ( $terms as $term ) {
- $term->count = $term_counts[ $term->term_id ] ?? 0;
- }
- }
- }
- }
-
- return $terms;
- }
-
-
- /**
- * Append facet URL variables to the category archive links
- * @since 3.3.10
- */
- function append_url_vars( $term_link, $term, $taxonomy ) {
- if ( 'product_cat' == $taxonomy ) {
- $query_string = filter_var( $_SERVER['QUERY_STRING'], FILTER_SANITIZE_URL );
-
- if ( ! empty( $query_string ) ) {
- $prefix = ( false !== strpos( $query_string, '?' ) ) ? '&' : '?';
- $term_link .= $prefix . $query_string;
- }
- }
-
- return $term_link;
- }
-}
-
-new FacetWP_Integration_WooCommerce_Taxonomy();
diff --git a/wp/wp-content/plugins/facetwp/includes/integrations/woocommerce/woocommerce.js b/wp/wp-content/plugins/facetwp/includes/integrations/woocommerce/woocommerce.js
deleted file mode 100644
index cf8b1dfc..00000000
--- a/wp/wp-content/plugins/facetwp/includes/integrations/woocommerce/woocommerce.js
+++ /dev/null
@@ -1,34 +0,0 @@
-(function($) {
-
- $().on('facetwp-refresh', function() {
- if (! FWP.loaded) {
- setup_woocommerce();
- }
- });
-
- function setup_woocommerce() {
-
- // Intercept WooCommerce pagination
- $().on('click', '.woocommerce-pagination a', function(e) {
- e.preventDefault();
- var matches = $(this).attr('href').match(/\/page\/(\d+)/);
- if (null !== matches) {
- FWP.paged = parseInt(matches[1]);
- FWP.soft_refresh = true;
- FWP.refresh();
- }
- });
-
- // Disable sort handler
- $('.woocommerce-ordering').attr('onsubmit', 'event.preventDefault()');
-
- // Intercept WooCommerce sorting
- $().on('change', '.woocommerce-ordering .orderby', function(e) {
- var qs = new URLSearchParams(window.location.search);
- qs.set('orderby', $(this).val());
- history.pushState(null, null, window.location.pathname + '?' + qs.toString());
- FWP.soft_refresh = true;
- FWP.refresh();
- });
- }
-})(fUtil);
\ No newline at end of file
diff --git a/wp/wp-content/plugins/facetwp/includes/integrations/woocommerce/woocommerce.php b/wp/wp-content/plugins/facetwp/includes/integrations/woocommerce/woocommerce.php
deleted file mode 100644
index 529c34a1..00000000
--- a/wp/wp-content/plugins/facetwp/includes/integrations/woocommerce/woocommerce.php
+++ /dev/null
@@ -1,570 +0,0 @@
-helper->get_setting( 'wc_enable_variations', 'no' ) );
-
- if ( apply_filters( 'facetwp_enable_product_variations', $is_enabled ) ) {
- add_filter( 'facetwp_indexer_post_facet_defaults', [ $this, 'force_taxonomy' ], 10, 2 );
- add_filter( 'facetwp_indexer_query_args', [ $this, 'index_variations' ] );
- add_filter( 'facetwp_index_row', [ $this, 'attribute_variations' ], 1 );
- add_filter( 'facetwp_wpdb_sql', [ $this, 'wpdb_sql' ], 10, 2 );
- add_filter( 'facetwp_wpdb_get_col', [ $this, 'wpdb_get_col' ], 10, 3 );
- add_filter( 'facetwp_filtered_post_ids', [ $this, 'process_variations' ] );
- add_filter( 'facetwp_facet_where', [ $this, 'facet_where' ], 10, 2 );
- }
-
- // Preserve the WooCommerce sort
- add_filter( 'posts_clauses', [ $this, 'preserve_sort' ], 20, 2 );
-
- // Prevent WooCommerce from redirecting to a single result page
- add_filter( 'woocommerce_redirect_single_search_result', [ $this, 'redirect_single_search_result' ] );
-
- // Prevent WooCommerce sort (posts_clauses) when doing FacetWP sort
- add_filter( 'woocommerce_default_catalog_orderby', [ $this, 'default_catalog_orderby' ] );
-
- // Dynamic counts when Shop Page Display = "Categories" or "Both"
- if ( apply_filters( 'facetwp_woocommerce_support_categories_display', false ) ) {
- include( FACETWP_DIR . '/includes/integrations/woocommerce/taxonomy.php' );
- }
- }
-
-
- /**
- * Run WooCommerce handlers on facetwp-refresh
- * @since 2.0.9
- */
- function assets( $assets ) {
- $assets['woocommerce.js'] = FACETWP_URL . '/includes/integrations/woocommerce/woocommerce.js';
- return $assets;
- }
-
-
- /**
- * Add WooCommerce-specific data sources
- * @since 2.1.4
- */
- function facet_sources( $sources ) {
- $sources['woocommerce'] = [
- 'label' => __( 'WooCommerce', 'fwp' ),
- 'choices' => [
- 'woo/price' => __( 'Price' ),
- 'woo/sale_price' => __( 'Sale Price' ),
- 'woo/regular_price' => __( 'Regular Price' ),
- 'woo/average_rating' => __( 'Average Rating' ),
- 'woo/stock_status' => __( 'Stock Status' ),
- 'woo/on_sale' => __( 'On Sale' ),
- 'woo/featured' => __( 'Featured' ),
- 'woo/product_type' => __( 'Product Type' ),
- ],
- 'weight' => 5
- ];
-
- // Move WC taxonomy choices
- foreach ( $sources['taxonomies']['choices'] as $key => $label ) {
- if ( 'tax/product_cat' == $key || 'tax/product_tag' == $key || 0 === strpos( $key, 'tax/pa_' ) ) {
- $sources['woocommerce']['choices'][ $key ] = $label;
- unset( $sources['taxonomies']['choices'][ $key ] );
- }
- }
-
- return $sources;
- }
-
-
- /**
- * Attributes for WC product variations are stored in postmeta
- * @since 2.7.2
- */
- function force_taxonomy( $defaults, $params ) {
- if ( 0 === strpos( $defaults['facet_source'], 'tax/pa_' ) ) {
- $post_id = (int) $defaults['post_id'];
-
- if ( 'product_variation' == get_post_type( $post_id ) ) {
- $defaults['facet_source'] = str_replace( 'tax/', 'cf/attribute_', $defaults['facet_source'] );
- }
- }
-
- return $defaults;
- }
-
-
- /**
- * Index product variations
- * @since 2.7
- */
- function index_variations( $args ) {
-
- // Saving a single product
- if ( ! empty( $args['p'] ) ) {
- $post_id = (int) $args['p'];
- if ( 'product' == get_post_type( $post_id ) ) {
- if ( 'variable' == $this->get_product_type( $post_id ) ) {
- $product = wc_get_product( $post_id );
-
- if ( false !== $product ) {
- $children = $product->get_children();
- $args['post_type'] = [ 'product', 'product_variation' ];
- $args['post__in'] = $children;
- $args['post__in'][] = $post_id;
- $args['posts_per_page'] = -1;
- unset( $args['p'] );
- }
- }
- }
- }
- // Force product variations to piggyback products
- else {
- $pt = (array) $args['post_type'];
-
- if ( in_array( 'any', $pt ) ) {
- $pt = get_post_types();
- }
- if ( in_array( 'product', $pt ) ) {
- $pt[] = 'product_variation';
- }
-
- $args['post_type'] = $pt;
- }
-
- return $args;
- }
-
-
- /**
- * When indexing product variations, attribute its parent product
- * @since 2.7
- */
- function attribute_variations( $params ) {
- $post_id = (int) $params['post_id'];
-
- // Set variation_id for all posts
- $params['variation_id'] = $post_id;
-
- if ( 'product_variation' == get_post_type( $post_id ) ) {
- $params['post_id'] = wp_get_post_parent_id( $post_id );
-
- // Lookup the term name for variation values
- if ( 0 === strpos( $params['facet_source'], 'cf/attribute_pa_' ) ) {
- $taxonomy = str_replace( 'cf/attribute_', '', $params['facet_source'] );
- $term = get_term_by( 'slug', $params['facet_value'], $taxonomy );
-
- if ( false !== $term ) {
- $params['term_id'] = $term->term_id;
- $params['facet_display_value'] = $term->name;
- }
- }
- }
-
- return $params;
- }
-
-
- /**
- * Hijack filter_posts() to grab variation IDs
- * @since 2.7
- */
- function wpdb_sql( $sql, $facet ) {
- $sql = str_replace(
- 'DISTINCT post_id',
- 'DISTINCT post_id, GROUP_CONCAT(variation_id) AS variation_ids',
- $sql
- );
-
- $sql .= ' GROUP BY post_id';
-
- return $sql;
- }
-
-
- /**
- * Store a facet's variation IDs
- * @since 2.7
- */
- function wpdb_get_col( $result, $sql, $facet ) {
- global $wpdb;
-
- $facet_name = $facet['name'];
- $post_ids = $wpdb->get_col( $sql, 0 ); // arrays of product IDs
- $variations = $wpdb->get_col( $sql, 1 ); // variation IDs as arrays of comma-separated strings
-
- foreach ( $post_ids as $index => $post_id ) {
- $variations_array = explode( ',', $variations[ $index ] );
- $type = in_array( $post_id, $variations_array ) ? 'products' : 'variations';
-
- if ( isset( $this->cache[ $facet_name ][ $type ] ) ) {
- foreach ( $variations_array as $id ) {
- $this->cache[ $facet_name ][ $type ][] = $id;
- }
- }
- else {
- $this->cache[ $facet_name ][ $type ] = $variations_array;
- }
- }
-
- return $result;
- }
-
-
- /**
- * We need lookup arrays for both products and variations
- * @since 2.7.1
- */
- function generate_lookup_array( $post_ids ) {
- global $wpdb;
-
- $output = [];
-
- if ( ! empty( $post_ids ) ) {
- $sql = "
- SELECT DISTINCT post_id, variation_id
- FROM {$wpdb->prefix}facetwp_index
- WHERE post_id IN (" . implode( ',', $post_ids ) . ")";
- $results = $wpdb->get_results( $sql );
-
- foreach ( $results as $result ) {
- $output['get_variations'][ $result->post_id ][] = $result->variation_id;
- $output['get_product'][ $result->variation_id ] = $result->post_id;
- }
- }
-
- return $output;
- }
-
-
- /**
- * Determine valid variation IDs
- * @since 2.7
- */
- function process_variations( $post_ids ) {
- if ( empty( $this->cache ) ) {
- return $post_ids;
- }
-
- $this->lookup = $this->generate_lookup_array( FWP()->unfiltered_post_ids );
-
- // Loop through each facet's data
- foreach ( $this->cache as $facet_name => $groups ) {
- $this->storage[ $facet_name ] = [];
-
- // Create an array of variation IDs
- foreach ( $groups as $type => $ids ) { // products or variations
- foreach ( $ids as $id ) {
- $this->storage[ $facet_name ][] = $id;
-
- // Lookup variation IDs for each product
- if ( 'products' == $type ) {
- if ( ! empty( $this->lookup['get_variations'][ $id ] ) ) {
- foreach ( $this->lookup['get_variations'][ $id ] as $variation_id ) {
- $this->storage[ $facet_name ][] = $variation_id;
- }
- }
- }
- }
- }
- }
-
- $result = $this->calculate_variations();
- $this->variations = $result['variations'];
- $post_ids = array_intersect( $post_ids, $result['products'] );
- $post_ids = empty( $post_ids ) ? [ 0 ] : $post_ids;
- return $post_ids;
- }
-
-
- /**
- * Calculate variation IDs
- * @param mixed $facet_name Facet name to ignore, or FALSE
- * @return array Associative array of product IDs + variation IDs
- * @since 2.8
- */
- function calculate_variations( $facet_name = false ) {
-
- $new = true;
- $final_products = [];
- $final_variations = [];
-
- // Intersect product + variation IDs across facets
- foreach ( $this->storage as $name => $variation_ids ) {
-
- // Skip facets in "OR" mode
- if ( $facet_name === $name ) {
- continue;
- }
-
- $final_variations = ( $new ) ? $variation_ids : array_intersect( $final_variations, $variation_ids );
- $new = false;
- }
-
- // Lookup each variation's product ID
- foreach ( $final_variations as $variation_id ) {
- if ( isset( $this->lookup['get_product'][ $variation_id ] ) ) {
- $final_products[ $this->lookup['get_product'][ $variation_id ] ] = true; // prevent duplicates
- }
- }
-
- // Append product IDs to the variations array
- $final_products = array_keys( $final_products );
-
- foreach ( $final_products as $id ) {
- $final_variations[] = $id;
- }
-
- return [
- 'products' => $final_products,
- 'variations' => array_unique( $final_variations )
- ];
- }
-
-
- /**
- * Apply variation IDs to load_values() method
- * @since 2.7
- */
- function facet_where( $where_clause, $facet ) {
-
- // Support facets in "OR" mode
- if ( FWP()->helper->facet_is( $facet, 'operator', 'or' ) ) {
- $result = $this->calculate_variations( $facet['name'] );
- $variations = $result['variations'];
- }
- else {
- $variations = $this->variations;
- }
-
- if ( ! empty( $variations ) ) {
- $where_clause .= ' AND variation_id IN (' . implode( ',', $variations ) . ')';
- }
-
- return $where_clause;
- }
-
-
- /**
- * Efficiently grab the product type without wc_get_product()
- * @since 3.3.8
- */
- function get_product_type( $post_id ) {
- global $wpdb;
-
- $sql = "
- SELECT t.name
- FROM $wpdb->terms t
- INNER JOIN $wpdb->term_taxonomy tt ON tt.term_id = t.term_id AND tt.taxonomy = 'product_type'
- INNER JOIN $wpdb->term_relationships tr ON tr.term_taxonomy_id = tt.term_taxonomy_id AND tr.object_id = %d";
-
- $type = $wpdb->get_var(
- $wpdb->prepare( $sql, $post_id )
- );
-
- return ( null !== $type ) ? $type : 'simple';
- }
-
-
- /**
- * Index WooCommerce-specific values
- * @since 2.1.4
- */
- function index_woo_values( $return, $params ) {
- $facet = $params['facet'];
- $defaults = $params['defaults'];
- $post_id = (int) $defaults['post_id'];
- $post_type = get_post_type( $post_id );
-
- // Index out of stock products?
- $index_all = ( 'yes' === FWP()->helper->get_setting( 'wc_index_all', 'no' ) );
- $index_all = apply_filters( 'facetwp_index_all_products', $index_all );
-
- if ( 'product' == $post_type || 'product_variation' == $post_type ) {
- $product = wc_get_product( $post_id );
-
- if ( ! $product || ( ! $index_all && ! $product->is_in_stock() ) ) {
- return true; // skip
- }
- }
-
- // Default handling
- if ( 'product' != $post_type || empty( $facet['source'] ) ) {
- return $return;
- }
-
- // Ignore product attributes with "Used for variations" ticked
- if ( 0 === strpos( $facet['source'], 'tax/pa_' ) ) {
- if ( 'variable' == $this->get_product_type( $post_id ) ) {
- $attrs = $product->get_attributes();
- $attr_name = str_replace( 'tax/', '', $facet['source'] );
- if ( isset( $attrs[ $attr_name ] ) && 1 === $attrs[ $attr_name ]['is_variation'] ) {
- return true; // skip
- }
- }
- }
-
- // Custom woo fields
- if ( 0 === strpos( $facet['source'], 'woo/' ) ) {
- $source = substr( $facet['source'], 4 );
-
- // Price
- if ( 'price' == $source || 'sale_price' == $source || 'regular_price' == $source ) {
- if ( $product->is_type( 'variable' ) ) {
- $method_name = "get_variation_$source";
- $price_min = $product->$method_name( 'min' ); // get_variation_price()
- $price_max = $product->$method_name( 'max' );
- }
- else {
- $method_name = "get_$source";
- $price_min = $price_max = $product->$method_name(); // get_price()
- }
-
- $defaults['facet_value'] = $price_min;
- $defaults['facet_display_value'] = $price_max;
- FWP()->indexer->index_row( $defaults );
- }
-
- // Average Rating
- elseif ( 'average_rating' == $source ) {
- $rating = $product->get_average_rating();
- $defaults['facet_value'] = $rating;
- $defaults['facet_display_value'] = $rating;
- FWP()->indexer->index_row( $defaults );
- }
-
- // Stock Status
- elseif ( 'stock_status' == $source ) {
- $in_stock = $product->is_in_stock();
- $defaults['facet_value'] = (int) $in_stock;
- $defaults['facet_display_value'] = $in_stock ? 'In Stock' : 'Out of Stock';
- FWP()->indexer->index_row( $defaults );
- }
-
- // On Sale
- elseif ( 'on_sale' == $source ) {
- if ( $product->is_on_sale() ) {
- $defaults['facet_value'] = 1;
- $defaults['facet_display_value'] = 'On Sale';
- FWP()->indexer->index_row( $defaults );
- }
- }
-
- // Featured
- elseif ( 'featured' == $source ) {
- if ( $product->is_featured() ) {
- $defaults['facet_value'] = 1;
- $defaults['facet_display_value'] = 'Featured';
- FWP()->indexer->index_row( $defaults );
- }
- }
-
- // Product Type
- elseif ( 'product_type' == $source ) {
- $type = $product->get_type();
- $defaults['facet_value'] = $type;
- $defaults['facet_display_value'] = $type;
- FWP()->indexer->index_row( $defaults );
- }
-
- return true; // skip
- }
-
- return $return;
- }
-
-
- /**
- * Allow certain hard-coded choices to be translated dynamically
- * instead of stored as translated in the index table
- * @since 3.9.6
- */
- function translate_hardcoded_choices( $label, $params ) {
- $source = $params['facet']['source'];
-
- if ( 'woo/stock_status' == $source ) {
- $label = ( 'In Stock' == $label ) ? __( 'In Stock', 'fwp-front' ) : __( 'Out of Stock', 'fwp-front' );
- }
- elseif ( 'woo/on_sale' == $source ) {
- $label = __( 'On Sale', 'fwp-front' );
- }
- elseif ( 'woo/featured' == $source ) {
- $label = __( 'Featured', 'fwp-front' );
- }
-
- return $label;
- }
-
-
- /**
- * WooCommerce removes its sort hooks after the main product_query runs
- * We need to preserve the sort for FacetWP to work
- *
- * @since 3.2.8
- */
- function preserve_sort( $clauses, $query ) {
-
- if ( ! apply_filters( 'facetwp_woocommerce_preserve_sort', true ) ) {
- return $clauses;
- }
-
- $prefix = FWP()->helper->get_setting( 'prefix' );
- $using_sort = isset( FWP()->facet->http_params['get'][ $prefix . 'sort' ] );
-
- if ( 'product_query' == $query->get( 'wc_query' ) && true === $query->get( 'facetwp' ) && ! $using_sort ) {
- if ( false === $this->post_clauses ) {
- $this->post_clauses = $clauses;
- }
- else {
- $clauses['join'] = $this->post_clauses['join'];
- $clauses['where'] = $this->post_clauses['where'];
- $clauses['orderby'] = $this->post_clauses['orderby'];
-
- // Narrow the main query results
- $where_clause = FWP()->facet->where_clause;
-
- if ( ! empty( $where_clause ) ) {
- $column = $GLOBALS['wpdb']->posts;
- $clauses['where'] .= str_replace( 'post_id', "$column.ID", $where_clause );
- }
- }
- }
-
- return $clauses;
- }
-
-
- /**
- * Prevent WooCommerce from redirecting to single result page
- * @since 3.3.7
- */
- function redirect_single_search_result( $bool ) {
- $using_facetwp = ( FWP()->request->is_refresh || ! empty( FWP()->request->url_vars ) );
- return $using_facetwp ? false : $bool;
- }
-
-
- /**
- * Prevent WooCommerce sort when a FacetWP sort is active
- * @since 3.6.8
- */
- function default_catalog_orderby( $orderby ) {
- $sort = FWP()->helper->get_setting( 'prefix' ) . 'sort';
- return isset( $_GET[ $sort ] ) ? 'menu_order' : $orderby;
- }
-}
-
-
-if ( is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
- new FacetWP_Integration_WooCommerce();
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/integrations/wp-cli/wp-cli.php b/wp/wp-content/plugins/facetwp/includes/integrations/wp-cli/wp-cli.php
deleted file mode 100644
index 9cf36073..00000000
--- a/wp/wp-content/plugins/facetwp/includes/integrations/wp-cli/wp-cli.php
+++ /dev/null
@@ -1,150 +0,0 @@
-]
- * : Index specific post IDs (comma-separated).
- *
- * [--facets=]
- * : Index specific facet names (comma-separated).
- */
- function index( $args, $assoc_args ) {
- $index_all = true;
-
- if ( isset( $assoc_args['ids'] ) ) {
- if ( empty( $assoc_args['ids'] ) ) {
- WP_CLI::error( 'IDs empty.' );
- }
-
- $ids = preg_replace( '/\s+/', '', $assoc_args['ids'] );
- $ids = explode( ',', $ids );
- $post_ids = array_filter( $ids, 'ctype_digit' );
- $index_all = false;
- }
- else {
- $post_ids = FWP()->indexer->get_post_ids_to_index();
- }
-
- if ( isset( $assoc_args['facets'] ) ) {
- if ( empty( $assoc_args['facets'] ) ) {
- WP_CLI::error( 'Facets empty.' );
- }
-
- $facets = [];
- $facet_names = preg_replace( '/\s+/', '', $assoc_args['facets'] );
- $facet_names = explode( ',', $facet_names );
- foreach ( $facet_names as $name ) {
- $facet = FWP()->helper->get_facet_by_name( $name );
- if ( false !== $facet ) {
- $facets[] = $facet;
- }
- }
-
- $index_all = false;
- }
- else {
- $facets = FWP()->helper->get_facets();
- }
-
- $progress = WP_CLI\Utils\make_progress_bar( 'Indexing:', count( $post_ids ) );
-
- // prep
- if ( $index_all ) {
- FWP()->indexer->manage_temp_table( 'create' );
- }
- else {
- $assoc_args['pre_index'] = true;
- $this->purge( $args, $assoc_args );
- }
-
- // manually load value modifiers
- FWP()->indexer->load_value_modifiers( $facets );
-
- // index
- foreach ( $post_ids as $post_id ) {
- FWP()->indexer->index_post( $post_id, $facets );
- $progress->tick();
- }
-
- // cleanup
- if ( $index_all ) {
- update_option( 'facetwp_last_indexed', time(), 'no' );
- FWP()->indexer->manage_temp_table( 'replace' );
- FWP()->indexer->manage_temp_table( 'delete' );
- }
-
- $progress->finish();
-
- WP_CLI::success( 'Indexing complete.' );
- }
-
-
- /**
- * Purge facet data.
- *
- * ## OPTIONS
- *
- * [--ids=]
- * : Purge specific post IDs (comma-separated).
- *
- * [--facets=]
- * : Purge specific facet names (comma-separated).
- */
- function purge( $args, $assoc_args ) {
- global $wpdb;
-
- $table = FWP()->indexer->table;
-
- if ( ! isset( $assoc_args['ids'] ) && ! isset( $assoc_args['facets'] ) ) {
- $sql = "TRUNCATE TABLE $table";
- }
- else {
- $where = [];
-
- if ( isset( $assoc_args['ids'] ) ) {
- if ( empty( $assoc_args['ids'] ) ) {
- WP_CLI::error( 'IDs empty.' );
- }
-
- $ids = preg_replace( '/\s+/', '', ',' . $assoc_args['ids'] );
- $ids = explode( ',', $ids );
- $post_ids = array_filter( $ids, 'ctype_digit' );
- $post_ids = implode( "','", $post_ids );
- $where[] = "post_id IN ('$post_ids')";
- }
-
- if ( isset( $assoc_args['facets'] ) ) {
- if ( empty( $assoc_args['facets'] ) ) {
- WP_CLI::error( 'Facets empty.' );
- }
-
- $facet_names = preg_replace( '/\s+/', '', $assoc_args['facets'] );
- $facet_names = explode( ',', $facet_names );
- $facet_names = array_map( 'esc_sql', $facet_names );
- $facet_names = implode( "','", $facet_names );
- $where[] = "facet_name IN ('$facet_names')";
- }
-
- $sql = "DELETE FROM $table WHERE " . implode( ' AND ', $where );
- }
-
- $wpdb->query( $sql );
-
- if ( ! isset( $assoc_args['pre_index'] ) ) {
- WP_CLI::success( 'Purge complete.' );
- }
- }
-}
-
-if ( defined( 'WP_CLI' ) && WP_CLI ) {
- WP_CLI::add_command( 'facetwp', 'FacetWP_Integration_WP_CLI' );
-}
diff --git a/wp/wp-content/plugins/facetwp/includes/integrations/wp-rocket/wp-rocket.php b/wp/wp-content/plugins/facetwp/includes/integrations/wp-rocket/wp-rocket.php
deleted file mode 100644
index b0799aae..00000000
--- a/wp/wp-content/plugins/facetwp/includes/integrations/wp-rocket/wp-rocket.php
+++ /dev/null
@@ -1,24 +0,0 @@
-.
-*/
-
-defined( 'ABSPATH' ) or exit;
-
-class FacetWP
-{
-
- private static $instance;
-
-
- function __construct() {
-
- // php check
- if ( version_compare( phpversion(), '7.0', '<' ) ) {
- add_action( 'admin_notices', array( $this, 'upgrade_notice' ) );
- return;
- }
-
- // setup variables
- define( 'FACETWP_VERSION', '4.1.5' );
- define( 'FACETWP_DIR', dirname( __FILE__ ) );
- define( 'FACETWP_URL', plugins_url( '', __FILE__ ) );
- define( 'FACETWP_BASENAME', plugin_basename( __FILE__ ) );
-
- // get the gears turning
- include( FACETWP_DIR . '/includes/class-init.php' );
- }
-
-
- /**
- * Singleton
- */
- public static function instance() {
- if ( ! isset( self::$instance ) ) {
- self::$instance = new self;
- }
- return self::$instance;
- }
-
-
- /**
- * Require PHP 7.0+
- */
- function upgrade_notice() {
- $message = __( 'FacetWP requires PHP %s or above. Please contact your host and request a PHP upgrade.', 'fwp' );
- echo '' . sprintf( $message, '7.0' ) . '
';
- }
-}
-
-
-function FWP() {
- return FacetWP::instance();
-}
-
-
-FWP();
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-ca.mo b/wp/wp-content/plugins/facetwp/languages/fwp-front-ca.mo
deleted file mode 100644
index bc6f1f21..00000000
Binary files a/wp/wp-content/plugins/facetwp/languages/fwp-front-ca.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-ca.po b/wp/wp-content/plugins/facetwp/languages/fwp-front-ca.po
deleted file mode 100644
index fc53aafe..00000000
--- a/wp/wp-content/plugins/facetwp/languages/fwp-front-ca.po
+++ /dev/null
@@ -1,185 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: FacetWP (front)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-21 14:01+0000\n"
-"PO-Revision-Date: 2022-08-15 12:41+0000\n"
-"Last-Translator: Matt Gibbs \n"
-"Language-Team: Catalan\n"
-"Language: ca\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Loco https://localise.biz/\n"
-"X-Loco-Version: 2.5.0; wp-5.6\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-
-#: includes/facets/rating.php:111
-msgid "& up"
-msgstr "& up"
-
-#: includes/facets/fselect.php:37 includes/facets/fselect.php:80
-#: includes/facets/dropdown.php:35 includes/facets/hierarchy.php:26
-msgid "Any"
-msgstr "Qualsevol"
-
-#: includes/facets/date_range.php:282
-msgid "Clear"
-msgstr "Esborrar"
-
-#: includes/facets/proximity.php:180
-msgid "Clear location"
-msgstr "Localització de clara"
-
-#: includes/facets/date_range.php:23
-msgid "Date"
-msgstr "Data"
-
-#: includes/facets/sort.php:154
-msgid "Date (Newest)"
-msgstr "Data (més recent)"
-
-#: includes/facets/sort.php:161
-msgid "Date (Oldest)"
-msgstr "Data (més antic)"
-
-#: includes/facets/proximity.php:285
-msgid "Distance"
-msgstr "Distància"
-
-#: includes/facets/date_range.php:29
-msgid "End Date"
-msgstr "Data final"
-
-#: includes/facets/search.php:20
-msgid "Enter keywords"
-msgstr "Introduïu les paraules clau"
-
-#: includes/facets/proximity.php:64
-msgid "Enter location"
-msgstr "Introduïu la ubicació"
-
-#: includes/facets/autocomplete.php:157
-msgid "Enter {n} or more characters"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:502
-msgid "Featured"
-msgstr ""
-
-#: includes/facets/number_range.php:32 includes/facets/autocomplete.php:64
-msgid "Go"
-msgstr "Cercar"
-
-#: includes/class-display.php:175
-msgid "Go to next page"
-msgstr ""
-
-#: includes/class-display.php:174
-msgid "Go to page"
-msgstr ""
-
-#: includes/class-display.php:176
-msgid "Go to previous page"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "In Stock"
-msgstr "En Stock"
-
-#: includes/facets/autocomplete.php:156
-msgid "Loading"
-msgstr ""
-
-#: includes/facets/number_range.php:29
-msgid "Max"
-msgstr "Màx"
-
-#: includes/facets/number_range.php:26
-msgid "Min"
-msgstr "Min"
-
-#: includes/integrations/acf/acf.php:293
-msgid "No"
-msgstr "No"
-
-#: includes/facets/autocomplete.php:97 includes/facets/autocomplete.php:158
-msgid "No results"
-msgstr "No hi ha resultats"
-
-#: includes/class-display.php:194 includes/facets/fselect.php:87
-msgid "No results found"
-msgstr "No s'han trobat resultats"
-
-#: includes/facets/number_range.php:23
-msgid "Number"
-msgstr "Número"
-
-#: includes/class-renderer.php:512
-msgid "of"
-msgstr "de"
-
-#: includes/integrations/woocommerce/woocommerce.php:499
-msgid "On Sale"
-msgstr "Oferta"
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "Out of Stock"
-msgstr "Sense Stock"
-
-#: includes/class-renderer.php:569
-msgid "Per page"
-msgstr "Per pàgina"
-
-#: includes/facets/slider.php:20 includes/facets/reset.php:15
-msgid "Reset"
-msgstr "Restablir"
-
-#: includes/facets/fselect.php:86
-msgid "Search"
-msgstr "Cercar"
-
-#: includes/facets/checkboxes.php:131 includes/facets/hierarchy.php:161
-msgid "See less"
-msgstr "Veure menys"
-
-#: includes/facets/hierarchy.php:160
-msgid "See more"
-msgstr "Veure més"
-
-#: includes/facets/checkboxes.php:130
-msgid "See {num} more"
-msgstr "Veure més {num}"
-
-#: includes/facets/sort.php:136
-msgid "Sort by"
-msgstr "Ordena per"
-
-#: includes/facets/date_range.php:26
-msgid "Start Date"
-msgstr "Data inici"
-
-#: includes/facets/autocomplete.php:61
-msgid "Start typing"
-msgstr "Comenceu a escriure"
-
-#: includes/facets/sort.php:140
-msgid "Title (A-Z)"
-msgstr "Títol (A-Z)"
-
-#: includes/facets/sort.php:147
-msgid "Title (Z-A)"
-msgstr "Títol (Z-A)"
-
-#: includes/facets/rating.php:112
-msgid "Undo"
-msgstr "Desfer"
-
-#: includes/integrations/acf/acf.php:293
-msgid "Yes"
-msgstr "Sí"
-
-#: includes/facets/fselect.php:85
-msgid "{n} selected"
-msgstr "{n} seleccionats"
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-da_DK.mo b/wp/wp-content/plugins/facetwp/languages/fwp-front-da_DK.mo
deleted file mode 100644
index 7bb5a63d..00000000
Binary files a/wp/wp-content/plugins/facetwp/languages/fwp-front-da_DK.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-da_DK.po b/wp/wp-content/plugins/facetwp/languages/fwp-front-da_DK.po
deleted file mode 100644
index f92fd4ca..00000000
--- a/wp/wp-content/plugins/facetwp/languages/fwp-front-da_DK.po
+++ /dev/null
@@ -1,185 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: FacetWP (front)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-21 14:01+0000\n"
-"PO-Revision-Date: 2022-08-15 12:41+0000\n"
-"Last-Translator: Matt Gibbs \n"
-"Language-Team: Danish\n"
-"Language: da_DK\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Loco https://localise.biz/\n"
-"X-Loco-Version: 2.5.0; wp-5.6\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-
-#: includes/facets/rating.php:111
-msgid "& up"
-msgstr "& op"
-
-#: includes/facets/fselect.php:37 includes/facets/fselect.php:80
-#: includes/facets/dropdown.php:35 includes/facets/hierarchy.php:26
-msgid "Any"
-msgstr "Enhver"
-
-#: includes/facets/date_range.php:282
-msgid "Clear"
-msgstr "Ryd"
-
-#: includes/facets/proximity.php:180
-msgid "Clear location"
-msgstr "Rud beliggenhed"
-
-#: includes/facets/date_range.php:23
-msgid "Date"
-msgstr "Dato"
-
-#: includes/facets/sort.php:154
-msgid "Date (Newest)"
-msgstr "Dato (nyeste)"
-
-#: includes/facets/sort.php:161
-msgid "Date (Oldest)"
-msgstr "Dato (ældste)"
-
-#: includes/facets/proximity.php:285
-msgid "Distance"
-msgstr "Afstand"
-
-#: includes/facets/date_range.php:29
-msgid "End Date"
-msgstr "Slut dato"
-
-#: includes/facets/search.php:20
-msgid "Enter keywords"
-msgstr "Indtast søgeord"
-
-#: includes/facets/proximity.php:64
-msgid "Enter location"
-msgstr "Indtast lokation"
-
-#: includes/facets/autocomplete.php:157
-msgid "Enter {n} or more characters"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:502
-msgid "Featured"
-msgstr ""
-
-#: includes/facets/number_range.php:32 includes/facets/autocomplete.php:64
-msgid "Go"
-msgstr "Gå"
-
-#: includes/class-display.php:175
-msgid "Go to next page"
-msgstr ""
-
-#: includes/class-display.php:174
-msgid "Go to page"
-msgstr ""
-
-#: includes/class-display.php:176
-msgid "Go to previous page"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "In Stock"
-msgstr "På lager"
-
-#: includes/facets/autocomplete.php:156
-msgid "Loading"
-msgstr ""
-
-#: includes/facets/number_range.php:29
-msgid "Max"
-msgstr "Maks"
-
-#: includes/facets/number_range.php:26
-msgid "Min"
-msgstr "Min"
-
-#: includes/integrations/acf/acf.php:293
-msgid "No"
-msgstr "Nej"
-
-#: includes/facets/autocomplete.php:97 includes/facets/autocomplete.php:158
-msgid "No results"
-msgstr "Ingen resultater"
-
-#: includes/class-display.php:194 includes/facets/fselect.php:87
-msgid "No results found"
-msgstr "Ingen resultater fundet"
-
-#: includes/facets/number_range.php:23
-msgid "Number"
-msgstr "Nummer"
-
-#: includes/class-renderer.php:512
-msgid "of"
-msgstr "af"
-
-#: includes/integrations/woocommerce/woocommerce.php:499
-msgid "On Sale"
-msgstr "Udsalg"
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "Out of Stock"
-msgstr "Ikke på lager"
-
-#: includes/class-renderer.php:569
-msgid "Per page"
-msgstr "Per side"
-
-#: includes/facets/slider.php:20 includes/facets/reset.php:15
-msgid "Reset"
-msgstr "Nulstil"
-
-#: includes/facets/fselect.php:86
-msgid "Search"
-msgstr "Søg"
-
-#: includes/facets/checkboxes.php:131 includes/facets/hierarchy.php:161
-msgid "See less"
-msgstr "Se mindre"
-
-#: includes/facets/hierarchy.php:160
-msgid "See more"
-msgstr "Læs mere"
-
-#: includes/facets/checkboxes.php:130
-msgid "See {num} more"
-msgstr "Se {num} mere"
-
-#: includes/facets/sort.php:136
-msgid "Sort by"
-msgstr "Sorter efter"
-
-#: includes/facets/date_range.php:26
-msgid "Start Date"
-msgstr "Start dato"
-
-#: includes/facets/autocomplete.php:61
-msgid "Start typing"
-msgstr "Begynd at skrive"
-
-#: includes/facets/sort.php:140
-msgid "Title (A-Z)"
-msgstr "Titel (A - Å)"
-
-#: includes/facets/sort.php:147
-msgid "Title (Z-A)"
-msgstr "Titel (Å-A)"
-
-#: includes/facets/rating.php:112
-msgid "Undo"
-msgstr "Fortryd"
-
-#: includes/integrations/acf/acf.php:293
-msgid "Yes"
-msgstr "Ja"
-
-#: includes/facets/fselect.php:85
-msgid "{n} selected"
-msgstr "{n} valgt"
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-de_DE.mo b/wp/wp-content/plugins/facetwp/languages/fwp-front-de_DE.mo
deleted file mode 100644
index 07edce40..00000000
Binary files a/wp/wp-content/plugins/facetwp/languages/fwp-front-de_DE.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-de_DE.po b/wp/wp-content/plugins/facetwp/languages/fwp-front-de_DE.po
deleted file mode 100644
index fa29881f..00000000
--- a/wp/wp-content/plugins/facetwp/languages/fwp-front-de_DE.po
+++ /dev/null
@@ -1,185 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: FacetWP (front)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-21 14:01+0000\n"
-"PO-Revision-Date: 2022-08-15 12:41+0000\n"
-"Last-Translator: Matt Gibbs \n"
-"Language-Team: German\n"
-"Language: de_DE\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Loco https://localise.biz/\n"
-"X-Loco-Version: 2.5.0; wp-5.6\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-
-#: includes/facets/rating.php:111
-msgid "& up"
-msgstr "& up"
-
-#: includes/facets/fselect.php:37 includes/facets/fselect.php:80
-#: includes/facets/dropdown.php:35 includes/facets/hierarchy.php:26
-msgid "Any"
-msgstr "Alle"
-
-#: includes/facets/date_range.php:282
-msgid "Clear"
-msgstr "Zurücksetzen"
-
-#: includes/facets/proximity.php:180
-msgid "Clear location"
-msgstr "Location löschen"
-
-#: includes/facets/date_range.php:23
-msgid "Date"
-msgstr "Datum"
-
-#: includes/facets/sort.php:154
-msgid "Date (Newest)"
-msgstr "Datum (Neueste)"
-
-#: includes/facets/sort.php:161
-msgid "Date (Oldest)"
-msgstr "Datum (älteste)"
-
-#: includes/facets/proximity.php:285
-msgid "Distance"
-msgstr "Entfernung"
-
-#: includes/facets/date_range.php:29
-msgid "End Date"
-msgstr "Enddatum"
-
-#: includes/facets/search.php:20
-msgid "Enter keywords"
-msgstr "Suchbegriff eingeben"
-
-#: includes/facets/proximity.php:64
-msgid "Enter location"
-msgstr "Geben Sie den Ort an"
-
-#: includes/facets/autocomplete.php:157
-msgid "Enter {n} or more characters"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:502
-msgid "Featured"
-msgstr ""
-
-#: includes/facets/number_range.php:32 includes/facets/autocomplete.php:64
-msgid "Go"
-msgstr "Los"
-
-#: includes/class-display.php:175
-msgid "Go to next page"
-msgstr ""
-
-#: includes/class-display.php:174
-msgid "Go to page"
-msgstr ""
-
-#: includes/class-display.php:176
-msgid "Go to previous page"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "In Stock"
-msgstr "Auf Lager"
-
-#: includes/facets/autocomplete.php:156
-msgid "Loading"
-msgstr ""
-
-#: includes/facets/number_range.php:29
-msgid "Max"
-msgstr "Max"
-
-#: includes/facets/number_range.php:26
-msgid "Min"
-msgstr "Min"
-
-#: includes/integrations/acf/acf.php:293
-msgid "No"
-msgstr "Nein"
-
-#: includes/facets/autocomplete.php:97 includes/facets/autocomplete.php:158
-msgid "No results"
-msgstr "Keine Ergebnisse"
-
-#: includes/class-display.php:194 includes/facets/fselect.php:87
-msgid "No results found"
-msgstr "Keine Ergebnisse gefunden"
-
-#: includes/facets/number_range.php:23
-msgid "Number"
-msgstr "Nummer"
-
-#: includes/class-renderer.php:512
-msgid "of"
-msgstr "von"
-
-#: includes/integrations/woocommerce/woocommerce.php:499
-msgid "On Sale"
-msgstr "Im Angebot"
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "Out of Stock"
-msgstr "Ausverkauft"
-
-#: includes/class-renderer.php:569
-msgid "Per page"
-msgstr "Pro Seite"
-
-#: includes/facets/slider.php:20 includes/facets/reset.php:15
-msgid "Reset"
-msgstr "Zurücksetzen"
-
-#: includes/facets/fselect.php:86
-msgid "Search"
-msgstr "Suche"
-
-#: includes/facets/checkboxes.php:131 includes/facets/hierarchy.php:161
-msgid "See less"
-msgstr "Weniger sehen"
-
-#: includes/facets/hierarchy.php:160
-msgid "See more"
-msgstr "Mehr anzeigen"
-
-#: includes/facets/checkboxes.php:130
-msgid "See {num} more"
-msgstr "{num} weitere anzeigen"
-
-#: includes/facets/sort.php:136
-msgid "Sort by"
-msgstr "Sortieren nach"
-
-#: includes/facets/date_range.php:26
-msgid "Start Date"
-msgstr "Startdatum"
-
-#: includes/facets/autocomplete.php:61
-msgid "Start typing"
-msgstr "Adresse eingeben"
-
-#: includes/facets/sort.php:140
-msgid "Title (A-Z)"
-msgstr "Titel (A-Z)"
-
-#: includes/facets/sort.php:147
-msgid "Title (Z-A)"
-msgstr "Titel (Z-A)"
-
-#: includes/facets/rating.php:112
-msgid "Undo"
-msgstr "Rückgängig"
-
-#: includes/integrations/acf/acf.php:293
-msgid "Yes"
-msgstr "Ja"
-
-#: includes/facets/fselect.php:85
-msgid "{n} selected"
-msgstr "{n} ausgewählt"
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-es_AR.mo b/wp/wp-content/plugins/facetwp/languages/fwp-front-es_AR.mo
deleted file mode 100644
index 40fd2c9f..00000000
Binary files a/wp/wp-content/plugins/facetwp/languages/fwp-front-es_AR.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-es_AR.po b/wp/wp-content/plugins/facetwp/languages/fwp-front-es_AR.po
deleted file mode 100644
index 2c64b557..00000000
--- a/wp/wp-content/plugins/facetwp/languages/fwp-front-es_AR.po
+++ /dev/null
@@ -1,185 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: FacetWP (front)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-21 14:01+0000\n"
-"PO-Revision-Date: 2022-08-15 12:41+0000\n"
-"Last-Translator: Matt Gibbs \n"
-"Language-Team: Spanish (Argentina)\n"
-"Language: es_AR\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Loco https://localise.biz/\n"
-"X-Loco-Version: 2.5.0; wp-5.6\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-
-#: includes/facets/rating.php:111
-msgid "& up"
-msgstr "& up"
-
-#: includes/facets/fselect.php:37 includes/facets/fselect.php:80
-#: includes/facets/dropdown.php:35 includes/facets/hierarchy.php:26
-msgid "Any"
-msgstr "Cualquier"
-
-#: includes/facets/date_range.php:282
-msgid "Clear"
-msgstr "Limpiar"
-
-#: includes/facets/proximity.php:180
-msgid "Clear location"
-msgstr "Borrar Ubicación"
-
-#: includes/facets/date_range.php:23
-msgid "Date"
-msgstr "Fecha"
-
-#: includes/facets/sort.php:154
-msgid "Date (Newest)"
-msgstr "Fecha (más reciente)"
-
-#: includes/facets/sort.php:161
-msgid "Date (Oldest)"
-msgstr "Fecha (más antigua)"
-
-#: includes/facets/proximity.php:285
-msgid "Distance"
-msgstr "Distancia"
-
-#: includes/facets/date_range.php:29
-msgid "End Date"
-msgstr "Último día"
-
-#: includes/facets/search.php:20
-msgid "Enter keywords"
-msgstr "Ingrese palabras claves"
-
-#: includes/facets/proximity.php:64
-msgid "Enter location"
-msgstr "Introducir ubicación"
-
-#: includes/facets/autocomplete.php:157
-msgid "Enter {n} or more characters"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:502
-msgid "Featured"
-msgstr ""
-
-#: includes/facets/number_range.php:32 includes/facets/autocomplete.php:64
-msgid "Go"
-msgstr "Ir"
-
-#: includes/class-display.php:175
-msgid "Go to next page"
-msgstr ""
-
-#: includes/class-display.php:174
-msgid "Go to page"
-msgstr ""
-
-#: includes/class-display.php:176
-msgid "Go to previous page"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "In Stock"
-msgstr "En Stock"
-
-#: includes/facets/autocomplete.php:156
-msgid "Loading"
-msgstr ""
-
-#: includes/facets/number_range.php:29
-msgid "Max"
-msgstr "Max"
-
-#: includes/facets/number_range.php:26
-msgid "Min"
-msgstr "Minutos"
-
-#: includes/integrations/acf/acf.php:293
-msgid "No"
-msgstr "No"
-
-#: includes/facets/autocomplete.php:97 includes/facets/autocomplete.php:158
-msgid "No results"
-msgstr "No hay resultados"
-
-#: includes/class-display.php:194 includes/facets/fselect.php:87
-msgid "No results found"
-msgstr "No se encontraron resultados"
-
-#: includes/facets/number_range.php:23
-msgid "Number"
-msgstr "Número"
-
-#: includes/class-renderer.php:512
-msgid "of"
-msgstr "de"
-
-#: includes/integrations/woocommerce/woocommerce.php:499
-msgid "On Sale"
-msgstr "A la venta"
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "Out of Stock"
-msgstr "Fuera de Stock"
-
-#: includes/class-renderer.php:569
-msgid "Per page"
-msgstr "Por página"
-
-#: includes/facets/slider.php:20 includes/facets/reset.php:15
-msgid "Reset"
-msgstr "Reiniciar"
-
-#: includes/facets/fselect.php:86
-msgid "Search"
-msgstr "Buscar"
-
-#: includes/facets/checkboxes.php:131 includes/facets/hierarchy.php:161
-msgid "See less"
-msgstr "Ver menos"
-
-#: includes/facets/hierarchy.php:160
-msgid "See more"
-msgstr "Ver más"
-
-#: includes/facets/checkboxes.php:130
-msgid "See {num} more"
-msgstr "Ver {num} más"
-
-#: includes/facets/sort.php:136
-msgid "Sort by"
-msgstr "Ordenar por"
-
-#: includes/facets/date_range.php:26
-msgid "Start Date"
-msgstr "Fecha de Comienzo"
-
-#: includes/facets/autocomplete.php:61
-msgid "Start typing"
-msgstr "Comience a escribir"
-
-#: includes/facets/sort.php:140
-msgid "Title (A-Z)"
-msgstr "Título (A-Z)"
-
-#: includes/facets/sort.php:147
-msgid "Title (Z-A)"
-msgstr "Título (Z-A)"
-
-#: includes/facets/rating.php:112
-msgid "Undo"
-msgstr "Deshacer"
-
-#: includes/integrations/acf/acf.php:293
-msgid "Yes"
-msgstr "Sí"
-
-#: includes/facets/fselect.php:85
-msgid "{n} selected"
-msgstr "{n} selecciones"
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-es_ES.mo b/wp/wp-content/plugins/facetwp/languages/fwp-front-es_ES.mo
deleted file mode 100644
index 5efdbcfa..00000000
Binary files a/wp/wp-content/plugins/facetwp/languages/fwp-front-es_ES.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-es_ES.po b/wp/wp-content/plugins/facetwp/languages/fwp-front-es_ES.po
deleted file mode 100644
index beaf4419..00000000
--- a/wp/wp-content/plugins/facetwp/languages/fwp-front-es_ES.po
+++ /dev/null
@@ -1,185 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: FacetWP (front)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-21 14:01+0000\n"
-"PO-Revision-Date: 2022-08-15 12:41+0000\n"
-"Last-Translator: Matt Gibbs \n"
-"Language-Team: Spanish (Spain)\n"
-"Language: es_ES\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Loco https://localise.biz/\n"
-"X-Loco-Version: 2.5.0; wp-5.6\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-
-#: includes/facets/rating.php:111
-msgid "& up"
-msgstr "& up"
-
-#: includes/facets/fselect.php:37 includes/facets/fselect.php:80
-#: includes/facets/dropdown.php:35 includes/facets/hierarchy.php:26
-msgid "Any"
-msgstr "Cualquiera"
-
-#: includes/facets/date_range.php:282
-msgid "Clear"
-msgstr "Limpiar"
-
-#: includes/facets/proximity.php:180
-msgid "Clear location"
-msgstr "Borrar ubicación"
-
-#: includes/facets/date_range.php:23
-msgid "Date"
-msgstr "Fecha"
-
-#: includes/facets/sort.php:154
-msgid "Date (Newest)"
-msgstr "Fecha (más reciente)"
-
-#: includes/facets/sort.php:161
-msgid "Date (Oldest)"
-msgstr "Fecha (más antigua)"
-
-#: includes/facets/proximity.php:285
-msgid "Distance"
-msgstr "Distancia"
-
-#: includes/facets/date_range.php:29
-msgid "End Date"
-msgstr "Fecha de finalización"
-
-#: includes/facets/search.php:20
-msgid "Enter keywords"
-msgstr "¿Qué estás buscando?"
-
-#: includes/facets/proximity.php:64
-msgid "Enter location"
-msgstr "Introducir ubicación"
-
-#: includes/facets/autocomplete.php:157
-msgid "Enter {n} or more characters"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:502
-msgid "Featured"
-msgstr ""
-
-#: includes/facets/number_range.php:32 includes/facets/autocomplete.php:64
-msgid "Go"
-msgstr "Ir"
-
-#: includes/class-display.php:175
-msgid "Go to next page"
-msgstr ""
-
-#: includes/class-display.php:174
-msgid "Go to page"
-msgstr ""
-
-#: includes/class-display.php:176
-msgid "Go to previous page"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "In Stock"
-msgstr "En Stock"
-
-#: includes/facets/autocomplete.php:156
-msgid "Loading"
-msgstr ""
-
-#: includes/facets/number_range.php:29
-msgid "Max"
-msgstr "Máx"
-
-#: includes/facets/number_range.php:26
-msgid "Min"
-msgstr "Mín"
-
-#: includes/integrations/acf/acf.php:293
-msgid "No"
-msgstr "No"
-
-#: includes/facets/autocomplete.php:97 includes/facets/autocomplete.php:158
-msgid "No results"
-msgstr "No hay resultados"
-
-#: includes/class-display.php:194 includes/facets/fselect.php:87
-msgid "No results found"
-msgstr "No se han encontrado resultados"
-
-#: includes/facets/number_range.php:23
-msgid "Number"
-msgstr "Número"
-
-#: includes/class-renderer.php:512
-msgid "of"
-msgstr "de"
-
-#: includes/integrations/woocommerce/woocommerce.php:499
-msgid "On Sale"
-msgstr "En oferta"
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "Out of Stock"
-msgstr "Agotado"
-
-#: includes/class-renderer.php:569
-msgid "Per page"
-msgstr "Por página"
-
-#: includes/facets/slider.php:20 includes/facets/reset.php:15
-msgid "Reset"
-msgstr "Reiniciar"
-
-#: includes/facets/fselect.php:86
-msgid "Search"
-msgstr "Buscar"
-
-#: includes/facets/checkboxes.php:131 includes/facets/hierarchy.php:161
-msgid "See less"
-msgstr "Ver menos"
-
-#: includes/facets/hierarchy.php:160
-msgid "See more"
-msgstr "Ver más"
-
-#: includes/facets/checkboxes.php:130
-msgid "See {num} more"
-msgstr "Ver {num} más"
-
-#: includes/facets/sort.php:136
-msgid "Sort by"
-msgstr "Ordenar por"
-
-#: includes/facets/date_range.php:26
-msgid "Start Date"
-msgstr "Fecha de inicio"
-
-#: includes/facets/autocomplete.php:61
-msgid "Start typing"
-msgstr "Escribe algo"
-
-#: includes/facets/sort.php:140
-msgid "Title (A-Z)"
-msgstr "Título (A-Z)"
-
-#: includes/facets/sort.php:147
-msgid "Title (Z-A)"
-msgstr "Título (Z-A)"
-
-#: includes/facets/rating.php:112
-msgid "Undo"
-msgstr "Deshacer"
-
-#: includes/integrations/acf/acf.php:293
-msgid "Yes"
-msgstr "Sí"
-
-#: includes/facets/fselect.php:85
-msgid "{n} selected"
-msgstr "{n} selecciones"
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-fr_FR.mo b/wp/wp-content/plugins/facetwp/languages/fwp-front-fr_FR.mo
deleted file mode 100644
index 55a9072a..00000000
Binary files a/wp/wp-content/plugins/facetwp/languages/fwp-front-fr_FR.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-fr_FR.po b/wp/wp-content/plugins/facetwp/languages/fwp-front-fr_FR.po
deleted file mode 100644
index f76893e9..00000000
--- a/wp/wp-content/plugins/facetwp/languages/fwp-front-fr_FR.po
+++ /dev/null
@@ -1,185 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: FacetWP (front)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-21 14:01+0000\n"
-"PO-Revision-Date: 2022-08-15 12:42+0000\n"
-"Last-Translator: Matt Gibbs \n"
-"Language-Team: French (France)\n"
-"Language: fr_FR\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Loco https://localise.biz/\n"
-"X-Loco-Version: 2.5.0; wp-5.6\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-
-#: includes/facets/rating.php:111
-msgid "& up"
-msgstr "& up"
-
-#: includes/facets/fselect.php:37 includes/facets/fselect.php:80
-#: includes/facets/dropdown.php:35 includes/facets/hierarchy.php:26
-msgid "Any"
-msgstr "Tous"
-
-#: includes/facets/date_range.php:282
-msgid "Clear"
-msgstr "Effacer"
-
-#: includes/facets/proximity.php:180
-msgid "Clear location"
-msgstr "Effacer l’emplacement"
-
-#: includes/facets/date_range.php:23
-msgid "Date"
-msgstr "Date"
-
-#: includes/facets/sort.php:154
-msgid "Date (Newest)"
-msgstr "Date (plus récent)"
-
-#: includes/facets/sort.php:161
-msgid "Date (Oldest)"
-msgstr "Date (la plus ancienne)"
-
-#: includes/facets/proximity.php:285
-msgid "Distance"
-msgstr "Distance"
-
-#: includes/facets/date_range.php:29
-msgid "End Date"
-msgstr "Date de fin"
-
-#: includes/facets/search.php:20
-msgid "Enter keywords"
-msgstr "Rechercher par nom"
-
-#: includes/facets/proximity.php:64
-msgid "Enter location"
-msgstr "Entrez la localisation"
-
-#: includes/facets/autocomplete.php:157
-msgid "Enter {n} or more characters"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:502
-msgid "Featured"
-msgstr ""
-
-#: includes/facets/number_range.php:32 includes/facets/autocomplete.php:64
-msgid "Go"
-msgstr "Aller"
-
-#: includes/class-display.php:175
-msgid "Go to next page"
-msgstr ""
-
-#: includes/class-display.php:174
-msgid "Go to page"
-msgstr ""
-
-#: includes/class-display.php:176
-msgid "Go to previous page"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "In Stock"
-msgstr "En stock"
-
-#: includes/facets/autocomplete.php:156
-msgid "Loading"
-msgstr ""
-
-#: includes/facets/number_range.php:29
-msgid "Max"
-msgstr "Max"
-
-#: includes/facets/number_range.php:26
-msgid "Min"
-msgstr "Min"
-
-#: includes/integrations/acf/acf.php:293
-msgid "No"
-msgstr "Non"
-
-#: includes/facets/autocomplete.php:97 includes/facets/autocomplete.php:158
-msgid "No results"
-msgstr "Aucun résultat"
-
-#: includes/class-display.php:194 includes/facets/fselect.php:87
-msgid "No results found"
-msgstr "Aucun résultat trouvé"
-
-#: includes/facets/number_range.php:23
-msgid "Number"
-msgstr "Nombre"
-
-#: includes/class-renderer.php:512
-msgid "of"
-msgstr "de"
-
-#: includes/integrations/woocommerce/woocommerce.php:499
-msgid "On Sale"
-msgstr "Promo"
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "Out of Stock"
-msgstr "Rupture de stock"
-
-#: includes/class-renderer.php:569
-msgid "Per page"
-msgstr "Par page"
-
-#: includes/facets/slider.php:20 includes/facets/reset.php:15
-msgid "Reset"
-msgstr "Réinitialiser"
-
-#: includes/facets/fselect.php:86
-msgid "Search"
-msgstr "Rechercher"
-
-#: includes/facets/checkboxes.php:131 includes/facets/hierarchy.php:161
-msgid "See less"
-msgstr "Voir moins"
-
-#: includes/facets/hierarchy.php:160
-msgid "See more"
-msgstr "Voir plus"
-
-#: includes/facets/checkboxes.php:130
-msgid "See {num} more"
-msgstr "Voir {num} plus"
-
-#: includes/facets/sort.php:136
-msgid "Sort by"
-msgstr "Trier par"
-
-#: includes/facets/date_range.php:26
-msgid "Start Date"
-msgstr "Date de début"
-
-#: includes/facets/autocomplete.php:61
-msgid "Start typing"
-msgstr "Commencer à taper"
-
-#: includes/facets/sort.php:140
-msgid "Title (A-Z)"
-msgstr "Titre (A-Z)"
-
-#: includes/facets/sort.php:147
-msgid "Title (Z-A)"
-msgstr "Titre (Z-A)"
-
-#: includes/facets/rating.php:112
-msgid "Undo"
-msgstr "Annuler"
-
-#: includes/integrations/acf/acf.php:293
-msgid "Yes"
-msgstr "Oui"
-
-#: includes/facets/fselect.php:85
-msgid "{n} selected"
-msgstr "{n} sélectionné"
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-it_IT.mo b/wp/wp-content/plugins/facetwp/languages/fwp-front-it_IT.mo
deleted file mode 100644
index b91972a0..00000000
Binary files a/wp/wp-content/plugins/facetwp/languages/fwp-front-it_IT.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-it_IT.po b/wp/wp-content/plugins/facetwp/languages/fwp-front-it_IT.po
deleted file mode 100644
index bc9380bc..00000000
--- a/wp/wp-content/plugins/facetwp/languages/fwp-front-it_IT.po
+++ /dev/null
@@ -1,185 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: FacetWP (front)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-21 14:01+0000\n"
-"PO-Revision-Date: 2022-08-15 12:41+0000\n"
-"Last-Translator: Matt Gibbs \n"
-"Language-Team: Italian\n"
-"Language: it_IT\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Loco https://localise.biz/\n"
-"X-Loco-Version: 2.5.0; wp-5.6\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-
-#: includes/facets/rating.php:111
-msgid "& up"
-msgstr "& up"
-
-#: includes/facets/fselect.php:37 includes/facets/fselect.php:80
-#: includes/facets/dropdown.php:35 includes/facets/hierarchy.php:26
-msgid "Any"
-msgstr "Qualsiasi"
-
-#: includes/facets/date_range.php:282
-msgid "Clear"
-msgstr "Cancella"
-
-#: includes/facets/proximity.php:180
-msgid "Clear location"
-msgstr "Cancella località"
-
-#: includes/facets/date_range.php:23
-msgid "Date"
-msgstr "Data"
-
-#: includes/facets/sort.php:154
-msgid "Date (Newest)"
-msgstr "Data (più recente)"
-
-#: includes/facets/sort.php:161
-msgid "Date (Oldest)"
-msgstr "Data (più vecchia)"
-
-#: includes/facets/proximity.php:285
-msgid "Distance"
-msgstr "Distanza"
-
-#: includes/facets/date_range.php:29
-msgid "End Date"
-msgstr "Data Fine"
-
-#: includes/facets/search.php:20
-msgid "Enter keywords"
-msgstr "Inserisci parole chiave"
-
-#: includes/facets/proximity.php:64
-msgid "Enter location"
-msgstr "Inserisci posizione"
-
-#: includes/facets/autocomplete.php:157
-msgid "Enter {n} or more characters"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:502
-msgid "Featured"
-msgstr ""
-
-#: includes/facets/number_range.php:32 includes/facets/autocomplete.php:64
-msgid "Go"
-msgstr "Vai"
-
-#: includes/class-display.php:175
-msgid "Go to next page"
-msgstr ""
-
-#: includes/class-display.php:174
-msgid "Go to page"
-msgstr ""
-
-#: includes/class-display.php:176
-msgid "Go to previous page"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "In Stock"
-msgstr "Disponibile"
-
-#: includes/facets/autocomplete.php:156
-msgid "Loading"
-msgstr ""
-
-#: includes/facets/number_range.php:29
-msgid "Max"
-msgstr "Max"
-
-#: includes/facets/number_range.php:26
-msgid "Min"
-msgstr "Min"
-
-#: includes/integrations/acf/acf.php:293
-msgid "No"
-msgstr "No"
-
-#: includes/facets/autocomplete.php:97 includes/facets/autocomplete.php:158
-msgid "No results"
-msgstr "Nessun risultato"
-
-#: includes/class-display.php:194 includes/facets/fselect.php:87
-msgid "No results found"
-msgstr "Nessun risultato trovato"
-
-#: includes/facets/number_range.php:23
-msgid "Number"
-msgstr "Numero"
-
-#: includes/class-renderer.php:512
-msgid "of"
-msgstr "di"
-
-#: includes/integrations/woocommerce/woocommerce.php:499
-msgid "On Sale"
-msgstr "Offerta"
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "Out of Stock"
-msgstr "Esaurito"
-
-#: includes/class-renderer.php:569
-msgid "Per page"
-msgstr "Per pagina"
-
-#: includes/facets/slider.php:20 includes/facets/reset.php:15
-msgid "Reset"
-msgstr "Reset"
-
-#: includes/facets/fselect.php:86
-msgid "Search"
-msgstr "Cerca"
-
-#: includes/facets/checkboxes.php:131 includes/facets/hierarchy.php:161
-msgid "See less"
-msgstr "Vedi di meno"
-
-#: includes/facets/hierarchy.php:160
-msgid "See more"
-msgstr "Vedi di più"
-
-#: includes/facets/checkboxes.php:130
-msgid "See {num} more"
-msgstr "Vedi altri {num}"
-
-#: includes/facets/sort.php:136
-msgid "Sort by"
-msgstr "Ordina per"
-
-#: includes/facets/date_range.php:26
-msgid "Start Date"
-msgstr "Data Inizio"
-
-#: includes/facets/autocomplete.php:61
-msgid "Start typing"
-msgstr "Scrivi l'indirizzo o la città qui"
-
-#: includes/facets/sort.php:140
-msgid "Title (A-Z)"
-msgstr "Titoli (A-Z)"
-
-#: includes/facets/sort.php:147
-msgid "Title (Z-A)"
-msgstr "Titoli (Z-A)"
-
-#: includes/facets/rating.php:112
-msgid "Undo"
-msgstr "Annulla"
-
-#: includes/integrations/acf/acf.php:293
-msgid "Yes"
-msgstr "Sì"
-
-#: includes/facets/fselect.php:85
-msgid "{n} selected"
-msgstr "{n} selezionato"
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-nb_NO.mo b/wp/wp-content/plugins/facetwp/languages/fwp-front-nb_NO.mo
deleted file mode 100644
index 251944d0..00000000
Binary files a/wp/wp-content/plugins/facetwp/languages/fwp-front-nb_NO.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-nb_NO.po b/wp/wp-content/plugins/facetwp/languages/fwp-front-nb_NO.po
deleted file mode 100644
index cd60c4df..00000000
--- a/wp/wp-content/plugins/facetwp/languages/fwp-front-nb_NO.po
+++ /dev/null
@@ -1,182 +0,0 @@
-# Translation of Plugin: FacetWP - FacetWP frontend in Norwegian (Bokmål)
-# This file is distributed under the same license as the Plugin: FacetWP - FacetWP frontend package.
-msgid ""
-msgstr ""
-"PO-Revision-Date: 2022-08-15 12:42+0000\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Loco https://localise.biz/\n"
-"Language: nb_NO\n"
-"Project-Id-Version: Plugin: FacetWP - FacetWP frontend\n"
-"Language-Team: Norwegian (Bokmål)"
-
-#: includes/facets/rating.php:111
-msgid "& up"
-msgstr "& opp"
-
-#: includes/facets/fselect.php:37 includes/facets/fselect.php:80
-#: includes/facets/dropdown.php:35 includes/facets/hierarchy.php:26
-msgid "Any"
-msgstr "Noen"
-
-#: includes/facets/date_range.php:282
-msgid "Clear"
-msgstr "Tøm"
-
-#: includes/facets/proximity.php:180
-msgid "Clear location"
-msgstr "Tøm sted"
-
-#: includes/facets/date_range.php:23
-msgid "Date"
-msgstr "Dato"
-
-#: includes/facets/sort.php:154
-msgid "Date (Newest)"
-msgstr "Dato (nyeste)"
-
-#: includes/facets/sort.php:161
-msgid "Date (Oldest)"
-msgstr "Dato (eldste)"
-
-#: includes/facets/proximity.php:285
-msgid "Distance"
-msgstr "Avstand"
-
-#: includes/facets/date_range.php:29
-msgid "End Date"
-msgstr "Sluttdato"
-
-#: includes/facets/search.php:20
-msgid "Enter keywords"
-msgstr "Skriv inn søkeord"
-
-#: includes/facets/proximity.php:64
-msgid "Enter location"
-msgstr "Angi plassering"
-
-#: includes/facets/autocomplete.php:157
-msgid "Enter {n} or more characters"
-msgstr "Skriv inn {n} eller flere tegn"
-
-#: includes/integrations/woocommerce/woocommerce.php:502
-msgid "Featured"
-msgstr "Utvalgte"
-
-#: includes/facets/number_range.php:32 includes/facets/autocomplete.php:64
-msgid "Go"
-msgstr "Gå"
-
-#: includes/class-display.php:175
-msgid "Go to next page"
-msgstr ""
-
-#: includes/class-display.php:174
-msgid "Go to page"
-msgstr ""
-
-#: includes/class-display.php:176
-msgid "Go to previous page"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "In Stock"
-msgstr "På lager"
-
-#: includes/facets/autocomplete.php:156
-msgid "Loading"
-msgstr "Laster"
-
-#: includes/facets/number_range.php:29
-msgid "Max"
-msgstr "Maks"
-
-#: includes/facets/number_range.php:26
-msgid "Min"
-msgstr "Min"
-
-#: includes/integrations/acf/acf.php:293
-msgid "No"
-msgstr "Nei"
-
-#: includes/facets/autocomplete.php:97 includes/facets/autocomplete.php:158
-msgid "No results"
-msgstr "Ingen resultater"
-
-#: includes/class-display.php:194 includes/facets/fselect.php:87
-msgid "No results found"
-msgstr "Ingen resultater funnet"
-
-#: includes/facets/number_range.php:23
-msgid "Number"
-msgstr "Nummer"
-
-#: includes/class-renderer.php:512
-msgid "of"
-msgstr "av"
-
-#: includes/integrations/woocommerce/woocommerce.php:499
-msgid "On Sale"
-msgstr "På salg"
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "Out of Stock"
-msgstr "Ikke på lager"
-
-#: includes/class-renderer.php:569
-msgid "Per page"
-msgstr "Per side"
-
-#: includes/facets/slider.php:20 includes/facets/reset.php:15
-msgid "Reset"
-msgstr "Tilbakestill"
-
-#: includes/facets/fselect.php:86
-msgid "Search"
-msgstr "Søk"
-
-#: includes/facets/checkboxes.php:131 includes/facets/hierarchy.php:161
-msgid "See less"
-msgstr "Se mindre"
-
-#: includes/facets/hierarchy.php:160
-msgid "See more"
-msgstr "Se mer"
-
-#: includes/facets/checkboxes.php:130
-msgid "See {num} more"
-msgstr "Se {num} mer"
-
-#: includes/facets/sort.php:136
-msgid "Sort by"
-msgstr "Sorter etter"
-
-#: includes/facets/date_range.php:26
-msgid "Start Date"
-msgstr "Startdato"
-
-#: includes/facets/autocomplete.php:61
-msgid "Start typing"
-msgstr "Begynner å skrive"
-
-#: includes/facets/sort.php:140
-msgid "Title (A-Z)"
-msgstr "Tittel (A-Z)"
-
-#: includes/facets/sort.php:147
-msgid "Title (Z-A)"
-msgstr "Tittel (Z-A)"
-
-#: includes/facets/rating.php:112
-msgid "Undo"
-msgstr "Angre"
-
-#: includes/integrations/acf/acf.php:293
-msgid "Yes"
-msgstr "Ja"
-
-#: includes/facets/fselect.php:85
-msgid "{n} selected"
-msgstr "{n} valgt"
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-nl_NL.mo b/wp/wp-content/plugins/facetwp/languages/fwp-front-nl_NL.mo
deleted file mode 100644
index 9645f817..00000000
Binary files a/wp/wp-content/plugins/facetwp/languages/fwp-front-nl_NL.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-nl_NL.po b/wp/wp-content/plugins/facetwp/languages/fwp-front-nl_NL.po
deleted file mode 100644
index 8f76e1cd..00000000
--- a/wp/wp-content/plugins/facetwp/languages/fwp-front-nl_NL.po
+++ /dev/null
@@ -1,185 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: FacetWP (front)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-21 14:01+0000\n"
-"PO-Revision-Date: 2022-08-15 12:42+0000\n"
-"Last-Translator: Matt Gibbs \n"
-"Language-Team: Dutch\n"
-"Language: nl_NL\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Loco https://localise.biz/\n"
-"X-Loco-Version: 2.5.0; wp-5.6\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-
-#: includes/facets/rating.php:111
-msgid "& up"
-msgstr "& up"
-
-#: includes/facets/fselect.php:37 includes/facets/fselect.php:80
-#: includes/facets/dropdown.php:35 includes/facets/hierarchy.php:26
-msgid "Any"
-msgstr "Alle"
-
-#: includes/facets/date_range.php:282
-msgid "Clear"
-msgstr "Wissen"
-
-#: includes/facets/proximity.php:180
-msgid "Clear location"
-msgstr "Verwijder locatie"
-
-#: includes/facets/date_range.php:23
-msgid "Date"
-msgstr "Datum"
-
-#: includes/facets/sort.php:154
-msgid "Date (Newest)"
-msgstr "Datum (nieuwste)"
-
-#: includes/facets/sort.php:161
-msgid "Date (Oldest)"
-msgstr "Datum (oudste)"
-
-#: includes/facets/proximity.php:285
-msgid "Distance"
-msgstr "Afstand"
-
-#: includes/facets/date_range.php:29
-msgid "End Date"
-msgstr "Einddatum"
-
-#: includes/facets/search.php:20
-msgid "Enter keywords"
-msgstr "Voer trefwoorden in"
-
-#: includes/facets/proximity.php:64
-msgid "Enter location"
-msgstr "Locatie invoeren"
-
-#: includes/facets/autocomplete.php:157
-msgid "Enter {n} or more characters"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:502
-msgid "Featured"
-msgstr ""
-
-#: includes/facets/number_range.php:32 includes/facets/autocomplete.php:64
-msgid "Go"
-msgstr "Ga"
-
-#: includes/class-display.php:175
-msgid "Go to next page"
-msgstr ""
-
-#: includes/class-display.php:174
-msgid "Go to page"
-msgstr ""
-
-#: includes/class-display.php:176
-msgid "Go to previous page"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "In Stock"
-msgstr "Op voorraad"
-
-#: includes/facets/autocomplete.php:156
-msgid "Loading"
-msgstr ""
-
-#: includes/facets/number_range.php:29
-msgid "Max"
-msgstr "Max"
-
-#: includes/facets/number_range.php:26
-msgid "Min"
-msgstr "Min"
-
-#: includes/integrations/acf/acf.php:293
-msgid "No"
-msgstr "Nee"
-
-#: includes/facets/autocomplete.php:97 includes/facets/autocomplete.php:158
-msgid "No results"
-msgstr "Geen resultaten"
-
-#: includes/class-display.php:194 includes/facets/fselect.php:87
-msgid "No results found"
-msgstr "Geen resultaten gevonden"
-
-#: includes/facets/number_range.php:23
-msgid "Number"
-msgstr "Nummer"
-
-#: includes/class-renderer.php:512
-msgid "of"
-msgstr "van"
-
-#: includes/integrations/woocommerce/woocommerce.php:499
-msgid "On Sale"
-msgstr "Aanbieding"
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "Out of Stock"
-msgstr "Niet op voorraad"
-
-#: includes/class-renderer.php:569
-msgid "Per page"
-msgstr "Per Pagina"
-
-#: includes/facets/slider.php:20 includes/facets/reset.php:15
-msgid "Reset"
-msgstr "Reset"
-
-#: includes/facets/fselect.php:86
-msgid "Search"
-msgstr "Zoeken"
-
-#: includes/facets/checkboxes.php:131 includes/facets/hierarchy.php:161
-msgid "See less"
-msgstr "Toon minder"
-
-#: includes/facets/hierarchy.php:160
-msgid "See more"
-msgstr "Bekijk meer"
-
-#: includes/facets/checkboxes.php:130
-msgid "See {num} more"
-msgstr "Toon {num} meer"
-
-#: includes/facets/sort.php:136
-msgid "Sort by"
-msgstr "Sorteer op"
-
-#: includes/facets/date_range.php:26
-msgid "Start Date"
-msgstr "Startdatum"
-
-#: includes/facets/autocomplete.php:61
-msgid "Start typing"
-msgstr "Klantnaam"
-
-#: includes/facets/sort.php:140
-msgid "Title (A-Z)"
-msgstr "Titel (A-Z)"
-
-#: includes/facets/sort.php:147
-msgid "Title (Z-A)"
-msgstr "Titel (Z-A)"
-
-#: includes/facets/rating.php:112
-msgid "Undo"
-msgstr "Ongedaan maken"
-
-#: includes/integrations/acf/acf.php:293
-msgid "Yes"
-msgstr "Ja"
-
-#: includes/facets/fselect.php:85
-msgid "{n} selected"
-msgstr "{n} geselecteerd"
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-pl_PL.mo b/wp/wp-content/plugins/facetwp/languages/fwp-front-pl_PL.mo
deleted file mode 100644
index f8eff2a9..00000000
Binary files a/wp/wp-content/plugins/facetwp/languages/fwp-front-pl_PL.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-pl_PL.po b/wp/wp-content/plugins/facetwp/languages/fwp-front-pl_PL.po
deleted file mode 100644
index d032bce6..00000000
--- a/wp/wp-content/plugins/facetwp/languages/fwp-front-pl_PL.po
+++ /dev/null
@@ -1,186 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: FacetWP (front)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-21 14:01+0000\n"
-"PO-Revision-Date: 2022-08-15 12:41+0000\n"
-"Last-Translator: Matt Gibbs \n"
-"Language-Team: Polish\n"
-"Language: pl_PL\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 "
-"|| n%100>14) ? 1 : 2);\n"
-"X-Generator: Loco https://localise.biz/\n"
-"X-Loco-Version: 2.5.0; wp-5.6\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-
-#: includes/facets/rating.php:111
-msgid "& up"
-msgstr "& się"
-
-#: includes/facets/fselect.php:37 includes/facets/fselect.php:80
-#: includes/facets/dropdown.php:35 includes/facets/hierarchy.php:26
-msgid "Any"
-msgstr "Dowolny"
-
-#: includes/facets/date_range.php:282
-msgid "Clear"
-msgstr "Wyczyść"
-
-#: includes/facets/proximity.php:180
-msgid "Clear location"
-msgstr "Wyczyść lokalizację"
-
-#: includes/facets/date_range.php:23
-msgid "Date"
-msgstr "Data"
-
-#: includes/facets/sort.php:154
-msgid "Date (Newest)"
-msgstr "Daty (Najnowsze)"
-
-#: includes/facets/sort.php:161
-msgid "Date (Oldest)"
-msgstr "Daty (Najstarsze)"
-
-#: includes/facets/proximity.php:285
-msgid "Distance"
-msgstr "Odległość"
-
-#: includes/facets/date_range.php:29
-msgid "End Date"
-msgstr "Data zakończenia"
-
-#: includes/facets/search.php:20
-msgid "Enter keywords"
-msgstr "Wprowadź słowa kluczowe"
-
-#: includes/facets/proximity.php:64
-msgid "Enter location"
-msgstr "Wprowadź lokalizację"
-
-#: includes/facets/autocomplete.php:157
-msgid "Enter {n} or more characters"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:502
-msgid "Featured"
-msgstr ""
-
-#: includes/facets/number_range.php:32 includes/facets/autocomplete.php:64
-msgid "Go"
-msgstr "Idź"
-
-#: includes/class-display.php:175
-msgid "Go to next page"
-msgstr ""
-
-#: includes/class-display.php:174
-msgid "Go to page"
-msgstr ""
-
-#: includes/class-display.php:176
-msgid "Go to previous page"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "In Stock"
-msgstr "W magazynie"
-
-#: includes/facets/autocomplete.php:156
-msgid "Loading"
-msgstr ""
-
-#: includes/facets/number_range.php:29
-msgid "Max"
-msgstr "Max"
-
-#: includes/facets/number_range.php:26
-msgid "Min"
-msgstr "Min"
-
-#: includes/integrations/acf/acf.php:293
-msgid "No"
-msgstr "Nie"
-
-#: includes/facets/autocomplete.php:97 includes/facets/autocomplete.php:158
-msgid "No results"
-msgstr "Brak wyników"
-
-#: includes/class-display.php:194 includes/facets/fselect.php:87
-msgid "No results found"
-msgstr "Nie znaleziono żadnych wyników"
-
-#: includes/facets/number_range.php:23
-msgid "Number"
-msgstr "Numer"
-
-#: includes/class-renderer.php:512
-msgid "of"
-msgstr "z"
-
-#: includes/integrations/woocommerce/woocommerce.php:499
-msgid "On Sale"
-msgstr "W sprzedaży"
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "Out of Stock"
-msgstr "Brak w magazynie"
-
-#: includes/class-renderer.php:569
-msgid "Per page"
-msgstr "Na stronę"
-
-#: includes/facets/slider.php:20 includes/facets/reset.php:15
-msgid "Reset"
-msgstr "Resetuj"
-
-#: includes/facets/fselect.php:86
-msgid "Search"
-msgstr "Szukaj"
-
-#: includes/facets/checkboxes.php:131 includes/facets/hierarchy.php:161
-msgid "See less"
-msgstr "Zobacz mniej"
-
-#: includes/facets/hierarchy.php:160
-msgid "See more"
-msgstr "Zobacz więcej"
-
-#: includes/facets/checkboxes.php:130
-msgid "See {num} more"
-msgstr "Zobacz {num} więcej"
-
-#: includes/facets/sort.php:136
-msgid "Sort by"
-msgstr "Sortuj wg"
-
-#: includes/facets/date_range.php:26
-msgid "Start Date"
-msgstr "Data rozpoczęcia"
-
-#: includes/facets/autocomplete.php:61
-msgid "Start typing"
-msgstr "Zacznij wpisywać"
-
-#: includes/facets/sort.php:140
-msgid "Title (A-Z)"
-msgstr "Nazwy (A-Z)"
-
-#: includes/facets/sort.php:147
-msgid "Title (Z-A)"
-msgstr "Nazwy (Z-A)"
-
-#: includes/facets/rating.php:112
-msgid "Undo"
-msgstr "Cofnij"
-
-#: includes/integrations/acf/acf.php:293
-msgid "Yes"
-msgstr "Tak"
-
-#: includes/facets/fselect.php:85
-msgid "{n} selected"
-msgstr "wybrano {n}"
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-pt_BR.mo b/wp/wp-content/plugins/facetwp/languages/fwp-front-pt_BR.mo
deleted file mode 100644
index d09d10b8..00000000
Binary files a/wp/wp-content/plugins/facetwp/languages/fwp-front-pt_BR.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-pt_BR.po b/wp/wp-content/plugins/facetwp/languages/fwp-front-pt_BR.po
deleted file mode 100644
index e95a5a20..00000000
--- a/wp/wp-content/plugins/facetwp/languages/fwp-front-pt_BR.po
+++ /dev/null
@@ -1,185 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: FacetWP (front)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-21 14:01+0000\n"
-"PO-Revision-Date: 2022-08-15 12:42+0000\n"
-"Last-Translator: Matt Gibbs \n"
-"Language-Team: Portuguese (Brazil)\n"
-"Language: pt_BR\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Loco https://localise.biz/\n"
-"X-Loco-Version: 2.5.0; wp-5.6\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-
-#: includes/facets/rating.php:111
-msgid "& up"
-msgstr "& up"
-
-#: includes/facets/fselect.php:37 includes/facets/fselect.php:80
-#: includes/facets/dropdown.php:35 includes/facets/hierarchy.php:26
-msgid "Any"
-msgstr "Qualquer"
-
-#: includes/facets/date_range.php:282
-msgid "Clear"
-msgstr "Limpar"
-
-#: includes/facets/proximity.php:180
-msgid "Clear location"
-msgstr "Limpar localização"
-
-#: includes/facets/date_range.php:23
-msgid "Date"
-msgstr "Data"
-
-#: includes/facets/sort.php:154
-msgid "Date (Newest)"
-msgstr "Data (mais recente)"
-
-#: includes/facets/sort.php:161
-msgid "Date (Oldest)"
-msgstr "Data (mais antiga)"
-
-#: includes/facets/proximity.php:285
-msgid "Distance"
-msgstr "Distância"
-
-#: includes/facets/date_range.php:29
-msgid "End Date"
-msgstr "Data Final"
-
-#: includes/facets/search.php:20
-msgid "Enter keywords"
-msgstr "Digitar palavras-chave"
-
-#: includes/facets/proximity.php:64
-msgid "Enter location"
-msgstr "Digitar local"
-
-#: includes/facets/autocomplete.php:157
-msgid "Enter {n} or more characters"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:502
-msgid "Featured"
-msgstr ""
-
-#: includes/facets/number_range.php:32 includes/facets/autocomplete.php:64
-msgid "Go"
-msgstr "Ir"
-
-#: includes/class-display.php:175
-msgid "Go to next page"
-msgstr ""
-
-#: includes/class-display.php:174
-msgid "Go to page"
-msgstr ""
-
-#: includes/class-display.php:176
-msgid "Go to previous page"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "In Stock"
-msgstr "Em estoque"
-
-#: includes/facets/autocomplete.php:156
-msgid "Loading"
-msgstr ""
-
-#: includes/facets/number_range.php:29
-msgid "Max"
-msgstr "Máx"
-
-#: includes/facets/number_range.php:26
-msgid "Min"
-msgstr "Min"
-
-#: includes/integrations/acf/acf.php:293
-msgid "No"
-msgstr "Não"
-
-#: includes/facets/autocomplete.php:97 includes/facets/autocomplete.php:158
-msgid "No results"
-msgstr "Sem resultados"
-
-#: includes/class-display.php:194 includes/facets/fselect.php:87
-msgid "No results found"
-msgstr "Nenhum resultado encontrado"
-
-#: includes/facets/number_range.php:23
-msgid "Number"
-msgstr "Número"
-
-#: includes/class-renderer.php:512
-msgid "of"
-msgstr "de"
-
-#: includes/integrations/woocommerce/woocommerce.php:499
-msgid "On Sale"
-msgstr "À venda"
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "Out of Stock"
-msgstr "Fora de Estoque"
-
-#: includes/class-renderer.php:569
-msgid "Per page"
-msgstr "Por página"
-
-#: includes/facets/slider.php:20 includes/facets/reset.php:15
-msgid "Reset"
-msgstr "Redefinir"
-
-#: includes/facets/fselect.php:86
-msgid "Search"
-msgstr "Pesquisar"
-
-#: includes/facets/checkboxes.php:131 includes/facets/hierarchy.php:161
-msgid "See less"
-msgstr "Ver menos"
-
-#: includes/facets/hierarchy.php:160
-msgid "See more"
-msgstr "Veja mais"
-
-#: includes/facets/checkboxes.php:130
-msgid "See {num} more"
-msgstr "Ver {num} mais"
-
-#: includes/facets/sort.php:136
-msgid "Sort by"
-msgstr "Ordenar por"
-
-#: includes/facets/date_range.php:26
-msgid "Start Date"
-msgstr "Data de Início"
-
-#: includes/facets/autocomplete.php:61
-msgid "Start typing"
-msgstr "Comece a digitar"
-
-#: includes/facets/sort.php:140
-msgid "Title (A-Z)"
-msgstr "Título (A-Z)"
-
-#: includes/facets/sort.php:147
-msgid "Title (Z-A)"
-msgstr "Título (Z-A)"
-
-#: includes/facets/rating.php:112
-msgid "Undo"
-msgstr "Desfazer"
-
-#: includes/integrations/acf/acf.php:293
-msgid "Yes"
-msgstr "Sim"
-
-#: includes/facets/fselect.php:85
-msgid "{n} selected"
-msgstr "{n} seleccionado"
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-ro_RO.mo b/wp/wp-content/plugins/facetwp/languages/fwp-front-ro_RO.mo
deleted file mode 100644
index ed81d582..00000000
Binary files a/wp/wp-content/plugins/facetwp/languages/fwp-front-ro_RO.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-ro_RO.po b/wp/wp-content/plugins/facetwp/languages/fwp-front-ro_RO.po
deleted file mode 100644
index 120e929d..00000000
--- a/wp/wp-content/plugins/facetwp/languages/fwp-front-ro_RO.po
+++ /dev/null
@@ -1,186 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: FacetWP (front)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-21 14:01+0000\n"
-"PO-Revision-Date: 2022-08-15 12:42+0000\n"
-"Last-Translator: Matt Gibbs \n"
-"Language-Team: Romanian\n"
-"Language: ro_RO\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n==0 || (n!=1 && n%100>=1 && "
-"n%100<=19) ? 1 : 2);\n"
-"X-Generator: Loco https://localise.biz/\n"
-"X-Loco-Version: 2.5.0; wp-5.6\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-
-#: includes/facets/rating.php:111
-msgid "& up"
-msgstr "& up"
-
-#: includes/facets/fselect.php:37 includes/facets/fselect.php:80
-#: includes/facets/dropdown.php:35 includes/facets/hierarchy.php:26
-msgid "Any"
-msgstr "Orice"
-
-#: includes/facets/date_range.php:282
-msgid "Clear"
-msgstr "Sterge"
-
-#: includes/facets/proximity.php:180
-msgid "Clear location"
-msgstr "Ștergeți locația"
-
-#: includes/facets/date_range.php:23
-msgid "Date"
-msgstr "Data"
-
-#: includes/facets/sort.php:154
-msgid "Date (Newest)"
-msgstr "Data (cele mai noi)"
-
-#: includes/facets/sort.php:161
-msgid "Date (Oldest)"
-msgstr "Data (cea mai veche)"
-
-#: includes/facets/proximity.php:285
-msgid "Distance"
-msgstr "Distanță"
-
-#: includes/facets/date_range.php:29
-msgid "End Date"
-msgstr "Data de sfârșit"
-
-#: includes/facets/search.php:20
-msgid "Enter keywords"
-msgstr "Introdu cuvinte cheie"
-
-#: includes/facets/proximity.php:64
-msgid "Enter location"
-msgstr "Vă rugăm să introduceți ID-ul Locatiei"
-
-#: includes/facets/autocomplete.php:157
-msgid "Enter {n} or more characters"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:502
-msgid "Featured"
-msgstr ""
-
-#: includes/facets/number_range.php:32 includes/facets/autocomplete.php:64
-msgid "Go"
-msgstr "Mergi"
-
-#: includes/class-display.php:175
-msgid "Go to next page"
-msgstr ""
-
-#: includes/class-display.php:174
-msgid "Go to page"
-msgstr ""
-
-#: includes/class-display.php:176
-msgid "Go to previous page"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "In Stock"
-msgstr "În stoc"
-
-#: includes/facets/autocomplete.php:156
-msgid "Loading"
-msgstr ""
-
-#: includes/facets/number_range.php:29
-msgid "Max"
-msgstr "Max"
-
-#: includes/facets/number_range.php:26
-msgid "Min"
-msgstr "Min"
-
-#: includes/integrations/acf/acf.php:293
-msgid "No"
-msgstr "Nu"
-
-#: includes/facets/autocomplete.php:97 includes/facets/autocomplete.php:158
-msgid "No results"
-msgstr "Nici un rezultat"
-
-#: includes/class-display.php:194 includes/facets/fselect.php:87
-msgid "No results found"
-msgstr "Niciun rezultat găsit"
-
-#: includes/facets/number_range.php:23
-msgid "Number"
-msgstr "Număr"
-
-#: includes/class-renderer.php:512
-msgid "of"
-msgstr "din"
-
-#: includes/integrations/woocommerce/woocommerce.php:499
-msgid "On Sale"
-msgstr "La reducere"
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "Out of Stock"
-msgstr "Stoc epuizat"
-
-#: includes/class-renderer.php:569
-msgid "Per page"
-msgstr "Per pagină"
-
-#: includes/facets/slider.php:20 includes/facets/reset.php:15
-msgid "Reset"
-msgstr "Reset"
-
-#: includes/facets/fselect.php:86
-msgid "Search"
-msgstr "Caută"
-
-#: includes/facets/checkboxes.php:131 includes/facets/hierarchy.php:161
-msgid "See less"
-msgstr "Vedea mai puțin"
-
-#: includes/facets/hierarchy.php:160
-msgid "See more"
-msgstr "Vezi mai mult"
-
-#: includes/facets/checkboxes.php:130
-msgid "See {num} more"
-msgstr "Vezi {num} mai multe"
-
-#: includes/facets/sort.php:136
-msgid "Sort by"
-msgstr "Sortare după"
-
-#: includes/facets/date_range.php:26
-msgid "Start Date"
-msgstr "Data de început"
-
-#: includes/facets/autocomplete.php:61
-msgid "Start typing"
-msgstr "Începeți să tastați"
-
-#: includes/facets/sort.php:140
-msgid "Title (A-Z)"
-msgstr "Titlu (A-Z)"
-
-#: includes/facets/sort.php:147
-msgid "Title (Z-A)"
-msgstr "Titlu (Z-A)"
-
-#: includes/facets/rating.php:112
-msgid "Undo"
-msgstr "Anulare"
-
-#: includes/integrations/acf/acf.php:293
-msgid "Yes"
-msgstr "Da"
-
-#: includes/facets/fselect.php:85
-msgid "{n} selected"
-msgstr "{n} selectat"
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-ru_RU.mo b/wp/wp-content/plugins/facetwp/languages/fwp-front-ru_RU.mo
deleted file mode 100644
index e36bae2b..00000000
Binary files a/wp/wp-content/plugins/facetwp/languages/fwp-front-ru_RU.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-ru_RU.po b/wp/wp-content/plugins/facetwp/languages/fwp-front-ru_RU.po
deleted file mode 100644
index 67c73990..00000000
--- a/wp/wp-content/plugins/facetwp/languages/fwp-front-ru_RU.po
+++ /dev/null
@@ -1,186 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: FacetWP (front)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-21 14:01+0000\n"
-"PO-Revision-Date: 2022-08-15 12:41+0000\n"
-"Last-Translator: Matt Gibbs \n"
-"Language-Team: Russian\n"
-"Language: ru_RU\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
-"X-Generator: Loco https://localise.biz/\n"
-"X-Loco-Version: 2.5.0; wp-5.6\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-
-#: includes/facets/rating.php:111
-msgid "& up"
-msgstr "и вверх"
-
-#: includes/facets/fselect.php:37 includes/facets/fselect.php:80
-#: includes/facets/dropdown.php:35 includes/facets/hierarchy.php:26
-msgid "Any"
-msgstr "Любой"
-
-#: includes/facets/date_range.php:282
-msgid "Clear"
-msgstr "Очистить"
-
-#: includes/facets/proximity.php:180
-msgid "Clear location"
-msgstr "Очистить местоположение"
-
-#: includes/facets/date_range.php:23
-msgid "Date"
-msgstr "Дата"
-
-#: includes/facets/sort.php:154
-msgid "Date (Newest)"
-msgstr "Дата (новые)"
-
-#: includes/facets/sort.php:161
-msgid "Date (Oldest)"
-msgstr "Дата (самая старая)"
-
-#: includes/facets/proximity.php:285
-msgid "Distance"
-msgstr "Расстояние"
-
-#: includes/facets/date_range.php:29
-msgid "End Date"
-msgstr "Дата окончания"
-
-#: includes/facets/search.php:20
-msgid "Enter keywords"
-msgstr "Введите ключевые слова"
-
-#: includes/facets/proximity.php:64
-msgid "Enter location"
-msgstr "Введите местоположение"
-
-#: includes/facets/autocomplete.php:157
-msgid "Enter {n} or more characters"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:502
-msgid "Featured"
-msgstr ""
-
-#: includes/facets/number_range.php:32 includes/facets/autocomplete.php:64
-msgid "Go"
-msgstr "Перейти"
-
-#: includes/class-display.php:175
-msgid "Go to next page"
-msgstr ""
-
-#: includes/class-display.php:174
-msgid "Go to page"
-msgstr ""
-
-#: includes/class-display.php:176
-msgid "Go to previous page"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "In Stock"
-msgstr "В наличии"
-
-#: includes/facets/autocomplete.php:156
-msgid "Loading"
-msgstr ""
-
-#: includes/facets/number_range.php:29
-msgid "Max"
-msgstr "Макс"
-
-#: includes/facets/number_range.php:26
-msgid "Min"
-msgstr "Мин"
-
-#: includes/integrations/acf/acf.php:293
-msgid "No"
-msgstr "Нет"
-
-#: includes/facets/autocomplete.php:97 includes/facets/autocomplete.php:158
-msgid "No results"
-msgstr "Нет результатов"
-
-#: includes/class-display.php:194 includes/facets/fselect.php:87
-msgid "No results found"
-msgstr "Результатов не найдено"
-
-#: includes/facets/number_range.php:23
-msgid "Number"
-msgstr "Номер"
-
-#: includes/class-renderer.php:512
-msgid "of"
-msgstr "из"
-
-#: includes/integrations/woocommerce/woocommerce.php:499
-msgid "On Sale"
-msgstr "Распродажа"
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "Out of Stock"
-msgstr "Нет в наличии"
-
-#: includes/class-renderer.php:569
-msgid "Per page"
-msgstr "На страницу"
-
-#: includes/facets/slider.php:20 includes/facets/reset.php:15
-msgid "Reset"
-msgstr "Сброс"
-
-#: includes/facets/fselect.php:86
-msgid "Search"
-msgstr "Поиск"
-
-#: includes/facets/checkboxes.php:131 includes/facets/hierarchy.php:161
-msgid "See less"
-msgstr "Свернуть"
-
-#: includes/facets/hierarchy.php:160
-msgid "See more"
-msgstr "Узнать больше"
-
-#: includes/facets/checkboxes.php:130
-msgid "See {num} more"
-msgstr "Посмотреть {num} Подробнее"
-
-#: includes/facets/sort.php:136
-msgid "Sort by"
-msgstr "Сортировать по"
-
-#: includes/facets/date_range.php:26
-msgid "Start Date"
-msgstr "Дата начала"
-
-#: includes/facets/autocomplete.php:61
-msgid "Start typing"
-msgstr "Напишите "
-
-#: includes/facets/sort.php:140
-msgid "Title (A-Z)"
-msgstr "Имя (А-Я)"
-
-#: includes/facets/sort.php:147
-msgid "Title (Z-A)"
-msgstr "Имя (Я-А)"
-
-#: includes/facets/rating.php:112
-msgid "Undo"
-msgstr "Отменить"
-
-#: includes/integrations/acf/acf.php:293
-msgid "Yes"
-msgstr "Да"
-
-#: includes/facets/fselect.php:85
-msgid "{n} selected"
-msgstr "{n} выбрано"
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-sv_SE.mo b/wp/wp-content/plugins/facetwp/languages/fwp-front-sv_SE.mo
deleted file mode 100644
index 021b23e0..00000000
Binary files a/wp/wp-content/plugins/facetwp/languages/fwp-front-sv_SE.mo and /dev/null differ
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front-sv_SE.po b/wp/wp-content/plugins/facetwp/languages/fwp-front-sv_SE.po
deleted file mode 100644
index 65cf3903..00000000
--- a/wp/wp-content/plugins/facetwp/languages/fwp-front-sv_SE.po
+++ /dev/null
@@ -1,185 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: FacetWP (front)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-21 14:01+0000\n"
-"PO-Revision-Date: 2022-08-15 12:41+0000\n"
-"Last-Translator: Matt Gibbs \n"
-"Language-Team: Swedish\n"
-"Language: sv_SE\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Loco https://localise.biz/\n"
-"X-Loco-Version: 2.5.0; wp-5.6\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-
-#: includes/facets/rating.php:111
-msgid "& up"
-msgstr "& upp"
-
-#: includes/facets/fselect.php:37 includes/facets/fselect.php:80
-#: includes/facets/dropdown.php:35 includes/facets/hierarchy.php:26
-msgid "Any"
-msgstr "Någon"
-
-#: includes/facets/date_range.php:282
-msgid "Clear"
-msgstr "Rensa"
-
-#: includes/facets/proximity.php:180
-msgid "Clear location"
-msgstr "Rensa plats"
-
-#: includes/facets/date_range.php:23
-msgid "Date"
-msgstr "Datum"
-
-#: includes/facets/sort.php:154
-msgid "Date (Newest)"
-msgstr "Datum (nyaste)"
-
-#: includes/facets/sort.php:161
-msgid "Date (Oldest)"
-msgstr "Datum (äldsta)"
-
-#: includes/facets/proximity.php:285
-msgid "Distance"
-msgstr "Avstånd"
-
-#: includes/facets/date_range.php:29
-msgid "End Date"
-msgstr "Slutdatum"
-
-#: includes/facets/search.php:20
-msgid "Enter keywords"
-msgstr "Ange nyckelord"
-
-#: includes/facets/proximity.php:64
-msgid "Enter location"
-msgstr "Ange plats"
-
-#: includes/facets/autocomplete.php:157
-msgid "Enter {n} or more characters"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:502
-msgid "Featured"
-msgstr ""
-
-#: includes/facets/number_range.php:32 includes/facets/autocomplete.php:64
-msgid "Go"
-msgstr "Start"
-
-#: includes/class-display.php:175
-msgid "Go to next page"
-msgstr ""
-
-#: includes/class-display.php:174
-msgid "Go to page"
-msgstr ""
-
-#: includes/class-display.php:176
-msgid "Go to previous page"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "In Stock"
-msgstr "I lager"
-
-#: includes/facets/autocomplete.php:156
-msgid "Loading"
-msgstr ""
-
-#: includes/facets/number_range.php:29
-msgid "Max"
-msgstr "Max"
-
-#: includes/facets/number_range.php:26
-msgid "Min"
-msgstr "Min"
-
-#: includes/integrations/acf/acf.php:293
-msgid "No"
-msgstr "Nej"
-
-#: includes/facets/autocomplete.php:97 includes/facets/autocomplete.php:158
-msgid "No results"
-msgstr "Inga resultat"
-
-#: includes/class-display.php:194 includes/facets/fselect.php:87
-msgid "No results found"
-msgstr "Inga resultat hittades"
-
-#: includes/facets/number_range.php:23
-msgid "Number"
-msgstr "Nummer"
-
-#: includes/class-renderer.php:512
-msgid "of"
-msgstr "av"
-
-#: includes/integrations/woocommerce/woocommerce.php:499
-msgid "On Sale"
-msgstr "Rea"
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "Out of Stock"
-msgstr "Slut i lager"
-
-#: includes/class-renderer.php:569
-msgid "Per page"
-msgstr "Per sida"
-
-#: includes/facets/slider.php:20 includes/facets/reset.php:15
-msgid "Reset"
-msgstr "Återställ"
-
-#: includes/facets/fselect.php:86
-msgid "Search"
-msgstr "Sök"
-
-#: includes/facets/checkboxes.php:131 includes/facets/hierarchy.php:161
-msgid "See less"
-msgstr "Se mindre"
-
-#: includes/facets/hierarchy.php:160
-msgid "See more"
-msgstr "Se mer"
-
-#: includes/facets/checkboxes.php:130
-msgid "See {num} more"
-msgstr "Se {num} mer"
-
-#: includes/facets/sort.php:136
-msgid "Sort by"
-msgstr "Sortera efter"
-
-#: includes/facets/date_range.php:26
-msgid "Start Date"
-msgstr "Startdatum"
-
-#: includes/facets/autocomplete.php:61
-msgid "Start typing"
-msgstr "Börja skriv"
-
-#: includes/facets/sort.php:140
-msgid "Title (A-Z)"
-msgstr "Titel (A-Z)"
-
-#: includes/facets/sort.php:147
-msgid "Title (Z-A)"
-msgstr "Titel (Z-A)"
-
-#: includes/facets/rating.php:112
-msgid "Undo"
-msgstr "Ångra"
-
-#: includes/integrations/acf/acf.php:293
-msgid "Yes"
-msgstr "Ja"
-
-#: includes/facets/fselect.php:85
-msgid "{n} selected"
-msgstr "{n} markerat"
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp-front.pot b/wp/wp-content/plugins/facetwp/languages/fwp-front.pot
deleted file mode 100644
index 41b36f05..00000000
--- a/wp/wp-content/plugins/facetwp/languages/fwp-front.pot
+++ /dev/null
@@ -1,185 +0,0 @@
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: FacetWP (front)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-08-15 12:40+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Language-Team: Matt Gibbs \n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Loco https://localise.biz/\n"
-"X-Loco-Version: 2.5.2; wp-5.7.2\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-"Language: "
-
-#: includes/facets/rating.php:111
-msgid "& up"
-msgstr ""
-
-#: includes/facets/fselect.php:37 includes/facets/fselect.php:80
-#: includes/facets/dropdown.php:35 includes/facets/hierarchy.php:26
-msgid "Any"
-msgstr ""
-
-#: includes/facets/date_range.php:282
-msgid "Clear"
-msgstr ""
-
-#: includes/facets/proximity.php:180
-msgid "Clear location"
-msgstr ""
-
-#: includes/facets/date_range.php:23
-msgid "Date"
-msgstr ""
-
-#: includes/facets/sort.php:154
-msgid "Date (Newest)"
-msgstr ""
-
-#: includes/facets/sort.php:161
-msgid "Date (Oldest)"
-msgstr ""
-
-#: includes/facets/proximity.php:285
-msgid "Distance"
-msgstr ""
-
-#: includes/facets/date_range.php:29
-msgid "End Date"
-msgstr ""
-
-#: includes/facets/search.php:20
-msgid "Enter keywords"
-msgstr ""
-
-#: includes/facets/proximity.php:64
-msgid "Enter location"
-msgstr ""
-
-#: includes/facets/autocomplete.php:157
-msgid "Enter {n} or more characters"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:502
-msgid "Featured"
-msgstr ""
-
-#: includes/facets/number_range.php:32 includes/facets/autocomplete.php:64
-msgid "Go"
-msgstr ""
-
-#: includes/class-display.php:175
-msgid "Go to next page"
-msgstr ""
-
-#: includes/class-display.php:174
-msgid "Go to page"
-msgstr ""
-
-#: includes/class-display.php:176
-msgid "Go to previous page"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "In Stock"
-msgstr ""
-
-#: includes/facets/autocomplete.php:156
-msgid "Loading"
-msgstr ""
-
-#: includes/facets/number_range.php:29
-msgid "Max"
-msgstr ""
-
-#: includes/facets/number_range.php:26
-msgid "Min"
-msgstr ""
-
-#: includes/integrations/acf/acf.php:293
-msgid "No"
-msgstr ""
-
-#: includes/facets/autocomplete.php:97 includes/facets/autocomplete.php:158
-msgid "No results"
-msgstr ""
-
-#: includes/class-display.php:194 includes/facets/fselect.php:87
-msgid "No results found"
-msgstr ""
-
-#: includes/facets/number_range.php:23
-msgid "Number"
-msgstr ""
-
-#: includes/class-renderer.php:512
-msgid "of"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:499
-msgid "On Sale"
-msgstr ""
-
-#: includes/integrations/woocommerce/woocommerce.php:496
-msgid "Out of Stock"
-msgstr ""
-
-#: includes/class-renderer.php:569
-msgid "Per page"
-msgstr ""
-
-#: includes/facets/slider.php:20 includes/facets/reset.php:15
-msgid "Reset"
-msgstr ""
-
-#: includes/facets/fselect.php:86
-msgid "Search"
-msgstr ""
-
-#: includes/facets/checkboxes.php:131 includes/facets/hierarchy.php:161
-msgid "See less"
-msgstr ""
-
-#: includes/facets/hierarchy.php:160
-msgid "See more"
-msgstr ""
-
-#: includes/facets/checkboxes.php:130
-msgid "See {num} more"
-msgstr ""
-
-#: includes/facets/sort.php:136
-msgid "Sort by"
-msgstr ""
-
-#: includes/facets/date_range.php:26
-msgid "Start Date"
-msgstr ""
-
-#: includes/facets/autocomplete.php:61
-msgid "Start typing"
-msgstr ""
-
-#: includes/facets/sort.php:140
-msgid "Title (A-Z)"
-msgstr ""
-
-#: includes/facets/sort.php:147
-msgid "Title (Z-A)"
-msgstr ""
-
-#: includes/facets/rating.php:112
-msgid "Undo"
-msgstr ""
-
-#: includes/integrations/acf/acf.php:293
-msgid "Yes"
-msgstr ""
-
-#: includes/facets/fselect.php:85
-msgid "{n} selected"
-msgstr ""
diff --git a/wp/wp-content/plugins/facetwp/languages/fwp.pot b/wp/wp-content/plugins/facetwp/languages/fwp.pot
deleted file mode 100644
index 3ae8afdb..00000000
--- a/wp/wp-content/plugins/facetwp/languages/fwp.pot
+++ /dev/null
@@ -1,1032 +0,0 @@
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: FacetWP\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-01-30 17:19+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Matt Gibbs \n"
-"Language-Team: \n"
-"Language: \n"
-"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Loco https://localise.biz/\n"
-"X-Loco-Version: 2.4.1; wp-5.4.2"
-
-#: includes/class-settings.php:345
-msgid "Activate"
-msgstr ""
-
-#: includes/class-settings.php:554
-msgid "Activating"
-msgstr ""
-
-#: templates/page-settings.php:153 templates/page-settings.php:181
-msgid "Add new"
-msgstr ""
-
-#: includes/class-settings.php:524
-msgid "Add query filter"
-msgstr ""
-
-#: includes/class-settings.php:523
-msgid "Add query sort"
-msgstr ""
-
-#. Description of the plugin
-msgid "Advanced Filtering for WordPress"
-msgstr ""
-
-#: includes/class-settings.php:508
-msgid "All post types"
-msgstr ""
-
-#: includes/class-settings.php:188
-msgid "AND (match all)"
-msgstr ""
-
-#: includes/class-settings.php:509
-msgid "and show"
-msgstr ""
-
-#: includes/class-settings.php:119
-msgid "Any"
-msgstr ""
-
-#: includes/class-settings.php:484
-msgid "Author field"
-msgstr ""
-
-#: includes/facets/search.php:74
-msgid "Auto refresh"
-msgstr ""
-
-#: includes/facets/reset.php:80
-msgid "Auto-hide"
-msgstr ""
-
-#: includes/facets/autocomplete.php:10
-msgid "Autocomplete"
-msgstr ""
-
-#: includes/class-settings.php:466
-msgid "Background color"
-msgstr ""
-
-#: includes/class-settings.php:223
-msgid "Basic"
-msgstr ""
-
-#: includes/class-settings.php:467
-msgid "Border"
-msgstr ""
-
-#: includes/class-settings.php:474
-msgid "Border color"
-msgstr ""
-
-#: includes/class-settings.php:468
-msgid "Border style"
-msgstr ""
-
-#: includes/class-settings.php:475
-msgid "Border width"
-msgstr ""
-
-#: includes/facets/reset.php:59
-msgid "Button"
-msgstr ""
-
-#: includes/class-settings.php:505
-msgid "Button border"
-msgstr ""
-
-#: includes/class-settings.php:478
-msgid "Button padding"
-msgstr ""
-
-#: includes/class-settings.php:476
-msgid "Button text"
-msgstr ""
-
-#: includes/class-settings.php:477
-msgid "Button text color"
-msgstr ""
-
-#: includes/facets/checkboxes.php:7
-msgid "Checkboxes"
-msgstr ""
-
-#: includes/class-settings.php:525
-msgid "Clear"
-msgstr ""
-
-#: includes/class-settings.php:532
-msgid "Column"
-msgstr ""
-
-#: includes/class-settings.php:481
-msgid "Column widths"
-msgstr ""
-
-#: includes/class-settings.php:518
-msgid "Comment Count"
-msgstr ""
-
-#: includes/class-settings.php:220
-msgid "Compare type"
-msgstr ""
-
-#: includes/class-settings.php:482 includes/class-settings.php:529
-msgid "Content"
-msgstr ""
-
-#: includes/class-settings.php:559
-msgid "Convert to query args"
-msgstr ""
-
-#: includes/class-settings.php:552
-msgid "Copied!"
-msgstr ""
-
-#: includes/class-settings.php:537
-msgid "Copy shortcode"
-msgstr ""
-
-#: includes/class-settings.php:203
-msgid "Count"
-msgstr ""
-
-#: includes/facets/pager.php:250
-msgid "Count text (no results)"
-msgstr ""
-
-#: includes/facets/pager.php:239
-msgid "Count text (plural)"
-msgstr ""
-
-#: includes/facets/pager.php:245
-msgid "Count text (singular)"
-msgstr ""
-
-#: includes/class-settings.php:504
-msgid "CSS class"
-msgstr ""
-
-#: includes/class-settings.php:480
-msgid "Custom CSS"
-msgstr ""
-
-#: includes/class-helper.php:495 includes/class-settings.php:520
-msgid "Custom Fields"
-msgstr ""
-
-#: includes/class-settings.php:498
-msgid "Custom URL"
-msgstr ""
-
-#: includes/class-settings.php:471
-msgid "Dashed"
-msgstr ""
-
-#: includes/class-settings.php:538
-msgid "Data source"
-msgstr ""
-
-#: includes/class-settings.php:490
-msgid "Date"
-msgstr ""
-
-#: includes/class-settings.php:492
-msgid "Date format"
-msgstr ""
-
-#: includes/facets/date_range.php:7
-msgid "Date Range"
-msgstr ""
-
-#: includes/class-settings.php:59
-msgid "Debug mode"
-msgstr ""
-
-#: includes/integrations/searchwp/searchwp.php:203
-msgid "Default"
-msgstr ""
-
-#: includes/class-settings.php:117 includes/facets/sort.php:55
-#: includes/facets/pager.php:265
-msgid "Default label"
-msgstr ""
-
-#: includes/facets/proximity.php:236
-msgid "Default radius"
-msgstr ""
-
-#: includes/class-settings.php:541
-msgid "Display"
-msgstr ""
-
-#: includes/class-settings.php:544
-msgid "Display Code"
-msgstr ""
-
-#: includes/facets/date_range.php:137
-msgid "Display format"
-msgstr ""
-
-#: templates/page-settings.php:189
-msgid "Display mode"
-msgstr ""
-
-#: includes/class-settings.php:485
-msgid "Display name"
-msgstr ""
-
-#: includes/class-settings.php:197
-msgid "Display value"
-msgstr ""
-
-#: includes/class-ajax.php:138
-msgid "Done, please re-index"
-msgstr ""
-
-#: includes/facets/pager.php:221
-msgid "Dots label"
-msgstr ""
-
-#: includes/class-settings.php:472
-msgid "Dotted"
-msgstr ""
-
-#: includes/class-settings.php:473
-msgid "Double"
-msgstr ""
-
-#: includes/facets/proximity.php:214 includes/facets/dropdown.php:7
-msgid "Dropdown"
-msgstr ""
-
-#: includes/class-settings.php:73
-msgid "Enable if your store uses variable products."
-msgstr ""
-
-#: includes/class-settings.php:224
-msgid "Enclose"
-msgstr ""
-
-#: includes/facets/date_range.php:128
-msgid "End Date"
-msgstr ""
-
-#: includes/class-settings.php:526
-msgid "Enter term slugs"
-msgstr ""
-
-#: includes/class-settings.php:527
-msgid "Enter values"
-msgstr ""
-
-#: includes/class-ajax.php:200
-msgid "Error"
-msgstr ""
-
-#: includes/class-ajax.php:80
-msgid "Error: invalid JSON"
-msgstr ""
-
-#: includes/facets/number_range.php:115
-msgid "Exact"
-msgstr ""
-
-#: includes/facets/date_range.php:126
-msgid "Exact Date"
-msgstr ""
-
-#: includes/class-settings.php:171
-msgid "Exclude these values"
-msgstr ""
-
-#: includes/class-settings.php:87 includes/class-settings.php:368
-msgid "Export"
-msgstr ""
-
-#: includes/class-settings.php:185
-msgid "Facet logic"
-msgstr ""
-
-#: includes/class-settings.php:536
-msgid "Facet type"
-msgstr ""
-
-#: templates/page-settings.php:108 templates/page-settings.php:148
-#: templates/page-settings.php:152
-msgid "Facets"
-msgstr ""
-
-#. Name of the plugin
-msgid "FacetWP"
-msgstr ""
-
-#: index.php:67
-#, php-format
-msgid ""
-"FacetWP requires PHP %s or above. Please contact your host and request a PHP "
-"upgrade."
-msgstr ""
-
-#: includes/class-request.php:364
-msgid "FacetWP was unable to auto-detect the post listing"
-msgstr ""
-
-#. Author of the plugin
-msgid "FacetWP, LLC"
-msgstr ""
-
-#: includes/class-settings.php:507
-msgid "Fetch"
-msgstr ""
-
-#: includes/class-settings.php:488
-msgid "Field type"
-msgstr ""
-
-#: includes/facets/number_range.php:112 includes/facets/date_range.php:123
-msgid "Fields to show"
-msgstr ""
-
-#: includes/class-settings.php:465
-msgid "Font size"
-msgstr ""
-
-#: includes/facets/slider.php:147
-msgid "Format"
-msgstr ""
-
-#: includes/facets/fselect.php:7
-msgid "fSelect"
-msgstr ""
-
-#: includes/class-settings.php:603
-msgid "full"
-msgstr ""
-
-#: includes/class-settings.php:13
-msgid "General"
-msgstr ""
-
-#: includes/class-settings.php:351
-msgid "Get an API key"
-msgstr ""
-
-#: includes/class-settings.php:20
-msgid "Google Maps API key"
-msgstr ""
-
-#: includes/class-settings.php:543
-msgid "Help"
-msgstr ""
-
-#: includes/class-settings.php:502
-msgid "Hide item?"
-msgstr ""
-
-#: includes/class-settings.php:131
-msgid "Hierarchical"
-msgstr ""
-
-#: includes/facets/hierarchy.php:7
-msgid "Hierarchy"
-msgstr ""
-
-#: includes/class-settings.php:196
-msgid "Highest count"
-msgstr ""
-
-#: includes/class-settings.php:522
-msgid "Hit Enter"
-msgstr ""
-
-#. Author URI of the plugin
-msgid "https://facetwp.com/"
-msgstr ""
-
-#: includes/class-settings.php:483
-msgid "Image size"
-msgstr ""
-
-#: includes/class-settings.php:91 includes/class-settings.php:376
-msgid "Import"
-msgstr ""
-
-#: includes/class-settings.php:84
-msgid "Import / Export"
-msgstr ""
-
-#: includes/class-ajax.php:274
-msgid "Imported"
-msgstr ""
-
-#: includes/class-settings.php:558
-msgid "Importing"
-msgstr ""
-
-#: includes/class-builder.php:241
-msgid "In Stock"
-msgstr ""
-
-#: includes/facets/reset.php:65
-msgid "Include / exclude"
-msgstr ""
-
-#: includes/class-settings.php:77
-msgid "Index out-of-stock products?"
-msgstr ""
-
-#: includes/class-settings.php:547
-msgid "Indexing"
-msgstr ""
-
-#: includes/class-settings.php:549
-msgid "Indexing complete"
-msgstr ""
-
-#: includes/facets/pager.php:215
-msgid "Inner size"
-msgstr ""
-
-#: includes/class-settings.php:493
-msgid "Input format"
-msgstr ""
-
-#: includes/class-settings.php:225
-msgid "Intersect"
-msgstr ""
-
-#: includes/facets/proximity.php:207
-msgid "Kilometers"
-msgstr ""
-
-#: includes/class-settings.php:534 templates/page-settings.php:159
-#: templates/page-settings.php:187
-msgid "Label"
-msgstr ""
-
-#: includes/class-settings.php:528
-msgid "Layout"
-msgstr ""
-
-#: includes/class-settings.php:16
-msgid "License key"
-msgstr ""
-
-#: includes/class-settings.php:495 includes/facets/reset.php:60
-msgid "Link"
-msgstr ""
-
-#: includes/class-settings.php:496
-msgid "Link type"
-msgstr ""
-
-#: templates/page-settings.php:109 templates/page-settings.php:176
-#: templates/page-settings.php:180
-msgid "Listings"
-msgstr ""
-
-#: includes/class-settings.php:43
-msgid "Load a11y support"
-msgstr ""
-
-#: includes/class-settings.php:35
-msgid "Load jQuery"
-msgstr ""
-
-#: includes/facets/pager.php:210
-msgid "Load more"
-msgstr ""
-
-#: includes/facets/pager.php:255
-msgid "Load more text"
-msgstr ""
-
-#: includes/class-settings.php:557
-msgid "Loading"
-msgstr ""
-
-#: includes/facets/pager.php:260
-msgid "Loading text"
-msgstr ""
-
-#: includes/facets/proximity.php:196
-msgid "Longitude"
-msgstr ""
-
-#: includes/class-settings.php:550
-msgid "Looking"
-msgstr ""
-
-#: includes/facets/number_range.php:117
-msgid "Max"
-msgstr ""
-
-#: includes/class-settings.php:519
-msgid "Menu Order"
-msgstr ""
-
-#: includes/facets/proximity.php:206
-msgid "Miles"
-msgstr ""
-
-#: includes/facets/number_range.php:116
-msgid "Min"
-msgstr ""
-
-#: includes/facets/number_range.php:114
-msgid "Min + Max"
-msgstr ""
-
-#: includes/class-settings.php:143
-msgid "Multi-select"
-msgstr ""
-
-#: templates/page-settings.php:160 templates/page-settings.php:188
-msgid "Name"
-msgstr ""
-
-#: includes/class-settings.php:521
-msgid "Narrow results by"
-msgstr ""
-
-#: includes/facets/pager.php:233
-msgid "Next button label"
-msgstr ""
-
-#: includes/class-settings.php:462
-msgid "No results text"
-msgstr ""
-
-#: includes/class-settings.php:469 includes/facets/proximity.php:216
-msgid "None"
-msgstr ""
-
-#: includes/class-settings.php:436
-msgid "Not yet activated"
-msgstr ""
-
-#: includes/class-ajax.php:238
-msgid "Nothing to import"
-msgstr ""
-
-#: includes/class-settings.php:491
-msgid "Number"
-msgstr ""
-
-#: includes/class-settings.php:494
-msgid "Number format"
-msgstr ""
-
-#: includes/class-settings.php:460
-msgid "Number of grid columns"
-msgstr ""
-
-#: includes/facets/number_range.php:7
-msgid "Number Range"
-msgstr ""
-
-#: includes/class-settings.php:170
-msgid "Off"
-msgstr ""
-
-#: includes/class-builder.php:246
-msgid "On Sale"
-msgstr ""
-
-#: includes/class-settings.php:499
-msgid "Open in new tab?"
-msgstr ""
-
-#: includes/class-settings.php:189
-msgid "OR (match any)"
-msgstr ""
-
-#: includes/class-settings.php:214
-msgid "Other data source"
-msgstr ""
-
-#: includes/class-builder.php:241
-msgid "Out of Stock"
-msgstr ""
-
-#: includes/class-settings.php:374
-msgid "Overwrite existing items?"
-msgstr ""
-
-#: includes/class-settings.php:503
-msgid "Padding"
-msgstr ""
-
-#: includes/facets/pager.php:208
-msgid "Page numbers"
-msgstr ""
-
-#: includes/facets/pager.php:10
-msgid "Pager"
-msgstr ""
-
-#: includes/facets/pager.php:206
-msgid "Pager type"
-msgstr ""
-
-#: includes/class-settings.php:125
-msgid "Parent term"
-msgstr ""
-
-#: includes/class-settings.php:373
-msgid "Paste the import code here"
-msgstr ""
-
-#: includes/facets/pager.php:211
-msgid "Per page"
-msgstr ""
-
-#: includes/class-settings.php:510
-msgid "per page"
-msgstr ""
-
-#: includes/facets/pager.php:270
-msgid "Per page options"
-msgstr ""
-
-#: includes/class-settings.php:122
-msgid "Placeholder text"
-msgstr ""
-
-#: includes/class-updater.php:172
-#, php-format
-msgid ""
-"Please renew your license for automatic "
-"updates."
-msgstr ""
-
-#: includes/class-updater.php:177
-msgid "Please activate your FacetWP license for automatic updates."
-msgstr ""
-
-#: includes/class-helper.php:485
-msgid "Post Author"
-msgstr ""
-
-#: includes/class-helper.php:482 includes/class-settings.php:516
-msgid "Post Date"
-msgstr ""
-
-#: includes/class-helper.php:483 includes/class-settings.php:517
-msgid "Post Modified"
-msgstr ""
-
-#: includes/class-settings.php:514
-msgid "Post Name"
-msgstr ""
-
-#: includes/class-helper.php:484 includes/class-settings.php:513
-msgid "Post Title"
-msgstr ""
-
-#: includes/class-helper.php:481 includes/class-settings.php:515
-msgid "Post Type"
-msgstr ""
-
-#: templates/page-settings.php:190
-msgid "Post types"
-msgstr ""
-
-#: includes/class-settings.php:497
-msgid "Post URL"
-msgstr ""
-
-#: includes/class-helper.php:479 includes/class-settings.php:512
-msgid "Posts"
-msgstr ""
-
-#: includes/class-settings.php:500 includes/facets/slider.php:135
-msgid "Prefix"
-msgstr ""
-
-#: includes/class-settings.php:156
-msgid "Preserve ghost order"
-msgstr ""
-
-#: includes/class-settings.php:553
-msgid "Press CTRL+C to copy"
-msgstr ""
-
-#: includes/facets/pager.php:227
-msgid "Prev button label"
-msgstr ""
-
-#: includes/facets/proximity.php:11
-msgid "Proximity"
-msgstr ""
-
-#: templates/page-settings.php:122
-msgid "Purge the index table"
-msgstr ""
-
-#: includes/class-settings.php:551
-msgid "Purging"
-msgstr ""
-
-#: includes/class-settings.php:542
-msgid "Query"
-msgstr ""
-
-#: includes/class-settings.php:545
-msgid "Query Arguments"
-msgstr ""
-
-#: includes/facets/radio.php:7
-msgid "Radio"
-msgstr ""
-
-#: includes/facets/proximity.php:220
-msgid "Radius options"
-msgstr ""
-
-#: includes/facets/proximity.php:212
-msgid "Radius UI"
-msgstr ""
-
-#: includes/facets/proximity.php:231
-msgid "Range (max)"
-msgstr ""
-
-#: includes/facets/proximity.php:226
-msgid "Range (min)"
-msgstr ""
-
-#: includes/class-settings.php:198
-msgid "Raw value"
-msgstr ""
-
-#: includes/class-settings.php:555 templates/page-settings.php:116
-msgid "Re-index"
-msgstr ""
-
-#: includes/facets/reset.php:7
-msgid "Reset"
-msgstr ""
-
-#: includes/facets/reset.php:70
-msgid "Reset all except these facets"
-msgstr ""
-
-#: includes/facets/reset.php:68
-msgid "Reset everything"
-msgstr ""
-
-#: includes/facets/reset.php:69
-msgid "Reset only these facets"
-msgstr ""
-
-#: includes/class-settings.php:233
-msgid "Reset text"
-msgstr ""
-
-#: includes/facets/reset.php:57
-msgid "Reset UI"
-msgstr ""
-
-#: includes/facets/pager.php:209
-msgid "Result counts"
-msgstr ""
-
-#: includes/class-settings.php:531
-msgid "Row"
-msgstr ""
-
-#: templates/page-settings.php:163
-msgid "Rows"
-msgstr ""
-
-#: templates/page-settings.php:127
-msgid "Save changes"
-msgstr ""
-
-#: includes/class-settings.php:546
-msgid "Saving"
-msgstr ""
-
-#: includes/facets/search.php:7
-msgid "Search"
-msgstr ""
-
-#: includes/facets/search.php:69
-msgid "Search engine"
-msgstr ""
-
-#: includes/class-settings.php:479
-msgid "Separator"
-msgstr ""
-
-#: includes/class-settings.php:24
-msgid "Separators"
-msgstr ""
-
-#: includes/class-init.php:134 templates/page-settings.php:110
-msgid "Settings"
-msgstr ""
-
-#: includes/class-ajax.php:73
-msgid "Settings saved"
-msgstr ""
-
-#: includes/class-ajax.php:67
-msgid "Settings saved, please re-index"
-msgstr ""
-
-#: includes/class-settings.php:137
-msgid "Show expanded"
-msgstr ""
-
-#: includes/class-settings.php:78
-msgid "Show facet choices for out-of-stock products?"
-msgstr ""
-
-#: includes/class-settings.php:151
-msgid "Show ghosts"
-msgstr ""
-
-#: templates/page-settings.php:121
-msgid "Show indexable post types"
-msgstr ""
-
-#: templates/page-settings.php:120
-msgid "Show indexer stats"
-msgstr ""
-
-#: includes/class-settings.php:172
-msgid "Show only these values"
-msgstr ""
-
-#: includes/class-ajax.php:277
-msgid "Skipped"
-msgstr ""
-
-#: includes/facets/slider.php:7 includes/facets/proximity.php:215
-msgid "Slider"
-msgstr ""
-
-#: includes/class-settings.php:208
-msgid "Soft limit"
-msgstr ""
-
-#: includes/class-settings.php:470
-msgid "Solid"
-msgstr ""
-
-#: includes/facets/sort.php:10
-msgid "Sort"
-msgstr ""
-
-#: includes/class-settings.php:194 includes/class-settings.php:511
-#: includes/facets/sort.php:57
-msgid "Sort by"
-msgstr ""
-
-#: includes/facets/sort.php:62
-msgid "Sort options"
-msgstr ""
-
-#: templates/page-settings.php:162
-msgid "Source"
-msgstr ""
-
-#: includes/class-settings.php:461
-msgid "Spacing between results"
-msgstr ""
-
-#: includes/facets/rating.php:7
-msgid "Star Rating"
-msgstr ""
-
-#: includes/facets/date_range.php:125
-msgid "Start + End Dates"
-msgstr ""
-
-#: includes/facets/date_range.php:127
-msgid "Start Date"
-msgstr ""
-
-#: includes/class-settings.php:533
-msgid "Start typing"
-msgstr ""
-
-#: includes/facets/slider.php:154
-msgid "Step"
-msgstr ""
-
-#: includes/class-settings.php:556
-msgid "Stop indexer"
-msgstr ""
-
-#: includes/class-settings.php:51
-msgid "Strict query detection"
-msgstr ""
-
-#: includes/class-settings.php:530
-msgid "Style"
-msgstr ""
-
-#: includes/class-settings.php:501 includes/facets/slider.php:139
-msgid "Suffix"
-msgstr ""
-
-#: templates/page-settings.php:111
-msgid "Support"
-msgstr ""
-
-#: includes/class-settings.php:72
-msgid "Support product variations?"
-msgstr ""
-
-#: includes/class-settings.php:539
-msgid "Switch to advanced mode"
-msgstr ""
-
-#: includes/class-settings.php:540
-msgid "Switch to visual mode"
-msgstr ""
-
-#: includes/class-helper.php:490
-msgid "Taxonomies"
-msgstr ""
-
-#: includes/class-settings.php:199
-msgid "Term order"
-msgstr ""
-
-#: includes/class-settings.php:506
-msgid "Term URL"
-msgstr ""
-
-#: includes/class-settings.php:489
-msgid "Text"
-msgstr ""
-
-#: includes/class-settings.php:464
-msgid "Text color"
-msgstr ""
-
-#: includes/class-settings.php:463
-msgid "Text style"
-msgstr ""
-
-#: includes/class-settings.php:548
-msgid "The index table is empty"
-msgstr ""
-
-#: templates/page-settings.php:161
-msgid "Type"
-msgstr ""
-
-#: includes/class-settings.php:229
-msgid "UI type"
-msgstr ""
-
-#: includes/class-settings.php:535
-msgid "Unique name"
-msgstr ""
-
-#: includes/facets/proximity.php:204
-msgid "Unit of measurement"
-msgstr ""
-
-#: includes/class-settings.php:29
-msgid "URL prefix"
-msgstr ""
-
-#: includes/class-settings.php:487
-msgid "User ID"
-msgstr ""
-
-#: includes/class-settings.php:486
-msgid "User login"
-msgstr ""
-
-#: includes/class-settings.php:443
-msgid "Valid until"
-msgstr ""
-
-#: includes/class-settings.php:167
-msgid "Value modifiers"
-msgstr ""
-
-#: includes/class-settings.php:69
-#: includes/integrations/woocommerce/woocommerce.php:64
-msgid "WooCommerce"
-msgstr ""
-
-#: includes/facets/search.php:60
-msgid "WP Default"
-msgstr ""
diff --git a/wp/wp-content/plugins/facetwp/package.json b/wp/wp-content/plugins/facetwp/package.json
deleted file mode 100644
index e209367b..00000000
--- a/wp/wp-content/plugins/facetwp/package.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "name": "facetwp",
- "type": "module",
- "devDependencies": {
- "@rollup/plugin-buble": "^1.0.2",
- "@rollup/plugin-multi-entry": "^6.0.0",
- "@rollup/plugin-terser": "^0.4.0",
- "rollup": "^3.14.0"
- },
- "scripts": {
- "build": "rollup -c",
- "watch": "rollup -c -w"
- }
-}
diff --git a/wp/wp-content/plugins/facetwp/rollup.config.js b/wp/wp-content/plugins/facetwp/rollup.config.js
deleted file mode 100644
index 0c657774..00000000
--- a/wp/wp-content/plugins/facetwp/rollup.config.js
+++ /dev/null
@@ -1,52 +0,0 @@
-import terser from '@rollup/plugin-terser';
-import multiEntry from '@rollup/plugin-multi-entry';
-import buble from '@rollup/plugin-buble';
-
-export default [{
- input: [
- 'assets/vendor/fUtil/fUtil.js',
- 'assets/js/src/event-manager.js',
- 'assets/js/src/front.js',
- 'assets/js/src/front-facets.js'
- ],
- output: {
- file: 'assets/js/dist/front.min.js',
- format: 'iife'
- },
- plugins: [
- multiEntry(),
- terser()
- ]
-},
-{
- input: 'assets/js/src/admin.js',
- output: {
- file: 'assets/js/dist/admin.min.js',
- format: 'iife'
- },
- plugins: [
- buble()
- ]
-},
-{
- input: 'assets/vendor/fDate/fDate.js',
- output: {
- file: 'assets/vendor/fDate/fDate.min.js',
- format: 'iife'
- },
- plugins: [
- buble(),
- terser()
- ]
-},
-{
- input: 'assets/vendor/nummy/nummy.js',
- output: {
- file: 'assets/vendor/nummy/nummy.min.js',
- format: 'iife'
- },
- plugins: [
- buble(),
- terser()
- ]
-}]
diff --git a/wp/wp-content/plugins/facetwp/templates/page-settings.php b/wp/wp-content/plugins/facetwp/templates/page-settings.php
deleted file mode 100644
index f8ba4fee..00000000
--- a/wp/wp-content/plugins/facetwp/templates/page-settings.php
+++ /dev/null
@@ -1,240 +0,0 @@
-get_html();
-
-// Settings
-$settings = FWP()->settings->get_registered_settings();
-$i18n = FWP()->settings->get_i18n_strings();
-$image_sizes = FWP()->settings->get_image_size_labels();
-
-// Useful data
-$data = FWP()->helper->settings;
-$facet_types = FWP()->helper->facet_types;
-$data_sources = FWP()->helper->get_data_sources();
-$layout_data = FWP()->builder->get_layout_data();
-$query_data = FWP()->builder->get_query_data();
-
-// Generate fields and handle aliases
-$facet_fields = [];
-$fields = FWP()->settings->get_registered_facet_fields();
-
-foreach ( $fields as $name => $field ) {
- $output = FWP()->settings->get_facet_field_html( $name );
- $output = preg_replace( '/[ ]+/s', ' ', $output );
- $facet_fields[ $name ] = [
- 'names' => isset( $field['items'] ) ? array_keys( $field['items'] ) : [ $name ],
- 'html' => trim( $output )
- ];
-}
-
-// Get SVG icons
-$svg_icons = FWP()->settings->get_svg();
-
-// Clone facet settings HTML
-$facet_clone = [];
-$admin_scripts = '';
-
-foreach ( $facet_types as $name => $class ) {
- if (method_exists( $class, 'admin_scripts' ) ) {
- ob_start();
- $class->admin_scripts();
- $admin_scripts .= ob_get_clean();
- }
-
- if ( method_exists( $class, 'settings_html' ) ) {
- ob_start();
- $class->settings_html();
- $facet_clone[ $name ] = trim( ob_get_clean() );
- }
-}
-
-?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Check your browser console if this text doesn't disappear
-
-
-
-
-
-
- »
- {{ getItemLabel() }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- »
- {{ getItemLabel() }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/wp/wp-content/plugins/facetwp/templates/page-support.php b/wp/wp-content/plugins/facetwp/templates/page-support.php
deleted file mode 100644
index 0e5d7647..00000000
--- a/wp/wp-content/plugins/facetwp/templates/page-support.php
+++ /dev/null
@@ -1,67 +0,0 @@
-payment_id = (int) FWP()->helper->get_license_meta( 'payment_id' );
- }
-
-
- function get_html() {
- if ( 0 < $this->payment_id ) {
- $output = '';
- }
- else {
- $output = 'Active License Required ';
- $output .= 'Please activate or renew your license to access support.
';
- }
-
- return $output;
- }
-
-
- function get_sysinfo() {
- $plugins = get_plugins();
- $active_plugins = get_option( 'active_plugins', [] );
- $theme = wp_get_theme();
- $parent = $theme->parent();
-
- ob_start();
-
-?>
-Home URL:
-
-Payment ID: payment_id; ?>
-
-WordPress Version:
-
-Theme: get( 'Name' ) . ' ' . $theme->get( 'Version' ); ?>
-
-Parent Theme: get( 'Name' ) . ' ' . $parent->get( 'Version' ); ?>
-
-
-PHP Version:
-
-MySQL Version: db_version() ); ?>
-
-Web Server Info:
-
-
- $plugin ) {
- if ( in_array( $plugin_path, $active_plugins ) ) {
- echo $plugin['Name'] . ' ' . $plugin['Version'] . "\n";
- }
- }
-
- $output = ob_get_clean();
- $output = preg_replace( "/[ ]{2,}/", ' ', trim( $output ) );
- $output = str_replace( "\n", '{n}', $output );
- $output = urlencode( $output );
- return $output;
- }
-}
diff --git a/wp/wp-content/plugins/iper-medical/admin-cron.php b/wp/wp-content/plugins/iper-medical/admin-cron.php
index dfd18e8b..c50a16a1 100644
--- a/wp/wp-content/plugins/iper-medical/admin-cron.php
+++ b/wp/wp-content/plugins/iper-medical/admin-cron.php
@@ -39,7 +39,7 @@
jQuery("#cronMSGC").html("Waiting, sync in progress...");
jQuery("#btSendCronC").attr("disabled","disabled");
e.preventDefault();
- jQuery.get("/iper_cron?t=c",{},function(data){
+ jQuery.get("/iper_cron?t=c.",{},function(data){
jQuery("#iper_print_debug_cronC").val(data).html(data);
jQuery("#btSendCronC").removeAttr("disabled");
jQuery("#cronMSGC").html("");
diff --git a/wp/wp-content/plugins/relevanssi-premium/build/index.asset.php b/wp/wp-content/plugins/relevanssi-premium/build/index.asset.php
deleted file mode 100644
index 88eeb121..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/build/index.asset.php
+++ /dev/null
@@ -1 +0,0 @@
- array('wp-components', 'wp-compose', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-i18n', 'wp-plugins', 'wp-polyfill'), 'version' => '3cf891ee5aaa21141e30e23ad95d485e');
\ No newline at end of file
diff --git a/wp/wp-content/plugins/relevanssi-premium/build/index.js b/wp/wp-content/plugins/relevanssi-premium/build/index.js
deleted file mode 100644
index 0933fb81..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/build/index.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=14)}([function(e,t){e.exports=window.wp.element},function(e,t){e.exports=window.wp.i18n},function(e,t){e.exports=window.wp.components},function(e,t,n){var r=n(18),o=n(19),l=n(20),c=n(22);e.exports=function(e,t){return r(e)||o(e,t)||l(e,t)||c()}},function(e,t){e.exports=window.wp.data},function(e,t){function n(t){return e.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},n(t)}e.exports=n},function(e,t){e.exports=window.wp.editPost},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t){function n(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest;","var _typeof = require(\"@babel/runtime/helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;","import {\n\tPanel,\n\tPanelBody,\n\tPanelRow,\n\tTextControl,\n\tTextareaControl,\n\tCheckboxControl,\n\tButton,\n\twithFocusOutside,\n} from \"@wordpress/components\"\nimport { registerPlugin } from \"@wordpress/plugins\"\nimport { PluginSidebar, PluginSidebarMoreMenuItem } from \"@wordpress/edit-post\"\nimport { __ } from \"@wordpress/i18n\"\nimport { select, withSelect, withDispatch } from \"@wordpress/data\"\nimport { compose } from \"@wordpress/compose\"\nimport { useState, useEffect } from \"@wordpress/element\"\n\nconst relevanssiIcon = wp.element.createElement(\n\t\"svg\",\n\t{\n\t\twidth: 20,\n\t\theight: 20,\n\t},\n\twp.element.createElement(\"path\", {\n\t\td:\n\t\t\t\"M5.644 20.665 C6.207 20.545 6.612 20.029 6.574 19.438 6.469 17.784 6.492 16.554 6.617 15.602 L7.388 19.228 C7.454 19.538 7.576 19.815 7.737 20.058 7.742 20.12 7.749 20.181 7.763 20.243 L8.444 23.384 C10.112 23.233 11.311 22.775 11.214 23.077 L10.82 21.227 C10.875 21.218 10.929 21.211 10.984 21.199 10.995 21.197 11.004 21.193 11.015 21.191 L11.35 22.766 C11.571 22.305 13.613 22.092 14.187 21.891 L13.42 19.11 C13.529 18.742 13.553 18.346 13.466 17.936 L12.445 13.134 C12.535 13.088 12.62 13.03 12.698 12.959 12.737 12.929 12.786 12.899 12.84 12.864 13.25 12.596 14.097 12.042 14.433 10.839 L20.429 12.98 C20.642 13.056 20.862 13.067 21.069 13.023 21.456 12.941 21.792 12.667 21.934 12.267 22.154 11.655 21.835 10.981 21.222 10.763 L14.393 8.324 C14.385 8.291 14.379 8.26 14.37 8.226 14.212 7.595 13.573 7.212 12.94 7.372 12.887 7.385 12.838 7.402 12.789 7.422 12.873 6.845 12.859 6.245 12.731 5.643 12.145 2.884 9.422 1.118 6.661 1.705 3.901 2.292 2.132 5.012 2.718 7.771 3.304 10.529 6.027 12.295 8.788 11.708 10.041 11.442 11.088 10.735 11.805 9.786 11.917 9.894 12.05 9.981 12.203 10.04 12.148 10.37 11.997 10.56 11.811 10.71 10.72 11.467 10.238 11.826 9.318 12.07 L8.678 12.167 C7.581 12.344 6.407 12.307 5.457 11.871 4.141 13.689 3.972 15.683 4.221 19.589 4.263 20.238 4.823 20.73 5.473 20.688 5.531 20.685 5.589 20.677 5.644 20.665 Z M8.568 10.67 C6.38 11.135 4.222 9.735 3.758 7.55 3.293 5.364 4.695 3.208 6.883 2.743 9.07 2.278 11.229 3.677 11.693 5.863 12.158 8.049 10.755 10.205 8.568 10.67 Z\",\n\t}),\n\twp.element.createElement(\"path\", {\n\t\td:\n\t\t\t\"M8.009 5.745 C7.25 5.906 6.576 5.754 6.502 5.406 6.496 5.377 6.496 5.348 6.498 5.318 6.012 5.752 5.765 6.429 5.911 7.115 6.127 8.132 7.122 8.783 8.132 8.568 9.142 8.353 9.786 7.354 9.57 6.338 9.483 5.928 9.269 5.58 8.98 5.323 8.755 5.503 8.411 5.66 8.009 5.745 Z\",\n\t})\n)\n\nconst { Fragment } = wp.element\n\nregisterPlugin(\"relevanssi-premium\", {\n\trender: function () {\n\t\tconst [relevanssiSees, setRelevanssiSees] = useState([])\n\t\tconst [relevanssiRelated, setRelevanssiRelated] = useState([])\n\t\tconst [relevanssiExcluded, setRelevanssiExcluded] = useState([])\n\t\tconst [relevanssiExcludedIds, setRelevanssiExcludedIds] = useState([])\n\n\t\tconst regenerateRelatedPosts = (postId, metaKey, metaValue) => {\n\t\t\tif (!metaValue) metaValue = \"0\"\n\t\t\twp.apiFetch({\n\t\t\t\tpath: `/relevanssi/v1/regeneraterelatedposts/${postId}/${metaKey}/${metaValue}`,\n\t\t\t}).then((data) => {\n\t\t\t\tsetRelevanssiRelated(createRelatedList(data))\n\t\t\t})\n\t\t}\n\n\t\tconst RelatedPostControl = withFocusOutside(\n\t\t\tclass extends React.Component {\n\t\t\t\thandleFocusOutside() {\n\t\t\t\t\tregenerateRelatedPosts(\n\t\t\t\t\t\twp.data.select(\"core/editor\").getCurrentPostId(),\n\t\t\t\t\t\tthis.props.metaKey,\n\t\t\t\t\t\twp.data.select(\"core/editor\").getEditedPostAttribute(\"meta\")[\n\t\t\t\t\t\t\tthis.props.metaKey\n\t\t\t\t\t\t]\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\trender() {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t \n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\n\t\tconst MetaControl = compose(\n\t\t\twithDispatch((dispatch, props) => {\n\t\t\t\treturn {\n\t\t\t\t\tsetMetaValue: function (metaValue) {\n\t\t\t\t\t\tdispatch(\"core/editor\").editPost({\n\t\t\t\t\t\t\tmeta: { [props.metaKey]: metaValue },\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}),\n\t\t\twithSelect((select, props) => {\n\t\t\t\tlet metaValue = select(\"core/editor\").getEditedPostAttribute(\"meta\")[\n\t\t\t\t\tprops.metaKey\n\t\t\t\t]\n\t\t\t\tif (metaValue === \"0\") metaValue = \"\"\n\t\t\t\treturn {\n\t\t\t\t\tmetaValue,\n\t\t\t\t}\n\t\t\t})\n\t\t)((props) => {\n\t\t\tlet args = {\n\t\t\t\tlabel: props.title,\n\t\t\t\tvalue: props.metaValue,\n\t\t\t\tonChange: function (content) {\n\t\t\t\t\tprops.setMetaValue(content)\n\t\t\t\t},\n\t\t\t}\n\t\t\tif (props.control == CheckboxControl) {\n\t\t\t\tconst checked = props.metaValue == \"on\" ? true : false\n\t\t\t\targs.value = \"\"\n\t\t\t\targs.checked = checked\n\t\t\t\targs.onChange = function (content) {\n\t\t\t\t\tcontent = content ? \"on\" : \"off\"\n\t\t\t\t\tprops.setMetaValue(content)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn wp.element.createElement(props.control, args)\n\t\t})\n\n\t\tconst excludeRelatedPost = (excludedPostId, postId) => {\n\t\t\twp.apiFetch({\n\t\t\t\tpath: `/relevanssi/v1/excluderelatedpost/${excludedPostId}/${postId}`,\n\t\t\t}).then((data) => {\n\t\t\t\tsetRelevanssiExcludedIds(data)\n\t\t\t})\n\t\t}\n\n\t\tconst unExcludeRelatedPost = (excludedPostId, postId) => {\n\t\t\twp.apiFetch({\n\t\t\t\tpath: `/relevanssi/v1/unexcluderelatedpost/${excludedPostId}/${postId}`,\n\t\t\t}).then((data) => {\n\t\t\t\tsetRelevanssiExcludedIds(data)\n\t\t\t})\n\t\t}\n\n\t\tconst postId = select(\"core/editor\").getCurrentPostId()\n\t\tuseEffect(() => {\n\t\t\twp.apiFetch({\n\t\t\t\tpath: `/relevanssi/v1/sees/${postId}`,\n\t\t\t}).then((data) => {\n\t\t\t\tsetRelevanssiSees(data)\n\t\t\t})\n\t\t}, [postId])\n\n\t\t/* \n\n\n\t\t\t\t\t\t\t*/\n\n\t\tconst createRelatedList = (data) => {\n\t\t\treturn data.map((row) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t{row.title} {\" \"}\n\t\t\t\t\t\t excludeRelatedPost(row.id, postId)}>\n\t\t\t\t\t\t\t({__(\"not this\", \"relevanssi\")})\n\t\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t)\n\t\t\t})\n\t\t}\n\t\tuseEffect(() => {\n\t\t\twp.apiFetch({\n\t\t\t\tpath: `/relevanssi/v1/listrelated/${postId}`,\n\t\t\t}).then((data) => {\n\t\t\t\tsetRelevanssiRelated(createRelatedList(data))\n\t\t\t})\n\t\t}, [postId, relevanssiExcludedIds])\n\n\t\tuseEffect(() => {\n\t\t\twp.apiFetch({\n\t\t\t\tpath: `/relevanssi/v1/listexcluded/${postId}`,\n\t\t\t}).then((data) => {\n\t\t\t\tconst list = data.map((row) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{row.title} \n\t\t\t\t\t\t\t unExcludeRelatedPost(row.id, postId)}>\n\t\t\t\t\t\t\t\t({__(\"use this\", \"relevanssi\")})\n\t\t\t\t\t\t\t \n\t\t\t\t\t\t \n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t\tsetRelevanssiExcluded(list)\n\t\t\t})\n\t\t}, [postId, relevanssiExcludedIds])\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\tRelevanssi Premium\n\t\t\t\t \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{relevanssiSees.title && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Title:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.title}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.content && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Content:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.content}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.author && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Author:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.author}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.category && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Categories:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.category}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.tag && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Tags:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.tag}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.taxonomy && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Other taxonomies:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.taxonomy}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.comment && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Comments:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.comment}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.customfield && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Custom fields:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.customfield}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.excerpt && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Excerpt:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.excerpt}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.link && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Links to this post:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.link}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.mysql && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"MySQL columns:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.mysql}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.reason && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{__(\"Reason this post is not indexed:\", \"relevanssi\")}\n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.reason}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t \n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t{__(\"Related posts for this post:\", \"relevanssi\")}
\n\t\t\t\t\t\t\t{relevanssiRelated} \n\n\t\t\t\t\t\t\t{__(\"Excluded posts for this post:\", \"relevanssi\")}
\n\t\t\t\t\t\t\t{relevanssiExcluded} \n\t\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t \n\t\t\t \n\t\t)\n\t},\n})\n","(function() { module.exports = window[\"wp\"][\"components\"]; }());","(function() { module.exports = window[\"wp\"][\"compose\"]; }());","(function() { module.exports = window[\"wp\"][\"data\"]; }());","(function() { module.exports = window[\"wp\"][\"editPost\"]; }());","(function() { module.exports = window[\"wp\"][\"element\"]; }());","(function() { module.exports = window[\"wp\"][\"i18n\"]; }());","(function() { module.exports = window[\"wp\"][\"plugins\"]; }());"],"sourceRoot":""}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/relevanssi-premium/changelog.txt b/wp/wp-content/plugins/relevanssi-premium/changelog.txt
deleted file mode 100644
index 5c368182..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/changelog.txt
+++ /dev/null
@@ -1,1564 +0,0 @@
-= 2.17.2 =
-* New feature: If you have a valid license, you can now leave support requests from within the Relevanssi settings pages.
-* New feature: New filter hook `relevanssi_didyoumean_token` lets you filter Did you mean words before correction. You can use this filter hook to exclude words from being corrected.
-* Minor fix: Relevanssi now adds spaces after table cell tags to avoid table cell content sticking together in excerpts.
-* Minor fix: Phrase search couldn't find phrases that include an ampersand if they matched the post title. This works now.
-* Minor fix: The 'Allowable tags in excerpts' function now automatically corrects the entered value to match what Relevanssi expects the value to be.
-* Minor fix: In some cases Relevanssi goofed excerpts for user profiles when custom field content was used for excerpts. This is now corrected and the user custom field excerpts work better now.
-* Minor fix: Relevanssi blocked non-post items from the results when used with Relevanssi Live Ajax Search. That is now fixed.
-* Minor fix: Phrase searching did not work in multisite searches. This is now fixed.
-
-= 2.17.1 =
-* New feature: New filter hook `relevanssi_update_translations` lets you disable the translation updates from TranslationsPress. If you only use WordPress in English, you can disable the translation updates with `add_filter( 'relevanssi_update_translations', '__return_false' );`.
-* Changed behaviour: Relevanssi now ignores WordPress metadata custom fields that aren't interesting for Relevanssi indexing.
-* Changed behaviour: Both `relevanssi_get_permalink()` and `relevanssi_the_permalink()` now can take post ID or a post object as a parameter and can thus be used outside the Loop.
-* Changed behaviour: The `relevanssi_hits_filter` hook now gets the WP_Query object as the second parameter.
-* Minor fix: The "Disable outside connections" option did not apply to the TranslationsPress translation updates. Now it does: those are also disabled when this option is enabled.
-* Minor fix: The `mysqlcolumn_detail` feature was completely missing. Nobody has ever asked about it, which suggests nobody actually uses it, but now it works.
-* Minor fix: The 'Ignore post content' checkbox did not show up correctly. Now it works.
-
-= 2.17.0 =
-* New feature: 'Ignore post content' checkbox in the Relevanssi post edit sidebar makes Relevanssi ignore post content for that post when indexing.
-* New feature: The action hook `relevanssi_init` runs at the end of the `relevanssi_init()` function.
-* New feature: The $post->relevanssi_hits data now includes more information about custom field, taxonomy and MySQL column matches.
-* New feature: New filter hook `relevanssi_author_query_filter` filters the post author MySQL query.
-* New feature: New filter hook `relevanssi_by_date_query_filter` filters the by_date MySQL query.
-* New feature: New filter hook `relevanssi_date_query_filter` filters the date query MySQL query.
-* New feature: New filter hook `relevanssi_parent_query_filter` filters the post parent MySQL query.
-* New feature: New filter hook `relevanssi_post_query_filter` filters the post__in and post__not_in MySQL query.
-* New feature: New filter hook `relevanssi_post_status_query_filter` filters the post_status MySQL query.
-* New feature: New filter hook `relevanssi_post_type_query_filter` filters the post_type MySQL query.
-* New feature: Relevanssi will now show available Premium updates even when the license is not valid or API key is missing. The updates cannot be installed without a valid API key, but they will be visible.
-* Major fix: The click tracking log table trimming wasn't implemented before. Now it's up and running.
-* Minor fix: The Bricks compatibility was improved, Relevanssi now notices changes to Bricks posts more often. Relevanssi also only reads the text from the `_bricks_page_content_2` custom field.
-
-= 2.16.8 =
-* One trailing comma caused Relevanssi to not work with PHP 7.2 or earlier. That is fixed, and Relevanssi is now again compatible with PHP 7.
-
-= 2.16.7 =
-* Minor fix: The `relevanssi_index_taxonomies_args` filter hook should've been removed from use long time ago, but it was still in use in some cases, and thus `relevanssi_hide_empty_terms` didn't always work, depending on how the terms were indexed. Now the filter use is consistent and `relevanssi_hide_empty_terms` is always used.
-* User interface: The synonym settings page now alerts if the synonyms aren't active because of the AND search.
-
-= 2.16.6 =
-* Minor fix: The translations would show up as requiring update, even after the update. This is now fixed.
-* Minor fix: Pinning didn't work with numeric keywords.
-
-= 2.16.5 =
-* Security fix: Extra hardening for AJAX requests. Some AJAX actions in Relevanssi could leak information to site subscribers who knew what to look for.
-
-= 2.16.4 =
-* Security fix: Any registered user could empty the Relevanssi index by triggering the index truncate AJAX action. That is no longer possible.
-* New feature: The [searchform] shortcode has a new parameter, 'checklist', which you can use to create taxonomy checklists.
-* New feature: New filter hook `relevanssi_post_type_archive_ok` allows controlling whether individual post type archives are indexed or not.
-* New feature: You can now set the API key with the constant RELEVANSSI_API_KEY. If the constant is set, the API key settings disappear on the Relevanssi settings page.
-* Changed behaviour: The `relevanssi_related_output_objects` filter hook has been removed. It was unnecessary: it simply isn't useful to filter a function return value, because you can modify it without a filter hook.
-* Changed behaviour: The `relevanssi_search_form` filter hook has an additional parameter which has the shortcode attributes.
-* Changed behaviour: The `relevanssi_search_again` parameter array has more parameters the filter can modify.
-* Changed behaviour: The `relevanssi_show_matches` filter hook gets the post object as the second parameter.
-* Changed behaviour: The `relevanssi_term_add_data` filter hook now runs also when individual terms are modified. Previously it only run when all terms were indexed.
-* Translations: Relevanssi Premium is now professionally translated to German and Spanish.
-
-= 2.16.3 =
-* Security fix: User searches page had a XSS vulnerability.
-* Changed behaviour: Click tracking is no longer added to links if the user is on the logging block list or a bot.
-* Minor fix: `relevanssi_orderby` did not always accept an array-format orderby parameter.
-* Minor fix: Removes a highlighting problem stemming from uppercase search terms.
-* Minor fix: When image attachment indexing was disabled, saving image attachments would still index the images. Image attachment blocking is now a `relevanssi_indexing_restriction` filter function, which means it's always active.
-* Minor fix: Enabling click tracking doesn't break anchor links anymore.
-* Minor fix: Relevanssi removes highlights better from inside multiline HTML tags.
-
-= 2.16.2 =
-* Minor fix: Remove unnecessary database calls from admin pages.
-* Minor fix: Improved Oxygen compatibility.
-
-= 2.16.1 =
-* Fixes an error on the post query insights screen.
-
-= 2.16.0 =
-* New feature: Click tracking lets you track the way the users click different posts from the search results pages. Enable the click tracking from the Logging settings to see it in effect.
-* New feature: Proximity sorting lets you sort posts by geographical distance. See the knowledge base for details on how this works.
-* New feature: New filter hook `relevanssi_render_blocks` controls whether Relevanssi renders blocks in a post or not. If you are having problems updating long posts with lots of blocks, having this filter hook return `false` for the post in question will likely help, as rendering the blocks in a long post can take huge amounts of memory.
-* New feature: The [searchform] shortcode has a new parameter, 'post_type_boxes', which creates a checkbox for each post type you list in the value. For example [searchform post_type_boxes='*post,page'] would create a search with a checkbox for 'post' and 'page' post types, with 'post' pre-checked.
-* New feature: You can now have multiple dropdowns in one [searchform] shortcode. Anything that begins with 'dropdown' is considered a dropdown parameter, so you can do [searchform dropdown_1='category' dropdown_2='post_tag'] for example.
-* New feature: New filter hook `relevanssi_search_params` lets you filter search parameters after they've been collected from the WP_Query.
-* New feature: New filter hook `relevanssi_excerpt_post` lets you make Relevanssi skip creating excerpts for specific posts.
-* Changed behaviour: Redirect queries now support regular expressions.
-* Changed behaviour: Filter hooks `relevanssi_1day`, `relevanssi_7days` and `relevanssi_30days` are removed, as the user searches page is now different. The default value for `relevanssi_user_searches_limit` is now 100 instead of 20.
-* Minor fix: Stopwords weren't included in the exported options; they are now.
-* Minor fix: Relevanssi won't let you adjust synonyms and stopwords anymore if you use Polylang and are in 'Show all languages' mode.
-* Minor fix: New parameter for `relevanssi_tokenize()` introduces the context (indexing or search query). The `relevanssi_extract_phrases()` is only used on search queries.
-* Minor fix: When you deactivate the Related posts feature from the settings, the Related post caches for posts are flushed.
-* Minor fix: In some languages, iOS uses „“ for quotes. Relevanssi now understands those for the phrase operator.
-* Minor fix: You can now choose 'user' post type in the admin search post type dropdown.
-* Minor fix: The debugging page now lets you debug user profiles and taxonomy terms.
-* Minor fix: Highlighting is improved by a more precise HTML entity filter, thanks to Jacob Bearce.
-* Minor fix: Fixes problems with the WP-Members compatibility.
-* Minor fix: The `relevanssi_premium_tokenizer` filter hook now gets the context (indexing or searching) as a parameter.
-* Minor fix: Stops Relevanssi from blocking the admin search for WooCommerce coupons and other WooCommerce custom post types.
-* Minor fix: Searching for a stemmed word with the AND search didn't find correct results.
-
-= 2.15.3.1 =
-* Minor fix: The Bricks compatibility was broken, this version fixes it.
-
-= 2.15.3 =
-* New feature: You can add a post type dropdown to [searchform] forms with `dropdown='post_type'`.
-* New feature: New filter hook `relevanssi_sku_boost` controls the WooCommerce `_sku` field weight boost.
-* New feature: New filter hook `relevanssi_related_posts_cache_id` lets you change the Related posts transient cache ID so allow multiple cached related posts per post.
-* New feature: New filter hook `relevanssi_post_to_excerpt` lets you filter the post object before an excerpt is created from it.
-* New feature: New filter hook `relevanssi_custom_fields_before_repeaters` filters the list of custom fields before repeater fields are processed, so you can add fields from code using the field_%_subfield notation.
-* New feature: Relevanssi is now compatible with the Bricks page builder theme (requires Bricks 1.3.2).
-* Changed behaviour: The spam block now returns a 410 Gone status code for blocked pages.
-* Changed behaviour: The minimum capability for seeing the Gutenberg sidebar or the Relevanssi meta box is changed from 'manage_options' to 'edit_others_posts' in order to allow editors see the sidebar and the meta box. If you prefer the original way, use the `relevanssi_sidebar_capability` filter hook to adjust.
-* Minor fix: Relevanssi removes HTML comments better from the post content.
-* Minor fix: Sometimes the Did you mean would return really weird long suggestions from the search logs. That won't happen anymore.
-* Minor fix: Oxygen compatibility has been improved. Rich text fields and updating posts when they are saved in Oxygen now work better, and revisions are no longer indexed.
-* Minor fix: Improves tax_query handling in fringe cases with multiple AND clauses joined together with OR.
-* Minor fix: It's now possible to override global multisite search settings from the `searchblogs` query variable.
-* Minor fix: Searching without a search term works much better now, you get more posts in the results (default value is up to 500).
-
-= 2.15.2 =
-* New feature: Adds support for Avada Live Search.
-* New feature: Adds support for Fibo Search.
-* New feature: Spam blocking can be used to block bots from accessing your search results pages.
-* Changed behaviour: The filter hook `relevanssi_indexing_terms` that appeared in post type archive indexing is renamed to `relevanssi_indexing_tokens` what it should've been to begin with.
-* Minor fix: Elementor library searches are not broken anymore when Relevanssi is enabled in admin.
-* Minor fix: Relevanssi now understands array-style post_type[] parameters.
-* Minor fix: The MySQL column detail information has been missing from the index.
-* Minor fix: Spam blocking now works with pretty search page URLs and not just with ?s= URLs. You can use the new filter hook `relevanssi_search_url_prefix` to adjust the prefix in case it's not `/search/`. Spam blocking is also extended to page views with spam content in the `highlight` parameter.
-* Minor fix: Relevanssi now automatically considers the Turkish 'ı' the same as 'i'.
-
-= 2.15.1 =
-* New feature: New action hooks `relevanssi_disable_stemmer` and `relevanssi_enable_stemmer`. Relevanssi-compatible stemmers should implement these action hooks: the first should disable the stemmer and the second should enable it.
-* New feature: Adds compatibility for WP-Members plugin, preventing blocked posts from showing up in the search results.
-* New feature: New function `relevanssi_get_attachment_suffix()` can be used to return the attachment file suffix based on a post object or a post ID.
-* Major fix: Fixes the broken Relevanssi controls on block editor post edit pages.
-* Minor fix: Improved the Missing terms feature when used with stemming. This fix requires updating Snowball Stemmer to version 1.3.
-* Minor fix: Improves the Oxygen compatibility. Now also the [oxygen] shortcode tags are removed.
-
-= 2.15.0 =
-* New feature: Relevanssi can now add Google-style missing term lists to the search results. You can either use the `%missing%` tag in the search results breakdown settings, or you can create your own code: the missing terms are also in `$post->missing_terms`. Relevanssi Premium will also add "Must have" links when there's just one missing term.
-* New feature: New filter hook `relevanssi_missing_terms_tag` controls which tag is used to wrap the missing terms.
-* New feature: New filter hook `relevanssi_missing_terms_template` can be used to filter the template used to display the missing terms.
-* New feature: New filter hook `relevanssi_missing_terms_must_have` filters the 'Must have' part of the missing terms element.
-* New feature: New filter hook `relevanssi_phrase` filters each phrase before it's used in the MySQL query.
-* New feature: New filter hook `relevanssi_multi_results`, which is the same as `relevanssi_results`, but is applied to multisite results, so instead of a post ID, it has 'blog ID|post ID' in the keys and as usual the post weight in the value.
-* New feature: New filter hook `relevanssi_site_results`, which is the same as `relevanssi_results`, but only applied in single site results in multisite searching (ie. the filter is applied once for each subsite included in the results).
-* New feature: New filter hook `relevanssi_post_author` lets you filter the post author display_name before it is indexed.
-* New feature: New function `relevanssi_get_post_meta_for_all_posts()` can be used to fetch particular meta field for a number of posts with just one query.
-* New feature: Relevanssi now has a keyword-based spam blocking feature to stop spam searches as soon as possible.
-* New feature: The `fields` parameter can be set to `id=>type`, which returns post ID and the post type (post, user, taxonomy term), providing support for non-post results. This only works when using `relevanssi_do_query()` to run the query.
-* Changed behaviour: `relevanssi_strip_tags()` used to add spaces between HTML tags before stripping them. It no longer does that, but instead adds a space after specific list of tags (p, br, h1-h6, div, blockquote, hr, li, img) to avoid words being stuck to each other in excerpts.
-* Changed behaviour: Relevanssi now indexes the contents of Oxygen Builder PHP & HTML code blocks.
-* Changed behaviour: Relevanssi now handles synonyms inside phrases differently. If the new filter hook `relevanssi_phrase_synonyms` returns `true` (default value), synonyms create a new phrase (with synonym 'dog=hound', phrase `"dog biscuits"` becomes `"dog biscuits" "hound biscuits"`). If the value is `false`, synonyms inside phrases are ignored.
-* Changed behaviour: Multisite searching code has been refactored, and at the same time new features have been added. It is now possible to use date parameters and synonyms in multisite searching.
-* Minor fix: Attachments that cause the reading server run out of memory are now labeled with the "File size too large error".
-* Minor fix: Multisite searches were not logged. Now they are.
-* Minor fix: Warnings when creating excerpts with search terms that contain a slash were removed.
-* Minor fix: Better Ninja Tables compatibility to avoid problems with lightbox images.
-* Minor fix: Trying to open the Relevanssi sidebar in Gutenberg when a post type did not support custom fields caused a crash. Now the sidebar is simply disabled if the post type does not support custom fields.
-* Minor fix: Relevanssi did not work well in the Media Library grid view. Relevanssi is now blocked there. If you need Relevanssi in Media Library searches, use the list view.
-* Minor fix: Relevanssi excerpt creation didn't work correctly when numerical search terms were used.
-
-= 2.14.5 =
-* New feature: New WP CLI command `wp relevanssi remove_attachment_errors` clears out all attachment reading errors.
-* Changed behaviour: `relevanssi_excerpt_custom_field_content` now gets the post ID and list of custom field names as a parameter.
-* Changed behaviour: Attachments tab will now prevent reading the attachments if the options have been changed and aren't saved.
-* Changed behaviour: Instead of setting the attachment reading server to 'us', Relevanssi install process will now guess whether 'eu' would be a better option based on the site locale.
-* Minor fix: Avoids admin ajax request flooding when removing lots of posts at once.
-* Minor fix: Adds trailing slash to the blog URL in Did you mean links.
-* Minor fix: When the contents for an attached attachment are read, Relevanssi will now automatically index the parent post if the setting is enabled.
-
-= 2.14.4 =
-* New feature: New action hooks `relevanssi_pre_the_content` and `relevanssi_post_the_content` fire before and after Relevanssi applies `the_content` filter to the post excerpts. Some Relevanssi default behaviour has been moved to these hooks so it can be modified.
-* Changed behaviour: The `relevanssi_do_not_index` gets the post object as a third parameter.
-* Minor fix: Remove errors from `relevanssi_strip_all_tags()` getting a `null` parameter.
-* Minor fix: Updating posts still used `relevanssi_update_doc_count()`, which can sometimes be really slow.
-* Minor fix: Corrected misleading instructions about indexing AND synonyms.
-
-= 2.14.3 =
-* Major fix: Post type weights did not work; improving the caching had broken them.
-* Minor fix: 'Read all unread attachments' did not include 'key is not valid' errors. Now it rereads those attachments.
-* Minor fix: Stops indexing error messages in WPML.
-* Minor fix: Synonyms are now used for highlighting titles in AND searches if 'Index synonyms for AND searches' is enabled.
-* Minor fix: Relevanssi works better with soft hyphens now, removing them in indexing and excerpt-building.
-
-= 2.14.2 =
-* Major fix: Stops more problems with ACF custom field indexing.
-* Major fix: Fixes a bug in search result caching that caused Relevanssi to make lots of unnecessary database queries.
-* Minor fix: Pinning didn't work correctly when the post content indexing was disabled. Now the pinned words are included in the post title, if the post content is not available.
-
-= 2.14.1 =
-* Major fix: Stops TypeError crashes from null custom field indexing.
-
-= 2.14.0 =
-* New feature: New filter hook `relevanssi_excerpt_gap` lets you adjust the first line of excerpt optimization.
-* New feature: Phrase matching now works also for taxonomy terms and user profiles.
-* New feature: New filter hook `relevanssi_phrase_queries` can be used to add phrase matching queries to support more content types.
-* New feature: New WP CLI command `wp relevanssi refresh` reindexes all posts (and only posts) without truncating the index first. This is very useful for regular reindexing of production sites, as the search won't stop working during the reindexing.
-* New feature: New function `relevanssi_update_words_option()` can be used to update the `relevanssi_words` option directly, in case the AJAX update action fails for some reason.
-* New feature: You can now reset the `relevanssi_words` cache option from the Relevanssi debugging settings tab.
-* Changed behaviour: The `relevanssi_tag_before_tokenize` filter hook parameters were changed in order to be actually useful and to match what the filter hook is supposed to do.
-* Changed behaviour: Relevanssi now automatically optimizes excerpt creation in long posts. You can still use `relevanssi_optimize_excerpts` for further optimization, but it's probably not necessary.
-* Changed behaviour: The `relevanssi_admin_search_element` filter hook now gets the post object as the second parameter, rendering the filter hook more useful.
-* Minor fix: WPML couldn't digest post type archives in the search results. Relevanssi now handles that and also takes errors from WPML more gracefully.
-* Minor fix: Taxonomy terms in WPML were not indexed correctly. Instead of the post language, the current language was used, so if your admin dashboard is in English, German posts would get English translations of the terms, not German. This is now fixed.
-* Minor fix: Excerpt creation is now faster when multiple excerpts are not used.
-* Minor fix: The SEO plugin noindex setting did not actually work. That has been fixed now.
-* Minor fix: Multisite searching didn't work correctly in HyperDB environments.
-* Minor fix: Improved fringe cases in nested taxonomy queries.
-* Minor fix: Indexing would remove content where less than or greater than symbols were interpreted as HTML tags.
-* Minor fix: In some cases Relevanssi wouldn't highlight the last word of the title. This is more reliable now.
-* Minor fix: Relevanssi will now add the `highlight` parameter only to search results, and not to other links on the search results page.
-* Minor fix: Disables stemming for words that are inside phrases to make post part targeted searches more precise.
-
-= 2.13.1 =
-* Major fix: User and taxonomy term search did not work correctly, thanks to a complicated mix of small issues that didn't show up in the automated testing. The problem was caused be `relevanssi_premium_get_post()` returning WP_Post objects for these non-posts, so the function is now returning stdClass objects again.
-* Major fix: The type hinting introduced for some functions turned out to be too strict, causing fatal errors. The type hinting has been relaxed (using nullable types would help, but that's a PHP 7.4 feature, and we don't want that).
-
-= 2.13.0 =
-* New feature: New filter hook `relevanssi_rendered_block` filters Gutenberg block content after the block has been rendered with `render_block()`.
-* New feature: New filter hook `relevanssi_log_query` can be used to filter the search query before it's logged. This can be used to log instead the query that includes synonyms (available as a parameter to the filter hook).
-* New feature: New filter hook `relevanssi_add_all_results` can be used to make Relevanssi add a list of all result IDs found to `$query->relevanssi_all_results`. Just make this hook return `true`.
-* New feature: New filter hook `relevanssi_acceptable_hooks` can be used to adjust where in WP admin the Relevanssi admin javascripts are enqueued.
-* New feature: Support for All-in-One SEO. Posts marked as 'Robots No Index' are not indexed by Relevanssi.
-* New feature: New setting in advanced indexing settings to control whether Relevanssi respects the SEO plugin 'noindex' setting or not.
-* Changed behaviour: Type hinting has been added to Relevanssi functions, which may cause errors if the filter functions are sloppy with data types.
-* Changed behaviour: Relevanssi no longer logs queries with the added synonyms. You can use the `relevanssi_log_query` filter hook to return to the previous behaviour of logging the synonyms too. Thanks to Jan Willem Oostendorp.
-* Changed behaviour: `relevanssi_the_title()` now supports the same parameters as `the_title()`, so you can just replace `the_title()` with it and keep everything else the same. The old behaviour is still supported.
-* Changed behaviour: When using ACF and custom fields indexing set to 'all', Relevanssi will no longer index the meta fields (where the content begins with `field_`).
-* Minor fix: In some cases, having less than or greater than symbols in PDF content would block that PDF content from being indexed.
-* Minor fix: PDF content wasn't being indexed in some cases where custom field indexing was otherwise disabled.
-* Minor fix: The Oxygen compatibility made it impossible to index other custom fields than the Oxygen `ct_builder_shortcodes`. This has been improved now.
-* Minor fix: In Related posts, random posts from the same category could include duplicates of posts in the related posts.
-* Minor fix: Old legacy scripts that caused Javascript warnings on admin pages have been removed.
-* Minor fix: relevanssi_premium_get_post() always returns WP_Post objects now, never stdClass objects.
-* Minor fix: The search results log export did not do anything useful when no data was found. Now the export provides a message "No search keywords logged". Thanks to Jan Willem Oostendorp.
-
-= 2.12.2 =
-* New feature: You can force Relevanssi to be active by setting the query variable `relevanssi` to `true`. Thanks to Jan Willem Oostendorp.
-* Changed behaviour: Relevanssi has been moved from `the_posts` filter to `posts_pre_query`. This change doesn't do much, but increases performance slightly as WordPress needs to do less useless work, as now the default query is no longer run. Thanks to Jan Willem Oostendorp.
-* Minor fix: Highlighting didn't work properly when highlighting something immediately following a HTML tag.
-* Minor fix: WPML search results that included non-post results caused fatal errors and crashes. This fixes the crashing and makes non-post results work better in both WPML and Polylang.
-* Minor fix: Pinning could cause warnings when using `fields` and non-post results.
-* Minor fix: Importing options broke synonym and stopword settings.
-* Minor fix: Improves the Rank Math SEO compatibility to avoid errors in plugin activation.
-* Minor fix: You can no longer set the value of minimum word length to less than 1 or higher than 9 from the settings page.
-
-= 2.12.1 =
-* Major fix: The multilingual stopwords and synonyms were used based on the global language. Now when indexing posts, the post language is used instead of the global language.
-* Minor fix: Fixes the broken AND indexing for synonyms.
-
-= 2.12.0 =
-* New feature: Relevanssi now supports multilingual synonyms and stopwords. Relevanssi now has a different set of synonyms and stopwords for each language. This feature is compatible with WPML and Polylang.
-* New feature: SEO by Rank Math compatibility is added: posts marked as 'noindex' with Rank Math are not indexed by Relevanssi.
-* New feature: New filter hook `relevanssi_sidebar_capability` adjusts the minimum capability required for seeing the Gutenberg sidebar and the Classic editor metabox. Default value is `manage_options`, ie. Editor.
-* Minor fix: Attachment weren't affected by `relevanssi_indexing_restriction` filters when a new attachment was added. Now the filters apply as they should.
-* Minor fix: With keyword matching set to 'whole words' and the 'expand highlights' disabled, words that ended with an 's' weren't highlighted correctly.
-* Minor fix: The 'Post exclusion' setting didn't work correctly. It has been fixed.
-* Minor fix: It's now impossible to set negative weights in searching settings. They did not work as expected anyway.
-* Minor fix: Contributors could see the Relevanssi Gutenberg sidebar, but it didn't work. Now the sidebar is only shown by default to Editors and above.
-* Minor fix: Relevanssi had an unnecessary index on the `doc` column in the `wp_relevanssi` database table. It is now removed to save space. Thanks to Matthew Wang.
-* Minor fix: Improved Oxygen Builder support makes sure `ct_builder_shortcodes` custom field is always indexed.
-
-= 2.11.1 =
-* Changed behaviour: The `relevanssi_excerpt_part` filter hook now gets the post ID as a second parameter. The documentation for the filter has been fixed to match actual use: this filter is applied to the excerpt part after the highlighting and the ellipsis have been added.
-* Changed behaviour: The `relevanssi_index_custom_fields` filter hook is no longer used when determining which custom fields are used for phrase searching. If you have a use case where this change matters, please contact us.
-* Minor fix: The `relevanssi_excerpt` filter hook was removed in 2.11.0. It is now restored and behaves the way it did before, except that when doing multi-part excerpts, this filter is applied separately for each excerpt part.
-* Minor fix: The debugging tab no longer shows the 'Buy Premium' note to Premium users.
-* Minor fix: Avoids undefined variable warnings from the Pretty Links compatibility code.
-* Minor fix: In Premium, phrase matching in custom fields didn't work correctly when the custom field indexing setting was 'all' or 'visible'.
-* Minor fix: The Oxygen Builder compatibility has been improved. Now shortcodes in Oxygen Builder content are expanded, if that setting is enabled in Relevanssi settings.
-* Minor fix: Adding new redirects when there were none was impossible. This is now fixed, and in a more future-proof way.
-* Minor fix: The default value for the number of excerpts was 3. It's now 1.
-
-= 2.11.0 =
-* New feature: There's now a "Debugging" tab in the Relevanssi settings, letting you see how the Relevanssi index sees posts. This is familiar to Premium users, but is now available in the free version as well.
-* New feature: The SEO Framework plugin is now supported and posts set excluded from the search in SEO Framework settings will be excluded from the index.
-* New feature: There's a new option, "Expand highlights". Enabling it makes Relevanssi expand partial-word highlights to cover the full word. This is useful when doing partial matching and when using a stemmer.
-* New feature: Relevanssi can now generate excerpts that show multiple snippets from the post. You can adjust the number of excerpts displayed from the excerpt settings. Individual excerpt parts are wrapped in `span` tags with the class `excerpt_part` for styling.
-* New feature: New filter hook `relevanssi_excerpt_part` allows you to modify the excerpt parts before they are combined together.
-* New feature: New filter hook `relevanssi_excerpts` lets you filter the array of excerpts before the highlights are added.
-* New feature: Relevanssi now supports an arbitrary number of levels in the `field_%_subfield_%_subfield` notation for flexible ACF fields.
-* New feature: Improved compatibility with Oxygen Builder. Relevanssi automatically indexes the Oxygen Builder content and cleans it up. New filter hooks `relevanssi_oxygen_section_filters` and `relevanssi_oxygen_section_content` allow easier filtering of Oxygen content to eg. remove unwanted sections.
-* Changed behaviour: The "Uncheck this for non-ASCII highlights" option has been removed. Highlights are now done in a slightly different way that should work in all cases, including for example Cyrillic text, thus this option is no longer necessary.
-* Changed behaviour: The `index_pdfs` WP CLI command has been retired. It has been replaced with two separate commands: `remove_attachment_contents` removes all read attachment contents from the database and `read_attachments` reads all attachment content from files that haven't been read yet.
-* Changed behaviour: Relevanssi excerpts are now wrapped in `span` tags.
-* Minor fix: Removes the warning about non-numeric values when using a redirect for the first time.
-* Minor fix: Fixes phrase searching using non-US alphabet.
-* Minor fix: Sometimes the `relevanssi_user_index_ok` filter would get a user ID and not the object. This is now fixed: it's always an object.
-* Minor fix: Excluding posts from the block editor didn't work properly: the post would be marked excluded, but would not actually be removed from the index until the next reindexing of the whole database. This works now as expected.
-* Minor fix: Relevanssi would break admin searching for hierarchical post types. This is now fixed, Relevanssi won't do that anymore.
-* Minor fix: Relevanssi indexing now survives better shortcodes that change the global `$post`.
-* Minor fix: Warnings about missing `relevanssi_update_counts` function are now removed.
-* Minor fix: Paid Membership Pro support now takes notice of the "filter queries" setting.
-* Minor fix: OR logic didn't work correctly when two phrases both had the same word (for example "freedom of speech" and "free speech"). The search would always be an AND search in those cases. That has been fixed.
-* Minor fix: Relevanssi no longer blocks the Pretty Links admin page search.
-* Minor fix: The "Respect 'exclude_from_search'" setting did not work if no post type parameter was included in the search parameters.
-* Minor fix: The category inclusion and exclusion setting checkboxes on the Searching tab didn't work. The setting was saved, but the checkboxes wouldn't appear.
-
-= 2.10.3 =
-* New feature: Multisite searching now supports date parameters.
-* New feature: Both `relevanssi_fuzzy_query` and `relevanssi_term_where` now get the current search term as a parameter.
-* New feature: New filter hook `relevanssi_tabs` can be used to adjust the tabs in Relevanssi settings page to add, modify or delete the tabs.
-* Major fix: The `post_relevanssi_related` action hook did not fire at all, causing possible problems if `pre_relevanssi_related` set something that `post_relevanssi_related` was supposed clear out. The default behaviour isn't a problem, but some custom solutions may be.
-* Minor fix: Relevanssi database tables don't have PRIMARY keys, only UNIQUE keys. In case this is a problem (for example on Digital Ocean servers), deactivate and activate Relevanssi to fix the problem.
-* Minor fix: When `posts_per_page` was set to -1, the `max_num_pages` was incorrectly set to the number of posts found. It should, of course, be 1.
-* Minor fix: Excluding from logs didn't work if user IDs had spaces between them ('user_a, user_b'). This is now fixed for good, the earlier fix didn't work.
-* Minor fix: When indexing, users are now counted in a different way, so that the `relevanssi_user_indexing_args` filter hook is applied and the count reflects the actual number of users indexed.
-
-= 2.10.2 =
-* New feature: Wildcard operators ? (any one letter) and * (zero or more letters) can be used inside words, if enabled by setting the `relevanssi_wildcard_search` filter to `true`.
-* New feature: New filter hook `relevanssi_term_where` lets you filter the term WHERE conditional for the search query.
-* Minor fix: Doing the document count updates asynchronously caused problems in some cases (eg. importing posts). Now the document count is only updated after a full indexing and once per week.
-* Minor fix: Phrase matching has been improved to make it possible to search for phrases that include characters like the ampersand.
-
-= 2.10.1 =
-* New feature: New filter hook `relevanssi_didyoumean_alphabet` to replace the default Latin alphabet with something more suited to your site.
-* Major fix: Changes in WooCommerce 4.4.0 broke the Relevanssi searches. This makes the WooCommerce search work again.
-* Minor fix: Excluding from logs didn't work if user IDs had spaces between them ('user_a, user_b'). Now the extra spaces don't matter.
-* Minor fix: The asynchronous doc count action in the previous version could cause an infinite loop with the Snitch logger plugin. This is prevented now: the async action doesn't run after indexing unless a post is actually indexed.
-* Minor fix: Relevanssi indexing procedure was triggered for autosaved drafts, causing possible problems with the asynchronous doc count action.
-* Minor fix: The `relevanssi_index_custom_fields` filter hook was not applied when doing phrase matching, thus phrases could not be found when they were in custom fields added with the filter.
-* Minor fix: Apostrophes in redirect queries didn't work. That is now fixed and saving a query with an apostrophe works and will redirect.
-
-= 2.10.0 =
-* Changed behaviour: Relevanssi now requires PHP 7.
-* Changed behaviour: Relevanssi now sorts strings with strnatcasecmp() instead of strcasecmp(), leading to a more natural results with strings that include numbers.
-* Changed behaviour: Relevanssi init is now moved from priority 10 to priority 1 on the `init` hook to avoid problems with missing TablePress compatibility.
-* New feature: Content wrapped in the `noindex` tags is no longer used for excerpts.
-* New feature: The `[et_pb_fullwidth_code]` shortcode is now removed completely, including the contents, when Relevanssi is indexing and building excerpts.
-* New feature: Relevanssi now shows a warning when a multisite site is not public, as that will lead to no search results because Relevanssi doesn't search non-public sites.
-* New feature: The redirects tab now shows the number of times each redirect has been used.
-* Major fix: Relevanssi didn't index new comments when they were added; when a post was indexed or the whole index rebuilt, comment content was included. We don't know how long this bug has existed, but it is now fixed. Rebuild the index to get all comment content included in the index.
-* Minor fix: Phrase matching did not work correctly in visible custom fields.
-* Minor fix: TablePress support could cause halting errors if posts were inserted before Relevanssi has loaded itself (on `init` priority 10). These errors will no longer happen.
-* Minor fix: Relevanssi only updates doc count on `relevanssi_insert_edit()` when the post is indexed.
-* Minor fix: Counting document count is a slow process that has slowed down opening the indexing tab. It's now done asynchronously. Thanks to Mike Garrett.
-
-= 2.9.0 =
-* New feature: New function `relevanssi_get_related_post_ids()` returns an array of related post IDs for a post.
-* New feature: New function `relevanssi_get_related_post_objects()` returns an array of related post objects for a post.
-* New feature: New filter hook `relevanssi_related_output_objects` is the same as `relevanssi_related_output` but for `relevanssi_get_related_post_objects()`.
-* New feature: New filter hook `relevanssi_get_approved_comments_args` filters the arguments to `get_approved_comments` in comment indexing. This can be used to index custom comment types, for example.
-* Changed behaviour: Relevanssi related posts code has been split into separate functions. The `relevanssi_related_posts()` functions like before, but if you don't want the HTML code, check the new functions.
-* Deprecated: Using relevanssi_related_posts() with `$just_objects` or `$no_template` set to `true` is deprecated. Use `relevanssi_get_related_post_objects()` and `relevanssi_get_related_post_ids()` instead.
-* Minor fix: The related posts transient field uses a different name for storing objects or HTML, to avoid problems in case both styles are used at the same time.
-* Minor fix: Indexing subscriber profiles from the admin interface has stopped working at some point, likely due to some changes in WordPress. It is now noticed and fixed.
-* Minor fix: If running in multisite environment, `relevanssi_get_post_status()` includes the blog ID in the cache key in addition to post ID to avoid clashes where same post ID in different blogs have different statuses.
-* Minor fix: General improvements to the post caching in multisite environments.
-* Minor fix: Options that are used in admin backend only are no longer autoloaded on every page load.
-
-= 2.8.2 =
-* Minor fix: Using phrases in the post part targeting didn't work. It works much better now, but may still have some oddities in some cases.
-* Minor fix: Media Library searches failed if Relevanssi was enabled in the WP admin, but the `attachment` post type wasn't indexed. Relevanssi will no longer block the default Media Library search in these cases.
-* Minor fix: Adds more backwards compatibility for the `relevanssi_indexing_restriction` change, there's now an alert on indexing tab if there's a problem.
-
-= 2.8.1 =
-* New feature: New filter hook `relevanssi_post_content_after_shortcodes` filters the post content after shortcodes have been processed but before the HTML tags are stripped.
-* Minor fix: Adds more backwards compatibility for the `relevanssi_indexing_restriction` change.
-
-= 2.8.0 =
-* New feature: New filter hook `relevanssi_block_to_render` makes it possible to filter Gutenberg blocks before they are rendered to HTML.
-* New feature: New filter hook `relevanssi_admin_search_blocked_post_types` makes it easy to block Relevanssi from searching a specific post type in the admin dashboard. There's built-in support for Reusable Content Blocks `rc_blocks` post type, for example.
-* New feature: Relevanssi metabox and the Gutenberg sidebar now show the reason why a post is not indexed. You can find the reason at the "How Relevanssi sees this post" feature.
-* New feature: When creating excerpts Relevanssi tries to remove the disabled shortcodes.
-* Changed behaviour: Relevanssi has been blocked in the admin Media Library searches since 2012. There seems to be no reason not to use Relevanssi there, so Relevanssi is now used for admin Media Library searches, if admin searching is enabled in the first place.
-* Changed behaviour: Relevanssi now applies minimum word length when tokenizing search query terms.
-* Changed behaviour: Content stopwords are removed from the search queries when doing excerpts and highlights. When Relevanssi uses the untokenized search terms for excerpt-building, stopwords are removed from those words. This should lead to better excerpts.
-* Changed behaviour: The `relevanssi_indexing_restriction` filter hook has a changed format. Instead of a string value, the filter now expects an array with the MySQL query in the index 'mysql' and a reason in string format in 'reason'. There's some temporary backwards compatibility for this.
-* Minor fix: Synonym indexing for AND searches didn't work for taxonomy terms.
-* Minor fix: Post part targeting didn't work well with partial matching or numeric search terms.
-* Minor fix: Using `post_parent` from the URL parameters didn't work.
-* Minor fix: Improves handling of content stopwords in partial matched searches.
-* Minor fix: Polylang filtered out users and taxonomy terms from the results in some cases. That's still implemented in a fairly hackish way, but it's been made more robust now.
-* Minor fix: Improves handling of emoji in indexing. If the database supports emoji, they are allowed, otherwise they are encoded.
-* Minor fix: The `relevanssi_words` option no longer autoloads (it's a big one).
-
-= 2.7.0 =
-* Changed behaviour: Content stopwords are now applied to the attachment content.
-* Changed behaviour: Phrases in OR search are now less restrictive. A search for 'foo "bar baz"' used to only return posts with the "bar baz" phrase, but now also posts with just the word 'foo' will be returned.
-* Major fix: Fixes an error message in WP 4.9.
-* Minor fix: Relevanssi included results from archived blogs in the multisite search results.
-* Minor fix: User Access Manager showed drafts in search results for all users. This is now fixed.
-
-= 2.6.1 =
-* Minor fix: When using Gutenberg, pinning interface only worked for posts. Now it works for all indexed post types.
-
-= 2.6.0 =
-* New feature: New filter hook `relevanssi_disable_stopwords` can be used to disable stopwords completely. Just add a filter function that returns `true`.
-* New feature: New filter hook `relevanssi_date_query_non_posts` can be used to allow users and taxonomy terms in searches with a date query.
-* Changed behaviour: The `relevanssi_related_words` filter hook didn't get the post ID as parameter, which severely constricts its usability. That's now fixed: the filter gets the post ID as the second parameter.
-* Changed behaviour: Stopwords are no longer automatically restored if emptied. It's now possible to empty the stopword list. If you want to restore the stopwords from the file (or from the database, if you're upgrading from an earlier version of Premium and find your stopwords missing), just click the button on the stopwords settings page that restores the stopwords.
-* Changed behaviour: Changes to post weights in the `relevanssi_results` hook did not affect the relevance scores shown in excerpts. That's changed now, and the displayed scores are now taken from the `$doc_weight` array, which is returned in the return value array from `relevanssi_search()`.
-* Changed behaviour: Excerpt length and type are now checked outside the loop that goes through the posts. This reduces the number of database calls, but the most important effect is that now multisite searches will always create the excerpts with the settings of the subsite where the search is made and not with the settings of the subsite of each post.
-* Minor fix: Searching for regex special characters (for example parentheses, brackets) caused problems in excerpts.
-* Minor fix: Phrase matching wasn't applied to PDF content if the "Custom fields to index" setting was set to "some".
-* Minor fix: Indexing taxonomies from the WP CLI could leave old taxonomy terms in the index. This is now prevented.
-* Minor fix: Improvements in handling highlighting for words with apostrophes.
-* Minor fix: Disregard hanging commas at the end of post exclusion settings.
-* Minor fix: Relevanssi was blocking post queries in WP CLI. That's now fixed.
-* Minor fix: Sometimes excerpts wouldn't have an ellipsis in the beginning even though they should.
-* Minor fix: The 'Add a redirect' button did not work if there were no redirects.
-
-= 2.5.2 =
-* Major fix: Makes Relevanssi Premium compatible with WP 4.9.
-
-= 2.5.1 =
-* Major fix: Returns the missing stopwords.
-
-= 2.5.0 =
-* New feature: You can now edit the read attachment content on the attachment edit pages.
-* New feature: It's now possible to exclude image attachments from the index with a simple setting on the indexing settings page.
-* New feature: You can now redirect empty searches to a specific page instead of the search results template. You can choose the URL from the Redirect settings page.
-* New feature: Relevanssi now has a shiny new Gutenberg sidebar that replaces the old Relevanssi Post Controls metabox when using the block editor.
-* New feature: When new attachments are uploaded and Relevanssi is set to automatically read new attachments, that reading is now done as an asynchronous background process, so it won't slow down the media upload.
-* New feature: Page builder short codes are now removed in Relevanssi indexing. This should reduce the amount of garbage data indexed for posts in Divi, Avada and other page builder themes.
-* Changed behaviour: The `relevanssi_page_builder_shortcodes` filter hook is now applied both in indexing and excerpts, and has a second parameter that will inform you of the current context.
-* Minor fix: Post type archive indexing doesn't stop the WP CLI indexing if there are no post type archives to index.
-* Minor fix: Did you mean could occasionally cause long delays in searches. This was especially problematic in some object cache situations, when the transient didn't last as long as it should've been. Updating the Did you mean word list, which is a slow process, now happens asynchronously.
-* Minor fix: Stopwords weren't case insensitive like they should. They are now. Also, stopwords are no longer stored in the `wp_relevanssi_stopwords` database table, but are now stored in the `relevanssi_stopwords` option.
-* Minor fix: A comma at the end of the custom field indexing setting made Relevanssi index all custom fields. This doesn't happen anymore and trailing commas are automatically removed, too.
-* Minor fix: Post type archive indexing could ran into problems when post types are added or removed. This should fix some of those problems.
-* Minor fix: Accessibility improvements all around the admin interface. Screen reader support should be better, feel free to report any further ways to make this better.
-* Minor fix: Doing searches without search terms and with the throttle disabled could cause problems. Relevanssi now makes sure throttle is always on when doing termless searches.
-* Minor fix: Untokenized search terms are used for building excerpts, which makes highlighting in excerpts work better.
-
-= 2.4.4 =
-* New feature: You can now give Gutenberg blocks a CSS class `relevanssi_noindex` to exclude them from being indexed. Relevanssi will not index Gutenberg blocks that have the class.
-* New feature: You can now target specific parts of the post with search terms like `{post_tag:cat}`, `{title:word}`, `{author:mikko}`, `{customfield_name:value}` and so on. See [this Knowledge Base entry for more information](https://www.relevanssi.com/knowledge-base/search-targets/).
-* New feature: Relevanssi automatically skips some custom fields from common plugins that only contain unnecessary metadata.
-* New feature: Related posts keywords can now be restricted by taxonomy, so tags will only match to tags and not other parts of the post. This may lead to increased precision.
-* New feature: The search results breakdown is added to the post objects and can be found in $post->relevanssi_hits. The data also includes new fields and the breakdown from the excerpt settings page can now show author, excerpt, custom field and MySQL column hits.
-* New feature: Relevanssi can now index Ninja Tables table content. This is something of an experimental feature right now, feedback is welcome.
-* New feature: New filter hook `relevanssi_indexing_query` filters the indexing query and is mostly interesting for debugging reasons.
-* Minor fix: Deleted and trashed comment contents were not deindexed when the comment was removed. That has been corrected now.
-* Minor fix: Phrase matching is now applied to attachments as well, including the attachments indexed for parent post.
-* Minor fix: Phrase matching only looks at custom fields that are indexed by Relevanssi.
-* Minor fix: Exact match bonus now uses the original query without synonyms added for the exact match check.
-* Minor fix: Paid Membership Pro filtering is only applied to published posts to prevent drafts from showing up in the search results.
-* Minor fix: Indexing internal links for target documents could cause documents to go unindexed. This has now been fixed. If you use internal link indexing, rebuild the index after you update.
-* Minor fix: Relevanssi could stop plugin information retrieval for other plugins fail. This has been fixed.
-
-= 2.4.3 =
-* Major fix: Disabling `update_post_metadata_cache` seemed like a good optimization move for related posts, but it turns out it disables related posts thumbnails. We'll take weaker performance with working images.
-* Major fix: Importing options caused WordPress to crash, because related posts and redirect settings were handled incorrectly in the import.
-* Minor fix: The Polylang compatibility filter didn't return correct post objects if fields was set to `ids` or `id=>parent`. Now the filter function returns correct type of result.
-* Minor fix: Enabling the related posts checkbox did not activate the number of months setting.
-
-= 2.4.2 =
-* New feature: New filter hook `relevanssi_indexing_adjust` can be used to stop Relevanssi from adjusting the number of posts indexed at once during the indexing.
-* New feature: New filter hook `relevanssi_acf_field_value` filters ACF field values before they are indexed.
-* New feature: New filter hook `relevanssi_disabled_shortcodes` filters the array containing shortcodes that are disabled when indexing.
-* Removed feature: The `relevanssi_indexing_limit` option wasn't really used anymore, so it has been removed.
-* Changed behaviour: Indexing exclusions from Relevanssi settings, Yoast SEO and SEOPress are applied in a different way in the indexing, making for a smoother indexing process.
-* Changed behaviour: WP Table Reloaded support has been removed; you really shouldn't be using WP Table Reloaded anymore.
-* Changed behaviour: Related posts doesn't even try doing an AND search anymore, as most of the time it was a waste of time. If you need that, using the `relevanssi_related_args` filter hook to swap the operator is still possible.
-* Major fix: Related posts generation performance has been improved.
-* Major fix: Related posts didn't work if multisite searching was enabled. That error has been eliminated. The related posts will come from the same subsite as the original post.
-* Minor fix: Relevanssi won't choke on ACF fields with array or object values anymore.
-* Minor fix: While you could set the Related posts to show random posts from the same category, the setting wouldn't appear correctly on the settings page. That has been fixed.
-* Minor fix: The settings export now includes couple of missing parts, like the related posts settings.
-* Minor fix: Relevanssi uninstall process left couple of Relevanssi options in the database.
-* Minor fix: WPML language filter didn't work when `fields` was set to `ids` or `id=>parent`.
-
-= 2.4.1 =
-* New feature: SEOPress support, posts marked "noindex" in SEOPress are no longer indexed by Relevanssi by default.
-* Removed feature: Multi-taxonomy restrictions with `&taxonomy=post_tag|category&term=tag_term|cat_term` format has stopped working, apparently long time ago. Looks like nobody missed it.
-* Changed behaviour: Membership plugin compatibility is removed from `relevanssi_default_post_ok` function and has been moved to individual compatibility functions for each supported membership plugin. This makes it much easier to for example disable the membership plugin features if required.
-* Minor fix: The `searchform` shortcode now works better with different kinds of search forms.
-* Minor fix: Yoast SEO compatibility won't block indexing of posts with explicitly allowed indexing.
-* Minor fix: The `relevanssi_the_tags()` function printed out plain text, not HTML code like it should. The function now also accepts the post ID as a parameter.
-* Minor fix: Excerpt creation and highlighting have been improved a little.
-
-= 2.4.0 =
-* New feature: Multi-phrase searches now respect AND and OR operators. If multiple phrases are included in an OR search, any posts with at least one phrase will be included. In AND search, all phrases must be included.
-* New feature: Admin search has been improved: there's a post type dropdown and the search is triggered when you press enter. The debug information has a `div` tag around it with the id `debugging`, so you can hide them with CSS if you want to. The numbering of results also makes more sense.
-* New feature: The date parameters (`year`, `monthnum`, `w`, `day`, `hour`, `minute`, `second`, `m`) are now supported.
-* New feature: New filter hook `relevanssi_file_content` filters the file content before it's saved in the `_relevanssi_pdf_content` custom field.
-* New feature: New filter hook `relevanssi_related_args` filters the related posts search arguments.
-* New feature: You can now set a month restriction to show only recent posts in the related posts. For more fine-grained date control, use the `relevanssi_related_args` filter hook.
-* New feature: Instead of fully random posts, you can choose to get random posts from the same category if no proper matches are found for related posts.
-* New feature: New filter hook `relevanssi_indexing_limit` filters the default number of posts to index (10). If you have issues with indexing timing out, you can try adjusting this to a smaller number like 5 or 1.
-* New feature: Support for Paid Membership Pro added.
-* New feature: WordPress SEO support, posts marked "noindex" in WordPress SEO are no longer indexed by Relevanssi by default.
-* Removed feature: qTranslate is no longer supported.
-* Major fix: Updates work when API key is in single site settings in a multisite environment. In 2.3.0, it is required that the key is in the multisite settings, otherwise updates won't work in multisite.
-* Major fix: Tax query searching had some bugs in it, manifesting especially into Polylang not limiting the languages correctly. Some problems with the test suites were found and fixed, and similar problems won't happen again.
-* Minor fix: Admin search only shows pinning and editing options to users with enough capabilities to use them.
-* Minor fix: Phrase searching now uses filterable post statuses instead of a hard-coded set of post statuses.
-* Minor fix: When saving an API key on a single site in multisite environment, the key appears to be saved. (In 2.3.0 it was saved, but it didn't look like it.)
-* Minor fix: The plugin action links were missing on the Plugins page list, they're back now.
-* Minor fix: Synonym indexing has been fixed, it could prevent saving of posts when synonym list was empty.
-* Minor fix: Setting the `post_type` parameter to `post_type` to get post type archive pages now works.
-* Minor fix: In some cases, Relevanssi might complain when uploading files.
-* Minor fix: Missing action links were returned to the plugins list.
-* Minor fix: Wrinkles in the upgrade process from free to Premium were ironed out.
-* Minor fix: Search terms with slashes won't cause errors anymore.
-* Minor fix: Relevanssi admin pages have been examined for accessibility and form labels have been improved in many places.
-* Deprecated: `relevanssi_get_term_taxonomy()` function is deprecated and will be removed at some point in the future.
-
-= 2.3.0 =
-* New feature: Content stopwords are just like regular stopwords, but they are only applied to post content. They are not applied to titles, custom fields or other places.
-* New feature: The search form shortcode has a new parameter `dropdown` which can be used to add a category dropdown, like this: `[searchform dropdown="category"]`.
-* New feature: Relevanssi can now use the contents of the PDF files indexed with WP File Download.
-* New feature: Related posts can now be used in a different way. Instead of storing rendered HTML in the transients, Relevanssi can now store just the post objects for the related posts.
-* New feature: Related posts WP CLI command has new parameters: just_objects activates the post object transients, post_type only generates the related posts for a particular post type.
-* New feature: You can now pin and unpin posts from the Admin search. Just do a search and you can then easily pin posts for that search term.
-* New feature: Relevanssi now supports User Access Manager permission controls.
-* New filter: `relevanssi_indexing_tokens` can be used to filter the tokens (individual words) before they are indexed.
-* Removed filter: `relevanssi_default_meta_query_relation` did not have any effect anymore.
-* Changed behaviour: The default taxonomy relation was set to AND in 2.2.5, but wasn't properly applied before. Now it is really switched.
-* Changed behaviour: Relevanssi now uses the `relevanssi_indexing_tokens` filter hook to add synonyms, which means adding lots of synonyms is much faster than before, and synonyms are now applied to all indexed content.
-* Changed behaviour: New post types have been added to list of forbidden post types Relevanssi won't show as indexing options (ACF, TablePress and WooCommerce).
-* Changed behaviour: Related posts templates are no longer generated when posts are saved. There are cases where generating the templates in admin context cause problems. The templates will be generated the first time the post is opened.
-* Major fix: Tax query processing has been completely refactored, eliminating all sorts of bugs, especially with various edge cases.
-* Major fix: Gutenberg block indexing only worked with the Gutenberg plugin enabled. It now works with WP 5.0 built-in Gutenberg as well. If you use Gutenberg blocks, reindex to get all the block content in the index.
-* Major fix: Excerpt-building and highlighting did not respect the "Keyword matching" setting. They do now, and the excerpts should be better now.
-* Major fix: AND searches needed queries that could get too long for the database to handle. This has been fixed and optimized.
-* Major fix: Post exclusion (negative pinning) didn't work properly in multisite context.
-* Major fix: Taxonomy term subquery relations didn't work; now they are applied.
-* Major fix: Saving related posts exclusion settings wasn't possible.
-* Minor fix: Authors can search for their own private posts.
-* Minor fix: API key setting field behaviour has been improved.
-* Minor fix: iOS uses curly quotes by default, and that didn't work as a phrase operator. Now phrase operator works with curly quotes and straight quotes.
-* Minor fix: The free version Did you mean broke with search terms longer than 255 characters.
-* Minor fix: Relevanssi won't create empty pinning meta fields anymore.
-* Minor fix: Phrases with numbers and one word like "team 17" didn't work, because numbers weren't counted as words.
-* Minor fix: $post->relevanssi_pinned wasn't set correctly for pinned posts.
-* Minor fix: Relevanssi handles errors better in multisite searching when you search for a taxonomy that doesn't exist on the current site.
-
-= 2.2.5 =
-* EXISTS and NOT EXISTS didn't work for taxonomy terms in searches.
-* WPML post type handling has been improved. If post type allows fallback for default language, Relevanssi will support that.
-* Relevanssi now reminds you to set up automatic trimming for the logs. It's a really good idea, otherwise the logs will become bloated, which will hurt search performance.
-* New filter: `relevanssi_user_indexing_args` lets you adjust the arguments for the user indexing query, making easy for example to adjust which user roles are indexed.
-* API keys are handled better in single installations on multisites.
-* The pinning query is significantly faster.
-* In some cases, the related posts feature could show wrong number of posts. That's now fixed.
-* The Groups posts filter is only applied to public posts to avoid drafts being shown to people who shouldn't see them.
-* The `posts_per_page` query variable didn't work; it's now added to the introduced query variables so that it works.
-* Relevanssi won't log empty queries anymore.
-* WP CLI searches were disabled when Relevanssi is active; it should work now.
-* New filter: `relevanssi_pdf_for_parent_query` lets you adjust the MySQL query for fetching PDFs to index with the parent post.
-* New filter: `relevanssi_pdf_for_parent_insert_data` lets you manipulate the INSERT data for PDFs indexed with the parent post.
-* The default tax query relation was switched from OR to AND to match the WP_Query default behaviour.
-* Gutenberg can cause duplicated postmeta fields for pinning and unpinning. Relevanssi will now remove the duplicate post meta when the post is saved.
-* When used with WP 5.1, Relevanssi will now use `wp_insert_site` instead of the now-deprecated `wpmu_new_blog`.
-* Multisite blog creation is handled better in WP 5.1+.
-* Relevanssi now supports Restrict Content Pro permissions.
-* The Relevanssi metabox is now only shown for indexed post types.
-
-= 2.2.4.2 =
-* Fixes couple of JS issues with the metabox scripts.
-* Improves meta key sorting.
-* New actions: `pre_relevanssi_related` is triggered before related posts searches and `post_relevanssi_related` after the searches.
-
-= 2.2.4.1 =
-* It's now possible to disable thumbnails and titles for related posts.
-* The related posts custom template is looked for in the right place.
-* Metabox buttons work without Gutenberg.
-* Drafts shouldn't appear in the related posts anymore.
-* Choosing the default thumbnail for related posts is more pleasant now.
-* You can now disable auto-appended related posts for a post.
-* You can disable a post so that it won't appear as a related post.
-
-= 2.2.4 =
-* New Related posts feature can be used to display related posts for your content.
-* Relevanssi metabox on post edit pages is now in the sidebar by default. It doesn't move automatically on older installations, but you can drag it there. It's recommended, as from now on the look will be designed for sidebar use.
-* Search performance has been improved.
-* Redirects have been improved a bit.
-* Multisite searching was broken when sorting posts.
-* Using period as a thousands separator could cause weird results.
-* Members plugin compatibility has been improved: it's only used if the 'content permissions' feature has been enabled.
-* New JetPack taxonomies and post types have been added to the block list so they won't appear in Relevanssi settings.
-* Attachment indexing will bypass zip files.
-* New filter: `relevanssi_accept_mime_type` lets you filter attachment reading by MIME type.
-* New filter: `relevanssi_do_not_read` lets you filter attachment reading by post ID.
-* API key field was not shown if Relevanssi was installed on a single site in a multisite network. Now it's shown correctly.
-* New filter: `relevanssi_search_form` works exactly like `get_search_form`, but only applies to the Relevanssi shortcode search forms.
-* Relevanssi settings page won't let you exclude categories you have restricted the search to.
-
-= 2.2.3.1 =
-* The new Redirects feature caused unforeseen consequences. This version should fix them.
-
-= 2.2.3 =
-* New Redirects feature lets you redirect keywords directly to specific result pages.
-* Choosing "CSS Style" for highlighting was not possible. That is now fixed.
-* Gutenberg reusable block indexing was fatally broken with the latest Gutenberg version. That has been updated.
-* Relevanssi now by default respects the WooCommerce "exclude from search" setting.
-* `post__not_in` still didn't work properly, it does now.
-* New filter: `relevanssi_comparison_order` can be used to define the sorting order when sorting the results by post type.
-* English stemmer has been improved a bit.
-* "Did you mean" process included a very slow query. It is now cached, leading in some cases to massive performance improvements (we're talking about several seconds here).
-* Highlights inside `code` and similar blocks are handled better now.
-
-= 2.2.2.1 =
-* Fixed broken "User searches" page.
-* "How Relevanssi sees this post" is hidden by default.
-
-= 2.2.2 =
-* Relevanssi can now index Gutenberg reusable blocks. (This functionality broke once already before release, so that can happen, since Gutenberg is still in very active development.)
-* The `post__in` and `post__not_in` parameters didn't work, and are now fixed. `post_parent__in` and `post_parent__not_in` are also improved.
-* You can use named meta queries for sorting posts. Meta query sorting is improved in other ways as well.
-* Log export didn't work properly.
-* The `relevanssi_premium_get_post()` now has a default value (-1) for the blog ID.
-* Adding stopwords from the common word list has been fixed.
-* The `relevanssi_get_words_having` filter hook is now also applied to the free version Did you mean queries.
-* New filters: `relevanssi_1day` and `relevanssi_7days` can be used to adjust the number of days for log displays, so instead of 1, 7 and 30 days you can have anything you want.
-
-= 2.2.1 =
-* The admin search has been moved to a separate page and made visible to editors, authors and contributors.
-* New filter: `relevanssi_admin_search_capability` can be used to adjust who sees the admin search page.
-* "How Relevanssi sees the post" feature on post edit screens actually works now.
-* Numeric meta values (`meta_value_num`) are now sorted as numbers and not strings.
-
-= 2.2.0.1 =
-* 2.2 claimed to be version 2.1.7.
-
-= 2.2 =
-* New feature: Search tab on Relevanssi settings page allows you to perform searches in WP admin using Relevanssi.
-* New feature: Post type archives can now be indexed. This will index the label and the description of the post type.
-* New feature: Relevanssi now has a privacy mode that blocks outside connections: at the moment that means update checks and indexing attachments with Relevanssi indexing services. This helps keep your site private and can in some configurations speed up plugin page loads a lot.
-* New feature: On post edit screens, you can now see how Relevanssi sees the post. This should help debugging indexing issues.
-* New feature: You can now export the search log as a CSV file.
-* New filter: `relevanssi_entities_inside_pre` and `relevanssi_entities_inside_code` adjust how HTML entities are handled inside `pre` and `code` tags.
-* New filter: `relevanssi_attachment_server_url` allows the use of custom attachment reading server.
-* User meta fields are indexed as custom fields, not as post content, and the `customfield_detail` column is also filled.
-* Pinned posts have `$post->relevanssi_pinned` set to 1 for debugging purposes, but you can also use this for styling the posts in the search results templates.
-* Multisite searching updates: exact match bonus and the recency bonus did not work in multisite searches. Now they work.
-* Multisite search also had quite a few bugs squashed.
-* The basic Did you mean feature has been toned down a bit, to make the suggestions slightly less weird in some cases.
-* Post parent parameters now accept 0 as a value, making it easier to search for children of any post or posts without a parent.
-* Pinning caused an error message when `fields` was set to `ids`. Now the behaviour is correct, and the pinning code also won't run, unless something is pinned.
-* Taxonomy terms and users are handled better in multi-word AND searches.
-
-= 2.1.7 =
-* The API key option in the network options wasn't very intuitive. It's better now.
-* Direct attachment links in search results work better now, especially in cases where the site has moved.
-* Improved handling of certain edge cases in taxonomy search.
-* Home page links were getting the highlight parameter even though they shouldn't. This has been fixed.
-* The Import / Export options tab was missing (very few people complained, so perhaps that feature is not very important...).
-* The status of the 'Index PDF contents for parent post' option didn't show up correctly on the settings page.
-* Added support for WP JV Post Reading Groups.
-* Improved handling of HTML entities.
-* Events Made Easy Calendar shortcodes are now removed when building excerpts.
-* `set_time_limit()` was removed from the indexing; it's no longer necessary, and it can break the indexing on sites that don't allow the use of the function.
-* `relevanssi_post_title_before_tokenize` filter was moved a bit so that it's the last thing that runs before tokenizing.
-* When indexing custom MySQL column data, stopwords and minimum word length weren't applied properly.
-* Disabled shortcodes are handled better in the indexing: the shortcode names won't be indexed anymore like they were before.
-* Fix for pinning in multisite context.
-* Made sure there won't be a warning for non-numeric values when searching.
-* Removed unnecessary post types from the weight setting list.
-* New filter: `relevanssi_clean_excerpt` lets you remove unwanted highlights from excerpts.
-* Highlighting works better with `pre` and `code` tags.
-* New filter: `relevanssi_comment_author_to_index` lets you filter comment author names before indexing.
-* `relevanssi_comment_content_to_index` doesn't include the comment author name anymore.
-
-= 2.1.6.1 =
-* The privacy features caused an error notice with certain Relevanssi configurations, and the plugin required WP 4.9.6.
-
-= 2.1.6 =
-* Privacy: If you log search queries, Relevanssi will suggest some additional content to your privacy policy page.
-* Privacy: Relevanssi now supports the new Privacy Policy and Personal Data tools in WordPress 4.9.6.
-* Improved Polylang support. Now taxonomy terms can be language filtered as well.
-* Saving synonyms with quotes worked, but the synonyms showed up wrong.
-* Taxonomy term indexing had a bug where the `type` column for taxonomy terms would be set to 0.
-* The `relevanssi_user_index_ok` filter is now applied when users are updated.
-* Relevanssi could in some situations override navigation menu links with links to the user profiles or taxonomy terms found in the search. This update fixes that behaviour.
-* Random order works again; using orderby `rand` didn't work properly. The `rand(seed)` format is also supported now.
-* Fixed quotes and apostrophes in Did you mean suggestions.
-
-= 2.1.5 =
-* New feature: WooCommerce product visibility can now be considered better in the indexing. See the filter hook 'relevanssi_woocommerce_indexing' for more details.
-* Phrases were not highlighted correctly on documents. This is now fixed.
-* Shortcode fix: 'wp_show_posts' shouldn't cause problems anymore.
-* Fix for post tag indexing issues.
-* MemberPress post controls were loose and showed drafts to searchers. That is now fixed.
-* Highlighting was too loose, even if matching was set to whole words.
-* Highlighting now works better in cases where there's a hyphen or an apostrophe inside a word.
-
-= 2.1.4 =
-* Fixed cases where Relevanssi added an ellipsis even if the excerpt was from the start of the post.
-* Highlighting now works with numeric search strings.
-* Improved highlighting for accented words. Thanks to Paul Ryan.
-* A surplus comma at the end of post exclusion setting won't break the search anymore.
-* Fixed instructions for adjusting the throttle limit.
-* New "Pin this post for all keywords" feature.
-
-= 2.1.3 =
-* Recent post bonus is now applied to searches.
-* Exact term setting can now be disabled.
-* Users of Members plugin would have drafts appear in search results. This is now fixed.
-* Pinned keywords would appear in the list of exlusion keywords, and you couldn't set exclusion keywords. That is now corrected.
-* "Index unindexed posts" works better.
-* Removing quotes and apostrophes in indexing didn't work properly.
-* Attachment indexing progress meter fixed.
-* The "Highlight from external searches" option was removed. It's not supported by Google or Bing anymore, so there's little point in keeping it.
-
-= 2.1.2 =
-* MemberPress post control was backwards.
-* Fusion Builder shortcodes are automatically removed from excerpts.
-* Indexing failed, when a same word appeared in two different taxonomies.
-* Internal link management had a bit of a bug in the indexing.
-* User searches page reset buttons fixed.
-
-= 2.1.1.1 =
-* Fixes an issue where you can't save taxonomy indexing settings.
-
-= 2.1.1 =
-* Automated testing can't catch everything... There was some overzealous security in place, breaking Network options. That is now fixed.
-* Attachment file name is not prepended to the excerpts automatically.
-
-= 2.1 =
-* Relevanssi code has been reviewed and modified to follow WordPress coding standards. As a result, there have been minor improvements all around the code to make things more robust and secure.
-* Attachment indexing has been extended to many more document types: now it should be able to handle most document types, including Office and OpenDocument formats. It's also slightly faster.
-* There's now an option to do attachment reading in an EU-based server.
-* Custom field detail is no longer serialized. It's now JSON. If you use custom field detail, rebuild the index and change your code to use json_decode() instead of unserialize().
-* `relevanssi_the_tags()` and `relevanssi_get_the_tags()` now have different set of parameters, more in line with `the_tags()` and `get_the_tags()`.
-* Taxonomy indexing settings were emptied out if you saved another options tab. That is now fixed.
-* Improvements to WPML support; WPML is now less likely to be confused in multisite searches.
-* Updated filter: `relevanssi_search_ok` now gets the WP_Query object as a parameter, which is helpful if you're not using the global $wp_query.
-* ACF Flexible Content field indexing didn't work properly, possibly due to a change in ACF. That should now work better.
-
-= 2.0.5 =
-* Fixed a bug in "Did you mean" suggestions.
-* Paid Member Subscription shortcode compatibility.
-* Indexing works better when there are plenty of excluded posts.
-* Ampersand handling works better in titles.
-* Relevanssi won't add the `highlight` parameter to links pointing to the front page anymore (because that makes those links point to the blog page).
-* There's less need for `relevanssi_get_permalink()` now, as Relevanssi can adjust the links printed out with `get_permalink()`.
-* The [searchform] shortcode can now take parameters, for example: `[searchform post_types="page"]` will print out a search form that only searches pages.
-* Small improvement for excerpt-building, thanks to ___ _______.
-
-= 2.0.4 =
-* Fixed filter: `relevanssi_custom_field_value` didn't get the post ID correctly.
-* Relevanssi used `sanitize_hex_color`, which isn't actually reliably available.
-* Multisite searches didn't support `orderby` and `order` parameters.
-* Did you mean suggestions have been improved.
-* New filter: `relevanssi_do_not_index_term` lets you control whether or not taxonomy terms are indexed.
-* Single-word phrases are not allowed anymore, as they do no good. They are silently converted to non-phrases now.
-* `relevanssi_get_permalink` doesn't add the `highlight` parameter to URLs outside search results pages anymore.
-* Setting post type or post content weight to 0 didn't work.
-* Search form shortcode echoed out the search form, instead of returning it as it should.
-* Gravity Forms shortcode is now disabled in Relevanssi indexing.
-* ACF repeater field indexing doesn't break if you try to index multilevel repeaters (that still won't work, but it won't break everything either).
-* HTML tags are stripped from post excerpts when using the excerpt to build Relevanssi excerpts.
-* User indexing is now done in steps, after it turned out to be impossible to index 16,000 users at once.
-* New filter: `relevanssi_excerpt_query` filters the search query before building excerpts.
-* New option: if you choose to hide Relevanssi from post edit pages, you can allow admins to see the Relevanssi post controls.
-
-= 2.0.3.1 =
-* There was a small error in the multisite installation procedure, now fixed.
-
-= 2.0.3 =
-* Uninstalling Relevanssi was broken. That is now fixed.
-* In some cases excerpt-building could take ages because of autoembed link discovery. Relevanssi now blocks the autoembed procedure in link-building.
-* © and ® symbols caused problems in indexing; they are now included in the default punctuation removal.
-* Fixed filter: `relevanssi_pdf_read_timeout` wasn't applied to all cases of timeouts.
-* Updated filter: `relevanssi_index_custom_fields` now gets a second parameter that contains the post ID.
-* New filter: `relevanssi_custom_field_value` is used to filter custom field values both before indexing and before excerpt-building. Parameters include the field name and the post ID.
-* Indexing PDF content didn't work properly if Relevanssi was set to index visible custom fields.
-* There was a bug in importing the options.
-* New setting can be enabled to read in the contents of new PDF files as they are uploaded on the site. This is disabled by default.
-
-= 2.0.2 =
-* New filter: `relevanssi_multisite_public_status` lets you make non-public multisite subsites available in the search.
-* New filter: `relevanssi_pdf_read_timeout` lets you increase the PDF reading timeout from the default value of 45 seconds.
-* Deprecated filter: `relevanssi_index_taxonomies_args` is no longer used, because Relevanssi doesn't use `get_terms()` anymore in taxonomy term indexing.
-* New filter: `relevanssi_hide_empty_terms` can be used instead of `relevanssi_index_taxonomies_args` to include empty taxonomy terms in indexing. Defaults to `true`, set to `false` to include taxonomy terms that are not attached to any posts.
-* Taxonomy term indexing is now done in small steps to prevent timeout issues when indexing large numbers of taxonomy terms.
-* Improvements to the Polylang setting.
-* PDFs were always indexed for the parent post, never mind the value of the option.
-
-= 2.0.1 =
-* Fixes a fatal error that happened with older PHP versions.
-
-= 2.0 =
-* Legacy code has been removed. If you have a version older than 1.16, update first to 1.16.x to guarantee smooth upgrade process.
-* This version includes a small database change, so if you're updating from a previous version, after the update deactivate the plugin and then reactivate.
-* Improved indexing: no more clicking "Continue indexing" again and again!
-* Settings pages have been completely rewritten.
-* There's documentation in the WordPress contextual help: just click Help on the top right corner.
-* Better Polylang support. A new option to remove the Polylang language filter.
-* Logs can be automatically trimmed. Old log entries are removed to save space.
-* Finally a setting to adjust content weight!
-* Excerpts can use the custom field content.
-* Highlighting in documents is changed: it now requires a `highlight` query parameter. This helps getting pass caching and makes the highlighting more reliable. To get the query parameter active, use `relevanssi_get_permalink()` to print out the permalinks on the search results templates.
-* Relevanssi added synonyms to highlighting even if synonyms were not used for searching. In some cases, synonyms were added twice.
-* The User Searches page got a makeover, too.
-* Relevanssi is automatically disabled in REST API searches.
-* Groups and Simple Membership support has been improved.
-* Sorting search results is now up to 300 times faster than before.
-* Lots of improvements all over the place.
-* New filter: `relevanssi_excerpt_custom_field_content` lets you modify custom field content that is used for excerpts.
-* New filter: `relevanssi_punctuation_filter` allows for easy modification of punctuation handling.
-* New filter: `relevanssi_default_punctuation_replacement` changes the default way to handle the rest of the punctuation.
-* New filter: `relevanssi_search_again` lets you run the search again if no results are found and to modify the parameters between search runs.
-* New filter: `relevanssi_fallback` allows you to do fallback searches.
-* New filter: `relevanssi_page_builder_shortcodes` lets you control which page builder shortcodes Relevanssi removes before building the excerpts.
-* New filter: `relevanssi_optimize_excerpts` makes excerpt-building faster, if you make the filter return `true`.
-* New query variable: set `include_attachments` to `0`, `off` or `false` to exclude attachments from the search.
-
-= 1.16.2.1 =
-* Fixing a bug in the sorting algorithm.
-
-= 1.16.2 =
-* ACF repeater fields with dashes didn't work; that is now fixed.
-* Simple Membership plugin is now supported automatically to restrict access to posts.
-* Relevanssi can now handle orderby parameter in array format.
-* Relevanssi now blocks Easy Digital Downloads shortcodes when indexing to improve compatibility with EDD.
-* When using `fields` to only fetch post IDs, Relevanssi doesn't try to highlight post titles.
-* New action: `relevanssi_update_options` lets you adjust Relevanssi options immediately after the defaults are set.
-* Remove notices about duplicated database columns when installing the plugin.
-
-= 1.16.1 =
-* SECURITY: This version fixes a SQL injection vulnerability, where a site admin could theoretically inject SQL code into Relevanssi search queries. Doing this required access to Relevanssi settings page and in my tests, I couldn't do any damage, just break the Relevanssi search, but in any case, this vulnerability is now fixed.
-* Multisite meta queries didn't work properly.
-* Search and Filter shortcode is added to the blacklist.
-* Groups plugin is now supported automatically to restrict access to posts.
-* The filter `relevanssi_index_custom_fields` now works even if the custom field setting is empty.
-* The filter `relevanssi_tax_term_additional_content` now works even when the taxonomy description is empty.
-* Relevanssi taxonomy term indexing is moved to a later priority (from 10 to 9999) to make sure all term data is available for indexing.
-* The filter `relevanssi_post_to_index` now has a second parameter. For posts, it simply repeats the post object, but for taxonomy terms, it has the term object.
-
-= 1.16.0.1 =
-* Fixes "unknown column" issues in multisite searches.
-* Removes errors when trying to search a multisite subsite that doesn't have Relevanssi.
-* Small fix to make automatic updates work better in a multisite environment.
-
-= 1.16.0 =
-* Changed a bit how Relevanssi attaches itself to queries. Instead of the global $wp_query, Relevanssi now uses the query passed as the parameter to `the_posts` filter hook. This should improve compatibility in some cases, but may cause problems in some fringe cases. If you're doing something unusual with Relevanssi, try this out before deploying to public use.
-* Internal link processing had some minor issues, which are now straightened out.
-* Some meta queries caused major problems with the Relevanssi weighting algorithm. This has now been fixed.
-* Error notices caused by trying to use a non-existing taxonomy term have been removed.
-
-= 1.15.4 =
-* Improved performance of multisite queries.
-* Copying settings between multisite sites didn't work in networks of over 100 sites. Now the limit is 2000.
-* Post type exclusion didn't work as expected.
-* Relevanssi couldn't handle nested tax queries (such as those generated by WooCommerce product visibility filtering) properly.
-* Fake posts created for taxonomy terms now include the parent in $post->post_parent.
-* Doing a quick edit cleaned out the Relevanssi post controls settings.
-
-= 1.15.3.1 =
-* New filter: `relevanssi_allow_one_letter_highlights` lets you allow one-letter highlights. Just make the filter function return `true`.
-* New filter: `relevanssi_block_one_letter_searches` by default blocks one-letter searches. If you want to enable them, add a filter function that always returns `false`.
-* Fixed an undefined variable notice.
-
-= 1.15.3 =
-* Multisite search won't attempt to search in blogs that don't exist or are deleted or marked spam.
-* Synonym indexing failed if synonyms contained a forward slash.
-* Highlighting HTML tags has been improved further.
-* New filter: `relevanssi_tag_before_tokenize` allows you to access tag content before indexing.
-* Improvements to taxonomy terms and post type parameters. Now if you set a post type parameter, taxonomy terms or user profiles are not included in the search. In order to see taxonomy terms in the search results when using `post_types` parameter, add the taxonomy name (or `user`) to the `post_types` parameter. This does not work with the default `post_type` parameter.
-* Relevanssi now actively blocks one-letter search terms, as they are generally pointless and can cause "out of memory" issues. One-letter search terms are no longer highlighted, either. These are usually caused by cases like "word's" being interpreted as "word s".
-* New filter: `relevanssi_disable_shortcodes_excerpt` lets you add more shortcodes to be disabled before excerpts are built.
-* Relevanssi now indexes taxonomy terms whenever they are created.
-* Relevanssi now supports `fieldname_%_subfieldname` notation for ACF repeater fields in "Custom fields to index" settings.
-
-= 1.15.2.1 =
-* An extra parentheses killed the WP CLI indexing.
-
-= 1.15.2 =
-* When a taxonomy term was saved, Relevanssi didn't record the changes correctly.
-* New WP CLI commands to index only users or taxonomies.
-* Improved the way highlighting handles HTML tags, especially when highlighting on post pages.
-* Relevanssi didn't remove taxonomy term data from the index properly. I recommend rebuilding the taxonomy terms (which you can do easily with the new WP CLI command `wp relevanssi index --target=taxonomies`).
-* The throttle limit setting was removed from the settings page for causing trouble. If you need to change it, update `relevanssi_throttle_limit` option directly.
-* The "Did you mean" function should return slightly more relevant results.
-* The `relevanssi_get_words_query` filter hook has been retired and replaced with new `relevanssi_get_words_having` filter hook, used to adjust the value. The default value is 1, and there's usually no reason to adjust that.
-* FacetWP users ran into trouble, as `relevanssi_do_query()` started to explicitly expect a WP_Query object in version 1.15.0. That expectation is removed; it's still highly recommended for future compatibility that you use WP_Query objects.
-* Small bug fix: `get_current_screen()` is now only used when it's available to avoid occasional fatal errors.
-* Error messages from `DOING_AJAX` being undefined should be removed.
-
-= 1.15.1 =
-* Enabling "Index synonyms" setting with an empty synonym list caused post content and title indexing to fail.
-* Wrong pages creeping into navigation menus from multisite searches should be history now.
-* Relevanssi Premium now offers WP CLI support. See `wp help relevanssi` for instructions.
-* Relevanssi didn't support tax_queries with `field` set to `name`. That works now.
-* Much faster way of showing the 25 most common words in the index. If you've disabled this feature because it was so slow, try enabling it - you might be surprised!
-
-= 1.15.0.1 =
-* The network settings page was missing.
-
-= 1.15.0 =
-* Improved ACF compatibility.
-* Relevanssi was a bit too eager to index taxonomy terms it shouldn't. That is now fixed. I suggest you rebuild the index, if you haven't done that recently.
-* Synonym indexing was searching and replacing too much. If you're using synonym indexing, please rebuild the index.
-* It is now possible to copy Relevanssi settings from one blog in the multisite network to all other blogs.
-* On multisite installations, the API key is now a network option. The network admin needs to set the value from the network admin dashboard.
-* Relevanssi post controls didn't work on attachments: you couldn't save the values. That is now possible.
-* Pinning didn't work on multisite searches. It does now.
-* Relevanssi now stores the operator used in $wp_query->query_vars['operator'] so that it can be accessed outside Relevanssi.
-
-= 1.14.9 =
-* Did you mean function had a XSS vulnerability, which is now removed.
-* Minimum word length wasn't applied to titles in indexing. It is now fixed. If you think this is a problem, rebuild the index.
-* TablePress compatibility has been improved.
-* Meta query handling has been improved, thanks to Maxime Culea.
-* Improved WP_Query parameter support: setting query variable `sentence` to 1 forces phrase search.
-
-= 1.14.8 =
-* An improved version of the sorting function will not throw notices when Intuitive Custom Post Order plugin is used.
-* New filter: `relevanssi_missing_sort_key` can be used to adjust the result sorting when using keys that are not present in all posts (eg. menu_order).
-* Importing options now works, it was broken in 1.14.6.
-* New feature: keyword-based exclusion is the opposite of the pinning feature. You can now list keywords on post edit screen, and if the search query matches those keywords, the post will not appear in results.
-* Czech translation and stopwords, thanks to Michael Kucera.
-
-= 1.14.7.1 =
-* Relevanssi threw a fatal error with PHP 7.1 thanks to a wrong variable declaration.
-* The accidental PHP 5.4+ requirement has been removed.
-
-= 1.14.7 =
-* Relevanssi broke the WP admin menu search when admin searches were enabled.
-* Pinning now supports multi-word search terms.
-* Relevanssi broke the admin page search under WP 4.7. Relevanssi is now disabled in admin page searches.
-* The way accented characters are handled in highlighting is improved. A new filter, `relevanssi_accents_replacement_arrays`, can be used to adjust the accent replacement.
-
-= 1.14.6.1 =
-* Fix for a fatal bug in 1.14.6.
-
-= 1.14.6 =
-* Relevanssi option import had a arbitrary code execution vulnerability that is now blocked.
-* Relevanssi admin page had a vulnerability that allowed SQL injection attacks. That is now fixed.
-* Relevanssi didn't like to highlight search terms that are followed by a ?, an ! or an apostrophe.
-* New filter: `relevanssi_ok_to_log` lets you control whether search queries are logged or not.
-
-= 1.14.5 =
-* Relevanssi had problems with plus signs in search queries.
-* 500 errors caused by arrays in custom fields should be gone now.
-* Post type filters in multisite searching work better now, and meta_query support is now added. (Thanks to Maxime Culea.)
-* Improvements to the ACF "select" field support.
-* Relevanssi will not break when frontend plugins insert posts.
-* Polylang support has been improved.
-* WPML and Polylang filters work when "fields" is set to "ids".
-* `relevanssi_match` filter has a new parameter, which contains the search term.
-* `relevanssi_post_ok` filter was missing from the multisite search.
-
-= 1.14.4 =
-* Fixed a small glitch that could happen if a highlighted term is next to a starting square bracket.
-* Bug fixes in the multisite searching: post type weights work now, and relevancy scores are properly noted.
-* Ensured PHP7 and WP 4.6 compatibility.
-* New filter: `relevanssi_30days` can be used to adjust the 30 day logs to a different number of days.
-
-= 1.14.3 =
-* Fix for a small bug that caused inflated relevancy values.
-* `relevanssi_didyoumean_url` has two more parameters (uncorrected query and the suggestion).
-* The Did you mean function didn't work properly if the search term wasn't in lowercase.
-* Adding stopwords that contain apostrophes didn't work.
-* Relevanssi can now index the human-readable labels of ACF "select" fields. (Thanks to Raphaël Droz.)
-
-= 1.14.2 =
-* Fixed a fatal error when searching includes private posts.
-
-= 1.14.1 =
-* Multisite searches had some compatibility issues with other plugins and navigation menus; those have now been fixed.
-* Multisite search (which has limitations) doesn't trigger if the search only targets the current site.
-* Multisite search can now return taxonomy terms.
-* "Did you mean" corrections in search queries with many words work better now.
-* Fixed an error if the search term was not found in content.
-* Fixed an error when building excerpts from posts shorter than the excerpt length.
-* Blocked the `[starpro]`, CFDB and WooCommerce shortcodes that are causing problems with Relevanssi.
-* Added support for `term_tax_id` in the `fields` parameter in tax_queries.
-* Excerpt-building failed if multibyte string operations were missing. It should work now.
-* New filter: `relevanssi_remove_stopwords_in_titles` allows you to include stopwords in titles.
-* New filter: `relevanssi_remote_addr` can be used to modify the IP address logged to Relevanssi logs.
-* New filter: `relevanssi_user_searches_limit` to adjust the number of user searches shown in the logs.
-* Old data check is only done on Relevanssi settings page, not on all admin pages. That should improve admin performance.
-
-= 1.14 =
-* Tokenizer was using `strlen()` and not `mb_strlen()`, so word lengths were not calculated properly. If your site uses non-ASCII alphabet, rebuilding the index is a good idea.
-* Printing out titles for taxonomy terms didn't work properly. `relevanssi_the_title()` works for that and if you don't want to echo the title, you can use it like `relevanssi_the_title(false)` to make it return the title.
-* Small improvement to WPML multilanguage filtering.
-* `relevanssi_user_add_data` only worked when indexing all users.
-* "Undefined index" errors in multisite search were eliminated.
-* The `[noindex]` shortcode now supports shortcodes inside it.
-* When posts transitioned from "future" to "published" there were some issues with disappearing Relevanssi settings. That's fixed now.
-* The `[watupro]` shortcode didn't work with Relevanssi, so Relevanssi will now bypass it.
-* Relevanssi had `the_title` filter hook calls that were missing the second parameter; that's now fixed.
-* The excerpt-building algorithm is completely rewritten based on work by Ben Boyter (http://www.boyter.org/).
-* The plugin i18n features have been improved slightly.
-* New filter: `relevanssi_didyoumean_suggestion` lets you modify the Did you mean? suggestion before it's displayed.
-* `relevanssi_didyoumean()` has a new parameter: you can now choose whether the result is echoed out (the default value) or just returned.
-* Multisite search had some problems with some Relevanssi variables not changing when the blog was switched. This is now improved, thanks to Teemu Muikku.
-* In the search results breakdown, you can now use %categories% and %taxonomies% to show the number of matches in categories and taxonomies other than tags and cats, respectively.
-* Search results breakdowns now work for taxonomy terms and user profiles.
-* Relevanssi supports `fields` parameter (both `ids` and `id=>parent`) to return only post IDs or post IDs and post parents.
-
-= 1.13.5 =
-* Previous version broke the multisite search. That is now fixed.
-* Empty lines on synonym settings caused problems. Fixed that.
-* Relevanssi didn't clean up properly on uninstall, leaving _relevanssi_pin postmeta fields.
-
-= 1.13.4 =
-* New filter: `relevanssi_valid_admin_status` can be used to adjust post statuses that Relevanssi will handle.
-* Meta query support should now be perfect; there were some limitations with complicated meta queries before.
-
-= 1.13.3 =
-* Removes one "Undefined variable" error.
-* New filter: `relevanssi_display_common_words` can be used to disable the "25 most common words" listing on the settings page, if it's too heavy to load.
-* Eliminated problems where using the `relevanssi_do_not_index` filter caused error messages.
-* Relevanssi was sanitizing taxonomy titles too aggressively. That is now toned down a bit.
-* If Relevanssi creates an empty excerpt for a post and there's a user-set excerpt for the post, that excerpt is used.
-* The `relevanssi_post_title_before_tokenize` filter now has a second parameter that contains the post object.
-* No ellipsis is added to the post excerpt, if the post excerpt shows the whole post.
-* Relevanssi now supports `post_parent`, `post_parent__in` and `post_parent__not_in`, though you have to set them in `relevanssi_modify_wp_query` filter for them to work.
-
-= 1.13.2 =
-* Fixed a bug that caused the results to change depending of the order of words in a multi-word search query.
-* Added `product_categories` and `recent_products` from WooCommerce to the list of blocked shortcodes.
-* There are improvements in excerpt-building and highlighting, especially when fuzzy search is enabled.
-* Fixed a possible (if quite unlikely) XSS vulnerability.
-* Improved search performance (thanks to MikeNGarrett).
-* Sometimes highlights in documents make the document content disappear. I don't know why, but I've added a fix that should make the content visible (without the highlights) if a problem appears.
-
-= 1.13.1 =
-* Fixed a bug with numeric taxonomy terms.
-* Fixed a bug in user search.
-* API keys are now completely hidden on the Relevanssi settings page.
-* `relevanssi_do_not_index` hook is moved a bit, so that when updating posts, posts that are not indexed because of the hook are now removed from the index.
-* Pinning didn't work if the post wasn't otherwise found with the pinning term. Now pinning terms are also indexed to ensure that the posts can be found with them.
-
-= 1.13 =
-* New feature: You can now pin posts on particular search terms.
-* New feature: Synonyms can now be defined in indexing, allowing them to be used with AND searches. (Thanks to Christoph Daum.)
-* Relevanssi handles taxonomy terms in search better. The change requires a reindexing.
-* Fix in indexing: Relevanssi will now bypass the global $post when indexing. This should help with problems with the Cookie Law Info plugin, for example.
-* Tax query relation setting didn't work properly. It is now fixed.
-* Word-based excerpt building sometimes created too short excerpts. That is now fixed.
-* Synonyms are now highlighted.
-* Phrase matching had issues where searching for a too common phrase crashed the search. That has been fixed.
-* LIKE operator didn't work properly in meta_queries.
-* API key field in settings is now a password field so clients and users can't see the API key.
-* Relevanssi created lots of unnecessary post_meta rows and didn't clean up properly afterwards. Now unnecessary rows are not created, and everything is cleaned up properly.
-* Problems with Avatar Upload plugin are fixed.
-* Offset errors with mb_stripos() shouldn't happen anymore.
-* Relevanssi tables are now added to `wpmu_drop_tables` to ensure neat cleanup with WPMU.
-* A small problem in taxonomy search MySQL fixed, also a small problem with AND operator in tax_queries.
-* Did you mean function now handles umlauted alphabet (ä, ö, ü and å).
-* Fixed a bug with WP_Date_Queries. Thanks to Charles St-Pierre.
-* New filter: `relevanssi_post_to_index` lets you access the post object before the post is indexed.
-* New filter: `relevanssi_orderby` lets you modify the $orderby value before Relevanssi sorts posts.
-* New filter: `relevanssi_order` lets you modify the $order value before Relevanssi sorts posts.
-* New filter: `relevanssi_post_title_before_tokenize` lets you modify post titles before indexing.
-* New filter: `relevanssi_private_cap` lets you adjust the capability setting for private posts in custom post types.
-
-= 1.12.1 =
-* Fixed a bug where excluding posts would cause the search to fail.
-* WPML searches showed each result twice. That's fixed.
-* Increased plugin safety against hackers.
-* There was a bug in `relevanssi_comment_content_to_index` filter.
-* Some people had problems with the log entry timestamps. Fixed that.
-* New filter: `relevanssi_prevent_default_request` gives you more control over where Relevanssi prevents the default query from running.
-* New filter: `relevanssi_private_cap` lets you set the correct capability for finding private posts in custom post types.
-* The option to exclude categories and tags from search only worked for categories, not tags. Tags have been separated to a different option.
-
-= 1.12 =
-* Relevanssi now automatically treats 'ß' as 'ss'. If your site has 'ß' in text, reindexing the database is a good idea.
-* Query variable `post_status` is now supported.
-* Improvements to excerpts: excerpts with phrases work much better now, and the excerpt creation logic has been improved: the excerpts are now better. The process takes a bit more time, though.
-* Allowing HTML tags in excerpts could lead to those tags being left open. Relevanssi will now try to close open HTML tags in excerpts.
-* Allowed tags were not controlled in comments. They are now.
-* Highlighting in documents didn't always work; it should be more reliable now.
-* Non-integer values are removed from `post__in` and `post__not_in` before processing them.
-* Query variables `p` and `page_id` are now supported.
-* Relevanssi now understands `date_query` variables as well.
-* The original post excerpt is stored in $post->original_excerpt.
-* Taxonomy search works better with term id parameters (for example from `wp_category_dropdown`).
-* Errors about $wpdb->prepare() missing an argument removed.
-* New functions: `relevanssi_the_title()` and `relevanssi_get_the_title()` can be used to display highlighted titles in search results.
-* The old title highlighting method has been disabled, because it caused highlights in wrong places. Now the highlighted title is stored in $post->highlighted_post_title, take it from there or use the Relevanssi title functions to display it.
-* Polylang and WPML support was adjusted to perform better in edge cases.
-* Indexing is faster, thanks to some improved code from Tom Novelli.
-* MySQL injection attack vulnerability removed.
-* The cache feature is now removed. Relevanssi should automatically drop the cache tables.
-* New filter: `relevanssi_indexing_data` lets you modify the data before it's indexed.
-* Fix for a bug that sometimes caused multisite hits to come from the wrong site.
-
-= 1.11 =
-* Fixed a bug in the TablePress support.
-* Titles are put through the_title filter before indexing.
-* relevanssi_related() function had a bug.
-* New filter: `relevanssi_join` can be used to join tables in the Relevanssi search MySQL queries. Thanks to Ninos Ego.
-* New filter: `relevanssi_tax_term_additional_content` can be used to add any content to taxonomy terms before indexing.
-* New filter: `relevanssi_post_content` can be used to modify post content before any Relevanssi processing.
-* New filter: `relevanssi_post_content_before_tokenize` can be used to modify post content just before it's tokenized.
-* New filter: `relevanssi_indexing_values` can be used to modify what Relevanssi stores in the index.
-* New filter: `relevanssi_default_meta_query_relation` can be used to change the default meta query relation (default value is "AND").
-* When using a meta_query, `relation` can be set to OR now.
-* Phrases are now matched to excerpts.
-* Number of queries Relevanssi generates is much, much lower.
-* New filter: `relevanssi_didyoumean_url` lets you modify the URL generated by the did you mean feature.
-* Better set of Russian stopwords.
-* Relevanssi now highlights search query synonyms as well in documents.
-
-= 1.10.14 =
-* Fix to make Relevanssi compatible with WordPress 3.7.
-* Fixed a mistyped database table name.
-* Relevanssi disables responsive-flipbook shortcode in indexing; it was causing problems.
-* Fixed a problem with an author dropdown with no author selected.
-
-= 1.10.13 =
-* New filter: `relevanssi_comment_content_to_index` lets you modify comment content before it's indexed by Relevanssi (to index comment meta, for example).
-* Facetious support: if post_type is set to -1, Relevanssi will not hang up on it.
-* Numerical search terms work better now.
-* Relevanssi now handles WordPress-created tax_queries better.
-* Support for Polylang broke the support for WPML. That is now fixed.
-* Two deprecated $wpdb->escape() were still left; they're gone now.
-* Shortcode `layerslider` was causing problems with Relevanssi; Relevanssi now disables it before building excerpts.
-* Relevanssi won't break BBPress search anymore.
-* Multisite searches had some issues.
-
-= 1.10.12 =
-* Excerpt-building had issues, which are now fixed.
-* Punctuation removal now replaces with a space.
-* "starrater" short code from GD Star Rating is now disabled in indexing.
-* Punctuation removal now replaces invisible spaces with a normal space.
-* Division by zero error caused by 0 in posts_per_page is now prevented, and -1 value for posts_per_page handled better.
-* Relevanssi doesn't apply `get_the_excerpt` filters to excerpts it builds any more.
-* New filter: `relevanssi_excerpt` lets you modify the excerpts Relevanssi creates.
-* Relevanssi now suspends WP post cache while indexing, making indexing a lot more efficient. Thanks to Julien Mession for this one.
-* Deprecated function errors in 3.6 removed.
-* When search included user profiles or taxonomy terms, Relevanssi would generate lots of MySQL errors. Not anymore.
-* New filter: `relevanssi_valid_status` lets you modify the post statuses Relevanssi indexes.
-* New filter: `relevanssi_index_taxonomies_args` lets you modify the arguments passed to get_terms() when indexing taxonomies (for example to set 'hide_empty' to false).
-* Searching by taxonomy ID could confuse two taxonomies with the same term_id. The search is now checking the taxonomy as well to see it's correct.
-* Basic support for Polylang plugin.
-* Russian and Italian stopwords are now included, thanks to Flector and Valerio Vendrame.
-* Small fix in the way user meta fields are handled.
-
-= 1.10.11 =
-* Previous upgrade broke AND operator in searches. Fixed that.
-
-= 1.10.10 =
-* REBUILD THE INDEX AFTER THIS UPDATE.
-* Prevented error messages relating to creation of post objects from users and taxonomies.
-* Fixed MySQL errors from empty meta queries.
-* Removed WP complaint about badly formed $wpdb->prepare() statement.
-* Sort order (orderby and order variables) are now read from query variables instead of global variables.
-* Relevanssi will not choke on bad values of orderby anymore.
-* Limit searches is improved: when using AND search it is less likely to miss results.
-* Phrase recognition read the whole post content (which it didn't need) from database, causing memory issues in some cases. Fixed that.
-* Fuzzy searches are now a lot more efficient; they were a huge resource hog before.
-* Fixed a possible MySQL injection attack.
-
-= 1.10.9.1 =
-* OR fallback didn't actually fall back to OR, but instead got stuck in an endless loop of AND searches.
-* Relevanssi was being called twice when a post was saved, on `save_post` and `wp_insert_post`. I removed the hook on `save_post`.
-
-= 1.10.9 =
-* Fixed the auto-update problem in 1.10.8 asking to update after update was done.
-* Meta queries didn't work without a key; now they work with just meta_value or meta_value_num.
-* Modified the way the highlights work; now highlighting words with apostrophes should produce more meaningful results.
-
-= 1.10.8 =
-* Major indexing problems caused by shortcodes changing the post ID during the indexing of posts are now fixed.
-* Meta queries had problems with meta_value being set to null.
-* Relevanssi now supports category__and. By default this sets include_children to false.
-* When querying by slug, the term taxonomy is also taken into consideration, fixing problems when same slug appears in different taxonomies.
-* Author search didn't work.
-* Fixed an error message caused by all-number synonyms starting with zero, like 02.
-* New action hook: `relevanssi_pre_indexing_query` can be used to "SET OPTION SQL_BIG_SELECTS=1" if needed.
-* Synonyms are now case-insensitive.
-* Highlighting should not highlight anything between & and ; or in @siu',
- '@@siu',
- '@]*?.*? @siu',
- '@]*?.*? @siu',
- '@]*?.*? @siu',
- '@]*?.*? @siu',
- '@]*?.*? @siu',
- '@@siu',
- '@]*?.*?@siu',
- '@@siu',
- ),
- ' ',
- $text
- );
- return $text;
-}
-
-/**
- * Strips tags from contents, keeping the allowed tags.
- *
- * The allowable tags are read from the relevanssi_excerpt_allowable_tags
- * option. Relevanssi also adds extra spaces after some tags to make sure words
- * are not stuck together after the tags are removed. The function also removes
- * invisible content.
- *
- * @uses relevanssi_strip_invisibles() Used to remove scripts and other tags.
- * @see strip_tags() Used to remove tags.
- *
- * @param string|null $content The content.
- *
- * @return string The content without tags.
- */
-function relevanssi_strip_tags( $content ) {
- if ( ! is_string( $content ) ) {
- $content = strval( $content );
- }
- $content = relevanssi_strip_invisibles( $content );
-
- $space_tags = array(
- '/(<\/?p.*?>)/',
- '/(<\/?br.*?>)/',
- '/(<\/?h[1-6].*?>)/',
- '/(<\/?div.*?>)/',
- '/(<\/?blockquote.*?>)/',
- '/(<\/?hr.*?>)/',
- '/(<\/?li.*?>)/',
- '/()/',
- '/(<\/td>)/',
- );
-
- $content = preg_replace( $space_tags, '$1 ', $content );
- return strip_tags(
- $content,
- get_option( 'relevanssi_excerpt_allowable_tags', '' )
- );
-}
-
-/**
- * Returns the position of substring in the string.
- *
- * Uses mb_stripos() if possible, falls back to mb_strpos() and mb_strtoupper()
- * if that cannot be found, and falls back to just strpos() if even that is not
- * possible.
- *
- * @param string $haystack String where to look.
- * @param string $needle The string to look for.
- * @param int $offset Where to start, default 0.
- *
- * @return mixed False, if no result or $offset outside the length of $haystack,
- * otherwise the position (which can be non-false 0!).
- */
-function relevanssi_stripos( $haystack, $needle, int $offset = 0 ) {
- if ( ! is_string( $haystack ) ) {
- $haystack = strval( $haystack );
- }
- if ( ! is_string( $needle ) ) {
- $needle = strval( $needle );
- }
- if ( $offset > relevanssi_strlen( $haystack ) ) {
- return false;
- }
-
- if ( preg_match( '/[\?\*]/', $needle ) ) {
- // There's a ? or an * in the string, which means it's a wildcard search
- // query (a Premium feature) and requires some extra steps.
- $needle_regex = str_replace(
- array( '?', '*' ),
- array( '.', '.*' ),
- preg_quote( $needle, '/' )
- );
- $pos_found = false;
- while ( ! $pos_found ) {
- preg_match(
- "/$needle_regex/i",
- $haystack,
- $matches,
- PREG_OFFSET_CAPTURE,
- $offset
- );
- /**
- * This trickery is necessary, because PREG_OFFSET_CAPTURE gives
- * wrong offsets for multibyte strings. The mb_strlen() gives the
- * correct offset, the rest of this is because the $offset received
- * as a parameter can be before the first $position, leading to an
- * infinite loop.
- */
- $pos = isset( $matches[0][1] )
- ? mb_strlen( substr( $haystack, 0, $matches[0][1] ) )
- : false;
- if ( $pos && $pos > $offset ) {
- $pos_found = true;
- } elseif ( $pos ) {
- $offset++;
- } else {
- $pos_found = true;
- }
- }
- } elseif ( function_exists( 'mb_stripos' ) ) {
- if ( '' === $haystack ) {
- $pos = false;
- } else {
- $pos = mb_stripos( $haystack, $needle, $offset );
- }
- } elseif ( function_exists( 'mb_strpos' ) && function_exists( 'mb_strtoupper' ) && function_exists( 'mb_substr' ) ) {
- $pos = mb_strpos(
- mb_strtoupper( $haystack ),
- mb_strtoupper( $needle ),
- $offset
- );
- } else {
- $pos = strpos( strtoupper( $haystack ), strtoupper( $needle ), $offset );
- }
- return $pos;
-}
-
-/**
- * Returns the length of the string.
- *
- * Uses mb_strlen() if available, otherwise falls back to strlen().
- *
- * @param string $s The string to measure.
- *
- * @return int The length of the string.
- */
-function relevanssi_strlen( $s ) {
- if ( ! is_string( $s ) ) {
- $s = strval( $s );
- }
- if ( function_exists( 'mb_strlen' ) ) {
- return mb_strlen( $s );
- }
- return strlen( $s );
-}
-
-/**
- * Multibyte friendly strtolower.
- *
- * If multibyte string functions are available, returns mb_strtolower() and
- * falls back to strtolower() if multibyte functions are not available.
- *
- * @param string $string The string to lowercase.
- *
- * @return string $string The string in lowercase.
- */
-function relevanssi_strtolower( $string ) {
- if ( ! is_string( $string ) ) {
- $string = strval( $string );
- }
- if ( ! function_exists( 'mb_strtolower' ) ) {
- return strtolower( $string );
- } else {
- return mb_strtolower( $string );
- }
-}
-
-/**
- * Multibyte friendly substr.
- *
- * If multibyte string functions are available, returns mb_substr() and falls
- * back to substr() if multibyte functions are not available.
- *
- * @param string $string The source string.
- * @param int $start If start is non-negative, the returned string will
- * start at the start'th position in str, counting from zero. If start is
- * negative, the returned string will start at the start'th character from the
- * end of string.
- * @param int|null $length Maximum number of characters to use from string. If
- * omitted or null is passed, extract all characters to the end of the string.
- *
- * @return string $string The string in lowercase.
- */
-function relevanssi_substr( $string, int $start, $length = null ) {
- if ( ! is_string( $string ) ) {
- $string = strval( $string );
- }
- if ( ! function_exists( 'mb_substr' ) ) {
- return substr( $string, $start, $length );
- } else {
- return mb_substr( $string, $start, $length );
- }
-}
-
-/**
- * Prints out the post excerpt.
- *
- * Prints out the post excerpt from $post->post_excerpt, unless the post is
- * protected. Only works in the Loop.
- *
- * @see post_password_required() Used to check for password requirements.
- *
- * @global $post The global post object.
- */
-function relevanssi_the_excerpt() {
- global $post;
- if ( ! post_password_required( $post ) ) {
- echo '' . $post->post_excerpt . '
'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
- } else {
- esc_html_e( 'There is no excerpt because this is a protected post.', 'relevanssi' );
- }
-}
-
-/**
- * Echoes out the permalink to the current post within Loop.
- *
- * Uses get_permalink() to get the permalink, then adds the 'highlight'
- * parameter if necessary using relevanssi_add_highlight(), then echoes it out.
- *
- * @param int|WP_Post $post Post ID or post object. Default is the global $post.
- *
- * @uses relevanssi_get_permalink() Fetches the current post permalink.
- */
-function relevanssi_the_permalink( $post = 0 ) {
- echo esc_url( relevanssi_get_permalink( $post ) );
-}
-
-/**
- * Prints out a list of tags for post.
- *
- * Replacement for the_tags() that does the same, but applies Relevanssi search term
- * highlighting on the results.
- *
- * @param string $before What is printed before the tags, default ''.
- * @param string $separator The separator between items, default ', '.
- * @param string $after What is printed after the tags, default ''.
- * @param boolean $echo If true, echo, otherwise return the result. Default true.
- * @param int $post_id The post ID. Default current post ID (in the Loop).
- */
-function relevanssi_the_tags( string $before = '', string $separator = ', ', string $after = '', bool $echo = true, int $post_id = 0 ) {
- $tag_list = get_the_tag_list( $before, $separator, $after, $post_id );
- $found = preg_match_all( '~(.*?) ~', $tag_list, $matches );
- if ( $found ) {
- $originals = $matches[0];
- $tag_names = $matches[1];
- $highlighted = array();
-
- $count = count( $matches[0] );
- for ( $i = 0; $i < $count; $i++ ) {
- $highlighted_tag_name = relevanssi_highlight_terms( $tag_names[ $i ], get_search_query(), true );
- $highlighted[ $i ] = str_replace( '>' . $tag_names[ $i ] . '<', '>' . $highlighted_tag_name . '<', $originals[ $i ] );
- }
-
- $tag_list = str_replace( $originals, $highlighted, $tag_list );
- }
-
- if ( $echo ) {
- echo $tag_list; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
- } else {
- return $tag_list;
- }
-}
-
-/**
- * Prints out post title with highlighting.
- *
- * Uses the global $post object. Reads the highlighted title from
- * $post->post_highlighted_title. This used to accept one parameter, the
- * `$echo` boolean, but in 2.12.3 / 4.10.3 the function signature was matched
- * to copy `the_title()` function in WordPress core. The original behaviour is
- * still supported: `relevanssi_the_title()` without arguments works exactly as
- * before and `relevanssi_the_title( false )` returns the title.
- *
- * @global object $post The global post object.
- *
- * @param boolean|string $before Markup to prepend to the title. Can also be a
- * boolean for whether to echo or return the title.
- * @param string $after Markup to append to the title.
- * @param boolean $echo Whether to echo or return the title. Default
- * true for echo.
- *
- * @return void|string Void if $echo argument is true, current post title with
- * highlights if $echo is false.
- */
-function relevanssi_the_title( $before = true, string $after = '', bool $echo = true ) {
- if ( true === $before ) {
- $before = '';
- $echo = true;
- } elseif ( false === $before ) {
- $before = '';
- $echo = false;
- }
- global $post;
- if ( empty( $post->post_highlighted_title ) ) {
- $post->post_highlighted_title = $post->post_title;
- }
- if ( relevanssi_strlen( $post->post_highlighted_title ) === 0 ) {
- return;
- }
- $title = $before . $post->post_highlighted_title . $after;
- if ( $echo ) {
- echo $title; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
- } else {
- return $title;
- }
-}
-
-/**
- * Turns off options, ie. sets them to "off".
- *
- * If the specified options don't exist in the request array, they are set to
- * "off".
- *
- * @param array $request The _REQUEST array, passed as reference.
- * @param array $options An array of option names.
- */
-function relevanssi_turn_off_options( array &$request, array $options ) {
- array_walk(
- $options,
- function( $option ) use ( &$request ) {
- if ( ! isset( $request[ $option ] ) ) {
- $request[ $option ] = 'off';
- }
- }
- );
-}
-
-/**
- * Sets an option after doing floatval.
- *
- * @param array $request An array of option values.
- * @param string $option The key to check.
- * @param boolean $autoload Should the option autoload, default true.
- * @param float $default The default value if floatval() fails, default 0.
- * @param boolean $positive If true, replace negative values and zeroes with
- * $default.
- */
-function relevanssi_update_floatval( array $request, string $option, bool $autoload = true, float $default = 0, bool $positive = false ) {
- if ( isset( $request[ $option ] ) ) {
- $value = floatval( $request[ $option ] );
- if ( ! $value ) {
- $value = $default;
- }
- if ( $positive && $value <= 0 ) {
- $value = $default;
- }
- update_option( $option, $value, $autoload );
- }
-}
-
-/**
- * Sets an option after doing intval.
- *
- * @param array $request An array of option values.
- * @param string $option The key to check.
- * @param boolean $autoload Should the option autoload, default true.
- * @param int $default The default value if intval() fails, default 0.
- */
-function relevanssi_update_intval( array $request, string $option, bool $autoload = true, int $default = 0 ) {
- if ( isset( $request[ $option ] ) ) {
- $value = intval( $request[ $option ] );
- if ( ! $value ) {
- $value = $default;
- }
- update_option( $option, $value, $autoload );
- }
-}
-
-/**
- * Sets an option with one of the listed legal values.
- *
- * @param array $request An array of option values.
- * @param string $option The key to check.
- * @param array $values The legal values.
- * @param string $default The default value.
- * @param boolean $autoload Should the option autoload, default true.
- */
-function relevanssi_update_legal_value( array $request, string $option, array $values, string $default, bool $autoload = true ) {
- if ( isset( $request[ $option ] ) ) {
- $value = $default;
- if ( in_array( $request[ $option ], $values, true ) ) {
- $value = $request[ $option ];
- }
- update_option( $option, $value, $autoload );
- }
-}
-
-/**
- * Sets an on/off option according to the request value.
- *
- * @param array $request An array of option values.
- * @param string $option The key to check.
- * @param boolean $autoload Should the option autoload, default true.
- */
-function relevanssi_update_off_or_on( array $request, string $option, bool $autoload = true ) {
- relevanssi_update_legal_value(
- $request,
- $option,
- array( 'off', 'on' ),
- 'off',
- $autoload
- );
-}
-
-/**
- * Sets an option after sanitizing and unslashing the value.
- *
- * @param array $request An array of option values.
- * @param string $option The key to check.
- * @param boolean $autoload Should the option autoload, default true.
- */
-function relevanssi_update_sanitized( array $request, string $option, bool $autoload = true ) {
- if ( isset( $request[ $option ] ) ) {
- $value = sanitize_text_field( wp_unslash( $request[ $option ] ) );
- update_option( $option, $value, $autoload );
- }
-}
-
-/**
- * Returns true if $_SERVER['HTTP_USER_AGENT'] is on the bot block list.
- *
- * Looks for bot user agents in the $_SERVER['HTTP_USER_AGENT'] and returns true
- * if a match is found.
- *
- * @return bool True if $_SERVER['HTTP_USER_AGENT'] is a bot.
- */
-function relevanssi_user_agent_is_bot() : bool {
- if ( isset( $_SERVER['HTTP_USER_AGENT'] ) ) {
- /**
- * Filters the bots Relevanssi should block from search queries.
- *
- * Lets you filter the bots that are blocked from Relevanssi search
- * queries.
- *
- * @param array $bots An array of bot user agents.
- */
- $bots = apply_filters( 'relevanssi_bots_to_block', relevanssi_bot_block_list() );
- foreach ( array_values( $bots ) as $lookfor ) {
- if ( false !== stristr( $_SERVER['HTTP_USER_AGENT'], $lookfor ) ) {
- return true;
- }
- }
- }
- return false;
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/admin-ajax.php b/wp/wp-content/plugins/relevanssi-premium/premium/admin-ajax.php
deleted file mode 100644
index f9bc6565..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/admin-ajax.php
+++ /dev/null
@@ -1,742 +0,0 @@
-prepare(
- "SELECT meta_id FROM $wpdb->postmeta WHERE meta_key = %s
- AND post_id NOT IN (
- SELECT post_id FROM $wpdb->postmeta WHERE meta_key = %s AND meta_value = %s
- )",
- $meta_key,
- $exclusion_key,
- $value
- );
-
- $meta_ids = $wpdb->get_col( $query ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
- if ( ! count( $meta_ids ) ) {
- return false;
- }
-
- $query = "DELETE FROM $wpdb->postmeta WHERE meta_id IN ( " . implode( ',', $meta_ids ) . ' )';
-
- $count = $wpdb->query( $query ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
-
- if ( ! $count ) {
- return false;
- }
-
- return true;
-}
-
-/**
- * Performs the "index PDFs" AJAX action.
- *
- * Reads in the PDF content for PDF files fetched using the relevanssi_get_posts_with_attachments() function.
- *
- * @since 2.0.0
- */
-function relevanssi_index_pdfs_action() {
- check_ajax_referer( 'relevanssi-index-pdfs', 'security' );
- relevanssi_current_user_can_access_options();
-
- $pdfs = relevanssi_get_posts_with_attachments( 3 );
-
- if ( ! isset( $_POST['completed'] ) || ! isset( $_POST['total'] ) ) { // WPCS: input var ok.
- wp_die();
- }
-
- $post_data = $_POST; // WPCS: input var ok.
-
- $completed = absint( $post_data['completed'] );
- $total = absint( $post_data['total'] );
-
- $response = array();
- $response['feedback'] = '';
-
- if ( empty( $pdfs ) ) {
- $response['feedback'] = __( 'Indexing complete!', 'relevanssi' );
- $response['completed'] = 'done';
- $response['percentage'] = 100;
- } else {
- foreach ( $pdfs as $post_id ) {
- $echo_and_die = false;
- $send_files = get_option( 'relevanssi_send_pdf_files' );
- if ( 'off' === $send_files ) {
- $send_files = false;
- }
-
- $index_response = relevanssi_index_pdf( $post_id, $echo_and_die, $send_files );
- $completed++;
-
- if ( $index_response['success'] ) {
- // translators: placeholder is the post ID.
- $response['feedback'] .= sprintf( esc_html__( 'Successfully indexed attachment id %d.', 'relevanssi' ), esc_html( $post_id ) ) . "\n";
- } else {
- // translators: the numeric placeholder is the post ID, the string is the error message.
- $response['feedback'] .= sprintf( esc_html__( 'Failed to index attachment id %1$d: %2$s', 'relevanssi' ), esc_html( $post_id ), esc_html( $index_response['error'] ) ) . "\n";
- }
- }
- $response['completed'] = $completed;
- if ( $total > 0 ) {
- $response['percentage'] = round( $completed / $total * 100, 0 );
- } else {
- $response['percentage'] = 0;
- }
- }
-
- echo wp_json_encode( $response );
-
- wp_die();
-}
-
-/**
- * Performs the "send PDF" AJAX action.
- *
- * Reads in the PDF content for one PDF file, based on the 'post_id' parameter, sending the PDF over.
- *
- * @since 2.0.0
- */
-function relevanssi_send_pdf() {
- check_ajax_referer( 'relevanssi_send_pdf', 'security' );
- if ( ! current_user_can( 'upload_files' ) ) {
- wp_die();
- }
-
- if ( ! isset( $_REQUEST['post_id'] ) ) { // WPCS: input var ok.
- wp_die();
- }
- $post_id = intval( wp_unslash( $_REQUEST['post_id'] ) ); // WPCS: input var ok.
- $echo_and_die = true;
- $send_file = true;
- relevanssi_index_pdf( $post_id, $echo_and_die, $send_file );
-
- // Just for sure; relevanssi_index_pdf() should echo necessary responses and die, so don't expect this to ever happen.
- wp_die();
-}
-
-/**
- * Performs the "send URL" AJAX action.
- *
- * Reads in the PDF content for one PDF file, based on the 'post_id' parameter, using the PDF URL.
- *
- * @since 2.0.0
- */
-function relevanssi_send_url() {
- check_ajax_referer( 'relevanssi_send_pdf', 'security' );
- if ( ! current_user_can( 'upload_files' ) ) {
- wp_die();
- }
-
- if ( ! isset( $_REQUEST['post_id'] ) ) { // WPCS: input var ok.
- wp_die();
- }
- $post_id = intval( wp_unslash( $_REQUEST['post_id'] ) ); // WPCS: input var ok.
- $echo_and_die = true;
- $send_file = false;
- relevanssi_index_pdf( $post_id, $echo_and_die, $send_file );
-
- // Just for sure; relevanssi_index_pdf() should echo necessary responses and die, so don't expect this to ever happen.
- wp_die();
-}
-
-/**
- * Reads all PDF errors.
- *
- * Gets a list of all PDF errors in the database and prints out a list of them.
- *
- * @global $wpdb The WordPress database interface, used to fetch the meta fields.
- *
- * @since 2.0.0
- */
-function relevanssi_get_pdf_errors_action() {
- if ( ! current_user_can( 'upload_files' ) ) {
- wp_die();
- }
-
- global $wpdb;
-
- $errors = $wpdb->get_results( "SELECT post_id, meta_value FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_pdf_error'" );
- $error_message = array();
- foreach ( $errors as $error ) {
- $row = __( 'Attachment ID', 'relevanssi' ) . ' ' . $error->post_id . ': ' . $error->meta_value;
- $row = str_replace( 'PDF Processor error: ', '', $row );
- $error_message[] = $row;
- }
-
- echo wp_json_encode( implode( "\n", $error_message ) );
- wp_die();
-}
-
-/**
- * Reads a list of taxonomies.
- *
- * Gets a list of taxonomies selected for indexing from the relevanssi_list_taxonomies() function.
- *
- * @since 2.0.0
- */
-function relevanssi_list_taxonomies_wrapper() {
- relevanssi_current_user_can_access_options();
-
- $taxonomies = array();
- if ( function_exists( 'relevanssi_list_taxonomies' ) ) {
- $taxonomies = relevanssi_list_taxonomies();
- }
- echo wp_json_encode( $taxonomies );
- wp_die();
-}
-
-/**
- * Indexes taxonomy terms for AJAX indexing.
- *
- * Reads in the parameters, indexes taxonomy terms and reports the results.
- *
- * @since 2.0.0
- */
-function relevanssi_index_taxonomies_ajax_wrapper() {
- check_ajax_referer( 'relevanssi_taxonomy_indexing_nonce', 'security' );
- relevanssi_current_user_can_access_options();
-
- if ( ! isset( $_POST['completed'] ) || ! isset( $_POST['total'] ) || ! isset( $_POST['taxonomy'] ) || ! isset( $_POST['offset'] ) || ! isset( $_POST['limit'] ) ) { // WPCS: input var ok.
- wp_die();
- }
-
- $post_data = $_POST; // WPCS: input var ok.
-
- $completed = absint( $post_data['completed'] );
- $total = absint( $post_data['total'] );
- $taxonomy = $post_data['taxonomy'];
- $offset = $post_data['offset'];
- $limit = $post_data['limit'];
-
- $response = array();
-
- $indexing_response = relevanssi_index_taxonomies_ajax( $taxonomy, $limit, $offset );
-
- $completed += $indexing_response['indexed'];
- if ( $completed === $total ) {
- $response['completed'] = 'done';
- $response['total_posts'] = $completed;
- $response['percentage'] = 100;
- // translators: number of terms indexed on this go, total indexed terms, total number of terms.
- $response['feedback'] = sprintf( _n( '%1$d taxonomy term, total %2$d / %3$d.', '%1$d taxonomy terms, total %2$d / %3$d.', $indexing_response['indexed'], 'relevanssi' ), $indexing_response['indexed'], $completed, $total ) . "\n";
- } else {
- $response['completed'] = $completed;
- // translators: number of terms indexed on this go, total indexed terms, total number of terms.
- $response['feedback'] = sprintf( _n( '%1$d taxonomy term, total %2$d / %3$d.', '%1$d taxonomy terms, total %2$d / %3$d.', $indexing_response['indexed'], 'relevanssi' ), $indexing_response['indexed'], $completed, $total ) . "\n";
-
- if ( $total > 0 ) {
- $response['percentage'] = $completed / $total * 100;
- } else {
- $response['percentage'] = 0;
- }
-
- $response['new_taxonomy'] = false;
- if ( 'done' === $indexing_response['taxonomy_completed'] ) {
- $response['new_taxonomy'] = true;
- }
- }
- $response['offset'] = $offset + $limit;
-
- echo wp_json_encode( $response );
- wp_die();
-}
-
-/**
- * Indexes post type archives for AJAX indexing.
- *
- * Indexes post type archives and reports the results. The post type archives are
- * always indexed all at one go; I don't think there's often a case where there are
- * too many.
- *
- * @since 2.2.0
- */
-function relevanssi_index_post_type_archives_ajax_wrapper() {
- check_ajax_referer( 'relevanssi_post_type_archive_indexing_nonce', 'security' );
- relevanssi_current_user_can_access_options();
-
- $response = array();
-
- if ( 'on' !== get_option( 'relevanssi_index_post_type_archives' ) ) {
- $response['feedback'] = __( 'disabled.', 'relevanssi' ) . "\n";
- } else {
- $indexing_response = relevanssi_index_post_type_archives_ajax();
-
- $response['completed'] = 'done';
- $response['total_posts'] = $indexing_response['indexed'];
- $response['percentage'] = 100;
- // translators: number of terms indexed on this go, total indexed terms, total number of terms.
- $response['feedback'] = sprintf( _n( '%1$d post type archive indexed.', '%1$d post type archives indexed.', $indexing_response['indexed'], 'relevanssi' ), $indexing_response['indexed'] ) . "\n";
- }
-
- echo wp_json_encode( $response );
- wp_die();
-}
-
-/**
- * Indexes users for AJAX indexing.
- *
- * Reads in the parameters, indexes users and reports the results.
- *
- * @since 2.0.0
- */
-function relevanssi_index_users_ajax_wrapper() {
- check_ajax_referer( 'relevanssi_user_indexing_nonce', 'security' );
- relevanssi_current_user_can_access_options();
-
- if ( ! isset( $_POST['completed'] ) || ! isset( $_POST['total'] ) || ! isset( $_POST['limit'] ) ) { // WPCS: input var ok.
- wp_die();
- }
-
- $post_data = $_POST; // WPCS: input var ok.
-
- $completed = absint( $post_data['completed'] );
- $total = absint( $post_data['total'] );
- $limit = $post_data['limit'];
- if ( isset( $post_data['offset'] ) ) {
- $offset = $post_data['offset'];
- } else {
- $offset = 0;
- }
-
- $response = array();
-
- $indexing_response = relevanssi_index_users_ajax( $limit, $offset );
-
- $completed += $indexing_response['indexed'];
- $processed = $offset;
-
- if ( $completed === $total || $processed > $total ) {
- $response['completed'] = 'done';
- $response['total_posts'] = $completed;
- $response['percentage'] = 100;
- $processed = $total;
- } else {
- $response['completed'] = $completed;
- $offset = $offset + $limit;
-
- if ( $total > 0 ) {
- $response['percentage'] = $completed / $total * 100;
- } else {
- $response['percentage'] = 0;
- }
- }
-
- // translators: number of users indexed on this go, total indexed users, total processed users, total number of users.
- $response['feedback'] = sprintf( _n( 'Indexed %1$d user (total %2$d), processed %3$d / %4$d.', 'Indexed %1$d users (total %2$d), processed %3$d / %4$d.', $indexing_response['indexed'], 'relevanssi' ), $indexing_response['indexed'], $completed, $processed, $total ) . "\n";
- $response['offset'] = $offset;
-
- echo wp_json_encode( $response );
- wp_die();
-}
-
-/**
- * Counts the users.
- *
- * Counts the users for indexing purposes using the relevanssi_count_users() function.
- *
- * @since 2.0.0
- */
-function relevanssi_count_users_ajax_wrapper() {
- relevanssi_current_user_can_access_options();
-
- $count = -1;
- if ( function_exists( 'relevanssi_count_users' ) ) {
- $count = relevanssi_count_users();
- }
- echo wp_json_encode( $count );
- wp_die();
-}
-
-/**
- * Counts the taxonomy terms.
- *
- * Counts the taxonomy terms for indexing purposes using the relevanssi_count_taxonomy_terms() function.
- *
- * @since 2.0.0
- */
-function relevanssi_count_taxonomies_ajax_wrapper() {
- relevanssi_current_user_can_access_options();
-
- $count = -1;
- if ( function_exists( 'relevanssi_count_taxonomy_terms' ) ) {
- $count = relevanssi_count_taxonomy_terms();
- }
- echo wp_json_encode( $count );
- wp_die();
-}
-
-/**
- * Creates a list of related posts.
- *
- * @since 2.2.4
- */
-function relevanssi_get_related_posts() {
- check_ajax_referer( 'relevanssi_metabox_nonce', 'security' );
- if ( ! current_user_can( 'edit_posts' ) ) {
- wp_die();
- }
-
- $post_id = (int) $_POST['post_id']; // WPCS: input var ok.
-
- if ( 0 === $post_id ) {
- wp_die();
- }
-
- if ( isset( $_POST['keywords'] ) ) {
- $keywords = sanitize_text_field( $_POST['keywords'] ); // WPCS: input var ok.
-
- delete_post_meta( $post_id, '_relevanssi_related_keywords' );
- add_post_meta( $post_id, '_relevanssi_related_keywords', $keywords );
-
- // Keywords have changed, flush the cache.
- delete_post_meta( $post_id, '_relevanssi_related_posts' );
- }
-
- if ( isset( $_POST['ids'] ) ) {
- $include_ids_array = explode( ',', $_POST['ids'] );
- $valid_ids = array();
- foreach ( $include_ids_array as $id ) {
- if ( get_post( $id ) ) {
- $valid_ids[] = $id;
- }
- }
- if ( ! empty( $valid_ids ) ) {
- $id_string = implode( ',', $valid_ids );
- delete_post_meta( $post_id, '_relevanssi_related_include_ids' );
- add_post_meta( $post_id, '_relevanssi_related_include_ids', $id_string );
- } else {
- delete_post_meta( $post_id, '_relevanssi_related_include_ids' );
- }
-
- // Included IDs have changed, flush the cache.
- delete_post_meta( $post_id, '_relevanssi_related_posts' );
- }
-
- $list = relevanssi_generate_related_list( $post_id );
-
- $response = array(
- 'list' => $list,
- );
-
- echo wp_json_encode( $response );
- wp_die();
-}
-
-/**
- * Adds a post ID to the excluded ID list.
- *
- * @since 2.2.4
- */
-function relevanssi_add_to_exclude_list() {
- check_ajax_referer( 'relevanssi_metabox_nonce', 'security' );
- if ( ! current_user_can( 'edit_posts' ) ) {
- wp_die();
- }
-
- $post_id = (int) $_POST['post_id']; // WPCS: input var ok.
-
- if ( 0 === $post_id ) {
- wp_die();
- }
-
- if ( isset( $_POST['remove_id'] ) ) {
- relevanssi_exclude_a_related_post( $post_id, $_POST['remove_id'] );
- }
-
- $related = relevanssi_generate_related_list( $post_id );
- $excluded = relevanssi_generate_excluded_list( $post_id );
-
- $response = array(
- 'related' => $related,
- 'excluded' => $excluded,
- );
-
- echo wp_json_encode( $response );
- wp_die();
-}
-
-/**
- * Adds a post ID to the list of excluded post IDs of a post.
- *
- * @param int $post_id Add to this post IDs exclude list.
- * @param int $excluded_post Add this post ID to the exclude list.
- */
-function relevanssi_exclude_a_related_post( $post_id, $excluded_post ) {
- $remove_id = (int) $excluded_post;
- $excluded_ids = trim( get_post_meta( $post_id, '_relevanssi_related_exclude_ids', true ) );
- if ( $excluded_ids ) {
- $excluded_ids = explode( ',', $excluded_ids );
- } else {
- $excluded_ids = array();
- }
- $excluded_ids[] = $remove_id;
- $excluded_ids = array_keys( array_flip( $excluded_ids ) );
- $excluded_ids = implode( ',', $excluded_ids );
- update_post_meta( $post_id, '_relevanssi_related_exclude_ids', $excluded_ids );
-
- // Excluded IDs have changed, flush the cache.
- delete_post_meta( $post_id, '_relevanssi_related_posts' );
-}
-
-/**
- * Removes a post ID from the excluded ID list and regenerates the lists.
- *
- * @since 2.2.4
- */
-function relevanssi_remove_from_exclude_list() {
- check_ajax_referer( 'relevanssi_metabox_nonce', 'security' );
- if ( ! current_user_can( 'edit_posts' ) ) {
- wp_die();
- }
-
- $post_id = (int) $_POST['post_id']; // WPCS: input var ok.
-
- if ( 0 === $post_id ) {
- wp_die();
- }
-
- if ( isset( $_POST['return_id'] ) ) {
- relevanssi_unexclude_a_related_post( $post_id, $_POST['return_id'] );
- }
-
- $related = relevanssi_generate_related_list( $post_id );
- $excluded = relevanssi_generate_excluded_list( $post_id );
-
- $response = array(
- 'related' => $related,
- 'excluded' => $excluded,
- );
-
- echo wp_json_encode( $response );
- wp_die();
-}
-
-/**
- * Removes a post ID from the related posts exclude list.
- *
- * @param int $post_id The post ID that owns the related posts exclude list.
- * @param int $unexcluded_post The post ID which is removed from the exclude list.
- */
-function relevanssi_unexclude_a_related_post( $post_id, $unexcluded_post ) {
- $return_id = (int) $unexcluded_post;
- $excluded_ids = trim( get_post_meta( $post_id, '_relevanssi_related_exclude_ids', true ) );
- $excluded_ids = array_flip( explode( ',', $excluded_ids ) );
- unset( $excluded_ids[ $return_id ] );
- $excluded_ids = array_keys( $excluded_ids );
- $excluded_ids = implode( ',', $excluded_ids );
- update_post_meta( $post_id, '_relevanssi_related_exclude_ids', $excluded_ids );
-
- // Excluded IDs have changed, flush the cache.
- delete_post_meta( $post_id, '_relevanssi_related_posts' );
-}
-
-/**
- * Adds a keyword to the pinned keywords list for a post.
- *
- * @since 2.2.6
- */
-function relevanssi_pin_post() {
- check_ajax_referer( 'relevanssi_admin_search_nonce', 'security' );
- if ( ! current_user_can( 'edit_posts' ) ) {
- wp_die();
- }
-
- $post_id = (int) $_POST['post_id']; // WPCS: input var ok.
- $keyword = $_POST['keyword']; // WPCS: input var ok.
-
- if ( 0 === $post_id || empty( $keyword ) ) {
- wp_die();
- }
-
- $result = false;
- $already_pinned = false;
- $pins = get_post_meta( $post_id, '_relevanssi_pin' );
- foreach ( $pins as $pin ) {
- if ( $pin === $keyword ) {
- $already_pinned = true;
- break;
- }
- }
- if ( ! $already_pinned ) {
- $result = add_post_meta( $post_id, '_relevanssi_pin', $keyword );
- }
-
- $response = array(
- 'success' => $result,
- );
-
- echo wp_json_encode( $response );
- wp_die();
-}
-
-/**
- * Removes a keyword from the pinned keywords list for a post.
- *
- * @since 2.2.6
- */
-function relevanssi_unpin_post() {
- check_ajax_referer( 'relevanssi_admin_search_nonce', 'security' );
- if ( ! current_user_can( 'edit_posts' ) ) {
- wp_die();
- }
-
- $post_id = (int) $_POST['post_id']; // WPCS: input var ok.
- $keyword = $_POST['keyword']; // WPCS: input var ok.
-
- if ( 0 === $post_id || empty( $keyword ) ) {
- wp_die();
- }
-
- $result = delete_post_meta( $post_id, '_relevanssi_pin', $keyword );
-
- $response = array(
- 'success' => $result,
- );
-
- echo wp_json_encode( $response );
- wp_die();
-}
-
-/**
- * Fetches database words to the relevanssi_words option.
- *
- * An AJAX wrapper for relevanssi_update_words_option().
- *
- * @see relevanssi_update_words_option()
- *
- * @since 2.5.0
- */
-function relevanssi_ajax_get_words() {
- if ( ! wp_verify_nonce( $_REQUEST['_nonce'], 'relevanssi_get_words' ) ) {
- wp_die();
- }
-
- relevanssi_update_words_option();
-
- wp_die();
-}
-
-/**
- * Launches the attachment content indexing.
- *
- * Sets the _relevanssi_pdf_error for the post to show RELEVANSSI_ERROR_05
- * (ie. "work in progress"), then launches the indexing and dies off.
- *
- * @since 2.5.0
- */
-function relevanssi_ajax_index_pdf() {
- if ( ! wp_verify_nonce( $_REQUEST['_nonce'], 'relevanssi_index_pdf' ) ) {
- wp_die();
- }
-
- if ( ! current_user_can( 'upload_files' ) ) {
- wp_die();
- }
-
- update_post_meta( $_REQUEST['post_id'], '_relevanssi_pdf_error', RELEVANSSI_ERROR_05 );
-
- relevanssi_index_pdf( $_REQUEST['post_id'] );
-
- wp_die();
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/admin_metabox_scripts.js b/wp/wp-content/plugins/relevanssi-premium/premium/admin_metabox_scripts.js
deleted file mode 100644
index a4c66e7c..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/admin_metabox_scripts.js
+++ /dev/null
@@ -1,71 +0,0 @@
-jQuery(document).ready(function ($) {
- $("#relevanssi_related_keywords").change(function (e) {
- var post_id = $("#this_post_id").val()
- var keywords = $("#relevanssi_related_keywords").val()
- var data = {
- action: "relevanssi_related_posts",
- security: relevanssi_metabox_data.metabox_nonce,
- post_id: post_id,
- keywords: keywords,
- }
- jQuery.post(ajaxurl, data, function (response) {
- response = JSON.parse(response)
- $("#related_posts_list").html(response.list)
- })
- })
-
- $("#relevanssi_related_include_ids").change(function (e) {
- var post_id = $("#this_post_id").val()
- var ids = $("#relevanssi_related_include_ids").val()
- var data = {
- action: "relevanssi_related_posts",
- security: relevanssi_metabox_data.metabox_nonce,
- post_id: post_id,
- ids: ids,
- }
- jQuery.post(ajaxurl, data, function (response) {
- response = JSON.parse(response)
- $("#related_posts_list").html(response.list)
- })
- })
-
- $("#relevanssi_hidebox").on("click", "button.removepost", function (e) {
- var remove_id = $(this).data("removepost")
- if (remove_id) {
- var post_id = $("#this_post_id").val()
- var data = {
- action: "relevanssi_related_remove",
- security: relevanssi_metabox_data.metabox_nonce,
- post_id: post_id,
- remove_id: remove_id,
- }
- jQuery.post(ajaxurl, data, function (response) {
- response = JSON.parse(response)
-
- $("#related_posts_list").html(response.related)
- $("#excluded_posts_list").html(response.excluded)
- })
- }
- })
-
- $("#relevanssi_hidebox").on("click", "button.returnpost", function (e) {
- var return_id = $(this).data("returnpost")
- console.log(return_id)
- if (return_id) {
- var post_id = $("#this_post_id").val()
- var data = {
- action: "relevanssi_related_return",
- security: relevanssi_metabox_data.metabox_nonce,
- post_id: post_id,
- return_id: return_id,
- }
- jQuery.post(ajaxurl, data, function (response) {
- response = JSON.parse(response)
- console.log(response)
-
- $("#related_posts_list").html(response.related)
- $("#excluded_posts_list").html(response.excluded)
- })
- }
- })
-})
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/admin_pdf_scripts.js b/wp/wp-content/plugins/relevanssi-premium/premium/admin_pdf_scripts.js
deleted file mode 100644
index 97f95490..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/admin_pdf_scripts.js
+++ /dev/null
@@ -1,49 +0,0 @@
-jQuery(document).ready(function () {
- jQuery("#sendUrl").click(function (e) {
- e.preventDefault()
- var postID = jQuery("#sendUrl").data("post_id")
- console.log(postID)
- jQuery.ajax({
- url: ajaxurl,
- type: "POST",
- data: {
- action: "relevanssi_send_url",
- post_id: postID,
- security: admin_pdf_data.send_pdf_nonce,
- },
- dataType: "json",
- complete: function (data) {
- console.log(data)
- location.reload()
- },
- })
- })
-
- jQuery("#sendPdf").click(function (e) {
- e.preventDefault()
- var postID = jQuery("#sendPdf").data("post_id")
- console.log(postID)
- jQuery.ajax({
- url: ajaxurl,
- type: "POST",
- data: {
- action: "relevanssi_send_pdf",
- post_id: postID,
- security: admin_pdf_data.send_pdf_nonce,
- },
- dataType: "json",
- complete: function (data) {
- console.log(data)
- location.reload()
- },
- })
- })
-
- jQuery("textarea#relevanssi_pdf_content").focus(function () {
- jQuery(this).animate({ rows: 40, cols: 120 }, 500)
- })
-
- jQuery("textarea#relevanssi_pdf_content").focusout(function () {
- jQuery(this).animate({ rows: 4, cols: 80 }, 500)
- })
-})
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/admin_scripts_premium.js b/wp/wp-content/plugins/relevanssi-premium/premium/admin_scripts_premium.js
deleted file mode 100644
index db4148e8..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/admin_scripts_premium.js
+++ /dev/null
@@ -1,540 +0,0 @@
-jQuery(document).ready(function ($) {
- // Show and hide the "Show Relevanssi for admins" setting on the Overview tab depending
- // on whether the "Hide Relevanssi" setting is enabled.
- var show_post_controls = $("#show_post_controls")
- $("#relevanssi_hide_post_controls").change(function () {
- show_post_controls.toggleClass("screen-reader-text")
- })
-
- // Find out the latest row ID in the redirect table.
- var last_row_id = $(".redirect_table_row:last").attr("id")
- var redirect_row_index = 0
- if (last_row_id) {
- // There's a last row, we're on the Redirects tab.
- last_row_id = last_row_id.split("_")
- if (last_row_id.length > 1) {
- redirect_row_index = last_row_id[1]
- }
- }
-
- // Adds a new row to the redirect table on the Redirects tab.
- $("#add_redirect").click(function (e) {
- redirect_row_index++
- $(".redirect_table_row:last")
- .clone(true)
- .attr("id", "row_" + redirect_row_index)
- .insertAfter(".redirect_table_row:last")
-
- var query = $("#row_" + redirect_row_index + " input:first")
- query.val("")
- query.attr("name", "query_" + redirect_row_index)
- query.attr("id", "query_" + redirect_row_index)
-
- var partial = $("#row_" + redirect_row_index + " input:checkbox")
- partial.prop("checked", false)
- partial.attr("name", "partial_" + redirect_row_index)
- partial.attr("id", "partial_" + redirect_row_index)
-
- var url = $("#row_" + redirect_row_index + " input:eq(2)")
- url.val("")
- url.attr("id", "url_" + redirect_row_index)
- url.attr("name", "url_" + redirect_row_index)
-
- var hits = $("#row_" + redirect_row_index + " input:last")
- hits.val("")
- hits.attr("name", "hits_" + redirect_row_index)
- hits.attr("id", "hits_" + redirect_row_index)
-
- var hitsNumber = $("#row_" + redirect_row_index + " span:last")
- hitsNumber.html("0")
- })
-
- // Related posts tab: if "Matching post types" is checked, disable and uncheck other options.
- $("input.matching").click(function (e) {
- if ($(this).is(":checked")) {
- $("input.nonmatching").prop("checked", false)
- $("input.nonmatching").attr("disabled", true)
- } else {
- $("input.nonmatching").attr("disabled", false)
- }
- })
-
- // Related posts tab: Display default thumbnail option.
- $("#relevanssi_related_thumbnails").click(function (e) {
- $("#defaultthumbnail").toggleClass("screen-reader-text", !this.checked)
- })
-
- // Redirects tab redirect table row removal.
- $(".remove").click(function (e) {
- e.preventDefault()
- if ($("#redirect_table >tbody >tr").length > 1) {
- // If there is more than one row in the table, remove the last row.
- $(this).closest("tr").remove()
- } else {
- // Only one row left, don't remove it (because adding rows is based on cloning).
- // Instead empty out the values.
- $(".redirect_table_row:last input:text").val("")
- $(".redirect_table_row:last input:checkbox").prop("checked", false)
- }
- })
-
- // Related posts tab: Toggle settings for main switch.
- $("#relevanssi_related_enabled").click(function () {
- $("#tr_relevanssi_related_append input").attr("disabled", !this.checked)
- $("#tr_relevanssi_related_keyword input").attr("disabled", !this.checked)
- $("#relevanssi_related_number").attr("disabled", !this.checked)
- $("#relevanssi_related_months").attr("disabled", !this.checked)
- $("#tr_relevanssi_related_post_types input").attr("disabled", !this.checked)
- $("#relevanssi_related_nothing").attr("disabled", !this.checked)
- $("#relevanssi_related_notenough").attr("disabled", !this.checked)
- $("#relevanssi_related_titles").attr("disabled", !this.checked)
- $("#relevanssi_related_thumbnails").attr("disabled", !this.checked)
- $("#relevanssi_related_excerpts").attr("disabled", !this.checked)
- $("#relevanssi_related_cache_for_admins").attr("disabled", !this.checked)
- $("#relevanssi_flush_related_cache").attr("disabled", !this.checked)
- })
-
- // Redirects tab redirect table row cloning.
- $("a.copy").click(function (e) {
- e.preventDefault()
- redirect_row_index++
- $(this)
- .closest("tr")
- .clone(true)
- .attr("id", "row_" + redirect_row_index)
- .insertAfter(".redirect_table_row:last")
-
- var query = $("#row_" + redirect_row_index + " input:first")
- query.attr("name", "query_" + redirect_row_index)
- query.attr("id", "query_" + redirect_row_index)
-
- var partial = $("#row_" + redirect_row_index + " input:checkbox")
- partial.attr("name", "partial_" + redirect_row_index)
- partial.attr("id", "partial_" + redirect_row_index)
-
- var url = $("#row_" + redirect_row_index + " input:eq(2)")
- url.attr("name", "url_" + redirect_row_index)
- url.attr("name", "url_" + redirect_row_index)
-
- var hits = $("#row_" + redirect_row_index + " input:last")
- hits.val("")
- hits.attr("name", "hits_" + redirect_row_index)
- hits.attr("id", "hits_" + redirect_row_index)
-
- var hitsNumber = $("#row_" + redirect_row_index + " span:last")
- hitsNumber.html("0")
- })
-
- $("#attachments_tab :input").change(function (e) {
- $("#index").attr("disabled", "disabled")
- var relevanssi_note = $("#relevanssi-note")
- relevanssi_note.show()
- relevanssi_note.html(
- '' + relevanssi.options_changed + "
"
- )
- })
-
- $("#build_index").click(function () {
- $("#relevanssi-progress").show()
- $("#results").show()
- $("#relevanssi-timer").show()
- $("#relevanssi-indexing-instructions").show()
- $("#stateoftheindex").html(relevanssi.reload_state)
- $("#indexing_button_instructions").hide()
- var results = document.getElementById("results")
- results.value = ""
-
- var data = {
- action: "relevanssi_truncate_index",
- security: nonce.indexing_nonce,
- }
-
- intervalID = window.setInterval(relevanssiUpdateClock, 1000)
-
- console.log("Truncating index.")
- results.value += relevanssi.truncating_index + " "
- jQuery.post(ajaxurl, data, function (response) {
- truncate_response = JSON.parse(response)
- console.log("Truncate index: " + truncate_response)
- if (truncate_response == true) {
- results.value += relevanssi.done + "\n"
- }
- var data = {
- action: "relevanssi_index_post_type_archives",
- security: nonce.post_type_archive_indexing_nonce,
- }
- console.log("Indexing post type archives.")
- results.value += "Indexing post type archives... "
- jQuery.post(ajaxurl, data, function (response) {
- console.log("Done")
- response = JSON.parse(response)
- results.value += response.feedback
- var data = {
- action: "relevanssi_count_users",
- }
- console.log("Counting users.")
- results.value += relevanssi.counting_users + " "
- jQuery.post(ajaxurl, data, function (response) {
- count_response = JSON.parse(response)
- console.log("Counted " + count_response + " users.")
- if (count_response < 0) {
- results.value += relevanssi.user_disabled + "\n"
- } else {
- results.value +=
- count_response + " " + relevanssi.users_found + "\n"
- }
-
- var user_total = count_response
-
- var data = {
- action: "relevanssi_count_taxonomies",
- }
- console.log("Counting taxonomies.")
- results.value += relevanssi.counting_terms + " "
- jQuery.post(ajaxurl, data, function (response) {
- count_response = JSON.parse(response)
- console.log("Counted " + count_response + " taxonomy terms.")
- if (count_response < 0) {
- results.value += relevanssi.taxonomy_disabled + "\n"
- } else {
- results.value +=
- count_response + " " + relevanssi.terms_found + "\n"
- }
-
- var taxonomy_total = count_response
-
- var data = {
- action: "relevanssi_count_posts",
- }
- console.log("Counting posts.")
- results.value += relevanssi.counting_posts + " "
- jQuery.post(ajaxurl, data, function (response) {
- count_response = JSON.parse(response)
- console.log("Counted " + count_response + " posts.")
- var post_total = parseInt(count_response)
- results.value +=
- count_response + " " + relevanssi.posts_found + "\n"
-
- var data = {
- action: "relevanssi_list_taxonomies",
- }
- console.log("Listing taxonomies.")
- jQuery.post(ajaxurl, data, function (response) {
- taxonomies_response = JSON.parse(response)
- console.log("Listing taxonomies: " + taxonomies_response)
- console.log("Starting indexing.")
- console.log("User total " + user_total)
- if (user_total > 0) {
- console.log("Indexing users.")
- var args = {
- total: user_total,
- completed: 0,
- total_seconds: 0,
- post_total: post_total,
- limit: 10,
- taxonomies: taxonomies_response,
- taxonomies_total: taxonomy_total,
- }
- process_user_step(args)
- } else if (taxonomy_total > 0) {
- console.log("Indexing taxonomies.")
- results.value += relevanssi.indexing_taxonomies + " "
- results.value += taxonomies_response + "\n"
- var args = {
- taxonomies: taxonomies_response,
- completed: 0,
- total: taxonomy_total,
- total_seconds: 0,
- post_total: post_total,
- current_taxonomy: "",
- offset: 0,
- limit: 20,
- }
- process_taxonomy_step(args)
- } else {
- console.log("Just indexing.")
- var args = {
- completed: 0,
- total: post_total,
- offset: 0,
- total_seconds: 0,
- limit: relevanssi_params.indexing_limit,
- adjust: relevanssi_params.indexing_adjust,
- extend: false,
- security: nonce.indexing_nonce,
- }
- process_indexing_step(args)
- }
- })
- })
- })
- })
- })
- })
- })
-})
-
-function process_user_step(args) {
- var completed = args.completed
- var total = args.total
- var total_seconds = args.total_seconds
-
- console.log(completed + " / " + total)
- var t0 = performance.now()
-
- jQuery.ajax({
- type: "POST",
- url: ajaxurl,
- data: {
- action: "relevanssi_index_users",
- limit: args.limit,
- offset: args.offset,
- completed: completed,
- total: total,
- security: nonce.user_indexing_nonce,
- },
- dataType: "json",
- success: function (response) {
- console.log(response)
- if (response.completed == "done") {
- var t1 = performance.now()
- var time_seconds = (t1 - t0) / 1000
- time_seconds = Math.round(time_seconds * 100) / 100
- total_seconds += time_seconds
-
- var results_textarea = document.getElementById("results")
- results_textarea.value += response.feedback
- results_textarea.scrollTop = results_textarea.scrollHeight
- var percentage_rounded = Math.round(response.percentage)
-
- jQuery(".rpi-progress div").animate(
- {
- width: percentage_rounded + "%",
- },
- 50,
- function () {
- // Animation complete.
- }
- )
-
- console.log("Done indexing users.")
-
- if (args.taxonomies_total > 0) {
- var new_args = {
- completed: 0,
- total: args.taxonomies_total,
- taxonomies: args.taxonomies,
- current_taxonomy: "",
- post_total: args.post_total,
- offset: 0,
- total_seconds: total_seconds,
- limit: 20,
- extend: false,
- }
- process_taxonomy_step(new_args)
- } else {
- var new_args = {
- security: nonce.indexing_nonce,
- completed: 0,
- total: args.post_total,
- offset: 0,
- total_seconds: 0,
- limit: relevanssi_params.indexing_limit,
- adjust: relevanssi_params.indexing_adjust,
- extend: false,
- }
- process_indexing_step(new_args)
- }
- } else {
- var t1 = performance.now()
- var time_seconds = (t1 - t0) / 1000
- time_seconds = Math.round(time_seconds * 100) / 100
- total_seconds += time_seconds
-
- var estimated_time = rlv_format_approximate_time(
- Math.round(
- (total_seconds / response.percentage) * 100 - total_seconds
- )
- )
-
- document.getElementById("relevanssi_estimated").innerHTML =
- estimated_time
-
- if (time_seconds < 2) {
- args.limit = args.limit * 2
- // current limit can be indexed in less than two seconds; double the limit
- } else if (time_seconds < 5) {
- args.limit += 5
- // current limit can be indexed in less than five seconds; up the limit
- } else if (time_seconds > 20) {
- args.limit = Math.round(args.limit / 2)
- if (args.limit < 1) args.limit = 1
- // current limit takes more than twenty seconds; halve the limit
- } else if (time_seconds > 10) {
- args.limit -= 5
- if (args.limit < 1) args.limit = 1
- // current limit takes more than ten seconds; reduce the limit
- }
-
- var results_textarea = document.getElementById("results")
- results_textarea.value += response.feedback
- results_textarea.scrollTop = results_textarea.scrollHeight
- var percentage_rounded = Math.round(response.percentage)
-
- jQuery(".rpi-progress div").animate(
- {
- width: percentage_rounded + "%",
- },
- 50,
- function () {
- // Animation complete.
- }
- )
- console.log("Next step.")
- var new_args = {
- completed: parseInt(response.completed),
- total: args.total,
- total_seconds: total_seconds,
- offset: response.offset,
- limit: args.limit,
- post_total: args.post_total,
- taxonomies: args.taxonomies,
- taxonomies_total: args.taxonomies_total,
- }
- process_user_step(new_args)
- }
- },
- })
-}
-
-function process_taxonomy_step(args) {
- var completed = args.completed
- var total = args.total
- var total_seconds = args.total_seconds
-
- console.log(completed + " / " + total)
- var t0 = performance.now()
-
- if (args.current_taxonomy == "") {
- taxonomy = args.taxonomies.shift()
- args.offset = 0
- args.limit = 20
- } else {
- taxonomy = args.current_taxonomy
- }
-
- if (taxonomy != undefined) {
- var results_textarea = document.getElementById("results")
- results_textarea.value += "Indexing " + "'" + taxonomy + "': "
- jQuery.ajax({
- type: "POST",
- url: ajaxurl,
- data: {
- action: "relevanssi_index_taxonomies",
- completed: completed,
- total: total,
- taxonomy: taxonomy,
- offset: args.offset,
- limit: args.limit,
- security: nonce.taxonomy_indexing_nonce,
- },
- dataType: "json",
- success: function (response) {
- console.log(response)
- if (response.completed == "done") {
- var t1 = performance.now()
- var time_seconds = (t1 - t0) / 1000
- time_seconds = Math.round(time_seconds * 100) / 100
- total_seconds += time_seconds
-
- var results_textarea = document.getElementById("results")
- results_textarea.value += response.feedback
-
- console.log("Done indexing taxonomies.")
-
- var new_args = {
- completed: 0,
- total: args.post_total,
- offset: 0,
- total_seconds: 0,
- limit: relevanssi_params.indexing_limit,
- adjust: relevanssi_params.indexing_adjust,
- extend: false,
- security: nonce.indexing_nonce,
- }
- process_indexing_step(new_args)
- } else {
- var t1 = performance.now()
- var time_seconds = (t1 - t0) / 1000
- time_seconds = Math.round(time_seconds * 100) / 100
- total_seconds += time_seconds
-
- var estimated_time = rlv_format_approximate_time(
- Math.round(
- (total_seconds / response.percentage) * 100 - total_seconds
- )
- )
-
- document.getElementById("relevanssi_estimated").innerHTML =
- estimated_time
-
- if (time_seconds < 2) {
- args.limit = args.limit * 2
- // current limit can be indexed in less than two seconds; double the limit
- } else if (time_seconds < 5) {
- args.limit += 5
- // current limit can be indexed in less than five seconds; up the limit
- } else if (time_seconds > 20) {
- args.limit = Math.round(args.limit / 2)
- if (args.limit < 1) args.limit = 1
- // current limit takes more than twenty seconds; halve the limit
- } else if (time_seconds > 10) {
- args.limit -= 5
- if (args.limit < 1) args.limit = 1
- // current limit takes more than ten seconds; reduce the limit
- }
-
- var results_textarea = document.getElementById("results")
- results_textarea.value += response.feedback
- results_textarea.scrollTop = results_textarea.scrollHeight
- var percentage_rounded = Math.round(response.percentage)
-
- jQuery(".rpi-progress div").animate(
- {
- width: percentage_rounded + "%",
- },
- 50,
- function () {
- // Animation complete.
- }
- )
- console.log("Next step.")
- if (response.new_taxonomy) taxonomy = ""
- var new_args = {
- taxonomies: args.taxonomies,
- completed: parseInt(response.completed),
- total: args.total,
- total_seconds: total_seconds,
- post_total: args.post_total,
- current_taxonomy: taxonomy,
- offset: response.offset,
- limit: args.limit,
- }
- process_taxonomy_step(new_args)
- }
- },
- })
- } else {
- var new_args = {
- completed: 0,
- total: args.post_total,
- offset: 0,
- total_seconds: 0,
- limit: relevanssi_params.indexing_limit,
- adjust: relevanssi_params.indexing_adjust,
- extend: false,
- security: nonce.indexing_nonce,
- }
- process_indexing_step(new_args)
- }
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/body-stopwords.php b/wp/wp-content/plugins/relevanssi-premium/premium/body-stopwords.php
deleted file mode 100644
index bd67b113..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/body-stopwords.php
+++ /dev/null
@@ -1,388 +0,0 @@
- 1 ) {
- foreach ( $terms as $term ) {
- $n++;
- $term = trim( $term );
- $success = relevanssi_add_single_body_stopword( $term );
- if ( $success ) {
- $s++;
- }
- }
- if ( $verbose ) {
- // translators: %1$d is the successful entries, %2$d is the total entries.
- printf( "", sprintf( esc_html__( 'Successfully added %1$d/%2$d terms to content stopwords!', 'relevanssi' ), intval( $s ), intval( $n ) ) );
- }
- } else {
- // Add to stopwords.
- $success = relevanssi_add_single_body_stopword( $term );
-
- $term = stripslashes( $term );
- $term = esc_html( $term );
- if ( $verbose ) {
- if ( $success ) {
- // Translators: %s is the stopword.
- printf( "", sprintf( esc_html__( "Term '%s' added to content stopwords!", 'relevanssi' ), esc_html( stripslashes( $term ) ) ) );
- } else {
- // Translators: %s is the stopword.
- printf( "", sprintf( esc_html__( "Couldn't add term '%s' to content stopwords!", 'relevanssi' ), esc_html( stripslashes( $term ) ) ) );
- }
- }
- }
-
- return $success;
-}
-
-/**
- * Adds a single stopword to the stopword table.
- *
- * @global object $wpdb The WP database interface.
- * @global array $relevanssi_variables The global Relevanssi variables.
- *
- * @param string $term The term to add.
- *
- * @return boolean True if success, false if not.
- */
-function relevanssi_add_single_body_stopword( $term ) {
- if ( empty( $term ) ) {
- return false;
- }
-
- $term = stripslashes( relevanssi_strtolower( $term ) );
- $stopwords = relevanssi_fetch_body_stopwords();
-
- if ( in_array( $term, $stopwords, true ) ) {
- return false;
- }
-
- $stopwords[] = $term;
-
- $success = relevanssi_update_body_stopwords( $stopwords );
-
- if ( ! $success ) {
- return false;
- }
-
- global $wpdb, $relevanssi_variables;
-
- relevanssi_delete_term_from_all_post_content( $term );
-
- // Remove all lines with all zeros, ie. no matches.
- $wpdb->query(
- 'DELETE FROM '
- . $relevanssi_variables['relevanssi_table'] // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- . ' WHERE content + title + comment + tag + link + author + category + excerpt + taxonomy + customfield + mysqlcolumn = 0'
- );
-
- return true;
-}
-
-/**
- * Deletes a term from all posts in the database, language considered.
- *
- * If Polylang or WPML are used, deletes the term only from the posts matching
- * the current language.
- *
- * @param string $term The term to delete.
- */
-function relevanssi_delete_term_from_all_post_content( $term ) {
- global $wpdb, $relevanssi_variables;
-
- if ( function_exists( 'pll_languages_list' ) ) {
- $term_id = relevanssi_get_language_term_taxonomy_id(
- relevanssi_get_current_language()
- );
-
- $wpdb->query(
- $wpdb->prepare(
- // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- "UPDATE {$relevanssi_variables['relevanssi_table']}
- SET content = 0
- WHERE term=%s
- AND doc IN (
- SELECT object_id
- FROM $wpdb->term_relationships
- WHERE term_taxonomy_id = %d
- )",
- $term,
- $term_id
- )
- );
-
- return;
- }
-
- if ( function_exists( 'icl_object_id' ) && ! function_exists( 'pll_is_translated_post_type' ) ) {
- $language = relevanssi_get_current_language( false );
- $wpdb->query(
- $wpdb->prepare(
- // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- "UPDATE {$relevanssi_variables['relevanssi_table']}
- SET content = 0
- WHERE term=%s
- AND doc IN (
- SELECT DISTINCT(element_id)
- FROM {$wpdb->prefix}icl_translations
- WHERE language_code = %s
- )",
- $term,
- $language
- )
- );
-
- return;
- }
-
- // No language defined, just remove from the index.
- $wpdb->query(
- $wpdb->prepare(
- 'UPDATE ' . $relevanssi_variables['relevanssi_table'] . ' SET content = 0 WHERE term=%s', // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- $term
- )
- );
-}
-
-/**
- * Removes all content stopwords in specific language.
- *
- * Empties the relevanssi_body_stopwords option for particular language.
- *
- * @param string $language The language code of stopwords. If empty, removes
- * the stopwords for the current language.
- */
-function relevanssi_remove_all_body_stopwords( $language = null ) {
- if ( ! $language ) {
- $language = relevanssi_get_current_language();
- }
-
- $stopwords = get_option( 'relevanssi_body_stopwords', array() );
- unset( $stopwords[ $language ] );
- $success = update_option( 'relevanssi_body_stopwords', $stopwords );
-
- if ( $success ) {
- printf(
- "",
- esc_html__( 'All content stopwords removed! Remember to re-index.', 'relevanssi' )
- );
- } else {
- printf(
- "",
- esc_html__( "There was a problem, and content stopwords couldn't be removed.", 'relevanssi' )
- );
- }
-}
-
-/**
- * Updates the current language content stopwords in the stopwords option.
- *
- * Fetches the stopwords option, replaces the current language stopwords with
- * the parameter array and updates the option.
- *
- * @param array $stopwords An array of stopwords.
- *
- * @return boolean The return value from update_option().
- */
-function relevanssi_update_body_stopwords( $stopwords ) {
- $current_language = relevanssi_get_current_language();
- $stopwords_option = get_option( 'relevanssi_body_stopwords', array() );
-
- $stopwords_option[ $current_language ] = implode( ',', array_filter( $stopwords ) );
- return update_option(
- 'relevanssi_body_stopwords',
- $stopwords_option
- );
-}
-
-/**
- * Removes a single content stopword.
- *
- * @param string $term The stopword to remove.
- * @param boolean $verbose If true, print out a notice. Default true.
- *
- * @return boolean True if success, false if not.
- */
-function relevanssi_remove_body_stopword( $term, $verbose = true ) {
- $stopwords = relevanssi_fetch_body_stopwords();
- $term = stripslashes( $term );
- $stopwords = array_filter(
- $stopwords,
- function( $stopword ) use ( $term ) {
- return $stopword !== $term;
- }
- );
-
- $success = relevanssi_update_body_stopwords( $stopwords );
-
- if ( $success ) {
- if ( $verbose ) {
- printf(
- "",
- sprintf(
- // Translators: %s is the stopword.
- esc_html__(
- "Term '%s' removed from content stopwords! Re-index to get it back to index.",
- 'relevanssi'
- ),
- esc_html( stripslashes( $term ) )
- )
- );
- }
- return true;
- } else {
- if ( $verbose ) {
- printf(
- "",
- sprintf(
- // Translators: %s is the stopword.
- esc_html__(
- "Couldn't remove term '%s' from content stopwords!",
- 'relevanssi'
- ),
- esc_html( stripslashes( $term ) )
- )
- );
- }
- return false;
- }
-}
-
-/**
- * Fetches the list of content stopwords.
- *
- * Gets the list of content stopwords from the options.
- *
- * @return array An array of stopwords.
- */
-function relevanssi_fetch_body_stopwords() {
- $current_language = relevanssi_get_current_language();
- $stopwords_array = get_option( 'relevanssi_body_stopwords', array() );
- $stopwords = isset( $stopwords_array[ $current_language ] ) ? $stopwords_array[ $current_language ] : '';
- $stopword_list = $stopwords ? explode( ',', $stopwords ) : array();
-
- return $stopword_list;
-}
-
-/**
- * Displays a list of body stopwords.
- *
- * Displays the list of body stopwords and gives the controls for adding new stopwords.
- */
-function relevanssi_show_body_stopwords() {
- printf(
- '%s
',
- esc_html__( 'Post content stopwords are like stopwords, but they are only applied to the post content. These words can be used for searching and will be found in post titles, custom fields and other indexed content – just not in the post body content. Sometimes a word can be very common, but also have a more specific meaning and use on your site, and making it a content stopword will make it easier to find the specific use cases.', 'relevanssi' )
- );
- ?>
-
-
-
-
-
- content
- + $match->title
- + $match->comment
- + $match->link
- + $match->author
- + $match->excerpt
- + $match->customfield
- + $match->mysqlcolumn
- + $match->tag
- + $match->taxonomy
- + $match->category;
- if ( (int) $match->content === (int) $sum ) {
- $match->weight = 0;
- }
- }
- return $match;
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/class-relevanssi-language-packs.php b/wp/wp-content/plugins/relevanssi-premium/premium/class-relevanssi-language-packs.php
deleted file mode 100644
index 49a5499d..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/class-relevanssi-language-packs.php
+++ /dev/null
@@ -1,190 +0,0 @@
-type = $type;
- $this->slug = $slug;
- $this->api_url = $api_url;
- }
-
- /**
- * Adds a new project to load translations for.
- *
- * @since 1.0.0
- */
- public function add_project() {
- if ( ! has_action( 'init', array( $this, 'register_clean_translations_cache' ) ) ) {
- add_action( 'init', array( $this, 'register_clean_translations_cache' ), 9999 );
- }
-
- /**
- * Short-circuits translations API requests for private projects.
- */
- add_filter(
- 'translations_api',
- function ( $result, $requested_type, $args ) {
- if ( $this->type . 's' === $requested_type && $this->slug === $args['slug'] ) {
- return $this->get_translations( $this->type, $args['slug'], $this->api_url );
- }
-
- return $result;
- },
- 10,
- 3
- );
-
- /**
- * Filters the translations transients to include the private plugin or theme.
- *
- * @see wp_get_translation_updates()
- */
- add_filter(
- 'site_transient_update_' . $this->type . 's',
- function ( $value ) {
- if ( ! $value ) {
- $value = new \stdClass();
- }
-
- if ( ! isset( $value->translations ) ) {
- $value->translations = array();
- }
-
- $translations = $this->get_translations( $this->type, $this->slug, $this->api_url );
-
- if ( ! isset( $translations['translations'] ) ) {
- return $value;
- }
-
- $installed_translations = wp_get_installed_translations( $this->type . 's' );
-
- foreach ( (array) $translations['translations'] as $translation ) {
- if ( in_array( $translation['language'], get_available_languages(), true ) ) {
- if ( isset( $installed_translations[ $this->slug ][ $translation['language'] ] ) && $translation['updated'] ) {
- $local = new DateTime( $installed_translations[ $this->slug ][ $translation['language'] ]['PO-Revision-Date'] );
- $remote = new DateTime( $translation['updated'] );
-
- if ( $local >= $remote ) {
- continue;
- }
- }
-
- $translation['type'] = $this->type;
- $translation['slug'] = $this->slug;
-
- $value->translations[] = $translation;
- }
- }
-
- return $value;
- }
- );
- }
-
- /**
- * Registers actions for clearing translation caches.
- *
- * @since 1.1.0
- */
- public function register_clean_translations_cache() {
- $clear_plugin_translations = function() {
- $this->clean_translations_cache( 'plugin' );
- };
- $clear_theme_translations = function() {
- $this->clean_translations_cache( 'theme' );
- };
-
- add_action( 'set_site_transient_update_plugins', $clear_plugin_translations );
- add_action( 'delete_site_transient_update_plugins', $clear_plugin_translations );
-
- add_action( 'set_site_transient_update_themes', $clear_theme_translations );
- add_action( 'delete_site_transient_update_themes', $clear_theme_translations );
- }
-
- /**
- * Clears existing translation cache for a given type.
- *
- * @since 1.1.0
- *
- * @param string $type Project type. Either plugin or theme.
- */
- public function clean_translations_cache( $type ) {
- $transient_key = 't15s-registry-' . $this->slug . '-' . $type;
- $translations = get_site_transient( $transient_key );
-
- if ( ! is_object( $translations ) ) {
- return;
- }
-
- /*
- * Don't delete the cache if the transient gets changed multiple times
- * during a single request. Set cache lifetime to maximum 15 seconds.
- */
- $cache_lifespan = 15;
- $time_not_changed = isset( $translations->_last_checked ) && ( time() - $translations->_last_checked ) > $cache_lifespan;
-
- if ( ! $time_not_changed ) {
- return;
- }
-
- delete_site_transient( $transient_key );
- }
-
- /**
- * Gets the translations for a given project.
- *
- * @since 1.0.0
- *
- * @param string $type Project type. Either plugin or theme.
- * @param string $slug Project directory slug.
- * @param string $url Full GlotPress API URL for the project.
- *
- * @return array Translation data.
- */
- public function get_translations( $type, $slug, $url ) {
- $transient_key = 't15s-registry-' . $slug . '-' . $type;
- $translations = get_site_transient( $transient_key );
-
- if ( ! is_object( $translations ) ) {
- $translations = new \stdClass();
- }
-
- if ( isset( $translations->{$slug} ) && is_array( $translations->{$slug} ) ) {
- return $translations->{$slug};
- }
-
- $result = json_decode(
- wp_remote_retrieve_body(
- wp_remote_get( $url, array( 'timeout' => 2 ) )
- ),
- true
- );
- if ( is_array( $result ) ) {
- $translations->{$slug} = $result;
- $translations->_last_checked = time();
-
- set_site_transient( $transient_key, $translations );
- return $result;
- }
-
- // Nothing found.
- return array();
- }
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/class-relevanssi-spellcorrector.php b/wp/wp-content/plugins/relevanssi-premium/premium/class-relevanssi-spellcorrector.php
deleted file mode 100644
index 8b2dd227..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/class-relevanssi-spellcorrector.php
+++ /dev/null
@@ -1,221 +0,0 @@
- with modifications by Mikko Saari
- * @see https://www.relevanssi.com/
- */
-
-/*
-***************************************************************************
-* Copyright (C) 2008 by Felipe Ribeiro *
-* felipernb@gmail.com *
-* http://www.feliperibeiro.com *
-* *
-* Permission is hereby granted, free of charge, to any person obtaining *
-* a copy of this software and associated documentation files (the *
-* "Software"), to deal in the Software without restriction, including *
-* without limitation the rights to use, copy, modify, merge, publish, *
-* distribute, sublicense, and/or sell copies of the Software, and to *
-* permit persons to whom the Software is furnished to do so, subject to *
-* the following conditions: *
-* *
-* The above copyright notice and this permission notice shall be *
-* included in all copies or substantial portions of the Software. *
-* *
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, *
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
-* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*
-* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR *
-* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
-* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR *
-* OTHER DEALINGS IN THE SOFTWARE. *
-***************************************************************************
-*/
-
-/**
- * Spell correcting feature.
- *
- * This class implements the Spell correcting feature, useful for the
- * "Did you mean" functionality on the search engine. Using a dictionary of
- * words extracted from the product catalog.
- *
- * Based on the concepts of Peter Norvig: http://norvig.com/spell-correct.html
- *
- * @author Felipe Ribeiro
- * @date September 18th, 2008
- */
-class Relevanssi_SpellCorrector {
- /**
- * Dictionary of words.
- *
- * @var array $dictionary Array of words, containing the dictionary.
- */
- private static $dictionary;
-
- /**
- * Reads a text and extracts the list of words.
- *
- * @param string $text Source text for the words.
- * @return array The list of words
- */
- private static function words( $text ) {
- $matches = array();
- $text = relevanssi_strtolower( $text );
- preg_match_all( '/[a-z]+/', $text, $matches );
- return $matches[0];
- }
-
- /**
- * Generates a list of possible "disturbances" on the passed string.
- *
- * @param string $word Word to disturb.
- *
- * @return array A list of variations.
- */
- private static function edits1( $word ) {
- /**
- * Filters the alphabet used for Did you mean suggestions.
- *
- * In order to use the Did you mean suggestions with non-Latin alphabets
- * (or even European languages with a wider range of characters than
- * English), Relevanssi needs to be provided with the alphabet used.
- *
- * @param string A string containing the alphabet as a string of
- * characters without spaces.
- */
- $alphabet = apply_filters(
- 'relevanssi_didyoumean_alphabet',
- 'abcdefghijklmnopqrstuvwxyzäöåü'
- );
- $alphabet = preg_split( '/(? $max ) {
- $max = $value;
- $word = $c;
- }
- }
- return $word;
- }
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/class-relevanssi-wp-auto-update.php b/wp/wp-content/plugins/relevanssi-premium/premium/class-relevanssi-wp-auto-update.php
deleted file mode 100644
index 45a54cce..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/class-relevanssi-wp-auto-update.php
+++ /dev/null
@@ -1,243 +0,0 @@
-current_version = $current_version;
- $this->update_path = $update_path;
- $this->plugin_slug = $plugin_slug;
- list ($t1, $t2) = explode( '/', $plugin_slug );
- $this->slug = str_replace( '.php', '', $t2 );
-
- if ( 'on' !== get_option( 'relevanssi_do_not_call_home' ) ) {
- // define the alternative API for updating checking.
- add_filter( 'pre_set_site_transient_update_plugins', array( &$this, 'check_update' ) );
-
- // Define the alternative response for information checking.
- add_filter( 'plugins_api', array( &$this, 'check_info' ), 10, 3 );
- }
- }
-
- /**
- * Adds our self-hosted autoupdate plugin to the filter transient.
- *
- * @param object $transient The filtered transient.
- *
- * @return object $transient
- */
- public function check_update( $transient ) {
- // Get the remote version.
- $info = $this->get_remote_information();
- $remote_version = 0;
- if ( isset( $info->new_version ) ) {
- $remote_version = $info->new_version;
- }
-
- // If a newer version is available, add the update.
- if ( version_compare( $this->current_version, $remote_version, '<' ) ) {
- $obj = new stdClass();
- $obj->slug = $this->slug;
- $obj->new_version = $remote_version;
- $obj->url = $info->package;
- $obj->package = $info->package;
- $obj->icons = $info->icons;
- $obj->banners = $info->banners;
-
- $transient->response[ $this->plugin_slug ] = $obj;
- } else {
- global $relevanssi_variables;
- // No update is available.
- $item = (object) array(
- 'id' => 'relevanssi-premium/relevanssi.php',
- 'slug' => 'relevanssi-premium',
- 'plugin' => 'relevanssi-premium/relevanssi.php',
- 'new_version' => $relevanssi_variables['plugin_version'],
- 'url' => '',
- 'package' => '',
- 'icons' => array(),
- 'banners' => array(),
- 'banners_rtl' => array(),
- 'tested' => '',
- 'requires_php' => '',
- 'compatibility' => new stdClass(),
- );
- $transient->no_update['relevanssi-premium/relevanssi.php'] = $item;
- }
-
- return $transient;
- }
-
- /**
- * Adds our self-hosted description to the filter.
- *
- * @param object $api Result object or array, should return false.
- * @param array $action Type of information request.
- * @param object $args Plugin API arguments.
- *
- * @return object $api New stdClass with plugin information on success, default response on failure.
- */
- public function check_info( $api, $action, $args ) {
- $plugin = ( 'plugin_information' === $action ) && isset( $args->slug ) && ( $this->slug === $args->slug );
-
- if ( $plugin ) {
- if ( $args->slug === $this->slug ) {
- $information = $this->get_remote_information();
- return $information;
- }
- }
- return $api;
- }
-
- /**
- * Returns the remote version.
- *
- * @return string $remote_version Version number at the remote end.
- */
- public function get_remote_version() {
- $api_key = get_network_option( null, 'relevanssi_api_key' );
- if ( ! $api_key ) {
- $api_key = get_option( 'relevanssi_api_key' );
- }
- $request = wp_remote_post(
- $this->update_path,
- array(
- 'body' => array(
- 'api_key' => $api_key,
- 'action' => 'version',
- ),
- )
- );
- if ( ! is_wp_error( $request ) || 200 === wp_remote_retrieve_response_code( $request ) ) {
- return $request['body'];
- }
- return false;
- }
-
- /**
- * Get information about the remote version.
- *
- * @return bool|object
- */
- public function get_remote_information() {
- $api_key = get_network_option( null, 'relevanssi_api_key' );
- if ( ! $api_key ) {
- $api_key = get_option( 'relevanssi_api_key' );
- }
- $request = wp_remote_post(
- $this->update_path,
- array(
- 'body' => array(
- 'api_key' => $api_key,
- 'action' => 'info',
- ),
- )
- );
- if ( ! is_wp_error( $request ) || 200 === wp_remote_retrieve_response_code( $request ) ) {
- if ( is_serialized( $request['body'] ) ) {
- return unserialize( $request['body'] ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions
- }
- }
- return false;
- }
-
- /**
- * Returns the status of the plugin licensing.
- *
- * @return boolean $remote_license
- */
- public function get_remote_license() {
- $api_key = get_network_option( null, 'relevanssi_api_key' );
- if ( ! $api_key ) {
- $api_key = get_option( 'relevanssi_api_key' );
- }
- $request = wp_remote_post(
- $this->update_path,
- array(
- 'body' => array(
- 'api_key' => $api_key,
- 'action' => 'license',
- ),
- )
- );
- if ( ! is_wp_error( $request ) || 200 === wp_remote_retrieve_response_code( $request ) ) {
- if ( 'false' === $request['body'] ) {
- return false;
- }
- return $request['body'];
- }
- return false;
- }
-}
-
-/**
- * Activates the auto update mechanism.
- *
- * @global array $relevanssi_variables Relevanssi global variables, used for plugin file name and version number.
- *
- * Hooks into 'init' filter hook to activate the auto update mechanism.
- */
-function relevanssi_activate_auto_update() {
- global $relevanssi_variables;
- $api_key = get_network_option( null, 'relevanssi_api_key' );
- if ( ! $api_key ) {
- $api_key = get_option( 'relevanssi_api_key' );
- }
- if ( 'su9qtC30xCLLA' === crypt( $api_key, 'suolaa' ) ) {
- $relevanssi_plugin_remote_path = 'https://www.relevanssi.com/update/update-development-2022.php';
- } else {
- $relevanssi_plugin_remote_path = 'https://www.relevanssi.com/update/update-2022.php';
- }
- $relevanssi_variables['autoupdate'] = new Relevanssi_WP_Auto_Update(
- $relevanssi_variables['plugin_version'],
- $relevanssi_plugin_remote_path,
- $relevanssi_variables['plugin_basename']
- );
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/class-relevanssi-wp-cli-command.php b/wp/wp-content/plugins/relevanssi-premium/premium/class-relevanssi-wp-cli-command.php
deleted file mode 100644
index 822e83fc..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/class-relevanssi-wp-cli-command.php
+++ /dev/null
@@ -1,732 +0,0 @@
-]
- * : What to index. No value means everything. Valid values are
- * "taxonomies" and "users" to index taxonomy terms and user profiles
- * respectively.
- * ---
- * options:
- * - post_types
- * - taxonomies
- * - users
- * ---
- *
- * [--post=]
- * : Post ID, if you only want to reindex one post.
- *
- * [--limit=]
- * : Number of posts you want to index at one go.
- *
- * [--extend=]
- * : If true, do not truncate the index or index users and taxonomies.
- * If false, first truncate the index, then index user profiles and
- * taxonomy terms.
- * ---
- * default: false
- * options:
- * - true
- * - false
- * ---
- *
- * [--index_debug=]
- * : If true, display debugging information when indexing a single post.
- * ---
- * default: false
- * options:
- * - true
- * - false
- * ---
- *
- * ## EXAMPLES
- *
- * wp relevanssi index
- * wp relevanssi index --post=1
- * wp relevanssi index --target=taxonomies
- * wp relevanssi index --target=users
- * wp relevanssi index --post=1 --index_debug=true
- * wp relevanssi index --limit=100
- * wp relevanssi index --extend=true --limit=100
- *
- * @param array $args Command arguments (not used).
- * @param array $assoc_args Command arguments as associative array.
- */
- public function index( $args, $assoc_args ) {
- remove_filter( 'relevanssi_search_ok', '__return_true' );
-
- $post_id = null;
- if ( isset( $assoc_args['post'] ) ) {
- $post_id = $assoc_args['post'];
- }
-
- $limit = null;
- if ( isset( $assoc_args['limit'] ) ) {
- $limit = $assoc_args['limit'];
- }
-
- $extend = false;
- if ( isset( $assoc_args['extend'] ) ) {
- $extend = $assoc_args['extend'];
- }
-
- $debug = false;
- if ( isset( $assoc_args['index_debug'] ) ) {
- $debug = $assoc_args['index_debug'];
- }
-
- $target = null;
- if ( isset( $assoc_args['target'] ) ) {
- $target = $assoc_args['target'];
- }
-
- if ( 'taxonomies' === $target ) {
- relevanssi_index_taxonomies();
- WP_CLI::success( 'Done!' );
- } elseif ( 'users' === $target ) {
- relevanssi_index_users();
- WP_CLI::success( 'Done!' );
- } elseif ( 'post_types' === $target ) {
- relevanssi_index_post_type_archives();
- WP_CLI::success( 'Done!' );
- } else {
- if ( isset( $post_id ) ) {
- $n = relevanssi_index_doc( $post_id, true, relevanssi_get_custom_fields(), true, $debug );
- switch ( $n ) {
- case -1:
- WP_CLI::error( "No such post: $post_id!" );
- break;
- case 'hide':
- WP_CLI::error( "Post $post_id is excluded from indexing." );
- break;
- case 'donotindex':
- WP_CLI::error( "Post $post_id is excluded from indexing by the relevanssi_do_not_index filter." );
- break;
- default:
- WP_CLI::success( "Reindexed post $post_id!" );
- }
- } else {
- $verbose = false;
- list( $complete, $n ) = relevanssi_build_index( $extend, $verbose, $limit );
-
- $completion = 'Index is not complete yet.';
- if ( $complete ) {
- $completion = 'Index is complete.';
- }
-
- WP_CLI::success( "$n posts indexed. $completion" );
- }
- }
- }
-
- /**
- * Refreshes the Relevanssi index.
- *
- * ## EXAMPLES
- *
- * wp relevanssi refresh
- *
- * @param array $args Command arguments (not used).
- * @param array $assoc_args Command arguments as associative array.
- */
- public function refresh( $args, $assoc_args ) {
- $index_post_types = get_option( 'relevanssi_index_post_types', '' );
- $index_statuses = apply_filters(
- 'relevanssi_valid_status',
- array( 'publish', 'private', 'draft', 'pending', 'future' )
- );
- $all_indexed_posts = get_posts(
- array(
- 'post_type' => $index_post_types,
- 'fields' => 'ids',
- 'numberposts' => -1,
- 'post_status' => $index_statuses,
- )
- );
-
- $found_posts = count( $all_indexed_posts );
- $progress = relevanssi_generate_progress_bar( 'Indexing posts', $found_posts );
-
- WP_CLI::log( 'Found ' . $found_posts . ' posts to refresh.' );
- foreach ( $all_indexed_posts as $post_id ) {
- relevanssi_index_doc( $post_id, true, relevanssi_get_custom_fields(), true, false );
- $progress->tick();
- }
- $progress->finish();
-
- WP_CLI::success( 'Index refresh done!' );
- }
-
- /**
- * Empties the Relevanssi index.
- *
- * ## EXAMPLES
- *
- * wp relevanssi truncate_index
- *
- * @param array $args Command arguments (not used).
- * @param array $assoc_args Command arguments as associative array.
- */
- public function truncate_index( $args, $assoc_args ) {
- $result = relevanssi_truncate_index();
- switch ( $result ) {
- case false:
- WP_CLI::error( "Couldn't truncate the Relevanssi database!" );
- break;
- default:
- WP_CLI::success( 'Relevanssi database truncated.' );
- }
- }
-
- /**
- * Adds a stopword to the list of stopwords and removes it from the index.
- *
- * ## OPTIONS
- *
- * ...
- * : Stopwords to add.
- *
- * ## EXAMPLES
- *
- * wp relevanssi add_stopword stop halt seis
- *
- * @param array $args Command arguments (not used).
- * @param array $assoc_args Command arguments as associative array.
- */
- public function add_stopword( $args, $assoc_args ) {
- if ( is_array( $args ) ) {
- foreach ( $args as $stopword ) {
- if ( relevanssi_add_single_stopword( $stopword ) ) {
- WP_CLI::success( "Stopword added: $stopword" );
- } else {
- WP_CLI::error( "Couldn't add stopword: $stopword!" );
- }
- }
- } else {
- WP_CLI::error( 'No stopwords listed.' );
- }
- }
-
- /**
- * Removes a stopword from the list of stopwords. Reindex to get it back to the index.
- *
- * ## OPTIONS
- *
- * ...
- * : Stopwords to remove.
- *
- * ## EXAMPLES
- *
- * wp relevanssi remove_stopword stop halt seis
- *
- * @param array $args Command arguments (not used).
- * @param array $assoc_args Command arguments as associative array.
- */
- public function remove_stopword( $args, $assoc_args ) {
- $verbose = false;
- if ( is_array( $args ) ) {
- foreach ( $args as $stopword ) {
- if ( relevanssi_remove_stopword( $stopword, $verbose ) ) {
- WP_CLI::success( "Stopword removed: $stopword" );
- } else {
- WP_CLI::error( "Couldn't remove stopword: $stopword!" );
- }
- }
- } else {
- WP_CLI::error( 'No stopwords listed.' );
- }
- }
-
- /**
- * Empties the Relevanssi logs.
- *
- * ## EXAMPLES
- *
- * wp relevanssi reset_log
- *
- * @param array $args Command arguments (not used).
- * @param array $assoc_args Command arguments as associative array.
- */
- public function reset_log( $args, $assoc_args ) {
- $verbose = false;
- $result = relevanssi_truncate_logs( $verbose );
- switch ( $result ) {
- case false:
- WP_CLI::error( "Couldn't reset the logs!" );
- break;
- default:
- WP_CLI::success( 'Relevanssi log truncated.' );
- }
- }
-
- /**
- * Shows common words in the index.
- *
- * ## OPTIONS
- *
- * [--limit=]
- * : How many words to show. Defaults to 25.
- *
- * ## EXAMPLES
- *
- * wp relevanssi common
- *
- * @param array $args Command arguments (not used).
- * @param array $assoc_args Command arguments as associative array.
- */
- public function common( $args, $assoc_args ) {
- $wp_cli = true;
- $limit = 25;
- if ( isset( $assoc_args['limit'] ) && is_numeric( $assoc_args['limit'] ) ) {
- $limit = $assoc_args['limit'];
- }
-
- $words = relevanssi_common_words( $limit, $wp_cli );
- if ( is_array( $words ) ) {
- foreach ( $words as $word ) {
- WP_CLI::log( sprintf( '%s (%d)', $word->term, $word->cnt ) );
- }
- } else {
- WP_CLI::error( 'No words returned.' );
- }
- }
-
- /**
- * Reads the attachment content for all attachments that haven't been read
- * yet.
- *
- * ## EXAMPLES
- *
- * wp relevanssi read_attachments
- *
- * @param array $args Command arguments (not used).
- * @param array $assoc_args Command arguments as associative array.
- */
- public function read_attachments( $args, $assoc_args ) {
- $attachment_posts = relevanssi_get_posts_with_attachments( 0 );
- WP_CLI::log( 'Found ' . count( $attachment_posts ) . ' attachments to read.' );
- foreach ( $attachment_posts as $post_id ) {
- $exit_and_die = false;
- WP_CLI::log( 'Reading attachment ' . $post_id . '...' );
- $response = relevanssi_index_pdf( $post_id, $exit_and_die );
- if ( $response['success'] ) {
- WP_CLI::log( "Successfully read the content for post $post_id." );
- } else {
- WP_CLI::log( "Couldn't read the post $post_id: " . $response['error'] );
- }
- }
- }
-
- /**
- * Removes all attachment content for all posts. Use with care! Does not
- * reindex the posts or remove them from the index.
- *
- * ## EXAMPLES
- *
- * wp relevanssi remove_attachment_content
- *
- * @param array $args Command arguments (not used).
- * @param array $assoc_args Command arguments as associative array (not
- * used).
- */
- public function remove_attachment_content( $args, $assoc_args ) {
- delete_post_meta_by_key( '_relevanssi_pdf_content' );
- delete_post_meta_by_key( '_relevanssi_pdf_error' );
-
- WP_CLI::log( 'Removed all attachment content.' );
- }
-
- /**
- * Removes all attachment errors for all posts.
- *
- * ## EXAMPLES
- *
- * wp relevanssi remove_attachment_errors
- *
- * @param array $args Command arguments (not used).
- * @param array $assoc_args Command arguments as associative array (not
- * used).
- */
- public function remove_attachment_errors( $args, $assoc_args ) {
- delete_post_meta_by_key( '_relevanssi_pdf_error' );
-
- WP_CLI::log( 'Removed all attachment errors.' );
- }
-
- /**
- * Regenerates the related posts for all posts.
- *
- * ## OPTIONS
- *
- * [--post_type=]
- * : A comma-separated list of post types to cover. If empty, generate the post
- * types chosen in the Related posts options, or if that's empty, all public post
- * types.
- *
- * [--post_objects=]
- * : If true, doesn't generate the related posts HTML code and instead stores the
- * post objects of the related posts in the transient. If false, the transient
- * will contain the generated related posts HTML code. Default false.
- * ---
- * default: false
- * options:
- * - true
- * - false
- * ---
- *
- * ## EXAMPLES
- *
- * wp relevanssi regenerate_related
- * wp relevanssi regenerate_related --post_type=post,page
- *
- * @param array $args Command arguments (not used).
- * @param array $assoc_args Command arguments as associative array.
- */
- public function regenerate_related( $args, $assoc_args ) {
- relevanssi_flush_related_cache();
-
- $settings = get_option( 'relevanssi_related_settings', relevanssi_related_default_settings() );
-
- if ( isset( $settings['enabled'] ) && 'off' === $settings['enabled'] ) {
- WP_CLI::error( 'Related posts feature is disabled.' );
- }
-
- $post_types = array();
- if ( isset( $settings['append'] ) && ! empty( $settings['append'] ) ) {
- // Related posts are automatically appended to certain post types, so
- // regenerate the related posts for those post types.
- $post_types = explode( ',', $settings['append'] );
- } else {
- // Nothing set, so regenerate for all public post types.
- $pt_args = array(
- 'public' => true,
- );
- $post_types = get_post_types( $pt_args, 'names' );
- }
-
- if ( isset( $assoc_args['post_type'] ) ) {
- $post_types = explode( ',', $assoc_args['post_type'] );
- }
-
- $post_objects = false;
- if ( isset( $assoc_args['post_objects'] ) ) {
- if ( filter_var( $assoc_args['post_objects'], FILTER_VALIDATE_BOOLEAN ) ) {
- $post_objects = true;
- }
- }
-
- $post_args = array(
- 'post_type' => $post_types,
- 'fields' => 'ids',
- 'posts_per_page' => -1,
- );
- $posts = get_posts( $post_args ); // Get all posts for the wanted post types.
- $count = count( $posts );
- WP_CLI::log( 'Regenerating related posts for post types ' . implode( ', ', $post_types ) . ", total $count posts." );
-
- $progress = relevanssi_generate_progress_bar( 'Regenerating', $count );
-
- foreach ( $posts as $post_id ) {
- relevanssi_related_posts( $post_id, $post_objects );
- $progress->tick();
- }
-
- $progress->finish();
- WP_CLI::success( 'Done!' );
- }
-
- /**
- * Lists pinned posts.
- *
- * ## OPTIONS
- *
- * [--format=]
- * : Format of the results. Possible values are "table", "json", "csv",
- * "yaml" and "count". Default: "table".
- *
- * [--type=]
- * : Type of the results. Possible values are "pinned", "unpinned", and
- * "both". Default: "both".
- *
- * ## EXAMPLES
- *
- * wp relevanssi list_pinned_posts
- * wp relevanssi list_pinned_posts --format=csv --type=pinned
- *
- * @param array $args Command arguments (not used).
- * @param array $assoc_args Command arguments as associative array.
- */
- public function list_pinned_posts( $args, $assoc_args ) {
- global $wpdb;
-
- $posts = $wpdb->get_results(
- "SELECT p.ID, p.post_title, pm.meta_key, pm.meta_value FROM $wpdb->posts AS p, $wpdb->postmeta AS pm
- WHERE p.ID = pm.post_id
- AND (
- pm.meta_key = '_relevanssi_pin'
- OR pm.meta_key = '_relevanssi_unpin'
- OR (
- pm.meta_key = '_relevanssi_pin_for_all' AND pm.meta_value = 'on'
- )
- )
- ORDER BY p.ID ASC"
- );
-
- $pinned = array();
- $unpinned = array();
-
- $format = $assoc_args['format'] ?? 'table';
- if ( 'ids' === $format ) {
- $format = 'table';
- }
-
- $include_pinned = true;
- $include_unpinned = true;
- if ( isset( $assoc_args['type'] ) ) {
- if ( 'pinned' === $assoc_args['type'] ) {
- $include_unpinned = false;
- } elseif ( 'unpinned' === $assoc_args['type'] ) {
- $include_pinned = false;
- }
- }
-
- foreach ( $posts as $post ) {
- if ( $include_pinned && '_relevanssi_pin_for_all' === $post->meta_key ) {
- $pinned[] = array(
- 'ID' => $post->ID,
- 'Title' => $post->post_title,
- 'Pinned keywords' => __( 'all keywords' ),
- );
- } elseif ( $include_pinned && '_relevanssi_pin' === $post->meta_key ) {
- $pinned[] = array(
- 'ID' => $post->ID,
- 'Title' => $post->post_title,
- 'Pinned keywords' => $post->meta_value,
- );
- } elseif ( $include_unpinned && '_relevanssi_unpin' === $post->meta_key ) {
- $unpinned[] = array(
- 'ID' => $post->ID,
- 'Title' => $post->post_title,
- 'Unpinned keywords' => $post->meta_value,
- );
- }
- }
-
- if ( $pinned ) {
- if ( 'table' === $format || 'count' === $format ) {
- $header = "\n" . __( 'Pinned posts' ) . ':';
- WP_CLI::log( $header );
- WP_CLI::log( str_pad( '', strlen( $header ), '=' ) );
- }
- WP_CLI\Utils\format_items( $format, $pinned, array( 'ID', 'Title', 'Pinned keywords' ) );
- }
-
- if ( $unpinned ) {
- if ( 'table' === $format || 'count' === $format ) {
- $header = "\n" . __( 'Unpinned posts' ) . ':';
- WP_CLI::log( $header );
- WP_CLI::log( str_pad( '', strlen( $header ), '=' ) );
- }
- WP_CLI\Utils\format_items( $format, $unpinned, array( 'ID', 'Title', 'Unpinned keywords' ) );
- }
-
- if ( ! $pinned && ! $unpinned ) {
- WP_CLI::log( __( 'No pinned posts found.' ) );
- }
- }
-
- /**
- * Lists posts in or not in the index.
- *
- * ## OPTIONS
- *
- * [--format=]
- * : Format of the results. Possible values are "table", "json", "csv",
- * "yaml", and "count". Default: "table".
- *
- * [--post_type=]
- * : Post type. Default: none, show all post types.
- *
- * [--type=]
- * : Type of the results. Possible values are "post", "term", and "user".
- * Default: "post".
- *
- * [--status=]
- * : Status of the results. Possible values are "indexed" and "unindexed".
- * Default: "indexed".
- *
- * ## EXAMPLES
- *
- * wp relevanssi list
- *
- * @param array $args Command arguments (not used).
- * @param array $assoc_args Command arguments as associative array.
- */
- public function list( $args, $assoc_args ) {
- global $wpdb, $relevanssi_variables;
-
- $status = $assoc_args['status'] ?? 'indexed';
- $post_type = $assoc_args['post_type'] ?? '';
- $type = $assoc_args['type'] ?? 'post';
-
- if ( 'indexed' === $status ) {
- if ( 'post' === $type ) {
- if ( $post_type ) {
- $post_type = "AND post_type = '" . esc_sql( $post_type ) . "'";
- }
- $posts = $wpdb->get_results(
- "SELECT DISTINCT(p.ID), p.post_title AS Title, p.post_type AS 'Type' FROM $wpdb->posts AS p, " .
- "{$relevanssi_variables['relevanssi_table']} AS r WHERE p.ID = r.doc $post_type " . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- 'ORDER BY p.ID ASC'
- );
- } elseif ( 'term' === $type ) {
- $posts = $wpdb->get_results(
- "SELECT DISTINCT(t.term_id) AS ID, t.name AS 'Name', tt.taxonomy AS 'Taxonomy', tt.count AS 'Count' FROM $wpdb->terms AS t, $wpdb->term_taxonomy AS tt, " .
- "{$relevanssi_variables['relevanssi_table']} AS r " . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- 'WHERE tt.term_id = t.term_id AND t.term_id = r.item AND tt.taxonomy = r.type
- ORDER BY t.term_id ASC'
- );
- } elseif ( 'user' === $type ) {
- $users_in_index = $wpdb->get_col(
- "SELECT DISTINCT(r.item) FROM {$relevanssi_variables['relevanssi_table']} AS r " . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- "WHERE r.type = 'user'"
- );
- $users = relevanssi_get_users(
- array(
- 'number' => -1,
- 'orderby' => 'ID',
- 'order' => 'ASC',
- 'include' => array_map( 'intval', $users_in_index ),
- )
- );
- foreach ( $users as $user ) {
- $posts[] = array(
- 'ID' => $user->ID,
- 'Name' => $user->display_name,
- 'Login' => $user->user_login,
- 'Roles' => implode( ', ', $user->roles ),
- );
- }
- }
- } elseif ( 'unindexed' === $status ) {
- if ( 'post' === $type ) {
- $indexed_post_types = str_replace( 'post.', 'p.', relevanssi_post_type_restriction() );
- if ( $post_type ) {
- $post_type = "AND post_type = '" . esc_sql( $post_type ) . "'";
- $indexed_post_types = '';
- }
-
- $posts = $wpdb->get_results(
- "SELECT DISTINCT(p.ID), p.post_title AS Title, p.post_type AS 'Type' FROM $wpdb->posts AS p " .
- "LEFT JOIN {$relevanssi_variables['relevanssi_table']} AS r ON p.ID = r.doc " . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- 'WHERE r.doc IS NULL ' .
- "$indexed_post_types $post_type " . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- 'ORDER BY p.ID ASC'
- );
- } elseif ( 'term' === $type ) {
- $taxonomies = get_option( 'relevanssi_index_terms' );
- if ( ! is_array( $taxonomies ) ) {
- $taxonomies = array();
- }
- $taxonomies = "'" . implode( "', '", $taxonomies ) . "'";
-
- $posts = $wpdb->get_results(
- "SELECT DISTINCT(t.term_id) AS ID, t.name AS 'Name', tt.taxonomy AS 'Taxonomy', tt.count AS 'Count' " .
- "FROM $wpdb->term_taxonomy AS tt, $wpdb->terms AS t " .
- "LEFT JOIN {$relevanssi_variables['relevanssi_table']} AS r " . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- 'ON t.term_id = r.item
- WHERE r.item IS NULL AND tt.term_id = t.term_id AND tt.taxonomy IN (' . $taxonomies . ') ' . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- 'ORDER BY t.term_id ASC'
- );
- } elseif ( 'user' === $type ) {
- $users_in_index = $wpdb->get_col(
- "SELECT DISTINCT(r.item) FROM {$relevanssi_variables['relevanssi_table']} AS r " . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- "WHERE r.type = 'user'"
- );
- $users = relevanssi_get_users(
- array(
- 'number' => -1,
- 'orderby' => 'ID',
- 'order' => 'ASC',
- 'exclude' => $users_in_index,
- )
- );
- foreach ( $users as $user ) {
- $posts[] = array(
- 'ID' => $user->ID,
- 'Name' => $user->display_name,
- 'Login' => $user->user_login,
- 'Roles' => implode( ', ', $user->roles ),
- );
- }
- }
- }
-
- $format = $assoc_args['format'] ?? 'table';
- if ( 'ids' === $format ) {
- $format = 'table';
- }
-
- if ( 'post' === $type ) {
- WP_CLI\Utils\format_items( $format, $posts, array( 'ID', 'Title', 'Type' ) );
- } elseif ( 'term' === $type ) {
- WP_CLI\Utils\format_items( $format, $posts, array( 'ID', 'Name', 'Taxonomy', 'Count' ) );
- } elseif ( 'user' === $type ) {
- WP_CLI\Utils\format_items( $format, $posts, array( 'ID', 'Name', 'Login', 'Roles' ) );
- } elseif ( 'post_type' === $type ) {
- WP_CLI\Utils\format_items( $format, $posts, array( 'Title', 'Type' ) );
- }
- }
-}
-
-WP_CLI::add_command( 'relevanssi', 'Relevanssi_WP_Cli_Command' );
-
-/**
- * Generates a WP CLI progress bar.
- *
- * If WP CLI is enabled, creates a progress bar using WP_CLI\Utils\make_progress_bar().
- *
- * @param string $title Title of the progress bar.
- * @param int $count Total count for the bar.
- */
-function relevanssi_generate_progress_bar( $title, $count ) {
- $progress = null;
- if ( defined( 'WP_CLI' ) && WP_CLI ) {
- $progress = WP_CLI\Utils\make_progress_bar( $title, $count );
- }
- return $progress;
-}
-
-add_filter( 'relevanssi_search_ok', 'relevanssi_cli_query_ok', 10, 2 );
-/**
- * Sets the relevanssi_search_ok true for searches.
- *
- * @param boolean $ok Whether it's ok to do a Relevanssi search or not.
- * @param WP_Query $query The query object.
- *
- * @return boolean Whether it's ok to do a Relevanssi search or not.
- */
-function relevanssi_cli_query_ok( $ok, $query ) {
- if ( $query->is_search() ) {
- return true;
- }
- return $ok;
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/click-tracking.php b/wp/wp-content/plugins/relevanssi-premium/premium/click-tracking.php
deleted file mode 100644
index 9a7018bb..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/click-tracking.php
+++ /dev/null
@@ -1,1006 +0,0 @@
-ID
- );
-
- if ( ! isset( $_REQUEST['_rt'] ) ) {
- return;
- }
- $rt = relevanssi_extract_rt( relevanssi_base64url_decode( $_REQUEST['_rt'] ) );
- if ( is_wp_error( $rt ) ) {
- return;
- }
-
- $wpdb->query(
- $wpdb->prepare(
- "INSERT IGNORE INTO {$relevanssi_variables['tracking_table']} " . // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
- '(`post_id`, `query`, `rank`, `page`, `timestamp`) VALUES (%d, %s, %d, %d, %s)',
- $post->ID,
- $rt['query'],
- $rt['rank'],
- $rt['page'],
- gmdate( 'c', $rt['time'] )
- )
- );
-}
-
-/**
- * Extracts the values from the _rt URL parameter.
- *
- * @param string $rt The URL parameter.
- *
- * @return array|WP_Error An array of values: 'rank', 'page', 'query', and
- * 'time'. Returns a WP_Error if the value doesn't explode into right number of
- * parts.
- */
-function relevanssi_extract_rt( string $rt ) {
- $rt_values = explode( '|', $rt );
- if ( count( $rt_values ) != 4 ) {
- return new WP_Error( 'invalid-rt', __( 'Invalid click tracking value format.', 'relevanssi' ) );
- }
- $rank = intval( $rt_values[0] );
- $page = intval( $rt_values[1] );
- $time = intval( $rt_values[3] );
- if ( $rank === 0 || $page === 0 || $time === 0 ) {
- return new WP_Error( 'invalid-rt', __( 'Invalid click tracking value format.', 'relevanssi' ) );
- }
- return array(
- 'rank' => $rank,
- 'page' => $page,
- 'query' => $rt_values[2],
- 'time' => $time,
- );
-}
-
-/**
- * Adds tracking information to a permalink.
- *
- * Called from the `relevanssi_permalink` filter function to add the tracking
- * data to the link.
- *
- * @param string $permalink The permalink to modify.
- * @param object $link_post A post object, default null in which case the global
- * $post is used.
- *
- * @global $relevanssi_tracking_positions An array of post ID => rank pairs used
- * to get the post rankings. If a post does not appear in this array, the
- * tracking data is not added to the permalink.
- * @global $relevanssi_tracking_permalink A cache of permalinks to avoid doing
- * work that is already done.
- *
- * @return string The modified permalink.
- */
-function relevanssi_add_tracking( string $permalink, $link_post = null ) : string {
- if ( 'on' !== get_option( 'relevanssi_click_tracking', 'off' ) ) {
- return $permalink;
- }
- if ( empty( get_search_query() ) ) {
- return $permalink;
- }
- if ( ! relevanssi_is_ok_to_log() ) {
- return $permalink;
- }
- if ( ! $link_post ) {
- global $post;
- $link_post = $post;
- }
- if ( ! relevanssi_is_front_page_id( isset( $link_post->ID ) ?? null ) ) {
- global $relevanssi_tracking_positions, $relevanssi_tracking_permalink;
- $position = $relevanssi_tracking_positions[ $link_post->ID ] ?? null;
-
- if ( ! $position ) {
- return $permalink;
- }
-
- if ( isset( $relevanssi_tracking_permalink[ $link_post->ID ] ) ) {
- return $relevanssi_tracking_permalink[ $link_post->ID ];
- }
-
- $page = get_query_var( 'paged' ) > 0 ? get_query_var( 'paged' ) : 1;
- $nonce = wp_create_nonce( 'relevanssi_click_tracking_' . $link_post->ID );
- $query = relevanssi_strtolower( str_replace( '|', ' ', get_search_query() ) );
- $time = time();
- $value = "$position|$page|$query|$time";
-
- $permalink = esc_attr(
- add_query_arg(
- array(
- '_rt' => relevanssi_base64url_encode( $value ),
- '_rt_nonce' => $nonce,
- ),
- $permalink
- )
- );
-
- $relevanssi_tracking_permalink[ $link_post->ID ] = $permalink;
- }
-
- return $permalink;
-}
-
-/**
- * URL-friendly base64 encode.
- *
- * @param string $data String to encode.
- * @return string Encoded string.
- */
-function relevanssi_base64url_encode( string $data ) : string {
- return rtrim(
- strtr(
- base64_encode( $data ), // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions
- '+/',
- '-_'
- ),
- '='
- );
-}
-
-/**
- * URL-friendly base64 decode.
- *
- * @param string $data String to decode.
- * @return string Decoded string.
- */
-function relevanssi_base64url_decode( string $data ) : string {
- return base64_decode( // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions
- strtr( $data, '-_', '+/' )
- );
-}
-
-/**
- * Records the ranking positions for the posts found.
- *
- * Runs as the last thing (at PHP_INT_MAX) on the `relevanssi_hits_filter` hook
- * to record the ranking positions of each post.
- *
- * @global array $relevanssi_tracking_positions An array of post ID => rank
- * pairs.
- *
- * @param array $hits The hits found.
- *
- * @return array The hits found, unmodified.
- */
-function relevanssi_record_positions( array $hits ) : array {
- global $relevanssi_tracking_positions;
-
- $position = 0;
- foreach ( $hits[0] as $hit ) {
- $position++;
- $hit = relevanssi_get_an_object( $hit )['object'];
- if ( ! $hit ) {
- continue;
- }
- if ( $hit->ID > 0 ) {
- $relevanssi_tracking_positions[ $hit->ID ] = $position;
- } elseif ( isset( $hit->term_id ) ) {
- $relevanssi_tracking_positions[ $hit->post_type . '_' . $hit->term_id ] = $position;
- } elseif ( isset( $hit->user_id ) ) {
- $relevanssi_tracking_positions[ 'user_' . $hit->user_id ] = $position;
- }
- }
-
- return $hits;
-}
-
-/**
- * Removes the undisplayed posts from the $relevanssi_tracking_positions array.
- *
- * Goes through the $relevanssi_tracking_positions array and only keeps the
- * posts that appear on the current page of results.
- *
- * @global array $relevanssi_tracking_positions An array of post ID => rank
- * pairs.
- *
- * @param array $hits The hits displayed.
- *
- * @return array The hits displayed, unmodified.
- */
-function relevanssi_current_page_hits( array $hits ) : array {
- global $relevanssi_tracking_positions;
-
- $all_positions = $relevanssi_tracking_positions;
- $relevanssi_tracking_positions = array();
-
- foreach ( $hits as $hit ) {
- $hit = relevanssi_get_an_object( $hit )['object'];
-
- if ( $hit->ID > 0 ) {
- $relevanssi_tracking_positions[ $hit->ID ] = $all_positions[ $hit->ID ];
- } elseif ( isset( $hit->term_id ) ) {
- $id = $hit->post_type . '_' . $hit->term_id;
-
- $relevanssi_tracking_positions[ $id ] = $all_positions[ $id ];
- } elseif ( isset( $hit->user_id ) ) {
- $id = 'user_' . $hit->user_id;
-
- $relevanssi_tracking_positions[ $id ] = $all_positions[ $id ];
- }
- }
-
- return $hits;
-}
-
-/**
- * Creates the tracking table.
- *
- * @param string $charset_collate Character set collation.
- *
- * @return void
- */
-function relevanssi_create_tracking_table( string $charset_collate ) {
- global $relevanssi_variables;
-
- $sql = 'CREATE TABLE ' . $relevanssi_variables['tracking_table'] . ' ' .
- "(`id` int(11) NOT NULL AUTO_INCREMENT,
- `post_id` int(11) NOT NULL DEFAULT '0',
- `query` varchar(200) NOT NULL,
- `rank` int(11) NOT NULL DEFAULT '0',
- `page` int(11) NOT NULL DEFAULT '0',
- `timestamp` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY id (id),
- UNIQUE INDEX post_id_timestamp (post_id, timestamp)) $charset_collate";
-
- dbDelta( $sql );
-}
-
-/**
- * Generates an array with date indices and 0 values for each date.
- *
- * Uses the `relevanssi_trim_click_logs` option to determine the length of the
- * date range.
- *
- * @param string $type The type of date count: 'clicks', 'log' or 'both'.
- *
- * @return array An array of 'Y-m-d' date indices.
- */
-function relevanssi_default_date_count( string $type ) : array {
- global $wpdb, $relevanssi_variables;
-
- if ( 'clicks' === $type ) {
- $amount_of_days = get_option( 'relevanssi_trim_click_logs', 90 );
- }
- if ( 'log' === $type ) {
- $amount_of_days = get_option( 'relevanssi_trim_logs', 30 );
- if ( 0 === $amount_of_days ) {
- $amount_of_days = abs( $wpdb->get_var( "SELECT TIMESTAMPDIFF(DAY, NOW(), time) FROM {$relevanssi_variables['log_table']} ORDER BY time ASC LIMIT 1" ) ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared.
- }
- }
- if ( 'both' === $type ) {
- $click_days = get_option( 'relevanssi_trim_click_logs', 90 );
- $log_days = get_option( 'relevanssi_trim_logs', 30 );
-
- if ( '0' === $log_days ) {
- $log_days = abs( $wpdb->get_var( "SELECT TIMESTAMPDIFF(DAY, NOW(), time) FROM {$relevanssi_variables['log_table']} ORDER BY time ASC LIMIT 1" ) ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared.
- }
- $amount_of_days = max( $click_days, $log_days );
- }
- $date_counts = array();
- $start_date = gmdate( 'Y-m-d', strtotime( intval( $amount_of_days ) . ' days ago' ) );
- $end_date = gmdate( 'Y-m-d' );
-
- while ( strtotime( $start_date ) <= strtotime( $end_date ) ) {
- $date_counts[ $start_date ] = 0;
-
- $start_date = gmdate(
- 'Y-m-d',
- strtotime( '+1 days', strtotime( $start_date ) )
- );
- }
-
- return $date_counts;
-}
-
-/**
- * Determines what happens when a request for a post insights screen is made.
- *
- * @param array $request The $_REQUEST array to dig for parameters.
- *
- * @return bool True, if a screen was displayed and false if not.
- */
-function relevanssi_handle_insights_screens( array $request ) : bool {
- if ( isset( $request['insights'] ) ) {
- if ( isset( $request['action'] ) && isset( $request['query'] ) && 'delete_query' === $request['action'] ) {
- check_admin_referer( 'relevanssi_delete_query' );
- relevanssi_delete_query( $request['query'] );
- }
- if ( isset( $request['action'] ) && isset( $request['query'] ) && 'delete_query_from_log' === $request['action'] ) {
- check_admin_referer( 'relevanssi_delete_query' );
- relevanssi_delete_query_from_log( $request['query'] );
- }
- relevanssi_show_insights( stripslashes( $request['insights'] ) );
- return true;
- }
-
- if ( isset( $request['post_insights'] ) ) {
- relevanssi_show_post_insights( $request['post_insights'] );
- return true;
- }
-
- return false;
-}
-
-/**
- * Deletes a query from the click tracking database.
- *
- * @param string $query The query to delete.
- */
-function relevanssi_delete_query( string $query ) {
- global $wpdb, $relevanssi_variables;
-
- $deleted = $wpdb->query(
- $wpdb->prepare(
- "DELETE FROM {$relevanssi_variables['tracking_table']} WHERE query = %s", // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
- stripslashes( $query )
- )
- );
-
- if ( $deleted ) {
- printf(
- "",
- sprintf(
- // Translators: %s is the stopword.
- esc_html__(
- "The query '%s' deleted from the click tracking log.",
- 'relevanssi'
- ),
- esc_html( stripslashes( $query ) )
- )
- );
- } else {
- printf(
- "",
- sprintf(
- // Translators: %s is the stopword.
- esc_html__(
- "Couldn't remove the query '%s' from the click tracking log.",
- 'relevanssi'
- ),
- esc_html( stripslashes( $query ) )
- )
- );
-
- }
-}
-
-/**
- * Displays the search query insights screen.
- *
- * Prints out the display for a single search query insights screen.
- *
- * @param string $query The search query.
- */
-function relevanssi_show_insights( string $query ) {
- global $wpdb, $relevanssi_variables;
-
- ?>
-
- ' .
- // Translators: %s is the search query string.
- esc_html__( 'Search insights for %s', 'relevanssi' ) .
- '',
- esc_html( '"' . $query . '"' )
- );
-
- $results = $wpdb->get_results(
- $wpdb->prepare(
- 'SELECT * FROM ' . $relevanssi_variables['tracking_table'] // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
- . ' WHERE query = %s',
- $query
- )
- );
-
- $posts = array();
- $post_average_rank = array();
- $post_average_page = array();
- $date_counts = relevanssi_default_date_count( 'both' );
- $oldest_date = array_keys( $date_counts )[0];
- foreach ( $results as $row ) {
- if ( $row->timestamp < $oldest_date ) {
- continue;
- }
- relevanssi_increase_value( $posts[ $row->post_id ] );
- relevanssi_increase_value( $post_average_rank[ $row->post_id ], $row->rank );
- relevanssi_increase_value( $post_average_page[ $row->post_id ], $row->page );
- relevanssi_increase_value( $date_counts[ gmdate( 'Y-m-d', strtotime( $row->timestamp ) ) ] );
- }
-
- relevanssi_average_array( $post_average_rank, $posts );
- relevanssi_average_array( $post_average_page, $posts );
-
- $results = $wpdb->get_results(
- $wpdb->prepare(
- 'SELECT * FROM ' . $relevanssi_variables['log_table'] // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
- . ' WHERE query = %s',
- $query
- )
- );
-
- $date_numbers = relevanssi_default_date_count( 'both' );
-
- foreach ( $results as $row ) {
- relevanssi_increase_value( $date_numbers[ gmdate( 'Y-m-d', strtotime( $row->time ) ) ] );
- }
- ksort( $date_numbers );
- arsort( $posts );
-
- $dates_array = $date_counts + $date_numbers;
- ksort( $dates_array );
- $dates = array_map(
- function( $v ) {
- return gmdate( 'M j', strtotime( $v ) );
- },
- array_keys( $dates_array )
- );
-
- relevanssi_create_line_chart(
- $dates,
- array(
- __( '# of Searches', 'relevanssi' ) => array_values( $date_numbers ),
- __( '# of Clicks', 'relevanssi' ) => array_values( $date_counts ),
- )
- );
- if ( count( $posts ) > 0 ) {
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- $count ) {
- $insights_url = relevanssi_get_insights_url( intval( $post_id ) );
- $insights = sprintf( "%s ", esc_url( $insights_url ), get_the_title( $post_id ) );
-
- $link = get_permalink( $post_id );
- $edit = get_edit_post_link( $post_id );
- ?>
-
-
- (
- | )
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ' .
- // Translators: %s is the search query string.
- esc_html__( 'Search insights for %s', 'relevanssi' ) .
- '',
- esc_html( '"' . $title . '"' )
- );
-
- $link = get_permalink( $post_id );
- $edit = get_edit_post_link( $post_id );
- ?>
-
- |
-
- get_results(
- $wpdb->prepare(
- 'SELECT * FROM ' . $relevanssi_variables['tracking_table'] // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
- . ' WHERE post_id = %d',
- $post_id
- )
- );
-
- $queries = array();
- $query_average_rank = array();
- $query_average_page = array();
- $date_counts = relevanssi_default_date_count( 'clicks' );
-
- foreach ( $results as $row ) {
- relevanssi_increase_value( $queries[ $row->query ] );
- relevanssi_increase_value( $query_average_rank[ $row->query ], $row->rank );
- relevanssi_increase_value( $query_average_page[ $row->query ], $row->page );
- relevanssi_increase_value( $date_counts[ gmdate( 'Y-m-d', strtotime( $row->timestamp ) ) ] );
- }
-
- relevanssi_average_array( $query_average_rank, $queries );
- relevanssi_average_array( $query_average_page, $queries );
-
- arsort( $queries );
-
- $dates = array_map(
- function( $v ) {
- return gmdate( 'M j', strtotime( $v ) );
- },
- array_keys( $date_counts )
- );
-
- relevanssi_create_line_chart(
- $dates,
- array(
- __( '# of Clicks', 'relevanssi' ) => array_values( $date_counts ),
- )
- );
-
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- $count ) {
- $insights_url = relevanssi_get_insights_url( $query );
- $insights = sprintf( "%s ", esc_url( $insights_url ), $query );
- ?>
-
-
-
-
-
-
-
-
-
- get_results(
- 'SELECT LOWER(query) AS query, COUNT(*) AS count '
- . "FROM {$relevanssi_variables['tracking_table']} " // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
- . 'GROUP BY query'
- );
-
- $relevanssi_variables['query_clicks'] = array_combine(
- wp_list_pluck( $data, 'query' ),
- wp_list_pluck( $data, 'count' )
- );
-
- return $relevanssi_variables['query_clicks'][ $query ] ?? 0;
-}
-
-/**
- * Prints out the user interface for setting the click tracking options.
- */
-function relevanssi_click_tracking_interface() {
- $click_tracking = relevanssi_check( get_option( 'relevanssi_click_tracking' ) );
- $trim_click_logs = get_option( 'relevanssi_trim_click_logs' );
-
- ?>
-
-
-
-
-
-
-
- get_var(
- $wpdb->prepare(
- 'SELECT COUNT(*) FROM ' . $click_table . ' ' . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- 'WHERE timestamp >= %s AND timestamp <= %s',
- $from . ' 00:00:00',
- $to . ' 23:59:59'
- )
- );
-
- $click_ratio = 0;
- if ( $total > 0 ) {
- $click_ratio = round( 100 * $total_clicks / $total, 1 );
- }
- ?>
-
-
-
- get_results(
- $wpdb->prepare(
- "SELECT post_id, COUNT(*) AS hits, AVG(`rank`) AS average
- FROM $click_table " . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- 'WHERE timestamp >= %s AND timestamp <= %s
- GROUP BY post_id ORDER BY hits DESC',
- $from . ' 00:00:00',
- $to . ' 23:59:59'
- )
- );
-
- $top_ten = array_slice( $results, 0, 10 );
-
- $list = array();
- foreach ( $top_ten as $result ) {
- $title = get_the_title( $result->post_id );
- $insights_url = relevanssi_get_insights_url( intval( $result->post_id ) );
-
- $list[] = ''
- . wp_kses_post( $title ) . ' (' . intval( $result->hits )
- . ') ';
- }
-
- if ( count( $list ) > 0 ) {
- ?>
-
-
-
- ' . implode( "\n", $list ) . ' '; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
- $something_printed = true;
- ?>
-
- average - $a->average;
- }
- );
-
- $top_ten = array_slice( $results, 0, 10 );
-
- $list = array();
- foreach ( $top_ten as $result ) {
- $title = get_the_title( $result->post_id );
- $insights_url = relevanssi_get_insights_url( intval( $result->post_id ) );
-
- $list[] = '' . wp_kses_post( $title ) . ' ('
- . round( $result->average, 0 ) . ') ';
- }
- if ( count( $list ) > 0 ) {
- ?>
-
-
-
- ' . implode( "\n", $list ) . ' '; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
- $something_printed = true;
- ?>
-
- get_results(
- $wpdb->prepare(
- "SELECT query, COUNT(DISTINCT(post_id)) AS posts
- FROM $click_table " . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- 'WHERE timestamp >= %s AND timestamp <= %s
- GROUP BY query ORDER BY posts DESC LIMIT 10',
- $from . ' 00:00:00',
- $to . ' 23:59:59'
- )
- );
-
- $list = array();
- foreach ( $results as $result ) {
- if ( $result->posts < 3 ) {
- continue;
- }
- $insights_url = relevanssi_get_insights_url( $result->query );
-
- $list[] = ''
- . esc_html( $result->query ) . ' ('
- // Translators: %1$s is the number of posts.
- . sprintf( __( '%1$s posts', 'relevanssi' ), intval( $result->posts ) )
- . ') ';
- }
- if ( count( $list ) > 0 ) {
- ?>
-
- ' . implode( "\n", $list ) . ''; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
- $something_printed = true;
- }
-
- if ( ! $something_printed ) {
- ?>
-
-
-
- query.
- *
- * @return string The HTML link tag to link to the insights page.
- */
-function relevanssi_insights_link( $query ) : string {
- global $relevanssi_variables;
- $insights_url = admin_url( 'admin.php?page=' . rawurlencode( $relevanssi_variables['plugin_basename'] ) )
- . '&insights=' . rawurlencode( $query->query );
- $insights = sprintf( "%s ", esc_url( $insights_url ), esc_html( relevanssi_hyphenate( $query->query ) ) );
- return $insights;
-}
-
-/**
- * Trims Relevanssi click tracking table.
- *
- * Trims Relevanssi click tracking table, using the day interval setting from
- * 'relevanssi_trim_click_logs'.
- *
- * @global object $wpdb The WordPress database interface.
- * @global array $relevanssi_variables The global Relevanssi variables, used
- * for database table names.
- *
- * @return int|bool Number of rows deleted, or false on error.
- */
-function relevanssi_trim_click_logs() {
- global $wpdb, $relevanssi_variables;
- $interval = intval( get_option( 'relevanssi_trim_click_logs' ) );
- return $wpdb->query(
- $wpdb->prepare(
- 'DELETE FROM ' . $relevanssi_variables['tracking_table'] . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- ' WHERE timestamp < TIMESTAMP(DATE_SUB(NOW(), INTERVAL %d DAY))',
- $interval
- )
- );
-}
-
-/**
- * Sets up the Relevanssi click tracking log trimming action.
- */
-function relevanssi_schedule_click_tracking_trim() {
- if ( get_option( 'relevanssi_trim_click_logs' ) > 0 ) {
- if ( ! wp_next_scheduled( 'relevanssi_trim_click_logs' ) ) {
- wp_schedule_event( time(), 'daily', 'relevanssi_trim_click_logs' );
- }
- } else {
- if ( wp_next_scheduled( 'relevanssi_trim_click_logs' ) ) {
- wp_clear_scheduled_hook( 'relevanssi_trim_click_logs' );
- }
- }
-}
-
-/**
- * Prints out the Relevanssi click tracking log as a CSV file.
- *
- * Exports the whole Relevanssi click tracking log as a CSV file.
- *
- * @uses relevanssi_output_exported_log
- */
-function relevanssi_export_click_log() {
- global $wpdb, $relevanssi_variables;
-
- $data = $wpdb->get_results( 'SELECT * FROM ' . $relevanssi_variables['tracking_table'], ARRAY_A ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
-
- relevanssi_output_exported_log(
- 'relevanssi_click_log.csv',
- $data,
- __( 'No search clicks logged.', 'relevanssi' )
- );
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/common.php b/wp/wp-content/plugins/relevanssi-premium/premium/common.php
deleted file mode 100644
index 57b3a1e2..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/common.php
+++ /dev/null
@@ -1,1230 +0,0 @@
-Related Searches:' );
- *
- * @global $wpdb The WordPress database interface.
- * @global $relevanssi_variables The global Relevanssi variables, used for the database table names.
- *
- * @param string $query The search query (get_search_query() is a good way to get the current query).
- * @param string $pre What is printed before the results, default ''.
- * @param string $sep The separator between individual results, default ' '.
- * @param string $post What is printed after the results, default ' '.
- * @param int $number Number of related searches to show, default 5.
- *
- * @author John Blackbourn
- */
-function relevanssi_related( $query, $pre = '', $number = 5 ) {
- global $wpdb, $relevanssi_variables;
-
- $output = array();
- $related = array();
- $tokens = relevanssi_tokenize( $query, true, -1, 'search_query' );
- if ( empty( $tokens ) ) {
- return;
- }
-
- $query_slug = sanitize_title( $query );
- $related = get_transient( 'related-' . $query_slug );
- if ( ! $related ) {
- /**
- * Loop over each token in the query and return logged queries which:
- *
- * - Contain a matching token
- * - Don't match the query or the token exactly
- * - Have at least 2 hits
- * - Have been queried at least twice
- *
- * then order by most queried with a max of $number results.
- */
- foreach ( $tokens as $token => $count ) {
- $escaped_token = '%' . $wpdb->esc_like( "$token" ) . '%';
- $log_table = $relevanssi_variables['log_table'];
- $results = $wpdb->get_results(
- $wpdb->prepare(
- 'SELECT query ' .
- "FROM $log_table " . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- 'WHERE query LIKE %s
- AND query NOT IN (%s, %s)
- AND hits > 1
- GROUP BY query
- HAVING count(query) > 1
- ORDER BY count(query) DESC
- LIMIT %d',
- $escaped_token,
- $token,
- $query,
- $number
- )
- );
- foreach ( $results as $result ) {
- $related[] = $result->query;
- }
- }
- if ( empty( $related ) ) {
- return;
- } else {
- set_transient( 'related-' . $query_slug, $related, 60 * 60 * 24 * 7 );
- }
- }
-
- // Order results by most matching tokens then slice to a maximum of $number results.
- $related = array_keys( array_count_values( $related ) );
- $related = array_slice( $related, 0, $number );
- foreach ( $related as $rel ) {
- $url = add_query_arg(
- array(
- 's' => rawurlencode( $rel ),
- ),
- home_url()
- );
- $rel = esc_attr( $rel );
- $output[] = "$rel ";
- }
-
- echo $pre . implode( $sep, $output ) . $post; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
-}
-
-/**
- * Replaces get_posts() in a way that handles users and taxonomy terms.
- *
- * Custom-made get_posts() replacement that creates post objects for users and
- * taxonomy terms. For regular posts, the function uses get_posts() and a
- * caching mechanism.
- *
- * @global array $relevanssi_post_array The global Relevanssi post array used as
- * a cache.
- *
- * @param int|string $id The post ID to fetch. If the ID is a string and
- * begins with 'u_', it's considered a user ID and if it begins with '**', it's
- * considered a taxonomy term.
- * @param int $blog_id The blog ID, used to make caching work in
- * multisite environment. Defaults to -1, which means the blog id is not used.
- *
- * @return object $post The post object for the post ID.
- */
-function relevanssi_premium_get_post( $id, int $blog_id = -1 ) {
- global $relevanssi_post_array;
- $type = substr( $id, 0, 2 );
- switch ( $type ) {
- case 'u_':
- list( , $id ) = explode( '_', $id );
-
- $user = get_userdata( $id );
- $post = new stdClass();
- $post->post_title = $user->display_name;
- $post->post_content = $user->description;
- $post->post_type = 'user';
- $post->ID = $id;
- $post->relevanssi_link = get_author_posts_url( $id );
- $post->post_status = 'publish';
- $post->post_date = gmdate( 'Y-m-d H:i:s' );
- $post->post_author = 0;
- $post->post_name = '';
- $post->post_excerpt = '';
- $post->comment_status = '';
- $post->ping_status = '';
- $post->user_id = $id;
-
- /**
- * Filters the user profile post object.
- *
- * After a post object is created from the user profile, it is
- * passed through this filter so it can be modified.
- *
- * @param object $post The post object.
- */
- $post = apply_filters( 'relevanssi_user_profile_to_post', $post );
- break;
- case 'p_':
- list( , $id ) = explode( '_', $id );
-
- $post_type_name = relevanssi_get_post_type_by_id( $id );
- $post_type = get_post_type_object( $post_type_name );
- $post = new stdClass();
- $post->post_title = $post_type->label;
- $post->post_content = $post_type->description;
- $post->post_type = 'post_type';
- $post->ID = $id;
- $post->relevanssi_link = get_post_type_archive_link( $post_type_name );
- $post->post_status = 'publish';
- $post->post_date = gmdate( 'Y-m-d H:i:s' );
- $post->post_author = 0;
- $post->post_name = '';
- $post->post_excerpt = '';
- $post->comment_status = '';
- $post->ping_status = '';
- $post->post_type_id = $post_type_name;
-
- /**
- * Filters the post type post object.
- *
- * After a post object is created from a post type, it is passed
- * through this filter so it can be modified.
- *
- * @param stdClass $post The post object.
- */
- $post = apply_filters( 'relevanssi_post_type_to_post', $post );
- break;
- case '**':
- list( , $taxonomy, $id ) = explode( '**', $id );
-
- $term = get_term( $id, $taxonomy );
- if ( is_wp_error( $term ) ) {
- return new WP_Error( 'term_not_found', "Taxonomy term wasn't found." );
- }
- $post = new stdClass();
- $post->post_title = $term->name;
- $post->post_content = $term->description;
- $post->post_type = $taxonomy;
- $post->ID = -1;
- $post->post_status = 'publish';
- $post->post_date = gmdate( 'Y-m-d H:i:s' );
- $post->relevanssi_link = get_term_link( $term, $taxonomy );
- $post->post_author = 0;
- $post->post_name = '';
- $post->post_excerpt = '';
- $post->comment_status = '';
- $post->ping_status = '';
- $post->term_id = $id;
- $post->post_parent = $term->parent;
-
- /**
- * Filters the taxonomy term post object.
- *
- * After a post object is created from the taxonomy term, it is
- * passed through this filter so it can be modified.
- *
- * @param Object $post The post object.
- */
- $post = apply_filters( 'relevanssi_taxonomy_term_to_post', $post );
- break;
- default:
- $cache_id = $id;
- if ( -1 !== $blog_id ) {
- $cache_id = $blog_id . '|' . $id;
- }
- if ( isset( $relevanssi_post_array[ $cache_id ] ) ) {
- // Post exists in the cache.
- $post = $relevanssi_post_array[ $cache_id ];
- } else {
- $post = get_post( $id );
-
- $relevanssi_post_array[ $cache_id ] = $post;
- }
- if (
- 'on' === get_option( 'relevanssi_link_pdf_files' )
- && ! empty( $post->post_mime_type )
- ) {
- /**
- * Filters the URL to the attachment file.
- *
- * If you set the attachment indexing to index attachments that
- * are stored outside the WP attachment system, use this filter
- * to provide a link to the attachment.
- *
- * @param string The URL to the attachment file.
- * @param int The attachment post ID number.
- */
- $post->relevanssi_link = apply_filters(
- 'relevanssi_get_attachment_url',
- wp_get_attachment_url( $post->ID ),
- $post->ID
- );
- }
- }
- return $post;
-}
-
-/**
- * Returns a list of indexed taxonomies.
- *
- * This will also include "user", if user profiles are indexed, and "post_type", if
- * post type archives are indexed.
- *
- * @return array $non_post_post_types_array An array of taxonomies Relevanssi is set
- * to index (and "user" or "post_type").
- */
-function relevanssi_get_non_post_post_types() {
- // These post types are not posts, ie. they are taxonomy terms and user profiles.
- $non_post_post_types_array = array();
- if ( get_option( 'relevanssi_index_taxonomies' ) ) {
- $taxonomies = get_option( 'relevanssi_index_terms' );
- if ( is_array( $taxonomies ) ) {
- $non_post_post_types_array = $taxonomies;
- }
- }
- if ( get_option( 'relevanssi_index_users' ) ) {
- $non_post_post_types_array[] = 'user';
- }
- if ( get_option( 'relevanssi_index_post_type_archives' ) ) {
- $non_post_post_types_array[] = 'post_type';
- }
- return $non_post_post_types_array;
-}
-
-/**
- * Gets the PDF content for the child posts of the post.
- *
- * @global $wpdb The WordPress database interface.
- *
- * @param int $post_id The post ID of the parent post.
- *
- * @return string $pdf_content The PDF content of the child posts.
- */
-function relevanssi_get_child_pdf_content( $post_id ) {
- global $wpdb;
-
- $post_id = intval( $post_id );
- $pdf_content = '';
-
- if ( $post_id > 0 ) {
- $pdf_content = $wpdb->get_col( "SELECT meta_value FROM $wpdb->postmeta AS pm, $wpdb->posts AS p WHERE pm.post_id = p.ID AND p.post_parent = $post_id AND meta_key = '_relevanssi_pdf_content'" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- // Only user-provided variable is $post_id, and that's from Relevanssi and sanitized as an int.
- return implode( ' ', $pdf_content );
- }
-
- return '';
-}
-
-/**
- * Provides the Premium version "Did you mean" recommendations.
- *
- * Provides a better version of "Did you mean" recommendations, using the
- * spelling corrector class to generate a correct spelling.
- *
- * @global WP_Query $wp_query The query object, used to check the number of
- * posts found.
- *
- * @param string $query The search query to correct.
- * @param string $pre Text printed out before the suggestion.
- * @param string $post Text printed out after the suggestion.
- * @param int $n Maximum number of hits before the suggestions are shown,
- * default 5.
- */
-function relevanssi_premium_didyoumean( $query, $pre, $post, $n = 5 ) {
- global $wp_query;
-
- $total_results = $wp_query->found_posts;
- $result = '';
-
- if ( $total_results > $n ) {
- return $result;
- }
-
- $suggestion = relevanssi_premium_generate_suggestion( $query );
- if ( empty( $suggestion ) ) {
- $suggestion = relevanssi_simple_generate_suggestion( $query );
- }
-
- $result = null;
- if ( $suggestion ) {
- $url = trailingslashit( get_bloginfo( 'url' ) );
- $url = esc_attr(
- add_query_arg(
- array(
- 's' => rawurlencode( $suggestion ),
- ),
- $url
- )
- );
- /** This filter is documented in lib/didyoumean.php */
- $url = apply_filters( 'relevanssi_didyoumean_url', $url, $query, $suggestion );
-
- // Escape the suggestion to avoid XSS attacks.
- $suggestion = htmlspecialchars( $suggestion );
-
- /** This filter is documented in lib/didyoumean.php */
- $result = apply_filters( 'relevanssi_didyoumean_suggestion', "$pre$suggestion $post" );
- }
- return $result;
-}
-
-/**
- * Generates the "Did you mean" suggestion.
- *
- * Generates "Did you mean" suggestions given a query to correct, using the
- * spelling corrector method.
- *
- * @param string $query The search query to correct.
- *
- * @return string $query Corrected query, empty if there are no corrections
- * available.
- */
-function relevanssi_premium_generate_suggestion( $query ) {
- $corrected_query = '';
-
- if ( class_exists( 'Relevanssi_SpellCorrector' ) ) {
- $query = htmlspecialchars_decode( $query, ENT_QUOTES );
- $tokens = relevanssi_tokenize( $query, true, -1, 'search_query' );
-
- $sc = new Relevanssi_SpellCorrector();
-
- $correct = array();
- $exact_matches = 0;
- foreach ( array_keys( $tokens ) as $token ) {
- /**
- * Filters the tokens for Did you mean suggestions.
- *
- * You can use this filter hook to modify the tokens before Relevanssi
- * tries to come up with Did you mean suggestions for them. If you
- * return an empty string, the token will be skipped and no suggestion
- * will be made for the token.
- *
- * @param string $token An individual word from the search query.
- *
- * @return string The token.
- */
- $token = apply_filters( 'relevanssi_didyoumean_token', trim( $token ) );
- if ( ! $token ) {
- continue;
- }
- $c = $sc->correct( $token );
- if ( ! empty( $c ) && strval( $token ) !== $c ) {
- array_push( $correct, $c );
- $query = str_ireplace( $token, $c, $query ); // Replace misspelled word in query with suggestion.
- } elseif ( null !== $c ) {
- $exact_matches++;
- }
- }
- if ( count( $tokens ) === $exact_matches ) {
- // All tokens are correct.
- return '';
- }
- if ( count( $correct ) > 0 ) {
- // Strip quotes, because they are likely incorrect.
- $query = str_replace( '"', '', $query );
- $corrected_query = $query;
- }
- }
-
- return $corrected_query;
-}
-
-/**
- * Multisite-friendly get_post().
- *
- * Gets a post using relevanssi_get_post() from the specified subsite.
- *
- * @param int $blogid The blog ID.
- * @param int $id The post ID.
- *
- * @return object|WP_Error $post The post object or a WP_Error if the post
- * cannot be found.
- */
-function relevanssi_get_multisite_post( $blogid, $id ) {
- switch_to_blog( $blogid );
- if ( ! is_numeric( mb_substr( $id, 0, 1 ) ) ) {
- // The post ID does not start with a number; this is a user or a
- // taxonomy term, so suspend cache addition to avoid getting garbage in
- // the cache.
- wp_suspend_cache_addition( true );
- }
- $post = relevanssi_get_post( $id, $blogid );
- restore_current_blog();
- return $post;
-}
-
-/**
- * Initializes things for Relevanssi Premium.
- *
- * Adds metaboxes, depending on settings; adds synonym indexing filter if
- * necessary and removes an unnecessary action.
- */
-function relevanssi_premium_init() {
- $show_post_controls = true;
- if ( 'on' === get_option( 'relevanssi_hide_post_controls' ) ) {
- $show_post_controls = false;
- /**
- * Adjusts the capability required to show the Relevanssi post controls
- * for admins.
- *
- * @param string $capability The minimum capability required, default
- * 'manage_options'.
- */
- if (
- 'on' === get_option( 'relevanssi_show_post_controls' ) &&
- current_user_can( apply_filters( 'relevanssi_options_capability', 'manage_options' ) )
- ) {
- $show_post_controls = true;
- }
- }
- if ( $show_post_controls ) {
- add_action( 'add_meta_boxes', 'relevanssi_add_metaboxes' );
- }
-
- if ( 'on' === get_option( 'relevanssi_index_synonyms' ) ) {
- add_filter( 'relevanssi_indexing_tokens', 'relevanssi_add_indexing_synonyms', 10 );
- }
-
- // If the relevanssi_save_postdata is not disabled, scheduled publication
- // will swipe out the Relevanssi post controls settings.
- add_action(
- 'future_to_publish',
- function( $post ) {
- remove_action( 'save_post', 'relevanssi_save_postdata' );
- }
- );
-
- if ( function_exists( 'do_blocks' ) ) {
- add_action( 'init', 'relevanssi_register_gutenberg_actions', 11 );
- }
-
- global $pagenow, $relevanssi_variables;
- $on_relevanssi_page = false;
- if ( isset( $_GET['page'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
- $page = sanitize_file_name( wp_unslash( $_GET['page'] ) ); // phpcs:ignore WordPress.Security.NonceVerification
- $base = sanitize_file_name( wp_unslash( plugin_basename( $relevanssi_variables['file'] ) ) );
- if ( $base === $page ) {
- $on_relevanssi_page = true;
- }
- }
-
- if ( function_exists( 'is_multisite' ) && is_multisite() && function_exists( 'get_blog_status' ) ) {
- $public = (bool) get_blog_status( get_current_blog_id(), 'public' );
- if ( ! $public && 'options-general.php' === $pagenow && $on_relevanssi_page ) {
- add_action(
- 'admin_notices',
- function() {
- printf(
- "",
- esc_html__( 'Your site is not public. By default, Relevanssi does not search private sites. If you want to be able to search on this site, either make it public or add a filter function that returns true on \'relevanssi_multisite_public_status\' filter hook.', 'relevanssi' )
- );
- }
- );
- }
- }
-
- add_filter( 'relevanssi_remove_punctuation', 'relevanssi_wildcards_pre', 8 );
- add_filter( 'relevanssi_remove_punctuation', 'relevanssi_wildcards_post', 12 );
- add_filter( 'relevanssi_term_where', 'relevanssi_query_wildcards' );
-
- add_filter( 'relevanssi_indexing_restriction', 'relevanssi_hide_post_restriction' );
-
- if ( defined( 'RELEVANSSI_API_KEY' ) ) {
- add_filter(
- 'pre_option_relevanssi_api_key',
- function() {
- return RELEVANSSI_API_KEY;
- }
- );
- add_filter(
- 'pre_site_option_relevanssi_api_key',
- function() {
- return RELEVANSSI_API_KEY;
- }
- );
- }
-
- $update_translations = false;
- if ( 'on' === get_option( 'relevanssi_update_translations' ) ) {
- $update_translations = true;
- }
- if ( 'on' === get_option( 'relevanssi_do_not_call_home' ) ) {
- $update_translations = false;
- }
- /**
- * Filters whether to update the Relevanssi translations.
- *
- * @param boolean $update_translations If false, don't update translations.
- */
- $update_translations = apply_filters( 'relevanssi_update_translations', $update_translations );
-
- if ( $update_translations ) {
- $t15s_updater = new Relevanssi_Language_Packs(
- 'plugin',
- 'relevanssi',
- 'https://packages.translationspress.com/relevanssi/relevanssi/packages.json'
- );
- $t15s_updater->add_project();
- }
-
- add_action(
- 'in_plugin_update_message-' . $relevanssi_variables['plugin_basename'],
- 'relevanssi_premium_modify_plugin_update_message'
- );
-
- // Add the related posts filters if necessary.
- relevanssi_related_init();
-}
-
-/**
- * Adds the Relevanssi Premium hide post filter to the indexing restrictions.
- *
- * @global object $wpdb The WP database interface.
- *
- * @param array $restrictions The current set of restrictions.
- *
- * @return array The updated restrictions.
- */
-function relevanssi_hide_post_restriction( $restrictions ) {
- global $wpdb;
-
- $restrictions['mysql'] .= " AND post.ID NOT IN (SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_hide_post' AND meta_value = 'on')";
- $restrictions['reason'] .= ' ' . __( 'Relevanssi index exclude', 'relevanssi' );
-
- return $restrictions;
-}
-
-/**
- * Replaces the standard permalink with $post->relevanssi_link if it exists.
- *
- * Relevanssi adds a link to the user profile or taxonomy term page to $post->relevanssi_link. This function replaces permalink with that link, if it exists.
- *
- * @param string $permalink The permalink to filter.
- * @param int $post_id The post ID.
- *
- * @return string $permalink Modified permalink.
- */
-function relevanssi_post_link_replace( $permalink, $post_id ) {
- $post = relevanssi_get_post( $post_id );
- if ( property_exists( $post, 'relevanssi_link' ) ) {
- $permalink = $post->relevanssi_link;
- }
- return $permalink;
-}
-
-/**
- * Fetches a list of words from the Relevanssi database for spelling corrector.
- *
- * A helper function for the spelling corrector. Gets the word list from the
- * 'relevanssi_words' option. If the data is expired (more than a month old),
- * this function triggers an asynchronous refresh action that fetches new words
- * from the Relevanssi database to use as a source material for spelling
- * suggestions.
- *
- * @return array $words An array of words, with the word as the key and number
- * of occurrances as the value.
- */
-function relevanssi_get_words() {
- $data = get_option(
- 'relevanssi_words',
- array(
- 'expire' => 0,
- 'words' => array(),
- )
- );
-
- if ( time() > $data['expire'] ) {
- relevanssi_launch_ajax_action( 'relevanssi_get_words' );
- }
-
- return $data['words'];
-}
-
-/**
- * Adds the Premium options.
- *
- * @global array $relevanssi_variables The global Relevanssi variables, used to set the link boost default.
- */
-function relevanssi_premium_install() {
- global $relevanssi_variables;
-
- add_option( 'relevanssi_api_key', '' );
- add_option( 'relevanssi_click_tracking', 'on' );
- add_option( 'relevanssi_disable_shortcodes', '' );
- add_option( 'relevanssi_do_not_call_home', 'off' );
- add_option( 'relevanssi_hide_post_controls', 'off' );
- add_option( 'relevanssi_index_pdf_parent', 'off' );
- add_option( 'relevanssi_index_post_type_archives', 'off' );
- add_option( 'relevanssi_index_subscribers', 'off' );
- add_option( 'relevanssi_index_synonyms', 'off' );
- add_option( 'relevanssi_index_taxonomies', 'off' );
- add_option( 'relevanssi_index_terms', array() );
- add_option( 'relevanssi_index_users', 'off' );
- add_option( 'relevanssi_internal_links', 'noindex' );
- add_option( 'relevanssi_link_boost', $relevanssi_variables['link_boost_default'] );
- add_option( 'relevanssi_link_pdf_files', 'off' );
- add_option( 'relevanssi_max_excerpts', 1 );
- add_option( 'relevanssi_mysql_columns', '' );
- add_option( 'relevanssi_post_type_weights', '' );
- add_option( 'relevanssi_read_new_files', 'off' );
- add_option( 'relevanssi_redirects', array() );
- add_option( 'relevanssi_related_settings', relevanssi_related_default_settings() );
- add_option( 'relevanssi_related_style', relevanssi_related_default_styles() );
- add_option( 'relevanssi_send_pdf_files', 'off' );
- add_option( 'relevanssi_server_location', relevanssi_default_server_location() );
- add_option( 'relevanssi_show_post_controls', 'off' );
- add_option( 'relevanssi_spamblock', array() );
- add_option( 'relevanssi_thousand_separator', '' );
- add_option( 'relevanssi_trim_click_logs', '180' );
- add_option( 'relevanssi_update_translations', 'off' );
- add_option(
- 'relevanssi_recency_bonus',
- array(
- 'bonus' => '',
- 'days' => '',
- )
- );
-}
-
-/**
- * Makes an educated guess whether the default attachment server location should
- * be US or EU, based on the site locale setting.
- *
- * @uses get_locale()
- *
- * @return string 'eu' or 'us', depending on the locale.
- */
-function relevanssi_default_server_location() : string {
- $server = 'us';
- $locale = get_locale();
-
- if ( strpos( $locale, '_' ) === false ) {
- $language = $locale;
- } else {
- list( $language, $country ) = explode( '_', $locale );
- }
-
- $eu_languages = array( 'ast', 'bel', 'ca', 'cy', 'el', 'et', 'eu', 'fi', 'fur', 'gd', 'hr', 'hsb', 'lv', 'oci', 'roh', 'sq', 'uk' );
- $eu_countries = array( 'AL', 'AT', 'BA', 'BE', 'BG', 'CH', 'CY', 'DE', 'EE', 'ES', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 'IL', 'IS', 'IT', 'LI', 'LT', 'LU', 'LV', 'MC', 'MD', 'ME', 'MT', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'SE', 'SI', 'SK', 'UA' );
-
- if ( in_array( strtolower( $language ), $eu_languages, true ) ||
- in_array( strtoupper( $country ), $eu_countries, true ) ) {
- $server = 'eu';
- }
-
- return $server;
-}
-
-/**
- * Returns the attachment reading server URL.
- *
- * Checks the correct server from 'relevanssi_server_location' option and returns the
- * correct URL from the constants.
- *
- * @return string The attachment reading server URL.
- */
-function relevanssi_get_server_url() {
- $server = RELEVANSSI_US_SERVICES_URL;
- if ( 'eu' === get_option( 'relevanssi_server_location' ) ) {
- $server = RELEVANSSI_EU_SERVICES_URL;
- }
- /**
- * Allows changing the attachment reading server URL.
- *
- * @param string The server URL.
- */
- return apply_filters( 'relevanssi_attachment_server_url', $server );
-}
-
-/**
- * Extracts taxonomy specifiers from the search query.
- *
- * Finds all {taxonomy:search term} specifiers from the query. If any are
- * found, they are stored in $relevanssi_variables global variable and the
- * filtering function is activated.
- *
- * @global array $relevanssi_variables Used to store the target data.
- *
- * @param string $query The query.
- *
- * @return string The query with the specifier tags removed.
- */
-function relevanssi_extract_specifier( $query ) {
- global $relevanssi_variables;
-
- $targets = array();
-
- if ( preg_match_all( '/{(.*?):(.*?)}/', $query, $matches, PREG_SET_ORDER ) ) {
- foreach ( $matches as $match ) {
- list( $whole, $target, $keyword ) = $match;
-
- $phrases = relevanssi_extract_phrases( $keyword );
- if ( ! empty( $phrases ) ) {
- foreach ( $phrases as $phrase ) {
- $relevanssi_variables['phrase_targets'][ $phrase ] = $target;
- }
- } else {
- if ( is_numeric( $keyword ) ) {
- $keyword = ' ' . $keyword;
- }
- $targets[ $keyword ][] = $target;
- }
-
- $query = str_replace( $whole, $keyword, $query );
- }
- }
-
- if ( ! empty( $targets ) ) {
- $relevanssi_variables['targets'] = $targets;
- add_filter( 'relevanssi_match', 'relevanssi_target_matches' );
- }
-
- return $query;
-}
-
-/**
- * Filters posts by taxonomy specifiers.
- *
- * If taxonomy specifiers are found in the query, this filtering function is
- * activated and will set the post weight to 0 in the cases where the post
- * matches the search term, but not the specifiers.
- *
- * @global array $relevanssi_variables Used to store the target data.
- *
- * @param object $match The Relevanssi match object.
- *
- * @return object The match object, with the weight modified if necessary.
- */
-function relevanssi_target_matches( $match ) {
- global $relevanssi_variables;
-
- if ( is_numeric( $match->term ) ) {
- $match->term = ' ' . $match->term;
- }
-
- $fuzzy = get_option( 'relevanssi_fuzzy' );
- if ( 'always' === $fuzzy || 'sometimes' === $fuzzy ) {
- foreach ( $relevanssi_variables['targets'] as $term => $target ) {
- if (
- substr( $match->term, 0, strlen( $term ) ) === $term ||
- substr( strrev( $match->term ), 0, strlen( $term ) ) === strrev( $term )
- ) {
- $relevanssi_variables['targets'][ $match->term ] =
- $relevanssi_variables['targets'][ $term ];
- }
- }
- }
-
- $no_matches = false;
- if ( isset( $relevanssi_variables['targets'][ $match->term ] ) ) {
- $no_matches = true;
- foreach ( $relevanssi_variables['targets'][ $match->term ] as $target ) {
- if ( isset( $match->$target ) && '0' !== $match->$target ) {
- $no_matches = false;
- break;
- }
- if ( ! is_object( $match->customfield_detail ) ) {
- $match->customfield_detail = json_decode( $match->customfield_detail );
- }
- if (
- ! empty( $match->customfield_detail ) &&
- isset( $match->customfield_detail->$target ) &&
- '0' !== $match->customfield_detail->$target
- ) {
- $no_matches = false;
- break;
- }
- if ( ! is_object( $match->taxonomy_detail ) ) {
- $match->taxonomy_detail = json_decode( $match->taxonomy_detail );
- }
- if (
- ! empty( $match->taxonomy_detail ) &&
- isset( $match->taxonomy_detail->$target ) &&
- '0' !== $match->taxonomy_detail->$target
- ) {
- $no_matches = false;
- break;
- }
- if ( ! is_object( $match->mysqlcolumn_detail ) ) {
- $match->mysqlcolumn_detail = json_decode( $match->mysqlcolumn_detail );
- }
- if (
- ! empty( $match->mysqlcolumn_detail ) &&
- isset( $match->mysqlcolumn_detail->$target ) &&
- '0' !== $match->mysqlcolumn_detail->$target
- ) {
- $no_matches = false;
- break;
- }
- }
- }
- if ( $no_matches ) {
- $match->weight = 0;
- }
-
- return $match;
-}
-
-/**
- * Generates queries for targeted phrases.
- *
- * Goes through the targeted phrases from the Relevanssi global variable
- * $relevanssi_variables['phrase_targets'] and generates the queries for the
- * phrases taking note of the target restrictions. Some of this is slightly
- * hacky, as some default inclusions generated by the
- * relevanssi_generate_phrase_queries() are simply removed.
- *
- * @see relevanssi_generate_phrase_queries()
- *
- * @global array $relevanssi_variables The global Relevanssi variables.
- *
- * @param string $phrase The source phrase for the queries.
- *
- * @return array An array of queries per phrase.
- */
-function relevanssi_targeted_phrases( $phrase ) {
- global $relevanssi_variables;
-
- $target = $relevanssi_variables['phrase_targets'][ $phrase ];
-
- $taxonomies = array();
- $excerpt = 'off';
- $fields = array();
-
- if ( 'excerpt' === $target ) {
- $excerpt = 'on';
- }
- if ( 'tag' === $target ) {
- $target = 'post_tag';
- }
- if ( taxonomy_exists( $target ) ) {
- $taxonomies = array( $target );
- } else {
- $fields = array( $target );
- }
-
- $queries = relevanssi_generate_phrase_queries(
- array( $phrase ),
- $taxonomies,
- $fields,
- $excerpt
- );
-
- if ( 'excerpt' === $target ) {
- $find = array(
- "post_content LIKE '%$phrase%' OR ",
- "post_title LIKE '%$phrase%' OR ",
- );
- $queries[ $phrase ][0] = str_replace( $find, '', $queries[ $phrase ][0] );
- } elseif ( 'title' === $target ) {
- $find = array(
- "post_content LIKE '%$phrase%' OR ",
- );
- $queries[ $phrase ][0] = str_replace( $find, '', $queries[ $phrase ][0] );
- } else {
- unset( $queries[ $phrase ][0] ); // Remove the generic post content or title query.
- }
- if ( $fields ) {
- // Custom field targeting, remove PDF content custom frield from the list.
- $queries[ $phrase ][1] = str_replace(
- ",'_relevanssi_pdf_content'",
- '',
- $queries[ $phrase ][1]
- );
- }
-
- return $queries;
-}
-
-/**
- * Adds the Relevanssi Premium phrase filters for PDF content, terms and users.
- *
- * Hooks on to `relevanssi_phrase_queries` to include the phrase queries for
- * Relevanssi Premium features: looking for phrases in PDF content, taxonomy
- * term names and user fields.
- *
- * @param array $queries The array of queries where the new queries are added.
- * @param string $phrase The current phrase, already MySQL escaped.
- * @param string $status MySQL escaped post status value to use in queries.
- *
- * @return array The queries, with new queries added.
- */
-function relevanssi_premium_phrase_queries( $queries, $phrase, $status ) {
- global $wpdb;
-
- $index_post_types = get_option( 'relevanssi_index_post_types', array() );
- if ( in_array( 'attachment', $index_post_types, true ) ) {
- $query = "(SELECT ID
- FROM $wpdb->posts AS p, $wpdb->postmeta AS m
- WHERE p.ID = m.post_id
- AND m.meta_key = '_relevanssi_pdf_content'
- AND m.meta_value LIKE '%$phrase%'
- AND p.post_status IN ($status))";
-
- $queries[] = array(
- 'query' => $query,
- 'target' => 'doc',
- );
- }
-
- if ( 'on' === get_option( 'relevanssi_index_pdf_parent' ) ) {
- $query = "(SELECT parent.ID
- FROM $wpdb->posts AS p, $wpdb->postmeta AS m, $wpdb->posts AS parent
- WHERE p.ID = m.post_id
- AND p.post_parent = parent.ID
- AND m.meta_key = '_relevanssi_pdf_content'
- AND m.meta_value LIKE '%$phrase%'
- AND p.post_status = 'inherit')";
-
- $queries[] = array(
- 'query' => $query,
- 'target' => 'doc',
- );
- }
-
- $index_taxonomies = get_option( 'relevanssi_index_terms', array() );
- if ( ! empty( $index_taxonomies ) ) {
- $taxonomies_escaped = implode( "','", array_map( 'esc_sql', $index_taxonomies ) );
- $taxonomies_sql = "AND tt.taxonomy IN ('$taxonomies_escaped')";
-
- $query = "(SELECT t.term_id
- FROM $wpdb->terms AS t, $wpdb->term_taxonomy AS tt
- WHERE t.term_id = tt.term_id
- AND t.name LIKE '%$phrase%'
- $taxonomies_sql)";
-
- $queries[] = array(
- 'query' => $query,
- 'target' => 'item',
- );
- }
-
- $index_users = get_option( 'relevanssi_index_users', 'off' );
- if ( 'on' === $index_users ) {
- $extra_fields = get_option( 'relevanssi_index_user_fields' );
- $meta_keys = array( 'description', 'first_name', 'last_name' );
- if ( $extra_fields ) {
- $meta_keys = array_merge( $meta_keys, explode( ',', $extra_fields ) );
- }
- $meta_keys_escaped = implode( "','", array_map( 'esc_sql', $meta_keys ) );
- $meta_keys_sql = "um.meta_key IN ('$meta_keys_escaped')";
-
- $query = "(SELECT DISTINCT(u.ID)
- FROM $wpdb->users AS u LEFT JOIN $wpdb->usermeta AS um
- ON u.ID = um.user_id
- WHERE ($meta_keys_sql AND meta_value LIKE '%$phrase%')
- OR u.display_name LIKE '%$phrase%')";
-
- $queries[] = array(
- 'query' => $query,
- 'target' => 'item',
- );
- }
-
- return $queries;
-}
-
-/**
- * Fetches database words to the relevanssi_words option.
- *
- * @global $wpdb The WordPress database interface.
- * @global $relevanssi_variables The global Relevanssi variables, used for the
- * database table names.
- */
-function relevanssi_update_words_option() {
- global $wpdb, $relevanssi_variables;
-
- /**
- * The minimum limit of occurrances to include a word.
- *
- * To save resources, only words with more than this many occurrances are
- * fed to the spelling corrector. If there are problems with the spelling
- * corrector, increasing this value may fix those problems.
- *
- * @param int $number The number of occurrances must be more than this
- * value, default 2.
- */
- $count = apply_filters( 'relevanssi_get_words_having', 2 );
- if ( ! is_numeric( $count ) ) {
- $count = 2;
- }
- $q = 'SELECT term,
- SUM(title + content + comment + tag + link + author + category + excerpt + taxonomy + customfield)
- AS c FROM ' . $relevanssi_variables['relevanssi_table'] .
- " GROUP BY term HAVING c > $count"; // Safe: $count is numeric.
-
- $results = $wpdb->get_results( $q ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
-
- $words = array();
- foreach ( $results as $result ) {
- $words[ $result->term ] = $result->c;
- }
-
- $expire = time() + MONTH_IN_SECONDS;
- $data = array(
- 'expire' => $expire,
- 'words' => $words,
- );
-
- update_option( 'relevanssi_words', $data, false );
-}
-
-/**
- * Adds the "Must have" part for the missing terms list.
- *
- * Assumes there's just one missing term (this is checked outside this
- * function).
- *
- * @param WP_Post $post The post object.
- *
- * @return string A string containing the "Must have" link.
- */
-function relevanssi_add_must_have( $post ) {
- $query_string = $GLOBALS['wp']->query_string ?? '';
- $request = $GLOBALS['request'] ?? '/';
- $search_term = implode( '', $post->relevanssi_hits['missing_terms'] );
- $search_page_url = add_query_arg( $query_string, '', home_url( $request ) );
- $search_page_url = str_replace( rawurlencode( $search_term ), '%2B' . $search_term, $search_page_url );
-
- return apply_filters(
- 'relevanssi_missing_terms_must_have',
- ' | ' . __( 'Must have', 'relevanssi' ) . ': ' . $search_term . ' '
- );
-}
-
-/**
- * Updates the $term_hits array used for showing how many hits were found for
- * each term.
- *
- * @param array $term_hits The term hits array (passed as reference).
- * @param array $match_arrays The matches array (passed as reference).
- * @param stdClass $match The match object.
- * @param string $term The search term.
- */
-function relevanssi_premium_update_term_hits( &$term_hits, &$match_arrays, $match, $term ) {
- relevanssi_increase_value( $match_arrays['mysqlcolumn'][ $match->doc ], $match->mysqlcolumn );
-
- $match_arrays['customfield_detail'][ $match->doc ] = array();
- $match_arrays['taxonomy_detail'][ $match->doc ] = array();
- $match_arrays['mysqlcolumn_detail'][ $match->doc ] = array();
-
- if ( ! empty( $match->customfield_detail ) ) {
- $match_arrays['customfield_detail'][ $match->doc ][ $term ] = $match->customfield_detail;
- }
- if ( ! empty( $match->taxonomy_detail ) ) {
- $match_arrays['taxonomy_detail'][ $match->doc ][ $term ] = $match->taxonomy_detail;
- }
- if ( ! empty( $match->mysqlcolumn_detail ) ) {
- $match_arrays['mysqlcolumn_detail'][ $match->doc ][ $term ] = $match->mysqlcolumn_detail;
- }
-}
-
-/**
- * Adds Premium features to the $return array from $match_arrays.
- *
- * @param array $return The search return value array, passed as a
- * reference.
- * @param array $match_arrays The match array for source data.
- */
-function relevanssi_premium_update_return_array( &$return, $match_arrays ) {
- $match_arrays['mysqlcolumn_matches'] = $match_arrays['mysqlcolumn_matches'] ?? '';
- $match_arrays['customfield_detail'] = $match_arrays['customfield_detail'] ?? '';
- $match_arrays['taxonomy_detail'] = $match_arrays['taxonomy_detail'] ?? '';
- $match_arrays['mysqlcolumn_detail'] = $match_arrays['mysqlcolumn_detail'] ?? '';
-
- $additions = array(
- 'mysqlcolumn' => $match_arrays['mysqlcolumn_matches'],
- 'customfield_detail' => $match_arrays['customfield_detail'],
- 'taxonomy_detail' => $match_arrays['taxonomy_detail'],
- 'mysqlcolumn_detail' => $match_arrays['mysqlcolumn_detail'],
- );
-
- $return = array_merge( $return, $additions );
-}
-
-/**
- * Adds Premium features to the $post->relevanssi_hits source array.
- *
- * @param array $hits The search hits array.
- * @param array $data The source data.
- * @param int $post_id The post ID.
- */
-function relevanssi_premium_add_matches( &$hits, $data, $post_id ) {
- $hits['mysqlcolumn'] = $data['mysqlcolumn_matches'][ $post_id ] ?? 0;
- $hits['customfield_detail'] = $data['customfield_detail'][ $post_id ] ?? array();
- $hits['taxonomy_detail'] = $data['taxonomy_detail'][ $post_id ] ?? array();
- $hits['mysqlcolumn_detail'] = $data['mysqlcolumn_detail'][ $post_id ] ?? array();
-
- $hits['customfield_detail'] = array_map(
- function( $value ) {
- return (array) json_decode( $value );
- },
- $hits['customfield_detail']
- );
-}
-
-/**
- * Returns a string of custom field content for the user.
- *
- * Fetches the user custom field content based on the field indexing settings
- * and concatenates it as a single space-separated string.
- *
- * @uses relevanssi_get_user_field_content
- *
- * @param string $user_id The ID of the user.
- *
- * @return string The custom field content.
- */
-function relevanssi_get_user_custom_field_content( $user_id ) : string {
- $custom_field_content = '';
-
- $fields = relevanssi_get_user_field_content( $user_id );
- if ( ! empty( $fields ) ) {
- $custom_field_content = implode( ' ', array_values( $fields ) );
- }
-
- return $custom_field_content;
-}
-
-/**
- * Returns an array of user custom field names.
- *
- * Gets the indexed user field names from relevanssi_index_user_fields and
- * relevanssi_index_user_meta options and returns an array of field names.
- *
- * @return array Array of user custom field names.
- */
-function relevanssi_generate_list_of_user_fields() : array {
- $user_fields = array();
-
- $user_fields_option = get_option( 'relevanssi_index_user_fields' );
- if ( $user_fields_option ) {
- $user_fields = explode( ',', $user_fields_option );
- }
-
- $user_meta = get_option( 'relevanssi_index_user_meta' );
- if ( $user_meta ) {
- $user_fields = array_merge( $user_fields, explode( ',', $user_meta ) );
- }
-
- $user_fields = array_map( 'trim', $user_fields );
-
- return $user_fields;
-}
-
-/**
- * Returns an array of user custom field content.
- *
- * Gets the indexed user field content from the fields specified in the user
- * field indexing options.
- *
- * @uses relevanssi_generate_list_of_user_fields
- *
- * @param string $user_id The ID of the user.
- *
- * @return array An array of (field, value) pairs.
- */
-function relevanssi_get_user_field_content( $user_id ) : array {
- $fields = relevanssi_generate_list_of_user_fields();
- $user = get_user_by( 'id', $user_id );
- $user_vars = get_object_vars( $user );
- $values = array();
- foreach ( $fields as $field ) {
- $field_value = '';
- if ( isset( $user_vars[ $field ] ) ) {
- $field_value = $user_vars[ $field ];
- }
- if ( empty( $field_value ) && isset( $user_vars['data']->$field ) ) {
- $field_value = $user_vars['data']->$field;
- }
- if ( empty( $field_value ) ) {
- $field_value = get_user_meta( $user_id, $field, true );
- }
- $values[ $field ] = $field_value;
- }
- return $values;
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/contextual-help.php b/wp/wp-content/plugins/relevanssi-premium/premium/contextual-help.php
deleted file mode 100644
index 1e47e9ad..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/contextual-help.php
+++ /dev/null
@@ -1,103 +0,0 @@
-add_help_tab(
- array(
- 'id' => 'relevanssi-boolean',
- 'title' => __( 'Boolean operators', 'relevanssi' ),
- 'content' => '' .
- '' . __( 'Relevanssi Premium offers limited support for Boolean logic. In addition of setting the default operator from Relevanssi settings, you can use AND and NOT operators in searches.', 'relevanssi' ) . ' ' .
- '' . __( 'To use the NOT operator, prefix the search term with a minus sign:', 'relevanssi' ) .
- sprintf( '%s ', __( 'cats -dogs', 'relevanssi' ) ) .
- __( "This would only show posts that have the word 'cats' but not the word 'dogs'.", 'relevanssi' ) . ' ' .
- '' . __( 'To use the AND operator, set the default operator to OR and prefix the search term with a plus sign:', 'relevanssi' ) .
- sprintf( '%s ', __( '+cats dogs mice', 'relevanssi' ) ) .
- __( "This would show posts that have the word 'cats' and either 'dogs' or 'mice' or both, and would prioritize posts that have all three.", 'relevanssi' ) . ' ' .
- ' ',
- )
- );
-
- /* Translators: first placeholder is the_permalink(), the second is relevanssi_the_permalink() */
- $permalinks_to_users = sprintf( esc_html__( "Permalinks to user profiles may not always work on search results templates. %1\$s should work, but if it doesn't, you can replace it with %2\$s.", 'relevanssi' ), 'the_permalink()', 'relevanssi_the_permalink()' );
- /* Translators: the placeholder is the name of the relevanssi_index_user_fields option */
- $index_user_fields = sprintf( esc_html__( 'To control which user meta fields are indexed, you can use the %s option. It should have a comma-separated list of user meta fields. It can be set like this (you only need to run this code once):', 'relevanssi' ), 'relevanssi_index_user_fields' );
- /* Translators: the first placeholder opens the link, the second closes the link */
- $knowledge_base = sprintf( esc_html__( 'For more details on user profiles and search results templates, see %1$sthis knowledge base entry%2$s.', 'relevanssi' ), "", ' ' );
-
- $screen->add_help_tab(
- array(
- 'id' => 'relevanssi-title-user-profiles',
- 'title' => __( 'User profiles', 'relevanssi' ),
- 'content' => '',
- )
- );
- $screen->add_help_tab(
- array(
- 'id' => 'relevanssi-internal-links',
- 'title' => __( 'Internal links', 'relevanssi' ),
- 'content' => '' .
- '' . __( 'This option sets how Relevanssi handles internal links that point to your own site.', 'relevanssi' ) . ' ' .
- '' . __( "If you choose 'No special processing', Relevanssi doesn’t care about links and indexes the link anchor (the text of the link) like it is any other text.", 'relevanssi' ) . ' ' .
- '' . __( "If you choose 'Index internal links for target documents only', then the link is indexed like the link anchor text were the part of the link target, not the post where the link is.", 'relevanssi' ) . ' ' .
- '' . __( "If you choose 'Index internal links for target and source', the link anchor text will count for both posts.", 'relevanssi' ) . ' ' .
- ' ',
- )
- );
- $screen->add_help_tab(
- array(
- 'id' => 'relevanssi-stemming',
- 'title' => __( 'Stemming', 'relevanssi' ),
- 'content' => '',
- )
- );
-
- /* Translators: the placeholder has the WP CLI command */
- $wp_cli_command = sprintf( esc_html__( 'If you have WP CLI installed, Relevanssi Premium has some helpful commands. Use %s to get a list of available commands.', 'relevanssi' ), 'wp help relevanssi' );
- /* Translators: the first placeholder opens the link, the second closes the link */
- $wp_cli_manual = sprintf( esc_html__( 'You can also see %1$sthe user manual page%2$s.', 'relevanssi' ), "", ' ' );
-
- $screen->add_help_tab(
- array(
- 'id' => 'relevanssi-wpcli',
- 'title' => __( 'WP CLI', 'relevanssi' ),
- 'content' => "
- $wp_cli_command
- $wp_cli_manual
- ",
- )
- );
-
- $screen->set_help_sidebar(
- '' . __( 'For more information:', 'relevanssi' ) . '
' .
- '' . __( 'Plugin support page', 'relevanssi' ) . '
' .
- '' . __( 'WordPress.org forum', 'relevanssi' ) . '
' .
- 'Support email
' .
- '' . __( 'Plugin knowledge base', 'relevanssi' ) . '
'
- );
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/excerpts-highlights.php b/wp/wp-content/plugins/relevanssi-premium/premium/excerpts-highlights.php
deleted file mode 100644
index cd06ce55..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/excerpts-highlights.php
+++ /dev/null
@@ -1,206 +0,0 @@
- 0, adds the excerpt to the list
- * of excerpts. To avoid overlapping excerpts, similarity is calculated against
- * other excerpts and only those excerpts with a similarity percentage of less
- * than 50 are accepted.
- *
- * @param array $terms An array of relevant words.
- * @param string $content The source text.
- * @param int $excerpt_length The length of the excerpt, default 30 words.
- *
- * @return array An array of excerpts. In each excerpt, there are following
- * parts: 'text' has the excerpt text, 'hits' the number of keyword matches in
- * the excerpt, 'start' is true if the excerpt is from the beginning of the
- * content.
- */
-function relevanssi_extract_multiple_excerpts( $terms, $content, $excerpt_length = 30 ) {
- if ( $excerpt_length < 1 ) {
- return array( '', 0, false );
- }
-
- $words = array_filter( explode( ' ', $content ) );
- $offset = 0;
- $tries = 0;
- $count_words = count( $words );
- $start = false;
- $gap = 0;
-
- $excerpts = array();
-
- $excerpt_candidates = $count_words / $excerpt_length;
- if ( $excerpt_candidates > 200 ) {
- /**
- * Adjusts the gap between excerpt candidates.
- *
- * The default value for the gap is number of words / 200 minus the
- * excerpt length, which means Relevanssi tries to create 200 excerpts.
- *
- * @param int The gap between excerpt candidates.
- * @param int $count_words The number of words in the content.
- * @param int $excerpt_length The length of the excerpt.
- */
- $gap = apply_filters(
- 'relevanssi_excerpt_gap',
- floor( $count_words / 200 - $excerpt_length ),
- $count_words,
- $excerpt_length
- );
- }
-
- while ( $offset < $count_words ) {
- if ( $offset + $excerpt_length > $count_words ) {
- $offset = $count_words - $excerpt_length;
- if ( $offset < 0 ) {
- $offset = 0;
- }
- }
- $excerpt_slice = array_slice( $words, $offset, $excerpt_length );
- $excerpt_slice = ' ' . implode( ' ', $excerpt_slice );
- $count_matches = relevanssi_count_matches( $terms, $excerpt_slice );
- if ( $count_matches > 0 ) {
- if ( 0 === $offset ) {
- $start = true;
- } else {
- $start = false;
- }
-
- $similarity = 0;
- array_walk(
- $excerpts,
- function ( $item ) use ( &$similarity, $excerpt_slice ) {
- similar_text( $item['text'], $excerpt_slice, $percentage );
- if ( $percentage > $similarity ) {
- $similarity = $percentage;
- }
- }
- );
- if ( $similarity < 50 ) {
- $excerpt = array(
- 'hits' => $count_matches,
- 'text' => trim( $excerpt_slice ),
- 'start' => $start,
- );
- $excerpts[] = $excerpt;
- }
- }
- $tries++;
-
- /**
- * Enables the excerpt optimization.
- *
- * If your posts are very long, building excerpts can be really slow.
- * To speed up the process, you can enable optimization, which means
- * Relevanssi only creates 50 excerpt candidates.
- *
- * @param boolean Return true to enable optimization, default false.
- */
- if ( apply_filters( 'relevanssi_optimize_excerpts', false ) ) {
- if ( $tries > 50 ) {
- // An optimization trick: try only 50 times.
- break;
- }
- }
-
- $offset += $excerpt_length + $gap;
- }
-
- if ( empty( $excerpts ) && $gap > 0 ) {
- $result = relevanssi_get_first_match( $words, $terms, $excerpt_length );
-
- if ( ! empty( $result['excerpt'] ) ) {
- $excerpts[] = array(
- 'text' => $result['excerpt'],
- 'hits' => $result['best_excerpt_term_hits'],
- 'start' => $result['start'],
- );
- }
- }
-
- if ( empty( $excerpts ) ) {
- /**
- * Nothing found, take the beginning of the post. +2, because the first
- * index is an empty space and the last index is the rest of the post.
- */
- $words = explode( ' ', $content, $excerpt_length + 2 );
- array_pop( $words );
- $text = implode( ' ', $words );
- $excerpt = array(
- 'text' => $text,
- 'hits' => 0,
- 'start' => true,
- );
- $excerpts[] = $excerpt;
- }
-
- return $excerpts;
-}
-
-/**
- * Adds the "source" attribute to the excerpts in the array.
- *
- * @param array $excerpts The excerpts array, passed as a reference.
- * @param string $source The source value to add to the excerpts.
- */
-function relevanssi_add_source_to_excerpts( &$excerpts, $source ) {
- if ( ! is_array( $excerpts ) ) {
- return;
- }
- array_walk(
- $excerpts,
- function( &$item ) use ( $source ) {
- $item['source'] = $source;
- }
- );
-}
-
-/**
- * Combines multiple arrays of excerpts together, sorts them and slices them.
- *
- * Returns a slice with the n excerpts with most term hits.
- *
- * @param int $post_id The current post ID.
- * @param array ...$excerpt_sources Arrays containing excerpts.
- *
- * @return array An array containing the n best excerpts.
- */
-function relevanssi_combine_excerpts( $post_id, ...$excerpt_sources ) {
- $excerpts = array_merge( ...$excerpt_sources );
- usort(
- $excerpts,
- function( $a, $b ) {
- return $b['hits'] - $a['hits'];
- }
- );
- $number_of_excerpts = get_option( 'relevanssi_max_excerpts', 1 );
-
- $excerpts = array_slice(
- /**
- * Filters the excerpt.
- *
- * Filters the post excerpts generated by Relevanssi before the
- * highlighting is applied.
- *
- * @param array $excerpt An array of excerpts.
- * @param int $post->ID The post ID.
- */
- apply_filters( 'relevanssi_excerpts', $excerpts, $post_id ),
- 0,
- $number_of_excerpts
- );
-
- return $excerpts;
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/gutenberg-sidebar.php b/wp/wp-content/plugins/relevanssi-premium/premium/gutenberg-sidebar.php
deleted file mode 100644
index dff4d85b..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/gutenberg-sidebar.php
+++ /dev/null
@@ -1,393 +0,0 @@
- '_relevanssi_hide_post',
- 'description' => 'Hide this post',
- ),
- array(
- 'meta_key' => '_relevanssi_hide_content',
- 'description' => 'Hide post content',
- ),
- array(
- 'meta_key' => '_relevanssi_pin_for_all',
- 'description' => 'Pin for all searches',
- ),
- array(
- 'meta_key' => '_relevanssi_pin_keywords',
- 'description' => 'Pin for these keywords',
- ),
- array(
- 'meta_key' => '_relevanssi_unpin_keywords',
- 'description' => 'Block for these keywords',
- ),
- array(
- 'meta_key' => '_relevanssi_related_keywords',
- 'description' => 'Keywords for related posts searches',
- ),
- array(
- 'meta_key' => '_relevanssi_related_include_ids',
- 'description' => 'Post IDs for included related posts',
- ),
- array(
- 'meta_key' => '_relevanssi_related_exclude_ids',
- 'description' => 'Post IDs for excluded related posts',
- ),
- array(
- 'meta_key' => '_relevanssi_related_no_append',
- 'description' => "Don't append related posts to this post",
- ),
- array(
- 'meta_key' => '_relevanssi_related_not_related',
- 'description' => 'Disable related posts for this post',
- ),
- array(
- 'meta_key' => '_relevanssi_related_posts',
- 'description' => 'Related posts for this post',
- ),
- array(
- 'meta_key' => '_relevanssi_noindex_reason',
- 'description' => 'Reason this post is not indexed',
- ),
- );
-
- foreach ( $relevanssi_meta_fields as $meta_field ) {
- register_meta(
- 'post',
- $meta_field['meta_key'],
- array(
- 'type' => 'string',
- 'description' => $meta_field['description'],
- 'single' => true,
- 'show_in_rest' => true,
- 'auth_callback' => '__return_true',
- )
- );
- }
-}
-
-/**
- * Registers the Gutenberg sidebar script.
- *
- * Registers the Gutenberg sidebar script, exact version depending on whether
- * the RELEVANSSI_DEVELOP constant is set or not, includes the dependencies and
- * the translations.
- *
- * @since 2.5.0
- */
-function relevanssi_register_gutenberg_script() {
- global $relevanssi_variables;
-
- if ( ! function_exists( 'wp_set_script_translations' ) ) {
- return;
- }
-
- global $post;
- if ( ! $post ) {
- return;
- }
- if ( $post && ! post_type_supports( $post->post_type, 'custom-fields' ) ) {
- return;
- }
-
- if ( ! current_user_can(
- /**
- * Filters the capability required to access the Relevanssi sidebar.
- *
- * @param string The capability required, default 'edit_others_posts'.
- */
- apply_filters( 'relevanssi_sidebar_capability', $relevanssi_variables['sidebar_capability'] )
- )
- ) {
- return;
- }
-
- $file_location = 'premium/gutenberg-sidebar/';
- if ( RELEVANSSI_DEVELOP ) {
- $file_location = 'build/';
- }
- wp_register_script(
- 'relevanssi-sidebar',
- plugin_dir_url( $relevanssi_variables['plugin_basename'] ) . $file_location . 'index.js',
- array( 'wp-api-fetch', 'wp-i18n', 'wp-blocks', 'wp-edit-post', 'wp-element', 'wp-editor', 'wp-components', 'wp-data', 'wp-plugins', 'wp-edit-post' ),
- 1,
- true
- );
- wp_set_script_translations( 'relevanssi-sidebar', 'relevanssi', $relevanssi_variables['plugin_dir'] . 'languages' );
-}
-
-/**
- * Enqueues the Gutenberg sidebar script.
- *
- * @since 2.5.0
- */
-function relevanssi_block_editor_assets() {
- relevanssi_register_gutenberg_script();
- wp_enqueue_script( 'relevanssi-sidebar' );
-}
-
-/**
- * Adds a REST API endpoint for "How Relevanssi sees this post".
- *
- * Takes in a post ID and returns the "How Relevanssi sees this post" data for
- * that post.
- *
- * @param array $data The post ID in $data['id'].
- *
- * @return array The indexed terms for various parts of the post in an
- * associative array.
- *
- * @uses relevanssi_fetch_sees_data()
- *
- * @since 2.5.0
- */
-function relevanssi_sees_post_endpoint( $data ) {
- return relevanssi_fetch_sees_data( $data['id'] );
-}
-
-/**
- * Adds a REST API endpoint for listing the related posts.
- *
- * @param array $data The post ID in $data['id'].
- *
- * @return array The related posts in an array format (id, URL and title).
- *
- * @since 2.5.0
- */
-function relevanssi_list_related_posts_endpoint( $data ) {
- return relevanssi_generate_related_list( $data['id'], 'ARRAY' );
-}
-
-/**
- * Adds a REST API endpoint for listing the excluded related posts.
- *
- * @param array $data The post ID in $data['id'].
- *
- * @return array The excluded posts in an array format (id, URL and title).
- *
- * @since 2.5.0
- */
-function relevanssi_list_excluded_posts_endpoint( $data ) {
- return relevanssi_generate_excluded_list( $data['id'], 'ARRAY' );
-}
-
-/**
- * Adds a REST API endpoint for excluding a post from related posts.
- *
- * @param array $data The post ID in $data['post_id'], the ID of the post to
- * exclude in $data['exclude'].
- *
- * @return array The excluded posts in an array format (id, URL and title).
- *
- * @since 2.5.0
- */
-function relevanssi_exclude_related_post_endpoint( $data ) {
- relevanssi_exclude_a_related_post( $data['post_id'], $data['exclude'] );
- return relevanssi_generate_excluded_list( $data['post_id'], 'ARRAY' );
-}
-
-/**
- * Adds a REST API endpoint for unexcluding a post from related posts.
- *
- * @param array $data The post ID in $data['post_id'], the ID of the post to
- * return in $data['return'].
- *
- * @return array The excluded posts in an array format (id, URL and title).
- *
- * @since 2.5.0
- */
-function relevanssi_unexclude_related_post_endpoint( $data ) {
- relevanssi_unexclude_a_related_post( $data['post_id'], $data['return'] );
- return relevanssi_generate_excluded_list( $data['post_id'], 'ARRAY' );
-}
-
-/**
- * Adds a REST API endpoint for regenerating the related posts list.
- *
- * This is triggered when either the keywords or the post ID list for the
- * related posts is changed. This will get the key and the value of the changed
- * meta field as a parameter and will either empty or update the meta field and
- * then trigger related posts list regeneration.
- *
- * @param array $data The post ID in $data['id'], the meta key name in
- * $data['meta_key'] and the new value in $data['meta_value'].
- *
- * @return array The related posts in an array format (id, URL and title).
- *
- * @since 2.5.0
- */
-function relevanssi_regenerate_related_endpoint( $data ) {
- if ( 0 === $data['meta_value'] ) {
- delete_post_meta( $data['id'], $data['meta_key'] );
- } else {
- update_post_meta( $data['id'], $data['meta_key'], $data['meta_value'] );
- }
- delete_post_meta( $data['id'], '_relevanssi_related_posts' );
- return relevanssi_generate_related_list( $data['id'], 'ARRAY' );
-}
-
-/**
- * Adds a REST API endpoint for listing common search terms.
- *
- * @param array $data The post ID in $data['id'].
- *
- * @return array The common terms in an array format (id, query, and count).
- *
- * @since 2.5.0
- */
-function relevanssi_list_insights_common_terms( $data ) {
- return relevanssi_generate_tracking_insights_most_common( $data['id'], 'ARRAY' );
-}
-
-/**
- * Adds a REST API endpoint for listing low-ranking search terms.
- *
- * @param array $data The post ID in $data['id'].
- *
- * @return array The terms in an array format (id, query, rank).
- *
- * @since 2.5.0
- */
-function relevanssi_list_insights_low_ranking_terms( $data ) {
- return relevanssi_generate_tracking_insights_low_ranking( $data['id'], 'ARRAY' );
-}
-
-/**
- * Registers the REST API endpoints.
- *
- * @see register_rest_route()
- *
- * @since 2.5.0
- */
-function relevanssi_register_gutenberg_rest_routes() {
- $routes = array(
- array(
- 'path' => '/excluderelatedpost/(?P\d+)/(?P\d+)',
- 'callback' => 'relevanssi_exclude_related_post_endpoint',
- 'args' => array(
- 'exclude' => 'numeric',
- 'post_id' => 'numeric',
- ),
- ),
- array(
- 'path' => '/unexcluderelatedpost/(?P\d+)/(?P\d+)',
- 'callback' => 'relevanssi_unexclude_related_post_endpoint',
- 'args' => array(
- 'return' => 'numeric',
- 'post_id' => 'numeric',
- ),
- ),
- array(
- 'path' => '/listexcluded/(?P\d+)',
- 'callback' => 'relevanssi_list_excluded_posts_endpoint',
- 'args' => array(
- 'id' => 'numeric',
- ),
- ),
- array(
- 'path' => '/listrelated/(?P\d+)',
- 'callback' => 'relevanssi_list_related_posts_endpoint',
- 'args' => array(
- 'id' => 'numeric',
- ),
- ),
- array(
- 'path' => '/sees/(?P\d+)',
- 'callback' => 'relevanssi_sees_post_endpoint',
- 'args' => array(
- 'id' => 'numeric',
- ),
- ),
- array(
- 'path' => '/regeneraterelatedposts/(?P\d+)/(?P\w+)/(?P[^/]+)',
- 'callback' => 'relevanssi_regenerate_related_endpoint',
- 'args' => array(
- 'id' => 'numeric',
- 'meta_key' => 'metakey',
- 'meta_value' => 'urldecode',
- ),
- ),
- array(
- 'path' => '/listinsightscommon/(?P\d+)',
- 'callback' => 'relevanssi_list_insights_common_terms',
- 'args' => array(
- 'id' => 'numeric',
- ),
- ),
- array(
- 'path' => '/listinsightslowranking/(?P\d+)',
- 'callback' => 'relevanssi_list_insights_low_ranking_terms',
- 'args' => array(
- 'id' => 'numeric',
- ),
- ),
- );
-
- foreach ( $routes as $route ) {
- $args = array();
- foreach ( $route['args'] as $name => $type ) {
- switch ( $type ) {
- case 'metakey':
- $args[ $name ] = array(
- 'validate_callback' => function( $param, $request, $key ) {
- return in_array( $param, array( '_relevanssi_related_keywords', '_relevanssi_related_include_ids' ), true );
- },
- );
- break;
- case 'urldecode':
- $args[ $name ] = array(
- 'sanitize_callback' => function( $param, $request, $key ) {
- return urldecode( $param );
- },
- );
- break;
- case 'numeric':
- default:
- $args[ $name ] = array(
- 'validate_callback' => function( $param, $request, $key ) {
- return is_numeric( $param );
- },
- );
- }
- }
-
- register_rest_route(
- 'relevanssi/v1',
- $route['path'],
- array(
- 'methods' => 'GET',
- 'callback' => $route['callback'],
- 'args' => $args,
- 'permission_callback' => function () {
- global $relevanssi_variables;
- // Filter documented in /premium/gutenberg-sidebar.php.
- return current_user_can( apply_filters( 'relevanssi_sidebar_capability', $relevanssi_variables['sidebar_capability'] ) );
- },
- )
- );
- }
-}
-
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/gutenberg-sidebar/index.asset.php b/wp/wp-content/plugins/relevanssi-premium/premium/gutenberg-sidebar/index.asset.php
deleted file mode 100644
index 88eeb121..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/gutenberg-sidebar/index.asset.php
+++ /dev/null
@@ -1 +0,0 @@
- array('wp-components', 'wp-compose', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-i18n', 'wp-plugins', 'wp-polyfill'), 'version' => '3cf891ee5aaa21141e30e23ad95d485e');
\ No newline at end of file
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/gutenberg-sidebar/index.js b/wp/wp-content/plugins/relevanssi-premium/premium/gutenberg-sidebar/index.js
deleted file mode 100644
index 0933fb81..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/gutenberg-sidebar/index.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=14)}([function(e,t){e.exports=window.wp.element},function(e,t){e.exports=window.wp.i18n},function(e,t){e.exports=window.wp.components},function(e,t,n){var r=n(18),o=n(19),l=n(20),c=n(22);e.exports=function(e,t){return r(e)||o(e,t)||l(e,t)||c()}},function(e,t){e.exports=window.wp.data},function(e,t){function n(t){return e.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},n(t)}e.exports=n},function(e,t){e.exports=window.wp.editPost},function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t){function n(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest;","var _typeof = require(\"@babel/runtime/helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;","import {\n\tPanel,\n\tPanelBody,\n\tPanelRow,\n\tTextControl,\n\tTextareaControl,\n\tCheckboxControl,\n\tButton,\n\twithFocusOutside,\n} from \"@wordpress/components\"\nimport { registerPlugin } from \"@wordpress/plugins\"\nimport { PluginSidebar, PluginSidebarMoreMenuItem } from \"@wordpress/edit-post\"\nimport { __ } from \"@wordpress/i18n\"\nimport { select, withSelect, withDispatch } from \"@wordpress/data\"\nimport { compose } from \"@wordpress/compose\"\nimport { useState, useEffect } from \"@wordpress/element\"\n\nconst relevanssiIcon = wp.element.createElement(\n\t\"svg\",\n\t{\n\t\twidth: 20,\n\t\theight: 20,\n\t},\n\twp.element.createElement(\"path\", {\n\t\td:\n\t\t\t\"M5.644 20.665 C6.207 20.545 6.612 20.029 6.574 19.438 6.469 17.784 6.492 16.554 6.617 15.602 L7.388 19.228 C7.454 19.538 7.576 19.815 7.737 20.058 7.742 20.12 7.749 20.181 7.763 20.243 L8.444 23.384 C10.112 23.233 11.311 22.775 11.214 23.077 L10.82 21.227 C10.875 21.218 10.929 21.211 10.984 21.199 10.995 21.197 11.004 21.193 11.015 21.191 L11.35 22.766 C11.571 22.305 13.613 22.092 14.187 21.891 L13.42 19.11 C13.529 18.742 13.553 18.346 13.466 17.936 L12.445 13.134 C12.535 13.088 12.62 13.03 12.698 12.959 12.737 12.929 12.786 12.899 12.84 12.864 13.25 12.596 14.097 12.042 14.433 10.839 L20.429 12.98 C20.642 13.056 20.862 13.067 21.069 13.023 21.456 12.941 21.792 12.667 21.934 12.267 22.154 11.655 21.835 10.981 21.222 10.763 L14.393 8.324 C14.385 8.291 14.379 8.26 14.37 8.226 14.212 7.595 13.573 7.212 12.94 7.372 12.887 7.385 12.838 7.402 12.789 7.422 12.873 6.845 12.859 6.245 12.731 5.643 12.145 2.884 9.422 1.118 6.661 1.705 3.901 2.292 2.132 5.012 2.718 7.771 3.304 10.529 6.027 12.295 8.788 11.708 10.041 11.442 11.088 10.735 11.805 9.786 11.917 9.894 12.05 9.981 12.203 10.04 12.148 10.37 11.997 10.56 11.811 10.71 10.72 11.467 10.238 11.826 9.318 12.07 L8.678 12.167 C7.581 12.344 6.407 12.307 5.457 11.871 4.141 13.689 3.972 15.683 4.221 19.589 4.263 20.238 4.823 20.73 5.473 20.688 5.531 20.685 5.589 20.677 5.644 20.665 Z M8.568 10.67 C6.38 11.135 4.222 9.735 3.758 7.55 3.293 5.364 4.695 3.208 6.883 2.743 9.07 2.278 11.229 3.677 11.693 5.863 12.158 8.049 10.755 10.205 8.568 10.67 Z\",\n\t}),\n\twp.element.createElement(\"path\", {\n\t\td:\n\t\t\t\"M8.009 5.745 C7.25 5.906 6.576 5.754 6.502 5.406 6.496 5.377 6.496 5.348 6.498 5.318 6.012 5.752 5.765 6.429 5.911 7.115 6.127 8.132 7.122 8.783 8.132 8.568 9.142 8.353 9.786 7.354 9.57 6.338 9.483 5.928 9.269 5.58 8.98 5.323 8.755 5.503 8.411 5.66 8.009 5.745 Z\",\n\t})\n)\n\nconst { Fragment } = wp.element\n\nregisterPlugin(\"relevanssi-premium\", {\n\trender: function () {\n\t\tconst [relevanssiSees, setRelevanssiSees] = useState([])\n\t\tconst [relevanssiRelated, setRelevanssiRelated] = useState([])\n\t\tconst [relevanssiExcluded, setRelevanssiExcluded] = useState([])\n\t\tconst [relevanssiExcludedIds, setRelevanssiExcludedIds] = useState([])\n\n\t\tconst regenerateRelatedPosts = (postId, metaKey, metaValue) => {\n\t\t\tif (!metaValue) metaValue = \"0\"\n\t\t\twp.apiFetch({\n\t\t\t\tpath: `/relevanssi/v1/regeneraterelatedposts/${postId}/${metaKey}/${metaValue}`,\n\t\t\t}).then((data) => {\n\t\t\t\tsetRelevanssiRelated(createRelatedList(data))\n\t\t\t})\n\t\t}\n\n\t\tconst RelatedPostControl = withFocusOutside(\n\t\t\tclass extends React.Component {\n\t\t\t\thandleFocusOutside() {\n\t\t\t\t\tregenerateRelatedPosts(\n\t\t\t\t\t\twp.data.select(\"core/editor\").getCurrentPostId(),\n\t\t\t\t\t\tthis.props.metaKey,\n\t\t\t\t\t\twp.data.select(\"core/editor\").getEditedPostAttribute(\"meta\")[\n\t\t\t\t\t\t\tthis.props.metaKey\n\t\t\t\t\t\t]\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\trender() {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t \n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\n\t\tconst MetaControl = compose(\n\t\t\twithDispatch((dispatch, props) => {\n\t\t\t\treturn {\n\t\t\t\t\tsetMetaValue: function (metaValue) {\n\t\t\t\t\t\tdispatch(\"core/editor\").editPost({\n\t\t\t\t\t\t\tmeta: { [props.metaKey]: metaValue },\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}),\n\t\t\twithSelect((select, props) => {\n\t\t\t\tlet metaValue = select(\"core/editor\").getEditedPostAttribute(\"meta\")[\n\t\t\t\t\tprops.metaKey\n\t\t\t\t]\n\t\t\t\tif (metaValue === \"0\") metaValue = \"\"\n\t\t\t\treturn {\n\t\t\t\t\tmetaValue,\n\t\t\t\t}\n\t\t\t})\n\t\t)((props) => {\n\t\t\tlet args = {\n\t\t\t\tlabel: props.title,\n\t\t\t\tvalue: props.metaValue,\n\t\t\t\tonChange: function (content) {\n\t\t\t\t\tprops.setMetaValue(content)\n\t\t\t\t},\n\t\t\t}\n\t\t\tif (props.control == CheckboxControl) {\n\t\t\t\tconst checked = props.metaValue == \"on\" ? true : false\n\t\t\t\targs.value = \"\"\n\t\t\t\targs.checked = checked\n\t\t\t\targs.onChange = function (content) {\n\t\t\t\t\tcontent = content ? \"on\" : \"off\"\n\t\t\t\t\tprops.setMetaValue(content)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn wp.element.createElement(props.control, args)\n\t\t})\n\n\t\tconst excludeRelatedPost = (excludedPostId, postId) => {\n\t\t\twp.apiFetch({\n\t\t\t\tpath: `/relevanssi/v1/excluderelatedpost/${excludedPostId}/${postId}`,\n\t\t\t}).then((data) => {\n\t\t\t\tsetRelevanssiExcludedIds(data)\n\t\t\t})\n\t\t}\n\n\t\tconst unExcludeRelatedPost = (excludedPostId, postId) => {\n\t\t\twp.apiFetch({\n\t\t\t\tpath: `/relevanssi/v1/unexcluderelatedpost/${excludedPostId}/${postId}`,\n\t\t\t}).then((data) => {\n\t\t\t\tsetRelevanssiExcludedIds(data)\n\t\t\t})\n\t\t}\n\n\t\tconst postId = select(\"core/editor\").getCurrentPostId()\n\t\tuseEffect(() => {\n\t\t\twp.apiFetch({\n\t\t\t\tpath: `/relevanssi/v1/sees/${postId}`,\n\t\t\t}).then((data) => {\n\t\t\t\tsetRelevanssiSees(data)\n\t\t\t})\n\t\t}, [postId])\n\n\t\t/* \n\n\n\t\t\t\t\t\t\t*/\n\n\t\tconst createRelatedList = (data) => {\n\t\t\treturn data.map((row) => {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t{row.title} {\" \"}\n\t\t\t\t\t\t excludeRelatedPost(row.id, postId)}>\n\t\t\t\t\t\t\t({__(\"not this\", \"relevanssi\")})\n\t\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t)\n\t\t\t})\n\t\t}\n\t\tuseEffect(() => {\n\t\t\twp.apiFetch({\n\t\t\t\tpath: `/relevanssi/v1/listrelated/${postId}`,\n\t\t\t}).then((data) => {\n\t\t\t\tsetRelevanssiRelated(createRelatedList(data))\n\t\t\t})\n\t\t}, [postId, relevanssiExcludedIds])\n\n\t\tuseEffect(() => {\n\t\t\twp.apiFetch({\n\t\t\t\tpath: `/relevanssi/v1/listexcluded/${postId}`,\n\t\t\t}).then((data) => {\n\t\t\t\tconst list = data.map((row) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{row.title} \n\t\t\t\t\t\t\t unExcludeRelatedPost(row.id, postId)}>\n\t\t\t\t\t\t\t\t({__(\"use this\", \"relevanssi\")})\n\t\t\t\t\t\t\t \n\t\t\t\t\t\t \n\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t\tsetRelevanssiExcluded(list)\n\t\t\t})\n\t\t}, [postId, relevanssiExcludedIds])\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\tRelevanssi Premium\n\t\t\t\t \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{relevanssiSees.title && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Title:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.title}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.content && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Content:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.content}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.author && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Author:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.author}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.category && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Categories:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.category}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.tag && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Tags:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.tag}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.taxonomy && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Other taxonomies:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.taxonomy}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.comment && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Comments:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.comment}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.customfield && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Custom fields:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.customfield}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.excerpt && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Excerpt:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.excerpt}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.link && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"Links to this post:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.link}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.mysql && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{__(\"MySQL columns:\", \"relevanssi\")} \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.mysql}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{relevanssiSees.reason && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{__(\"Reason this post is not indexed:\", \"relevanssi\")}\n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t{relevanssiSees.reason}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t \n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t{__(\"Related posts for this post:\", \"relevanssi\")}
\n\t\t\t\t\t\t\t{relevanssiRelated} \n\n\t\t\t\t\t\t\t{__(\"Excluded posts for this post:\", \"relevanssi\")}
\n\t\t\t\t\t\t\t{relevanssiExcluded} \n\t\t\t\t\t\t \n\t\t\t\t\t \n\t\t\t\t \n\t\t\t \n\t\t)\n\t},\n})\n","(function() { module.exports = window[\"wp\"][\"components\"]; }());","(function() { module.exports = window[\"wp\"][\"compose\"]; }());","(function() { module.exports = window[\"wp\"][\"data\"]; }());","(function() { module.exports = window[\"wp\"][\"editPost\"]; }());","(function() { module.exports = window[\"wp\"][\"element\"]; }());","(function() { module.exports = window[\"wp\"][\"i18n\"]; }());","(function() { module.exports = window[\"wp\"][\"plugins\"]; }());"],"sourceRoot":""}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/indexing.php b/wp/wp-content/plugins/relevanssi-premium/premium/indexing.php
deleted file mode 100644
index 32dca435..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/indexing.php
+++ /dev/null
@@ -1,1813 +0,0 @@
-ID );
- }
- }
-}
-
-/**
- * Indexes taxonomy terms when term is updated.
- *
- * @param string $term The term.
- * @param int $taxonomy_term_id The term taxonomy ID (not used here).
- * @param string $taxonomy The taxonomy.
- */
-function relevanssi_edit_term( $term, $taxonomy_term_id, $taxonomy ) {
- $update = true;
- relevanssi_do_term_indexing( $term, $taxonomy, $update );
-}
-
-/**
- * Indexes taxonomy terms when term is added.
- *
- * @param string $term The term.
- * @param int $taxonomy_term_id The term taxonomy ID (not used here).
- * @param string $taxonomy The taxonomy.
- */
-function relevanssi_add_term( $term, $taxonomy_term_id, $taxonomy ) {
- $update = false;
- relevanssi_do_term_indexing( $term, $taxonomy, $update );
-}
-
-/**
- * Indexes taxonomy term, if taxonomy term indexing is enabled.
- *
- * @param string $term The term.
- * @param string $taxonomy The taxonomy.
- * @param boolean $update If true, term is updated; if false, it is added.
- */
-function relevanssi_do_term_indexing( $term, $taxonomy, $update ) {
- if ( 'on' === get_option( 'relevanssi_index_taxonomies' ) ) {
- $taxonomies = get_option( 'relevanssi_index_terms' );
- if ( in_array( $taxonomy, $taxonomies, true ) ) {
- relevanssi_index_taxonomy_term( $term, $taxonomy, $update );
- }
- }
-}
-
-/**
- * Deletes an user from Relevanssi index.
- *
- * Deletes an user from the Relevanssi index. Attached to the 'delete_user' action.
- *
- * @global $wpdb The WordPress database interface.
- * @global $relevanssi_variables The global Relevanssi variables, used for the database table names.
- *
- * @param int $user User ID to delete.
- */
-function relevanssi_delete_user( int $user ) {
- global $wpdb, $relevanssi_variables;
- $user = intval( $user );
- $wpdb->query( 'DELETE FROM ' . $relevanssi_variables['relevanssi_table'] . " WHERE item = $user AND type = 'user'" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
-}
-
-/**
- * Deletes a taxonomy term from Relevanssi index.
- *
- * Deletes a taxonomy term from the Relevanssi index. Attached to the 'delete_term' action.
- *
- * @global $wpdb The WordPress database interface.
- * @global $relevanssi_variables The global Relevanssi variables, used for the database table names.
- *
- * @param int $term Term ID to remove.
- * @param int $term_taxonomy_id Term taxonomy ID (not used).
- * @param string $taxonomy The taxonomy.
- */
-function relevanssi_delete_taxonomy_term( $term, $term_taxonomy_id, $taxonomy ) {
- global $wpdb, $relevanssi_variables;
- $wpdb->query( 'DELETE FROM ' . $relevanssi_variables['relevanssi_table'] . " WHERE item = $term AND type = '$taxonomy'" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
-}
-
-/**
- * Generates the custom field detail field for indexing.
- *
- * Premium stores more detail about custom field indexing. This function
- * generates the custom field detail.
- *
- * @param array $insert_data Data used to generate the INSERT queries.
- * @param string $token The indexed token.
- * @param int $count The number of matches.
- * @param string $field Name of the custom field.
- *
- * @return array $insert_data New source data for the INSERT queries added.
- */
-function relevanssi_customfield_detail( $insert_data, $token, $count, $field ) {
- if ( isset( $insert_data[ $token ]['customfield_detail'] ) ) {
- // Custom field detail for this token already exists.
- $custom_field_detail = json_decode( $insert_data[ $token ]['customfield_detail'], true );
- } else {
- // Nothing yet, create new.
- $custom_field_detail = array();
- }
-
- relevanssi_increase_value( $custom_field_detail[ $field ], $count );
-
- $insert_data[ $token ]['customfield_detail'] = wp_json_encode( $custom_field_detail );
- return $insert_data;
-}
-
-/**
- * Indexes custom MySQL column content.
- *
- * Generates the INSERT query base data for MySQL column content.
- *
- * @global $wpdb The WordPress database interface.
- *
- * @param array $insert_data Data used to generate the INSERT queries.
- * @param string $post_id Post ID.
- *
- * @return array $insert_data New source data for the INSERT queries added.
- */
-function relevanssi_index_mysql_columns( $insert_data, $post_id ) {
- $custom_columns = get_option( 'relevanssi_mysql_columns' );
- if ( ! empty( $custom_columns ) ) {
- global $wpdb;
-
- // Get a list of possible column names.
- $column_list = wp_cache_get( 'relevanssi_column_list' );
- if ( false === $column_list ) {
- $column_list = $wpdb->get_results( "SHOW COLUMNS FROM $wpdb->posts" );
- wp_cache_set( 'relevanssi_column_list', $column_list );
- }
- $valid_columns = array();
- foreach ( $column_list as $column ) {
- array_push( $valid_columns, $column->Field ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
- }
-
- // This is to remove problems where the list ends in a comma.
- $custom_column_array = explode( ',', $custom_columns );
- $custom_column_list_array = array();
- foreach ( $custom_column_array as $column ) {
- $column = trim( $column );
- if ( in_array( $column, $valid_columns, true ) ) {
- $custom_column_list_array[] = $column;
- }
- }
- $custom_column_list = implode( ', ', $custom_column_list_array );
-
- $custom_column_data = $wpdb->get_row( "SELECT $custom_column_list FROM $wpdb->posts WHERE ID=$post_id", ARRAY_A ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- $remove_stopwords = true;
- $minimum_word_length = get_option( 'relevanssi_min_word_length', 3 );
- if ( is_array( $custom_column_data ) ) {
- foreach ( $custom_column_data as $column => $data ) {
- /** This filter is documented in common/indexing.php */
- $data = apply_filters(
- 'relevanssi_indexing_tokens',
- relevanssi_tokenize( $data, $remove_stopwords, $minimum_word_length, 'indexing' ),
- 'mysql-content'
- );
- if ( count( $data ) > 0 ) {
- foreach ( $data as $term => $count ) {
- if ( isset( $insert_data[ $term ]['mysqlcolumn'] ) ) {
- $insert_data[ $term ]['mysqlcolumn'] += $count;
- } else {
- $insert_data[ $term ]['mysqlcolumn'] = $count;
- }
- $insert_data = relevanssi_mysqlcolumn_detail( $insert_data, $term, $count, $column );
- }
- }
- }
- }
- }
- return $insert_data;
-}
-
-/**
- * Generates the MySQL column detail field for indexing.
- *
- * This function generates the MySQL column detail.
- *
- * @param array $insert_data Data used to generate the INSERT queries.
- * @param string $token The indexed token.
- * @param int $count The number of matches.
- * @param string $column Name of the column.
- *
- * @return array $insert_data New source data for the INSERT queries added.
- */
-function relevanssi_mysqlcolumn_detail( $insert_data, $token, $count, $column ) {
- if ( isset( $insert_data[ $token ]['mysqlcolumn_detail'] ) ) {
- // Custom field detail for this token already exists.
- $mysqlcolumn_detail = json_decode( $insert_data[ $token ]['mysqlcolumn_detail'], true );
- } else {
- // Nothing yet, create new.
- $mysqlcolumn_detail = array();
- }
-
- relevanssi_increase_value( $mysqlcolumn_detail[ $column ], $count );
-
- $insert_data[ $token ]['mysqlcolumn_detail'] = wp_json_encode( $mysqlcolumn_detail );
-
- return $insert_data;
-}
-
-/**
- * Processes internal links.
- *
- * Process the internal links the way user wants: no indexing, indexing, or stripping.
- *
- * @global $wpdb The WordPress database interface.
- * @global $relevanssi_variables The global Relevanssi variables, used for the database table names.
- *
- * @param string $contents Post content.
- * @param int $post_id Post ID.
- *
- * @return string $contents Contents, modified.
- */
-function relevanssi_process_internal_links( $contents, $post_id ) {
- $internal_links_behaviour = get_option( 'relevanssi_internal_links', 'noindex' );
-
- if ( 'noindex' !== $internal_links_behaviour ) {
- global $relevanssi_variables, $wpdb;
- $min_word_length = get_option( 'relevanssi_min_word_length', 3 );
-
- // Index internal links.
- $internal_links = relevanssi_get_internal_links( $contents );
-
- if ( ! empty( $internal_links ) ) {
- foreach ( $internal_links as $link => $text ) {
- $link_id = url_to_postid( $link );
- if ( ! empty( $link_id ) ) {
- /** This filter is documented in common/indexing.php */
- $link_words = apply_filters( 'relevanssi_indexing_tokens', relevanssi_tokenize( $text, true, $min_word_length, 'indexing' ), 'internal-links' );
- if ( count( $link_words ) > 0 ) {
- foreach ( $link_words as $word => $count ) {
- $wpdb->query(
- $wpdb->prepare(
- 'INSERT IGNORE INTO ' . $relevanssi_variables['relevanssi_table'] . ' (doc, term, term_reverse, link, item) VALUES (%d, %s, REVERSE(%s), %d, %d)', // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- $link_id,
- $word,
- $word,
- $count,
- $post_id
- )
- );
- }
- }
- }
- }
-
- if ( 'strip' === $internal_links_behaviour ) {
- $contents = relevanssi_strip_internal_links( $contents );
- }
- }
- }
-
- return $contents;
-}
-
-/**
- * Finds internal links.
- *
- * A function to find all internal links in the parameter text.
- *
- * @param string $text Text where the links are extracted from.
- *
- * @return array $links All links in the post, or false if fails.
- */
-function relevanssi_get_internal_links( $text ) {
- $links = array();
- if ( preg_match_all( '@]*?href="(' . home_url() . '[^"]*?)"[^>]*?>(.*?) @siu', $text, $m ) ) {
- foreach ( $m[1] as $i => $link ) {
- if ( ! isset( $links[ $link ] ) ) {
- $links[ $link ] = '';
- }
- $links[ $link ] .= ' ' . $m[2][ $i ];
- }
- }
- if ( preg_match_all( '@]*?href="(/[^"]*?)"[^>]*?>(.*?) @siu', $text, $m ) ) {
- foreach ( $m[1] as $i => $link ) {
- if ( ! isset( $links[ $link ] ) ) {
- $links[ $link ] = '';
- }
- $links[ $link ] .= ' ' . $m[2][ $i ];
- }
- }
- if ( count( $links ) > 0 ) {
- return $links;
- }
- return false;
-}
-
-/**
- * Strips internal links.
- *
- * A function to strip all internal links from the parameter text.
- *
- * @param string $text Text where the links are extracted from.
- *
- * @return array $links The text without the links.
- */
-function relevanssi_strip_internal_links( $text ) {
- $text = preg_replace(
- array(
- '@]*?href="' . home_url() . '[^>]*?>.*? @siu',
- ),
- ' ',
- $text
- );
- $text = preg_replace(
- array(
- '@]*?href="/[^>]*?>.*? @siu',
- ),
- ' ',
- $text
- );
- return $text;
-}
-
-/**
- * Applies the thousands separator rule to text.
- *
- * Finds numbers separated by the chosen thousand separator and combine them.
- *
- * @param string $string The string to fix.
- *
- * @return string $string The fixed string.
- */
-function relevanssi_apply_thousands_separator( $string ) {
- $thousands_separator = get_option( 'relevanssi_thousand_separator', '' );
- if ( ! empty( $thousands_separator ) ) {
- $pattern = '/(\d+)' . preg_quote( $thousands_separator, '/' ) . '(\d+)/u';
- $string = preg_replace( $pattern, '$1$2', $string );
- }
- return $string;
-}
-
-/**
- * Adds a stemmer-enabling filter.
- *
- * This filter introduces a new filter hook that runs the stemmers.
- *
- * @param string $string The string that is stemmed.
- *
- * @return string $string The string after stemming.
- */
-function relevanssi_enable_stemmer( $string ) {
- /**
- * Applies stemmer to document content and search terms.
- *
- * @param string $string The string that is stemmed.
- *
- * @return string $string The string after stemming.
- */
- $string = apply_filters( 'relevanssi_stemmer', $string );
- return $string;
-}
-
-/**
- * Does simple English stemming.
- *
- * A simple suffix stripper that can be used to stem English texts.
- *
- * @param string $term Search term to stem.
- *
- * @return string $term The stemmed term.
- */
-function relevanssi_simple_english_stemmer( $term ) {
- $len = strlen( $term );
-
- $end1 = substr( $term, -1, 1 );
- if ( 's' === $end1 && $len > 3 ) {
- $term = substr( $term, 0, -1 );
- $len--;
- }
- $end = substr( $term, -3, 3 );
-
- if ( 'ing' === $end && $len > 5 ) {
- return substr( $term, 0, -3 );
- }
- if ( 'est' === $end && $len > 5 ) {
- return substr( $term, 0, -3 );
- }
-
- $end = substr( $end, 1 );
- if ( 'es' === $end && $len > 3 ) {
- return substr( $term, 0, -2 );
- }
- if ( 'ie' === $end && $len > 3 ) {
- return substr( $term, 0, -1 );
- }
- if ( 'ed' === $end && $len > 3 ) {
- return substr( $term, 0, -2 );
- }
- if ( 'en' === $end && $len > 3 ) {
- return substr( $term, 0, -2 );
- }
- if ( 'er' === $end && $len > 3 ) {
- return substr( $term, 0, -2 );
- }
- if ( 'ly' === $end && $len > 4 ) {
- return substr( $term, 0, -2 );
- }
-
- $end = substr( $end, -1 );
- if ( 'y' === $end && $len > 3 ) {
- return substr( $term, 0, -1 ) . 'i';
- }
-
- return $term;
-}
-
-/**
- * Creates the synonym replacement array.
- *
- * A helper function that generates a synonym replacement array. The array
- * is then stored in a global variable, so that it only needs to generated
- * once per running the script.
- *
- * @global $relevanssi_variables The global Relevanssi variables, used to
- * store the synonym database.
- */
-function relevanssi_create_synonym_replacement_array() {
- global $relevanssi_variables;
-
- $synonym_data = get_option( 'relevanssi_synonyms' );
- $current_language = relevanssi_get_current_language();
- $synonyms = array();
-
- if ( isset( $synonym_data[ $current_language ] ) ) {
- $synonym_data = relevanssi_strtolower( $synonym_data[ $current_language ] );
- $pairs = explode( ';', $synonym_data );
-
- foreach ( $pairs as $pair ) {
- if ( empty( $pair ) ) {
- continue;
- }
- $parts = explode( '=', $pair );
- $key = strval( trim( $parts[0] ) );
- $value = trim( $parts[1] );
- if ( ! isset( $synonyms[ $value ] ) ) {
- $synonyms[ $value ] = "$value $key";
- } else {
- $synonyms[ $value ] .= " $key";
- }
- }
- }
- $relevanssi_variables['synonyms'] = $synonyms;
-}
-
-/**
- * Adds synonyms to post content and titles for indexing.
- *
- * In order to use synonyms in AND searches, the synonyms must be indexed within the posts.
- * This function adds synonyms for post content and titles when indexing posts.
- *
- * @global $relevanssi_variables The global Relevanssi variables, used for the synonym database.
- *
- * @param array $tokens An array of tokens and their frequencies.
- *
- * @return array An array of filtered token-frequency pairs.
- */
-function relevanssi_add_indexing_synonyms( $tokens ) {
- global $relevanssi_variables;
-
- if ( ! isset( $relevanssi_variables['synonyms'] ) ) {
- relevanssi_create_synonym_replacement_array();
- }
-
- $new_tokens = array();
- $synonyms = $relevanssi_variables['synonyms'];
-
- foreach ( $tokens as $token => $tf ) {
- if ( isset( $synonyms[ $token ] ) ) {
- $token_and_the_synonyms = explode( ' ', $synonyms[ $token ] );
- foreach ( $token_and_the_synonyms as $new_token ) {
- $new_tokens[ $new_token ] = $tf;
- }
- } else {
- $new_tokens[ $token ] = $tf;
- }
- }
-
- return $new_tokens;
-}
-
-/**
- * Adds synonyms to a content.
- *
- * @global $relevanssi_variables The global Relevanssi variables, used for the synonym database.
- *
- * @param string $content The content to add synonyms to.
- *
- * @return string $content The content with synonyms.
- */
-function relevanssi_prepare_indexing_content( $content ) {
- global $relevanssi_variables;
-
- if ( ! isset( $relevanssi_variables['synonyms'] ) ) {
- relevanssi_create_synonym_replacement_array();
- }
-
- $synonyms = $relevanssi_variables['synonyms'];
- $content = relevanssi_strtolower( $content );
- $content = preg_split( '/[\s,.()!?]/', $content );
- $ret = array();
- $len = count( $content );
- for ( $i = 0; $i < $len; ++$i ) {
- $val = $content[ $i ];
- if ( 0 === strlen( $val ) ) {
- continue;
- }
-
- if ( isset( $synonyms[ $val ] ) ) {
- $ret[] = $synonyms[ $val ];
- } else {
- $ret[] = $val;
- }
- }
-
- return implode( ' ', $ret );
-}
-
-
-/**
- * Adds ACF repeater fields to the list of custom fields.
- *
- * Goes through custom fields, finds fields that match the fieldname_%_subfieldname
- * pattern, finds the number of fields from the fieldname custom field and then
- * adds the fieldname_0_subfieldname... fields to the list of custom fields. Only
- * works one level deep.
- *
- * @param array $custom_fields The list of custom fields, used as a reference.
- * @param int $post_id The post ID of the current post.
- */
-function relevanssi_add_repeater_fields( &$custom_fields, $post_id ) {
- global $wpdb;
-
- /**
- * Filters the list of custom fields to index before the repeater fields
- * are expanded. If you want to add repeater fields using the
- * field_%_subfield notation from code, you can use this filter hook.
- *
- * @param array $custom_fields The list of custom fields. This array
- * includes all custom fields that are to be indexed, so make sure you add
- * new fields here and don't remove anything you want included in the index.
- */
- $custom_fields = apply_filters( 'relevanssi_custom_fields_before_repeaters', $custom_fields );
- $repeater_fields = array();
- foreach ( $custom_fields as $field ) {
- $number_of_levels = substr_count( $field, '%' );
- if ( $number_of_levels > 0 ) {
- $field = str_replace( '\%', '%', $wpdb->esc_like( $field ) );
- $fields = $wpdb->get_col( $wpdb->prepare( "SELECT meta_key FROM $wpdb->postmeta WHERE meta_key LIKE %s AND post_id = %d", $field, $post_id ) );
-
- $repeater_fields = array_merge( $repeater_fields, $fields );
- } else {
- continue;
- }
- }
-
- $custom_fields = array_merge( $custom_fields, $repeater_fields );
-}
-
-/**
- * Adds the PDF data from child posts to parent posts.
- *
- * Takes the PDF content data from child posts for indexing purposes.
- *
- * @global $wpdb The WordPress database interface.
- *
- * @param array $insert_data The base data for INSERT queries.
- * @param int $post_id The post ID.
- *
- * @return array $insert_data The INSERT data with new content added.
- */
-function relevanssi_index_pdf_for_parent( $insert_data, $post_id ) {
- $option = get_option( 'relevanssi_index_pdf_parent', '' );
- if ( empty( $option ) || 'off' === $option ) {
- return $insert_data;
- }
-
- global $wpdb;
-
- $post_id = intval( $post_id );
- $query = "SELECT meta_value FROM $wpdb->postmeta AS pm, $wpdb->posts AS p WHERE pm.post_id = p.ID AND p.post_parent = $post_id AND meta_key = '_relevanssi_pdf_content'";
- /**
- * Filters the database query that fetches the PDF content for the parent post.
- *
- * @param string $query The MySQL query.
- * @param int $post_id The parent post ID.
- */
- $query = apply_filters( 'relevanssi_pdf_for_parent_query', $query, $post_id );
- $pdf_content = $wpdb->get_col( $query ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
-
- if ( is_array( $pdf_content ) ) {
- foreach ( $pdf_content as $row ) {
- /** This filter is documented in common/indexing.php */
- $data = apply_filters( 'relevanssi_indexing_tokens', relevanssi_tokenize( $row, true, get_option( 'relevanssi_min_word_length', 3 ), 'indexing' ), 'pdf-content' );
- if ( count( $data ) > 0 ) {
- foreach ( $data as $term => $count ) {
- if ( isset( $insert_data[ $term ]['customfield'] ) ) {
- $insert_data[ $term ]['customfield'] += $count;
- } else {
- $insert_data[ $term ]['customfield'] = $count;
- }
- $insert_data = relevanssi_customfield_detail( $insert_data, $term, $count, '_relevanssi_pdf_content' );
- }
- }
- }
- }
-
- /**
- * Filters the index data for the PDF contents.
- *
- * @param array $insert_data The data for INSERT clauses, format is
- * $insert_data[ term ][ column ] = frequency.
- * @param int $post_id The parent post ID.
- */
- return apply_filters( 'relevanssi_pdf_for_parent_insert_data', $insert_data, $post_id );
-}
-
-/**
- * Indexes all users.
- *
- * Runs indexing on all users.
- *
- * @global $wpdb The WordPress database interface.
- * @global $relevanssi_variables The global Relevanssi variables, used for the database table names.
- */
-function relevanssi_index_users() {
- global $wpdb, $relevanssi_variables;
-
- // Delete all users from the Relevanssi index first.
- $wpdb->query( 'DELETE FROM ' . $relevanssi_variables['relevanssi_table'] . " WHERE type = 'user'" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
-
- $users = relevanssi_get_users( array() );
-
- if ( defined( 'WP_CLI' ) && WP_CLI ) {
- $progress = WP_CLI\Utils\make_progress_bar( 'Indexing users', count( $users ) );
- }
-
- $update = false;
- foreach ( $users as $user ) {
- /**
- * Checks if the user can be indexed.
- *
- * @param boolean $index Should the user be indexed, default true.
- * @param object $user The user object.
- *
- * @return boolean $index If false, do not index the user.
- */
- $index_this_user = apply_filters( 'relevanssi_user_index_ok', true, $user );
-
- if ( $index_this_user ) {
- relevanssi_index_user( $user, $update );
- }
-
- if ( defined( 'WP_CLI' ) && WP_CLI ) {
- $progress->tick();
- }
- }
- if ( defined( 'WP_CLI' ) && WP_CLI ) {
- $progress->finish();
- }
-}
-
-/**
- * Indexes users in AJAX context.
- *
- * Runs indexing on all users in AJAX context.
- *
- * @global $wpdb The WordPress database interface.
- * @global $relevanssi_variables The global Relevanssi variables, used for the database table names.
- *
- * @param int $limit Number of users to index on one go.
- * @param int $offset Indexing offset.
- *
- * @return array $response AJAX response, number of users indexed in the $response['indexed'].
- */
-function relevanssi_index_users_ajax( $limit, $offset ) {
- $args = array(
- 'number' => intval( $limit ),
- 'offset' => intval( $offset ),
- );
-
- $users = relevanssi_get_users( $args );
-
- $indexed_users = 0;
- $update = false;
- foreach ( $users as $user ) {
- /**
- * Checks if the user can be indexed.
- *
- * @param boolean $index Should the user be indexed, default true.
- * @param object $user The user object.
- *
- * @return boolean $index If false, do not index the user.
- */
- $index_this_user = apply_filters( 'relevanssi_user_index_ok', true, $user );
- if ( $index_this_user ) {
- relevanssi_index_user( $user, $update );
- $indexed_users++;
- }
- }
-
- $response = array(
- 'indexed' => $indexed_users,
- );
-
- return $response;
-}
-
-/**
- * Gets the list of users.
- *
- * @param array $args The user indexing arguments.
- *
- * @return array An array of user profiles.
- */
-function relevanssi_get_users( array $args ) {
- $index_subscribers = get_option( 'relevanssi_index_subscribers' );
- if ( 'on' !== $index_subscribers ) {
- $args['role__not_in'] = array( 'subscriber' );
- }
-
- /**
- * Filters the user fetching arguments.
- *
- * Useful to control the user role, for example: just set 'role__in' to whatever
- * you need.
- *
- * @param array User fetching arguments.
- */
- $users_list = get_users( apply_filters( 'relevanssi_user_indexing_args', $args ) );
- $users = array();
- foreach ( $users_list as $user ) {
- $users[] = get_userdata( $user->ID );
- }
-
- return $users;
-}
-
-/**
- * Indexes one user.
- *
- * Indexes one user profile.
- *
- * @global $wpdb The WordPress database interface.
- * @global $relevanssi_variables The global Relevanssi variables, used for the database table names.
- *
- * @param object|int $user The user object or user ID.
- * @param boolean $remove_first Should the user be deleted first or not, default false.
- */
-function relevanssi_index_user( $user, $remove_first = false ) {
- global $wpdb, $relevanssi_variables;
-
- if ( is_numeric( $user ) ) {
- // Not an object, make it an object.
- $user = get_userdata( $user );
- if ( false === $user ) {
- // Invalid user ID given, no user found. Exit.
- return;
- }
- }
-
- if ( $remove_first ) {
- relevanssi_delete_user( $user->ID );
- }
-
- /**
- * Allows manipulating the user object before indexing.
- *
- * This filter can be used to manipulate the user object before it is
- * processed for indexing. It's possible to add extra data (for example to
- * user description field) or to change the existing data.
- *
- * @param object $user The user object.
- */
- $user = apply_filters( 'relevanssi_user_add_data', $user );
-
- $insert_data = array();
- $min_length = get_option( 'relevanssi_min_word_length', 3 );
- $remove_stopwords = true;
-
- $values = relevanssi_get_user_field_content( $user->ID );
- foreach ( $values as $field => $value ) {
- /** This filter is documented in common/indexing.php */
- $tokens = apply_filters( 'relevanssi_indexing_tokens', relevanssi_tokenize( $value, $remove_stopwords, $min_length, 'indexing' ), 'user-fields' );
- foreach ( $tokens as $term => $tf ) {
- if ( isset( $insert_data[ $term ]['customfield'] ) ) {
- $insert_data[ $term ]['customfield'] += $tf;
- } else {
- $insert_data[ $term ]['customfield'] = $tf;
- }
- $insert_data = relevanssi_customfield_detail( $insert_data, $term, $tf, $field );
- }
- }
-
- if ( isset( $user->description ) && '' !== $user->description ) {
- /** This filter is documented in common/indexing.php */
- $tokens = apply_filters( 'relevanssi_indexing_tokens', relevanssi_tokenize( $user->description, $remove_stopwords, $min_length, 'indexing' ), 'user-description' );
- foreach ( $tokens as $term => $tf ) {
- if ( isset( $insert_data[ $term ]['content'] ) ) {
- $insert_data[ $term ]['content'] += $tf;
- } else {
- $insert_data[ $term ]['content'] = $tf;
- }
- }
- }
-
- if ( isset( $user->first_name ) && '' !== $user->first_name ) {
- $parts = explode( ' ', strtolower( $user->first_name ) );
- foreach ( $parts as $part ) {
- if ( empty( $part ) ) {
- continue;
- }
- if ( isset( $insert_data[ $part ]['title'] ) ) {
- $insert_data[ $part ]['title']++;
- } else {
- $insert_data[ $part ]['title'] = 1;
- }
- }
- }
-
- if ( isset( $user->last_name ) && ' ' !== $user->last_name ) {
- $parts = explode( ' ', strtolower( $user->last_name ) );
- foreach ( $parts as $part ) {
- if ( empty( $part ) ) {
- continue;
- }
- if ( isset( $insert_data[ $part ]['title'] ) ) {
- $insert_data[ $part ]['title']++;
- } else {
- $insert_data[ $part ]['title'] = 1;
- }
- }
- }
-
- if ( isset( $user->display_name ) && ' ' !== $user->display_name ) {
- $parts = explode( ' ', strtolower( $user->display_name ) );
- foreach ( $parts as $part ) {
- if ( empty( $part ) ) {
- continue;
- }
- if ( isset( $insert_data[ $part ]['title'] ) ) {
- $insert_data[ $part ]['title']++;
- } else {
- $insert_data[ $part ]['title'] = 1;
- }
- }
- }
-
- /**
- * Allows the user insert data to be manipulated.
- *
- * This function manipulates the user insert data used to create the INSERT queries.
- *
- * @param array $insert_data The source data for the INSERT queries.
- * @param object $user The user object.
- */
- $insert_data = apply_filters( 'relevanssi_user_data_to_index', $insert_data, $user );
-
- foreach ( $insert_data as $term => $data ) {
- $fields = array( 'content', 'title', 'comment', 'tag', 'link', 'author', 'category', 'excerpt', 'taxonomy', 'customfield', 'customfield_detail' );
- foreach ( $fields as $field ) {
- if ( ! isset( $data[ $field ] ) ) {
- $data[ $field ] = 0;
- }
- }
-
- $content = $data['content'];
- $title = $data['title'];
- $comment = $data['comment'];
- $tag = $data['tag'];
- $link = $data['link'];
- $author = $data['author'];
- $category = $data['category'];
- $excerpt = $data['excerpt'];
- $taxonomy = $data['taxonomy'];
- $customfield = $data['customfield'];
- $cf_detail = $data['customfield_detail'];
-
- $wpdb->query(
- $wpdb->prepare(
- 'INSERT IGNORE INTO ' . $relevanssi_variables['relevanssi_table'] . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- ' (item, doc, term, term_reverse, content, title, comment, tag, link, author, category, excerpt, taxonomy, customfield, type, customfield_detail, taxonomy_detail, mysqlcolumn_detail)
- VALUES (%d, %d, %s, REVERSE(%s), %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %s, %s, %s, %s)',
- $user->ID,
- -1,
- $term,
- $term,
- $content,
- $title,
- $comment,
- $tag,
- $link,
- $author,
- $category,
- $excerpt,
- $taxonomy,
- $customfield,
- 'user',
- $cf_detail,
- '',
- ''
- )
- );
- }
-}
-
-/**
- * Counts users.
- *
- * Figures out how many users there are to index.
- *
- * @global $wpdb The WordPress database interface.
- *
- * @return int $count_users Number of users, -1 if user indexing is disabled.
- */
-function relevanssi_count_users() {
- $index_users = get_option( 'relevanssi_index_users' );
- if ( empty( $index_users ) || 'off' === $index_users ) {
- return -1;
- }
-
- $args = array(
- 'fields' => 'ID',
- );
-
- $index_subscribers = get_option( 'relevanssi_index_subscribers' );
- if ( 'on' !== $index_subscribers ) {
- $args['role__not_in'] = array( 'subscriber' );
- }
-
- $users = get_users(
- /**
- * Documented in /premium/indexing.php.
- */
- apply_filters( 'relevanssi_user_indexing_args', $args )
- );
- $count_users = count( $users );
-
- return $count_users;
-}
-
-/**
- * Counts taxonomy terms.
- *
- * Figures out how many taxonomy terms there are to index.
- *
- * @global $wpdb The WordPress database interface.
- *
- * @return int $count_terms Number of taxonomy terms, -1 if taxonomy term indexing is disabled.
- */
-function relevanssi_count_taxonomy_terms() {
- $index_taxonomies = get_option( 'relevanssi_index_taxonomies' );
- if ( empty( $index_taxonomies ) || 'off' === $index_taxonomies ) {
- return -1;
- }
-
- global $wpdb;
-
- $taxonomies = get_option( 'relevanssi_index_terms' );
- if ( empty( $taxonomies ) ) {
- // No taxonomies chosen for indexing.
- return -1;
- }
- $count_terms = 0;
- foreach ( $taxonomies as $taxonomy ) {
- if ( ! taxonomy_exists( $taxonomy ) ) {
- // Non-existing taxonomy. Shouldn't be possible, but better be sure.
- continue;
- }
-
- /**
- * Determines whether empty terms are indexed or not.
- *
- * @param boolean $hide_empty_terms If true, empty terms are not indexed. Default true.
- */
- $hide_empty = apply_filters( 'relevanssi_hide_empty_terms', true );
-
- $count = '';
- if ( $hide_empty ) {
- $count = 'AND tt.count > 0';
- }
-
- $terms = $wpdb->get_col( "SELECT t.term_id FROM $wpdb->terms AS t, $wpdb->term_taxonomy AS tt WHERE t.term_id = tt.term_id $count AND tt.taxonomy = '$taxonomy'" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
-
- $count_terms += count( $terms );
- }
- return $count_terms;
-}
-
-/**
- * Returns the list of taxonomies chosen for indexing.
- *
- * Returns the list of taxonomies chosen for indexing from the 'relevanssi_index_terms' option.
- *
- * @return array $taxonomies A list of taxonomies chosen to be indexed.
- */
-function relevanssi_list_taxonomies() {
- return get_option( 'relevanssi_index_terms' );
-}
-
-/**
- * Indexes taxonomy terms in AJAX context.
- *
- * Runs indexing on taxonomy terms in one taxonomy in AJAX context.
- *
- * @global $wpdb The WordPress database interface.
- * @global $relevanssi_variables The global Relevanssi variables, used for the database table names.
- *
- * @param string $taxonomy The taxonomy to index.
- * @param int $limit Number of users to index on one go.
- * @param int $offset Indexing offset.
- *
- * @return array $response AJAX response, number of taxonomy terms indexed in the
- * $response['indexed'] and a boolean value in $response['taxonomy_completed'] that
- * tells whether the taxonomy is indexed completely or not.
- */
-function relevanssi_index_taxonomies_ajax( $taxonomy, $limit, $offset ) {
- global $wpdb;
-
- $indexed_terms = 0;
- $end_reached = false;
-
- $terms = relevanssi_get_terms( $taxonomy, intval( $limit ), intval( $offset ) );
-
- if ( count( $terms ) < $limit ) {
- $end_reached = true;
- }
-
- foreach ( $terms as $term_id ) {
- $update = false;
- $term = get_term( $term_id, $taxonomy );
- relevanssi_index_taxonomy_term( $term, $taxonomy, $update );
- $indexed_terms++;
- }
-
- $response = array(
- 'indexed' => $indexed_terms,
- 'taxonomy_completed' => 'not',
- );
- if ( $end_reached ) {
- $response['taxonomy_completed'] = 'done';
- }
-
- return $response;
-}
-
-/**
- * Indexes all taxonomies.
- *
- * Runs indexing on all taxonomies.
- *
- * @global $wpdb The WordPress database interface.
- * @global $relevanssi_variables The global Relevanssi variables, used for the database table names.
- *
- * @param boolean $is_ajax Whether indexing is done in the AJAX context, default false.
- *
- * @return array $response If $is_ajax is true, the function returns indexing status in an array.
- */
-function relevanssi_index_taxonomies( $is_ajax = false ) {
- global $wpdb, $relevanssi_variables;
-
- $wpdb->query( 'DELETE FROM ' . $relevanssi_variables['relevanssi_table'] . " WHERE doc = -1 AND type NOT IN ('user', 'post_type')" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
-
- $taxonomies = get_option( 'relevanssi_index_terms' );
- $indexed_terms = 0;
- foreach ( $taxonomies as $taxonomy ) {
- $terms = relevanssi_get_terms( $taxonomy, 0, 0 );
-
- if ( defined( 'WP_CLI' ) && WP_CLI ) {
- $progress = WP_CLI\Utils\make_progress_bar( "Indexing $taxonomy", count( $terms ) );
- }
-
- $update = false;
- foreach ( $terms as $term ) {
- relevanssi_index_taxonomy_term( $term, $taxonomy, $update );
- $indexed_terms++;
- if ( defined( 'WP_CLI' ) && WP_CLI ) {
- $progress->tick();
- }
- }
- if ( defined( 'WP_CLI' ) && WP_CLI ) {
- $progress->finish();
- }
- }
-
- if ( $is_ajax ) {
- if ( $indexed_terms > 0 ) {
- // translators: the number of taxonomy terms.
- return sprintf( __( 'Indexed %d taxonomy terms.', 'relevanssi' ), $indexed_terms );
- } else {
- return __( 'No taxonomies to index.', 'relevanssi' );
- }
- }
-}
-
-/**
- * Gets a list of taxonomy terms.
- *
- * @param string $taxonomy The taxonomy to index.
- * @param int $limit Number of users to index on one go.
- * @param int $offset Indexing offset.
- *
- * @return array A list of taxonomy terms.
- */
-function relevanssi_get_terms( string $taxonomy, int $limit = 0, int $offset = 0 ) : array {
- global $wpdb;
-
- /**
- * Determines whether empty terms are indexed or not.
- *
- * @param boolean $hide_empty_terms If true, empty terms are not indexed. Default true.
- */
- $hide_empty = apply_filters( 'relevanssi_hide_empty_terms', true );
- $count = '';
- if ( $hide_empty ) {
- $count = 'AND tt.count > 0';
- }
-
- $limit_sql = '';
- if ( $limit && $offset ) {
- $limit_sql = $wpdb->prepare( 'LIMIT %d OFFSET %d', $limit, $offset );
- }
-
- $terms = $wpdb->get_col(
- $wpdb->prepare(
- "SELECT t.term_id FROM $wpdb->terms AS t, $wpdb->term_taxonomy AS tt
- WHERE t.term_id = tt.term_id $count AND tt.taxonomy = %s $limit_sql ", // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- $taxonomy
- )
- );
-
- return $terms;
-}
-
-/**
- * Indexes one taxonomy term.
- *
- * @global $wpdb The WordPress database interface.
- * @global $relevanssi_variables The global Relevanssi variables, used for the database table names.
- *
- * @param object|int $term The term object or term ID.
- * @param string $taxonomy The name of the taxonomy.
- * @param boolean $remove_first Should the term be deleted first or not, default false.
- * @param boolean $debug If true, print out debug information, default false.
- */
-function relevanssi_index_taxonomy_term( $term, $taxonomy, $remove_first = false, $debug = false ) {
- global $wpdb, $relevanssi_variables;
-
- if ( is_numeric( $term ) ) {
- // Not an object, so let's get the object.
- $term = get_term( $term, $taxonomy );
- }
-
- /**
- * Allows the term object to be handled before indexing.
- *
- * This filter can be used to add data to term objects before indexing, or to manipulate the object somehow.
- *
- * @param object $term The term object.
- * @param string $taxonomy The taxonomy.
- */
- $term = apply_filters( 'relevanssi_term_add_data', $term, $taxonomy );
-
- $temp_post = new stdClass();
- $temp_post->post_content = $term->description;
- $temp_post->post_title = $term->name;
-
- /**
- * Allows modifying the fake post for the taxonomy term.
- *
- * In order to index taxonomy terms, Relevanssi generates fake posts from the
- * terms. This filter lets you modify the post object. The term description
- * is in the post_content and the term name in the post_title.
- *
- * @param object $temp_post The post object.
- * @param object $term The term object.
- */
- $temp_post = apply_filters( 'relevanssi_post_to_index', $temp_post, $term );
-
- $term->description = $temp_post->post_content;
- $term->name = $temp_post->post_title;
-
- $index_this_post = true;
-
- /**
- * Determines whether a term is indexed or not.
- *
- * If this filter returns true, this term should not be indexed.
- *
- * @param boolean $block If true, do not index this post. Default false.
- * @param WP_Term $term The term object.
- * @param string $taxonomy The term taxonomy.
- */
- if ( true === apply_filters( 'relevanssi_do_not_index_term', false, $term, $taxonomy ) ) {
- // Filter says no.
- if ( $debug ) {
- relevanssi_debug_echo( 'relevanssi_do_not_index_term returned true.' );
- }
- $index_this_post = false;
- }
-
- if ( $remove_first ) {
- // The 0 doesn't mean anything, but because of WP hook parameters, it needs to be there
- // so the taxonomy can be passed as the third parameter.
- relevanssi_delete_taxonomy_term( $term->term_id, 0, $taxonomy );
- }
-
- // This needs to be here, after the call to relevanssi_delete_taxonomy_term(), because otherwise
- // a post that's in the index but shouldn't be there won't get removed.
- if ( ! $index_this_post ) {
- return 'donotindex';
- }
-
- $insert_data = array();
- $remove_stopwords = true;
-
- $min_length = get_option( 'relevanssi_min_word_length', 3 );
- if ( ! isset( $term->description ) ) {
- $term->description = '';
- }
- /**
- * Allows adding extra content to the term before indexing.
- *
- * The term description is passed through this filter, so if you want to add
- * extra content to the description, you can use this filter.
- *
- * @param string $term->description The term description.
- * @param object $term The term object.
- */
- $description = apply_filters( 'relevanssi_tax_term_additional_content', $term->description, $term );
- if ( ! empty( $description ) ) {
- /** This filter is documented in common/indexing.php */
- $tokens = apply_filters( 'relevanssi_indexing_tokens', relevanssi_tokenize( $description, $remove_stopwords, $min_length, 'indexing' ), 'term-description' );
- foreach ( $tokens as $t_term => $tf ) {
- if ( ! isset( $insert_data[ $t_term ]['content'] ) ) {
- $insert_data[ $t_term ]['content'] = 0;
- }
- $insert_data[ $t_term ]['content'] += $tf;
- }
- }
-
- if ( isset( $term->name ) && ! empty( $term->name ) ) {
- /** This filter is documented in common/indexing.php */
- $tokens = apply_filters( 'relevanssi_indexing_tokens', relevanssi_tokenize( $term->name, $remove_stopwords, $min_length, 'indexing' ), 'term-name' );
- foreach ( $tokens as $t_term => $tf ) {
- if ( ! isset( $insert_data[ $t_term ]['title'] ) ) {
- $insert_data[ $t_term ]['title'] = 0;
- }
- $insert_data[ $t_term ]['title'] += $tf;
- }
- }
-
- foreach ( $insert_data as $t_term => $data ) {
- $fields = array( 'content', 'title', 'comment', 'tag', 'link', 'author', 'category', 'excerpt', 'taxonomy', 'customfield' );
- foreach ( $fields as $field ) {
- if ( ! isset( $data[ $field ] ) ) {
- $data[ $field ] = 0;
- }
- }
-
- $content = $data['content'];
- $title = $data['title'];
- $comment = $data['comment'];
- $tag = $data['tag'];
- $link = $data['link'];
- $author = $data['author'];
- $category = $data['category'];
- $excerpt = $data['excerpt'];
- $customfield = $data['customfield'];
- $t_term = trim( $t_term ); // Numeric terms start with a space.
-
- $wpdb->query(
- $wpdb->prepare(
- 'INSERT IGNORE INTO ' . $relevanssi_variables['relevanssi_table'] . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- ' (item, doc, term, term_reverse, content, title, comment, tag, link, author, category, excerpt, taxonomy, customfield, type, customfield_detail, taxonomy_detail, mysqlcolumn_detail)
- VALUES (%d, %d, %s, REVERSE(%s), %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %s, %s, %s, %s)',
- $term->term_id,
- -1,
- $t_term,
- $t_term,
- $content,
- $title,
- $comment,
- $tag,
- $link,
- $author,
- $category,
- $excerpt,
- '',
- $customfield,
- $taxonomy,
- '',
- '',
- ''
- )
- );
- }
-}
-
-/**
- * Removes a document from the index.
- *
- * This Premium version also takes care of internal linking keywords, either keeping them (in case of
- * an update) or removing them (if the post is removed).
- *
- * @global $wpdb The WordPress database interface.
- * @global $relevanssi_variables The global Relevanssi variables, used for the database table names.
- *
- * @param int $post_id The post ID.
- * @param boolean $keep_internal_linking If true, do not remove internal link keywords from this post.
- */
-function relevanssi_premium_remove_doc( $post_id, $keep_internal_linking ) {
- global $wpdb, $relevanssi_variables;
-
- $post_id = intval( $post_id );
- if ( empty( $post_id ) ) {
- // No post ID specified.
- return;
- }
-
- $internal_links = '';
- if ( $keep_internal_linking ) {
- $internal_links = 'AND link = 0';
- }
-
- $wpdb->query( $wpdb->prepare( 'DELETE FROM ' . $relevanssi_variables['relevanssi_table'] . " WHERE doc=%s $internal_links", $post_id ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
-
- if ( ! $keep_internal_linking ) {
- $wpdb->query( $wpdb->prepare( 'DELETE FROM ' . $relevanssi_variables['relevanssi_table'] . ' WHERE link > 0 AND doc=%s', $post_id ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- }
-}
-
-/**
- * Deletes an item (user or taxonomy term) from the index.
- *
- * @global $wpdb The WordPress database interface.
- * @global $relevanssi_variables The global Relevanssi variables, used for the database table names.
- *
- * @param int $item_id The item ID number.
- * @param string $type The item type.
- */
-function relevanssi_remove_item( $item_id, $type ) {
- global $wpdb, $relevanssi_variables;
-
- $item_id = intval( $item_id );
-
- if ( 0 === $item_id && 'post' === $type ) {
- // Security measures.
- return;
- }
-
- $wpdb->query( $wpdb->prepare( 'DELETE FROM ' . $relevanssi_variables['relevanssi_table'] . ' WHERE item = %d AND type = %s', $item_id, $type ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
-}
-
-/**
- * Checks if post is hidden.
- *
- * Used in indexing process to check if post is hidden. Checks the
- * '_relevanssi_hide_post' custom field.
- *
- * @param int $post_id The post ID to check.
- *
- * @return boolean $hidden Is the post hidden?
- */
-function relevanssi_hide_post( $post_id ) {
- $hidden = false;
- $field_value = get_post_meta( $post_id, '_relevanssi_hide_post', true );
- if ( 'on' === $field_value ) {
- $hidden = true;
- }
- return $hidden;
-}
-
-/**
- * Indexes post type archive pages.
- *
- * Goes through all the post type archive pages and indexes them using
- * relevanssi_index_post_type_archive().
- *
- * @see relevanssi_index_post_type_archive()
- * @since 2.2
- *
- * @global object $wpdb The WordPress database object.
- */
-function relevanssi_index_post_type_archives() {
- if ( 'on' === get_option( 'relevanssi_index_post_type_archives' ) ) {
- global $wpdb, $relevanssi_variables;
-
- // Delete all post types from the Relevanssi index first.
- $wpdb->query(
- 'DELETE FROM ' . $relevanssi_variables['relevanssi_table'] . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- " WHERE type = 'post_type'"
- );
-
- $post_types = relevanssi_get_indexed_post_type_archives();
- if ( ! empty( $post_types ) ) {
- if ( defined( 'WP_CLI' ) && WP_CLI ) {
- $progress = WP_CLI\Utils\make_progress_bar(
- 'Indexing post type archives',
- count( $post_types )
- );
- }
- foreach ( $post_types as $post_type ) {
- relevanssi_index_post_type_archive( $post_type );
- if ( defined( 'WP_CLI' ) && WP_CLI ) {
- $progress->tick();
- }
- }
- if ( defined( 'WP_CLI' ) && WP_CLI ) {
- $progress->finish();
- }
- } else {
- if ( defined( 'WP_CLI' ) && WP_CLI ) {
- WP_CLI::log( 'No post types available for post type archive indexing.' );
- }
- }
- } else {
- if ( defined( 'WP_CLI' ) && WP_CLI ) {
- WP_CLI::error( 'Post type archive indexing disabled.' );
- }
- }
-}
-
-/**
- * Indexes post type archive pages in AJAX context.
- *
- * Runs indexing on all post type archives in AJAX context.
- *
- * @return array $response AJAX response, number of post type archives indexed
- * in the$response['indexed'].
- */
-function relevanssi_index_post_type_archives_ajax() {
- $post_types = relevanssi_get_indexed_post_type_archives();
-
- if ( empty( $post_types ) ) {
- $response = array(
- 'indexed' => 0,
- );
- return $response;
- }
-
- $indexed_post_types = 0;
- foreach ( $post_types as $post_type ) {
- relevanssi_index_post_type_archive( $post_type );
- $indexed_post_types++;
- }
-
- $response = array(
- 'indexed' => $indexed_post_types,
- );
-
- return $response;
-}
-
-/**
- * Assigns numeric IDs for post types.
- *
- * Relevanssi requires numeric IDs for post types for indexing purposes. This
- * function assigns numbers for each post type, in alphabetical order. This is a
- * bit of a hack, and fails if new post types are added, but hopefully that
- * doesn't happen too often. The assigned numbers are stored in the option
- * relevanssi_post_type_ids.
- *
- * @since 2.2
- *
- * @return array The post type ID arrays (by ID and by name).
- */
-function relevanssi_assign_post_type_ids() {
- $post_types = relevanssi_get_indexed_post_type_archives();
- sort( $post_types );
-
- $post_type_ids_by_id = array();
- $post_type_ids_by_name = array();
-
- $id = 1;
- foreach ( $post_types as $post_type ) {
- $post_type_ids_by_id[ $id ] = $post_type;
- $post_type_ids_by_name[ $post_type ] = $id;
- $id++;
- }
- update_option(
- 'relevanssi_post_type_ids',
- array(
- 'by_id' => $post_type_ids_by_id,
- 'by_name' => $post_type_ids_by_name,
- )
- );
-
- return array(
- 'by_id' => $post_type_ids_by_id,
- 'by_name' => $post_type_ids_by_name,
- );
-}
-
-/**
- * Gets the post type ID by post type name.
- *
- * Fetches the post type ID from the relevanssi_post_type_ids option by the post
- * type name. If the option is empty, will populate it with values. If the post
- * type can't be found in the list, the function tries to regenerate the list in
- * case there's a new post type Relevanssi doesn't know.
- *
- * @see relevanssi_assign_post_type_ids()
- * @see relevanssi_get_post_type_by_id()
- * @since 2.2
- *
- * @param string $post_type The name of the post type.
- *
- * @return integer|null The post type ID number or null if not a valid post
- * type.
- */
-function relevanssi_get_post_type_by_name( $post_type ) {
- $post_type_ids = get_option( 'relevanssi_post_type_ids', false );
- if ( empty( $post_type_ids ) ) {
- $post_type_ids = relevanssi_assign_post_type_ids();
- }
- if ( ! isset( $post_type_ids['by_name'][ $post_type ] ) ) {
- $post_type_ids = relevanssi_assign_post_type_ids();
- }
- if ( isset( $post_type_ids['by_name'][ $post_type ] ) ) {
- return $post_type_ids['by_name'][ $post_type ];
- } else {
- return null;
- }
-}
-
-/**
- * Gets the post type name by post type ID.
- *
- * Fetches the post type name from the relevanssi_post_type_ids option by the
- * post type ID. If the option is empty, will populate it with values. If the
- * post type can't be found in the list, the function tries to regenerate the
- * list in case there's a new post type Relevanssi doesn't know.
- *
- * @see relevanssi_assign_post_type_ids()
- * @see relevanssi_get_post_type_by_name()
- * @since 2.2
- *
- * @param integer $id The ID number of the post type.
- *
- * @return string|null The post type name or null if not a valid post type.
- */
-function relevanssi_get_post_type_by_id( $id ) {
- $post_type_ids = get_option( 'relevanssi_post_type_ids', false );
- if ( empty( $post_type_ids ) ) {
- $post_type_ids = relevanssi_assign_post_type_ids();
- }
- if ( ! isset( $post_type_ids['by_id'][ $id ] ) ) {
- $post_type_ids = relevanssi_assign_post_type_ids();
- }
- if ( isset( $post_type_ids['by_id'][ $id ] ) ) {
- return $post_type_ids['by_id'][ $id ];
- } else {
- return null;
- }
-}
-
-/**
- * Indexes a post type archive page.
- *
- * Indexes a post type archive page, indexing the archive label and the
- * description which can be set when the post type is registered. The filter
- * hook relevanssi_post_type_additional_content can be used to add additional
- * content to the post type archive description.
- *
- * @since 2.2
- *
- * @param string $post_type The name of the post type.
- * @param boolean $remove_first Should the post type be removed first from the
- * index.
- *
- * @global object $wpdb The WordPress database object.
- * @global array $relevanssi_variables The Relevanssi global variables.
- */
-function relevanssi_index_post_type_archive( $post_type, $remove_first = true ) {
- $post_type_object = get_post_type_object( $post_type );
- global $wpdb, $relevanssi_variables;
-
- /**
- * Allows excluding post type archives from the index.
- *
- * If this filter hook returns false, the post type archive won't be
- * indexed and if it's already indexed, it will be removed from the index.
- *
- * @param boolean If true, index the archive. Default true.
- * @param object The post type object.
- */
- if ( ! apply_filters( 'relevanssi_post_type_archive_ok', true, $post_type ) ) {
- relevanssi_delete_post_type_object( $post_type );
- return;
- }
-
- $temp_post = new stdClass();
- $temp_post->post_content = $post_type_object->description;
- $temp_post->post_title = $post_type_object->name;
-
- /**
- * Allows modifying the fake post for the post type archive.
- *
- * In order to index post type archives, Relevanssi generates fake posts
- * from the post types. This filter lets you modify the post object. The
- * post type description is in the post_content and the post type name in
- * the post_title.
- *
- * @param object $temp_post The post object.
- * @param object $post_type The post type object.
- */
- $temp_post = apply_filters(
- 'relevanssi_post_to_index',
- $temp_post,
- $post_type_object
- );
-
- $post_type_object->description = $temp_post->post_content;
- $post_type_object->name = $temp_post->post_title;
-
- if ( $remove_first ) {
- relevanssi_delete_post_type_object( $post_type );
- }
-
- $insert_data = array();
- $remove_stopwords = true;
-
- $min_length = get_option( 'relevanssi_min_word_length', 3 );
- if ( ! isset( $post_type_object->description ) ) {
- $post_type_object->description = '';
- }
- /**
- * Allows adding extra content to the post type before indexing.
- *
- * The post type description is passed through this filter, so if you want
- * to add extra content to the description, you can use this filter.
- *
- * @param string $post_type_object->description The post type description.
- * @param object $post_type_object The post type object.
- */
- $description = apply_filters(
- 'relevanssi_post_type_additional_content',
- $post_type_object->description,
- $post_type_object
- );
- if ( ! empty( $description ) ) {
- /** This filter is documented in lib/indexing.php */
- $tokens = apply_filters(
- 'relevanssi_indexing_tokens',
- relevanssi_tokenize( $description, $remove_stopwords, $min_length, 'indexing' ),
- 'posttype-description'
- );
- foreach ( $tokens as $t_term => $tf ) {
- if ( ! isset( $insert_data[ $t_term ]['content'] ) ) {
- $insert_data[ $t_term ]['content'] = 0;
- }
- $insert_data[ $t_term ]['content'] += $tf;
- }
- }
-
- if ( isset( $post_type_object->name ) && ! empty( $post_type_object->name ) ) {
- /** This filter is documented in lib/indexing.php */
- $tokens = apply_filters(
- 'relevanssi_indexing_tokens',
- relevanssi_tokenize( $post_type_object->label, $remove_stopwords, $min_length, 'indexing' ),
- 'posttype-name'
- );
- foreach ( $tokens as $t_term => $tf ) {
- if ( ! isset( $insert_data[ $t_term ]['title'] ) ) {
- $insert_data[ $t_term ]['title'] = 0;
- }
- $insert_data[ $t_term ]['title'] += $tf;
- }
- }
-
- $post_type_id = relevanssi_get_post_type_by_name( $post_type );
- foreach ( $insert_data as $t_term => $data ) {
- $fields = array( 'content', 'title', 'comment', 'tag', 'link', 'author', 'category', 'excerpt', 'taxonomy', 'customfield' );
- foreach ( $fields as $field ) {
- if ( ! isset( $data[ $field ] ) ) {
- $data[ $field ] = 0;
- }
- }
-
- $content = $data['content'];
- $title = $data['title'];
- $comment = $data['comment'];
- $tag = $data['tag'];
- $link = $data['link'];
- $author = $data['author'];
- $category = $data['category'];
- $excerpt = $data['excerpt'];
- $customfield = $data['customfield'];
- $t_term = trim( $t_term ); // Numeric terms start with a space.
-
- $wpdb->query(
- $wpdb->prepare(
- 'INSERT IGNORE INTO ' . $relevanssi_variables['relevanssi_table'] . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- ' (item, doc, term, term_reverse, content, title, comment, tag, link, author, category, excerpt, taxonomy, customfield, type, customfield_detail, taxonomy_detail, mysqlcolumn_detail)
- VALUES (%d, %d, %s, REVERSE(%s), %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %s, %s, %s, %s)',
- $post_type_id,
- -1,
- $t_term,
- $t_term,
- $content,
- $title,
- $comment,
- $tag,
- $link,
- $author,
- $category,
- $excerpt,
- '',
- $customfield,
- 'post_type',
- '',
- '',
- ''
- )
- );
- }
-}
-
-/**
- * Deletes a post type archive from Relevanssi index.
- *
- * @global $wpdb The WordPress database interface.
- * @global $relevanssi_variables The global Relevanssi variables, used for the
- * database table names.
- *
- * @param string $post_type Name of the post type to remove.
- */
-function relevanssi_delete_post_type_object( $post_type ) {
- global $wpdb, $relevanssi_variables;
- $id = relevanssi_get_post_type_by_name( $post_type );
- if ( $id ) {
- $wpdb->query(
- 'DELETE FROM ' .
- $relevanssi_variables['relevanssi_table'] . " WHERE item = $id " . // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- "AND type = 'post_type'"
- );
- }
-}
-
-/**
- * Returns the list of post type archives indexed.
- *
- * Returns a list of post types that have _builtin set to false and has_archive
- * set to true. The list can be adjusted with the
- * relevanssi_indexed_post_type_archives filter hook.
- *
- * @return array An array of post types.
- */
-function relevanssi_get_indexed_post_type_archives() {
- $args = array(
- '_builtin' => false,
- 'has_archive' => true,
- );
- $post_types = get_post_types( $args );
- /**
- * Filters the list of post type archives that are indexed by Relevanssi.
- *
- * @param array An array of post types.
- *
- * @return array An array of post types.
- */
- return apply_filters( 'relevanssi_indexed_post_type_archives', $post_types );
-}
-
-/**
- * Runs taxonomy, user and post type archive indexing if necessary.
- */
-function relevanssi_premium_indexing() {
- if ( 'on' === get_option( 'relevanssi_index_taxonomies' ) ) {
- relevanssi_index_taxonomies();
- }
- if ( 'on' === get_option( 'relevanssi_index_users' ) ) {
- relevanssi_index_users();
- }
- if ( 'on' === get_option( 'relevanssi_index_post_type_archives' ) ) {
- relevanssi_index_post_type_archives();
- }
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/interface.php b/wp/wp-content/plugins/relevanssi-premium/premium/interface.php
deleted file mode 100644
index 089cfb6f..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/interface.php
+++ /dev/null
@@ -1,1574 +0,0 @@
-
-
-
-
-
-
- .
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- />
-
-
-
-
-
-
-
-
-
-
-
-
-
- />
-
-
-
- Deutsch (de_DE), español (es_ES), français (fr_FR), suomi (fi)
-
-
-
-
-
-
-
-
-
-
- >
- >
- >
-
-
-
-
-
-
-
-
-
-
-
- />
-
-
-
-
-
-
-
-
-
-
-
-
-
- />
-
-
-
-
- manage_options', 'relevanssi_options_capability' ); ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- get_results( "SHOW COLUMNS FROM $wpdb->posts" );
- wp_cache_set( 'relevanssi_column_list', $column_list );
- }
- $columns = array();
- foreach ( $column_list as $column ) {
- array_push( $columns, $column->Field ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
- }
- $columns = implode( ', ', $columns );
-
- ?>
-
-
-
-
-
-
-
- wp_posts' );
- echo esc_html( $columns );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
- />
-
-
-
-
-
-
-
-
-
-
-
-
- />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- />
-
-
-
- relevanssi_post_type_additional_content' ); ?>
-
-
-
- >
-
-
-
-
- ' . esc_html( implode( ', ', $post_types ) ) . '';
- ?>
-
- has_archive', 'relevanssi_indexed_post_type_archives' ); ?>
-
-
-
-
-
-
-
-
-
- />
-
-
-
- post_type ) {
- $api_key = get_network_option( null, 'relevanssi_api_key' );
- if ( ! $api_key ) {
- $api_key = get_option( 'relevanssi_api_key' );
- }
- wp_enqueue_script(
- 'relevanssi_admin_pdf_js',
- $plugin_dir_url . 'premium/admin_pdf_scripts.js',
- array( 'jquery' ),
- $relevanssi_variables['plugin_version'],
- true
- );
- wp_localize_script(
- 'relevanssi_admin_pdf_js',
- 'admin_pdf_data',
- array(
- 'send_pdf_nonce' => wp_create_nonce( 'relevanssi_send_pdf' ),
- )
- );
- }
- wp_enqueue_script(
- 'relevanssi_metabox_js',
- $plugin_dir_url . 'premium/admin_metabox_scripts.js',
- array( 'jquery' ),
- $relevanssi_variables['plugin_version'],
- true
- );
- wp_localize_script(
- 'relevanssi_metabox_js',
- 'relevanssi_metabox_data',
- array(
- 'metabox_nonce' => wp_create_nonce( 'relevanssi_metabox_nonce' ),
- )
- );
- wp_enqueue_style(
- 'relevanssi_metabox_css',
- $plugin_dir_url . 'premium/metabox_styles.css',
- array(),
- $relevanssi_variables['plugin_version']
- );
-
- }
-
- $nonce = array(
- 'taxonomy_indexing_nonce' => wp_create_nonce( 'relevanssi_taxonomy_indexing_nonce' ),
- 'user_indexing_nonce' => wp_create_nonce( 'relevanssi_user_indexing_nonce' ),
- 'indexing_nonce' => wp_create_nonce( 'relevanssi_indexing_nonce' ),
- 'post_type_archive_indexing_nonce' => wp_create_nonce( 'relevanssi_post_type_archive_indexing_nonce' ),
- 'searching_nonce' => wp_create_nonce( 'relevanssi_admin_search_nonce' ),
- );
-
- wp_localize_script( 'relevanssi_admin_js_premium', 'nonce', $nonce );
-}
-
-/**
- * Imports Relevanssi Premium options.
- *
- * Takes the options array and does the actual updating of options using
- * update_options().
- *
- * @param string $options JSON-formatted array. Key has the option name, value
- * the option value.
- */
-function relevanssi_import_options( $options ) {
- $unserialized = json_decode( stripslashes( $options ) );
- foreach ( $unserialized as $key => $value ) {
- if ( in_array(
- $key,
- array(
- 'relevanssi_post_type_weights',
- 'relevanssi_recency_bonus',
- 'relevanssi_punctuation',
- 'relevanssi_related_style',
- 'relevanssi_related_settings',
- 'relevanssi_synonyms',
- 'relevanssi_body_stopwords',
- 'relevanssi_stopwords',
- 'relevanssi_spamblock',
- ),
- true
- ) ) {
- // The options are associative arrays that are translated to
- // objects in JSON and need to be changed back to arrays.
- $value = (array) $value;
- }
- if ( 'relevanssi_redirects' === $key ) {
- $value = json_decode( wp_json_encode( $value ), true );
- }
- update_option( $key, $value );
- }
-
- echo "" . esc_html__( 'Options updated!', 'relevanssi' ) . '
';
-}
-
-/**
- * Updates Relevanssi Premium options.
- *
- * @global array $relevanssi_variables Relevanssi global variables, used to
- * access the plugin file name.
- *
- * Reads in the options from $_REQUEST and updates the correct options,
- * depending on which tab has been active.
- */
-function relevanssi_update_premium_options() {
- global $relevanssi_variables;
- check_admin_referer( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_options' );
-
- $request = $_REQUEST; // WPCS: Input var okay.
- if ( ! isset( $request['tab'] ) ) {
- $request['tab'] = '';
- }
-
- relevanssi_update_floatval( $request, 'relevanssi_link_boost', true, '0.75' );
-
- if ( empty( $request['relevanssi_api_key'] ) ) {
- unset( $request['relevanssi_api_key'] );
- }
-
- if ( 'overview' === $request['tab'] ) {
- relevanssi_turn_off_options(
- $request,
- array(
- 'relevanssi_do_not_call_home',
- 'relevanssi_update_translations',
- 'relevanssi_hide_post_controls',
- 'relevanssi_show_post_controls',
- )
- );
- }
-
- if ( 'indexing' === $request['tab'] ) {
- relevanssi_turn_off_options(
- $request,
- array(
- 'relevanssi_index_pdf_parent',
- 'relevanssi_index_post_type_archives',
- 'relevanssi_index_subscribers',
- 'relevanssi_index_synonyms',
- 'relevanssi_index_taxonomies',
- 'relevanssi_index_users',
- )
- );
- }
-
- if ( 'attachments' === $request['tab'] ) {
- relevanssi_turn_off_options(
- $request,
- array(
- 'relevanssi_link_pdf_files',
- 'relevanssi_read_new_files',
- 'relevanssi_send_pdf_files',
- )
- );
- }
-
- if ( 'searching' === $request['tab'] ) {
- if ( isset( $request['relevanssi_recency_bonus'] ) && isset( $request['relevanssi_recency_days'] ) ) {
- $relevanssi_recency_bonus = array();
- $relevanssi_recency_bonus['bonus'] = floatval( $request['relevanssi_recency_bonus'] );
- $relevanssi_recency_bonus['days'] = intval( $request['relevanssi_recency_days'] );
- update_option( 'relevanssi_recency_bonus', $relevanssi_recency_bonus );
- }
-
- if ( ! isset( $request['relevanssi_searchblogs_all'] ) ) {
- $request['relevanssi_searchblogs_all'] = 'off';
- }
- }
-
- if ( 'logging' === $request['tab'] ) {
- relevanssi_turn_off_options(
- $request,
- array(
- 'relevanssi_click_tracking',
- 'relevanssi_hide_branding',
- )
- );
- relevanssi_update_intval( $request, 'relevanssi_trim_click_logs', true, 180 );
- }
-
- if ( 'excerpts' === $request['tab'] ) {
- relevanssi_update_intval( $request, 'relevanssi_max_excerpts', true, 1 );
- relevanssi_update_intval( $request, 'relevanssi_trim_click_logs', true, 180 );
- }
-
- if ( 'related' === $request['tab'] ) {
- $settings = get_option( 'relevanssi_related_settings', relevanssi_related_default_settings() );
-
- $settings['enabled'] = relevanssi_off_or_on( $request, 'relevanssi_related_enabled' );
- $settings['number'] = relevanssi_intval( $request, 'relevanssi_related_number' );
- $settings['months'] = relevanssi_intval( $request, 'relevanssi_related_months' );
- $settings['nothing'] = relevanssi_legal_value(
- $request,
- 'relevanssi_related_nothing',
- array( 'random', 'random_cat' ),
- 'nothing'
- );
- $settings['notenough'] = relevanssi_legal_value(
- $request,
- 'relevanssi_related_notenough',
- array( 'random', 'random_cat' ),
- 'nothing'
- );
- $settings['append'] = relevanssi_implode( $request, 'relevanssi_related_append' );
- $settings['post_types'] = '';
- if ( isset( $request['relevanssi_related_post_types'] ) && is_array( $request['relevanssi_related_post_types'] ) ) {
- $settings['post_types'] = implode( ',', $request['relevanssi_related_post_types'] );
- if ( false !== stripos( $settings['post_types'], 'matching_post_type' ) ) {
- $settings['post_types'] = 'matching_post_type';
- }
- }
- $settings['keyword'] = relevanssi_implode( $request, 'relevanssi_related_keyword' );
- $settings['restrict'] = relevanssi_implode( $request, 'relevanssi_related_restrict' );
- $settings['cache_for_admins'] = relevanssi_off_or_on( $request, 'relevanssi_related_cache_for_admins' );
-
- update_option( 'relevanssi_related_settings', $settings );
-
- if ( 'off' === $settings['enabled'] ) {
- relevanssi_flush_related_cache();
- }
- if ( isset( $request['relevanssi_flush_related_cache'] ) && 'off' !== $request['relevanssi_flush_related_cache'] ) {
- relevanssi_flush_related_cache();
- }
-
- $style = get_option( 'relevanssi_related_style', relevanssi_related_default_styles() );
-
- $style['width'] = relevanssi_intval( $request, 'relevanssi_related_width' );
- $style['excerpts'] = relevanssi_off_or_on( $request, 'relevanssi_related_excerpts' );
- $style['titles'] = relevanssi_off_or_on( $request, 'relevanssi_related_titles' );
- $style['thumbnails'] = relevanssi_off_or_on( $request, 'relevanssi_related_thumbnails' );
- $style['default_thumbnail'] = relevanssi_intval( $request, 'relevanssi_default_thumbnail' );
-
- if ( isset( $request['relevanssi_remove_default_thumbnail'] ) && 'off' !== $request['relevanssi_remove_default_thumbnail'] ) {
- $style['default_thumbnail'] = 0;
- }
- update_option( 'relevanssi_related_style', $style );
- }
-
- if ( 'spamblock' === $request['tab'] ) {
- $settings['keywords'] = stripslashes( $request['relevanssi_spamblock_keywords'] );
- $settings['regex'] = stripslashes( $request['relevanssi_spamblock_regex'] );
-
- $settings['chinese'] = relevanssi_off_or_on( $request, 'relevanssi_spamblock_chinese' );
- $settings['cyrillic'] = relevanssi_off_or_on( $request, 'relevanssi_spamblock_cyrillic' );
- $settings['emoji'] = relevanssi_off_or_on( $request, 'relevanssi_spamblock_emoji' );
- $settings['bots'] = relevanssi_off_or_on( $request, 'relevanssi_spamblock_bots' );
-
- update_option( 'relevanssi_spamblock', $settings );
- }
-
- if ( isset( $request['relevanssi_remove_api_key'] ) ) {
- update_option( 'relevanssi_api_key', '', false );
- }
- relevanssi_update_off_or_on( $request, 'relevanssi_click_tracking', false );
- relevanssi_update_off_or_on( $request, 'relevanssi_do_not_call_home', false );
- relevanssi_update_off_or_on( $request, 'relevanssi_hide_branding', false );
- relevanssi_update_off_or_on( $request, 'relevanssi_hide_post_controls', false );
- relevanssi_update_off_or_on( $request, 'relevanssi_index_pdf_parent', false );
- relevanssi_update_off_or_on( $request, 'relevanssi_index_post_type_archives', true );
- relevanssi_update_off_or_on( $request, 'relevanssi_index_subscribers', false );
- relevanssi_update_off_or_on( $request, 'relevanssi_index_synonyms', true );
- relevanssi_update_off_or_on( $request, 'relevanssi_index_taxonomies', true );
- relevanssi_update_off_or_on( $request, 'relevanssi_index_users', true );
- relevanssi_update_off_or_on( $request, 'relevanssi_link_pdf_files', false );
- relevanssi_update_off_or_on( $request, 'relevanssi_read_new_files', false );
- relevanssi_update_off_or_on( $request, 'relevanssi_searchblogs_all', false );
- relevanssi_update_off_or_on( $request, 'relevanssi_send_pdf_files', false );
- relevanssi_update_off_or_on( $request, 'relevanssi_show_post_controls', false );
- relevanssi_update_off_or_on( $request, 'relevanssi_update_translations', false );
- relevanssi_update_sanitized( $request, 'relevanssi_api_key', true );
- relevanssi_update_sanitized( $request, 'relevanssi_disable_shortcodes', false );
- relevanssi_update_sanitized( $request, 'relevanssi_index_user_fields', false );
- relevanssi_update_sanitized( $request, 'relevanssi_internal_links', false );
- relevanssi_update_sanitized( $request, 'relevanssi_mysql_columns', false );
- relevanssi_update_sanitized( $request, 'relevanssi_searchblogs', false );
- relevanssi_update_sanitized( $request, 'relevanssi_thousand_separator', false );
-
- relevanssi_update_legal_value(
- $request,
- 'relevanssi_server_location',
- array( 'us', 'eu' ),
- 'us',
- false
- );
-
- if ( 'redirects' === $request['tab'] ) {
- $value = relevanssi_process_redirects( $request );
- update_option( 'relevanssi_redirects', $value );
- }
-}
-
-/**
- * Adds Relevanssi Premium tabs to Relevanssi settings page.
- *
- * @global array $relevanssi_variables Used for the plugin path.
- *
- * @param array $tabs The array of tab items.
- *
- * @return array The tab array with Premium tabs added.
- */
-function relevanssi_premium_add_tabs( $tabs ) {
- global $relevanssi_variables;
-
- $slugs = wp_list_pluck( $tabs, 'slug' );
- $redirects_id = array_search( 'redirects', $slugs, true );
- $attachments_id = array_search( 'attachments', $slugs, true );
-
- $tabs[ $redirects_id ] = array(
- 'slug' => 'redirects',
- 'name' => __( 'Redirects', 'relevanssi' ),
- 'require' => dirname( $relevanssi_variables['file'] )
- . '/premium/tabs/redirects-tab.php',
- 'callback' => 'relevanssi_redirects_tab',
- 'save' => true,
- );
- $tabs[ $attachments_id ] = array(
- 'slug' => 'attachments',
- 'name' => __( 'Attachments', 'relevanssi' ),
- 'require' => dirname( $relevanssi_variables['file'] )
- . '/premium/tabs/attachments-tab.php',
- 'callback' => 'relevanssi_attachments_tab',
- 'save' => true,
- );
-
- $tabs[] = array(
- 'slug' => 'importexport',
- 'name' => __( 'Import / Export options', 'relevanssi' ),
- 'require' => dirname( $relevanssi_variables['file'] )
- . '/premium/tabs/import-export-tab.php',
- 'callback' => 'relevanssi_import_export_tab',
- 'save' => true,
- );
- $tabs[] = array(
- 'slug' => 'related',
- 'name' => __( 'Related', 'relevanssi' ),
- 'require' => dirname( $relevanssi_variables['file'] )
- . '/premium/tabs/related-tab.php',
- 'callback' => 'relevanssi_related_tab',
- 'save' => true,
- );
- $tabs[] = array(
- 'slug' => 'spamblock',
- 'name' => __( 'Spam Block', 'relevanssi' ),
- 'require' => dirname( $relevanssi_variables['file'] )
- . '/premium/tabs/spamblock-tab.php',
- 'callback' => 'relevanssi_spamblock_tab',
- 'save' => true,
- );
- $tabs[] = array(
- 'slug' => 'support',
- 'name' => __( 'Support', 'relevanssi' ),
- 'require' => dirname( $relevanssi_variables['file'] )
- . '/premium/tabs/support-tab.php',
- 'callback' => 'relevanssi_support_tab',
- 'save' => false,
- );
- return $tabs;
-}
-
-/**
- * Handles the "Reset relevanssi_words" functionality on the debugging tab.
- */
-function relevanssi_form_reset_words() {
- $text = esc_attr__( 'Reset the option', 'relevanssi' );
- $reset = <<
-
-
-EOH;
-
- if ( isset( $_REQUEST['relevanssi_words'] ) ) {
- wp_verify_nonce( '_relevanssi_nonce', 'relevanssi_how_relevanssi_sees' );
- $success = delete_option( 'relevanssi_words' );
- if ( $success ) {
- $reset = '' . esc_html__( 'Option successfully reset!', 'relevanssi' ) . '
';
- } else {
- $reset = '' . esc_html__( "Couldn't reset the option, reload the page to try again.", 'relevanssi' ) . '
';
- }
- }
-
- ?>
-
-
-
- relevanssi_words.
- esc_html__(
- 'If you are having problems with the Did you mean? feature, you can reset the %1$s option that keeps a cache. Next time the Did you mean? suggestions are needed the option is regenerated.',
- 'relevanssi'
- ),
- 'relevanssi_words'
- );
- ?>
-
-
- ' . $message; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
-}
-
-/**
- * Generates a message giving the reason for API key and license problems.
- *
- * @return string The message.
- */
-function relevanssi_get_api_key_notification() {
- global $relevanssi_variables;
-
- $api_key = get_network_option( null, 'relevanssi_api_key' );
- if ( ! $api_key ) {
- $api_key = get_option( 'relevanssi_api_key' );
- }
-
- if ( ! $api_key ) {
- $url = add_query_arg(
- 'page',
- 'relevanssi-premium%2Frelevanssi.php',
- get_admin_url() . 'options-general.php'
- );
- if ( is_plugin_active_for_network( plugin_basename( $relevanssi_variables['file'] ) ) ) {
- $url = network_admin_url( 'admin.php?page=relevanssi-premium%2Frelevanssi.php' );
- }
- $message = sprintf(
- // Translators: %1$s opens the link to the Relevanssi Premium settings page, %3$s opens the link to the Relevanssi Premium license purchase page. %2$s closes the links.
- esc_html__( "The API key is not set. Please enter your API key in the %1\$sthe Relevanssi settings%2\$s. If you don't have one, %3\$syou can buy a new license here%2\$s.", 'relevanssi' ),
- '',
- ' ',
- ''
- );
- } else {
- $message = sprintf(
- // Translators: %1$s opens the link to the Relevanssi Premium license purchase page. %2$s closes the link.
- esc_html__( "Your API key is set, but it looks like you don't have a valid license. %1\$sYou can buy a new license here%2\$s.", 'relevanssi' ),
- ' ',
- ' '
- );
- }
- return $message;
-}
-
-/**
- * Adds the Relevanssi columns to the post list.
- *
- * @param array $columns The columns.
- * @param string $post_type The post type.
- */
-function relevanssi_manage_columns( $columns, $post_type = 'page' ) {
- $post_types = get_option( 'relevanssi_index_post_types' );
- if ( ! in_array( $post_type, $post_types, true ) ) {
- return $columns;
- }
-
- $columns['pinned_keywords'] = __( 'Pinned keywords', 'relevanssi' );
- $columns['unpinned_keywords'] = __( 'Excluded keywords', 'relevanssi' );
- $columns['pin_for_all'] = __( 'Pin for all searches', 'relevanssi' );
- $columns['exclude_post'] = __( 'Exclude post', 'relevanssi' );
- $columns['ignore_content'] = __( 'Ignore post content', 'relevanssi' );
- return $columns;
-}
-
-/**
- * Adds the Relevanssi Premium columns to the post list.
- *
- * @param array $column The column name.
- * @param int $post_id The post ID.
- */
-function relevanssi_manage_custom_column( $column, $post_id ) {
- switch ( $column ) {
- case 'pinned_keywords':
- $keywords = get_post_meta( $post_id, '_relevanssi_pin_keywords', true );
- if ( ! empty( $keywords ) ) {
- echo esc_html( $keywords );
- }
- break;
- case 'unpinned_keywords':
- $keywords = get_post_meta( $post_id, '_relevanssi_unpin_keywords', true );
- if ( ! empty( $keywords ) ) {
- echo esc_html( $keywords );
- }
- break;
- case 'pin_for_all':
- $pin_for_all = get_post_meta( $post_id, '_relevanssi_pin_for_all', true );
- if ( ! empty( $pin_for_all ) ) {
- echo '✓';
- } else {
- echo '✗';
- }
- break;
- case 'exclude_post':
- $hide_post = get_post_meta( $post_id, '_relevanssi_hide_post', true );
- if ( ! empty( $hide_post ) ) {
- echo '✓';
- } else {
- echo '✗';
- }
- break;
- case 'ignore_content':
- $hide_content = get_post_meta( $post_id, '_relevanssi_hide_content', true );
- if ( ! empty( $hide_content ) ) {
- echo '✓';
- } else {
- echo '✗';
- }
- break;
- }
-}
-
-/**
- * Adds the Relevanssi custom fields to the quick edit box.
- *
- * @param string $column The column name.
- * @param string $post_type The post type.
- */
-function relevanssi_quick_edit_custom_box( $column, $post_type ) {
- switch ( $column ) {
- case 'pinned_keywords':
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- %s ', esc_html__( 'Relevanssi network options', 'relevanssi' ) );
-
- if ( ! empty( $_POST ) ) { // WPCS: Input var okay.
- if ( isset( $_REQUEST['submit'] ) ) { // WPCS: Input var okay.
- check_admin_referer( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_network_options' );
- relevanssi_update_network_options();
- }
- if ( isset( $_REQUEST['copytoall'] ) ) { // WPCS: Input var okay.
- check_admin_referer( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_network_options' );
- relevanssi_copy_options_to_subsites( $_REQUEST ); // WPCS: Input var okay.
- }
- }
-
- $this_page = '?page=relevanssi/relevanssi.php';
- if ( RELEVANSSI_PREMIUM ) {
- $this_page = '?page=relevanssi-premium/relevanssi.php';
- }
-
- echo sprintf( "
-
-
-
-
-
-
- ' . esc_html__( 'Copying options from blog %s', 'relevanssi' ) . '', esc_html( $sourceblog ) );
- global $wpdb;
- switch_to_blog( $sourceblog );
- $q = "SELECT * FROM $wpdb->options WHERE option_name LIKE 'relevanssi%'";
- restore_current_blog();
-
- $results = $wpdb->get_results( $q ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
-
- $blog_list = get_sites( array( 'number' => 2000 ) );
- foreach ( $blog_list as $blog ) {
- if ( $blog->blog_id === $sourceblog ) {
- continue;
- }
- switch_to_blog( $blog->blog_id );
-
- /* translators: %s is the blog ID */
- printf( '' . esc_html__( 'Processing blog %s:', 'relevanssi' ) . ' ', esc_html( $blog->blog_id ) );
- if ( ! is_plugin_active( 'relevanssi-premium/relevanssi.php' ) ) {
- echo esc_html__( 'Relevanssi is not active in this blog.', 'relevanssi' ) . '
';
- continue;
- }
- foreach ( $results as $option ) {
- if ( is_serialized( $option->option_value ) ) {
- $value = unserialize( $option->option_value ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions
- } else {
- $value = $option->option_value;
- }
- update_option( $option->option_name, $value );
- }
- echo esc_html__( 'Options updated.', 'relevanssi' ) . '';
- restore_current_blog();
- }
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/pdf-upload.php b/wp/wp-content/plugins/relevanssi-premium/premium/pdf-upload.php
deleted file mode 100644
index 736f7679..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/pdf-upload.php
+++ /dev/null
@@ -1,851 +0,0 @@
- $post_id )
- );
- // Remove the usual relevanssi_publish action because
- // relevanssi_index_pdf() already indexes the post.
- remove_action( 'add_attachment', 'relevanssi_publish', 12 );
- }
-}
-
-/**
- * Checks the MIME type of the attachment to determine if it's allowed or not.
- *
- * By default this function blocks all images, all video, and zip files.
- *
- * @param string $mime_type The attachment MIME type.
- *
- * @return boolean True, if ok to read the attachment, false if not.
- */
-function relevanssi_mime_type_ok( $mime_type ) {
- $read_this = true;
- $mime_parts = explode( '/', $mime_type );
- if ( in_array( $mime_parts[0], array( 'image', 'video' ), true ) ) {
- $read_this = false;
- }
- if ( isset( $mime_parts[1] ) && in_array( $mime_parts[1], array( 'zip', 'octet-stream', 'x-zip-compressed', 'x-zip' ), true ) ) {
- $read_this = false;
- }
- /**
- * Allows the filtering of attachment reading based on MIME type.
- *
- * @param boolean $read_this True, if ok to read the attachment, false if not.
- * @param string $mime_type The attachment MIME type.
- *
- * @return boolean True, if ok to read the attachment, false if not.
- */
- $read_this = apply_filters( 'relevanssi_accept_mime_type', $read_this, $mime_type );
- return $read_this;
-}
-
-/**
- * Includes the PDF content custom field in the list of custom fields.
- *
- * This function works on 'relevanssi_index_custom_fields' filter and makes sure the
- * '_relevanssi_pdf_content' custom field is included.
- *
- * @since 2.0.0
- *
- * @param array $custom_fields The custom fields array.
- *
- * @return array $custom_fields The custom fields array.
- */
-function relevanssi_add_pdf_customfield( $custom_fields ) {
- if ( ! is_array( $custom_fields ) ) {
- $custom_fields = array();
- }
- if ( ! in_array( '_relevanssi_pdf_content', $custom_fields, true ) ) {
- $custom_fields[] = '_relevanssi_pdf_content';
- }
- return $custom_fields;
-}
-
-/**
- * Reads in all _relevanssi_pdf_content for found posts to avoid database calls.
- *
- * @global array An array of the PDF content.
- *
- * @param array $hits An array of posts found.
- * @param WP_Query $query The WP_Query object.
- *
- * @return array The posts found, untouched.
- */
-function relevanssi_prime_pdf_content( $hits, $query ) {
- global $relevanssi_pdf_content;
-
- if ( ! isset( $query->query_vars['fields'] ) || empty( $query->query_vars['fields'] ) ) {
- $relevanssi_pdf_content = relevanssi_get_post_meta_for_all_posts(
- wp_list_pluck( $hits, 'ID' ),
- '_relevanssi_pdf_content'
- );
- }
-
- return $hits;
-}
-
-
-/**
- * Includes the PDF content custom field for excerpt-building.
- *
- * This function works on 'relevanssi_pre_excerpt_content' filter and makes sure
- * the '_relevanssi_pdf_content' custom field content is included when excerpts
- * are built.
- *
- * @since 2.0.0
- *
- * @see relevanssi_prime_pdf_content
- *
- * @param string $content The post content.
- * @param object $post The post object.
- *
- * @return string $content The post content.
- */
-function relevanssi_add_pdf_content_to_excerpt( $content, $post ) {
- global $relevanssi_pdf_content;
- $pdf_content = $relevanssi_pdf_content[ $post->ID ] ?? '';
- $content .= ' ' . $pdf_content;
- return $content;
-}
-
-/**
- * Adds the PDF control metabox.
- *
- * Adds the PDF control metaboxes on post edit pages for posts in the
- * 'attachment' post type, with a MIME type that is not 'image/*' or
- * 'video/*'.
- *
- * @since 2.0.0
- *
- * @param object $post The post object.
- */
-function relevanssi_add_pdf_metaboxes( $post ) {
- // Do not display on image pages.
- $mime_parts = explode( '/', $post->post_mime_type );
- if ( in_array( $mime_parts[0], array( 'image', 'video' ), true ) ) {
- return;
- }
-
- add_meta_box(
- 'relevanssi_pdf_box',
- __( 'Relevanssi attachment controls', 'relevanssi' ),
- 'relevanssi_attachment_metabox',
- $post->post_type
- );
-}
-
-/**
- * Prints out the attachment control metabox.
- *
- * Prints out the attachment control metabox used for reading attachments and
- * examining the read attachment content.
- *
- * @global object $post The global post object.
- * @global array $relevanssi_variables The Relevanssi global variables array,
- * used to get the file name for nonce.
- *
- * @since 2.0.0
- */
-function relevanssi_attachment_metabox() {
- global $post, $relevanssi_variables;
- wp_nonce_field( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_pdfcontent' );
-
- $pdf_modified = get_post_meta( $post->ID, '_relevanssi_pdf_modified', true );
-
- $url = wp_get_attachment_url( $post->ID );
- $id = $post->ID;
- $button_text = $pdf_modified ? __( 'Reread the attachment content', 'relevanssi' ) : __( 'Read the attachment content', 'relevanssi' );
- $api_key = get_network_option( null, 'relevanssi_api_key' );
- $action = 'sendUrl';
- $explanation = __( 'Indexer will fetch the file from your server.', 'relevanssi' );
- if ( 'on' === get_option( 'relevanssi_send_pdf_files' ) ) {
- $action = 'sendPdf';
- $explanation = __( 'The file will be uploaded to the indexer.', 'relevanssi' );
- }
-
- if ( ! $api_key ) {
- // get_network_option() falls back to get_option(), but if this is a single
- // install on a multisite, it won't work correctly.
- $api_key = get_option( 'relevanssi_api_key' );
- }
-
- if ( ! $api_key ) {
- printf( '%s
', esc_html__( 'No API key set. API key is required for attachment indexing.', 'relevanssi' ) );
- } else {
- printf(
- '
',
- esc_attr( $action ),
- esc_attr( $button_text ),
- esc_attr( $api_key ),
- intval( $id ),
- esc_attr( $url ),
- esc_attr( $explanation )
- );
-
- if ( $pdf_modified ) {
- esc_html_e( "The attachment content has been modified and won't be reread from the file when doing a general rereading. If you want to reread the attachment contents from the file, you can force rereading here.", 'relevanssi' );
- }
-
- $pdf_content = get_post_meta( $post->ID, '_relevanssi_pdf_content', true );
- if ( $pdf_content ) {
- $pdf_content_title = __( 'Attachment content', 'relevanssi' );
- printf(
- '%s
',
- esc_html( $pdf_content_title ),
- esc_html( $pdf_content )
- );
- }
-
- $pdf_error = get_post_meta( $post->ID, '_relevanssi_pdf_error', true );
- if ( false !== strpos( $pdf_error, 'R_ERR05' ) ) {
- printf(
- '%s ',
- esc_html__( 'Relevanssi is currently in process of reading the file contents, please return here later.', 'relevanssi' )
- );
- } elseif ( $pdf_error ) {
- $pdf_error_title = __( 'Attachment error message', 'relevanssi' );
- printf(
- '%s
',
- esc_html( $pdf_error_title ),
- esc_html( $pdf_error )
- );
- }
-
- if ( empty( $pdf_content ) && empty( $pdf_error ) ) {
- printf(
- '%s
',
- esc_html__( 'No attachment content found for this post at the moment.', 'relevanssi' )
- );
- }
- }
-}
-
-/**
- * Reads in attachment content from a attachment file.
- *
- * Reads in the attachment content, either by sending an URL or the file itself to
- * the Relevanssi attachment reading service.
- *
- * @param int $post_id The attachment post ID.
- * @param boolean $ajax Is this in AJAX context? Default false.
- * @param string $send_file Should the file be sent ('on'), or just the URL ('off')?
- * Default null.
- *
- * @return array An array with two items: boolean 'success' and 'error'
- * containing the possible error message.
- *
- * @since 2.0.0
- */
-function relevanssi_index_pdf( $post_id, $ajax = false, $send_file = null ) {
- $hide_post = get_post_meta( $post_id, '_relevanssi_hide_post', true );
- /**
- * Filters whether the attachment should be read or not.
- *
- * @param boolean $hide_post True if the attachment shouldn't be read,
- * false if it should.
- * @param int $post_id The attachment post ID.
- */
- $hide_post = apply_filters( 'relevanssi_do_not_read', $hide_post, $post_id );
- if ( $hide_post ) {
- delete_post_meta( $post_id, '_relevanssi_pdf_content' );
- update_post_meta( $post_id, '_relevanssi_pdf_error', RELEVANSSI_ERROR_01 );
-
- $result = array(
- 'success' => false,
- 'error' => RELEVANSSI_ERROR_01,
- );
-
- return $result;
- }
-
- $mime_type = get_post_mime_type( $post_id );
- if ( ! relevanssi_mime_type_ok( $mime_type ) ) {
- delete_post_meta( $post_id, '_relevanssi_pdf_content' );
- update_post_meta( $post_id, '_relevanssi_pdf_error', RELEVANSSI_ERROR_03 );
-
- $result = array(
- 'success' => false,
- 'error' => RELEVANSSI_ERROR_03,
- );
-
- return $result;
- }
-
- if ( is_null( $send_file ) ) {
- $send_file = get_option( 'relevanssi_send_pdf_files' );
- } else {
- if ( $send_file ) {
- $send_file = 'on';
- }
- }
-
- /**
- * Filters whether the PDF files are uploaded for indexing or not.
- *
- * If you have some files that need to be uploaded and some where it's
- * better if the indexer reads them from a URL, you can use this filter
- * hook to adjust the setting on a per-file basis.
- *
- * @param string $sendfile If 'on', upload the file, otherwise the file
- * will be read from the URL.
- * @param int $post_id The post ID of the attachment post.
- */
- $send_file = apply_filters( 'relevanssi_send_pdf_files', $send_file, $post_id );
-
- $api_key = get_network_option( null, 'relevanssi_api_key' );
- if ( ! $api_key ) {
- $api_key = get_option( 'relevanssi_api_key' );
- }
- $server_url = relevanssi_get_server_url();
-
- if ( 'on' === get_option( 'relevanssi_do_not_call_home' ) ) {
- if ( in_array( $server_url, array( RELEVANSSI_EU_SERVICES_URL, RELEVANSSI_US_SERVICES_URL ), true ) ) {
- delete_post_meta( $post_id, '_relevanssi_pdf_content' );
- update_post_meta( $post_id, '_relevanssi_pdf_error', RELEVANSSI_ERROR_02 );
-
- $result = array(
- 'success' => false,
- 'error' => RELEVANSSI_ERROR_02,
- );
-
- return $result;
- }
- }
- if ( 'on' === $send_file ) {
- /**
- * Filters the attachment file name.
- *
- * If you want to make Relevanssi index attached file content from
- * files that are stored outside the WP attachment system, use this
- * filter to provide the name of the file.
- *
- * @param string The filename of the attached file.
- * @param int The post ID of the attachment post.
- */
- $file_name = apply_filters(
- 'relevanssi_get_attached_file',
- get_attached_file( $post_id ),
- $post_id
- );
-
- $file = fopen( $file_name, 'r' ); // phpcs:ignore WordPress.WP.AlternativeFunctions
- if ( false === $file ) {
- $response = new WP_Error( 'fopen', 'Could not open the file for reading.' );
- } else {
- $file_size = filesize( $file_name );
- $file_data = fread( $file, $file_size ); // phpcs:ignore WordPress.WP.AlternativeFunctions
- $args = array(
- 'headers' => array(
- 'accept' => 'application/json', // The API returns JSON.
- 'content-type' => 'application/binary', // Set content type to binary.
- ),
- 'body' => $file_data,
- /**
- * Changes the default reading timeout.
- *
- * By default, the timeout period is 45 seconds. If that's not
- * enough, you can adjust the timeout period with this filter.
- *
- * @param int $timeout The timeout in seconds, default 45.
- */
- 'timeout' => apply_filters( 'relevanssi_pdf_read_timeout', 45 ),
- );
- $response = wp_safe_remote_post(
- $server_url . 'index.php?key=' . $api_key . '&upload=true',
- $args
- );
- }
- } else {
- /**
- * Filters the attachment URL.
- *
- * If you want to make Relevanssi index attached file content from
- * files that are stored outside the WP attachment system, use this
- * filter to provide the URL of the file.
- *
- * @param string The URL of the attached file.
- * @param int The post ID of the attachment post.
- */
- $url = apply_filters(
- 'relevanssi_get_attachment_url',
- wp_get_attachment_url( $post_id ),
- $post_id
- );
-
- $args = array(
- 'body' => array(
- 'key' => $api_key,
- 'url' => $url,
- ),
- 'method' => 'POST',
- /**
- * Changes the default reading timeout.
- *
- * By default, the timeout period is 45 seconds. If that's not
- * enough, you can adjust the timeout period with this filter.
- *
- * @param int $timeout The timeout in seconds, default 45.
- */
- 'timeout' => apply_filters( 'relevanssi_pdf_read_timeout', 45 ),
- );
-
- $response = wp_safe_remote_post( $server_url, $args );
- }
-
- $result = relevanssi_process_server_response( $response, $post_id );
-
- if ( $ajax ) {
- echo wp_json_encode( $result );
- wp_die();
- }
-
- // The PDF count is cached because the query is slow; delete the cache now, as
- // the value just changed.
- wp_cache_delete( 'relevanssi_pdf_count' );
- wp_cache_delete( 'relevanssi_pdf_error_count' );
-
- return $result;
-}
-
-/**
- * Processes the attachment reading server response.
- *
- * Takes in the response from the attachment reading server and stores the attachment
- * content or the error message to the appropriate custom fields.
- *
- * @param array|object $response The server response.
- * @param int $post_id The attachment post ID.
- *
- * @since 2.0.0
- */
-function relevanssi_process_server_response( $response, $post_id ) {
- $success = null;
- $response_error = '';
- if ( is_wp_error( $response ) ) {
- $error_message = $response->get_error_message();
- $response_error .= $error_message . '\n';
-
- delete_post_meta( $post_id, '_relevanssi_pdf_content' );
- delete_post_meta( $post_id, '_relevanssi_pdf_modified' );
- update_post_meta( $post_id, '_relevanssi_pdf_error', $error_message );
- $success = false;
- } else {
- if ( isset( $response['body'] ) ) {
- $content = $response['body'];
- $content = json_decode( $content );
-
- $content_error = '';
-
- if ( 413 === $response['response']['code'] ) {
- $content_error = RELEVANSSI_ERROR_04;
- }
-
- if ( isset( $content->error ) ) {
- $content_error = $content->error;
- $content = $content->error;
- }
-
- if ( stristr( $content, 'java.lang.OutOfMemoryError' ) ) {
- $content_error = RELEVANSSI_ERROR_04;
- }
-
- if ( empty( $content ) ) {
- $content_error = RELEVANSSI_ERROR_06;
- }
-
- if ( ! empty( $content_error ) ) {
- delete_post_meta( $post_id, '_relevanssi_pdf_content' );
- delete_post_meta( $post_id, '_relevanssi_pdf_modified' );
- update_post_meta( $post_id, '_relevanssi_pdf_error', $content_error );
-
- $response_error .= $content_error;
- $success = false;
- } else {
- delete_post_meta( $post_id, '_relevanssi_pdf_error' );
- delete_post_meta( $post_id, '_relevanssi_pdf_modified' );
- /**
- * Filters the read file content before it is saved.
- *
- * @param string $content The file content as a string.
- * @param int $post_id The post ID of the attachment post.
- */
- $success = update_post_meta( $post_id, '_relevanssi_pdf_content', apply_filters( 'relevanssi_file_content', $content, $post_id ) );
- relevanssi_index_doc( $post_id, false, relevanssi_get_custom_fields(), true );
- if ( 'on' === get_option( 'relevanssi_index_pdf_parent' ) ) {
- if ( function_exists( 'get_post_parent' ) ) {
- $parent = get_post_parent( $post_id );
- } else {
- // For WP < 5.7 compatibility, remove eventually.
- $_post = get_post( $post_id );
- $parent = ! empty( $_post->post_parent ) ? get_post( $_post->post_parent ) : null;
- }
- if ( $parent ) {
- relevanssi_index_doc( $parent->ID, true, relevanssi_get_custom_fields(), true );
- }
- }
-
- if ( ! $success ) {
- $response_error = __( 'Could not save the file content to the custom field.', 'relevanssi' );
- }
- }
- }
- }
-
- $response = array(
- 'success' => $success,
- 'error' => $response_error,
- );
-
- return $response;
-}
-
-/**
- * Gets the posts with attachments.
- *
- * Finds the posts with non-image attachments that don't have read content or
- * errors. The posts that have timeout or connection errors (cURL error 7 and
- * 28, R_ERR06) and those that haven't been read for privacy mode issues
- * (R_ERR02) will be included for indexing, but the posts with other errors
- * (R_ERR01: post excluded by user, R_ERR03: blocked MIME type and R_ERR04: file
- * too large) will not be indexed.
- *
- * @since 2.0.0
- *
- * @param int $limit The number of posts to fetch, default 1.
- *
- * @return array The posts with attachments.
- */
-function relevanssi_get_posts_with_attachments( $limit = 1 ) {
- global $wpdb;
-
- $meta_query_args = array(
- 'relation' => 'AND',
- array(
- 'key' => '_relevanssi_pdf_content',
- 'compare' => 'NOT EXISTS',
- ),
- array(
- 'relation' => 'OR',
- array(
- 'key' => '_relevanssi_pdf_error',
- 'compare' => 'NOT EXISTS',
- ),
- array(
- 'key' => '_relevanssi_pdf_error',
- 'compare' => 'LIKE',
- 'value' => 'R_ERR02:',
- ),
- array(
- 'key' => '_relevanssi_pdf_error',
- 'compare' => 'LIKE',
- 'value' => 'R_ERR06:',
- ),
- array(
- 'key' => '_relevanssi_pdf_error',
- 'compare' => 'LIKE',
- 'value' => 'cURL error 7:',
- ),
- array(
- 'key' => '_relevanssi_pdf_error',
- 'compare' => 'LIKE',
- 'value' => 'cURL error 28:',
- ),
- array(
- 'key' => '_relevanssi_pdf_error',
- 'compare' => 'LIKE',
- 'value' => 'is not valid.',
- ),
- ),
- );
- $meta_query = new WP_Meta_Query( $meta_query_args );
- $meta_query_sql = $meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
- $meta_join = '';
- $meta_where = '';
- if ( $meta_query_sql ) {
- $meta_join = $meta_query_sql['join'];
- $meta_where = $meta_query_sql['where'];
- }
-
- // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
- if ( $limit > 0 ) {
- $query = $wpdb->prepare(
- /**
- * Filters the SQL query that fetches posts with attachments.
- *
- * If you want to make Relevanssi index attachments that are not in
- * the WP Media Library, you need to adjust this filter to change
- * the SQL query so that it fetches the correct posts.
- *
- * @param string The SQL query
- * @param int $limit The number of posts to fetch.
- * @param string $meta_join The SQL query join clause.
- * @param string $meta_where The SQL query where clause.
- */
- apply_filters(
- 'relevanssi_get_attachment_posts_query',
- "SELECT DISTINCT(ID) FROM $wpdb->posts $meta_join WHERE post_type = 'attachment' AND post_status = 'inherit' AND post_mime_type LIKE %s $meta_where LIMIT %d",
- $limit,
- $meta_join,
- $meta_where
- ),
- 'application/%',
- $limit
- );
- } else {
- $query = $wpdb->prepare(
- /** Filter documented in /premium/pdf-upload.php. */
- apply_filters(
- 'relevanssi_get_attachment_posts_query',
- "SELECT DISTINCT(ID) FROM $wpdb->posts $meta_join WHERE post_type = 'attachment' AND post_status = 'inherit' AND post_mime_type LIKE %s $meta_where",
- 0,
- $meta_join,
- $meta_where
- ),
- 'application/%'
- );
- }
- // phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
- $posts = $wpdb->get_col( $query ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
-
- return $posts;
-}
-
-/**
- * Prints out the Javascript for PDF content reading.
- *
- * @since 2.0.0
- */
-function relevanssi_pdf_action_javascript() {
- $list_pdfs_nonce = wp_create_nonce( 'relevanssi-list-pdfs' );
- $wipe_pdfs_nonce = wp_create_nonce( 'relevanssi-wipe-pdfs' );
- $index_pdfs_nonce = wp_create_nonce( 'relevanssi-index-pdfs' );
-
- ?>
-
- get_results( "SELECT * FROM $wpdb->postmeta WHERE ( meta_key = '_relevanssi_pin' OR meta_key = '_relevanssi_unpin' OR meta_key = '_relevanssi_pin_for_all' ) AND meta_value != '' LIMIT 1" );
- if ( empty( $results ) ) {
- // No, nothing is pinned.
- return $hits;
- }
-
- // Disable all filter functions on 'relevanssi_stemmer'.
- if ( isset( $wp_filter['relevanssi_stemmer'] ) ) {
- $callbacks = $wp_filter['relevanssi_stemmer']->callbacks;
- $wp_filter['relevanssi_stemmer']->callbacks = null;
- }
-
- $terms = relevanssi_tokenize( $hits[1], false, -1, 'search_query' );
-
- // Re-enable the removed filters.
- if ( isset( $wp_filter['relevanssi_stemmer'] ) ) {
- $wp_filter['relevanssi_stemmer']->callbacks = $callbacks;
- }
-
- $escaped_terms = array();
- foreach ( array_keys( $terms ) as $term ) {
- $escaped_terms[] = esc_sql( trim( $term ) );
- }
-
- $term_list = array();
- $count_escaped_terms = count( $escaped_terms );
- for ( $length = 1; $length <= $count_escaped_terms; $length++ ) {
- for ( $offset = 0; $offset <= $count_escaped_terms - $length; $offset++ ) {
- $slice = array_slice( $escaped_terms, $offset, $length );
- $term_list[] = implode( ' ', $slice );
- }
- }
-
- $full_search_phrase = esc_sql( trim( $hits[1] ) );
- if ( ! in_array( $full_search_phrase, $term_list, true ) ) {
- $term_list[] = $full_search_phrase;
- }
-
- /**
- * Doing this instead of individual get_post_meta() calls can cut hundreds
- * of database queries!
- */
- $posts_pinned_for_all = array_flip(
- $wpdb->get_col(
- "SELECT post_id FROM $wpdb->postmeta
- WHERE meta_key = '_relevanssi_pin_for_all'
- AND meta_value = 'on'"
- )
- );
-
- /**
- * If the search query is "foo bar baz", $term_list now contains "foo", "bar",
- *"baz", "foo bar", "bar baz", and "foo bar baz".
- */
-
- if ( is_array( $term_list ) ) {
- $term_list = implode( "','", $term_list );
- $term_list = "'$term_list'";
-
- $positive_ids = array();
- $negative_ids = array();
-
- $pins_fetched = false;
- $pinned_posts = array();
- $other_posts = array();
- foreach ( $hits[0] as $hit ) {
- $object_array = relevanssi_get_an_object( $hit );
- $hit = $object_array['object'];
- $return_value = $object_array['format'];
-
- $blog_id = 0;
- if ( isset( $hit->blog_id ) ) {
- // Multisite, so switch_to_blog() to correct blog and process
- // the pinned hits per blog.
- $blog_id = $hit->blog_id;
- switch_to_blog( $blog_id );
- if ( ! isset( $pins_fetched[ $blog_id ] ) ) {
- $positive_ids[ $blog_id ] = $wpdb->get_col( 'SELECT post_id FROM ' . $wpdb->prefix . "postmeta WHERE meta_key = '_relevanssi_pin' AND meta_value IN ( $term_list )" ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- $negative_ids[ $blog_id ] = $wpdb->get_col( 'SELECT post_id FROM ' . $wpdb->prefix . "postmeta WHERE meta_key = '_relevanssi_unpin' AND meta_value IN ( $term_list )" ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- if ( ! is_array( $pins_fetched ) ) {
- $pins_fetched = array();
- }
- $pins_fetched[ $blog_id ] = true;
- }
- restore_current_blog();
- } else {
- // Single site.
- if ( ! $pins_fetched ) {
- $positive_ids[0] = $wpdb->get_col( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_pin' AND meta_value IN ( $term_list )" ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- $negative_ids[0] = $wpdb->get_col( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_unpin' AND meta_value IN ( $term_list )" ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
- $pins_fetched = true;
- }
- }
- $hit_id = strval( $hit->ID ); // The IDs from the database are strings, the one from the post is an integer in some contexts.
-
- $positive_match = isset( $positive_ids[ $blog_id ] )
- && is_array( $positive_ids[ $blog_id ] )
- && in_array( $hit_id, $positive_ids[ $blog_id ], true );
- $negative_match = isset( $negative_ids[ $blog_id ] )
- && is_array( $negative_ids[ $blog_id ] )
- && in_array( $hit_id, $negative_ids[ $blog_id ], true );
- $pinned_for_all = isset( $hit->ID ) && isset( $posts_pinned_for_all[ $hit->ID ] );
-
- if ( $hit_id && $positive_match && ! $negative_match ) {
- $hit->relevanssi_pinned = 1;
- $pinned_posts[] = relevanssi_return_value( $hit, $return_value );
- } else {
- if ( $pinned_for_all && ! $negative_match ) {
- $hit->relevanssi_pinned = 1;
- $pinned_posts[] = relevanssi_return_value( $hit, $return_value );
- } elseif ( ! $negative_match ) {
- $other_posts[] = relevanssi_return_value( $hit, $return_value );
- }
- }
- }
-
- $hits[0] = array_merge( $pinned_posts, $other_posts );
- }
- return $hits;
-}
-
-/**
- * Adds pinned words to post content.
- *
- * Adds pinned terms to post content to make sure posts are found with the
- * pinned terms.
- *
- * @param string $content Post content.
- * @param object $post The post object.
- */
-function relevanssi_add_pinned_words_to_post_content( $content, $post ) {
- $pin_words = get_post_meta( $post->ID, '_relevanssi_pin', false );
- foreach ( $pin_words as $word ) {
- $content .= " $word";
- }
- return $content;
-}
-
-/**
- * Adds pinned words to post title.
- *
- * If the `relevanssi_index_content` filter hook returns `false`, ie. post
- * content is not indexed, this function will add the pinned words to the post
- * title instead to guarantee they are found in the search.
- *
- * @param string $content Titlecontent.
- * @param object $post The post object.
- */
-function relevanssi_pinning_backup( $content, $post ) {
- if ( false === apply_filters( 'relevanssi_index_content', true ) ) {
- $content = relevanssi_add_pinned_words_to_post_content( $content, $post );
- }
- return $content;
-}
-
-/**
- * Provides the pinning functionality for the admin search.
- *
- * @param object $post The post object.
- * @param string $query The search query.
- *
- * @return array First item is a string containing the pinning buttons, the second
- * item is a string containing the "pinned" notice if the post is
- * pinned.
- */
-function relevanssi_admin_search_pinning( $post, $query ) {
- $pinned = '';
- $pinning_buttons = array();
-
- $pinned_words = array();
- if ( isset( $post->relevanssi_pinned ) ) {
- $pinned_words = get_post_meta( $post->ID, '_relevanssi_pin' );
- $pinned = '' . __( '(pinned)', 'relevanssi' ) . ' ';
- }
-
- if ( ! current_user_can( 'edit_post', $post->ID ) ) {
- return array( '', $pinned );
- }
-
- $tokens = relevanssi_tokenize( $query, true, -1, 'search_query' );
- foreach ( array_keys( $tokens ) as $token ) {
- if ( ! in_array( $token, $pinned_words, true ) ) {
- /* Translators: %s is the search term. */
- $pinning_button = sprintf( '%3$s ', $post->ID, $token, sprintf( __( "Pin for '%s'", 'relevanssi' ), $token ) );
- $pinning_buttons[] = $pinning_button;
- } else {
- /* Translators: %s is the search term. */
- $pinning_button = sprintf( '%3$s ', $post->ID, $token, sprintf( __( "Unpin for '%s'", 'relevanssi' ), $token ) );
- $pinning_buttons[] = $pinning_button;
- }
- }
- $pinning_buttons = implode( ' ', $pinning_buttons );
-
- return array( $pinning_buttons, $pinned );
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/post-metabox.php b/wp/wp-content/plugins/relevanssi-premium/premium/post-metabox.php
deleted file mode 100644
index 5ebebb1a..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/post-metabox.php
+++ /dev/null
@@ -1,590 +0,0 @@
-post_type, $indexed_post_types, true ) ) {
- return;
- }
- add_meta_box(
- 'relevanssi_hidebox',
- __( 'Relevanssi', 'relevanssi' ),
- 'relevanssi_post_metabox',
- array( $post->post_type, 'edit-category' ),
- 'side',
- 'default',
- array( '__back_compat_meta_box' => true )
- );
- add_thickbox(); // Make sure Thickbox is enabled.
-}
-
-/**
- * Prints out the Relevanssi Post Controls meta box.
- *
- * Prints out the Relevanssi Post Controls meta box that is displayed on the post edit pages.
- *
- * @global array $relevanssi_variables The Relevanssi global variables array, used to get the file name for nonce.
- * @global object $post The global post object.
- */
-function relevanssi_post_metabox() {
- global $relevanssi_variables, $post;
- wp_nonce_field( plugin_basename( $relevanssi_variables['file'] ), 'relevanssi_hidepost' );
-
- $hide_post = checked( 'on', get_post_meta( $post->ID, '_relevanssi_hide_post', true ), false );
- $hide_content = checked( 'on', get_post_meta( $post->ID, '_relevanssi_hide_content', true ), false );
- $pin_for_all = checked( 'on', get_post_meta( $post->ID, '_relevanssi_pin_for_all', true ), false );
-
- $pins = get_post_meta( $post->ID, '_relevanssi_pin', false );
- $pin = implode( ', ', $pins );
-
- $unpins = get_post_meta( $post->ID, '_relevanssi_unpin', false );
- $unpin = implode( ', ', $unpins );
-
- // The actual fields for data entry.
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
- />
-
-
-
-
-
-
-
-
-
- />
-
-
-
-
- />
-
-
-
-
- ID );
- }
-
- $display = false;
- $element = relevanssi_generate_how_relevanssi_sees( $post->ID, $display );
- echo $element; // phpcs:ignore WordPress.Security.EscapeOutput
-}
-
-/**
- * Saves the Relevanssi Gutenberg sidebar meta data.
- *
- * When a post is saved in Gutenberg, this function saves the Relevanssi
- * sidebar meta data.
- *
- * @param object $post The post object.
- */
-function relevanssi_save_gutenberg_postdata( $post ) {
- // Verify if this is an auto save routine.
- // If it is, our form has not been submitted, so we dont want to do anything.
- if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
- return;
- }
-
- // Check nonce here?
-
- $keywords = get_post_meta( $post->ID, '_relevanssi_pin_keywords', true );
- relevanssi_update_pin_fields( $post->ID, $keywords );
-
- $keywords = get_post_meta( $post->ID, '_relevanssi_unpin_keywords', true );
- relevanssi_update_unpin_fields( $post->ID, $keywords );
-}
-
-/**
- * Updates the _relevanssi_pin custom fields based on a list of keywords.
- *
- * @param int $post_id The post ID.
- * @param string $keywords The keywords.
- */
-function relevanssi_update_pin_fields( $post_id, $keywords ) {
- if ( $keywords ) {
- delete_post_meta( $post_id, '_relevanssi_pin' );
- $pins = explode( ',', sanitize_text_field( wp_unslash( $keywords ) ) );
- foreach ( $pins as $pin ) {
- $pin = trim( $pin );
- if ( ! empty( $pin ) ) {
- add_post_meta( $post_id, '_relevanssi_pin', $pin );
- }
- }
- } else {
- delete_post_meta( $post_id, '_relevanssi_pin' );
- }
-}
-
-/**
- * Updates the _relevanssi_unpin custom fields based on a list of keywords.
- *
- * @param int $post_id The post ID.
- * @param string $keywords The keywords.
- */
-function relevanssi_update_unpin_fields( $post_id, $keywords ) {
- if ( $keywords ) {
- delete_post_meta( $post_id, '_relevanssi_unpin' );
- $pins = explode( ',', sanitize_text_field( wp_unslash( $keywords ) ) );
- foreach ( $pins as $pin ) {
- $pin = trim( $pin );
- if ( ! empty( $pin ) ) {
- add_post_meta( $post_id, '_relevanssi_unpin', $pin );
- }
- }
- } else {
- delete_post_meta( $post_id, '_relevanssi_unpin' );
- }
-}
-
-/**
- * Saves Relevanssi metabox data.
- *
- * When a post is saved in the Classic Editor, this function saves the
- * Relevanssi Post Controls metabox data.
- *
- * @param int $post_id The post ID that is being saved.
- */
-function relevanssi_save_postdata( $post_id ) {
- global $relevanssi_variables;
- // Verify if this is an auto save routine. If it is, our form has not been
- // submitted, so we dont want to do anything.
- if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
- return;
- }
-
- // Verify the nonce.
- if ( isset( $_POST['relevanssi_hidepost'] ) ) { // WPCS: input var okey.
- if ( ! wp_verify_nonce(
- sanitize_key( $_POST['relevanssi_hidepost'] ),
- plugin_basename( $relevanssi_variables['file'] )
- )
- ) { // WPCS: input var okey.
- return;
- }
- }
-
- $post = $_POST; // WPCS: input var okey.
-
- // If relevanssi_metabox is not set, it's a quick edit.
- if ( ! isset( $post['relevanssi_metabox'] ) ) {
- return;
- }
-
- // Check permissions.
- if ( isset( $post['post_type'] ) ) {
- if ( 'page' === $post['post_type'] ) {
- if ( ! current_user_can( 'edit_page', $post_id ) ) {
- return;
- }
- } else {
- if ( ! current_user_can( 'edit_post', $post_id ) ) {
- return;
- }
- }
- }
-
- $hide = '';
- if ( isset( $post['relevanssi_hide_post'] ) && 'on' === $post['relevanssi_hide_post'] ) {
- $hide = 'on';
- }
-
- if ( 'on' === $hide ) {
- // Post is marked hidden, so remove it from the index.
- relevanssi_remove_doc( $post_id );
- }
-
- if ( 'on' === $hide ) {
- update_post_meta( $post_id, '_relevanssi_hide_post', $hide );
- } else {
- delete_post_meta( $post_id, '_relevanssi_hide_post' );
- }
-
- $hide_content = '';
- if ( isset( $post['relevanssi_hide_content'] ) && 'on' === $post['relevanssi_hide_content'] ) {
- $hide_content = 'on';
- }
-
- if ( 'on' === $hide_content ) {
- update_post_meta( $post_id, '_relevanssi_hide_content', $hide_content );
- } else {
- delete_post_meta( $post_id, '_relevanssi_hide_content' );
- }
-
- $pin_for_all = '';
- if ( isset( $post['relevanssi_pin_for_all'] ) && 'on' === $post['relevanssi_pin_for_all'] ) {
- $pin_for_all = 'on';
- }
-
- if ( 'on' === $pin_for_all ) {
- update_post_meta( $post_id, '_relevanssi_pin_for_all', $pin_for_all );
- } else {
- delete_post_meta( $post_id, '_relevanssi_pin_for_all' );
- }
-
- if ( isset( $post['relevanssi_pin'] ) ) {
- delete_post_meta( $post_id, '_relevanssi_pin' );
- $pins = explode( ',', sanitize_text_field( wp_unslash( $post['relevanssi_pin'] ) ) );
- foreach ( $pins as $pin ) {
- $pin = trim( $pin );
- if ( ! empty( $pin ) ) {
- add_post_meta( $post_id, '_relevanssi_pin', $pin );
- }
- }
- } else {
- delete_post_meta( $post_id, '_relevanssi_pin' );
- }
-
- if ( isset( $post['relevanssi_unpin'] ) ) {
- delete_post_meta( $post_id, '_relevanssi_unpin' );
- $pins = explode( ',', sanitize_text_field( wp_unslash( $post['relevanssi_unpin'] ) ) );
- foreach ( $pins as $pin ) {
- $pin = trim( $pin );
- if ( ! empty( $pin ) ) {
- add_post_meta( $post_id, '_relevanssi_unpin', $pin );
- }
- }
- } else {
- delete_post_meta( $post_id, '_relevanssi_unpin' );
- }
-
- $no_append = '';
- if ( isset( $post['relevanssi_related_no_append'] ) && 'on' === $post['relevanssi_related_no_append'] ) {
- $no_append = 'on';
- }
-
- if ( 'on' === $no_append ) {
- update_post_meta( $post_id, '_relevanssi_related_no_append', $no_append );
- } else {
- delete_post_meta( $post_id, '_relevanssi_related_no_append' );
- }
-
- $not_related = '';
- if ( isset( $post['relevanssi_related_not_related'] ) && 'on' === $post['relevanssi_related_not_related'] ) {
- $not_related = 'on';
- }
-
- if ( 'on' === $not_related ) {
- update_post_meta( $post_id, '_relevanssi_related_not_related', $not_related );
- } else {
- delete_post_meta( $post_id, '_relevanssi_related_not_related' );
- }
-
- if ( isset( $post['relevanssi_related_keywords'] ) ) {
- delete_post_meta( $post_id, '_relevanssi_related_keywords' );
- $keywords = sanitize_text_field( $post['relevanssi_related_keywords'] );
- if ( $keywords ) {
- add_post_meta( $post_id, '_relevanssi_related_keywords', $keywords );
- }
- } else {
- delete_post_meta( $post_id, '_relevanssi_related_keywords' );
- }
-
- if ( isset( $post['relevanssi_related_include_ids'] ) ) {
- delete_post_meta( $post_id, '_relevanssi_related_include_ids' );
- $include_ids_array = explode( ',', $post['relevanssi_related_include_ids'] );
- $valid_ids = array();
- foreach ( $include_ids_array as $id ) {
- $id = (int) trim( $id );
- if ( is_int( $id ) ) {
- if ( get_post( $id ) ) {
- $valid_ids[] = $id;
- }
- }
- }
- if ( ! empty( $valid_ids ) ) {
- $id_string = implode( ',', $valid_ids );
- add_post_meta( $post_id, '_relevanssi_related_include_ids', $id_string );
- }
- } else {
- delete_post_meta( $post_id, '_relevanssi_related_include_ids' );
- }
-
- // Clear the related posts cache for this post.
- delete_post_meta( $post_id, '_relevanssi_related_posts' );
-}
-
-/**
- * Prints out the metabox part for related posts.
- *
- * @param int $post_id The post ID.
- */
-function relevanssi_related_posts_metabox( $post_id ) {
- $related = get_post_meta( $post_id, '_relevanssi_related_keywords', true );
- $include_ids = get_post_meta( $post_id, '_relevanssi_related_include_ids', true );
- $no_append = checked( 'on', get_post_meta( $post_id, '_relevanssi_related_no_append', true ), false );
- $not_related = checked( 'on', get_post_meta( $post_id, '_relevanssi_related_not_related', true ), false );
-
- if ( '0' === $include_ids ) {
- $include_ids = '';
- }
- ?>
-
-
- />
-
-
- />
-
-
-
-
-
-
-
- :
-
-
-
-
-
-
-
-
-
- :
-
-
-
- The most common search terms for this post:
-
-
-
-
- Low-ranking search terms for this post:
-
-
-
- get_results(
- $wpdb->prepare(
- "SELECT DISTINCT(query), COUNT(*) AS `count` FROM $table" . // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
- ' WHERE post_id = %d
- GROUP BY query
- ORDER BY count DESC
- LIMIT 5',
- $post_id
- )
- );
-
- if ( $common_terms ) {
- if ( $output_html ) {
- $list = '' . implode(
- ' ',
- array_map(
- function( $v ) {
- return "$v->query ($v->count)";
- },
- $common_terms
- )
- ) . ' ';
- } else {
- $list = $common_terms;
- }
- }
-
- return $list;
-}
-
-/**
- * Generates tracking insights.
- *
- * @param int $post_id The post ID.
- * @param string $output If 'HTML', output HTML code. If 'ARRAY', output an
- * array. Default value is 'HTML'.
- */
-function relevanssi_generate_tracking_insights_low_ranking( int $post_id, string $output = 'HTML' ) {
- global $wpdb, $relevanssi_variables;
- $table = $relevanssi_variables['tracking_table'];
-
- $output_html = 'ARRAY' !== $output ? true : false;
- if ( $output_html ) {
- $list = '';
- } else {
- $list = array();
- }
-
- $low_ranking_terms = $wpdb->get_results(
- $wpdb->prepare(
- "SELECT `query`, `rank` FROM $table" . // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
- ' WHERE post_id = %d
- AND `rank` > 1
- ORDER BY `rank` DESC
- LIMIT 5',
- $post_id
- )
- );
-
- if ( $low_ranking_terms ) {
- if ( $output_html ) {
- $list = '' . implode(
- ' ',
- array_map(
- function( $v ) {
- return "$v->query ($v->rank)";
- },
- $low_ranking_terms
- )
- ) . ' ';
- } else {
- $list = $low_ranking_terms;
- }
- }
-
- return $list;
-}
-
-/**
- * Generates a list of related posts for the related posts metabox.
- *
- * @param int $post_id The post ID.
- * @param string $output If 'HTML', output HTML code. If 'ARRAY', output an
- * array. Default value is 'HTML'.
- */
-function relevanssi_generate_related_list( $post_id, $output = 'HTML' ) {
- $output_html = 'ARRAY' !== $output ? true : false;
- if ( $output_html ) {
- $list = '';
- } else {
- $list = array();
- }
- $related_posts = relevanssi_get_related_post_ids( $post_id );
- foreach ( $related_posts as $related_post_id ) {
- $title = get_the_title( $related_post_id );
- $link = get_permalink( $related_post_id );
- if ( $output_html ) {
- $list .= ''
- . esc_html( $title ) . ' '
- . '('
- . esc_html__( 'not this', 'relevanssi' ) .
- ' ) ';
- } else {
- $list[] = array(
- 'id' => $related_post_id,
- 'title' => $title,
- 'link' => $link,
- );
- }
- }
- return $list;
-}
-
-/**
- * Generates a list of excluded posts for the related posts metabox.
- *
- * @param int $post_id The post ID.
- * @param string $output If 'HTML', output HTML code. If 'ARRAY', output an
- * array. Default value is 'HTML'.
- */
-function relevanssi_generate_excluded_list( $post_id, $output = 'HTML' ) {
- $output_html = 'ARRAY' !== $output ? true : false;
- if ( $output_html ) {
- $list = '';
- } else {
- $list = array();
- }
- $excluded_posts = get_post_meta( $post_id, '_relevanssi_related_exclude_ids', true );
- if ( $excluded_posts ) {
- $excluded_array = explode( ',', $excluded_posts );
- foreach ( $excluded_array as $excluded_post_id ) {
- $title = get_the_title( $excluded_post_id );
- $link = get_permalink( $excluded_post_id );
- if ( $output_html ) {
- $list .= '' . esc_html( $title ) . ' (' . esc_html__( 'use this', 'relevanssi' ) . ' ) ';
- } else {
- $list[] = array(
- 'id' => $excluded_post_id,
- 'title' => $title,
- 'link' => $link,
- );
- }
- }
- } else {
- if ( $output_html ) {
- $list .= '' . esc_html__( 'Nothing excluded.', 'relevanssi' ) . ' ';
- }
- }
- return $list;
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/proximity.php b/wp/wp-content/plugins/relevanssi-premium/premium/proximity.php
deleted file mode 100644
index 17ddb01f..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/proximity.php
+++ /dev/null
@@ -1,181 +0,0 @@
- weight pairs. This function
- * ignores the weight and only cares about the post ID.
- *
- * @return array The $doc_weight array untouched.
- */
-function relevanssi_add_distance( $doc_weight ) {
- global $relevanssi_coordinates;
-
- /**
- * Filters the comparison coordinates Relevanssi uses.
- *
- * @param string The coordinates in "latitude, longitude" format.
- */
- $compare_coordinates = apply_filters(
- 'relevanssi_proximity_comparison',
- $relevanssi_coordinates // // phpcs:ignore WordPress.Security.NonceVerification
- );
-
- if ( ! $compare_coordinates ) {
- return $doc_weight;
- }
-
- list( $latitude_from, $longitude_from ) = explode( ',', $compare_coordinates );
-
- $latitude_from = floatval( $latitude_from );
- $longitude_from = floatval( $longitude_from );
-
- global $relevanssi_distance;
- $relevanssi_distance = array();
-
- foreach ( array_keys( $doc_weight ) as $post_id ) {
- /**
- * Filters the coordinates for each post.
- *
- * @param string The coordinates.
- * @param int The post ID.
- */
- $hit_coordinates = apply_filters(
- 'relevanssi_proximity_coordinates',
- '',
- $post_id
- );
- if ( ! $hit_coordinates ) {
- /**
- * Filters the default distance for posts without coordinates.
- *
- * @param int The default distance, default PHP_INT_MAX.
- */
- $default_distance = apply_filters(
- 'relevanssi_proximity_default_distance',
- PHP_INT_MAX
- );
- $relevanssi_distance[ $post_id ] = $default_distance;
- }
-
- list( $latitude_to, $longitude_to ) = explode( ',', $hit_coordinates );
-
- $latitude_to = floatval( $latitude_to );
- $longitude_to = floatval( $longitude_to );
-
- $distance = relevanssi_get_distance(
- $latitude_from,
- $longitude_from,
- $latitude_to,
- $longitude_to
- );
-
- $relevanssi_distance[ $post_id ] = $distance;
- }
-
- return $doc_weight;
-}
-
-/**
- * Calculates the great-circle distance between two points.
- *
- * Uses the Haversine formula.
- *
- * @param float $latitude_from Latitude of start point in [deg decimal].
- * @param float $longitude_from Longitude of start point in [deg decimal].
- * @param float $latitude_to Latitude of target point in [deg decimal].
- * @param float $longitude_to Longitude of target point in [deg decimal].
- *
- * @return float Distance between points in kilometers.
- */
-function relevanssi_get_distance( float $latitude_from, float $longitude_from, float $latitude_to, float $longitude_to ) : float {
- $earth_radius = 6371;
-
- $lat_from = deg2rad( $latitude_from );
- $lon_from = deg2rad( $longitude_from );
- $lat_to = deg2rad( $latitude_to );
- $lon_to = deg2rad( $longitude_to );
-
- $lat_delta = $lat_to - $lat_from;
- $lon_delta = $lon_to - $lon_from;
-
- $angle = 2 * asin(
- sqrt(
- pow( sin( $lat_delta / 2 ), 2 )
- + cos( $lat_from ) * cos( $lat_to )
- * pow( sin( $lon_delta / 2 ), 2 )
- )
- );
-
- return $angle * $earth_radius;
-}
-
-/**
- * Returns the distances for compared posts.
- *
- * Gets the distances from the $relevanssi_distance global array.
- *
- * @param object $post_a The first post object.
- * @param object $post_b The second post object.
- *
- * @return array Array containing the distance to post A and to post B. Default
- * value is 0.
- */
-function relevanssi_get_proximity_values( $post_a, $post_b ) {
- global $relevanssi_distance;
-
- $distance_to_a = $relevanssi_distance[ $post_a->ID ] ?? 0;
- $distance_to_b = $relevanssi_distance[ $post_b->ID ] ?? 0;
- return array( $distance_to_a, $distance_to_b );
-}
-
-/**
- * Takes the 'coordinates' query variable and stores it to a global variable.
- *
- * Stores the comparison coordinates from the 'coordinates' query variable in
- * the $relevanssi_coordinates global variable, because that is the easiest way
- * to access that data in the relevanssi_add_distance() function.
- *
- * @see relevanssi_add_distance().
- *
- * @param array $params The search parameters; ignored.
- * @param WP_Query $query The query object.
- *
- * @return array The search parameters untouched.
- */
-function relevanssi_pick_up_coordinates( $params, $query ) {
- global $relevanssi_coordinates;
- $relevanssi_coordinates = $query->query_vars['coordinates'];
- return $params;
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/redirects.php b/wp/wp-content/plugins/relevanssi-premium/premium/redirects.php
deleted file mode 100644
index 6bb60590..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/redirects.php
+++ /dev/null
@@ -1,216 +0,0 @@
-is_search && ! $url ) {
- if ( empty( $query ) && isset( $redirects['no_terms'] ) ) {
- $url = $redirects['no_terms'];
- } elseif ( 0 === $wp_query->found_posts && isset( $redirects['empty'] ) ) {
- $url = $redirects['empty'];
- }
- }
-
- if ( $url ) {
- if ( wp_redirect( $url ) ) { // phpcs:ignore WordPress.Security.SafeRedirect
- exit();
- }
- }
-}
-
-/**
- * Helper function to update the redirect for the hit counting.
- *
- * Takes the new redirect, finds the old one by the `query` field and replaces
- * the redirect in the option.
- *
- * @param array $redirect The redirect array to be added to the option.
- */
-function relevanssi_update_redirect( $redirect ) {
- $redirects = get_option( 'relevanssi_redirects', array() );
- $key = array_search(
- $redirect['query'],
- array_column( $redirects, 'query' ),
- true
- );
-
- update_option(
- 'relevanssi_redirects',
- array_replace( $redirects, array( $key => $redirect ) )
- );
-}
-
-/**
- * Makes relatives URLs absolute and validates all URLs.
- *
- * Uses site_url() to make relative URLs absolute and then passes all URLs
- * through wp_http_validate_url().
- *
- * @see wp_http_validate_url()
- *
- * @param string $value A relative or absolute URL to validate.
- *
- * @return string|false The URL, converted to absolute if necessary, and
- * validated. Returns false on failure.
- */
-function relevanssi_validate_url( $value ) {
- if ( 'http' !== substr( $value, 0, 4 ) ) {
- // Relative URL, make absolute.
- if ( '/' !== substr( $value, 0, 1 ) ) {
- $value = '/' . $value;
- }
- $value = site_url() . $value;
- }
- return wp_http_validate_url( $value );
-}
-
-/**
- * Reads the redirects from the request array and validates the URLs.
- *
- * All relative URLs are converted to absolute URLs for validation and redirects
- * with both the query and URL parameters are kept.
- *
- * @param array $request The options request array.
- *
- * @return array The redirect array.
- *
- * @since 2.2.3
- */
-function relevanssi_process_redirects( $request ) {
- $redirects = array();
- foreach ( $request as $key => $value ) {
- if ( 'redirect_empty_searches' === $key && ! empty( $value ) ) {
- $url = relevanssi_validate_url( $value );
- if ( ! empty( $url ) ) {
- $redirects['empty'] = $url;
- }
- }
- if ( 'redirect_no_terms' === $key && ! empty( $value ) ) {
- $url = relevanssi_validate_url( $value );
- if ( ! empty( $url ) ) {
- $redirects['no_terms'] = $url;
- }
- }
- if ( 'query' !== substr( $key, 0, 5 ) ) {
- continue;
- }
- $suffix = substr( $key, 5 );
- $query = stripslashes( relevanssi_strtolower( $value ) );
- $partial = false;
- if ( isset( $request[ 'partial' . $suffix ] ) ) {
- $partial = true;
- }
- $url = null;
- if ( isset( $request[ 'url' . $suffix ] ) ) {
- $url = relevanssi_validate_url( $request[ 'url' . $suffix ] );
- }
- $hits = $request[ 'hits' . $suffix ] ?? 0;
- if ( ! empty( $url ) && ! empty( $query ) ) {
- $redirect = array(
- 'query' => $query,
- 'partial' => $partial,
- 'url' => $url,
- 'hits' => $hits,
- );
- $redirects[] = $redirect;
- }
- }
- return $redirects;
-}
-
-/**
- * Gets the search query for FacetWP searches.
- *
- * @return string The search query, empty string if nothing is found.
- *
- * @author Jan Willem Oostendorp
- */
-function relevanssi_get_facetwp_query() {
- $query = '';
-
- if ( ! empty( FWP()->helper->settings['facets'] ) && ! empty( FWP()->request->url_vars ) ) {
- $facet_searches = array();
- $url_vars = FWP()->request->url_vars;
- foreach ( FWP()->helper->settings['facets'] as $facet ) {
- if ( 'search' === $facet['type'] && 'relevanssi' === $facet['search_engine'] && ! empty( $url_vars[ $facet['name'] ] ) ) {
- $facet_searches = array_merge( $facet_searches, $url_vars[ $facet['name'] ] );
- }
- }
-
- // If there are multiple search queries we won't even try.
- if ( 1 === count( $facet_searches ) ) {
- $query = $facet_searches[0];
- }
- }
-
- return strtolower( $query );
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/related.php b/wp/wp-content/plugins/relevanssi-premium/premium/related.php
deleted file mode 100644
index af64d288..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/related.php
+++ /dev/null
@@ -1,763 +0,0 @@
-';
- }
- /**
- * Filters the related posts output.
- *
- * @param string The output, ready to be displayed.
- */
- return apply_filters( 'relevanssi_related_output', $related );
- } else {
- // Post ID custom field returned results, but the transient has
- // expired. Let's refresh the custom field as well.
- $use_cache = false;
- }
- }
-
- $related_posts = relevanssi_get_related_post_ids( $post_id, $use_cache );
-
- if ( $just_objects ) {
- // Deprecated, remove this functionality eventually.
- $related_post_objects = array();
- foreach ( $related_posts as $related_id ) {
- array_push( $related_post_objects, get_post( $related_id ) );
- }
- set_transient( $transient_name, $related_post_objects, WEEK_IN_SECONDS * 2 );
- } elseif ( ! $no_template ) {
- $template = locate_template( 'templates/relevanssi-related.php', false );
- if ( ! $template ) {
- $template = $relevanssi_variables['plugin_dir'] . 'premium/templates/relevanssi-related.php';
- }
-
- ob_start();
- include $template;
- $related = ob_get_clean();
-
- set_transient( $transient_name, $related, WEEK_IN_SECONDS * 2 );
- }
-
- /**
- * Filters the related posts output.
- *
- * @param string The output, ready to be displayed.
- */
- return apply_filters( 'relevanssi_related_output', $related );
-}
-
-/**
- * Returns related post objects for the specific post.
- *
- * @param int $post_id The post ID. Default null, in which case global $post
- * is used.
- *
- * @return WP_Post[] An array of WordPress post objects.
- */
-function relevanssi_get_related_post_objects( $post_id ) {
- if ( ! $post_id ) {
- $post_id = get_the_ID();
- if ( ! $post_id ) {
- return array();
- }
- }
-
- $settings = get_option(
- 'relevanssi_related_settings',
- relevanssi_related_default_settings()
- );
-
- $transient_name = apply_filters( 'relevanssi_related_posts_cache_id', 'relevanssi_related_posts_' . $post_id . '_jo' );
- $use_cache = relevanssi_related_cache_available( $post_id, $settings );
-
- if ( $use_cache ) {
- $related = get_transient( $transient_name );
- if ( $related ) {
- return $related;
- } else {
- $use_cache = false;
- }
- }
-
- $related_posts = relevanssi_get_related_post_ids( $post_id, $use_cache );
-
- $related_post_objects = array();
- foreach ( $related_posts as $related_id ) {
- array_push( $related_post_objects, get_post( $related_id ) );
- }
- set_transient( $transient_name, $related_post_objects, WEEK_IN_SECONDS * 2 );
-
- return $related_post_objects;
-}
-
-/**
- * Returns true if related post cache is available for the current post.
- *
- * @param int $post_id The post ID.
- * @param array $settings The Relevanssi related posts settings.
- *
- * @return boolean True, if related post IDs have been cached for the post.
- */
-function relevanssi_related_cache_available( $post_id, $settings ) {
- $use_cache = true;
- /**
- * Disables the caching for related posts. Do not use unless you know
- * what you are doing.
- *
- * @param boolean Set true to disable caching. Default false.
- */
- if ( apply_filters( 'relevanssi_disable_related_cache', false ) ) {
- $use_cache = false;
- } elseif ( 'on' !== $settings['cache_for_admins'] && current_user_can( 'manage_options' ) ) {
- $use_cache = false;
- } else {
- // For cache control: if the meta field is empty, cache has been flushed.
- $post_ids = get_post_meta( $post_id, '_relevanssi_related_posts', true );
- if ( empty( $post_ids ) ) {
- $use_cache = false;
- }
- }
-
- return $use_cache;
-}
-
-/**
- * Fetches related post IDs.
- *
- * @param int $post_id The post ID.
- * @param boolean $use_cache If false, discard cached results. Default true.
- *
- * @return int[] An array of related post IDs.
- */
-function relevanssi_get_related_post_ids( $post_id, $use_cache = true ) {
- global $wpdb;
-
- $settings = get_option(
- 'relevanssi_related_settings',
- relevanssi_related_default_settings()
- );
-
- $related_posts_string = get_post_meta(
- $post_id,
- '_relevanssi_related_posts',
- true
- );
-
- if ( ! empty( $related_posts_string ) && $use_cache ) {
- $related_posts = explode( ',', $related_posts_string );
- return $related_posts;
- }
-
- $post_types = explode( ',', $settings['post_types'] );
-
- if ( 'matching_post_type' === $settings['post_types'] || empty( $post_types ) ) {
- $post_types = array( get_post_type( $post_id ) );
- }
-
- /**
- * Runs before the related posts searches and can be used to adjust the
- * Relevanssi settings. By default disables query logging.
- */
- do_action( 'pre_relevanssi_related' );
-
- $words = relevanssi_related_generate_keywords( $post_id );
- $related_posts = array();
-
- $include_ids = get_post_meta(
- $post_id,
- '_relevanssi_related_include_ids',
- true
- );
- if ( $include_ids ) {
- $related_posts = explode( ',', $include_ids );
- }
-
- $exclude_ids = get_post_meta(
- $post_id,
- '_relevanssi_related_exclude_ids',
- true
- );
- if ( $exclude_ids ) {
- $exclude_ids = explode( ',', $exclude_ids );
- }
- if ( ! is_array( $exclude_ids ) ) {
- $exclude_ids = array();
- }
- $exclude_ids[] = $post_id; // Always exclude the current post.
-
- // These posts are marked as "not related to anything".
- $global_exclude_ids = $wpdb->get_col(
- "SELECT post_id FROM $wpdb->postmeta
- WHERE meta_key = '_relevanssi_related_not_related'
- AND meta_value <> ''"
- );
-
- $exclude_ids = array_merge( $exclude_ids, $global_exclude_ids );
- $exclude_ids = array_merge( $exclude_ids, $related_posts );
- $exclude_ids = array_keys( array_flip( $exclude_ids ) );
-
- $date_query = array();
- if ( isset( $settings['months'] ) && intval( $settings['months'] ) > 0 ) {
- $date_query = array(
- 'after' => '-' . $settings['months'] . ' months',
- );
- }
- if ( ! empty( $words ) ) {
- $count = count( $related_posts );
- if ( $settings['number'] - $count > 0 ) {
- $args = array(
- 's' => $words,
- 'posts_per_page' => $settings['number'] - $count,
- 'post_type' => $post_types,
- 'post__not_in' => $exclude_ids,
- 'fields' => 'ids',
- 'operator' => 'OR',
- 'post_status' => 'publish',
- );
- if ( $date_query ) {
- $args['date_query'] = $date_query;
- }
- $related_posts_query = new WP_Query();
- $related_posts_query->parse_query(
- /**
- * Filters the related posts search arguments.
- *
- * Notice that the defaults vary depending on which related posts
- * query is done. Avoid overriding default values; preferably just
- * add extra criteria.
- *
- * @param array The related posts arguments.
- * @param string Which query is run. Values include "or",
- * "random fill", "random".
- */
- apply_filters(
- 'relevanssi_related_args',
- $args,
- 'or'
- )
- );
- relevanssi_do_query( $related_posts_query );
- $related_posts = array_merge( $related_posts, $related_posts_query->posts );
-
- // There may be null results in the set and those may cause problems
- // further down the line.
- $related_posts = array_filter(
- $related_posts,
- function( $value ) {
- return $value;
- }
- );
- }
- }
-
- /**
- * Runs after the related posts searches and can be used to adjust the
- * Relevanssi settings.
- */
- do_action( 'post_relevanssi_related' );
-
- $tax_query = array();
- if ( 'random_cat' === $settings['notenough'] || 'random_cat' === $settings['nothing'] ) {
- $cats = get_the_category( $post_id );
- $cat_ids = array_map(
- function( $cat ) {
- return $cat->term_id;
- },
- $cats
- );
- $tax_query = array(
- 'relation' => 'OR',
- array(
- 'taxonomy' => 'category',
- 'field' => 'term_id',
- 'terms' => $cat_ids,
- 'operator' => 'IN',
- ),
- );
- }
- $random_fill = in_array(
- $settings['notenough'],
- array( 'random', 'random_cat' ),
- true
- ) ? true : false;
- if ( $random_fill && ( null === $related_posts || count( $related_posts ) < $settings['number'] ) ) {
- // Not enough results and user wants a random fillup.
- if ( null === $related_posts ) {
- $related_posts = array();
- }
- $count = count( $related_posts );
-
- $exclude_ids = array_merge( $exclude_ids, $related_posts );
- $exclude_ids = array_keys( array_flip( $exclude_ids ) );
-
- $args = array(
- 'posts_per_page' => $settings['number'] - $count,
- 'post_type' => $post_types,
- 'post__not_in' => $exclude_ids,
- 'fields' => 'ids',
- 'orderby' => 'rand',
- 'post_status' => 'publish',
- );
- if ( $date_query ) {
- $args['date_query'] = $date_query;
- }
- if ( 'random_cat' === $settings['notenough'] ) {
- $args['tax_query'] = $tax_query;
- }
- /** Documented in premium/related.php */
- $more_related_posts = new WP_Query(
- apply_filters(
- 'relevanssi_related_args',
- $args,
- 'random fill'
- )
- );
- $related_posts = array_merge(
- $related_posts,
- $more_related_posts->posts
- );
- }
- $all_random = in_array(
- $settings['nothing'],
- array( 'random', 'random_cat' ),
- true
- ) ? true : false;
- if ( empty( $related_posts ) && $all_random ) {
- $query = new WP_Query();
- // No related posts found, user has requested random posts.
- $args = array(
- 'posts_per_page' => $settings['number'],
- 'post_type' => $post_types,
- 'post__not_in' => $exclude_ids,
- 'fields' => 'ids',
- 'orderby' => 'rand',
- 'post_status' => 'publish',
- );
- if ( $date_query ) {
- $args['date_query'] = $date_query;
- }
- if ( 'random_cat' === $settings['nothing'] ) {
- $args['tax_query'] = $tax_query;
- }
- $query->query(
- /** Documented in premium/related.php */
- apply_filters(
- 'relevanssi_related_args',
- $args,
- 'random'
- )
- );
- $related_posts = $query->posts;
- }
-
- /*
- * Sometimes a thoughtless relevanssi_hits_filter filter function may
- * cause the $related_posts array to contain post objects instead of
- * post IDs. This step makes sure the array has post IDs.
- */
- $related_posts = array_map(
- function( $item ) {
- if ( is_object( $item ) && isset( $item->ID ) ) {
- return $item->ID;
- } else {
- return $item;
- }
- },
- $related_posts
- );
-
- if ( ! $related_posts ) {
- // For some reason nothing was found.
- $related_posts = array();
- }
-
- $related_posts_string = implode( ',', $related_posts );
- update_post_meta( $post_id, '_relevanssi_related_posts', $related_posts_string );
-
- return $related_posts;
-}
-
-/**
- * Echoes out the related posts.
- *
- * @param int $post_id The post ID. Default null, in which case global $post is used.
- */
-function relevanssi_the_related_posts( $post_id = null ) {
- echo relevanssi_related_posts( $post_id ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
-}
-
-/**
- * Returns the related posts for the relevanssi_related_posts shortcode.
- *
- * @param array $atts The shortcode parameters; only one used is post_id, which
- * defaults to null and global $post.
- */
-function relevanssi_related_posts_shortcode( $atts ) {
- $post_id = null;
- if ( isset( $atts['post_id'] ) && is_int( $atts['post_id'] ) ) {
- $post_id = $atts['post_id'];
- }
- return relevanssi_related_posts( $post_id );
-}
-add_shortcode( 'relevanssi_related_posts', 'relevanssi_related_posts_shortcode' );
-
-/**
- * Sets the default settings for related posts.
- *
- * @return array Array containing the default settings.
- */
-function relevanssi_related_default_settings() {
- return array(
- 'enabled' => 'off',
- 'number' => 6,
- 'nothing' => 'nothing',
- 'notenough' => 'random',
- 'post_types' => 'post',
- 'keyword' => 'title',
- 'append' => '',
- 'cache_for_admins' => 'off',
- 'months' => 0,
- 'restrict' => '',
- );
-}
-
-/**
- * Sets the default styles for related posts.
- *
- * @return array Array containing the default styles.
- */
-function relevanssi_related_default_styles() {
- return array(
- 'width' => 250,
- 'titles' => 'on',
- 'excerpts' => 'off',
- 'thumbnails' => 'on',
- 'default_thumbnail' => '',
- );
-}
-
-/**
- * A wrapper function to attach the related posts to the_content.
- *
- * @param string $content The post content.
- *
- * @return string The post content with the related posts appended.
- */
-function relevanssi_related_posts_the_content_wrapper( $content ) {
- $settings = get_option(
- 'relevanssi_related_settings',
- relevanssi_related_default_settings()
- );
- $post_types = explode( ',', $settings['append'] );
- if ( is_singular() && in_the_loop() && in_array( get_post_type(), $post_types, true ) ) {
- global $post;
- if ( 'on' !== get_post_meta( $post->ID, '_relevanssi_related_no_append', true ) ) {
- $content .= relevanssi_related_posts();
- }
- }
- return $content;
-}
-
-/**
- * Generates keywords from the post.
- *
- * @param int $post_id The post ID.
- */
-function relevanssi_related_generate_keywords( $post_id ) {
- global $wpdb, $relevanssi_variables;
-
- $settings = get_option(
- 'relevanssi_related_settings',
- relevanssi_related_default_settings()
- );
- $keywords = explode( ',', $settings['keyword'] );
- $restrict = explode( ',', $settings['restrict'] );
-
- $title_words = array();
- $tag_words = array();
- $cat_words = array();
- $tax_words = array();
-
- foreach ( $keywords as $keyword ) {
- if ( empty( $keyword ) ) {
- continue;
- }
- if ( 'title' === $keyword ) {
- $title_words = $wpdb->get_col(
- $wpdb->prepare(
- 'SELECT term FROM '
- . $relevanssi_variables['relevanssi_table'] // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
- . ' WHERE doc = %d AND title > 0',
- $post_id
- )
- );
- } elseif ( 'post_tag' === $keyword ) {
- $tag_words = $wpdb->get_col(
- $wpdb->prepare(
- 'SELECT term FROM '
- . $relevanssi_variables['relevanssi_table'] // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
- . ' WHERE doc = %d AND tag > 0 ORDER BY tag DESC',
- $post_id
- )
- );
- } elseif ( 'category' === $keyword ) {
- $cat_words = $wpdb->get_col(
- $wpdb->prepare(
- 'SELECT term FROM '
- . $relevanssi_variables['relevanssi_table'] // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
- . ' WHERE doc = %d AND category > 0 ORDER BY category DESC',
- $post_id
- )
- );
- } else {
- $new_tax_words = $wpdb->get_col(
- $wpdb->prepare(
- 'SELECT term FROM '
- . $relevanssi_variables['relevanssi_table'] // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
- . ' WHERE doc = %d AND taxonomy > 0 AND taxonomy_detail LIKE %s ORDER BY taxonomy DESC',
- $post_id,
- '%' . $keyword . '%'
- )
- );
- $new_tax_words = array_map(
- function ( $a ) use ( $keyword ) {
- return array(
- 'word' => $a,
- 'taxonomy' => $keyword,
- );
- },
- $new_tax_words
- );
- $tax_words = array_merge( $tax_words, $new_tax_words );
- }
- }
-
- $custom_words = get_post_meta( $post_id, '_relevanssi_related_keywords', true );
- if ( $custom_words ) {
- $custom_words = explode( ',', $custom_words );
- } else {
- $custom_words = array();
- }
-
- $tax_words = array_map(
- function ( $word ) use ( $restrict ) {
- return in_array(
- $word['taxonomy'],
- $restrict,
- true
- ) ? '{' . $word['taxonomy'] . ':' . $word['word'] . '}' : $word['word'];
- },
- $tax_words
- );
- if ( in_array( 'post_tag', $restrict, true ) ) {
- $tag_words = array_map(
- function ( $word ) {
- return '{post_tag:' . $word . '}';
- },
- $tag_words
- );
- }
- if ( in_array( 'category', $restrict, true ) ) {
- $cat_words = array_map(
- function ( $word ) {
- return '{category:' . $word . '}';
- },
- $cat_words
- );
- }
-
- $words = array_merge(
- $title_words,
- $tag_words,
- $cat_words,
- $tax_words,
- $custom_words
- );
- $words = array_keys( array_flip( $words ) );
-
- /**
- * Filters the source words for related posts.
- *
- * This filter sees the words right before they are fed into Relevanssi to
- * find the related posts.
- *
- * @param string A space-separated list of keywords for related posts.
- * @param int The post ID.
- */
- return apply_filters(
- 'relevanssi_related_words',
- implode( ' ', $words ),
- $post_id
- );
-}
-
-/**
- * Flushes the related post caches.
- *
- * Deletes all the _relevanssi_related_posts meta fields. This flushes the
- * cache. The actual cache is stored in transients, but we don't have a list of
- * all the transient names and one shouldn't simply remove the transients from
- * the wp_options database table, because it's possible they're not there.
- *
- * So, instead of deleting the transients, Relevanssi deletes the meta fields
- * which contain a list of post IDs (this is helpful for other uses as well),
- * which then forces a cache flush.
- *
- * @global object $wpdb The WordPress database object.
- *
- * @param int $clean_id If specified, only remove meta fields that contain this
- * ID. Default null, which flushes all caches.
- */
-function relevanssi_flush_related_cache( $clean_id = null ) {
- global $wpdb;
-
- if ( is_int( $clean_id ) ) {
- $clean_id = '%' . $clean_id . '%';
- $wpdb->query(
- $wpdb->prepare(
- "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_related_posts' AND meta_value LIKE %s",
- $clean_id
- )
- );
- // Not perfect, since this will match also rows where post ID contains the
- // wanted ID, but it's an acceptable minor cost for a simple solution.
- } else {
- $wpdb->query(
- "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_related_posts'"
- );
- }
-}
-
-/**
- * Flushes the caches when a post is made a draft or deleted.
- *
- * Called from 'transition_post_status' action hook when a post is made into a draft,
- * or deleted. Will flush the related post caches where that post appears.
- *
- * @global object $wpdb The WP database interface.
- *
- * @param string $new_status The new status.
- * @param string $old_status The old status.
- * @param object $post The post object.
- */
-function relevanssi_flush_caches_on_transition( $new_status, $old_status, $post ) {
- // Safety check, for WordPress Editorial Calendar incompatibility.
- if ( ! isset( $post ) || ! isset( $post->ID ) ) {
- return;
- }
-
- if ( 'publish' !== $new_status ) {
- // The post isn't public anymore.
- relevanssi_flush_related_cache( $post->ID );
- }
-}
-
-add_action( 'pre_relevanssi_related', 'relevanssi_pre_related_posts' );
-/**
- * Runs before the related posts queries and disables logging.
- */
-function relevanssi_pre_related_posts() {
- // We don't want to log these queries.
- add_filter( 'relevanssi_ok_to_log', '__return_false' );
- add_filter( 'pre_option_relevanssi_searchblogs', '__return_false' );
- add_filter( 'pre_option_relevanssi_searchblogs_all', 'relevanssi_return_off' );
-}
-
-add_action( 'post_relevanssi_related', 'relevanssi_post_related_posts' );
-/**
- * Runs after the related posts queries and enables logging.
- */
-function relevanssi_post_related_posts() {
- remove_filter( 'relevanssi_ok_to_log', '__return_false' );
- remove_filter( 'pre_option_relevanssi_searchblogs', '__return_false' );
- remove_filter( 'pre_option_relevanssi_searchblogs_all', 'relevanssi_return_off' );
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/search-multi.php b/wp/wp-content/plugins/relevanssi-premium/premium/search-multi.php
deleted file mode 100644
index fe865dcd..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/search-multi.php
+++ /dev/null
@@ -1,514 +0,0 @@
- 2000 ) ); // There's likely flaming death with even lower values of 'number'.
- $blog_list = array();
- foreach ( $raw_blog_list as $blog ) {
- $blog_list[] = $blog->blog_id;
- }
- $search_blogs = implode( ',', $blog_list );
- }
-
- $search_blogs = explode( ',', $search_blogs );
- if ( ! is_array( $search_blogs ) ) {
- // No blogs to search, so let's quit.
- return $hits;
- }
-
- $post_type_weights = get_option( 'relevanssi_post_type_weights' );
-
- foreach ( $search_blogs as $blogid ) {
- $search_again = false;
-
- if ( ! relevanssi_is_blog_ok( $blogid ) ) {
- continue;
- }
-
- // Ok, we should have a valid blog.
- switch_to_blog( $blogid );
- $relevanssi_table = $wpdb->prefix . 'relevanssi';
-
- $list_of_tables = $wpdb->get_col( 'SHOW TABLES' );
- if ( ! in_array( $relevanssi_table, $list_of_tables, true ) ) {
- restore_current_blog();
- continue;
- }
-
- $query_data = relevanssi_process_multi_query_args( $filtered_args );
- $query_restrictions = $query_data['query_restrictions'];
- $query_join = $query_data['query_join'];
- $q = $query_data['query_query'];
- $q_no_synonyms = $query_data['query_no_synonyms'];
- $phrase_queries = $query_data['phrase_queries'];
-
- if ( 'OR' === $operator ) {
- $q = relevanssi_add_synonyms( $q );
- }
-
- $remove_stopwords = false;
- $terms = relevanssi_tokenize( $q, $remove_stopwords, 1, 'search_query' );
-
- if ( count( $terms ) < 1 ) {
- // Tokenizer killed all the search terms.
- continue;
- }
- $terms = array_keys( $terms ); // Don't care about tf in query.
-
- /**
- * Filters the query restrictions in Relevanssi.
- *
- * Approximately the same purpose as the default 'posts_where' filter hook.
- * Can be used to add additional query restrictions to the Relevanssi query.
- *
- * @param string $query_restrictions MySQL added to the Relevanssi query.
- *
- * @author Charles St-Pierre.
- */
- $query_restrictions = apply_filters( 'relevanssi_where', $query_restrictions );
-
- // Go get the count from the options, but run the full query if it's not available.
- $doc_count = get_option( 'relevanssi_doc_count' );
- if ( ! $doc_count || $doc_count < 1 ) {
- $doc_count = relevanssi_update_doc_count();
- }
-
- $no_matches = true;
- $doc_weight = array();
- $term_hits = array();
-
- do {
- $df_counts = relevanssi_generate_df_counts(
- $terms,
- array(
- 'no_terms' => false,
- 'operator' => $operator,
- 'phrase_queries' => $phrase_queries,
- 'query_join' => $query_join,
- 'query_restrictions' => $query_restrictions,
- 'search_again' => $search_again,
- )
- );
-
- foreach ( $df_counts as $term => $df ) {
- $this_query_restrictions = relevanssi_add_phrase_restrictions(
- $query_restrictions,
- $phrase_queries,
- $term,
- $operator
- );
-
- $query = relevanssi_generate_search_query( $term, $search_again, false, $query_join, $this_query_restrictions );
- $matches = $wpdb->get_results( $query ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQL.NotPrepared
- if ( count( $matches ) < 1 ) {
- continue;
- } else {
- $no_matches = false;
- }
-
- $total_hits += count( $matches );
-
- $idf = log( $doc_count / ( 1 + $df ) );
- foreach ( $matches as $match ) {
- $match->doc = relevanssi_adjust_match_doc( $match );
- $match->tf = relevanssi_calculate_tf( $match, $post_type_weights );
- $match->weight = relevanssi_calculate_weight( $match, $idf, $post_type_weights, $q );
-
- /**
- * Documented in /lib/search.php.
- */
- $match = apply_filters( 'relevanssi_match', $match, $idf, $term );
-
- if ( $match->weight <= 0 ) {
- continue; // The filters killed the match.
- }
-
- $post_ok = true;
- /**
- * Filters whether the user is allowed to see the post.
- *
- * Can this post be included in the search results? This is the hook
- * you’ll use if you want to add support for a membership plugin, for
- * example. Based on the post ID, your function needs to return true
- * or false.
- *
- * @param boolean $post_ok Can the post be shown in results?
- * @param int $doc The post ID.
- */
- $post_ok = apply_filters( 'relevanssi_post_ok', $post_ok, $match->doc );
- if ( ! $post_ok ) {
- continue;
- }
-
- relevanssi_update_term_hits( $term_hits, $match_arrays, $match, $term );
-
- $doc_id = $blogid . '|' . $match->doc;
-
- $doc_terms[ $match->doc ][ $term ] = true; // Count how many terms are matched to a doc.
- if ( ! isset( $doc_weight[ $doc_id ] ) ) {
- $doc_weight[ $match->doc ] = 0;
- }
- $doc_weight[ $match->doc ] += $match->weight;
- }
- }
-
- if ( $no_matches ) {
- if ( $search_again ) {
- // No hits even with partial matching.
- $search_again = false;
- } else {
- if ( 'sometimes' === get_option( 'relevanssi_fuzzy' ) ) {
- $search_again = true;
- }
- }
- } else {
- $search_again = false;
- }
- } while ( $search_again );
-
- $strip_stopwords = true;
- $terms_without_stops = array_keys( relevanssi_tokenize( implode( ' ', $terms ), $strip_stopwords, -1, 'search_query' ) );
- $total_terms = count( $terms_without_stops );
-
- if ( isset( $doc_weight ) ) {
- /**
- * Filters the results Relevanssi finds for one site in multisite
- * search.
- *
- * This is similar to 'relevanssi_results' in single site searching,
- * but only applies to results fetched from one subsite, the ID of
- * which can be found in the filter parameters.
- *
- * @param array $doc_weight An array of (post ID, weight) pairs.
- * @param int $blogid The blog ID.
- */
- $doc_weight = apply_filters( 'relevanssi_site_results', $doc_weight, $blogid );
- }
-
- if ( isset( $doc_weight ) && count( $doc_weight ) > 0 && ! $no_matches ) {
- arsort( $doc_weight );
- $i = 0;
- foreach ( $doc_weight as $doc => $weight ) {
- if ( count( $doc_terms[ $doc ] ) < $total_terms && 'AND' === $operator ) {
- // AND operator in action: $doc didn't match all terms, so it's discarded.
- continue;
- }
-
- $post_object = relevanssi_get_multisite_post( $blogid, $doc );
- $post_object->blog_id = $blogid;
-
- $object_id = $blogid . '|' . $doc;
- $hitsbyweight[ $object_id ] = $weight;
- $post_objects[ $object_id ] = $post_object;
- }
- }
- restore_current_blog();
- }
-
- /**
- * Filters all results found in the multisite search.
- *
- * This is similar to 'relevanssi_results', but is applied to multisite
- * searches (where 'relevanssi_results' is not used). This filter hook
- * filters an array of ID => weight pairs, where ID is in the format
- * '[blog ID]|[post ID]'.
- *
- * You can also use 'relevanssi_site_results', which is more like the
- * original 'relevanssi_results'; it's applied to results from a single
- * site.
- *
- * @param array $hitsbyweight The ID => weight pairs.
- */
- $hitsbyweight = apply_filters( 'relevanssi_multi_results', $hitsbyweight );
- arsort( $hitsbyweight );
-
- $i = 0;
- foreach ( $hitsbyweight as $hit => $weight ) {
- $hit = $post_objects[ $hit ];
- $hits[ intval( $i ) ] = $hit;
- $hits[ intval( $i ) ]->relevance_score = round( $weight, 2 );
- $i++;
- }
-
- if ( count( $hits ) < 1 ) {
- if ( 'AND' === $operator && 'on' !== get_option( 'relevanssi_disable_or_fallback' ) ) {
- $or_args = $multi_args;
- $or_args['operator'] = 'OR';
- $return = relevanssi_search_multi( $or_args );
- $hits = $return['hits'];
- $match_arrays['body'] = $return['body_matches'];
- $match_arrays['title'] = $return['title_matches'];
- $match_arrays['tag'] = $return['tag_matches'];
- $match_arrays['category'] = $return['category_matches'];
- $match_arrays['taxonomy'] = $return['taxonomy_matches'];
- $match_arrays['comment'] = $return['comment_matches'];
- $match_arrays['link'] = $return['link_matches'];
- $match_arrays['author'] = $return['author_matches'];
- $match_arrays['customfield'] = $return['customfield_matches'];
- $match_arrays['mysqlcolumn'] = $return['mysqlcolumn_matches'];
- $match_arrays['excerpt'] = $return['excerpt_matches'];
- $term_hits = $return['term_hits'];
- $query = $return['query'];
- $doc_weight = $return['doc_weights'];
- }
- }
-
- relevanssi_sort_results( $hits, $orderby, $order, $meta_query );
-
- $return = array(
- 'hits' => $hits,
- 'body_matches' => $match_arrays['body'],
- 'title_matches' => $match_arrays['title'],
- 'tag_matches' => $match_arrays['tag'],
- 'category_matches' => $match_arrays['category'],
- 'comment_matches' => $match_arrays['comment'],
- 'taxonomy_matches' => $match_arrays['taxonomy'],
- 'link_matches' => $match_arrays['link'],
- 'customfield_matches' => $match_arrays['customfield'],
- 'mysqlcolumn_matches' => $match_arrays['mysqlcolumn'],
- 'author_matches' => $match_arrays['author'],
- 'excerpt_matches' => $match_arrays['excerpt'],
- 'term_hits' => $term_hits,
- 'query' => $q,
- 'query_no_synonyms' => $q_no_synonyms,
- 'doc_weights' => $doc_weight,
- );
-
- return $return;
-}
-
-/**
- * Collects the multisite search arguments from the query variables.
- *
- * @param object $query The WP_Query object that contains the parameters.
- * @param string $searchblogs A list of blogs to search, or 'all'.
- * @param string $q The search query.
- *
- * @return array The multisite search parameters.
- */
-function relevanssi_compile_multi_args( $query, $searchblogs, $q ) {
- $multi_args = relevanssi_compile_common_args( $query );
-
- $multi_args['q_no_synonyms'] = $q;
- $multi_args['q'] = $q;
-
- if ( isset( $query->query_vars['searchblogs'] ) ) {
- $multi_args['search_blogs'] = $query->query_vars['searchblogs'];
- } else {
- $multi_args['search_blogs'] = $searchblogs;
- }
-
- $query->query_vars['operator'] = $multi_args['operator'];
-
- return $multi_args;
-}
-
-/**
- * Checks which blogs should be searched.
- *
- * @param object $query The WP Query object to check for the
- * $query->query_vars['searchblogs'] query variable.
- *
- * @return boolean|string False, if not a multisite search; list of blogs or
- * 'all' otherwise.
- */
-function relevanssi_is_multisite_search( $query ) {
- $searchblogs = false;
- $search_multisite = false;
- if ( isset( $query->query_vars['searchblogs'] )
- && (string) get_current_blog_id() !== $query->query_vars['searchblogs'] ) {
- $search_multisite = true;
- $searchblogs = $query->query_vars['searchblogs'];
- }
-
- if ( ! isset( $query->query_vars['searchblogs'] ) && ! $search_multisite ) {
- // Is searching all blogs enabled?
- $searchblogs_all = get_option( 'relevanssi_searchblogs_all', 'off' );
- if ( 'off' === $searchblogs_all ) {
- $searchblogs_all = false;
- }
- if ( $searchblogs_all ) {
- $search_multisite = true;
- $searchblogs = 'all';
- }
- }
-
- if ( ! isset( $query->query_vars['searchblogs'] ) && ! $search_multisite ) {
- // Searchblogs is not set from the query variables, check the option.
- $searchblogs_setting = get_option( 'relevanssi_searchblogs' );
- if ( $searchblogs_setting ) {
- $search_multisite = true;
- $searchblogs = $searchblogs_setting;
- }
- }
- return $searchblogs;
-}
-
-/**
- * Checks to see if a blog is good to use.
- *
- * Blog must exist, it has to be public and not archived, spam or deleted. The
- * filter hook `relevanssi_multisite_public_status` can be used to allow
- * Relevanssi to search non-public blogs.
- *
- * @param int $blogid The blog ID.
- *
- * @return bool True, if blog is public.
- */
-function relevanssi_is_blog_ok( $blogid ) : bool {
- // Only search blogs that are publicly available (unless filter says otherwise).
- $public_status = (bool) get_blog_status( $blogid, 'public' );
- if ( null === $public_status ) {
- // Blog doesn't actually exist.
- return false;
- }
-
- /**
- * Adjusts the possible values of blog public status.
- *
- * By default Relevanssi requires blogs to be public so they can be searched.
- * If you want a non-public blog in the search results, make this filter
- * return true.
- *
- * @param boolean $public_status Is the blog public?
- * @param int $blogid Blog ID.
- */
- if ( false === apply_filters( 'relevanssi_multisite_public_status', $public_status, $blogid ) ) {
- return false;
- }
-
- // Don't search blogs that are marked "archived", "spam" or "deleted".
- if ( get_blog_status( $blogid, 'archived' ) ) {
- return false;
- }
- if ( get_blog_status( $blogid, 'spam' ) ) {
- return false;
- }
- if ( get_blog_status( $blogid, 'delete' ) ) {
- return false;
- }
- return true;
-}
-
-/**
- * Processes the arguments to create the query restrictions for multisite
- * searches.
- *
- * All individual parts are tested.
- *
- * @param array $args The query arguments.
- *
- * @return array An array containing `query_restriction` and `query_join`.
- */
-function relevanssi_process_multi_query_args( $args ) {
- $query_restrictions = '';
- $query_join = '';
- $query = '';
- $query_no_synonyms = '';
-
- $phrase_query_restrictions = array(
- 'and' => '',
- 'or' => array(),
- );
-
- if ( function_exists( 'wp_encode_emoji' ) ) {
- $query = wp_encode_emoji( $args['q'] );
- $query_no_synonyms = wp_encode_emoji( $args['q_no_synonyms'] );
- }
-
- if ( $args['sentence'] ) {
- $query = relevanssi_remove_quotes( $query );
- $query = '"' . $query . '"';
- }
-
- if ( is_array( $args['meta_query'] ) ) {
- $processed_meta = relevanssi_process_meta_query( $args['meta_query'] );
- $query_restrictions .= $processed_meta['where'];
- $query_join .= $processed_meta['join'];
- }
-
- if ( $args['date_query'] instanceof WP_Date_Query ) {
- $query_restrictions .= relevanssi_process_date_query( $args['date_query'] );
- }
-
- if ( $args['by_date'] ) {
- $query_restrictions .= relevanssi_process_by_date( $args['by_date'] );
- }
-
- $phrases = relevanssi_recognize_phrases( $query, $args['operator'] );
- if ( $phrases ) {
- $phrase_query_restrictions = $phrases;
- }
-
- $query_restrictions .= relevanssi_process_post_type(
- $args['post_type'],
- $args['admin_search'],
- $args['include_attachments']
- );
-
- if ( $args['post_status'] ) {
- $query_restrictions .= relevanssi_process_post_status( $args['post_status'] );
- }
-
- return array(
- 'query_restrictions' => $query_restrictions,
- 'query_join' => $query_join,
- 'query_query' => $query,
- 'query_no_synonyms' => $query_no_synonyms,
- 'phrase_queries' => $phrase_query_restrictions,
- );
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/search.php b/wp/wp-content/plugins/relevanssi-premium/premium/search.php
deleted file mode 100644
index 08c33fb8..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/search.php
+++ /dev/null
@@ -1,242 +0,0 @@
- $recency_bonus,
- 'cutoff' => $recency_cutoff_date,
- );
-}
-
-/**
- * Introduces the query variables for Relevanssi Premium.
- *
- * @param array $qv The WordPress query variable array.
- */
-function relevanssi_premium_query_vars( $qv ) {
- $qv[] = 'searchblogs';
- $qv[] = 'customfield_key';
- $qv[] = 'customfield_value';
- $qv[] = 'operator';
- $qv[] = 'include_attachments';
- $qv[] = 'coordinates';
- return $qv;
-}
-
-/**
- * Sets the operator parameter.
- *
- * The operator parameter is taken from $query->query_vars['operator'],
- * or from the implicit operator setting.
- *
- * @param object $query The query object.
- */
-function relevanssi_set_operator( $query ) {
- if ( isset( $query->query_vars['operator'] ) ) {
- $operator = $query->query_vars['operator'];
- } else {
- $operator = get_option( 'relevanssi_implicit_operator' );
- }
- return $operator;
-}
-
-/**
- * Processes the negative and positive terms (ie. local AND and NOT operators).
- *
- * If negative terms are present, will remove them from the $terms array. If negative
- * or positive terms are present, will return the query restrictions MySQL for them.
- *
- * @param array $terms An array of search terms.
- * @param array $original_terms An array of unstemmed search terms.
- * @param string $query The search query as a string.
- *
- * @return array An array containing the updated terms and the query restrictions.
- */
-function relevanssi_process_terms( $terms, $original_terms, $query ) {
- $negative_terms = relevanssi_recognize_negatives( $query );
- $positive_terms = relevanssi_recognize_positives( $query );
-
- if ( $negative_terms ) {
- $terms = array_diff( $terms, $negative_terms );
- $original_terms = array_diff( $original_terms, $negative_terms );
- }
-
- // Clean: escaped in the function.
- $query_restrictions = relevanssi_negatives_positives( $negative_terms, $positive_terms );
-
- return array(
- 'terms' => $terms,
- 'original_terms' => $original_terms,
- 'query_restrictions' => $query_restrictions,
- );
-}
-
-/**
- * Replaces the wildcards (?, *) with strings to let them pass intact.
- *
- * The wildcards are only allowed inside words, so they must have a word
- * character on both sides of them.
- *
- * @param string $str The query or content string to modify.
- *
- * @return string The parameter string modified.
- */
-function relevanssi_wildcards_pre( $str ) {
- /**
- * If true, enables wildcard operators (*, ?).
- *
- * @param boolean If true, enable wildcard operator. Default false.
- */
- if ( apply_filters( 'relevanssi_wildcard_search', false ) ) {
- $str = preg_replace( '/(\w)\?(\w)/', '\1SINGLEWILDCARDSYMBOL\2', $str );
- $str = preg_replace( '/(\w)\*(\w)/', '\1MULTIWILDCARDSYMBOL\2', $str );
- }
- return $str;
-}
-
-/**
- * Replaces the wildcard strings with wildcards (?, *).
- *
- * @param string $str The query or content string to modify.
- *
- * @return string The parameter string modified.
- */
-function relevanssi_wildcards_post( $str ) {
- /**
- * Documented in /premium/search.php.
- */
- if ( apply_filters( 'relevanssi_wildcard_search', false ) ) {
- $str = preg_replace( '/SINGLEWILDCARDSYMBOL/', '?', $str );
- $str = preg_replace( '/MULTIWILDCARDSYMBOL/', '*', $str );
- }
- return $str;
-}
-
-/**
- * Replaces the wildcards (?, *) with their MySQL equivalents (_, %).
- *
- * The ? is converted to _ (single character), while * is converted to %
- * (zero or more). Hooks to the relevanssi_term_where filter hook to only
- * apply this to the term WHERE condition part of the query.
- *
- * @see relevanssi_term_where
- *
- * @param string $query MySQL query to modify.
- *
- * @return string The modified MySQL query.
- */
-function relevanssi_query_wildcards( $query ) {
- /**
- * Documented in /premium/search.php.
- */
- if ( apply_filters( 'relevanssi_wildcard_search', false ) ) {
- $query = str_replace( array( '?', '*' ), array( '_', '%' ), $query );
- }
- return $query;
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/spamblock.php b/wp/wp-content/plugins/relevanssi-premium/premium/spamblock.php
deleted file mode 100644
index 77958f73..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/spamblock.php
+++ /dev/null
@@ -1,139 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-wp relevanssi regenerate_related' ); ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ' . esc_html( $relevanssi_variables['plugin_dir'] ) . 'premium/templates/relevanssi-related.php', '' . esc_html( get_stylesheet_directory() ) . '/templates/' );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ?s=',
- '/search/',
- 'relevanssi_search_url_prefix',
- 'highlight'
- );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-add_action( 'do_robots', 'rlv_block_bots_robots_txt' );
-function rlv_block_bots_robots_txt() {
- ?>
-User-agent: *
-Disallow: /search/
-Disallow: /?s=
- <?php
-}
-
-
-
-
-
-
-
- get_remote_license();
-
- ?>
-
-
-
-
-
- ',
- '',
- '' . esc_html( $support_email ) . ' '
- );
- ?>
-
-
-
- ', '' );
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0 ) {
- $width = $style['width'];
- }
-
- ?>
-
- posts ).
diff --git a/wp/wp-content/plugins/relevanssi-premium/premium/uninstall.php b/wp/wp-content/plugins/relevanssi-premium/premium/uninstall.php
deleted file mode 100644
index b6da6731..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/premium/uninstall.php
+++ /dev/null
@@ -1,157 +0,0 @@
-query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_hide_post'" );
- $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_hide_content'" );
- $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_pin_for_all'" );
- $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_pin'" );
- $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_unpin'" );
- $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_pdf_content'" );
- $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_pdf_error'" );
- $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_pdf_modified'" );
- $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_related_keywords'" );
- $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_related_posts'" );
- $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_related_include_ids'" );
- $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_related_exclude_ids'" );
- $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_related_no_append'" );
- $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_related_not_related'" );
- $wpdb->query( "DELETE FROM $wpdb->postmeta WHERE meta_key = '_relevanssi_noindex_reason'" );
-
- // Unused options, removed in case they are still left.
- delete_option( 'relevanssi_cache_seconds' );
- delete_option( 'relevanssi_custom_types' );
- delete_option( 'relevanssi_enable_cache' );
- delete_option( 'relevanssi_hidesponsor' );
- delete_option( 'relevanssi_index_attachments' );
- delete_option( 'relevanssi_index_drafts' );
- delete_option( 'relevanssi_index_limit' );
- delete_option( 'relevanssi_index_type' );
- delete_option( 'relevanssi_show_matches_txt' );
- delete_option( 'relevanssi_tag_boost' );
- delete_option( 'relevanssi_include_cats' );
- delete_option( 'relevanssi_include_tags' );
- delete_option( 'relevanssi_custom_taxonomies' );
- delete_option( 'relevanssi_taxonomies_to_index' );
- delete_option( 'relevanssi_highlight_docs_external' );
- delete_option( 'relevanssi_word_boundaries' );
-
- if ( ! defined( 'UNINSTALLING_RELEVANSSI_PREMIUM' ) ) {
- // The if clause is required to avoid nagging from testing.
- define( 'UNINSTALLING_RELEVANSSI_PREMIUM', true );
- }
-
- wp_clear_scheduled_hook( 'relevanssi_update_counts' );
-
- relevanssi_drop_database_tables();
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/readme.txt b/wp/wp-content/plugins/relevanssi-premium/readme.txt
deleted file mode 100644
index d51fc31f..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/readme.txt
+++ /dev/null
@@ -1,368 +0,0 @@
-=== Relevanssi Premium - A Better Search ===
-Contributors: msaari
-Donate link: https://www.relevanssi.com/
-Tags: search, relevance, better search
-Requires at least: 4.9
-Requires PHP: 7.0
-Tested up to: 6.1
-Stable tag: 2.20.4
-
-Relevanssi Premium replaces the default search with a partial-match search that sorts results by relevance. It also indexes comments and shortcode content.
-
-== Description ==
-
-Relevanssi replaces the standard WordPress search with a better search engine, with lots of features and configurable options. You'll get better results, better presentation of results - your users will thank you.
-
-= Key features =
-* Search results sorted in the order of relevance, not by date.
-* Fuzzy matching: match partial words, if complete words don't match.
-* Find documents matching either just one search term (OR query) or require all words to appear (AND query).
-* Search for phrases with quotes, for example "search phrase".
-* Create custom excerpts that show where the hit was made, with the search terms highlighted.
-* Highlight search terms in the documents when user clicks through search results.
-* Search comments, tags, categories and custom fields.
-
-= Advanced features =
-* Adjust the weighting for titles, tags and comments.
-* Log queries, show most popular queries and recent queries with no hits.
-* Restrict searches to categories and tags using a hidden variable or plugin settings.
-* Index custom post types and custom taxonomies.
-* Index the contents of shortcodes.
-* Google-style "Did you mean?" suggestions based on successful user searches.
-* Automatic support for [WPML multi-language plugin](http://wpml.org/).
-* Automatic support for various membership plugins.
-* Advanced filtering to help hacking the search results the way you want.
-* Search result throttling to improve performance on large databases.
-* Disable indexing of post content and post titles with a simple filter hook.
-* Multisite support.
-
-= Premium features (only in Relevanssi Premium) =
-* PDF content indexing.
-* Search result throttling to improve performance on large databases.
-* Improved spelling correction in "Did you mean?" suggestions.
-* Searching over multiple subsites in one multisite installation.
-* Indexing and searching user profiles.
-* Weights for post types, including custom post types.
-* Limit searches with custom fields.
-* Index internal links for the target document (sort of what Google does).
-* Search using multiple taxonomies at the same time.
-
-Relevanssi is available in two versions, regular and Premium. Regular Relevanssi is and will remain free to download and use. Relevanssi Premium comes with a cost, but will get all the new features. Standard Relevanssi will be updated to fix bugs, but new features will mostly appear in Premium. Also, support for standard Relevanssi depends very much on my mood and available time. Premium pricing includes support.
-
-= Other search plugins =
-Relevanssi owes a lot to [wpSearch](https://wordpress.org/extend/plugins/wpsearch/) by Kenny Katzgrau. Relevanssi was built to replace wpSearch, when it started to fail.
-
-
-== Installation ==
-
-1. Extract all files from the ZIP file, and then upload the plugin's folder to /wp-content/plugins/.
-1. If your blog is in English, skip to the next step. If your blog is in other language, rename the file *stopwords* in the plugin directory as something else or remove it. If there is *stopwords.yourlanguage*, rename it to *stopwords*.
-1. Activate the plugin through the 'Plugins' menu in WordPress.
-1. Go to the plugin settings and build the index following the instructions there.
-
-To update your installation, simply overwrite the old files with the new, activate the new version and if the new version has changes in the indexing, rebuild the index.
-
-= Note on updates =
-If it seems the plugin doesn't work after an update, the first thing to try is deactivating and reactivating the plugin. If there are changes in the database structure, those changes do not happen without a deactivation, for some reason.
-
-= Changes to templates =
-None necessary! Relevanssi uses the standard search form and doesn't usually need any changes in the search results template.
-
-If the search does not bring any results, your theme probably has a query_posts() call in the search results template. That throws Relevanssi off. For more information, see [The most important Relevanssi debugging trick](http://www.relevanssi.com/knowledge-base/query_posts/).
-
-= How to index =
-Check the options to make sure they're to your liking, then click "Save indexing options and build the index". If everything's fine, you'll see the Relevanssi options screen again with a message "Indexing successful!"
-
-If something fails, usually the result is a blank screen. The most common problem is a timeout: server ran out of time while indexing. The solution to that is simple: just return to Relevanssi screen (do not just try to reload the blank page) and click "Continue indexing". Indexing will continue. Most databases will get indexed in just few clicks of "Continue indexing". You can follow the process in the "State of the Index": if the amount of documents is growing, the indexing is moving along.
-
-If the indexing gets stuck, something's wrong. I've had trouble with some plugins, for example Flowplayer video player stopped indexing. I had to disable the plugin, index and then activate the plugin again. Try disabling plugins, especially those that use shortcodes, to see if that helps. Relevanssi shows the highest post ID in the index - start troubleshooting from the post or page with the next highest ID. Server error logs may be useful, too.
-
-= Using custom search results =
-If you want to use the custom search results, make sure your search results template uses `the_excerpt()` to display the entries, because the plugin creates the custom snippet by replacing the post excerpt.
-
-If you're using a plugin that affects excerpts (like Advanced Excerpt), you may run into some problems. For those cases, I've included the function `relevanssi_the_excerpt()`, which you can use instead of `the_excerpt()`. It prints out the excerpt, but doesn't apply `wp_trim_excerpt()` filters (it does apply `the_content()`, `the_excerpt()`, and `get_the_excerpt()` filters).
-
-To avoid trouble, use the function like this:
-
-``
-
-See Frequently Asked Questions for more instructions on what you can do with Relevanssi.
-
-= The advanced hacker option =
-If you're doing something unusual with your search and Relevanssi doesn't work, try using `relevanssi_do_query()`. See [Knowledge Base](http://www.relevanssi.com/knowledge-base/relevanssi_do_query/).
-
-= Uninstalling =
-To uninstall the plugin remove the plugin using the normal WordPress plugin management tools (from the Plugins page, first Deactivate, then Delete). If you remove the plugin files manually, the database tables and options will remain.
-
-= Combining with other plugins =
-Relevanssi doesn't work with plugins that rely on standard WP search. Those plugins want to access the MySQL queries, for example. That won't do with Relevanssi. [Search Light](http://wordpress.org/extend/plugins/search-light/), for example, won't work with Relevanssi.
-
-Some plugins cause problems when indexing documents. These are generally plugins that use shortcodes to do something somewhat complicated. One such plugin is [MapPress Easy Google Maps](http://wordpress.org/extend/plugins/mappress-google-maps-for-wordpress/). When indexing, you'll get a white screen. To fix the problem, disable either the offending plugin or shortcode expansion in Relevanssi while indexing. After indexing, you can activate the plugin again.
-
-== Frequently Asked Questions ==
-
-= Where is the Relevanssi search box widget? =
-There is no Relevanssi search box widget.
-
-Just use the standard search box.
-
-= Where are the user search logs? =
-See the top of the admin menu. There's 'User searches'. There. If the logs are empty, please note showing the results needs at least MySQL 5.
-
-= Displaying the number of search results found =
-
-The typical solution to showing the number of search results found does not work with Relevanssi. However, there's a solution that's much easier: the number of search results is stored in a variable within $wp_query. Just add the following code to your search results template:
-
-`found_posts . ' hits'; ?>`
-
-= Advanced search result filtering =
-
-If you want to add extra filters to the search results, you can add them using a hook. Relevanssi searches for results in the _relevanssi table, where terms and post_ids are listed. The various filtering methods work by listing either allowed or forbidden post ids in the query WHERE clause. Using the `relevanssi_where` hook you can add your own restrictions to the WHERE clause.
-
-These restrictions must be in the general format of ` AND doc IN (' . {a list of post ids, which could be a subquery} . ')`
-
-For more details, see where the filter is applied in the `relevanssi_search()` function. This is stricly an advanced hacker option for those people who're used to using filters and MySQL WHERE clauses and it is possible to break the search results completely by doing something wrong here.
-
-There's another filter hook, `relevanssi_hits_filter`, which lets you modify the hits directly. The filter passes an array, where index 0 gives the list of hits in the form of an array of post objects and index 1 has the search query as a string. The filter expects you to return an array containing the array of post objects in index 0 (`return array($your_processed_hit_array)`).
-
-= Direct access to query engine =
-Relevanssi can't be used in any situation, because it checks the presence of search with the `is_search()` function. This causes some unfortunate limitations and reduces the general usability of the plugin.
-
-You can now access the query engine directly. There's a new function `relevanssi_do_query()`, which can be used to do search queries just about anywhere. The function takes a WP_Query object as a parameter, so you need to store all the search parameters in the object (for example, put the search terms in `$your_query_object->query_vars['s']`). Then just pass the WP_Query object to Relevanssi with `relevanssi_do_query($your_wp_query_object);`.
-
-Relevanssi will process the query and insert the found posts as `$your_query_object->posts`. The query object is passed as reference and modified directly, so there's no return value. The posts array will contain all results that are found.
-
-= Sorting search results =
-If you want something else than relevancy ranking, you can use orderby and order parameters. Orderby accepts $post variable attributes and order can be "asc" or "desc". The most relevant attributes here are most likely "post_date" and "comment_count".
-
-If you want to give your users the ability to sort search results by date, you can just add a link to http://www.yourblogdomain.com/?s=search-term&orderby=post_date&order=desc to your search result page.
-
-Order by relevance is either orderby=relevance or no orderby parameter at all.
-
-= Filtering results by date =
-You can specify date limits on searches with `by_date` search parameter. You can use it your search result page like this: http://www.yourblogdomain.com/?s=search-term&by_date=1d to offer your visitor the ability to restrict their search to certain time limit (see [RAPLIQ](http://www.rapliq.org/) for a working example).
-
-The date range is always back from the current date and time. Possible units are hour (h), day (d), week (w), month (m) and year (y). So, to see only posts from past week, you could use by_date=7d or by_date=1w.
-
-Using wrong letters for units or impossible date ranges will lead to either defaulting to date or no results at all, depending on case.
-
-Thanks to Charles St-Pierre for the idea.
-
-= Displaying the relevance score =
-Relevanssi stores the relevance score it uses to sort results in the $post variable. Just add something like
-
-`echo $post->relevance_score`
-
-to your search results template inside a PHP code block to display the relevance score.
-
-= Did you mean? suggestions =
-To use Google-style "did you mean?" suggestions, first enable search query logging. The suggestions are based on logged queries, so without good base of logged queries, the suggestions will be odd and not very useful.
-
-To use the suggestions, add the following line to your search result template, preferably before the have_posts() check:
-
-`Did you mean: ", "?", 5); }?>`
-
-The first parameter passes the search term, the second is the text before the result, the third is the text after the result and the number is the amount of search results necessary to not show suggestions. With the default value of 5, suggestions are not shown if the search returns more than 5 hits.
-
-= Search shortcode =
-Relevanssi also adds a shortcode to help making links to search results. That way users can easily find more information about a given subject from your blog. The syntax is simple:
-
-`[search]John Doe[/search]`
-
-This will make the text John Doe a link to search results for John Doe. In case you want to link to some other search term than the anchor text (necessary in languages like Finnish), you can use:
-
-`[search term="John Doe"]Mr. John Doe[/search]`
-
-Now the search will be for John Doe, but the anchor says Mr. John Doe.
-
-One more parameter: setting `[search phrase="on"]` will wrap the search term in quotation marks, making it a phrase. This can be useful in some cases.
-
-= Restricting searches to categories and tags =
-Relevanssi supports the hidden input field `cat` to restrict searches to certain categories (or tags, since those are pretty much the same). Just add a hidden input field named `cat` in your search form and list the desired category or tag IDs in the `value` field - positive numbers include those categories and tags, negative numbers exclude them.
-
-This input field can only take one category or tag id (a restriction caused by WordPress, not Relevanssi). If you need more, use `cats` and use a comma-separated list of category IDs.
-
-You can also set the restriction from general plugin settings (and then override it in individual search forms with the special field). This works with custom taxonomies as well, just replace `cat` with the name of your taxonomy.
-
-If you want to restrict the search to categories using a dropdown box on the search form, use a code like this:
-
-`
- Search
-
- 'All categories'));
-?>
-
-
- `
-
-This produces a search form with a dropdown box for categories. Do note that this code won't work when placed in a Text widget: either place it directly in the template or use a PHP widget plugin to get a widget that can execute PHP code.
-
-= Restricting searches with taxonomies =
-
-You can use taxonomies to restrict search results to posts and pages tagged with a certain taxonomy term. If you have a custom taxonomy of "People" and want to search entries tagged "John" in this taxonomy, just use `?s=keyword&people=John` in the URL. You should be able to use an input field in the search form to do this, as well - just name the input field with the name of the taxonomy you want to use.
-
-It's also possible to do a dropdown for custom taxonomies, using the same function. Just adjust the arguments like this:
-
-`wp_dropdown_categories(array('show_option_all' => 'All people', 'name' => 'people', 'taxonomy' => 'people'));`
-
-This would do a dropdown box for the "People" taxonomy. The 'name' must be the keyword used in the URL, while 'taxonomy' has the name of the taxonomy.
-
-= Automatic indexing =
-Relevanssi indexes changes in documents as soon as they happen. However, changes in shortcoded content won't be registered automatically. If you use lots of shortcodes and dynamic content, you may want to add extra indexing. Here's how to do it:
-
-`if (!wp_next_scheduled('relevanssi_build_index')) {
- wp_schedule_event( time(), 'daily', 'relevanssi_build_index' );
-}`
-
-Add the code above in your theme functions.php file so it gets executed. This will cause WordPress to build the index once a day. This is an untested and unsupported feature that may cause trouble and corrupt index if your database is large, so use at your own risk. This was presented at [forum](http://wordpress.org/support/topic/plugin-relevanssi-a-better-search-relevanssi-chron-indexing?replies=2).
-
-= Highlighting terms =
-Relevanssi search term highlighting can be used outside search results. You can access the search term highlighting function directly. This can be used for example to highlight search terms in structured search result data that comes from custom fields and isn't normally highlighted by Relevanssi.
-
-Just pass the content you want highlighted through `relevanssi_highlight_terms()` function. The content to highlight is the first parameter, the search query the second. The content with highlights is then returned by the function. Use it like this:
-
-`if (function_exists('relevanssi_highlight_terms')) {
- echo relevanssi_highlight_terms($content, get_search_query());
-}
-else { echo $content; }`
-
-= Multisite searching =
-To search multiple blogs in the same WordPress network, use the `searchblogs` argument. You can add a hidden input field, for example. List the desired blog ids as the value. For example, searchblogs=1,2,3 would search blogs 1, 2, and 3.
-
-The features are very limited in the multiblog search, none of the advanced filtering works, and there'll probably be fairly serious performance issues if searching common words from multiple blogs.
-
-= What is tf * idf weighing? =
-
-It's the basic weighing scheme used in information retrieval. Tf stands for *term frequency* while idf is *inverted document frequency*. Term frequency is simply the number of times the term appears in a document, while document frequency is the number of documents in the database where the term appears.
-
-Thus, the weight of the word for a document increases the more often it appears in the document and the less often it appears in other documents.
-
-= What are stop words? =
-
-Each document database is full of useless words. All the little words that appear in just about every document are completely useless for information retrieval purposes. Basically, their inverted document frequency is really low, so they never have much power in matching. Also, removing those words helps to make the index smaller and searching faster.
-
-== Known issues and To-do's ==
-* Known issue: In general, multiple Loops on the search page may cause surprising results. Please make sure the actual search results are the first loop.
-* Known issue: Relevanssi doesn't necessarily play nice with plugins that modify the excerpt. If you're having problems, try using relevanssi_the_excerpt() instead of the_excerpt().
-* Known issue: When a tag is removed, Relevanssi index isn't updated until the post is indexed again.
-
-== Thanks ==
-* Cristian Damm for tag indexing, comment indexing, post/page exclusion and general helpfulness.
-* Marcus Dalgren for UTF-8 fixing.
-* Warren Tape.
-* Mohib Ebrahim for relentless bug hunting.
-* John Blackbourn for amazing internal link feature and other fixes.
-* John Calahan for extensive 2.0 beta testing.
-
-== Changelog ==
-= 2.20.4 =
-* New feature: New filter hook `relevanssi_blocked_field_types` can be used to control which ACF field types are excluded from the index. By default, this includes 'repeater', 'flexible_content', and 'group'.
-* New feature: New filter hook `relevanssi_acf_field_object` can be used to filter the ACF field object before Relevanssi indexes it. Return false to have Relevanssi ignore the field type.
-* Minor fix: ACF field exclusion is now recursive. If a parent field is excluded, all sub fields will also be excluded.
-* Minor fix: The indexing settings tab now checks if the wp_relevanssi database table exists and will create the table if it doesn't.
-* Minor fix: Pinning code has been foolproofed to cover some situations that would lead to errors.
-* Minor fix: Handling of data attributes in in-document highlighting had a bug that caused problems with third-party plugins.
-
-= 2.20.3 =
-* New feature: Relevanssi now has a debug mode that will help troubleshooting and support.
-* Minor fix: Using the_permalink() caused problems with search result links. That is now fixed. Relevanssi no longer hooks onto `the_permalink` hook and instead uses `post_link` and other similar hooks.
-* Minor fix: Click tracking parameters have more control to avoid problems from malformed click tracking data.
-
-= 2.20.2 =
-* Fixes the persistent update nag.
-
-= 2.20.1 =
-* New feature: New filter hook `relevanssi_add_highlight_and_tracking` can be used to force Relevanssi to add the `highlight` and tracking parameters to permalinks.
-* Changed behaviour: Exclusions now override pinning. If a post is pinned for 'foo' and excluded for 'foo bar', it will now be excluded when someone searches for 'foo bar'. Previously pinning overrode the exclusion.
-* Changed behaviour: The 'relevanssi_wpml_filter' filter function now runs on priority 9 instead of 10 to avoid problems with custom filters on relevanssi_hits_filter.
-* Minor fix: Page links didn't get the click tracking tags. This is fixed now.
-* Minor fix: Including posts in the Related posts could cause duplicates. Now Relevanssi excludes the included posts from the search so that there won't be duplicates.
-* Minor fix: Handle cases of missing posts better; relevanssi_get_post() now returns a WP_Error if no post is found.
-* Minor fix: Avoid a slow query on the searching tab when the throttle is not enabled.
-* Minor fix: Search queries that contain apostrophes and quotes can now be deleted from the log.
-
-= 2.20.0 =
-* New feature: Relevanssi now shows the MySQL `max_allowed_packet` size on the debug tab.
-* New feature: Relevanssi now shows the indexing query on the debug tab.
-* New feature: You can now edit pinning and exclusions from Quick Edit.
-* New feature: You can now remove queries from the search log from the query insights page.
-* New feature: ACF field settings now include a 'Exclude from Relevanssi index' setting. You can use that to exclude ACF fields from the Relevanssi index.
-* Changed behaviour: Click tracking is disabled in multisite searches. It causes problems with wrong links and isn't very reliable in the best case.
-* Changed behaviour: Plugin translation updates are disabled, unless explicitly enabled either from the Overview settings or with the `relevanssi_update_translations` filter hook.
-* Minor fix: Relevanssi was adding extra quotes around search terms in the `highlight` parameter.
-* Minor fix: Metabox fields look nicer on Firefox.
-* Minor fix: Adds the `relevanssi_related_posts_cache_id` filter to the relevanssi_related_posts() function.
-* Minor fix: Yet another update to data attributes in highlighting. Thanks to Faeddur.
-* Minor fix: Taxonomy query handling was improved. This should help in particular Polylang users who've had problems with Relevanssi ignoring Polylang language restrictions.
-* Minor fix: Negative search terms in AND searches caused problems, but now work better.
-* Minor fix: Pinning phrases that had the same word more than once (e.g. 'word by word') didn't work. Now it works better.
-
-= 2.19.1 =
-* Minor fix: WooCommerce layered navigation compatibility caused enough problems that I've disabled it by default. You can enable it with `add_filter( 'woocommerce_get_filtered_term_product_counts_query', 'relevanssi_filtered_term_product_counts_query' );`.
-* Minor fix: Data attribute handling for in-document highlighting is now better.
-
-= 2.19.0 =
-* New feature: New CLI command `list_pinned_posts` lists all pinned and unpinned posts.
-* New feature: New CLI command `list` lists indexed and unindexed posts, taxonomy terms and users.
-* New feature: You can now look at how the posts appear in the database from the Debugging tab.
-* New feature: Relevanssi now works with WooCommerce layered navigation filters. The filter post counts should now match the Relevanssi search results.
-* New feature: You can now export the click tracking logs.
-* New feature: New function `relevanssi_count_term_occurrances()` can be used to display how many times search terms appear in the database.
-* Changed behaviour: Relevanssi post update trigger is now on `wp_after_insert_post` instead of `wp_insert_post`. This makes the indexing more reliable and better compatible with other plugins.
-* Changed behaviour: Previously, throttling searches has been impossible when results are sorted by date. Now if you set Relevanssi to sort by post date from the searching settings, you can enable the throttle and the throttling will make sure to keep the most recent posts. This does not work if you set the `orderby` to `post_date` elsewhere.
-* Minor fix: Prevents Relevanssi from interfering in fringe cases (including The Event Calendar event search).
-* Minor fix: Relevanssi added the `highlight` parameter to home page URLs, even though it shouldn't.
-* Minor fix: Indexing `nav_menu_item` posts is stopped earlier in the process to avoid problems with big menus.
-* Minor fix: Add support for WooCommerce products attribute lookup table filtering.
-* Minor fix: Improves Polylang language detection.
-* Minor fix: Improve excerpts to avoid breaking HTML tags when tags are allowed.
-* Minor fix: Add support for JetSmartFilters.
-* Minor fix: With multiple excerpts, sometimes Relevanssi would return no excerpt at all.
-* Minor fix: If the `sentence` query variable is used to enable phrase searching, Relevanssi now adds quotes to the `highlight` parameter.
-* Minor fix: Add support for TablePress `table_filter` shortcodes.
-* Minor fix: Improve WPFD file content indexing support. Relevanssi indexing now happens after the WPFD indexing is done.
-* Minor fix: User profile update actions now happen at a later priority. This should reduce problems when indexing ACF fields, for example.
-* Minor fix: Relevanssi now hyphenates long search terms in the User searches page. This prevents long search terms from messing up the display.
-* Minor fix: Stopped some problems with Did you mean suggestions suggesting the same word if a hyphen was included.
-* Minor fix: If the API key wasn't set in network settings for a multisite installation, Relevanssi wouldn't fall back to the current site API key setting when indexing attachment content. That works correctly now; still, set the API key on network settings level.
-* Minor fix: Paging didn't work in admin searches for hierarchical post types (like pages).
-* Minor fix: Relevanssi doesn't add click tracking or highlight parameters to admin searches anymore.
-* Minor fix: The search log reset feature now also resets the click tracking log.
-* Minor fix: In-document highlighting could break certain elements thanks to Relevanssi messing up data attributes.
-* Minor fix: Relevanssi now recursively runs `relevanssi_block_to_render` and the CSS `relevanssi_noindex` filtering for inner blocks.
-* Minor fix: Relevanssi redirects now work better with FacetWP searches. Thanks to Jan Willem Oostendorp.
-
-= 2.18.0 =
-* New feature: Oxygen compatibility has been upgraded to support JSON data from Oxygen 4. This is still in early stages, so feedback from Oxygen users is welcome.
-* New feature: New filter hook `relevanssi_oxygen_element` is used to filter Oxygen JSON elements. The earlier `relevanssi_oxygen_section_filters` and `relevanssi_oxygen_section_content` filters are no longer used with Oxygen 4; this hook is the only way to filter Oxygen elements.
-* Changed behaviour: Relevanssi now applies `remove_accents()` to all strings. This is because default database collations do not care for accents and having accents may cause missing information in indexing. If you use a database collation that doesn't ignore accents, make sure you disable this filter.
-* Minor fix: Stops drafts and pending posts from showing up in Relevanssi Live Ajax Searches.
-* Minor fix: Remove array_flip() warnings from related posts.
-* Minor fix: Relevanssi used `the_category` filter with too few parameters. The missing parameters have been added.
-* Minor fix: Language translations didn't update.
-* Minor fix: Phrases weren't used in some cases where a multiple-word phrase looked like a single-word phrase.
-* Minor fix: Prevents fatal errors from `relevanssi_extract_rt()`.
-* Minor fix: Prevents fatal errors from `relevanssi_strip_all_tags()`.
-
-== Upgrade notice ==
-= 2.20.4 =
-* Better ACF field controls, bug fixes.
-
-= 2.20.3 =
-* Fixes a bug with broken permalinks.
-
-= 2.20.2 =
-* Fixes the persistent update nag.
-
-= 2.20.1 =
-* Bug fixes and small improvements.
-
-= 2.20.0 =
-* New features, performance improvements, bug fixes.
-
-= 2.19.1 =
-* Disables the WooCommerce layered navigation support by default.
-
-= 2.19.0 =
-* Large number of bug fixes and general improvements.
\ No newline at end of file
diff --git a/wp/wp-content/plugins/relevanssi-premium/relevanssi.php b/wp/wp-content/plugins/relevanssi-premium/relevanssi.php
deleted file mode 100644
index db99c362..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/relevanssi.php
+++ /dev/null
@@ -1,148 +0,0 @@
-.
-*/
-
-add_action( 'init', 'relevanssi_premium_init' );
-add_action( 'init', 'relevanssi_activate_auto_update' );
-add_action( 'profile_update', 'relevanssi_profile_update', 9999 );
-add_action( 'edit_user_profile_update', 'relevanssi_profile_update', 9999 );
-add_action( 'user_register', 'relevanssi_profile_update', 9999 );
-add_action( 'delete_user', 'relevanssi_delete_user' );
-add_action( 'created_term', 'relevanssi_add_term', 9999, 3 );
-add_action( 'edited_term', 'relevanssi_edit_term', 9999, 3 );
-add_action( 'delete_term', 'relevanssi_delete_taxonomy_term', 9999, 3 );
-add_action( 'save_post', 'relevanssi_save_postdata', 10 );
-add_action( 'edit_attachment', 'relevanssi_save_postdata' );
-add_action( 'edit_attachment', 'relevanssi_save_pdf_postdata' );
-add_action( 'plugins_loaded', 'relevanssi_spamblock' );
-add_filter( 'wpmu_drop_tables', 'relevanssi_wpmu_drop' );
-add_action( 'network_admin_menu', 'relevanssi_network_menu' );
-add_filter( 'attachment_link', 'relevanssi_post_link_replace', 10, 2 );
-add_action( 'admin_enqueue_scripts', 'relevanssi_premium_add_admin_scripts', 11 );
-add_filter( 'relevanssi_premium_tokenizer', 'relevanssi_enable_stemmer' );
-add_filter( 'query_vars', 'relevanssi_premium_query_vars' );
-add_filter( 'relevanssi_tabs', 'relevanssi_premium_add_tabs', 10 );
-add_filter( 'relevanssi_phrase_queries', 'relevanssi_premium_phrase_queries', 10, 3 );
-
-global $wp_version;
-if ( version_compare( $wp_version, '5.1', '>=' ) ) {
- add_action( 'wp_insert_site', 'relevanssi_new_blog', 10, 1 );
-} else {
- add_action( 'wpmu_new_blog', 'relevanssi_new_blog', 10, 1 );
-}
-
-global $wpdb;
-global $relevanssi_variables;
-
-$relevanssi_variables['relevanssi_table'] = $wpdb->prefix . 'relevanssi';
-$relevanssi_variables['stopword_table'] = $wpdb->prefix . 'relevanssi_stopwords';
-$relevanssi_variables['log_table'] = $wpdb->prefix . 'relevanssi_log';
-$relevanssi_variables['tracking_table'] = $wpdb->prefix . 'relevanssi_tracking';
-$relevanssi_variables['post_type_weight_defaults']['post_tag'] = 0.5;
-$relevanssi_variables['post_type_weight_defaults']['category'] = 0.5;
-$relevanssi_variables['content_boost_default'] = 5;
-$relevanssi_variables['title_boost_default'] = 5;
-$relevanssi_variables['link_boost_default'] = 0.75;
-$relevanssi_variables['comment_boost_default'] = 0.75;
-$relevanssi_variables['database_version'] = 21;
-$relevanssi_variables['plugin_version'] = '2.20.4';
-$relevanssi_variables['plugin_dir'] = plugin_dir_path( __FILE__ );
-$relevanssi_variables['plugin_basename'] = plugin_basename( __FILE__ );
-$relevanssi_variables['file'] = __FILE__;
-$relevanssi_variables['sidebar_capability'] = 'edit_others_posts';
-
-define( 'RELEVANSSI_PREMIUM', true );
-define( 'RELEVANSSI_EU_SERVICES_URL', 'https://eu.relevanssiservices.com/' );
-define( 'RELEVANSSI_US_SERVICES_URL', 'https://us.relevanssiservices.com/' );
-if ( ! defined( 'RELEVANSSI_DEVELOP' ) ) {
- define( 'RELEVANSSI_DEVELOP', false );
-}
-
-require_once 'lib/admin-ajax.php';
-require_once 'lib/common.php';
-require_once 'lib/debug.php';
-require_once 'lib/didyoumean.php';
-require_once 'lib/excerpts-highlights.php';
-require_once 'lib/indexing.php';
-require_once 'lib/init.php';
-require_once 'lib/install.php';
-require_once 'lib/interface.php';
-require_once 'lib/log.php';
-require_once 'lib/options.php';
-require_once 'lib/phrases.php';
-require_once 'lib/privacy.php';
-require_once 'lib/search.php';
-require_once 'lib/search-tax-query.php';
-require_once 'lib/search-query-restrictions.php';
-require_once 'lib/shortcodes.php';
-require_once 'lib/stopwords.php';
-require_once 'lib/sorting.php';
-require_once 'lib/user-searches.php';
-require_once 'lib/utils.php';
-
-require_once 'premium/admin-ajax.php';
-require_once 'premium/body-stopwords.php';
-require_once 'premium/class-relevanssi-language-packs.php';
-require_once 'premium/class-relevanssi-spellcorrector.php';
-require_once 'premium/class-relevanssi-wp-auto-update.php';
-require_once 'premium/click-tracking.php';
-require_once 'premium/common.php';
-require_once 'premium/excerpts-highlights.php';
-require_once 'premium/indexing.php';
-require_once 'premium/interface.php';
-require_once 'premium/network-options.php';
-require_once 'premium/pdf-upload.php';
-require_once 'premium/pinning.php';
-require_once 'premium/post-metabox.php';
-require_once 'premium/proximity.php';
-require_once 'premium/redirects.php';
-require_once 'premium/related.php';
-require_once 'premium/search.php';
-require_once 'premium/search-multi.php';
-require_once 'premium/spamblock.php';
-
-if ( version_compare( $wp_version, '5.0', '>=' ) ) {
- require_once 'premium/gutenberg-sidebar.php';
-}
-
-if ( defined( 'WP_CLI' ) && WP_CLI ) {
- require_once 'premium/class-relevanssi-wp-cli-command.php';
-}
diff --git a/wp/wp-content/plugins/relevanssi-premium/relevanssi.po b/wp/wp-content/plugins/relevanssi-premium/relevanssi.po
deleted file mode 100644
index 152686c0..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/relevanssi.po
+++ /dev/null
@@ -1,4435 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: Relevanssi Premium\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-11-09 15:41+0200\n"
-"PO-Revision-Date: \n"
-"Last-Translator: Mikko Saari \n"
-"Language-Team: \n"
-"Language: en\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-KeywordsList: _e;__;esc_attr__;esc_attr_e;esc_html__;_n;esc_html_e;"
-"esc_html_x;esc_attr_x;_x;__ngettext;__ngettext_noop;_n_noop;_nx;_nx_noop;_ex;"
-"_c;_nc\n"
-"X-Poedit-Basepath: .\n"
-"X-Generator: Poedit 3.2\n"
-"X-Poedit-SearchPath-0: .\n"
-"X-Poedit-SearchPath-1: premium\n"
-"X-Poedit-SearchPath-2: lib\n"
-"X-Poedit-SearchPathExcluded-0: src\n"
-"X-Poedit-SearchPathExcluded-1: release\n"
-"X-Poedit-SearchPathExcluded-2: build\n"
-"X-Poedit-SearchPathExcluded-3: node_modules\n"
-"X-Poedit-SearchPathExcluded-4: coverage\n"
-"X-Poedit-SearchPathExcluded-5: vendor\n"
-
-#: lib/admin-ajax.php:35 lib/admin-ajax.php:189
-msgid "You do not have sufficient permissions to access this page."
-msgstr ""
-
-#: lib/admin-ajax.php:114
-#, php-format
-msgid "Indexed %1$d post (total %2$d), processed %3$d / %4$d."
-msgstr ""
-
-#: lib/admin-ajax.php:251 lib/tabs/indexing-tab.php:130
-#: premium/tabs/attachments-tab.php:63
-msgid "Results"
-msgstr ""
-
-#: lib/admin-ajax.php:255
-#, php-format
-msgid "Found a total of %1$d posts, showing posts %2$d–%3$s."
-msgstr ""
-
-#: lib/admin-ajax.php:257
-msgid "Previous page"
-msgstr ""
-
-#: lib/admin-ajax.php:260
-msgid "Next page"
-msgstr ""
-
-#: lib/admin-ajax.php:264
-msgid "Score:"
-msgstr ""
-
-#: lib/admin-ajax.php:289
-msgid "Edit"
-msgstr ""
-
-#: lib/admin-ajax.php:337
-msgid "Query variables"
-msgstr ""
-
-#: lib/admin-ajax.php:406
-msgid "Filters"
-msgstr ""
-
-#: lib/admin-ajax.php:407
-msgid "show"
-msgstr ""
-
-#: lib/admin-ajax.php:408
-msgid "hide"
-msgstr ""
-
-#: lib/common.php:147
-msgid "Missing"
-msgstr ""
-
-#: lib/common.php:1120
-msgid "25 most common words in the index"
-msgstr ""
-
-#: lib/common.php:1121
-msgid ""
-"These words are excellent stopword material. A word that appears in most of "
-"the posts in the database is quite pointless when searching. This is also an "
-"easy way to create a completely new stopword list, if one isn't available in "
-"your language. Click the word to add the word to the stopword list. The word "
-"will also be removed from the index, so rebuilding the index is not "
-"necessary."
-msgstr ""
-
-#: lib/common.php:1127
-msgid "Stopword Candidates"
-msgstr ""
-
-#: lib/common.php:1132
-msgid "Add to stopwords"
-msgstr ""
-
-#: lib/common.php:1135
-msgid "Add to content stopwords"
-msgstr ""
-
-#: lib/common.php:1502
-#, php-format
-msgid "Nothing found for ID %d."
-msgstr ""
-
-#: lib/common.php:1509
-msgid "Possible reasons this post is not indexed"
-msgstr ""
-
-#: lib/common.php:1513
-msgid "The title"
-msgstr ""
-
-#: lib/common.php:1517
-msgid "The content"
-msgstr ""
-
-#: lib/common.php:1521 lib/tabs/indexing-tab.php:320
-msgid "Comments"
-msgstr ""
-
-#: lib/common.php:1525
-msgid "Tags"
-msgstr ""
-
-#: lib/common.php:1529
-msgid "Categories"
-msgstr ""
-
-#: lib/common.php:1533
-msgid "Other taxonomies"
-msgstr ""
-
-#: lib/common.php:1537
-msgid "Links"
-msgstr ""
-
-#: lib/common.php:1541
-msgid "Authors"
-msgstr ""
-
-#: lib/common.php:1545
-msgid "Excerpt"
-msgstr ""
-
-#: lib/common.php:1549 lib/tabs/indexing-tab.php:334
-msgid "Custom fields"
-msgstr ""
-
-#: lib/common.php:1553
-msgid "MySQL content"
-msgstr ""
-
-#: lib/compatibility/acf.php:128
-msgid "Exclude from Relevanssi index"
-msgstr ""
-
-#: lib/compatibility/acf.php:129
-msgid ""
-"If this setting is enabled, Relevanssi will not index the value of this "
-"field for posts."
-msgstr ""
-
-#: lib/compatibility/aioseo.php:88
-msgid "Use All-in-One SEO noindex"
-msgstr ""
-
-#: lib/compatibility/aioseo.php:93
-msgid "Use All-in-One SEO noindex."
-msgstr ""
-
-#: lib/compatibility/aioseo.php:95
-msgid ""
-"If checked, Relevanssi will not index posts marked as \"No index\" in All-in-"
-"One SEO settings."
-msgstr ""
-
-#: lib/compatibility/rankmath.php:80
-msgid "Use Rank Math SEO noindex"
-msgstr ""
-
-#: lib/compatibility/rankmath.php:85
-msgid "Use Rank Math SEO noindex."
-msgstr ""
-
-#: lib/compatibility/rankmath.php:87
-msgid ""
-"If checked, Relevanssi will not index posts marked as \"No index\" in Rank "
-"Math SEO settings."
-msgstr ""
-
-#: lib/compatibility/seoframework.php:76
-msgid "Use SEO Framework noindex"
-msgstr ""
-
-#: lib/compatibility/seoframework.php:81
-msgid "Use SEO Framework noindex."
-msgstr ""
-
-#: lib/compatibility/seoframework.php:83
-msgid ""
-"If checked, Relevanssi will not index posts marked as \"No index\" in SEO "
-"Framework settings."
-msgstr ""
-
-#: lib/compatibility/seopress.php:82
-msgid "Use SEOPress noindex"
-msgstr ""
-
-#: lib/compatibility/seopress.php:87
-msgid "Use SEOPress noindex."
-msgstr ""
-
-#: lib/compatibility/seopress.php:89
-msgid ""
-"If checked, Relevanssi will not index posts marked as \"No index\" in "
-"SEOPress settings."
-msgstr ""
-
-#: lib/compatibility/yoast-seo.php:82
-msgid "Use Yoast SEO noindex"
-msgstr ""
-
-#: lib/compatibility/yoast-seo.php:87
-msgid "Use Yoast SEO noindex."
-msgstr ""
-
-#: lib/compatibility/yoast-seo.php:89
-msgid ""
-"If checked, Relevanssi will not index posts marked as \"No index\" in Yoast "
-"SEO settings."
-msgstr ""
-
-#: lib/contextual-help.php:24
-#, php-format
-msgid ""
-"To adjust the post order, you can use the %1$s query parameter. With %1$s, "
-"you can use multiple layers of different sorting methods. See WordPress Codex for more details on using arrays for orderby."
-msgstr ""
-
-#: lib/contextual-help.php:26
-#, php-format
-msgid ""
-"To get inside-word highlights, uncheck the \"%s\" option. That has a side-"
-"effect of enabling the inside-word highlights."
-msgstr ""
-
-#: lib/contextual-help.php:26
-msgid "Uncheck this if you use non-ASCII characters"
-msgstr ""
-
-#: lib/contextual-help.php:28
-#, php-format
-msgid "In order to adjust the throttle limit, you can use the %s filter hook."
-msgstr ""
-
-#: lib/contextual-help.php:33 lib/interface.php:198
-#: lib/tabs/overview-tab.php:59
-msgid "Searching"
-msgstr ""
-
-#: lib/contextual-help.php:36
-msgid ""
-"Inside-word matching is disabled by default, because it increases garbage "
-"results that don't really match the search term. If you want to enable it, "
-"add the following function to your theme functions.php:"
-msgstr ""
-
-#: lib/contextual-help.php:44
-msgid ""
-"It's not usually necessary to adjust the limit from 500, but in some cases "
-"performance gains can be achieved by setting a lower limit. We don't suggest "
-"going under 200, as low values will make the results worse."
-msgstr ""
-
-#: lib/contextual-help.php:50
-#, php-format
-msgid "For all the possible options, see the Codex documentation for %s."
-msgstr ""
-
-#: lib/contextual-help.php:55
-msgid "Restrictions"
-msgstr ""
-
-#: lib/contextual-help.php:57
-msgid ""
-"If you want the general search to target all posts, but have a single search "
-"form target only certain posts, you can add a hidden input variable to the "
-"search form. "
-msgstr ""
-
-#: lib/contextual-help.php:58
-msgid ""
-"For example in order to restrict the search to categories 10, 14 and 17, you "
-"could add this to the search form:"
-msgstr ""
-
-#: lib/contextual-help.php:60
-msgid ""
-"To restrict the search to posts tagged with alfa AND beta, you could add "
-"this to the search form:"
-msgstr ""
-
-#: lib/contextual-help.php:67
-#, php-format
-msgid ""
-"For more exclusion options, see the Codex documentation for %s. For example, "
-"to exclude tag ID 10, use"
-msgstr ""
-
-#: lib/contextual-help.php:69
-#, php-format
-msgid ""
-"To exclude posts from the index and not just from the search, you can use "
-"the %s filter hook. This would not index posts that have a certain taxonomy "
-"term:"
-msgstr ""
-
-#: lib/contextual-help.php:71 lib/contextual-help.php:153
-#, php-format
-msgid ""
-"For more examples, see the related knowledge base posts ."
-msgstr ""
-
-#: lib/contextual-help.php:76
-msgid "Exclusions"
-msgstr ""
-
-#: lib/contextual-help.php:95
-#, php-format
-msgid ""
-"By default, the User searches page shows 20 most common keywords. In order "
-"to see more, you can adjust the value with the %s filter hook, like this:"
-msgstr ""
-
-#: lib/contextual-help.php:97
-#, php-format
-msgid ""
-"The complete logs are stored in the %s database table, where you can access "
-"them if you need more information than what the User searches page provides."
-msgstr ""
-
-#: lib/contextual-help.php:102
-msgid "Logs"
-msgstr ""
-
-#: lib/contextual-help.php:112
-#, php-format
-msgid ""
-"Custom snippets require that the search results template uses %s to print "
-"out the excerpts."
-msgstr ""
-
-#: lib/contextual-help.php:114
-#, php-format
-msgid ""
-"If you want more control over what content Relevanssi uses to create the "
-"excerpts, you can use the %1$s and %2$s filter hooks to adjust the content."
-msgstr ""
-
-#: lib/contextual-help.php:116
-#, php-format
-msgid ""
-"Some shortcode do not work well with Relevanssi excerpt-generation. "
-"Relevanssi disables some shortcodes automatically to prevent problems. This "
-"can be adjusted with the %s filter hook."
-msgstr ""
-
-#: lib/contextual-help.php:118
-#, php-format
-msgid ""
-"If you want Relevanssi to build excerpts faster and don't mind that they may "
-"be less than perfect in quality, add a filter that returns true on hook %s."
-msgstr ""
-
-#: lib/contextual-help.php:123 lib/tabs/indexing-tab.php:393
-msgid "Excerpts"
-msgstr ""
-
-#: lib/contextual-help.php:125
-msgid ""
-"Building custom excerpts can be slow. If you are not actually using the "
-"excerpts, make sure you disable the option."
-msgstr ""
-
-#: lib/contextual-help.php:127
-msgid ""
-"Generally, Relevanssi generates the excerpts from post content. If you want "
-"to include custom field content in the excerpt-building, this can be done "
-"with a simple setting from the excerpt settings."
-msgstr ""
-
-#: lib/contextual-help.php:137
-#, php-format
-msgid ""
-"In order to see title highlights from Relevanssi, replace %1$s in the search "
-"results template with %2$s. It does the same thing, but supports Relevanssi "
-"title highlights."
-msgstr ""
-
-#: lib/contextual-help.php:142
-msgid "Highlights"
-msgstr ""
-
-#: lib/contextual-help.php:144
-msgid ""
-"Title highlights don't appear automatically, because that led to problems "
-"with highlights appearing in wrong places and messing up navigation menus, "
-"for example."
-msgstr ""
-
-#: lib/contextual-help.php:151
-#, php-format
-msgid ""
-"For more fine-tuned changes, you can use %1$s filter hook to adjust what is "
-"replaced with what, and %2$s filter hook to completely override the default "
-"punctuation control."
-msgstr ""
-
-#: lib/contextual-help.php:158
-msgid "Punctuation"
-msgstr ""
-
-#: lib/contextual-help.php:160
-msgid ""
-"Relevanssi removes punctuation. Some punctuation is removed, some replaced "
-"with spaces. Advanced indexing settings include some of the more common "
-"settings people want to change."
-msgstr ""
-
-#: lib/contextual-help.php:168
-#, php-format
-msgid ""
-"If you have content that you don't want indexed, you can wrap that content "
-"in a %s shortcode."
-msgstr ""
-
-#: lib/contextual-help.php:170
-#, php-format
-msgid ""
-"If you need a search form on some page on your site, you can use the %s "
-"shortcode to print out a basic search form."
-msgstr ""
-
-#: lib/contextual-help.php:172
-#, php-format
-msgid ""
-"If you need to add query variables to the search form, the shortcode takes "
-"parameters, which are then printed out as hidden input fields. To get a "
-"search form with a post type restriction, you can use %1$s. To restrict the "
-"search to categories 10, 14 and 17, you can use %2$s and so on."
-msgstr ""
-
-#: lib/contextual-help.php:174
-#, php-format
-msgid ""
-"You can use the %1$s parameter to add a taxonomy dropdown to the search "
-"form. Just use the name of the taxonomy, like %2$s. This works best with "
-"hierarchical taxonomies like categories with relatively few options "
-"available."
-msgstr ""
-
-#: lib/contextual-help.php:179
-msgid "Helpful shortcodes"
-msgstr ""
-
-#: lib/contextual-help.php:190
-#, php-format
-msgid ""
-"For more details how to fix that issue, see WooCommerce tips in "
-"Relevanssi user manual ."
-msgstr ""
-
-#: lib/contextual-help.php:195
-msgid "WooCommerce"
-msgstr ""
-
-#: lib/contextual-help.php:197
-msgid ""
-"If your SKUs include hyphens or other punctuation, do note that Relevanssi "
-"replaces most punctuation with spaces. That's going to cause issues with SKU "
-"searches."
-msgstr ""
-
-#: lib/contextual-help.php:199
-msgid ""
-"If you don't want to index products that are out of stock, excluded from the "
-"catalog or excluded from the search, there's a product visibility filtering "
-"method that is described in the user manual (see link above)."
-msgstr ""
-
-#: lib/contextual-help.php:205
-#, php-format
-msgid ""
-"To adjust the amount of the exact match bonus, you can use the %s filter "
-"hook. It works like this:"
-msgstr ""
-
-#: lib/contextual-help.php:207
-#, php-format
-msgid "The default values are %1$s for titles and %2$s for content."
-msgstr ""
-
-#: lib/contextual-help.php:212
-msgid "Exact match bonus"
-msgstr ""
-
-#: lib/contextual-help.php:223 premium/contextual-help.php:97
-msgid "For more information:"
-msgstr ""
-
-#: lib/contextual-help.php:224 premium/contextual-help.php:101
-msgid "Plugin knowledge base"
-msgstr ""
-
-#: lib/contextual-help.php:225 premium/contextual-help.php:99
-msgid "WordPress.org forum"
-msgstr ""
-
-#: lib/indexing.php:31
-msgid "Relevanssi image attachment filter"
-msgstr ""
-
-#: lib/indexing.php:480 premium/common.php:575
-msgid "Relevanssi index exclude"
-msgstr ""
-
-#: lib/indexing.php:509
-msgid "Blocked by a filter function"
-msgstr ""
-
-#: lib/init.php:124
-msgid ""
-"You do not have an index! Remember to build the index (click the \"Build the "
-"index\" button), otherwise searching won't work."
-msgstr ""
-
-#: lib/init.php:136
-msgid ""
-"Multibyte string functions are not available. Relevanssi may not work well "
-"without them. Please install (or ask your host to install) the mbstring "
-"extension."
-msgstr ""
-
-#: lib/init.php:221 lib/init.php:222 lib/tabs/logging-tab.php:47
-#: lib/user-searches.php:18
-msgid "User searches"
-msgstr ""
-
-#: lib/init.php:233 lib/init.php:234 lib/tabs/searching-tab.php:254
-msgid "Admin search"
-msgstr ""
-
-#: lib/init.php:460
-msgid "Settings"
-msgstr ""
-
-#: lib/init.php:463
-msgid "Go Premium!"
-msgstr ""
-
-#: lib/interface.php:18
-msgid "Relevanssi Search Options"
-msgstr ""
-
-#: lib/interface.php:20
-msgid "Relevanssi Premium Search Options"
-msgstr ""
-
-#: lib/interface.php:108
-msgid "Admin Search"
-msgstr ""
-
-#: lib/interface.php:137
-msgid "Logs clear!"
-msgstr ""
-
-#: lib/interface.php:139
-msgid "Clearing the logs failed."
-msgstr ""
-
-#: lib/interface.php:177
-msgid "Overview"
-msgstr ""
-
-#: lib/interface.php:184 lib/tabs/overview-tab.php:47
-msgid "Indexing"
-msgstr ""
-
-#: lib/interface.php:191 premium/interface.php:1190
-msgid "Attachments"
-msgstr ""
-
-#: lib/interface.php:205
-msgid "Logging"
-msgstr ""
-
-#: lib/interface.php:212 lib/tabs/overview-tab.php:63
-msgid "Excerpts and highlights"
-msgstr ""
-
-#: lib/interface.php:219 lib/tabs/synonyms-tab.php:41
-#: lib/tabs/synonyms-tab.php:67 lib/tabs/synonyms-tab.php:98
-msgid "Synonyms"
-msgstr ""
-
-#: lib/interface.php:226 lib/tabs/stopwords-tab.php:22
-#: lib/tabs/stopwords-tab.php:144
-msgid "Stopwords"
-msgstr ""
-
-#: lib/interface.php:233 lib/tabs/redirects-tab.php:18
-#: premium/interface.php:1182 premium/tabs/redirects-tab.php:26
-msgid "Redirects"
-msgstr ""
-
-#: lib/interface.php:240 lib/tabs/debugging-tab.php:54
-msgid "Debugging"
-msgstr ""
-
-#: lib/interface.php:284 lib/tabs/indexing-tab.php:110
-#: premium/network-options.php:75
-msgid "Save the options"
-msgstr ""
-
-#: lib/interface.php:348
-msgid "Click OK to copy Relevanssi options to all subsites"
-msgstr ""
-
-#: lib/interface.php:349
-msgid "Are you sure you want to remove all stopwords?"
-msgstr ""
-
-#: lib/interface.php:350
-msgid "Are you sure you want to delete the query?"
-msgstr ""
-
-#: lib/interface.php:351
-msgid "Wiping out the index..."
-msgstr ""
-
-#: lib/interface.php:352
-msgid "Done."
-msgstr ""
-
-#: lib/interface.php:353
-msgid "Indexing users..."
-msgstr ""
-
-#: lib/interface.php:354
-msgid "Indexing the following taxonomies:"
-msgstr ""
-
-#: lib/interface.php:355
-msgid "Indexing attachments..."
-msgstr ""
-
-#: lib/interface.php:356
-msgid "Counting posts..."
-msgstr ""
-
-#: lib/interface.php:357
-msgid "Counting taxonomy terms..."
-msgstr ""
-
-#: lib/interface.php:358
-msgid "Counting users..."
-msgstr ""
-
-#: lib/interface.php:359
-msgid "Counting attachments..."
-msgstr ""
-
-#: lib/interface.php:360
-msgid "posts found."
-msgstr ""
-
-#: lib/interface.php:361
-msgid "taxonomy terms found."
-msgstr ""
-
-#: lib/interface.php:362
-msgid "users found."
-msgstr ""
-
-#: lib/interface.php:363
-msgid "attachments found."
-msgstr ""
-
-#: lib/interface.php:364
-msgid "Taxonomy term indexing is disabled."
-msgstr ""
-
-#: lib/interface.php:365
-msgid "User indexing is disabled."
-msgstr ""
-
-#: lib/interface.php:366
-msgid "Indexing complete."
-msgstr ""
-
-#: lib/interface.php:367
-msgid "posts excluded."
-msgstr ""
-
-#: lib/interface.php:368
-msgid "Settings have changed, please save the options before indexing."
-msgstr ""
-
-#: lib/interface.php:369
-msgid "Reload the page to refresh the state of the index."
-msgstr ""
-
-#: lib/interface.php:370
-msgid "Are you sure you want to delete all attachment content from the index?"
-msgstr ""
-
-#: lib/interface.php:371
-msgid "Relevanssi attachment data wiped clean."
-msgstr ""
-
-#: lib/interface.php:372
-msgid "There were problems wiping the Relevanssi attachment data clean."
-msgstr ""
-
-#: lib/interface.php:373
-msgid "hour"
-msgstr ""
-
-#: lib/interface.php:374
-msgid "hours"
-msgstr ""
-
-#: lib/interface.php:375
-msgid "about"
-msgstr ""
-
-#: lib/interface.php:376
-msgid "about an hour"
-msgstr ""
-
-#: lib/interface.php:377
-msgid "about an hour and a half"
-msgstr ""
-
-#: lib/interface.php:378
-msgid "minute"
-msgstr ""
-
-#: lib/interface.php:379
-msgid "minutes"
-msgstr ""
-
-#: lib/interface.php:380
-msgid "less than a minute"
-msgstr ""
-
-#: lib/interface.php:381
-msgid "we're done!"
-msgstr ""
-
-#: lib/interface.php:448
-msgid "Tag weight"
-msgstr ""
-
-#: lib/interface.php:456
-msgid "Category weight"
-msgstr ""
-
-#: lib/log.php:151
-msgid "Logged searches"
-msgstr ""
-
-#: lib/log.php:154
-msgid "Time"
-msgstr ""
-
-#: lib/log.php:158 lib/user-searches.php:319 lib/user-searches.php:333
-#: premium/click-tracking.php:635 premium/tabs/redirects-tab.php:52
-msgid "Query"
-msgstr ""
-
-#: lib/log.php:162
-msgid "Hits found"
-msgstr ""
-
-#: lib/log.php:166
-msgid "IP address"
-msgstr ""
-
-#: lib/log.php:252
-msgid "No search keywords logged."
-msgstr ""
-
-#: lib/log.php:347
-#, php-format
-msgid "The query '%s' deleted from the log."
-msgstr ""
-
-#: lib/log.php:359
-#, php-format
-msgid "Couldn't remove the query '%s' from the log."
-msgstr ""
-
-#: lib/privacy.php:34
-msgid "What personal data we collect and why we collect it"
-msgstr ""
-
-#: lib/privacy.php:36
-msgid "IP address for searches"
-msgstr ""
-
-#: lib/privacy.php:37
-msgid ""
-"All searches performed using the internal site search are logged in the "
-"database, including the following information: the search query, the number "
-"of hits found, user ID for users who are logged in, date and time and the IP "
-"address. The IP address is stored for security and auditing purposes."
-msgstr ""
-
-#: lib/privacy.php:39
-msgid ""
-"All searches performed using the internal site search are logged in the "
-"database, including the following information: the search query, the number "
-"of hits found, user ID for users who are logged in and date and time."
-msgstr ""
-
-#: lib/privacy.php:42
-msgid "How long we retain your data"
-msgstr ""
-
-#: lib/privacy.php:45
-#, php-format
-msgid ""
-"The search logs are stored for %d days before they are automatically removed."
-msgstr ""
-
-#: lib/privacy.php:47
-msgid "The search logs are stored indefinitely."
-msgstr ""
-
-#: lib/privacy.php:64 lib/privacy.php:81
-msgid "Relevanssi Search Logs"
-msgstr ""
-
-#: lib/shortcodes.php:166
-msgid "None"
-msgstr ""
-
-#: lib/stopwords.php:38
-msgid "Added stopwords from the database."
-msgstr ""
-
-#: lib/stopwords.php:53
-#, php-format
-msgid "The stopword file for the language '%s' doesn't exist."
-msgstr ""
-
-#: lib/stopwords.php:69
-msgid "Couldn't read the stopwords from the file."
-msgstr ""
-
-#: lib/stopwords.php:79
-msgid "Added stopwords from the stopword file."
-msgstr ""
-
-#: lib/stopwords.php:138
-#, php-format
-msgid "Successfully added %1$d/%2$d terms to stopwords!"
-msgstr ""
-
-#: lib/stopwords.php:157
-#, php-format
-msgid "Term '%s' added to stopwords!"
-msgstr ""
-
-#: lib/stopwords.php:166
-#, php-format
-msgid "Couldn't add term '%s' to stopwords!"
-msgstr ""
-
-#: lib/stopwords.php:317
-msgid "All stopwords removed! Remember to re-index."
-msgstr ""
-
-#: lib/stopwords.php:325
-msgid "There was a problem, and stopwords couldn't be removed."
-msgstr ""
-
-#: lib/stopwords.php:362
-#, php-format
-msgid "Term '%s' removed from stopwords! Re-index to get it back to index."
-msgstr ""
-
-#: lib/stopwords.php:375
-#, php-format
-msgid "Couldn't remove term '%s' from stopwords!"
-msgstr ""
-
-#: lib/tabs/attachments-tab.php:18
-msgid "Indexing attachment content"
-msgstr ""
-
-#: lib/tabs/attachments-tab.php:20
-msgid ""
-"With Relevanssi Premium, you can index the text contents of attachments "
-"(PDFs, Word documents, Open Office documents and many other types). The "
-"contents of the attachments are processed on an external service, which "
-"makes the feature reliable and light on your own server performance."
-msgstr ""
-
-#: lib/tabs/attachments-tab.php:22 lib/tabs/redirects-tab.php:22
-#, php-format
-msgid ""
-"In order to access this and many other delightful Premium features, %1$sbuy "
-"Relevanssi Premium here%2$s."
-msgstr ""
-
-#: lib/tabs/debugging-tab.php:56
-msgid ""
-"In order to figure out problems with indexing posts, you can test how "
-"Relevanssi sees the post by entering the post ID number in the field below."
-msgstr ""
-
-#: lib/tabs/debugging-tab.php:60
-msgid ""
-"You can also check user profiles and taxonomy terms by choosing the type "
-"from the dropdown."
-msgstr ""
-
-#: lib/tabs/debugging-tab.php:65
-#, php-format
-msgid ""
-"In Relevanssi Premium, you can find this feature for each post on the post "
-"edit page. %1$sBuy Relevanssi Premium here%2$s."
-msgstr ""
-
-#: lib/tabs/debugging-tab.php:68 lib/tabs/debugging-tab.php:110
-msgid "The ID"
-msgstr ""
-
-#: lib/tabs/debugging-tab.php:83 premium/click-tracking.php:481
-msgid "Post"
-msgstr ""
-
-#: lib/tabs/debugging-tab.php:87
-msgid "Taxonomy term"
-msgstr ""
-
-#: lib/tabs/debugging-tab.php:91
-msgid "User"
-msgstr ""
-
-#: lib/tabs/debugging-tab.php:100 lib/tabs/debugging-tab.php:122
-msgid "Check the post"
-msgstr ""
-
-#: lib/tabs/debugging-tab.php:106
-msgid "How does the post look like in the database?"
-msgstr ""
-
-#: lib/tabs/debugging-tab.php:108
-msgid ""
-"This feature will show you how the post looks like in the database. It can "
-"sometimes be very helpful for debugging why a post isn't indexed the way you "
-"expect it to be."
-msgstr ""
-
-#: lib/tabs/debugging-tab.php:128
-msgid "Debugging information"
-msgstr ""
-
-#: lib/tabs/debugging-tab.php:143
-msgid "Indexing query"
-msgstr ""
-
-#: lib/tabs/debugging-tab.php:168
-msgid "Post not found"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:84
-msgid "Custom excerpts/snippets"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:89
-msgid "Custom search result snippets"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:94
-msgid "Create custom search result snippets"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:96
-msgid "Only enable this if you actually use the custom excerpts."
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:103
-#, php-format
-msgid ""
-"Looks like you are using Divi. In order to use custom excerpts with Divi, "
-"you need to make some changes to your templates. %1$sSee instructions here"
-"%2$s."
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:115
-msgid "Length of the snippet"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:125
-msgid "Excerpt length type"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:133
-msgid "characters"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:134
-msgid "words"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:136
-msgid ""
-"Using words is much faster than characters. Don't use characters, unless you "
-"have a really good reason and your posts are short."
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:152
-msgid "Allowable tags in excerpts"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:162
-msgid ""
-"List all tags you want to allow in excerpts. For example: <p><a>"
-"<strong>."
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:173
-msgid "Use custom fields for excerpts"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:184
-msgid "Use custom field content for building excerpts"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:186
-msgid ""
-"Use the custom fields setting for indexing for excerpt-making as well. "
-"Enabling this option will show custom field content in Relevanssi-generated "
-"excerpts."
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:189
-msgid "Enable this option to use PDF content for excerpts."
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:194
-msgid "Current custom field setting"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:197
-msgid "all visible custom fields"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:199
-msgid "all custom fields"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:203
-msgid "Just PDF content"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:205
-msgid "None selected"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:213
-msgid "Search hit highlighting"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:224
-msgid "Highlight type"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:234
-msgid "No highlighting"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:238 lib/tabs/excerpts-tab.php:248
-msgid "Text color"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:239 lib/tabs/excerpts-tab.php:262
-msgid "Background color"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:240
-msgid "CSS Style"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:241
-msgid "CSS Class"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:243 lib/tabs/excerpts-tab.php:406
-msgid "Requires custom snippets to work."
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:276
-msgid "CSS style for highlights"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:287
-#, php-format
-msgid ""
-"The highlights will be wrapped in a %s with this CSS in the style parameter."
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:292
-msgid "CSS class for highlights"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:303
-#, php-format
-msgid "The highlights will be wrapped in a %s with this class."
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:308
-msgid "Highlight in titles"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:319
-msgid "Highlight query terms in titles"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:322
-#, php-format
-msgid ""
-"Highlights in titles require changes to the search results template. You "
-"need to replace %1$s in the search results template with %2$s. For more "
-"information, see the contextual help."
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:327
-msgid "Highlight in documents"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:338
-msgid "Highlight query terms in documents"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:341
-#, php-format
-msgid ""
-"Highlights hits when user opens the post from search results. This requires "
-"an extra parameter (%s) to the links from the search results pages, which "
-"Relevanssi should add automatically."
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:346
-msgid "Highlight in comments"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:357
-msgid "Highlight query terms in comments"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:359
-msgid ""
-"Highlights hits in comments when user opens the post from search results."
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:364
-msgid "Expand highlights"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:375
-msgid "Expand highlights to cover full words"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:377
-msgid ""
-"When a highlight matches part of the word, if this option is enabled, the "
-"highlight will be expanded to highlight the whole word."
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:382
-msgid "Breakdown of search results"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:393
-msgid "Breakdown of search hits in excerpts"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:404
-msgid "Show the breakdown of search hits in the excerpts."
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:411
-msgid "The breakdown format"
-msgstr ""
-
-#: lib/tabs/excerpts-tab.php:421
-msgid ""
-"Use %body%, %title%, %categories%, %tags%, %taxonomies%, %comments%, "
-"%customfields%, %author%, %excerpt% and %mysqlcolumns% to display the number "
-"of hits (in different parts of the post), %total% for total hits, %score% to "
-"display the document weight and %terms% to show how many hits each search "
-"term got."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:111 lib/tabs/indexing-tab.php:117
-msgid "Build the index"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:112 lib/tabs/indexing-tab.php:119
-msgid "Index unindexed posts"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:117
-#, php-format
-msgid "%s empties the existing index and rebuilds it from scratch."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:119
-#, php-format
-msgid ""
-"%s doesn't empty the index and only indexes those posts that are not "
-"indexed. You can use it if you have to interrupt building the index."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:122
-msgid "This doesn't index any taxonomy terms or users."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:129 premium/tabs/attachments-tab.php:62
-msgid "Time elapsed"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:129 premium/tabs/attachments-tab.php:62
-msgid "Time remaining"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:129 premium/tabs/attachments-tab.php:62
-msgid "some time"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:131
-msgid ""
-"Indexing should respond quickly. If nothing happens in couple of minutes, "
-"it's probably stuck. The most common reasons for indexing issues are "
-"incompatible shortcodes, so try disabling the shortcode expansion setting "
-"and try again. Also, if you've just updated Relevanssi, doing a hard refresh "
-"in your browser will make sure your browser is not trying to use an outdated "
-"version of the Relevanssi scripts."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:135
-msgid "State of the index"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:136
-msgid "document in the index."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:138
-msgid "user in the index."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:139
-msgid "taxonomy term in the index."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:142
-msgid "term in the index."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:143
-msgid "is the lowest post ID indexed."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:145
-#, php-format
-msgid ""
-"These values may be inaccurate. If you need exact values, %1$supdate the "
-"counts%2$s"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:155
-msgid ""
-"WARNING: You've chosen no post types to index. Nothing will be indexed. "
-"Choose some post types to index."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:160
-msgid "Indexing options"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:162
-msgid ""
-"Any changes to the settings on this page require reindexing before they take "
-"effect."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:166
-msgid "Post types"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:170
-msgid "Post types to index"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:174
-msgid "Type"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:175 lib/tabs/indexing-tab.php:267
-#: premium/interface.php:720
-msgid "Index"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:176
-msgid "Excluded from search?"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:193
-#, php-format
-msgid "Index post type %s"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:195 lib/tabs/indexing-tab.php:289
-#: premium/interface.php:737 premium/interface.php:748
-msgid "yes"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:197
-#, php-format
-msgid "Post type %s is excluded from search"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:199 lib/tabs/indexing-tab.php:285
-#: premium/interface.php:739 premium/interface.php:744
-msgid "no"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:201
-#, php-format
-msgid "Post type %s can be searched"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:232
-msgid ""
-"If you want to index a post type that's marked 'Excluded from search', you "
-"can do that without worrying about it – but you need to uncheck the 'Respect "
-"exclude_from_search' setting from the Searching tab."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:244
-msgid "Index image files"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:249
-msgid "Index image attachments"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:251
-msgid ""
-"If this option is enabled, Relevanssi will include image attachments in the "
-"index. If the option is disabled, only other attachment types are included."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:253
-#, php-format
-msgid ""
-"For more detailed control over the attachment type indexing, see "
-"%1$sControlling attachment types in the Knowledge base%2$s."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:259 premium/interface.php:713
-msgid "Taxonomies"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:266 premium/interface.php:719
-msgid "Taxonomy"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:268 premium/interface.php:721
-msgid "Public?"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:284
-#, php-format
-msgid "Index taxonomy %s"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:287 premium/interface.php:746
-#, php-format
-msgid "Taxonomy %s is not public"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:291 premium/interface.php:750
-#, php-format
-msgid "Taxonomy %s is public"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:313
-msgid ""
-"If you check a taxonomy here, the terms for that taxonomy are indexed with "
-"the posts. If you for example choose \"post_tag\", searching for a tag will "
-"find all posts that have the tag."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:324 lib/tabs/indexing-tab.php:338
-msgid "none"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:325
-msgid "comments"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:326
-msgid "comments and pingbacks"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:328
-msgid ""
-"If you choose to index comments, you can choose if you want to index just "
-"comments, or everything including comments and track- and pingbacks."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:339
-msgid "all"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:340
-msgid "visible"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:341 lib/tabs/indexing-tab.php:373
-msgid "some"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:345
-msgid "'All' indexes all custom fields for posts."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:347
-msgid ""
-"'Visible' only includes the custom fields that are visible in the user "
-"interface (with names that don't start with an underscore)."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:349
-msgid "'Some' lets you choose individual custom fields to index."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:355
-msgid ""
-"Advanced Custom Fields has lots of invisible custom fields with meta data. "
-"Selecting \"all\" will include lots of garbage in the index and excerpts. "
-"\"Visible\" is usually a better option with ACF."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:366
-msgid "Custom fields to index"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:368
-msgid ""
-"Enter a comma-separated list of custom fields to include in the index. With "
-"Relevanssi Premium, you can also use 'fieldname_%_subfieldname' notation for "
-"ACF repeater fields."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:369
-msgid ""
-"You can use 'relevanssi_index_custom_fields' filter hook to adjust which "
-"custom fields are indexed."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:373
-#, php-format
-msgid ""
-"If you want the SKU included, choose %1$s and enter %2$s. Also see the "
-"contextual help for more details."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:380
-msgid "Author display names"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:385
-msgid "Index the post author display name"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:387
-msgid ""
-"Searching for the post author display name will return posts by that author."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:398
-msgid "Index the post excerpt"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:400
-msgid "Relevanssi will find posts by the content in the excerpt."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:402
-msgid ""
-"WooCommerce stores the product short description in the excerpt, so it's a "
-"good idea to index excerpts."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:409
-msgid "Shortcodes"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:414
-msgid "Expand shortcodes"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:419
-msgid "Expand shortcodes when indexing"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:422
-msgid ""
-"WooCommerce has shortcodes that don't work well with Relevanssi. With "
-"WooCommerce, make sure the option is disabled."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:424
-msgid ""
-"If checked, Relevanssi will expand shortcodes in post content before "
-"indexing. Otherwise shortcodes will be stripped."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:425
-msgid ""
-"If you use shortcodes to include dynamic content, Relevanssi will not keep "
-"the index updated, the index will reflect the status of the shortcode "
-"content at the moment of indexing."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:439
-msgid "Advanced indexing settings"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:441
-msgid "Show advanced settings"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:446
-msgid "Minimum word length"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:450
-msgid "Words shorter than this many letters will not be indexed."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:452
-#, php-format
-msgid ""
-"To enable one-letter searches, you need to add a filter function on the "
-"filter hook %1$s that returns %2$s."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:456
-msgid "Punctuation control"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:457
-msgid ""
-"Here you can adjust how the punctuation is controlled. For more information, "
-"see help. Remember that any changes here require reindexing, otherwise "
-"searches will fail to find posts they should."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:461
-msgid "Hyphens and dashes"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:465 lib/tabs/indexing-tab.php:492
-#: lib/tabs/indexing-tab.php:506
-msgid "Keep"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:466 lib/tabs/indexing-tab.php:479
-#: lib/tabs/indexing-tab.php:493 lib/tabs/indexing-tab.php:507
-msgid "Replace with spaces"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:467 lib/tabs/indexing-tab.php:480
-#: lib/tabs/indexing-tab.php:494 lib/tabs/indexing-tab.php:508
-#: premium/tabs/redirects-tab.php:66 premium/tabs/redirects-tab.php:108
-msgid "Remove"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:469
-msgid ""
-"How Relevanssi should handle hyphens and dashes (en and em dashes)? "
-"Replacing with spaces is generally the best option, but in some cases "
-"removing completely is the best option. Keeping them is rarely the best "
-"option."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:475
-msgid "Apostrophes and quotes"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:482
-msgid ""
-"How Relevanssi should handle apostrophes and quotes? It's not possible to "
-"keep them; that would lead to problems. Default behaviour is to replace with "
-"spaces, but sometimes removing makes sense."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:488
-msgid "Ampersands"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:496
-msgid ""
-"How Relevanssi should handle ampersands? Replacing with spaces is generally "
-"the best option, but if you talk a lot about D&D, for example, keeping "
-"the ampersands is useful."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:502
-msgid "Decimal separators"
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:510
-msgid ""
-"How Relevanssi should handle periods between decimals? Replacing with spaces "
-"is the default option, but that often leads to the numbers being removed "
-"completely. If you need to search decimal numbers a lot, keep the periods."
-msgstr ""
-
-#: lib/tabs/indexing-tab.php:520
-msgid "Hide advanced settings"
-msgstr ""
-
-#: lib/tabs/logging-tab.php:32
-msgid "Enable logs"
-msgstr ""
-
-#: lib/tabs/logging-tab.php:36 lib/tabs/logging-tab.php:39
-msgid "Keep a log of user queries."
-msgstr ""
-
-#: lib/tabs/logging-tab.php:46
-#, php-format
-msgid ""
-"If enabled, Relevanssi will log user queries. The logs can be examined under "
-"'%1$s' on the Dashboard admin menu and are stored in the %2$s database table."
-msgstr ""
-
-#: lib/tabs/logging-tab.php:56
-msgid "Log user IP"
-msgstr ""
-
-#: lib/tabs/logging-tab.php:60 lib/tabs/logging-tab.php:63
-msgid "Log the user's IP with the queries."
-msgstr ""
-
-#: lib/tabs/logging-tab.php:66
-msgid ""
-"If enabled, Relevanssi will log user's IP adress with the queries. Note that "
-"this may be illegal where you live, and in EU will create a person registry "
-"that falls under the GDPR."
-msgstr ""
-
-#: lib/tabs/logging-tab.php:71
-msgid "Exclude users"
-msgstr ""
-
-#: lib/tabs/logging-tab.php:75
-msgid ""
-"Comma-separated list of numeric user IDs or user login names that will not "
-"be logged."
-msgstr ""
-
-#: lib/tabs/logging-tab.php:85 premium/click-tracking.php:729
-msgid "Trim logs"
-msgstr ""
-
-#: lib/tabs/logging-tab.php:89
-msgid "How many days of logs to keep in the database."
-msgstr ""
-
-#: lib/tabs/logging-tab.php:93
-msgid ""
-"Big log database table will eventually start to slow down the search, so "
-"it's a good idea to use some level of automatic log trimming."
-msgstr ""
-
-#: lib/tabs/logging-tab.php:98
-#, php-format
-msgid "Set to %d for no trimming."
-msgstr ""
-
-#: lib/tabs/logging-tab.php:107
-msgid "Export logs"
-msgstr ""
-
-#: lib/tabs/logging-tab.php:110
-msgid "Export the log as a CSV file"
-msgstr ""
-
-#: lib/tabs/logging-tab.php:111
-msgid "Push the button to export the search log as a CSV file."
-msgstr ""
-
-#: lib/tabs/logging-tab.php:122 premium/click-tracking.php:703
-msgid "Click tracking"
-msgstr ""
-
-#: lib/tabs/logging-tab.php:123
-msgid ""
-"Relevanssi Premium has a click tracking feature where you can track which "
-"posts are clicked from the search results. That way you can tell what is "
-"your most interesting content and how the search is actually used to access "
-"posts."
-msgstr ""
-
-#: lib/tabs/overview-tab.php:22
-msgid "Welcome to Relevanssi!"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:41
-msgid "Getting started"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:43
-msgid ""
-"You've already installed Relevanssi. That's a great first step towards good "
-"search experience!"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:47
-#, php-format
-msgid ""
-"Now, you need an index. Head over to the %1$s%2$s%3$s tab to set up the "
-"basic indexing options and to build the index."
-msgstr ""
-
-#: lib/tabs/overview-tab.php:48
-msgid "You need to check at least the following options:"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:49
-msgid "Make sure the post types you want to include in the index are indexed."
-msgstr ""
-
-#: lib/tabs/overview-tab.php:51
-#, php-format
-msgid ""
-"Do you use custom fields to store content you want included? If so, add "
-"those too. WooCommerce user? You probably want to include %s."
-msgstr ""
-
-#: lib/tabs/overview-tab.php:52
-msgid ""
-"Then just save the options and build the index. First time you have to do it "
-"manually, but after that, it's fully automatic: all changes are reflected in "
-"the index without reindexing. (That said, it's a good idea to rebuild the "
-"index once a year.)"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:55
-msgid "Great, you already have an index!"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:59
-#, php-format
-msgid ""
-"On the %1$s%2$s%3$s tab, choose whether you want the default operator to be "
-"AND (less results, but more precise) or OR (more results, less precise)."
-msgstr ""
-
-#: lib/tabs/overview-tab.php:63
-#, php-format
-msgid ""
-"The next step is the %1$s%2$s%3$s tab, where you can enable the custom "
-"excerpts that show the relevant part of post in the search results pages."
-msgstr ""
-
-#: lib/tabs/overview-tab.php:64
-msgid ""
-"There are couple of options related to that, so if you want highlighting in "
-"the results, you can adjust the styles for that to suit the look of your "
-"site."
-msgstr ""
-
-#: lib/tabs/overview-tab.php:67
-msgid ""
-"That's about it! Now you should have Relevanssi up and running. The rest of "
-"the options is mostly fine-tuning."
-msgstr ""
-
-#: lib/tabs/overview-tab.php:70
-msgid ""
-"Relevanssi doesn't have a separate search widget. Instead, Relevanssi uses "
-"the default search widget. Any standard search form will do!"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:74
-msgid "Relevanssi Live Ajax Search"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:77
-#, php-format
-msgid ""
-"If you want a live search results, you can use the Relevanssi Live Ajax "
-"Search plugin. %1$sYou can find it in the plugin repository%2$s. It will "
-"make your search forms show instant results, powered by Relevanssi."
-msgstr ""
-
-#: lib/tabs/overview-tab.php:81
-msgid "Privacy and GDPR compliance"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:84
-#, php-format
-msgid ""
-"%1$sGDPR Compliance at Relevanssi knowledge base%2$s explains how using "
-"Relevanssi affects the GDPR compliance and the privacy policies of your "
-"site. Relevanssi also supports the %3$sprivacy policy tool%2$s and the "
-"WordPress user data export and erase tools."
-msgstr ""
-
-#: lib/tabs/overview-tab.php:88
-msgid "For more information"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:90
-msgid ""
-"Relevanssi uses the WordPress contextual help. Click 'Help' on the top right "
-"corner for more information on many Relevanssi topics."
-msgstr ""
-
-#: lib/tabs/overview-tab.php:92
-#, php-format
-msgid ""
-"%1$sRelevanssi knowledge base%2$s has lots of information about advanced "
-"Relevanssi use, including plenty of code samples."
-msgstr ""
-
-#: lib/tabs/overview-tab.php:96
-msgid "Do you like Relevanssi?"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:98
-msgid ""
-"If you do, the best way to show your appreciation is to spread the word and "
-"perhaps give us a good review on WordPress.org."
-msgstr ""
-
-#: lib/tabs/overview-tab.php:100
-#, php-format
-msgid ""
-"If you like Relevanssi, leaving a five-star review on WordPress.org will "
-"help others discover Relevanssi. %1$sYou can add your review here%2$s."
-msgstr ""
-
-#: lib/tabs/overview-tab.php:106
-msgid "Buy Relevanssi Premium"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:109
-msgid "Buy Relevanssi Premium now"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:111
-#, php-format
-msgid ""
-"use coupon code %1$s for 20%% discount (valid at least until the end of %2$s)"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:112
-msgid "Here are some improvements Relevanssi Premium offers:"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:114
-msgid "PDF content indexing"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:115
-msgid "A Related posts feature"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:116
-msgid "Index and search user profile pages"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:117
-msgid "Index and search taxonomy term pages"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:118
-msgid "Multisite searches across many subsites"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:119
-msgid "WP CLI commands"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:120
-msgid "Adjust weights separately for each post type and taxonomy"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:121
-msgid "Internal link anchors can be search terms for the target posts"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:122
-msgid "Index and search any columns in the wp_posts database"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:123
-msgid ""
-"Hide Relevanssi branding from the User Searches page on a client installation"
-msgstr ""
-
-#: lib/tabs/overview-tab.php:124
-msgid "Redirect search queries to custom URLs"
-msgstr ""
-
-#: lib/tabs/redirects-tab.php:20
-msgid ""
-"With Relevanssi Premium, you can set up redirects. These are keywords that "
-"automatically redirect the user to certain page, without going through the "
-"usual search process. For example, you could set it up so that all searches "
-"for \"job\" automatically lead to your \"Careers\" page."
-msgstr ""
-
-#: lib/tabs/search-page.php:18
-msgid ""
-"You can use this search to perform Relevanssi searches without any "
-"restrictions from WordPress. You can search all post types here."
-msgstr ""
-
-#: lib/tabs/search-page.php:24
-msgid "Search terms"
-msgstr ""
-
-#: lib/tabs/search-page.php:32
-msgid "Post type"
-msgstr ""
-
-#: lib/tabs/search-page.php:36
-msgid "Any"
-msgstr ""
-
-#: lib/tabs/search-page.php:55
-msgid "Users"
-msgstr ""
-
-#: lib/tabs/search-page.php:64
-msgid "Posts per page"
-msgstr ""
-
-#: lib/tabs/search-page.php:68
-msgid "All"
-msgstr ""
-
-#: lib/tabs/search-page.php:77
-msgid "Search parameters"
-msgstr ""
-
-#: lib/tabs/search-page.php:82
-#, php-format
-msgid ""
-"Use query parameter formatting here, the same that would appear on search "
-"page results URL. For example %s."
-msgstr ""
-
-#: lib/tabs/search-page.php:89
-msgid "Search"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:72
-msgid "Default operator"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:76
-msgid "AND - require all terms"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:77
-msgid "OR - any term present is enough"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:79
-msgid "This setting determines the default operator for the search."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:83
-#, php-format
-msgid ""
-"You can override this setting with the %1$s query parameter, like this: %2$s"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:90
-msgid "Fallback to OR"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:94 lib/tabs/searching-tab.php:97
-msgid "Disable the OR fallback."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:100
-msgid ""
-"By default, if AND search fails to find any results, Relevanssi will switch "
-"the operator to OR and run the search again. You can prevent that by "
-"checking this option."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:105
-msgid "Default order"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:109
-msgid "Relevance (highly recommended)"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:110
-msgid "Post date"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:113
-#, php-format
-msgid ""
-"If you want to override this or use multi-layered ordering (eg. first order "
-"by relevance, but sort ties by post title), you can use the %s query "
-"variable. See Help for more information."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:115
-msgid ""
-" If you want date-based results, see the recent post bonus in the Weights "
-"section."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:121
-msgid "Keyword matching"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:125
-msgid "Whole words"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:126 lib/tabs/searching-tab.php:131
-msgid "Partial words"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:127
-msgid "Partial words if no hits for whole words"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:131
-#, php-format
-msgid ""
-"Choosing the \"%1$s\" option may lead to unexpected results. Most of the "
-"time the \"%2$s\" option is the better choice."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:131
-msgid "Partial words if not hits for whole words"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:133
-msgid ""
-"Whole words means Relevanssi only finds posts that include the whole search "
-"term."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:134
-msgid ""
-"Partial words also includes cases where the word in the index begins or ends "
-"with the search term (searching for 'ana' will match 'anaconda' or 'banana', "
-"but not 'banal'). See Help, if you want to make Relevanssi match also inside "
-"words."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:139
-msgid "Weights"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:142
-msgid ""
-"All the weights in the table are multipliers. To increase the weight of an "
-"element, use a higher number. To make an element less significant, use a "
-"number lower than 1."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:146
-msgid "Element"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:147
-msgid "Weight"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:152
-msgid "Content"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:160
-msgid "Titles"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:173
-msgid "Comment text"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:202
-msgid "Boost exact matches"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:206 lib/tabs/searching-tab.php:209
-msgid "Give boost to exact matches."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:213
-#, php-format
-msgid ""
-"If you enable this option, matches where the search query appears in title "
-"or content as a phrase will get a weight boost. To adjust the boost, you can "
-"use the %s filter hook. See Help for more details."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:221
-msgid "WPML"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:225 lib/tabs/searching-tab.php:228
-msgid "Limit results to current language."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:231
-msgid ""
-"Enabling this option will restrict the results to the currently active "
-"language. If the option is disabled, results will include posts in all "
-"languages."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:238
-msgid "Polylang"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:242 lib/tabs/searching-tab.php:245
-msgid "Allow results from all languages."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:248
-msgid ""
-"By default Polylang restricts the search to the current language. Enabling "
-"this option will lift this restriction."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:258 lib/tabs/searching-tab.php:261
-msgid "Use Relevanssi for admin searches."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:264
-msgid ""
-"If checked, Relevanssi will be used for searches in the admin interface. The "
-"page search doesn't use Relevanssi, because WordPress works like that."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:270
-#, php-format
-msgid "Respect %s"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:274
-msgid "Respect exclude_from_search for custom post types"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:278
-#, php-format
-msgid "Respect %s for custom post types"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:280
-msgid ""
-"If checked, Relevanssi won't display posts of custom post types that have "
-"'exclude_from_search' set to true."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:292
-msgid ""
-"You probably should uncheck this option, because you've set Relevanssi to "
-"index the following non-public post types:"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:305
-msgid "Throttle searches"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:310 lib/tabs/searching-tab.php:313
-msgid "Throttle searches."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:317
-msgid "Your database is so small that you don't need to enable this."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:319
-msgid ""
-"If this option is checked, Relevanssi will limit search results to at most "
-"500 results per term. This will improve performance, but may cause some "
-"relevant documents to go unfound. See Help for more details."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:321
-msgid ""
-"You have the default ordering set to post date and have enabled user or "
-"taxonomy term indexing. If you enable the throttle, the search results will "
-"only include posts. Users and taxonomy terms will be excluded. Either keep "
-"the throttle disabled or set the post ordering to relevance."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:328 lib/tabs/searching-tab.php:334
-msgid "Category restriction"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:354
-msgid ""
-"You can restrict search results to a category for all searches. For "
-"restricting on a per-search basis and more options (eg. tag restrictions), "
-"see Help."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:359 lib/tabs/searching-tab.php:365
-msgid "Category exclusion"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:385
-msgid ""
-"Posts in these categories are not included in search results. To exclude the "
-"posts completely from the index, see Help."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:390
-msgid "Post exclusion"
-msgstr ""
-
-#: lib/tabs/searching-tab.php:394
-msgid ""
-"Enter a comma-separated list of post or page ID's to exclude those pages "
-"from the search results."
-msgstr ""
-
-#: lib/tabs/searching-tab.php:396
-msgid ""
-"With Relevanssi Premium, it's better to use the check box on post edit "
-"pages. That will remove the posts completely from the index, and will work "
-"with multisite searches unlike this setting."
-msgstr ""
-
-#: lib/tabs/stopwords-tab.php:29
-msgid "Content stopwords"
-msgstr ""
-
-#: lib/tabs/stopwords-tab.php:38
-msgid ""
-"Content stopwords are a premium feature where you can set stopwords that "
-"only apply to the post content. Those stopwords will still be indexed if "
-"they appear in post titles, tags, categories, custom fields or other parts "
-"of the post. To use content stopwords, you need Relevanssi Premium."
-msgstr ""
-
-#: lib/tabs/stopwords-tab.php:68
-msgid ""
-"Enter a word here to add it to the list of stopwords. The word will "
-"automatically be removed from the index, so re-indexing is not necessary. "
-"You can enter many words at the same time, separate words with commas."
-msgstr ""
-
-#: lib/tabs/stopwords-tab.php:76
-msgid "Stopword(s) to add"
-msgstr ""
-
-#: lib/tabs/stopwords-tab.php:80 premium/body-stopwords.php:311
-msgid "Add"
-msgstr ""
-
-#: lib/tabs/stopwords-tab.php:84
-msgid ""
-"Here's a list of stopwords in the database. Click a word to remove it from "
-"stopwords. Removing stopwords won't automatically return them to index, so "
-"you need to re-index all posts after removing stopwords to get those words "
-"back to index."
-msgstr ""
-
-#: lib/tabs/stopwords-tab.php:89
-msgid "Current stopwords"
-msgstr ""
-
-#: lib/tabs/stopwords-tab.php:111
-msgid "Remove all stopwords"
-msgstr ""
-
-#: lib/tabs/stopwords-tab.php:118
-msgid "Add default stopwords"
-msgstr ""
-
-#: lib/tabs/stopwords-tab.php:126 lib/tabs/stopwords-tab.php:129
-msgid "Exportable list of stopwords"
-msgstr ""
-
-#: lib/tabs/stopwords-tab.php:131
-msgid ""
-"You can copy the list of stopwords here if you want to back up the list, "
-"copy it to a different blog or otherwise need the list."
-msgstr ""
-
-#: lib/tabs/stopwords-tab.php:146
-msgid ""
-"You are using Polylang and are in \"Show all languages\" mode. Please select "
-"a language before adjusting the stopword settings."
-msgstr ""
-
-#: lib/tabs/synonyms-tab.php:54
-msgid "No synonyms!"
-msgstr ""
-
-#: lib/tabs/synonyms-tab.php:57
-msgid ""
-"Synonyms are disabled because the searching operator is set to AND. Enable "
-"OR searching to use the synonyms."
-msgstr ""
-
-#: lib/tabs/synonyms-tab.php:59
-msgid ""
-"If you want to use synonyms in AND searches, enable synonym indexing on the "
-"Indexing tab. Also, any changes to the synonyms won't take effect until you "
-"rebuild the index."
-msgstr ""
-
-#: lib/tabs/synonyms-tab.php:61
-msgid ""
-"Relevanssi Premium has a feature that allows you to include the synonyms in "
-"the indexing. This makes it possible to use synonyms in AND searches."
-msgstr ""
-
-#: lib/tabs/synonyms-tab.php:70
-msgid ""
-"Add synonyms here to make the searches find better results. If you notice "
-"your users frequently misspelling a product name, or for other reasons use "
-"many names for one thing, adding synonyms will make the results better."
-msgstr ""
-
-#: lib/tabs/synonyms-tab.php:72
-msgid ""
-"Do not go overboard, though, as too many synonyms can make the search "
-"confusing: users understand if a search query doesn't match everything, but "
-"they get confused if the searches match to unexpected things."
-msgstr ""
-
-#: lib/tabs/synonyms-tab.php:82
-msgid ""
-"The format here is key = value. If you add dog = hound"
-"code> to the list of synonyms, searches for dog automatically "
-"become a search for dog hound and will thus match to posts that "
-"include either dog or hound. This only works in OR "
-"searches: in AND searches the synonyms only restrict the search, as now the "
-"search only finds posts that contain both dog "
-"and hound."
-msgstr ""
-
-#: lib/tabs/synonyms-tab.php:84
-msgid ""
-"The synonyms are one direction only. If you want both directions, add the "
-"synonym again, reversed: hound = dog."
-msgstr ""
-
-#: lib/tabs/synonyms-tab.php:86
-msgid ""
-"It's possible to use phrases for the value, but not for the key. dog = "
-"\"great dane\" works, but \"great dane\" = dog doesn't."
-msgstr ""
-
-#: lib/tabs/synonyms-tab.php:100
-msgid ""
-"You are using Polylang and are in \"Show all languages\" mode. Please select "
-"a language before adjusting the synonym settings."
-msgstr ""
-
-#: lib/user-searches.php:20
-msgid "Relevanssi User Searches"
-msgstr ""
-
-#: lib/user-searches.php:44
-msgid "Enable query logging to see stats here."
-msgstr ""
-
-#: lib/user-searches.php:91
-msgid "From:"
-msgstr ""
-
-#: lib/user-searches.php:92
-msgid "To:"
-msgstr ""
-
-#: lib/user-searches.php:93
-msgid "Filter"
-msgstr ""
-
-#: lib/user-searches.php:96
-msgid "Year so far"
-msgstr ""
-
-#: lib/user-searches.php:97
-msgid "This month"
-msgstr ""
-
-#: lib/user-searches.php:98
-msgid "Last month"
-msgstr ""
-
-#: lib/user-searches.php:99
-msgid "30 days"
-msgstr ""
-
-#: lib/user-searches.php:100
-msgid "This week"
-msgstr ""
-
-#: lib/user-searches.php:101
-msgid "Last week"
-msgstr ""
-
-#: lib/user-searches.php:102
-msgid "7 days"
-msgstr ""
-
-#: lib/user-searches.php:103
-msgid "All history"
-msgstr ""
-
-#: lib/user-searches.php:112 premium/click-tracking.php:469
-msgid "# of Searches"
-msgstr ""
-
-#: lib/user-searches.php:120
-msgid "Total searches"
-msgstr ""
-
-#: lib/user-searches.php:125
-msgid "Searches that found nothing"
-msgstr ""
-
-#: lib/user-searches.php:137
-msgid "Successful searches"
-msgstr ""
-
-#: lib/user-searches.php:138
-msgid "\"Hits\" is the average hits this search query has found."
-msgstr ""
-
-#: lib/user-searches.php:142
-msgid "In order to see the clicks, you need Relevanssi Premium."
-msgstr ""
-
-#: lib/user-searches.php:146
-msgid ""
-"In order to see the clicks, you need to enable click tracking. Click "
-"tracking is not currently enabled, and you're not collecting new clicks."
-msgstr ""
-
-#: lib/user-searches.php:153
-msgid "Unsuccessful searches"
-msgstr ""
-
-#: lib/user-searches.php:154
-msgid "These queries have found no results."
-msgstr ""
-
-#: lib/user-searches.php:163
-msgid "Reset Logs"
-msgstr ""
-
-#: lib/user-searches.php:169
-msgid ""
-"To reset the logs, type \"reset\" into the box here and click the Reset "
-"button"
-msgstr ""
-
-#: lib/user-searches.php:176
-msgid ""
-"To reset the logs, type \"reset\" into the box here and click the Reset "
-"button. This will reset both the search log and the click tracking log."
-msgstr ""
-
-#: lib/user-searches.php:186
-msgid "Reset"
-msgstr ""
-
-#: lib/user-searches.php:320 premium/tabs/redirects-tab.php:55
-msgid "Hits"
-msgstr ""
-
-#: lib/user-searches.php:321
-msgid "Clicks"
-msgstr ""
-
-#: lib/utils.php:1385
-msgid "There is no excerpt because this is a protected post."
-msgstr ""
-
-#: premium/admin-ajax.php:158
-msgid "Indexing complete!"
-msgstr ""
-
-#: premium/admin-ajax.php:174
-#, php-format
-msgid "Successfully indexed attachment id %d."
-msgstr ""
-
-#: premium/admin-ajax.php:177
-#, php-format
-msgid "Failed to index attachment id %1$d: %2$s"
-msgstr ""
-
-#: premium/admin-ajax.php:262
-msgid "Attachment ID"
-msgstr ""
-
-#: premium/admin-ajax.php:322 premium/admin-ajax.php:326
-#, php-format
-msgid "%1$d taxonomy term, total %2$d / %3$d."
-msgstr ""
-
-#: premium/admin-ajax.php:361
-msgid "disabled."
-msgstr ""
-
-#: premium/admin-ajax.php:369
-#, php-format
-msgid "%1$d post type archive indexed."
-msgstr ""
-
-#: premium/admin-ajax.php:426
-#, php-format
-msgid "Indexed %1$d user (total %2$d), processed %3$d / %4$d."
-msgstr ""
-
-#: premium/body-stopwords.php:42
-#, php-format
-msgid "Successfully added %1$d/%2$d terms to content stopwords!"
-msgstr ""
-
-#: premium/body-stopwords.php:53
-#, php-format
-msgid "Term '%s' added to content stopwords!"
-msgstr ""
-
-#: premium/body-stopwords.php:56
-#, php-format
-msgid "Couldn't add term '%s' to content stopwords!"
-msgstr ""
-
-#: premium/body-stopwords.php:193
-msgid "All content stopwords removed! Remember to re-index."
-msgstr ""
-
-#: premium/body-stopwords.php:198
-msgid "There was a problem, and content stopwords couldn't be removed."
-msgstr ""
-
-#: premium/body-stopwords.php:251
-#, php-format
-msgid ""
-"Term '%s' removed from content stopwords! Re-index to get it back to index."
-msgstr ""
-
-#: premium/body-stopwords.php:266
-#, php-format
-msgid "Couldn't remove term '%s' from content stopwords!"
-msgstr ""
-
-#: premium/body-stopwords.php:301
-msgid ""
-"Post content stopwords are like stopwords, but they are only applied to the "
-"post content. These words can be used for searching and will be found in "
-"post titles, custom fields and other indexed content – just not in the post "
-"body content. Sometimes a word can be very common, but also have a more "
-"specific meaning and use on your site, and making it a content stopword will "
-"make it easier to find the specific use cases."
-msgstr ""
-
-#: premium/body-stopwords.php:307
-msgid "Content stopword(s) to add"
-msgstr ""
-
-#: premium/body-stopwords.php:315
-msgid ""
-"Here's a list of content stopwords in the database. Click a word to remove "
-"it from content stopwords. You need to reindex the database to get the words "
-"back in to the index."
-msgstr ""
-
-#: premium/body-stopwords.php:320
-msgid "Current content stopwords"
-msgstr ""
-
-#: premium/body-stopwords.php:337
-msgid "Remove all content stopwords"
-msgstr ""
-
-#: premium/body-stopwords.php:342 premium/body-stopwords.php:345
-msgid "Exportable list of content stopwords"
-msgstr ""
-
-#: premium/body-stopwords.php:347
-msgid ""
-"You can copy the list of content stopwords from here if you want to back up "
-"the list, copy it to a different blog or otherwise need the list."
-msgstr ""
-
-#: premium/class-relevanssi-wp-cli-command.php:516
-msgid "all keywords"
-msgstr ""
-
-#: premium/class-relevanssi-wp-cli-command.php:535
-msgid "Pinned posts"
-msgstr ""
-
-#: premium/class-relevanssi-wp-cli-command.php:544
-msgid "Unpinned posts"
-msgstr ""
-
-#: premium/class-relevanssi-wp-cli-command.php:552
-msgid "No pinned posts found."
-msgstr ""
-
-#: premium/click-tracking.php:72
-msgid "Invalid click tracking value format."
-msgstr ""
-
-#: premium/click-tracking.php:370
-#, php-format
-msgid "The query '%s' deleted from the click tracking log."
-msgstr ""
-
-#: premium/click-tracking.php:382
-#, php-format
-msgid "Couldn't remove the query '%s' from the click tracking log."
-msgstr ""
-
-#: premium/click-tracking.php:404 premium/click-tracking.php:570
-msgid "Back to the User Searches page"
-msgstr ""
-
-#: premium/click-tracking.php:410 premium/click-tracking.php:576
-#, php-format
-msgid "Search insights for %s"
-msgstr ""
-
-#: premium/click-tracking.php:470 premium/click-tracking.php:624
-msgid "# of Clicks"
-msgstr ""
-
-#: premium/click-tracking.php:476
-msgid "Posts found with this search term"
-msgstr ""
-
-#: premium/click-tracking.php:482 premium/click-tracking.php:636
-msgid "Times clicked"
-msgstr ""
-
-#: premium/click-tracking.php:483 premium/click-tracking.php:637
-msgid "Avg rank"
-msgstr ""
-
-#: premium/click-tracking.php:484 premium/click-tracking.php:638
-msgid "Avg page"
-msgstr ""
-
-#: premium/click-tracking.php:498 premium/click-tracking.php:584
-msgid "View post"
-msgstr ""
-
-#: premium/click-tracking.php:499 premium/click-tracking.php:585
-msgid "Edit post"
-msgstr ""
-
-#: premium/click-tracking.php:511
-msgid "Remove this query from the click log"
-msgstr ""
-
-#: premium/click-tracking.php:517 premium/click-tracking.php:530
-msgid "Delete"
-msgstr ""
-
-#: premium/click-tracking.php:524
-msgid "Remove this query from the search log"
-msgstr ""
-
-#: premium/click-tracking.php:630
-msgid "Search queries for this post"
-msgstr ""
-
-#: premium/click-tracking.php:705
-msgid ""
-"Enabling this option will add click tracking information to the post URLs on "
-"Relevanssi search results pages, allowing to you see stats on which posts "
-"are clicked and what their rankings are. You can find the stats on "
-"individual post edit pages in the Relevanssi sidebar, or from the User "
-"searches page by clicking the search term."
-msgstr ""
-
-#: premium/click-tracking.php:707
-msgid ""
-"Click tracking stores post ID, the search query and ranking information for "
-"the post. No personal information about the user doing the search are stored."
-msgstr ""
-
-#: premium/click-tracking.php:712
-msgid "Enable click tracking"
-msgstr ""
-
-#: premium/click-tracking.php:722
-msgid "Enable click tracking on Relevanssi search results pages."
-msgstr ""
-
-#: premium/click-tracking.php:733
-msgid "How many days of click tracking logs to keep in the database."
-msgstr ""
-
-#: premium/click-tracking.php:737
-#, php-format
-msgid ""
-"Set to %d for no trimming. The click tracking logs will be smaller than the "
-"search logs, so this value can be bigger than the value for regular logs."
-msgstr ""
-
-#: premium/click-tracking.php:745
-msgid "Export click logs"
-msgstr ""
-
-#: premium/click-tracking.php:748
-msgid "Export the click tracking log as a CSV file"
-msgstr ""
-
-#: premium/click-tracking.php:749
-msgid "Push the button to export the click tracking log as a CSV file."
-msgstr ""
-
-#: premium/click-tracking.php:788
-msgid "Total clicks"
-msgstr ""
-
-#: premium/click-tracking.php:795
-#, php-format
-msgid "%s %% of all queries"
-msgstr ""
-
-#: premium/click-tracking.php:800
-msgid "Click tracking insights"
-msgstr ""
-
-#: premium/click-tracking.php:831
-msgid "These posts got the most clicks. This is content users like!"
-msgstr ""
-
-#: premium/click-tracking.php:860
-msgid ""
-"These posts were got clicks from a low ranking. Should they be boosted "
-"higher?"
-msgstr ""
-
-#: premium/click-tracking.php:891
-#, php-format
-msgid "%1$s posts"
-msgstr ""
-
-#: premium/click-tracking.php:896
-msgid ""
-"You have search queries that generate clicks to many posts. Perhaps more "
-"focus would be good?"
-msgstr ""
-
-#: premium/click-tracking.php:904
-msgid "Sorry, no clicks recorded for this period!"
-msgstr ""
-
-#: premium/click-tracking.php:998
-msgid "No search clicks logged."
-msgstr ""
-
-#: premium/common.php:502
-msgid ""
-"Your site is not public. By default, Relevanssi does not search private "
-"sites. If you want to be able to search on this site, either make it public "
-"or add a filter function that returns true on "
-"'relevanssi_multisite_public_status' filter hook."
-msgstr ""
-
-#: premium/common.php:1074
-msgid "Must have"
-msgstr ""
-
-#: premium/contextual-help.php:23
-msgid "Boolean operators"
-msgstr ""
-
-#: premium/contextual-help.php:25
-msgid ""
-"Relevanssi Premium offers limited support for Boolean logic. In addition of "
-"setting the default operator from Relevanssi settings, you can use AND and "
-"NOT operators in searches."
-msgstr ""
-
-#: premium/contextual-help.php:26
-msgid "To use the NOT operator, prefix the search term with a minus sign:"
-msgstr ""
-
-#: premium/contextual-help.php:27
-msgid "cats -dogs"
-msgstr ""
-
-#: premium/contextual-help.php:28
-msgid ""
-"This would only show posts that have the word 'cats' but not the word 'dogs'."
-msgstr ""
-
-#: premium/contextual-help.php:29
-msgid ""
-"To use the AND operator, set the default operator to OR and prefix the "
-"search term with a plus sign:"
-msgstr ""
-
-#: premium/contextual-help.php:30
-msgid "+cats dogs mice"
-msgstr ""
-
-#: premium/contextual-help.php:31
-msgid ""
-"This would show posts that have the word 'cats' and either 'dogs' or 'mice' "
-"or both, and would prioritize posts that have all three."
-msgstr ""
-
-#: premium/contextual-help.php:37
-#, php-format
-msgid ""
-"Permalinks to user profiles may not always work on search results templates. "
-"%1$s should work, but if it doesn't, you can replace it with %2$s."
-msgstr ""
-
-#: premium/contextual-help.php:39
-#, php-format
-msgid ""
-"To control which user meta fields are indexed, you can use the %s option. It "
-"should have a comma-separated list of user meta fields. It can be set like "
-"this (you only need to run this code once):"
-msgstr ""
-
-#: premium/contextual-help.php:41
-#, php-format
-msgid ""
-"For more details on user profiles and search results templates, see %1$sthis "
-"knowledge base entry%2$s."
-msgstr ""
-
-#: premium/contextual-help.php:46
-msgid "User profiles"
-msgstr ""
-
-#: premium/contextual-help.php:58 premium/interface.php:156
-#: premium/interface.php:231
-msgid "Internal links"
-msgstr ""
-
-#: premium/contextual-help.php:60
-msgid ""
-"This option sets how Relevanssi handles internal links that point to your "
-"own site."
-msgstr ""
-
-#: premium/contextual-help.php:61
-msgid ""
-"If you choose 'No special processing', Relevanssi doesn’t care about links "
-"and indexes the link anchor (the text of the link) like it is any other text."
-msgstr ""
-
-#: premium/contextual-help.php:62
-msgid ""
-"If you choose 'Index internal links for target documents only', then the "
-"link is indexed like the link anchor text were the part of the link target, "
-"not the post where the link is."
-msgstr ""
-
-#: premium/contextual-help.php:63
-msgid ""
-"If you choose 'Index internal links for target and source', the link anchor "
-"text will count for both posts."
-msgstr ""
-
-#: premium/contextual-help.php:70
-msgid "Stemming"
-msgstr ""
-
-#: premium/contextual-help.php:72
-msgid ""
-"By default Relevanssi doesn't understand anything about singular word forms, "
-"plurals or anything else. You can, however, add a stemmer that will stem all "
-"the words to their basic form, making all different forms equal in searching."
-msgstr ""
-
-#: premium/contextual-help.php:73
-msgid ""
-"To enable the English-language stemmer, add this to the theme functions.php:"
-msgstr ""
-
-#: premium/contextual-help.php:75
-msgid "After you add the code, rebuild the index to get correct results."
-msgstr ""
-
-#: premium/contextual-help.php:81
-#, php-format
-msgid ""
-"If you have WP CLI installed, Relevanssi Premium has some helpful commands. "
-"Use %s to get a list of available commands."
-msgstr ""
-
-#: premium/contextual-help.php:83
-#, php-format
-msgid "You can also see %1$sthe user manual page%2$s."
-msgstr ""
-
-#: premium/contextual-help.php:88
-msgid "WP CLI"
-msgstr ""
-
-#: premium/contextual-help.php:98
-msgid "Plugin support page"
-msgstr ""
-
-#: premium/indexing.php:1123
-#, php-format
-msgid "Indexed %d taxonomy terms."
-msgstr ""
-
-#: premium/indexing.php:1125
-msgid "No taxonomies to index."
-msgstr ""
-
-#: premium/interface.php:67 premium/interface.php:80
-msgid "API key"
-msgstr ""
-
-#: premium/interface.php:70
-msgid "API key is set"
-msgstr ""
-
-#: premium/interface.php:71
-msgid "Remove the API key."
-msgstr ""
-
-#: premium/interface.php:72 premium/interface.php:85
-msgid ""
-"A valid API key is required to use the automatic update feature and the PDF "
-"indexing. Otherwise the plugin will work just fine without an API key. Get "
-"your API key from Relevanssi.com."
-msgstr ""
-
-#: premium/interface.php:83
-msgid "Set the API key:"
-msgstr ""
-
-#: premium/interface.php:103
-msgid "Disable outside connections"
-msgstr ""
-
-#: premium/interface.php:108
-msgid "Disable update version checking and attachment indexing"
-msgstr ""
-
-#: premium/interface.php:110
-msgid ""
-"If you check this box, Relevanssi will stop all outside connections. This "
-"means the plugin won't check for updates from Relevanssi.com, won't read "
-"attachment contents using Relevanssiservices.com attachment reader (using "
-"custom attachment reader is still allowed), or update plugin translations. "
-"Do not check this box unless you know what you're doing, because this will "
-"disable Relevanssi updates."
-msgstr ""
-
-#: premium/interface.php:126
-msgid "Update translations"
-msgstr ""
-
-#: premium/interface.php:131
-msgid "Check for plugin translation updates"
-msgstr ""
-
-#: premium/interface.php:133
-msgid ""
-"If you check this box, Relevanssi will check for updates to the plugin "
-"translations. At the moment, translations are available for: "
-msgstr ""
-
-#: premium/interface.php:160
-msgid "No special processing for internal links"
-msgstr ""
-
-#: premium/interface.php:161
-msgid "Index internal links for target documents only"
-msgstr ""
-
-#: premium/interface.php:162
-msgid "Index internal links for both target and source"
-msgstr ""
-
-#: premium/interface.php:164
-msgid ""
-"Internal link anchor tags can be indexed for target document, both target "
-"and source or source only. See Help for more details."
-msgstr ""
-
-#: premium/interface.php:192
-msgid "Hide Relevanssi"
-msgstr ""
-
-#: premium/interface.php:197
-msgid "Hide Relevanssi on edit pages"
-msgstr ""
-
-#: premium/interface.php:199
-msgid "Enabling this option hides Relevanssi on all post edit pages."
-msgstr ""
-
-#: premium/interface.php:204
-msgid "Show Relevanssi for admins"
-msgstr ""
-
-#: premium/interface.php:208
-msgid "Show Relevanssi for admins on edit pages"
-msgstr ""
-
-#: premium/interface.php:211
-msgid "Show Relevanssi on edit pages for admins"
-msgstr ""
-
-#: premium/interface.php:215
-#, php-format
-msgid ""
-"If Relevanssi is hidden on post edit pages, enabling this option will show "
-"Relevanssi features for admin-level users. Admin-level users are those with "
-"%1$s capabilities, but if you want to use a different capability, you can "
-"use the %2$s filter to modify that."
-msgstr ""
-
-#: premium/interface.php:262
-#, php-format
-msgid "Post type '%s':"
-msgstr ""
-
-#: premium/interface.php:301
-#, php-format
-msgid "Posts tagged with taxonomy '%s':"
-msgstr ""
-
-#: premium/interface.php:331
-#, php-format
-msgid "Terms in the taxonomy '%s':"
-msgstr ""
-
-#: premium/interface.php:357
-msgid "Recent posts bonus weight:"
-msgstr ""
-
-#: premium/interface.php:377
-msgid "Recent posts bonus cutoff"
-msgstr ""
-
-#: premium/interface.php:380
-msgid "days"
-msgstr ""
-
-#: premium/interface.php:381
-msgid ""
-"Posts newer than the day cutoff specified here will have their weight "
-"multiplied with the bonus above."
-msgstr ""
-
-#: premium/interface.php:399
-msgid "Hide Relevanssi branding"
-msgstr ""
-
-#: premium/interface.php:404 premium/interface.php:408
-#, php-format
-msgid "Don't show Relevanssi branding on the '%s' screen."
-msgstr ""
-
-#: premium/interface.php:404 premium/interface.php:408
-msgid "User Searches"
-msgstr ""
-
-#: premium/interface.php:426
-msgid "Thousands separator"
-msgstr ""
-
-#: premium/interface.php:430
-msgid ""
-"If Relevanssi sees this character between numbers, it'll stick the numbers "
-"together no matter how the character would otherwise be handled. Especially "
-"useful if a space is used as a thousands separator."
-msgstr ""
-
-#: premium/interface.php:446
-msgid "Disable these shortcodes"
-msgstr ""
-
-#: premium/interface.php:450
-msgid ""
-"Enter a comma-separated list of shortcodes. These shortcodes will not be "
-"expanded if expand shortcodes above is enabled. This is useful if a "
-"particular shortcode is causing problems in indexing."
-msgstr ""
-
-#: premium/interface.php:480
-msgid "MySQL columns"
-msgstr ""
-
-#: premium/interface.php:487
-#, php-format
-msgid ""
-"A comma-separated list of %s MySQL table columns to include in the index. "
-"Following columns are available: "
-msgstr ""
-
-#: premium/interface.php:510 premium/interface.php:517
-msgid "Search all subsites"
-msgstr ""
-
-#: premium/interface.php:514
-msgid "Search all subsites."
-msgstr ""
-
-#: premium/interface.php:519
-msgid ""
-"If this option is checked, multisite searches will include all subsites. "
-"Warning: if you have dozens of sites in your network, the searches may "
-"become too slow. This can be overridden from the search form."
-msgstr ""
-
-#: premium/interface.php:525
-msgid "Search some subsites"
-msgstr ""
-
-#: premium/interface.php:535
-msgid ""
-"Add a comma-separated list of blog ID values to have all search forms on "
-"this site search these multisite subsites. This can be overridden from the "
-"search form."
-msgstr ""
-
-#: premium/interface.php:559
-msgid "Indexing user profiles"
-msgstr ""
-
-#: premium/interface.php:564
-msgid "Index user profiles"
-msgstr ""
-
-#: premium/interface.php:568 premium/interface.php:571
-msgid "Index user profiles."
-msgstr ""
-
-#: premium/interface.php:573
-msgid ""
-"Relevanssi will index user profiles. This includes first name, last name, "
-"display name and user description."
-msgstr ""
-
-#: premium/interface.php:574
-msgid ""
-"This may require changes to search results template, see the contextual help."
-msgstr ""
-
-#: premium/interface.php:580
-msgid "Index subscribers"
-msgstr ""
-
-#: premium/interface.php:584 premium/interface.php:587
-msgid "Index also subscriber profiles."
-msgstr ""
-
-#: premium/interface.php:589
-msgid ""
-"By default, Relevanssi indexes authors, editors, contributors and admins, "
-"but not subscribers. You can change that with this option."
-msgstr ""
-
-#: premium/interface.php:596
-msgid "Extra fields"
-msgstr ""
-
-#: premium/interface.php:600
-msgid ""
-"A comma-separated list of extra user fields to include in the index. These "
-"can be user fields or user meta."
-msgstr ""
-
-#: premium/interface.php:616
-msgid "Indexing synonyms"
-msgstr ""
-
-#: premium/interface.php:620
-msgid "Index synonyms"
-msgstr ""
-
-#: premium/interface.php:624 premium/interface.php:627
-msgid "Index synonyms for AND searches."
-msgstr ""
-
-#: premium/interface.php:632
-msgid ""
-"If checked, Relevanssi will use the synonyms in indexing. If you add "
-"dog = hound to the synonym list and enable this feature, every "
-"time the indexer sees hound in post content or post title, it "
-"will index it as hound dog. Thus, the post will be found when "
-"searching with either word. This makes it possible to use synonyms with AND "
-"searches, but will slow down indexing, especially with large databases and "
-"large lists of synonyms. You can use multi-word values, but phrases do not "
-"work."
-msgstr ""
-
-#: premium/interface.php:652
-msgid "Indexing PDF content"
-msgstr ""
-
-#: premium/interface.php:657
-msgid "Index for parent"
-msgstr ""
-
-#: premium/interface.php:662
-msgid "Index PDF contents for parent post"
-msgstr ""
-
-#: premium/interface.php:665
-#, php-format
-msgid ""
-"If checked, Relevanssi indexes the PDF content both for the attachment post "
-"and the parent post. You can control the attachment post visibility by "
-"indexing or not indexing the post type %s."
-msgstr ""
-
-#: premium/interface.php:668
-#, php-format
-msgid ""
-"You have not chosen to index the post type %s. You won't see any PDF content "
-"in the search results, unless you check this option."
-msgstr ""
-
-#: premium/interface.php:672
-msgid ""
-"Searching for PDF contents will now return both the attachment itself and "
-"the parent post. Are you sure you want both in the results?"
-msgstr ""
-
-#: premium/interface.php:696
-msgid "Indexing taxonomy terms"
-msgstr ""
-
-#: premium/interface.php:701
-msgid "Index taxonomy terms"
-msgstr ""
-
-#: premium/interface.php:706
-msgid "Index taxonomy terms."
-msgstr ""
-
-#: premium/interface.php:708
-msgid ""
-"Relevanssi will index taxonomy terms (categories, tags and custom "
-"taxonomies). Searching for taxonomy term name will return the taxonomy term "
-"page."
-msgstr ""
-
-#: premium/interface.php:743
-#, php-format
-msgid "Index terms for taxonomy %s"
-msgstr ""
-
-#: premium/interface.php:795
-msgid "Index post type archives"
-msgstr ""
-
-#: premium/interface.php:799 premium/interface.php:802
-msgid "Index post type archives."
-msgstr ""
-
-#: premium/interface.php:805
-#, php-format
-msgid ""
-"Relevanssi will index post type archive pages. By default Relevanssi indexes "
-"the post type label and the description set when the post type is "
-"registered. If you want to index some other content, you can use the %s "
-"filter hook to adjust the content."
-msgstr ""
-
-#: premium/interface.php:811
-msgid "Post types indexed"
-msgstr ""
-
-#: premium/interface.php:819
-#, php-format
-msgid ""
-"This list includes all post types that are not built in and have %1$s set to "
-"true. If you want to adjust the list, you can use the %2$s filter hook."
-msgstr ""
-
-#: premium/interface.php:836
-msgid "Number of excerpt snippets"
-msgstr ""
-
-#: premium/interface.php:848
-msgid ""
-"The maximum number of excerpt snippets Relevanssi will create for each post."
-msgstr ""
-
-#: premium/interface.php:965
-msgid "Options updated!"
-msgstr ""
-
-#: premium/interface.php:1199
-msgid "Import / Export options"
-msgstr ""
-
-#: premium/interface.php:1207
-msgid "Related"
-msgstr ""
-
-#: premium/interface.php:1215
-msgid "Spam Block"
-msgstr ""
-
-#: premium/interface.php:1223 premium/tabs/support-tab.php:26
-msgid "Support"
-msgstr ""
-
-#: premium/interface.php:1236
-msgid "Reset the option"
-msgstr ""
-
-#: premium/interface.php:1250
-msgid "Option successfully reset!"
-msgstr ""
-
-#: premium/interface.php:1252
-msgid "Couldn't reset the option, reload the page to try again."
-msgstr ""
-
-#: premium/interface.php:1257
-msgid "Reset the relevanssi_words option"
-msgstr ""
-
-#: premium/interface.php:1264
-#, php-format
-msgid ""
-"If you are having problems with the Did you mean? feature, you can reset the "
-"%1$s option that keeps a cache. Next time the Did you mean? suggestions are "
-"needed the option is regenerated."
-msgstr ""
-
-#: premium/interface.php:1314
-#, php-format
-msgid ""
-"The API key is not set. Please enter your API key in the %1$sthe Relevanssi "
-"settings%2$s. If you don't have one, %3$syou can buy a new license here%2$s."
-msgstr ""
-
-#: premium/interface.php:1322
-#, php-format
-msgid ""
-"Your API key is set, but it looks like you don't have a valid license. "
-"%1$sYou can buy a new license here%2$s."
-msgstr ""
-
-#: premium/interface.php:1342 premium/interface.php:1428
-msgid "Pinned keywords"
-msgstr ""
-
-#: premium/interface.php:1343 premium/interface.php:1437
-msgid "Excluded keywords"
-msgstr ""
-
-#: premium/interface.php:1344
-msgid "Pin for all searches"
-msgstr ""
-
-#: premium/interface.php:1345
-msgid "Exclude post"
-msgstr ""
-
-#: premium/interface.php:1346
-msgid "Ignore post content"
-msgstr ""
-
-#: premium/interface.php:1424
-msgid "Relevanssi pinning"
-msgstr ""
-
-#: premium/interface.php:1451 premium/post-metabox.php:96
-msgid "Pin this post for all searches it appears in."
-msgstr ""
-
-#: premium/interface.php:1459 premium/post-metabox.php:106
-msgid "Exclude this post or page from the index."
-msgstr ""
-
-#: premium/interface.php:1467 premium/post-metabox.php:111
-msgid "Ignore post content in the indexing."
-msgstr ""
-
-#: premium/network-options.php:47
-msgid "Relevanssi network options"
-msgstr ""
-
-#: premium/network-options.php:78
-msgid "Copy options from one site to other sites"
-msgstr ""
-
-#: premium/network-options.php:79
-msgid ""
-"Choose a blog and copy all the options from that blog to all other blogs "
-"that have active Relevanssi Premium. Be careful! There's no way to undo the "
-"procedure!"
-msgstr ""
-
-#: premium/network-options.php:86
-msgid "Copy options"
-msgstr ""
-
-#: premium/network-options.php:104
-msgid "Copy options to all other subsites"
-msgstr ""
-
-#: premium/network-options.php:154
-#, php-format
-msgid "Copying options from blog %s"
-msgstr ""
-
-#: premium/network-options.php:170
-#, php-format
-msgid "Processing blog %s:"
-msgstr ""
-
-#: premium/network-options.php:172
-msgid "Relevanssi is not active in this blog."
-msgstr ""
-
-#: premium/network-options.php:183
-msgid "Options updated."
-msgstr ""
-
-#: premium/pdf-upload.php:17
-msgid "Post excluded from the index by the user."
-msgstr ""
-
-#: premium/pdf-upload.php:18
-msgid ""
-"Relevanssi is in privacy mode and not allowed to contact Relevanssiservices."
-"com."
-msgstr ""
-
-#: premium/pdf-upload.php:19
-msgid "Attachment MIME type blocked."
-msgstr ""
-
-#: premium/pdf-upload.php:20
-msgid "Attachment file size is too large."
-msgstr ""
-
-#: premium/pdf-upload.php:21
-msgid "Attachment reading in process, please try again later."
-msgstr ""
-
-#: premium/pdf-upload.php:22
-msgid "Server did not respond."
-msgstr ""
-
-#: premium/pdf-upload.php:176
-msgid "Relevanssi attachment controls"
-msgstr ""
-
-#: premium/pdf-upload.php:202
-msgid "Reread the attachment content"
-msgstr ""
-
-#: premium/pdf-upload.php:202
-msgid "Read the attachment content"
-msgstr ""
-
-#: premium/pdf-upload.php:205
-msgid "Indexer will fetch the file from your server."
-msgstr ""
-
-#: premium/pdf-upload.php:208
-msgid "The file will be uploaded to the indexer."
-msgstr ""
-
-#: premium/pdf-upload.php:218
-msgid "No API key set. API key is required for attachment indexing."
-msgstr ""
-
-#: premium/pdf-upload.php:231
-msgid ""
-"The attachment content has been modified and won't be reread from the file "
-"when doing a general rereading. If you want to reread the attachment "
-"contents from the file, you can force rereading here."
-msgstr ""
-
-#: premium/pdf-upload.php:236
-msgid "Attachment content"
-msgstr ""
-
-#: premium/pdf-upload.php:248
-msgid ""
-"Relevanssi is currently in process of reading the file contents, please "
-"return here later."
-msgstr ""
-
-#: premium/pdf-upload.php:251
-msgid "Attachment error message"
-msgstr ""
-
-#: premium/pdf-upload.php:262
-msgid "No attachment content found for this post at the moment."
-msgstr ""
-
-#: premium/pdf-upload.php:533
-msgid "Could not save the file content to the custom field."
-msgstr ""
-
-#: premium/pinning.php:199
-msgid "(pinned)"
-msgstr ""
-
-#: premium/pinning.php:210
-#, php-format
-msgid "Pin for '%s'"
-msgstr ""
-
-#: premium/pinning.php:214
-#, php-format
-msgid "Unpin for '%s'"
-msgstr ""
-
-#: premium/post-metabox.php:43
-msgid "Relevanssi"
-msgstr ""
-
-#: premium/post-metabox.php:79
-msgid "How Relevanssi sees this post"
-msgstr ""
-
-#: premium/post-metabox.php:81
-msgid "Pin this post"
-msgstr ""
-
-#: premium/post-metabox.php:82
-msgid ""
-"A comma-separated list of single word keywords or multi-word phrases. If any "
-"of these keywords are present in the search query, this post will be moved "
-"on top of the search results."
-msgstr ""
-
-#: premium/post-metabox.php:83
-msgid "Pinned keywords for this post"
-msgstr ""
-
-#: premium/post-metabox.php:89
-msgid ""
-"NOTE: You have set the post content weight to 0. This means that keywords "
-"that don't appear elsewhere in the post won't work, because they are indexed "
-"as part of the post content. If you set the post content weight to any "
-"positive value, the pinned keywords will work again."
-msgstr ""
-
-#: premium/post-metabox.php:99
-msgid "Exclude this post"
-msgstr ""
-
-#: premium/post-metabox.php:100
-msgid ""
-"A comma-separated list of single word keywords or multi-word phrases. If any "
-"of these keywords are present in the search query, this post will be removed "
-"from the search results."
-msgstr ""
-
-#: premium/post-metabox.php:101
-msgid "Excluded keywords for this post"
-msgstr ""
-
-#: premium/post-metabox.php:373 premium/tabs/related-tab.php:103
-#: premium/templates/relevanssi-related.php:25
-msgid "Related Posts"
-msgstr ""
-
-#: premium/post-metabox.php:376
-msgid "Don't append the related posts to this page."
-msgstr ""
-
-#: premium/post-metabox.php:379
-msgid "Don't show this as a related post for any post."
-msgstr ""
-
-#: premium/post-metabox.php:381
-msgid "Related Posts keywords"
-msgstr ""
-
-#: premium/post-metabox.php:382
-msgid ""
-"A comma-separated list of keywords to use for the Related Posts feature. "
-"Anything entered here will used when searching for related posts. Using "
-"phrases with quotes is allowed, but will restrict the related posts to posts "
-"including that phrase."
-msgstr ""
-
-#: premium/post-metabox.php:383
-msgid "Related posts keywords for this post"
-msgstr ""
-
-#: premium/post-metabox.php:386
-msgid ""
-"A comma-separated list of post IDs to use as related posts for this post"
-msgstr ""
-
-#: premium/post-metabox.php:389
-msgid ""
-"These are the related posts Relevanssi currently will show for this post:"
-msgstr ""
-
-#: premium/post-metabox.php:398
-msgid "These posts are excluded from related posts for this post"
-msgstr ""
-
-#: premium/post-metabox.php:405
-msgid "Insights"
-msgstr ""
-
-#: premium/post-metabox.php:541
-msgid "not this"
-msgstr ""
-
-#: premium/post-metabox.php:575
-msgid "use this"
-msgstr ""
-
-#: premium/post-metabox.php:586
-msgid "Nothing excluded."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:53
-msgid "Read all unread attachments"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:58
-#, php-format
-msgid ""
-"Clicking the button will read the contents of all the unread attachments "
-"files and store the contents to the %s custom field for future indexing. "
-"Attachments with errors will be skipped, except for the files with timeout "
-"and connection related errors: those will be attempted again."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:68
-msgid "State of the attachments"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:83
-msgid "document has read attachment content."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:84
-msgid "document has an attachment reading error."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:86
-msgid "Show errors"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:88
-msgid "Attachment reading errors"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:93
-msgid "Server location"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:96
-msgid "United States"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:97
-msgid "European Union"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:102
-msgid "Reset attachment content"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:104
-msgid "Reset all attachment data from posts"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:106
-#, php-format
-msgid ""
-"This will remove all %1$s and %2$s custom fields from all posts. If you want "
-"to reread all attachment files, use this to clean up; clicking the reading "
-"button doesn't wipe the slate clean like it does in regular indexing."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:107
-msgid ""
-"If you have posts where you have modified the attachment content after "
-"reading it, this will leave those posts untouched."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:112
-msgid "Read new files"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:116 premium/tabs/attachments-tab.php:119
-msgid "Read new files automatically"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:121
-msgid ""
-"If this option is enabled, Relevanssi will automatically read the contents "
-"of new attachments as they are uploaded. This may cause unexpected delays in "
-"uploading posts. If this is not enabled, new attachments are not read "
-"automatically and need to be manually read and reindexed."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:127
-msgid "Upload files"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:131 premium/tabs/attachments-tab.php:134
-msgid "Upload files for reading"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:136
-msgid ""
-"By default, Relevanssi only sends a link to the attachment to the attachment "
-"reader. If your files are not accessible (for example your site is inside an "
-"intranet, password protected, or a local dev site, and the files can't be "
-"downloaded if given the URL of the file), check this option to upload the "
-"whole file to the reader."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:142
-msgid "Link to files"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:146 premium/tabs/attachments-tab.php:149
-msgid "Link search results directly to the files"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:151
-msgid ""
-"If this option is checked, attachment results in search results will link "
-"directly to the file. Otherwise the results will link to the attachment page."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:154
-#, php-format
-msgid ""
-"You're not indexing the %s post type, so this setting doesn't have any "
-"effect."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:158
-#, php-format
-msgid ""
-"You're not indexing the %s post type and haven't connected the files to the "
-"parent posts in the indexing settings. You won't be seeing any files in the "
-"results."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:164
-msgid "Instructions"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:167
-#, php-format
-msgid ""
-"When Relevanssi reads attachment content, the text is extracted and saved in "
-"the %s custom field for the attachment post. This alone does not add the "
-"attachment content in the Relevanssi index; it just makes the contents of "
-"the attachments easily available for the regular Relevanssi indexing process."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:169
-#, php-format
-msgid ""
-"There are two ways to index the attachment content. If you choose to index "
-"the %s post type, Relevanssi will show the attachment posts in the results."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:170
-msgid ""
-"You can also choose to index the attachment content for the parent post, in "
-"which case Relevanssi will show the parent post in the results (this setting "
-"can be found on the indexing settings). Obviously this does not find the "
-"content in attachments that are not attached to another post – if you just "
-"upload a file to the WordPress Media Library, it is not attached and won't "
-"be found unless you index the attachment posts."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:171
-msgid ""
-"If you need to reread a file, you can do read individual files from Media "
-"Library. Choose an attachment and click 'Edit more details' to read the "
-"content."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:175
-msgid "Key not valid?"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:177
-msgid ""
-"Are you a new Relevanssi customer and seeing 'Key xxxxxx is not valid' error "
-"messages? New API keys are delivered to the server once per hour, so if try "
-"again an hour later, the key should work."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:178
-msgid ""
-"A 'Key 0 is not valid' error message means you're on a multisite, but have "
-"only entered the API key in the subsite settings. Set the API key in the "
-"network settings to fix that."
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:182
-msgid "Important!"
-msgstr ""
-
-#: premium/tabs/attachments-tab.php:184
-msgid ""
-"In order to read the contents of the files, the files are sent over to "
-"Relevanssiservices.com, a processing service hosted on a Digital Ocean "
-"Droplet. There are two servers: one in the US and another in the EU. The "
-"service creates a working copy of the files. The copy is removed after the "
-"file has been processed, but there are no guarantees that someone with an "
-"access to the server couldn't see the files. Do not read files with "
-"confidential information in them. In order to block individual files from "
-"reading, use the Relevanssi post controls on attachment edit page to exclude "
-"attachment posts from indexing."
-msgstr ""
-
-#: premium/tabs/import-export-tab.php:19
-msgid "Import or export options"
-msgstr ""
-
-#: premium/tabs/import-export-tab.php:21
-msgid ""
-"Here you find the current Relevanssi Premium options in a text format. Copy "
-"the contents of the text field to make a backup of your settings. You can "
-"also paste new settings here to change all settings at the same time. This "
-"is useful if you have default settings you want to use on every system."
-msgstr ""
-
-#: premium/tabs/import-export-tab.php:25
-msgid "Current Settings"
-msgstr ""
-
-#: premium/tabs/import-export-tab.php:39
-msgid "Import settings"
-msgstr ""
-
-#: premium/tabs/import-export-tab.php:46
-msgid ""
-"Note! Make sure you've got correct settings from a right version of "
-"Relevanssi. Settings from a different version of Relevanssi may or may not "
-"work and may or may not mess your settings."
-msgstr ""
-
-#: premium/tabs/redirects-tab.php:28
-msgid ""
-"If you want a particular search to always lead to a specific page, you can "
-"use the redirects. Whenever the search query matches a redirect, the search "
-"is automatically bypassed and the user is redirected to the target page."
-msgstr ""
-
-#: premium/tabs/redirects-tab.php:30
-msgid ""
-"Enter the search term and the target URL, which may be relative to your site "
-"home page or an absolute URL. If \"Partial match\" is checked, the redirect "
-"happens if the query word appears anywhere in the search query, even inside "
-"a word, so use it with care. If the search query matches multiple "
-"redirections, the first one it matches will trigger."
-msgstr ""
-
-#: premium/tabs/redirects-tab.php:32
-msgid "The \"Hits\" column shows how many times each redirect has been used."
-msgstr ""
-
-#: premium/tabs/redirects-tab.php:37
-msgid "Redirect empty searches"
-msgstr ""
-
-#: premium/tabs/redirects-tab.php:39
-msgid ""
-"Enter an URL here to redirect all searches that find nothing to this URL."
-msgstr ""
-
-#: premium/tabs/redirects-tab.php:42
-msgid "Redirect searches without terms"
-msgstr ""
-
-#: premium/tabs/redirects-tab.php:44
-msgid "Enter an URL here to redirect all searches without any search terms."
-msgstr ""
-
-#: premium/tabs/redirects-tab.php:53 premium/tabs/redirects-tab.php:115
-msgid "Partial match"
-msgstr ""
-
-#: premium/tabs/redirects-tab.php:54
-msgid "URL"
-msgstr ""
-
-#: premium/tabs/redirects-tab.php:65 premium/tabs/redirects-tab.php:107
-msgid "Copy"
-msgstr ""
-
-#: premium/tabs/redirects-tab.php:98
-msgid "Query string"
-msgstr ""
-
-#: premium/tabs/redirects-tab.php:127
-msgid "Target URL"
-msgstr ""
-
-#: premium/tabs/redirects-tab.php:153
-msgid "Add a redirect"
-msgstr ""
-
-#: premium/tabs/redirects-tab.php:155
-msgid "Once you're done, remember to click the save button below!"
-msgstr ""
-
-#: premium/tabs/related-tab.php:105
-msgid ""
-"Relevanssi Related Posts feature shows related posts on posts pages, based "
-"on keywords like post title, tags and categories. This feature uses the "
-"Relevanssi index to find the best-matching related posts. All results are "
-"cached, so your site performance won't suffer."
-msgstr ""
-
-#: premium/tabs/related-tab.php:108
-#, php-format
-msgid ""
-"A pro tip: you can regenerate related posts for all posts with the WP CLI "
-"command %s."
-msgstr ""
-
-#: premium/tabs/related-tab.php:110
-msgid "Displaying the related posts"
-msgstr ""
-
-#: premium/tabs/related-tab.php:115
-msgid "Enable related posts"
-msgstr ""
-
-#: premium/tabs/related-tab.php:120
-msgid "If this is unchecked, related posts will be completely disabled."
-msgstr ""
-
-#: premium/tabs/related-tab.php:125 premium/tabs/related-tab.php:128
-msgid "Automatically add to these post types"
-msgstr ""
-
-#: premium/tabs/related-tab.php:153
-#, php-format
-msgid ""
-"The related posts will be automatically displayed for these post types. The "
-"element is added using %1$s filter hook with priority 99 (you can adjust "
-"that with the %2$s filter hook)."
-msgstr ""
-
-#: premium/tabs/related-tab.php:155
-#, php-format
-msgid ""
-"If you don't choose to display the related posts automatically, you need to "
-"add them manually to your template. You can use the template function %1$s "
-"or the shortcode %2$s to display the related posts."
-msgstr ""
-
-#: premium/tabs/related-tab.php:160
-msgid "Choosing the related posts"
-msgstr ""
-
-#: premium/tabs/related-tab.php:164 premium/tabs/related-tab.php:167
-msgid "Keyword sources"
-msgstr ""
-
-#: premium/tabs/related-tab.php:174
-msgid "Title"
-msgstr ""
-
-#: premium/tabs/related-tab.php:213
-msgid "Restrict to taxonomy "
-msgstr ""
-
-#: premium/tabs/related-tab.php:225
-msgid ""
-"The sources Relevanssi uses for related post keywords. Keywords from these "
-"sources are then used to search the Relevanssi index to find related posts. "
-"Make sure you choose something, otherwise you won't see results or will see "
-"random results. In addition of these sources, you can also define your own "
-"keywords for each post from the post edit screen."
-msgstr ""
-
-#: premium/tabs/related-tab.php:226
-msgid ""
-"If you choose to restrict to the taxonomy, those keywords will only match in "
-"the same category. For example restricted category search terms will only "
-"match to category, not to post content. This may lead to better precision, "
-"depending on how the taxonomy terms are used."
-msgstr ""
-
-#: premium/tabs/related-tab.php:232
-msgid ""
-"These taxonomies are missing here, because Relevanssi isn't set to index "
-"them:"
-msgstr ""
-
-#: premium/tabs/related-tab.php:242
-msgid "Number of posts"
-msgstr ""
-
-#: premium/tabs/related-tab.php:245
-msgid "The number of related posts to show."
-msgstr ""
-
-#: premium/tabs/related-tab.php:249
-msgid "Months to use"
-msgstr ""
-
-#: premium/tabs/related-tab.php:252
-msgid ""
-"Use only posts published within this many months. (For more fine-grained "
-"date controls, use filters.)"
-msgstr ""
-
-#: premium/tabs/related-tab.php:256 premium/tabs/related-tab.php:259
-msgid "Post types to use"
-msgstr ""
-
-#: premium/tabs/related-tab.php:270
-msgid "Matching post type"
-msgstr ""
-
-#: premium/tabs/related-tab.php:271
-msgid "Uncheck this option to choose other post types."
-msgstr ""
-
-#: premium/tabs/related-tab.php:303
-msgid ""
-"The post types to use for related posts. Matching post type means that for "
-"each post type, only posts from the same post type are used for related "
-"posts."
-msgstr ""
-
-#: premium/tabs/related-tab.php:307
-msgid "No related posts found"
-msgstr ""
-
-#: premium/tabs/related-tab.php:310
-msgid "Show nothing"
-msgstr ""
-
-#: premium/tabs/related-tab.php:311
-msgid "Random posts"
-msgstr ""
-
-#: premium/tabs/related-tab.php:312
-msgid "Random posts from same category"
-msgstr ""
-
-#: premium/tabs/related-tab.php:314
-msgid ""
-"What to do when no related posts are found? The options are to show nothing "
-"and just disable the whole element, or to show random posts (either fully "
-"random, or from the same category). Do note that the related posts are "
-"cached, so the random posts do not change on every page load."
-msgstr ""
-
-#: premium/tabs/related-tab.php:318
-msgid "Not enough related posts found"
-msgstr ""
-
-#: premium/tabs/related-tab.php:321
-msgid "Show the found posts"
-msgstr ""
-
-#: premium/tabs/related-tab.php:322
-msgid "Fill with random posts"
-msgstr ""
-
-#: premium/tabs/related-tab.php:323
-msgid "Fill with random posts from same category"
-msgstr ""
-
-#: premium/tabs/related-tab.php:325
-msgid ""
-"What to do when not enough related posts are found? The options are to show "
-"what was found, or to fill up the display with random posts. Do note that "
-"the related posts are cached, so the random posts do not change on every "
-"page load."
-msgstr ""
-
-#: premium/tabs/related-tab.php:330
-msgid "Style options"
-msgstr ""
-
-#: premium/tabs/related-tab.php:332
-msgid ""
-"When you add the related posts to your site, Relevanssi will use a template "
-"to print out the results. These settings control how that template displays "
-"the posts. If you need to modify the related posts in a way these settings "
-"do not allow, you can always create your own template."
-msgstr ""
-
-#: premium/tabs/related-tab.php:337
-#, php-format
-msgid ""
-"To create your own template, it's best if you begin with the default "
-"Relevanssi template, which can be found in the file %1$s. Copy the template "
-"in the %2$s folder in your theme and make the necessary changes. Relevanssi "
-"will then use your template file to display the related posts."
-msgstr ""
-
-#: premium/tabs/related-tab.php:344
-msgid "Display titles"
-msgstr ""
-
-#: premium/tabs/related-tab.php:349
-msgid "Display titles for related posts."
-msgstr ""
-
-#: premium/tabs/related-tab.php:355
-msgid "Display thumbnails"
-msgstr ""
-
-#: premium/tabs/related-tab.php:360
-msgid "Display thumbnails for related posts."
-msgstr ""
-
-#: premium/tabs/related-tab.php:362
-msgid ""
-"If enabled, this will show the featured image for the post if the post has "
-"one."
-msgstr ""
-
-#: premium/tabs/related-tab.php:368
-msgid "Default thumbnail"
-msgstr ""
-
-#: premium/tabs/related-tab.php:374
-msgid "Select image"
-msgstr ""
-
-#: premium/tabs/related-tab.php:376
-msgid ""
-"If a post doesn't have a featured image, this image will be used instead."
-msgstr ""
-
-#: premium/tabs/related-tab.php:380
-msgid "Check this post to remove the default thumbnail."
-msgstr ""
-
-#: premium/tabs/related-tab.php:387
-msgid "Display excerpts"
-msgstr ""
-
-#: premium/tabs/related-tab.php:392
-msgid "Display excerpts for related posts."
-msgstr ""
-
-#: premium/tabs/related-tab.php:395
-#, php-format
-msgid ""
-"This uses the manually created post excerpt if one exists, otherwise the "
-"beginning of the post is used. Default length is 50 characters, use the %s "
-"filter hook to adjust that."
-msgstr ""
-
-#: premium/tabs/related-tab.php:401
-msgid "Minimum width"
-msgstr ""
-
-#: premium/tabs/related-tab.php:402
-msgid "in pixels"
-msgstr ""
-
-#: premium/tabs/related-tab.php:407
-msgid "The minimum width of the related post element."
-msgstr ""
-
-#: premium/tabs/related-tab.php:412
-msgid "Caching"
-msgstr ""
-
-#: premium/tabs/related-tab.php:414
-msgid ""
-"The related posts are cached using WordPress transients. The related posts "
-"for each post are stored in a transient that is stored for two weeks. The "
-"cache for each post is flushed whenever the post is saved. When a post is "
-"made non-public (returned to draft, trashed), Relevanssi automatically "
-"flushes all related post caches where that post appears."
-msgstr ""
-
-#: premium/tabs/related-tab.php:419
-msgid "Use cache for admins"
-msgstr ""
-
-#: premium/tabs/related-tab.php:424
-msgid "Use the cache for admin users."
-msgstr ""
-
-#: premium/tabs/related-tab.php:426
-msgid ""
-"Disable this option when adjusting the settings to see changes on the site."
-msgstr ""
-
-#: premium/tabs/related-tab.php:432
-msgid "Flush cache"
-msgstr ""
-
-#: premium/tabs/related-tab.php:437
-msgid "Flush the caches."
-msgstr ""
-
-#: premium/tabs/related-tab.php:439
-msgid "Check this box to flush all related posts caches."
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:42
-msgid "Spam Blocking"
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:44
-msgid ""
-"These tools can be used to block spam searches on your site. It's best if "
-"the spam searches can be blocked earlier on server level before WordPress "
-"starts at all, but if that's not possible, this is a fine option."
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:50
-#, php-format
-msgid ""
-"These filters are applied to all searches done using the %1$s parameter, the "
-"%2$s pretty URLs (if your pretty URLs are using a different prefix, you can "
-"use the %3$s filter hook to adjust the spam block) and also on page views "
-"with the %4$s parameter."
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:59
-msgid ""
-"You can figure out the suitable keywords from your User searches page. Look "
-"for common terms. Often spam queries contain URLs, and the top level domain "
-"names are good keywords, things like '.shop', '.online', '.com' – those "
-"appear rarely in legitimate searches."
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:64
-msgid "Keyword spam blocking"
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:66
-msgid ""
-"Enter keywords, one per line. If these keywords appear anywhere in the "
-"search string, the search will be stopped. Use as short keywords as "
-"possible, but be careful to avoid blocking legitimate searches. The keywords "
-"are case insensitive."
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:69
-msgid "Regex keywords"
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:72
-#, php-format
-msgid ""
-"These keywords support the use of regular expressions with preg_match(). The "
-"keywords will be wrapped with %1$s."
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:75
-msgid "Block Chinese queries"
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:77
-msgid "Block queries that contain Chinese characters."
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:80
-msgid "Block Cyrillic queries"
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:82
-msgid "Block queries that contain Cyrillic characters."
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:85
-msgid "Block emoji queries"
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:87
-msgid "Block queries that contain emoji characters."
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:90
-msgid "Block bot queries"
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:92
-msgid ""
-"Block queries from bots. Only applied to searches, not to page views with "
-"highlights."
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:95
-msgid "Current list of bots: "
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:101
-#, php-format
-msgid "You can add new bots to the list with the filter hook %1$s."
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:108
-msgid "Blocking bots"
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:110
-msgid ""
-"You can use the Relevanssi spam block to also block requests from bots. In "
-"general there's very little reason to allow bots to crawl search results "
-"pages. They can create lots of really quite pointless traffic. On one of my "
-"sites, out of 20.000 search queries, 16.000 were useless queries by the Bing "
-"bot. Nice bots will obey the robots.txt instructions. This code snippet adds "
-"robots.txt rules that block rule-obeying bots from accessing search results "
-"pages:"
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:123
-msgid "Blocking at the server level"
-msgstr ""
-
-#: premium/tabs/spamblock-tab.php:125
-msgid ""
-"It's best if the blocking is done before WordPress starts up in the first "
-"place: that will increase security and will save server resources. These "
-"tools can be used to block bot traffic on your site, but using them requires "
-"expertise on server settings. Use them only if you know what you're doing, "
-"or have a professional help you."
-msgstr ""
-
-#: premium/tabs/support-tab.php:38
-#, php-format
-msgid ""
-"This form sends out an email to the Relevanssi support. If you have a "
-"question, please fill in the form below and we will get back to you as soon "
-"as possible. If you don't hear from us in a day or two, it's possible your "
-"email has gone astray. In that case, please contact us again and use %1$sthe "
-"support form at Relevanssi.com%2$s. You can also email us directly at %3$s. "
-"Expect slower response times during June and July."
-msgstr ""
-
-#: premium/tabs/support-tab.php:49
-#, php-format
-msgid ""
-"We have a large knowledge base. %1$sTake a look there%2$s, perhaps your "
-"question is already answered there."
-msgstr ""
-
-#: premium/tabs/support-tab.php:53
-msgid ""
-"Instead of telling us \"X doesn't work\", please try be as specific as "
-"possible. Please tell us what you expect to happen and what actually happens."
-msgstr ""
-
-#: premium/tabs/support-tab.php:55
-msgid ""
-"Feel free to ask questions in English or Finnish. Please do not send us "
-"video questions."
-msgstr ""
-
-#: premium/tabs/support-tab.php:62
-msgid "Your email address"
-msgstr ""
-
-#: premium/tabs/support-tab.php:66
-msgid "Subject"
-msgstr ""
-
-#: premium/tabs/support-tab.php:70
-msgid "Message"
-msgstr ""
-
-#: premium/tabs/support-tab.php:75
-msgid "Send"
-msgstr ""
-
-#: premium/tabs/support-tab.php:111
-msgid "Email sent!"
-msgstr ""
-
-#: premium/tabs/support-tab.php:117
-msgid "Email failed!"
-msgstr ""
diff --git a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.cs_CZ b/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.cs_CZ
deleted file mode 100644
index 9e8b426a..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.cs_CZ
+++ /dev/null
@@ -1,327 +0,0 @@
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.de_DE b/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.de_DE
deleted file mode 100644
index be4105ea..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.de_DE
+++ /dev/null
@@ -1,1037 +0,0 @@
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.en_CA b/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.en_CA
deleted file mode 100644
index 86215bda..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.en_CA
+++ /dev/null
@@ -1,323 +0,0 @@
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.en_GB b/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.en_GB
deleted file mode 100644
index 86215bda..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.en_GB
+++ /dev/null
@@ -1,323 +0,0 @@
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.en_US b/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.en_US
deleted file mode 100644
index 86215bda..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.en_US
+++ /dev/null
@@ -1,323 +0,0 @@
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.es_ES b/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.es_ES
deleted file mode 100644
index 4dbeea01..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.es_ES
+++ /dev/null
@@ -1,386 +0,0 @@
-
diff --git a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.fi b/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.fi
deleted file mode 100644
index c9e56028..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.fi
+++ /dev/null
@@ -1,365 +0,0 @@
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.fr_FR b/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.fr_FR
deleted file mode 100644
index 87290ad5..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.fr_FR
+++ /dev/null
@@ -1,72 +0,0 @@
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.it_IT b/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.it_IT
deleted file mode 100644
index 10aa1b0f..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.it_IT
+++ /dev/null
@@ -1,666 +0,0 @@
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.pt_BR b/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.pt_BR
deleted file mode 100644
index b0798a02..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.pt_BR
+++ /dev/null
@@ -1,173 +0,0 @@
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.zh_TW b/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.zh_TW
deleted file mode 100644
index 5e13ccad..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/stopwords/stopwords.zh_TW
+++ /dev/null
@@ -1,769 +0,0 @@
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/relevanssi-premium/uninstall.php b/wp/wp-content/plugins/relevanssi-premium/uninstall.php
deleted file mode 100644
index ff56fb0c..00000000
--- a/wp/wp-content/plugins/relevanssi-premium/uninstall.php
+++ /dev/null
@@ -1,32 +0,0 @@
-get_col( "SELECT blog_id FROM $wpdb->blogs" );
- $old_blogid = $wpdb->blogid;
- foreach ( $blogids as $uninstall_blog_id ) {
- switch_to_blog( $uninstall_blog_id );
- relevanssi_uninstall();
- restore_current_blog();
- }
-
- delete_site_option( 'relevanssi_api_key' );
-} else {
- relevanssi_uninstall();
-}
diff --git a/wp/wp-content/plugins/search-filter-divi/README.txt b/wp/wp-content/plugins/search-filter-divi/README.txt
deleted file mode 100644
index d88a7bb5..00000000
--- a/wp/wp-content/plugins/search-filter-divi/README.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-=== Search & Filter Pro - Divi Extension ===
-Contributors: CodeAmp
-Donate link:
-Tags: posts, custom posts, products, category, filter, taxonomy, post meta, custom fields, search, wordpress, post type, post date, author
-Requires at least: 4.0
-Tested up to: 5.4
-Stable tag: 1.0.7
-
-A bridge Plugin enabling easy integration of the Divi Blog, Portfolio and Shop modules with Search & Filter Pro
-
-== Description ==
-
-A bridge Plugin enabling easy integration of the Divi Blog, Portfolio and Shop modules with Search & Filter Pro
-
-
-== Installation ==
-
-
-= Uploading in WordPress Dashboard =
-
-1. Navigate to the 'Add New' in the plugins dashboard
-2. Navigate to the 'Upload' area
-3. Select `search-filter-divi.zip` from your computer
-4. Click 'Install Now'
-5. Activate the plugin in the Plugin dashboard
-
-
-= Using FTP =
-
-1. Download `search-filter-divi.zip`
-2. Extract the `search-filter-divi` directory to your computer
-3. Upload the `search-filter-divi` directory to the `/wp-content/plugins/` directory
-4. Activate the plugin in the Plugin dashboard
-
-
-== Frequently Asked Questions ==
-
-
-== Screenshots ==
-
-
-== Changelog ==
-
-= 1.0.7 =
-* Fix - an with our search form no longer showing up in the Divi Builder
-
-= 1.0.6 =
-* Fix - a PHP issue with paramater order
-
-= 1.0.5 =
-* Fix - an issue with pagination not working properly when using modules + filtering on the homepage
-* Fix - a PHP 8 issue
-* Add support for wp pagenavi plugin
-* Add hooks before/after the posts module
-
-= 1.0.4 =
-* Fix - an with our query for fetching search forms not being handled correctly in certain situations
-
-= 1.0.3 =
-* Fix an issue with custom CSS classes being lost with S&F results/modules
-
-= 1.0.2 =
-* Fix an issue with an option disappearing from the Blog module
-
-= 1.0.1 =
-* Fix an issue with the Shop module not being filtered
-
-= 1.0.0 =
-* Initial release
-
-== Upgrade Notice ==
-
diff --git a/wp/wp-content/plugins/search-filter-divi/includes/loader.php b/wp/wp-content/plugins/search-filter-divi/includes/loader.php
deleted file mode 100644
index 07f5daeb..00000000
--- a/wp/wp-content/plugins/search-filter-divi/includes/loader.php
+++ /dev/null
@@ -1,14 +0,0 @@
- 'https://searchandfilter.com/',
- 'author' => 'Code Amp',
- 'author_uri' => 'https://codeamp.com/',
- );
-
- public function init() {
- $this->name = esc_html__( 'Search & Filter Form', 'search-filter-divi' );
- /*$this->whitelisted_fields = array(
- 'search_form',
- );*/
- $this->advanced_fields = array(
- 'fonts' => array(
- 'search_form' => array(
- 'label' => __('Search & Filter Form', "search-filter-divi"),
- 'css' => array(
- 'main' => "%%order_class%% .sf_divi_select_text",
- ),
- 'line_height' => array('default' => '1em',),
- 'font_size' => array('default' => '14px',),
- ),
- ),
- );
- $this->settings_modal_toggles = array(
- 'general' => array(
- 'toggles' => array(
- 'sg1' => __('Search & Filter Settings', "search-filter-divi"),
- ),
- ),
- );
- }
-
- public function get_fields() {
-
- $search_form_options = $this->get_search_form_options();
-
- return array(
- 'search_form' => array(
- 'label' => esc_html__( 'Choose a Search Form', 'sfdivi-search-filter-divi' ),
- 'type' => 'select',
- 'option_category' => 'basic_option',
- 'description' => __('Display your Search Form.', "sfdivi-search-filter-divi"),
- 'toggle_slug' => 'sg1',
-
- 'options' => array_merge(array('' => 'Choose a Search Form'), $search_form_options),
- //'options' => $search_form_options,
- ),
- );
- }
-
- public function get_search_form_options()
- {
- if(empty($this->search_form_options)){
-
- $custom_posts = new WP_Query('post_type=search-filter-widget&post_status=publish&posts_per_page=-1');
-
- $this->search_form_options = array();
- foreach($custom_posts->posts as $post){
- $this->search_form_options['search-filter-id-'.$post->ID] = get_the_title($post->ID);
- }
-
- wp_reset_postdata();
- }
-
- return $this->search_form_options;
- }
-
- public function render( $attrs, $content, $render_slug ) {
- $search_filter_id = intval(str_replace("search-filter-id-", "", $this->props['search_form']));
- return do_shortcode('[searchandfilter id="'.$search_filter_id.'"]');
- }
-}
-
-new SFDIVI_SearchForm;
diff --git a/wp/wp-content/plugins/search-filter-divi/includes/modules/SimpleHeader/SimpleHeader.php b/wp/wp-content/plugins/search-filter-divi/includes/modules/SimpleHeader/SimpleHeader.php
deleted file mode 100644
index 8a1192d4..00000000
--- a/wp/wp-content/plugins/search-filter-divi/includes/modules/SimpleHeader/SimpleHeader.php
+++ /dev/null
@@ -1,20 +0,0 @@
-name = esc_html__( 'Simple Header', 'simp-simple-extension' );
- }
-
- public function get_fields() {
- return array();
- }
-
- public function render( $unprocessed_props, $content, $render_slug ) {
-
- }
-}
-
-new SIMP_SimpleHeader;
diff --git a/wp/wp-content/plugins/search-filter-divi/includes/search-filter-divi-extension.php b/wp/wp-content/plugins/search-filter-divi/includes/search-filter-divi-extension.php
deleted file mode 100644
index cdb876dc..00000000
--- a/wp/wp-content/plugins/search-filter-divi/includes/search-filter-divi-extension.php
+++ /dev/null
@@ -1,47 +0,0 @@
-plugin_dir = plugin_dir_path( __FILE__ );
- $this->plugin_dir_url = plugin_dir_url( $this->plugin_dir );
-
- parent::__construct( $name, $args );
-
- }
-}
-
-new Search_Filter_Divi_Extension;
diff --git a/wp/wp-content/plugins/search-filter-divi/includes/search-filter-divi-query.php b/wp/wp-content/plugins/search-filter-divi/includes/search-filter-divi-query.php
deleted file mode 100644
index 9d7f1f9e..00000000
--- a/wp/wp-content/plugins/search-filter-divi/includes/search-filter-divi-query.php
+++ /dev/null
@@ -1,356 +0,0 @@
-init();
-
- }
- public function init(){
-
- // add S&F option to portoflio and blog module settings
- add_filter( 'et_pb_all_fields_unprocessed_et_pb_portfolio', array($this, 'render_settings_field') );
- add_filter( 'et_pb_all_fields_unprocessed_et_pb_blog', array($this, 'render_settings_field'));
- add_filter( 'et_pb_all_fields_unprocessed_et_pb_shop', array($this, 'render_settings_field'), 1000 );
-
- //we used to do it a different way for shop, but lets unify all for consistent experience
- //add_filter( 'et_pb_all_fields_unprocessed_et_pb_shop', array($this, 'render_shop_settings_field'), 1000 );
-
- //add S&F class to portfolio and blog modules, attach pre_get_posts
- add_filter( 'et_pb_module_shortcode_attributes', array($this, 'module_attributes'), 1000, 3 );
- add_filter( 'et_pb_module_shortcode_attributes', array($this, 'module_shop_attributes'), 1000, 3 );
-
- //remove pre_get_posts and add hooks for content above / below the blog module
- add_filter( 'et_module_shortcode_output', array($this, 'shortcode_output'), 1000, 3 );
-
- //add Divi option to `display method` in S&F settings
- add_filter( 'search_filter_admin_option_display_results', array($this, 'search_filter_admin_option_display_results'), 10, 2 );
-
- //override the ajax container, and pagination selectors in search form attributes
- add_filter( 'search_filter_form_attributes', array($this, 'search_filter_form_attributes'), 10, 2 );
-
- // retrieving wp_query information from this action
- add_filter( 'et_builder_blog_query', array($this, 'get_blog_query'), 10, 2 );
-
- }
-
-
- public function filter_query($query){
-
-
- //attach S&F to the query
- if( 0 !== $this->active_query_id ) {
- $query->set( "search_filter_id", $this->active_query_id );
-
- // pagination stops working on the homepage, so we have to set these vars again
- if ( is_front_page() || is_home() ) {
- $sfpaged = 1;
- if( isset( $_GET['sf_paged'] ) ) {
- $sfpaged = intval( $_GET[ 'sf_paged' ] );
- global $paged;
- $paged = $sfpaged;
- set_query_var( "paged", $paged ); //some plugins / themes use `get_query_var`, they often shouldn't
- }
- }
-
- }
- $this->active_query_id = 0;
- }
-
- public function shortcode_output($output, $render_slug, $module){
-
- if( ('et_pb_portfolio' !== $render_slug) && ('et_pb_blog' !== $render_slug) && ('et_pb_shop' !== $render_slug) ){
- return $output;
- }
-
- if ( is_array( $output ) ) {
- return $output;
- }
-
- // shortcode output means the query has been run, so remove pre_get_posts
- remove_action( 'pre_get_posts', array( $this, 'filter_query' ), 1000 );
- remove_filter( 'woocommerce_shortcode_products_query', array($this, 'woocommerce_shortcode_cache_breaker'), 1000 );
-
- // now allow actions to insert content
- ob_start();
- do_action( 'search_filter_divi_module_start_render', $this->current_query );
- $pre_render_html = ob_get_clean();
-
- ob_start();
- do_action( 'search_filter_divi_module_end_render', $this->current_query );
- $after_render_html = ob_get_clean();
-
- // injecting the pre_render_html inside the ajax container
- $output = preg_replace( '~
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/admin-widgets.php b/wp/wp-content/plugins/search-filter-pro/admin/views/admin-widgets.php
deleted file mode 100644
index 57e68fcc..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/admin-widgets.php
+++ /dev/null
@@ -1,190 +0,0 @@
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/admin-woocommerce-fields-metabox.php b/wp/wp-content/plugins/search-filter-pro/admin/views/admin-woocommerce-fields-metabox.php
deleted file mode 100644
index 8da8fd3c..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/admin-woocommerce-fields-metabox.php
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/admin.php b/wp/wp-content/plugins/search-filter-pro/admin/views/admin.php
deleted file mode 100644
index ab63c284..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/admin.php
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/author.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/author.php
deleted file mode 100644
index d7747f13..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/author.php
+++ /dev/null
@@ -1,149 +0,0 @@
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/category.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/category.php
deleted file mode 100644
index b2749530..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/category.php
+++ /dev/null
@@ -1,162 +0,0 @@
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/meta-option.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/meta-option.php
deleted file mode 100644
index 274f0f6e..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/meta-option.php
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
- plugin_slug); ?>
- ' />
-
-
-
-
- plugin_slug); ?>
- ' />
-
-
-
-
-
-
-
- plugin_slug); ?>
-
-
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-date.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-date.php
deleted file mode 100644
index 37036cdf..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-date.php
+++ /dev/null
@@ -1,150 +0,0 @@
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-meta.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-meta.php
deleted file mode 100644
index 2f6a0a49..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-meta.php
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-meta/choice.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-meta/choice.php
deleted file mode 100644
index 248bc88d..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-meta/choice.php
+++ /dev/null
@@ -1,179 +0,0 @@
-
-
- plugin_slug); ?>
-
- set_selected($values['choice_input_type'], "select"); ?>>plugin_slug); ?>
- set_selected($values['choice_input_type'], "checkbox"); ?>>plugin_slug); ?>
- set_selected($values['choice_input_type'], "radio"); ?>>plugin_slug); ?>
- set_selected($values['choice_input_type'], "multiselect"); ?>>plugin_slug); ?>
-
-
-
-
-
- plugin_slug); ?>
-
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
- set_selected($values['operator'], "and"); ?>>plugin_slug); ?>
- set_selected($values['operator'], "or"); ?>>plugin_slug); ?>
-
-
-
-
-
-
-
-
- set_checked($values['combo_box']); ?>>
- plugin_slug); ?>plugin_slug); ?>">
-
- set_checked($values['show_count']); ?>>
- plugin_slug); ?>plugin_slug); ?>">
-
- set_checked($values['hide_empty']); ?>>
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
- plugin_slug); ?>
-
-
-
-
- plugin_slug); ?> plugin_slug); ?>">
-
-
-
-
-
-
- get_all_post_meta_keys();
- echo '';
-
- foreach($all_meta_keys as $v){
- //$data[] = $v->meta_key;
-
- echo 'set_selected($values['choice_meta_key'], $v, false).'>'.$v." ";
- }
- echo ' ';
- }
-
-
- ?>
-
-
-
-
-
- plugin_slug); ?>
-
-
-
-
- plugin_slug); ?>
-
- set_selected($values['choice_get_option_mode'], "auto"); ?>>plugin_slug); ?>
- set_selected($values['choice_get_option_mode'], "manual"); ?>>plugin_slug); ?>
-
-
-
-
- plugin_slug); ?>
-
- set_selected($values['choice_order_option_by'], "value"); ?>>plugin_slug); ?>
- set_selected($values['choice_order_option_by'], "label"); ?>>plugin_slug); ?>
- set_selected($values['choice_order_option_by'], "none"); ?>>plugin_slug); ?>
-
-
-
-
- set_selected($values['choice_order_option_dir'], "asc"); ?>>plugin_slug); ?>
- set_selected($values['choice_order_option_dir'], "desc"); ?>>plugin_slug); ?>
-
-
-
- set_selected($values['choice_order_option_type'], "numeric"); ?>>plugin_slug); ?>
- set_selected($values['choice_order_option_type'], "alphabetic"); ?>>plugin_slug); ?>
-
-
-
-
- set_checked($values['choice_is_acf']); ?>>
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-meta/date.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-meta/date.php
deleted file mode 100644
index b2d33585..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-meta/date.php
+++ /dev/null
@@ -1,210 +0,0 @@
-
-
- plugin_slug); ?>
-
- set_selected($values['date_input_type'], "date"); ?>>plugin_slug); ?>
- set_selected($values['date_input_type'], "daterange"); ?>>plugin_slug); ?>
-
-
-
-
-
- plugin_slug); ?>
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
-
-
-
-
- plugin_slug); ?>
-
- plugin_slug); ?>
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
- get_all_post_meta_keys();
- echo '';
-
- foreach($all_meta_keys as $v){
- //$data[] = $v->meta_key;
-
- echo 'set_selected($values['date_start_meta_key'], $v, false).'>'.$v." ";
- }
- echo ' ';
- }
-
- ?>
-
-
-
-
-
-
-
- set_checked($values['date_use_same_toggle']); ?>>
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
-
- get_all_post_meta_keys();
- echo '';
-
- foreach($all_meta_keys as $v){
- //$data[] = $v->meta_key;
-
- echo 'set_selected($values['date_end_meta_key'], $v, false).'>'.$v." ";
- }
- echo ' ';
- }
-
- ?>
-
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
- set_selected($values['date_compare_mode'], "userrange"); ?>>plugin_slug); ?>
- set_selected($values['date_compare_mode'], "metarange"); ?>>plugin_slug); ?>
- set_selected($values['date_compare_mode'], "overlap"); ?>>plugin_slug); ?>
-
-
-
-
-
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
- set_selected($values['date_input_format'], "timestamp"); ?>>plugin_slug); ?>
- set_selected($values['date_input_format'], "yyyymmdd"); ?>>plugin_slug); ?>
- set_selected($values['date_input_format'], "yyyy-mm-dd"); ?>>plugin_slug); ?>
-
-
-
-
-
-
-
-
-
-
-
-
- plugin_slug); ?>
-
-
-
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
-
- plugin_slug); ?>
-
-
-
-
-
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
-
- plugin_slug); ?>
-
-
-
-
-
-
-
-
- set_checked($values['date_use_dropdown_year']); ?>>
- plugin_slug); ?>plugin_slug); ?>">
-
- set_checked($values['date_use_dropdown_month']); ?>>
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-meta/number.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-meta/number.php
deleted file mode 100644
index 55c5f0b1..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-meta/number.php
+++ /dev/null
@@ -1,254 +0,0 @@
-
-
-
- plugin_slug); ?>
-
-
- set_selected($values['number_input_type'], "range-slider"); ?>>plugin_slug); ?>
- set_selected($values['number_input_type'], "range-number"); ?>>plugin_slug); ?>
- set_selected($values['number_input_type'], "range-select"); ?>>plugin_slug); ?>
- set_selected($values['number_input_type'], "range-radio"); ?>>plugin_slug); ?>
-
-
-
-
-
- plugin_slug); ?>
-
-
-
-
-
-
- plugin_slug); ?>
-
- set_selected($values['number_display_input_as'], "singlefield"); ?>>plugin_slug); ?>
- set_selected($values['number_display_input_as'], "fromtofields"); ?>>plugin_slug); ?>
-
-
-
-
-
- plugin_slug); ?>
-
- set_selected($values['number_display_values_as'], "textinput"); ?>>plugin_slug); ?>
-
- set_selected($values['number_display_values_as'], "text"); ?>>plugin_slug); ?>
-
-
-
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
-
- plugin_slug); ?>
-
- plugin_slug); ?>
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
- get_all_post_meta_keys();
- echo '';
-
- foreach($all_meta_keys as $v){
- //$data[] = $v->meta_key;
-
- echo 'set_selected($values['number_start_meta_key'], $v, false).'>'.$v." ";
- }
- echo ' ';
- }
-
- ?>
-
-
-
-
-
-
- set_checked($values['number_use_same_toggle']); ?>>
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
-
- get_all_post_meta_keys();
- echo '';
-
- foreach($all_meta_keys as $v){
- //$data[] = $v->meta_key;
-
- echo 'set_selected($values['number_end_meta_key'], $v, false).'>'.$v." ";
- }
- echo ' ';
- }
- ?>
-
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
- set_selected($values['number_compare_mode'], "userrange"); ?>>plugin_slug); ?>
- set_selected($values['number_compare_mode'], "metarange"); ?>>plugin_slug); ?>
- set_selected($values['number_compare_mode'], "overlap"); ?>>plugin_slug); ?>
-
-
-
-
-
-
-
- set_checked($values['number_is_decimal']); ?>>
- plugin_slug); ?>plugin_slug); ?>">
-
-
- plugin_slug); ?>
-
-
-
-
-
-
- plugin_slug); ?>
-
-
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
- set_checked($values['range_min_detect']); ?>>
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
- set_checked($values['range_max_detect']); ?>>
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
-
-
-
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
-
-
-
-
-
-
- plugin_slug); ?>
-
-
-
-
-
-
-
-
-
- plugin_slug); ?>
-
-
-
-
-
- plugin_slug); ?>
-
-
-
-
-
-
-
-
-
-
-
- plugin_slug); ?>
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-type.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-type.php
deleted file mode 100644
index d1d6b09e..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/post-type.php
+++ /dev/null
@@ -1,136 +0,0 @@
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/posts-per-page.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/posts-per-page.php
deleted file mode 100644
index 2294dfa3..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/posts-per-page.php
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/reset.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/reset.php
deleted file mode 100644
index 8feee8d5..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/reset.php
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/search.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/search.php
deleted file mode 100644
index a421f086..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/search.php
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/sort-order-option.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/sort-order-option.php
deleted file mode 100644
index 0f04ca47..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/sort-order-option.php
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-
-
-
-
-
-
-
- plugin_slug); ?>
-
-
- set_selected($values['sort_by'], "ID"); ?>>plugin_slug); ?>
- set_selected($values['sort_by'], "author"); ?>>plugin_slug); ?>
- set_selected($values['sort_by'], "title"); ?>>plugin_slug); ?>
- set_selected($values['sort_by'], "name"); ?>>plugin_slug); ?>
- set_selected($values['sort_by'], "type"); ?>>plugin_slug); ?>
- set_selected($values['sort_by'], "date"); ?>>plugin_slug); ?>
- set_selected($values['sort_by'], "modified"); ?>>plugin_slug); ?>
- set_selected($values['sort_by'], "parent"); ?>>plugin_slug); ?>
- set_selected($values['sort_by'], "rand"); ?>>plugin_slug); ?>
- set_selected($values['sort_by'], "comment_count"); ?>>plugin_slug); ?>
- set_selected($values['sort_by'], "relevance"); ?>>plugin_slug); ?>
- set_selected($values['sort_by'], "menu_order"); ?>>plugin_slug); ?>
- set_selected($values['sort_by'], "meta_value"); ?>>plugin_slug); ?>
-
-
-
-
-
- plugin_slug); ?>
-
- set_selected($values['sort_dir'], "desc"); ?>>plugin_slug); ?>
- set_selected($values['sort_dir'], "asc"); ?>>plugin_slug); ?>
-
-
-
-
-
- plugin_slug); ?>
-
-
-
-
-
-
-
- plugin_slug); ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- plugin_slug); ?>plugin_slug); ?>">
-
-
- get_all_post_meta_keys();
- echo '';
- foreach($all_meta_keys as $v)
- {
- echo 'set_selected($values['meta_key'], $v, false).'>'.$v." ";
- }
- echo ' ';
- }
-
- ?>
-
-
-
-
-
- plugin_slug); ?>
-
- set_selected($values['sort_type'], "numeric"); ?>>plugin_slug); ?>
- set_selected($values['sort_type'], "alphabetic"); ?>>plugin_slug); ?>
- set_selected($values['sort_type'], "date"); ?>>plugin_slug); ?>
- set_selected($values['sort_type'], "datetime"); ?>>plugin_slug); ?>
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/sort-order.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/sort-order.php
deleted file mode 100644
index e6e62531..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/sort-order.php
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/submit.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/submit.php
deleted file mode 100644
index 132f86e9..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/submit.php
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/tag.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/tag.php
deleted file mode 100644
index b3841b0f..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/tag.php
+++ /dev/null
@@ -1,160 +0,0 @@
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/taxonomy.php b/wp/wp-content/plugins/search-filter-pro/admin/views/fields/taxonomy.php
deleted file mode 100644
index f00e73cb..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/fields/taxonomy.php
+++ /dev/null
@@ -1,224 +0,0 @@
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/admin/views/index.php b/wp/wp-content/plugins/search-filter-pro/admin/views/index.php
deleted file mode 100644
index e71af0ef..00000000
--- a/wp/wp-content/plugins/search-filter-pro/admin/views/index.php
+++ /dev/null
@@ -1 +0,0 @@
-
-
-
-
-
-
-
-
- get_all_post_meta_keys();
- echo '';
-
- foreach($all_meta_keys as $v){
- //$data[] = $v->meta_key;
-
- echo 'set_selected($values['meta_key'], $v, false).'>'.$v." ";
- }
- echo ' ';
- }
-
- ?>
-
-
-
-
-
- ';
-
- echo 'set_selected($values['meta_type'], "CHAR", false).'>char ';
- echo 'set_selected($values['meta_type'], "NUMERIC", false).'>numeric ';
- //echo 'set_selected($values['meta_type'], "BINARY", false).'>binary ';
- echo 'set_selected($values['meta_type'], "DATE", false).'>date ';
- //echo 'set_selected($values['meta_type'], "TIME", false).'>time ';
- echo 'set_selected($values['meta_type'], "DATETIME", false).'>datetime ';
- echo 'set_selected($values['meta_type'], "TIMESTAMP", false).'>timestamp ';
- echo 'set_selected($values['meta_type'], "DECIMAL", false).'>decimal ';
- //echo 'set_selected($values['meta_type'], "SIGNED", false).'>signed ';
- //echo 'set_selected($values['meta_type'], "UNSIGNED", false).'>unsigned ';
- echo '';
-
- ?>
-
-
-
-
-
- ';
-
- echo 'set_selected($values['meta_compare'], "e", false).' class="date-format-supported">= (equals) ';
- echo 'set_selected($values['meta_compare'], "ne", false).' class="date-format-supported">!= (not equals) ';
- echo 'set_selected($values['meta_compare'], "lt", false).' class="date-format-supported">< (less than) ';
- echo 'set_selected($values['meta_compare'], "gt", false).' class="date-format-supported">> (greater than) ';
- echo 'set_selected($values['meta_compare'], "lte", false).' class="date-format-supported"><= (less than or equal) ';
- echo 'set_selected($values['meta_compare'], "gte", false).' class="date-format-supported">>= (greater than or equal) ';
-
- echo 'set_selected($values['meta_compare'], "LIKE", false).'>like ';
- echo 'set_selected($values['meta_compare'], "NOT LIKE", false).'>not like ';
- //echo 'set_selected($values['meta_compare'], "IN", false).'>in ';
- //echo 'set_selected($values['meta_compare'], "NOT IN", false).'>not in ';
- /* echo 'set_selected($values['meta_compare'], "BETWEEN", false).'>between '; */
- /* echo 'set_selected($values['meta_compare'], "NOT BETWEEN", false).'>not between '; */
- echo 'set_selected($values['meta_compare'], "EXISTS", false).'>exists ';
- echo 'set_selected($values['meta_compare'], "NOT EXISTS", false).'>not exists ';
-
-
- echo '';
- ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- set_checked($values['meta_date_value_current_date']); ?>>
- plugin_slug); ?>
- plugin_slug); ?>">
-
-
-
-
-
-
-
-
- set_checked($values['meta_date_value_current_timestamp']); ?>>
- plugin_slug); ?>
- plugin_slug); ?>">
-
-
-
-
- Remove
-
-
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-activator.php b/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-activator.php
deleted file mode 100644
index 25d108b8..00000000
--- a/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-activator.php
+++ /dev/null
@@ -1,108 +0,0 @@
-blog_id );
- $this->db_install();
- restore_current_blog();
- }
- }
- }
- public function activate( $network_wide ) {
-
- global $wpdb;
-
- if ( is_multisite() && $network_wide ) {
- // store the current blog id
- $current_blog = $wpdb->blogid;
-
- // Get all blogs in the network and activate plugin on each one
- $blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" );
- foreach ( $blog_ids as $blog_id ) {
- switch_to_blog( $blog_id );
- $this->db_install();
- restore_current_blog();
- }
- } else {
-
- // check for existence of caching database, if not install it
- $this->db_install();
- }
- }
-
- function db_install() {
- global $wpdb;
-
- $table_name = $wpdb->prefix . 'search_filter_cache';
-
- $charset_collate = '';
-
- if ( $wpdb->has_cap( 'collation' ) ) {
- $charset_collate = $wpdb->get_charset_collate();
- }
-
- $sql = "CREATE TABLE $table_name (
- id bigint(20) NOT NULL AUTO_INCREMENT,
- post_id bigint(20) NOT NULL,
- post_parent_id bigint(20) NOT NULL,
- field_name varchar(255) NOT NULL,
- field_value varchar(255) NOT NULL,
- field_value_num bigint(20) NULL,
- field_parent_num bigint(20) NULL,
- term_parent_id bigint(20) NULL,
- PRIMARY KEY (id),
- KEY sf_c_field_name_index (field_name(32)),
- KEY sf_c_field_value_index (field_value(32)),
- KEY sf_c_field_value_num_index (field_value_num)
- ) $charset_collate;";
-
- require_once ABSPATH . 'wp-admin/includes/upgrade.php';
- dbDelta( $sql );
-
- $table_name = $wpdb->prefix . 'search_filter_term_results';
-
- $sql = "CREATE TABLE $table_name (
- id bigint(20) NOT NULL AUTO_INCREMENT,
- field_name varchar(255) NOT NULL,
- field_value varchar(255) NOT NULL,
- field_value_num bigint(20) NULL,
- result_ids mediumtext NOT NULL,
- PRIMARY KEY (id),
- KEY sf_tr_field_name_index (field_name(32)),
- KEY sf_tr_field_value_index (field_value(32)),
- KEY sf_tr_field_value_num_index (field_value_num)
-
- ) $charset_collate;";
-
- dbDelta( $sql );
- }
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-deactivator.php b/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-deactivator.php
deleted file mode 100644
index e1a87533..00000000
--- a/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-deactivator.php
+++ /dev/null
@@ -1,31 +0,0 @@
-";
- echo $str;
- echo "";
- echo " ";*/
- // ******************************** ";
- }
-
- public static function finish_log( $name = '', $display = true, $important = false ) {
- self::$log_time_finish[ $name ] = microtime( true );
- self::$log_time_total[ $name ] = self::$log_time_finish[ $name ] - self::$log_time_start[ $name ];
-
- if ( $display ) {
- self::print_log( $name, false, $important );
- } else {
- return self::$log_time_total[ $name ];
- }
- }
- public static function add_time_running( $name = '', $name_to_add = '', $display = false ) {
- if ( ! isset( self::$log_time_running[ $name ] ) ) {
- self::$log_time_running[ $name ] = 0;
- }
-
- self::$log_time_running[ $name ] += self::$log_time_total[ $name_to_add ];
-
- if ( $display ) {
- self::print_log( $name, true, $important );
- }
- }
- public static function get_time_running( $name = '', $display = true, $important = false ) {
- if ( ! isset( self::$log_time_running[ $name ] ) ) {
- self::$log_time_running[ $name ] = 0;
- }
-
- if ( $display ) {
- self::print_log( $name, true, $important );
- }
- }
- public static function print_log( $name = '', $running = false, $important = false ) {
- if ( $important ) {
- echo '';
- }
-
- if ( ! $running ) {
- $time_var = self::$log_time_total[ $name ];
- } else {
- $time_var = self::$log_time_running[ $name ];
- }
-
- echo "SFLOG | $name: " . round( $time_var, 3 ) . ' seconds
- ******************************** ';
- if ( $important ) {
- echo ' ';
- }
- }
-
- // Search_Filter_Helper::json_encode()
- public static function json_encode( $obj ) {
- if ( function_exists( 'wp_json_encode' ) ) {// introduced WP 4.1
- return wp_json_encode( $obj );
- } else {
- return json_encode( $obj );
- }
- /*
- else
- {
- return false;
- }*/
-
- }
-
- public static function has_wpml() {
- // filter is for WPML v 3.5 and over
- // keep icl_object as a check for older WPML and also other plugins which declare the same functions for compatibility
-
- if ( ! self::$has_wpml_checked ) {
- self::$has_wpml_checked = true;
-
- /*
- if(self::has_polylang())
- {
- self::$has_wpml = true;
- }
- else {*/
- if ( ( has_filter( 'wpml_object_id' ) || ( function_exists( 'icl_object_id' ) ) ) ) {
- self::$has_wpml = true;
- }
- // }
- }
-
- return self::$has_wpml;
- }
-
- public static function wpml_current_language() {
- if ( ! self::has_wpml() ) {
- return false;
- }
-
- $current_language_code = apply_filters( 'wpml_current_language', null );
-
- return $current_language_code;
- }
- public static function has_polylang() {
- // global $polylang;
- if ( defined( 'POLYLANG_VERSION' ) ) {
- // if(isset($polylang)) {
-
- return true;
- }
-
- return false;
- }
- public static function has_woocommerce() {
- if ( class_exists( 'woocommerce' ) ) {
- return true;
- } else {
- return false;
- }
-
- }
- public static function has_custom_layouts() {
- if ( class_exists( 'Custom_Layouts' ) ) {
- return true;
- } else {
- return false;
- }
- }
- public static function has_dynamic_ooo() {
-
- if ( defined( 'DCE_VERSION' ) ) {
- if ( version_compare( DCE_VERSION, '1.9.6.7.2', '>=' ) ) {
- return true;
- }
- }
- return false;
- }
- public static function wc_get_page_id( $page_name = '' ) {
- if ( function_exists( 'wc_get_page_id' ) ) {
- return wc_get_page_id( $page_name );
- } elseif ( function_exists( 'woocommerce_get_page_id' ) ) {
- return woocommerce_get_page_id( $page_name );
- }
-
- return false;
-
- }
- public static function wpml_object_id( $id = 0, $type = '', $return_original = '', $lang_code = '' ) {
- $lang_id = 0;
-
- if ( has_filter( 'wpml_object_id' ) ) {
- if ( $lang_code != '' ) {
- $lang_id = apply_filters( 'wpml_object_id', $id, $type, $return_original, $lang_code );
- } else {
- $lang_id = apply_filters( 'wpml_object_id', $id, $type, $return_original );
- }
- } elseif ( function_exists( 'icl_object_id' ) ) {
- if ( $lang_code != '' ) {
- $lang_id = icl_object_id( $id, $type, $return_original, $lang_code );
- } else {
- $lang_id = icl_object_id( $id, $type, $return_original );
- }
- }
-
- return $lang_id;
- }
- public static function wpml_post_language_details( $post_id = 0 ) {
- $lang_details = array();
-
- if ( has_filter( 'wpml_post_language_details' ) ) {
- $lang_details = apply_filters( 'wpml_post_language_details', '', $post_id );
- } elseif ( function_exists( 'wpml_get_language_information' ) ) {
-
- $lang_details = wpml_get_language_information( $post_id );
- }
-
- return $lang_details;
- }
-
- public static function wpml_post_language_code( $post_id ) {
- // if its actually polylang use their function instead
- if ( ( self::has_polylang() ) && ( function_exists( 'pll_get_post_language' ) ) ) {
- return pll_get_post_language( $post_id );
- }
-
- $lang_details = self::wpml_post_language_details( $post_id );
- if ( $lang_details ) {
- return $lang_details['language_code'];
- } else {
- return '';
- }
- }
-
- public static function get_settings_meta( $sfid ) {
- $settings = get_post_meta( $sfid, '_search-filter-settings', true );
-
- if ( ! is_array( $settings ) ) {
- $settings = array();
- }
-
- if ( ! isset( $settings['results_url'] ) ) {
- $settings['results_url'] = '';
- $results_url = get_post_meta( $sfid, '_search-filter-results-url', true );
-
- if ( ! empty( $results_url ) ) {
- $settings['results_url'] = $results_url;
- }
- }
-
- if ( ! isset( $settings['enable_taxonomy_archives'] ) ) {
- $settings['enable_taxonomy_archives'] = 0;
- }
-
- return $settings;
- }
-
- public static function get_fields_meta( $sfid ) {
- $fields = get_post_meta( $sfid, '_search-filter-fields', true );
-
- return $fields;
- }
-
- public static function get_option( $option_name ) {
- $option = get_option( 'search_filter_' . $option_name );
-
- if ( $option === false ) {
- // this means its not been set yet
- // then init with a default
- $option = '';
-
- $defaults = array(
-
- 'cache_speed' => 'slow',
- 'cache_use_manual' => 0,
- 'cache_use_background_processes' => 1,
- 'cache_use_transients ' => 0,
- 'load_jquery_i18n' => 0,
- 'lazy_load_js' => 0,
- 'load_js_css' => 1,
- 'combobox_script' => 'chosen',
- 'remove_all_data' => 0,
- 'meta_key_text_input' => 0,
-
- );
-
- if ( isset( $defaults[ $option_name ] ) ) {
- $option = $defaults[ $option_name ];
- }
- }
-
- return $option;
- }
-
- public static function get_table_name( $table_name = '' ) {
-
- global $wpdb;
- return $wpdb->prefix . $table_name;
- }
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-post-cache.php b/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-post-cache.php
deleted file mode 100644
index a726c044..00000000
--- a/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-post-cache.php
+++ /dev/null
@@ -1,1956 +0,0 @@
-cache_table_name = Search_Filter_Helper::get_table_name( 'search_filter_cache' );
- $this->term_results_table_name = Search_Filter_Helper::get_table_name( 'search_filter_term_results' );
-
- $this->option_name = 'search-filter-cache';
- $this->process_exec_time = 60 * 3;
- $cache_speed = Search_Filter_Helper::get_option( 'cache_speed' );
-
- if ( empty( $cache_speed ) ) {
- $cache_speed = 'slow';
- }
-
- $cycle_error_minutes = 1;
- if ( $cache_speed == 'slow' ) {
- $this->batch_size = 10;
- $cycle_error_minutes = 2;
- } elseif ( $cache_speed == 'medium' ) {
- $this->batch_size = 20;
- $cycle_error_minutes = 3;
- } elseif ( $cache_speed == 'fast' ) {
- $this->batch_size = 40;
- $cycle_error_minutes = 4;
- }
- $this->cycle_error_amount = $cycle_error_minutes * 60; // 3 minutes
- $this->process_exec_time = $this->cycle_error_amount;
-
- /* ajax */
- add_action( 'wp_ajax_cache_progress', array( $this, 'cache_progress' ) );
- add_action( 'wp_ajax_cache_restart', array( $this, 'cache_restart' ) );
- add_action( 'wp_ajax_cache_progress_manual', array( $this, 'cache_progress_manual' ) );
- add_action( 'wp_ajax_cache_restart_manual', array( $this, 'cache_restart_manual' ) );
- add_action( 'wp_ajax_refresh_cache', array( $this, 'refresh_cache' ) );
- add_action( 'wp_ajax_nopriv_refresh_cache', array( $this, 'refresh_cache' ) );
- add_action( 'wp_ajax_process_cache', array( $this, 'process_cache' ) );
- add_action( 'wp_ajax_nopriv_process_cache', array( $this, 'process_cache' ) );
- add_action( 'wp_ajax_nopriv_test_remote_connection', array( $this, 'test_remote_connection' ) );
- add_action( 'wp_ajax_test_remote_connection', array( $this, 'test_remote_connection' ) );
-
- add_action( 'search_filter_delete_post_cache', array( $this, 'delete_post_cache' ), 10 );
-
- /* save post / re indexing hooks */
- add_action( 'save_post', array( $this, 'post_updated_action' ), 800, 3 ); // priority of 80 so it runs after the regular S&F form save
- add_action( 'shutdown', array( $this, 'wp_shutdown' ), 800 );
- add_filter( 'add_attachment', array( $this, 'attachment_added' ), 20, 1 );
- add_filter( 'attachment_updated', array( $this, 'attachment_updated' ), 80, 3 );
- add_action( 'set_object_terms', array( $this, 'object_terms_updated' ), 80, 4 );
- add_filter( 'updated_postmeta', array( $this, 'post_meta_updated' ), 80, 4 );
- add_action( 'search_filter_insert_post_data', array( $this, 'insert_post_custom_post_data' ), 10, 3 );
- add_action( 'edited_terms', array( $this, 'taxonomy_edited_terms' ), 10, 4 );
- add_action( 'search_filter_update_post_cache', array( $this, 'update_cache_action' ), 10 );
- }
-
- public function update_cache_action( $post_id ) {
- if ( ! $this->cache_enabled() ) {
- return;
- }
- $this->init_cache_options();
- $this->setup_cached_search_forms();
- $this->update_post_cache( $post_id );
- }
- private function is_cache_init( $cache_options ) {
- if ( ! $cache_options ) {
- return false;
- }
-
- if ( ! is_array( $cache_options ) ) {
- return false;
- }
-
- $keys_wanted = array( 'status', 'restart', 'cache_list', 'rc_status' );
- foreach( $keys_wanted as $key ) {
- if ( ! isset( $cache_options[ $key ] ) ) {
- return false;
- }
- }
-
- return true;
- }
- private function get_cache_options_no_list( $cache_options ) {
- $cache_options['cache_list'] = array();
- return $cache_options;
- }
- public function init_cache_options() {
- // check to see if there is a S&F options in the caching table
- if ( empty( $this->cache_options ) ) {
- $cache_options = get_option( $this->option_name );
- if ( ! $this->is_cache_init( $cache_options ) ) {// then lets init
- do_action( 'search_filter_init_cache_not_init', $cache_options, $this->option_name );
- $cache_options = array();
- $cache_options['status'] = 'ready';
- $cache_options['last_update'] = '';
- $cache_options['restart'] = true;
- $cache_options['cache_list'] = array(); // ids of posts to cache
- $cache_options['current_post_index'] = 0;
- $cache_options['progress_percent'] = 0;
- $cache_options['locked'] = false;
- $cache_options['error_count'] = 0; // the error here is from non-completed processing
- $cache_options['rc_status'] = ''; // this is a different error (remote connect) - and will try anotehr method of caching if the server cannot do a wp_remote_---, curl, etc etc
- $cache_options['process_id'] = 0;
- $cache_options['run_method'] = 'automatic';
- $this->setup_cached_search_forms();
-
- // all the fields and options we need to cache
- // then grab the post types and the meta keys we need to index
- $cache_options['caching_data'] = $this->cache_data;
-
- // the fields and options from the last cache - compare this with new caching data to see if we need to trigger a reset
- // $cache_options['last_caching_data'] = $cache_options['caching_data'];
- $this->update_cache_options( $cache_options, true );
- }
- if ( ! isset( $cache_options['run_method'] ) ) {
- $cache_options['run_method'] = 'automatic';
- }
- $this->cache_options = $cache_options;
- }
- }
-
- public function get_real_option( $option_name = '' ) {
- global $wpdb;
-
- $results = $wpdb->get_results(
- $wpdb->prepare(
- "
- SELECT option_value
- FROM {$wpdb->options}
- WHERE option_name = '%s' LIMIT 0, 1
- ",
- $option_name
- )
- );
-
- if ( count( $results ) == 0 ) {
- return false;
- }
-
- $result = unserialize( $results[0]->option_value );
-
- return $result;
- }
- public function cache_enabled() {
- $cache_enabled = apply_filters( 'search_filter_cache_enabled', true );
- return $cache_enabled;
- }
- public function cache_restart() {
- if ( ! current_user_can( 'manage_options' ) ) {
- return;
- exit;
- }
- if ( ! $this->cache_enabled() ) {
- return;
- }
-
- $this->init_cache_options();
- $this->check_cache_list_changed( true );
- $this->cache_options['restart'] = true;
- $this->cache_options['rc_status'] = '';
- $this->update_cache_options( $this->cache_options, true );
-
- $this->cache_progress();
- }
-
- public function cache_progress() {
-
- if ( ! $this->cache_enabled() ) {
- return;
- }
-
- $this->init_cache_options();
- $cache_json = $this->cache_options;
-
- unset( $cache_json['cache_list'] );
- echo Search_Filter_Helper::json_encode( $cache_json );
-
- // if($this->cache_options['run_method'] != "manual") {
- if ( ( $this->cache_options['rc_status'] == '' ) || ( ( $this->cache_options['rc_status'] == 'user_bypass' ) ) ) {// then we need to test for a remote connection
- $this->can_wp_remote_post();
- }
- // }
-
- if ( $this->cache_options['run_method'] == 'manual' ) {
- // manual, then do nothing, wait for initiated response
-
- } elseif ( $this->cache_options['rc_status'] == 'connect_success' ) {// there is a remote connection error, so don't try remote call
- $query_args = array( 'action' => 'refresh_cache' );
- $url = add_query_arg( $query_args, admin_url( 'admin-ajax.php' ) );
- $this->wp_remote_post_with_cookie( $url ); // run in the background - calls refresh_cache()
- } else {
- $this->refresh_cache();
- }
- exit;
- }
-
- public function cache_restart_manual() {
- if ( ! $this->cache_enabled() ) {
- return;
- }
-
- $this->init_cache_options();
- $this->check_cache_list_changed( true );
- if ( $this->cache_options['run_method'] == 'manual' ) {
-
- $this->cache_options['restart'] = true;
- $this->cache_options['rc_status'] = '';
-
- $this->update_cache_options( $this->cache_options, true );
-
- $this->cache_progress_manual();
- }
- exit;
- }
-
- public function cache_progress_manual() {
- if ( ! $this->cache_enabled() ) {
- return;
- }
-
- $this->init_cache_options();
-
- if ( $this->cache_options['run_method'] == 'manual' ) {
- $this->cache_options['status'] = 'inprogress';
- $this->cache_options['rc_status'] = '';
- // $this->cache_options['locked'] = false;
- $this->update_cache_options( $this->cache_options, true );
-
- $this->refresh_cache();
- }
-
- $cache_json = $this->cache_options;
- unset( $cache_json['cache_list'] );
- echo Search_Filter_Helper::json_encode( $cache_json );
-
- exit;
- }
-
- public function clean_query( $query ) {
- $query->set( 'tax_query', array() );
-
- }
-
- public function refresh_cache() {
- if ( ! $this->cache_enabled() ) {
- return;
- }
-
- // spawned from a wp_remote_get - so a background process
- $this->init_cache_options();
-
- ignore_user_abort( true ); // allow script to carry on running
- // Some hosts disable (remove) this function.
- if ( function_exists( 'set_time_limit' ) ) {
- @set_time_limit( $this->process_exec_time );
- }
- ini_set( 'max_execution_time', $this->process_exec_time );
-
- if ( $this->cache_options['run_method'] !== 'manual' ) {
- if ( ( $this->cache_options['status'] == 'error' ) && ( $this->cache_options['restart'] == false ) ) {// if status = error, then caching can only resume based on user initiated response
- exit;
- }
- }
-
- if ( ( ( $this->cache_options['status'] == 'ready' ) || ( $this->cache_options['restart'] == true ) ) ) {
- // then begin processing all the posts
- $this->cache_options['status'] = 'inprogress';
- $this->cache_options['last_update'] = time();
- $this->cache_options['restart'] = false;
- $this->cache_options['current_post_index'] = 0;
- $this->cache_options['total_post_index'] = 0;
- $this->cache_options['progress_percent'] = 0;
- $this->cache_options['process_id'] = time();
- $this->cache_options['locked'] = false;
- $this->cache_options['error_count'] = 0;
-
- $this->setup_cached_search_forms();
-
- if ( empty( $this->cache_data['post_types'] ) ) {
-
- $this->cache_options['status'] = 'ready';
- $this->cache_options['restart'] = true;
-
- $this->update_cache_options( $this->cache_options, true );
-
- exit;
- }
-
- Search_Filter_Wp_Cache::purge_all_transients();
-
- $query_args = array(
- 'post_type' => $this->cache_data['post_types'],
- 'posts_per_page' => -1,
- 'paged' => 1,
- 'fields' => 'ids',
-
- 'orderby' => 'ID',
- 'order' => 'ASC',
-
- 'post_status' => array( 'publish', 'pending', 'draft', 'future', 'private' ),
-
- 'suppress_filters' => true,
-
- /* speed improvements */
- 'no_found_rows' => true,
- 'update_post_meta_cache' => false,
- );
-
- if ( in_array( 'attachment', $this->cache_data['post_types'] ) ) {
- array_push( $query_args['post_status'], 'inherit' );
- }
-
- if ( isset( $this->cache_data['post_stati'] ) ) {
-
- $query_args['post_status'] = array_unique( array_merge( $query_args['post_status'], $this->cache_data['post_stati'] ) );
- }
-
- if ( has_filter( 'sf_edit_cache_query_args' ) ) {
- $query_args = apply_filters( 'sf_edit_cache_query_args', $query_args, $this->sfid );
- }
-
- $this->hard_remove_filters();
-
- add_action( 'pre_get_posts', array( $this, 'clean_query' ), 100 );
-
- if ( has_filter( 'search_filter_post_cache_data_query_args' ) ) {
- $query_args = apply_filters( 'search_filter_post_cache_data_query_args', $query_args, $this->sfid );
-
- }
- $query = new WP_Query( $query_args );
- remove_action( 'pre_get_posts', array( $this, 'clean_query' ), 100 );
-
- $this->hard_restore_filters();
-
- if ( $query->have_posts() ) {
-
- $this->cache_options['cache_list'] = $query->posts;
- $this->cache_options['total_post_index'] = count( $this->cache_options['cache_list'] );
-
- } else { // there were no posts to cache so set as complete or error
-
- }
-
- // clear cache
- $this->empty_cache();
-
- // update cache options in DB
- $this->update_cache_options( $this->cache_options, true );
-
- if ( $this->cache_options['run_method'] == 'manual' ) {
- $this->process_cache( $this->cache_options['process_id'] );
- } elseif ( $this->cache_options['rc_status'] == 'connect_success' ) {
- // $this->process_cache($this->cache_options['process_id']);
- $this->wp_remote_process_cache( array( 'process_id' => $this->cache_options['process_id'] ) );
- } else {
- $this->process_cache( $this->cache_options['process_id'] );
- }
- }
-
- if ( $this->cache_options['status'] == 'inprogress' ) {// if its in progress, check when the last cycle started to see if there was a problem
-
- // if its been more than 5 minutes since the last cycle then start it again
- $current_time = time();
- $retry_limit = 2;
-
- $cycle_error_amount = $this->cycle_error_amount;
- $error_time = $this->cache_options['last_update'] + $cycle_error_amount;
-
- if ( $current_time >= $error_time ) {// there was an error - so try to resume
-
- $this->cache_options['last_update'] = time();
- $this->cache_options['error_count']++;
- $this->cache_options['locked'] = false;
-
- if ( $this->cache_options['error_count'] > $retry_limit ) {// then there seems to be a serious issue, stop and show error message - allow user to restart
-
- $this->cache_options['status'] = 'error';
- $this->cache_options['error_count'] = 0;
- $this->update_cache_options( $this->cache_options );
- } else {
- // try to continue the processing
- $this->cache_options['process_id'] = time();
- $this->update_cache_options( $this->cache_options );
-
- if ( $this->cache_options['run_method'] == 'manual' ) {
- $this->process_cache( $this->cache_options['process_id'] );
- } elseif ( $this->cache_options['rc_status'] == 'connect_success' ) {
- $this->wp_remote_process_cache( array( 'process_id' => $this->cache_options['process_id'] ) );
- } else {
- $this->process_cache( $this->cache_options['process_id'] );
- }
- }
-
- // $this->process_cache();
- } else { // then just leave the scripts to carry on - we assume they are working
-
- // unless there is a remote connection error, which means we should try to manually resume
-
- if ( $this->cache_options['run_method'] == 'manual' ) {
- $this->process_cache( $this->cache_options['process_id'] );
- } elseif ( $this->cache_options['rc_status'] != 'connect_success' ) {
- $this->process_cache( $this->cache_options['process_id'] );
- }
- }
- } elseif ( $this->cache_options['status'] == 'termcache' ) {
- if ( $this->cache_options['rc_status'] != 'connect_success' ) {
- $this->process_cache( $this->cache_options['process_id'] );
- }
- } else {
- if ( $this->cache_options['run_method'] == 'manual' ) {
- $cache_json = $this->cache_options;
- unset( $cache_json['cache_list'] );
- echo Search_Filter_Helper::json_encode( $cache_json );
- }
- }
-
- exit;
- }
-
- public function hard_remove_filters() {
- $remove_posts_clauses = false;
- $remove_posts_where = false;
-
- if ( isset( $GLOBALS['wp_filter']['posts_clauses'] ) ) {
- $remove_posts_clauses = true;
- }
-
- if ( isset( $GLOBALS['wp_filter']['posts_where'] ) ) {
- $remove_posts_where = true;
- }
-
- if ( ( $remove_posts_clauses ) || ( $remove_posts_where ) ) {
- $this->WP_FILTER = $GLOBALS['wp_filter'];
- }
-
- if ( $remove_posts_clauses ) {
-
- unset( $GLOBALS['wp_filter']['posts_clauses'] );
- }
-
- if ( $remove_posts_where ) {
-
- unset( $GLOBALS['wp_filter']['posts_where'] );
- }
- }
-
-
- public function hard_restore_filters() {
- $remove_posts_clauses = false;
- $remove_posts_where = false;
-
- if ( isset( $this->WP_FILTER['posts_clauses'] ) ) {
- $remove_posts_clauses = true;
- }
-
- if ( isset( $this->WP_FILTER['posts_where'] ) ) {
- $remove_posts_where = true;
- }
-
- if ( ( $remove_posts_clauses ) || ( $remove_posts_where ) ) {
- $GLOBALS['wp_filter'] = $this->WP_FILTER;
- unset( $this->WP_FILTER );
- }
-
- }
-
- public function process_cache( $process_id = 0 ) {
-
- if ( ! $this->cache_enabled() ) {
- return;
- }
-
- $this->init_cache_options();
-
- ignore_user_abort( true ); // allow script to carry on running
- @set_time_limit( $this->process_exec_time );
- ini_set( 'max_execution_time', $this->process_exec_time );
-
- // make sure we only run the same, valid process
- if ( $process_id === 0 || $process_id === '' ) {
- if ( isset( $_GET['process_id'] ) ) {
- $process_id = (int) $_GET['process_id'];
- }
- }
-
- $live_options = $this->get_real_option( $this->option_name );
-
- if ( ( ! $this->valid_process( $process_id, $this->cache_options['current_post_index'] ) ) || ( $live_options['locked'] == true ) ) {
- if ( $this->cache_options['run_method'] == 'manual' ) {
- $cache_json = $this->cache_options;
- unset( $cache_json['cache_list'] );
- echo Search_Filter_Helper::json_encode( $cache_json );
- }
- exit;
- }
-
- if ( $this->cache_options['status'] == 'inprogress' ) {
- $this->cache_options['locked'] = true;
- $this->update_cache_options( $this->cache_options, false, false );
-
- $this->setup_cached_search_forms();
-
- $cache_index = $this->cache_options['current_post_index'];
- $cache_list = $this->cache_options['cache_list'];
- $cache_length = count( $cache_list );
-
- if ( ( $cache_index + $this->batch_size ) > $cache_length - 1 ) {
- $batch_end = $cache_length - 1;
- } else {
- $batch_end = $cache_index + $this->batch_size - 1;
- }
- $this->context = 'cache';
- $cached_count = 0;
- for ( $i = $cache_index; $i <= $batch_end; $i++ ) {
- $cached_count++;
- // fetch a fresh copy of this value every time, in case another process in the bg has updated it since
- if ( ! $this->valid_process( $process_id, $this->cache_options['current_post_index'] ) ) {
- exit;
- }
- $post_id = $cache_list[ $i ];
-
- $this->update_post_cache( $post_id );
- $this->cache_options['current_post_index'] = $i + 1;
- }
- $this->context = 'none';
-
- if ( ! $this->valid_process( $process_id, $this->cache_options['current_post_index'] ) ) {
- exit;
- }
-
- $this->cache_options['last_update'] = time();
- $this->cache_options['progress_percent'] = round( ( 100 / $cache_length ) * $this->cache_options['current_post_index'] );
- $this->cache_options['locked'] = false;
- $this->cache_options['error_count'] = 0;
-
- if ( ( $this->cache_options['current_post_index'] == $cache_length ) || ( $cache_length == 0 ) ) {// complete
-
- $this->cache_options['process_id'] = 0;
- $this->cache_options['status'] = 'finished';
- $this->cache_options['locked'] = false;
- $this->cache_options['cache_list'] = array();
-
- $this->update_cache_options( $this->cache_options, false, false );
-
- Search_Filter_Wp_Cache::purge_all_transients();
-
- if ( $this->cache_options['run_method'] == 'manual' ) {
- $cache_json = $this->cache_options;
- unset( $cache_json['cache_list'] );
- echo Search_Filter_Helper::json_encode( $cache_json );
- }
- } else { // continue
-
- if ( $this->cache_options['run_method'] == 'manual' ) {
- $this->cache_options['locked'] = false;
- $this->update_cache_options( $this->cache_options, false, false );
-
- $cache_json = $this->cache_options;
- unset( $cache_json['cache_list'] );
- echo Search_Filter_Helper::json_encode( $cache_json );
- } else {
-
- $this->update_cache_options( $this->cache_options, false, false );
-
- if ( $this->cache_options['rc_status'] == 'connect_success' ) {
- sleep( 2 ); // may not be essential, but might help on slower servers, give some delay between batches
- $this->wp_remote_process_cache( array( 'process_id' => $this->cache_options['process_id'] ) ); // make new async request
- } else {
- // don't do anything, wait for ajax initiated resum
- }
- }
- }
- } elseif ( $this->cache_options['status'] == 'termcache' ) {
- // $this->build_term_results($this->cache_options['process_id']);
-
- } elseif ( $this->cache_options['status'] != 'finished' ) {
- $this->refresh_cache(); // check for any problems or restart/initialise
- }
- exit;
- }
-
- public function valid_process( $process_id, $post_index ) {
- $live_options = $this->get_real_option( $this->option_name );
- // before making any more changes check to see if there has been a restart anywhere, or a new process spawned
- if ( ( ( $process_id != $live_options['process_id'] ) || ( $process_id == 0 ) || $live_options['restart'] == true ) || ( $post_index < $live_options['current_post_index'] ) ) {// don't allow running of non active processes (should only be one anyway)
- return false;
- }
-
- return true;
- }
-
- public function valid_term_process( $process_id ) {
- $live_options = $this->get_real_option( $this->option_name );
-
- // before making any more changes check to see if there has been a restart anywhere, or a new process spawned
- if ( ( ( $process_id != $live_options['process_id'] ) || ( $process_id == 0 ) || $live_options['restart'] == true ) ) {// don't allow running of non active processes (should only be one anyway)
- $live_options['locked'] = false;
- $this->update_cache_options( $live_options );
-
- return false;
- }
-
- return true;
-
- }
-
- public function wp_remote_process_cache( $args = array() ) {
- $query_args = array( 'action' => 'process_cache' );
- $query_args = array_merge( $query_args, $args );
- $url = add_query_arg( $query_args, admin_url( 'admin-ajax.php' ) );
- $this->wp_remote_post_with_cookie( $url );// run in the background - calls refresh cache below
-
- }
-
- public function wp_remote_build_term_results( $args = array() ) {
- $query_args = array( 'action' => 'build_term_results' );
- $query_args = array_merge( $query_args, $args );
- $url = add_query_arg( $query_args, admin_url( 'admin-ajax.php' ) );
- $remote_call = $this->wp_remote_post_with_cookie( $url );// run in the background - calls refresh cache below
- }
-
- public function can_wp_remote_post() {
- // check first to see if a user has bypassed this
- $cache_use_background_processes = Search_Filter_Helper::get_option( 'cache_use_background_processes' );
-
- if ( $cache_use_background_processes != 1 ) {
- $this->cache_options['rc_status'] = 'user_bypass';
- } else {
- $args = array();
- $args['timeout'] = 5;
-
- $query_args = array( 'action' => 'test_remote_connection' );
- $url = add_query_arg( $query_args, admin_url( 'admin-ajax.php' ) );
-
- $remote_call = wp_remote_post( $url, $args );
- // $this->cache_options['rc_status'] = "routing_error";
-
- if ( is_wp_error( $remote_call ) ) {
- $error_message = $remote_call->get_error_message();
- $this->cache_options['rc_status'] = 'connect_error';
-
- } else {
- $success = false;
-
- if ( isset( $remote_call['body'] ) ) {
- $body = trim( $remote_call['body'] );
- if ( $body == 'test_success' ) {
- $success = true;
- }
- }
-
- if ( $success ) {
- $this->cache_options['rc_status'] = 'connect_success';
- } else { // a response was received but not the one we wanted
- $this->cache_options['rc_status'] = 'routing_error';
- }
- }
- }
-
- $this->update_cache_option( 'rc_status', $this->cache_options['rc_status'] );
- // $this->update_cache_options( $this->cache_options );
- }
-
- public function test_remote_connection() {
- echo 'test_success';
- exit;
-
- }
-
- public function wp_remote_post_with_cookie( $url, $args = array() ) {
- $remote_call = wp_remote_post( $url, $args );
- if ( is_wp_error( $remote_call ) ) {
-
- $error_message = $remote_call->get_error_message();
- }
-
- }
-
- public function update_cache_options( $cache_options, $bypass_real = false, $log = true ) {
- if ( ! $bypass_real ) {
- $live_options = $this->get_real_option( $this->option_name );
- if ( isset( $live_options['restart'] ) ) {
- $cache_options['restart'] = $live_options['restart'];
- }
- }
-
- // TODO - remove.
- // if ( $cache_options['restart'] == true ) {
- // $live_options = $this->get_real_option( $this->option_name );
- // do_action( 'search_filter_update_cache_options_with_restart', $live_options, $cache_options );
- // }
-
- if( $cache_options['restart'] ) {
- $cache_options['locked'] = false;
- }
- $update_result = update_option( $this->option_name, $cache_options, false );
-
- $live_options = $this->get_real_option( $this->option_name );
- $maybe_real_option = get_option( $this->option_name );
- if ( $log === true ) {
- do_action( 'search_filter_update_cache_options', $cache_options, $this->option_name, $live_options, $maybe_real_option, $update_result );
- }
-
- }
-
- public function update_cache_option( $cache_option, $cache_value, $bypass_real = false ) {
- $cache_options = $this->get_real_option( $this->option_name, );
- $cache_options[ $cache_option ] = $cache_value;
- $update_result = update_option( $this->option_name, $cache_options, false );
-
- $live_options = $this->get_real_option( $this->option_name );
- $maybe_real_option = get_option( $this->option_name );
- do_action( 'search_filter_update_cache_option', $cache_options, $this->option_name, $live_options, $maybe_real_option, $update_result );
-
- }
-
- public function empty_cache() {
- global $wpdb;
-
- $this->cache_table_name = Search_Filter_Helper::get_table_name( 'search_filter_cache' );
- $this->term_results_table_name = Search_Filter_Helper::get_table_name( 'search_filter_term_results' );
-
- $wpdb->query( 'TRUNCATE TABLE `' . $this->cache_table_name . '`' );
- $wpdb->query( 'TRUNCATE TABLE `' . $this->term_results_table_name . '`' );
- }
-
- public function build_term_results( $process_id = 0 ) {
- $this->init_cache_options();
-
- ignore_user_abort( true ); // allow script to carry on running
- @set_time_limit( 0 );
- ini_set( 'max_execution_time', 0 );
-
- // make sure we only run the same, valid process
- if ( $process_id == 0 ) {
- if ( isset( $_GET['process_id'] ) ) {
- $process_id = (int) $_GET['process_id'];
- }
- }
-
- if ( ( ! $this->valid_term_process( $process_id ) ) || ( $this->cache_options['locked'] == true ) ) {
- exit;
- }
-
- $this->cache_options['locked'] = true;
- $this->update_cache_options( $this->cache_options );
-
- if ( $this->cache_options['status'] == 'termcache' ) {
- // empty terms first
- $this->term_results_table_name = Search_Filter_Helper::get_table_name( 'search_filter_term_results' );
-
- global $wpdb;
- $wpdb->query( 'TRUNCATE TABLE `' . $this->term_results_table_name . '`' );
- $this->get_all_filters();
- $this->cache_options['process_id'] = 0;
- $this->cache_options['status'] = 'finished';
- $this->cache_options['locked'] = false;
-
- $this->cache_options['cache_list'] = array();
- $this->update_cache_options( $this->cache_options );
- } else {
- // $this->refresh_cache(); //check for any problems or restart/initialise
- }
- exit;
- }
-
- public function get_all_filters() {
- $filters = array();
-
- $search_form_query = new WP_Query( 'post_type=search-filter-widget&post_status=publish,draft&posts_per_page=-1&suppress_filters=1' );
- $search_forms = $search_form_query->get_posts();
-
- foreach ( $search_forms as $search_form ) {
- $search_form_fields = $this->get_fields_meta( $search_form->ID );
-
- foreach ( $search_form_fields as $key => $field ) {
- $valid_filter_types = array( 'tag', 'category', 'taxonomy', 'post_meta' );
-
- if ( in_array( $field['type'], $valid_filter_types ) ) {
- if ( ( $field['type'] == 'tag' ) || ( $field['type'] == 'category' ) || ( $field['type'] == 'taxonomy' ) ) {
- array_push( $filters, '_sft_' . $field['taxonomy_name'] );
- } elseif ( $field['type'] == 'post_meta' ) {
- if ( $field['meta_type'] == 'choice' ) {
- array_push( $filters, '_sfm_' . $field['meta_key'] );
- }
- }
- }
- }
- }
- $filters = array_unique( $filters );
-
- // now we have all the filters, get the filter terms/options
- foreach ( $filters as $filter ) {
- if ( $this->is_taxonomy_key( $filter ) ) {
- $source = 'taxonomy';
- } elseif ( $this->is_meta_value( $filter ) ) {
- $source = 'post_meta';
- }
-
- $terms = $this->get_filter_terms( $filter, $source );
-
- $filter_o = array( 'source' => $source );
-
- foreach ( $terms as $term ) {
-
- $term_ids = $this->get_cache_term_ids( $filter, $term->field_value, $filter_o );
-
- $this->insert_term_results( $filter, $term->field_value, $term_ids );
- }
- }
-
- return $filters;
- }
-
- public function insert_term_results( $filter_name, $filter_value, $result_ids ) {
- global $wpdb;
-
- $insert_data = array(
- 'field_name' => $filter_name,
- 'field_value' => $filter_value,
- 'result_ids' => implode( ',', $result_ids ),
- );
-
- $this->term_results_table_name = Search_Filter_Helper::get_table_name( 'search_filter_term_results' );
-
- $wpdb->insert(
- $this->term_results_table_name,
- $insert_data
- );
-
- }
-
- public function get_cache_term_ids( $filter_name, $filter_value, $filter ) {
- global $wpdb;
-
- // test for speed
-
- $field_term_ids = array();
-
- $value_col = 'field_value';
- if ( $filter['source'] == 'taxonomy' ) {
- $value_col = 'field_value_num';
- }
-
- $this->cache_table_name = Search_Filter_Helper::get_table_name( 'search_filter_cache' );
-
- $field_terms_results = $wpdb->get_results(
- $wpdb->prepare(
- "
- SELECT post_id
- FROM $this->cache_table_name
- WHERE field_name = '%s'
- AND $value_col = '%s'
- ",
- $filter_name,
- $filter_value
- )
- );
-
- foreach ( $field_terms_results as $field_terms_result ) {
- $field_term_ids[ $field_terms_result->post_id ] = 1;
- // array_push($field_term_ids, $field_terms_result->post_id);
-
- }
-
- return array_keys( $field_term_ids );
- // return array_unique($field_term_ids);
- }
-
-
- public function get_filter_terms( $field_name, $source ) {
- global $wpdb;
-
- $field_col_select = 'field_value';
- if ( $source == 'taxonomy' ) {
- $field_col_select = 'field_value_num as field_value';
- }
-
- $this->cache_table_name = Search_Filter_Helper::get_table_name( 'search_filter_cache' );
-
- $field_terms_result = $wpdb->get_results(
- $wpdb->prepare(
- "
- SELECT DISTINCT $field_col_select
- FROM $this->cache_table_name
- WHERE field_name = '%s'
- ",
- $field_name
- )
- );
-
- return $field_terms_result;
- }
-
- public function setup_cached_search_forms() {
- $query_args = array(
- 'post_type' => 'search-filter-widget',
- 'posts_per_page' => -1,
- 'paged' => 1,
- 'post_status' => array( 'publish' ),
- 'suppress_filters' => true,
-
- /* speed improvements */
- 'no_found_rows' => true,
- 'update_post_meta_cache' => false,
- 'lang' => '',
- );
-
- if ( has_filter( 'sf_edit_search_forms_query_args' ) ) {
- $query_args = apply_filters( 'sf_edit_search_forms_query_args', $query_args, $this->sfid );
- }
-
- $search_form_query = new WP_Query( $query_args );
- $search_forms = $search_form_query->get_posts();
-
- $this->cached_search_form_settings = array();
- $this->cached_search_form_fields = array();
-
- foreach ( $search_forms as $search_form ) {
- $search_form_cache = $this->get_cache_meta( $search_form->ID );
-
- // if(isset($search_form_cache['enabled']))
- // {
- // if($search_form_cache['enabled']==1)
- // {
-
- $search_form_settings = $this->get_settings_meta( $search_form->ID );
- $search_form_fields = $this->get_fields_meta( $search_form->ID );
- // then we have a search form with caching enabled
-
- array_push( $this->cached_search_form_settings, $search_form_settings );
- array_push( $this->cached_search_form_fields, $search_form_fields );
- // }
-
- // }
- }
-
- $this->calc_cache_data( $this->cached_search_form_settings, $this->cached_search_form_fields );
- }
-
- public function calc_cache_data( $search_form_settings, $search_form_fields ) {
- $incl_post_types = array();
- $incl_post_stati = array();
- $incl_meta_keys = array();
- $it = 0;
-
- // loop through each form, and get vars so we know what needs to be cached
- foreach ( $search_form_settings as $settings ) {
-
- if ( $settings != '' ) {
- if ( isset( $settings['post_types'] ) ) {
-
- // post types
- if ( isset( $settings['post_types'] ) && is_array( $settings['post_types'] ) ) {
- $incl_post_types = array_merge( array_keys( $settings['post_types'] ), $incl_post_types );
- }
- if ( isset( $settings['post_status'] ) && is_array( $settings['post_status'] ) ) {
- $incl_post_stati = array_merge( array_keys( $settings['post_status'] ), $incl_post_stati );
- }
-
- if ( isset( $search_form_fields[ $it ] ) ) {
- if ( ( $search_form_fields[ $it ] ) ) {
-
- foreach ( $search_form_fields[ $it ] as $search_form_field ) {
- if ( $search_form_field['type'] == 'post_meta' ) {
- $is_single = true;
-
- if ( $search_form_field['meta_type'] == 'number' ) {
- if ( isset( $search_form_field['number_use_same_toggle'] ) ) {
- if ( $search_form_field['number_use_same_toggle'] != 1 ) {
- array_push( $incl_meta_keys, $search_form_field['number_end_meta_key'] );
- }
- }
- } elseif ( $search_form_field['meta_type'] == 'date' ) {
- if ( isset( $search_form_field['date_use_same_toggle'] ) ) {
- if ( $search_form_field['date_use_same_toggle'] != 1 ) {
- array_push( $incl_meta_keys, $search_form_field['date_end_meta_key'] );
- }
- }
- }
-
- array_push( $incl_meta_keys, $search_form_field['meta_key'] );
-
- }
- }
- }
- }
- }
- }
- $it++;
- }
-
- $this->cache_data['post_types'] = array_unique( $incl_post_types );
- $this->cache_data['meta_keys'] = array_unique( $incl_meta_keys );
- $this->cache_data['post_stati'] = array_unique( $incl_post_stati );
-
- if ( has_filter( 'search_filter_post_cache_data' ) ) {
- $this->cache_data = apply_filters( 'search_filter_post_cache_data', $this->cache_data, $this->sfid );
- }
-
- }
-
-
- private function get_cache_meta( $sfid ) {
- $meta_key = '_search-filter-cache';
- $cache_settings = ( get_post_meta( $sfid, $meta_key, true ) );
-
- return $cache_settings;
- }
-
- private function get_settings_meta( $sfid ) {
- // as we only want to update "enabled", then load all settings and update only this key
- $search_form_settings = Search_Filter_Helper::get_settings_meta( $sfid );
-
- return $search_form_settings;
- }
-
- private function get_fields_meta( $sfid ) {
- $meta_key = '_search-filter-fields';
- $search_form_fields = ( get_post_meta( $sfid, $meta_key, true ) );
-
- return $search_form_fields;
- }
-
- // fires when a term has been edited (ie, label or slug)... we don't save this in our caching table, but we do save some slug info in transients
- // so clear transient only when slug is changed
- // hard to detect slug change, so just detect if a term was updated in a taxonomy that was being used in S&F, do this by matching S&F post types
- public function taxonomy_edited_terms( $term_id, $taxonomy_name ) {
- if ( ! $this->cache_enabled() ) {
- return;
- }
- $this->init_cache_options();
-
- $taxonomy = get_taxonomy( $taxonomy_name );
-
- $taxonomy_post_types = array();
- if ( $taxonomy ) {
- if ( isset( $taxonomy->object_type ) ) {
- $taxonomy_post_types = $taxonomy->object_type;
- }
- }
-
- if ( empty( $taxonomy_post_types ) ) {
- return;
- }
- if ( ! isset( $this->cache_options['caching_data'] ) ) {
- return;
- }
- if ( ! isset( $this->cache_options['caching_data']['post_types'] ) ) {
- return;
- }
- if ( empty( $this->cache_options['caching_data']['post_types'] ) ) {
- return;
- }
-
- $cached_post_types = $this->cache_options['caching_data']['post_types'];
- $matching_types = array_intersect( $cached_post_types, $taxonomy_post_types );
-
- if ( count( $matching_types ) ) {// then a term changed in a post type that is used in S&F, so delete the transient
- $cache_name = Search_Filter_Wp_Data::$wp_tax_terms_cache_key . $taxonomy_name;
- Search_Filter_Wp_Cache::delete_transient( $cache_name );
- }
- }
-
- public function post_meta_updated( $meta_id, $object_id, $meta_key, $meta_value ) {
- if ( ! $this->cache_enabled() ) {
- return;
- }
- if ( $meta_key == '_edit_lock' ) {
- return;
- }
-
- $post = get_post( $object_id );
- $this->schedule_post_updated( $post->ID );
- }
-
-
- public function object_terms_updated( $post_id, $terms, $tt_ids, $taxonomy ) {
- if ( ! $this->cache_enabled() ) {
- return;
- }
- $post = get_post( $post_id );
- if ( ! $post ) {
- return;
- }
- $this->schedule_post_updated( $post_id );
- }
-
- public function updated_post_meta_updated( $meta_id, $object_id, $meta_key, $meta_value ) {
- if ( $meta_key == '_edit_lock' ) {
- return;
- }
-
- $post = get_post( $object_id );
- $this->schedule_post_updated( $post->ID );
- }
-
- public function attachment_updated( $form_fields, $post_before, $post_after ) {
- if ( ! $this->cache_enabled() ) {
- return;
- }
- $this->post_updated( $post_after->ID, $post_after, false );
- return $form_fields;
- }
- public function attachment_added( $post_id ) {
- if ( ! $this->cache_enabled() ) {
- return;
- }
- $post = get_post( $post_id );
- $this->post_updated( $post->ID, $post, false );
- }
-
- public function post_updated_action( $post_id, $post, $update ) {
- if ( ! $this->cache_enabled() ) {
- return;
- }
- $this->schedule_post_updated( $post_id );
- }
- public function wp_shutdown() {
- if ( ! $this->cache_enabled() ) {
- return;
- }
- if ( ! empty( $this->posts_updated ) ) {
- // if the user uses our action to update the post, we don't want to do it twice
- // so pop the ID off hte array on the action `search_filter_update_post` (unless we use the action somewhere)
- $this->setup_cached_search_forms();
- $this->posts_updated = array_unique( $this->posts_updated );
- foreach ( $this->posts_updated as $post_id ) {
- // $this->update_post_cache($post_id);
- $post = get_post( $post_id );
- $this->post_updated( $post_id, $post, false );
- }
- }
-
- }
- public function schedule_post_updated( $post_id ) {
- array_push( $this->posts_updated, $post_id );
- }
-
- public function post_updated( $post_id, $post, $update ) {
- $this->post_updated_count++;
-
- if ( ( ! isset( $post ) ) || ( empty( $post ) ) ) {
- return;
- }
-
- if ( ! ( wp_is_post_revision( $post_id ) && wp_is_post_autosave( $post_id ) ) ) {
- $this->init_cache_options();
-
- if ( $post->post_type != 'search-filter-widget' ) {
- // then do some checks to see if we need to update the cache for this
- $this->setup_cached_search_forms();
-
- if ( in_array( $post->post_type, $this->cache_data['post_types'] ) ) {
- $this->update_post_cache( $post_id );
- Search_Filter_Wp_Cache::purge_all_transients();
- }
- } else { // a Search & Filter form was updated...
- $this->check_cache_list_changed();
- Search_Filter_Wp_Cache::purge_all_transients();
- }
- }
- }
-
- private function check_cache_list_changed( $is_restart = false ) {
- $restart_flag = false;
-
- $this->setup_cached_search_forms();
-
- $new_cache_data = $this->cache_data;
-
- // add proper support for post status, and prevent restarts for exising users
- // by removing the built in post status we always include and init the arrays on both old
- // and new data
-
- // first, setup post_stati on old and new, so it doesn't trigger a restart automatically
- if ( ! isset( $this->cache_options['caching_data']['post_stati'] ) ) {
-
- $this->cache_options['caching_data']['post_stati'] = array();
- }
-
- if ( ! isset( $new_cache_data['post_stati'] ) ) {
-
- $new_cache_data['post_stati'] = array();
- }
-
- // now if they exist, remove the built in post status (that we force include) before do allow a compare
- $built_in_post_stati = array( 'publish', 'pending', 'draft', 'future', 'private' );
-
- $this->cache_options['caching_data']['post_stati'] = array_values( array_diff( $this->cache_options['caching_data']['post_stati'], $built_in_post_stati ) );
- $new_cache_data['post_stati'] = array_values( array_diff( $new_cache_data['post_stati'], $built_in_post_stati ) );
-
- $current_cache_data = $this->cache_options['caching_data'];
- // compare the new settings with the saved settings
- foreach ( $new_cache_data as $key => $value ) {
-
- if ( ( count( $new_cache_data[ $key ] ) ) == ( count( $current_cache_data[ $key ] ) ) ) {
- if ( is_array( $value ) ) {
- foreach ( $value as $cache_key ) {
- if ( ! in_array( $cache_key, $current_cache_data[ $key ] ) ) {
- $restart_flag = true;
- } else {
- }
- }
- }
- } else {
- $restart_flag = true;
- }
- }
-
- if ( $restart_flag == true ) {
- if ( $is_restart == true ) {
- // if this is a check in the restart procedure, then we want to update the settings
- // but not do a full restart
- $restart_flag = false;
- }
-
- do_action( 'search_filter_check_restart_cache', $current_cache_data, $new_cache_data, $restart_flag );
- $this->cache_options['caching_data'] = $new_cache_data;
-
- $this->cache_options['restart'] = $restart_flag;
- $this->update_cache_options( $this->cache_options, true );
- } else { // just trigger a rebuild of the terms - this should be done anytime someone changes a field which has terms (tag, cat, tax, meta)
-
- // need to improve to be "smarter"
-
- /*
- if($this->cache_options['status']!="inprogress")
- {// don't do anything if there it is already running, because the terms will be updated anyway when it finishes
-
- $this->cache_options['process_id'] = time();
- $this->cache_options['restart'] = false;
- $this->cache_options['status'] = "termcache";
- update_option( $this->option_name, $this->cache_options, false );
- $this->wp_remote_build_term_results(array("process_id" => $this->cache_options['process_id'])); //make new async request
- }*/
-
- }
- }
-
- public function set_cache_current_values( $post_id, $post = '' ) {
- if ( $post == '' ) {
-
- $post = get_post( $post_id );
- }
-
- $fields_data = array();
-
- // set up taxonomies
- $tax_insert_data = $this->set_post_cache_taxonomy_terms( $post_id, $post );
-
- if ( has_filter( 'search_filter_post_cache_insert_data' ) ) {
- $tax_insert_data = apply_filters( 'search_filter_post_cache_insert_data', $tax_insert_data, $post_id, 'taxonomy' );
- }
-
- $tax_insert_sql = $this->insert_post_cache_taxonomy_terms( $tax_insert_data, $post_id, $post );
-
- // setup meta
- $meta_insert_data = $this->set_post_cache_meta_terms( $post_id, $post );
-
- if ( has_filter( 'search_filter_post_cache_insert_data' ) ) {
- $meta_insert_data = apply_filters( 'search_filter_post_cache_insert_data', $meta_insert_data, $post_id, 'meta' );
- }
-
- $meta_insert_sql = $this->insert_post_cache_post_meta_terms( $meta_insert_data, $post_id, $post );
-
- $fields_added = array_merge( $tax_insert_data, $meta_insert_data );
- $fields_sql_added = array_merge( $tax_insert_sql, $meta_insert_sql );
-
- $fields_data[0] = $fields_added;
- $fields_data[1] = $fields_sql_added;
-
- // return $tax_ins_count;
- // $fields_data[1] = $sql;
-
- return $fields_data;
-
- }
-
- public function delete_post_cache( $post_id ) {
- if ( ! $this->cache_enabled() ) {
- return;
- }
- $this->post_delete_cache( $post_id, true ); // remove existing records from cache
-
- }
- public function update_post_cache( $post_id, $args = array() ) {
- $defaults = array(
- 'callback' => '',
- 'fields_data' => '',
- 'update_term_cache' => true,
- );
- $args = array_replace_recursive( $defaults, $args );
-
- global $wpdb;
- $this->init_cache_options();
-
- $post = get_post( $post_id );
-
- if ( ! $post ) {
- $this->post_delete_cache( $post_id ); // remove existing records from cache
- return;
- }
-
- $should_index_post = apply_filters( 'search_filter_cache_should_index_post', true, $post_id, $post );
- if ( ! $should_index_post ) {
- return;
- }
-
- do_action( 'search_filter_cache_update_post', $post_id, $post, $this->context );
-
- $fields_previous = array();
-
- $this->cache_table_name = Search_Filter_Helper::get_table_name( 'search_filter_cache' );
-
- $post_terms = $wpdb->get_results(
- $wpdb->prepare(
- "
- SELECT field_name, field_value, field_value_num
- FROM $this->cache_table_name
- WHERE post_id = '%d'
- ",
- $post_id
- )
- );
-
- if ( $args['update_term_cache'] == false ) {
- return;
- }
-
- $prevent_actions_callback = false;
-
- if ( empty( $args['fields_data'] ) ) {
- // either use the callback passed (if array)
- if ( gettype( $args['callback'] ) == 'array' ) {
-
- $fields_data = call_user_func( $args['callback'], array( $post_id ) );
- $prevent_actions_callback = true;
- } else {
- // else if string, call the function that gets existing data
- $fields_data = $this->set_cache_current_values( $post_id, $post );
- }
- } else {
- $prevent_actions_callback = true;
- $fields_data = $args['fields_data'];
- }
-
- if ( ! $prevent_actions_callback ) {
- // assumes when supplying your own data you dont want to run the usual funcitons
- do_action( 'search_filter_pre_update_post_cache', $post ); // this needs to run after `set_cache_current_values`
- }
-
- $fields_added = $fields_data[0];
- $fields_sql = $fields_data[1];
-
- // now get a list of all the fields in the DB
- if ( count( $post_terms ) > 0 ) {
-
- foreach ( $post_terms as $post_term ) {
- if ( ! isset( $fields_previous[ $post_term->field_name ] ) ) {
- $fields_previous[ $post_term->field_name ] = array();
- }
-
- $field_value = $post_term->field_value;
- if ( $this->is_taxonomy_key( $post_term->field_name ) ) {
- $field_value = $post_term->field_value_num;
- }
-
- array_push( $fields_previous[ $post_term->field_name ], (string) $field_value );
- }
- }
-
- // now we have 2 arrays $fields_added and $fields_previous
- // get a unique set of keys from the two of them
- $unique_keys = array_unique( array_merge( array_keys( $fields_previous ), array_keys( $fields_added ) ) );
-
- $field_differences = array();
- $combined_terms = array();
-
- foreach ( $unique_keys as $unique_key ) {
- // if the keys are set in both, then merge them
- if ( ( isset( $fields_previous[ $unique_key ] ) ) && ( isset( $fields_added[ $unique_key ] ) ) ) { // we shoudl really check for differences in values and only update those
- $diff1 = array_diff( $fields_previous[ $unique_key ], $fields_added[ $unique_key ] );
- $diff2 = array_diff( $fields_added[ $unique_key ], $fields_previous[ $unique_key ] );
- $combined_terms = array_merge( $diff1, $diff2 );
- } elseif ( isset( $fields_previous[ $unique_key ] ) ) {
- $combined_terms = $fields_previous[ $unique_key ];
- } elseif ( isset( $fields_added[ $unique_key ] ) ) {
- $combined_terms = $fields_added[ $unique_key ];
- }
-
- // push on to new array
- if ( ! empty( $combined_terms ) ) {
- $field_differences[ $unique_key ] = $combined_terms;
- }
- }
-
- // these are the differences in fields cached Vs new
- $all_delete_rows = array();
- $get_cache_terms = array();
-
- if ( empty( $field_differences ) ) {
-
- $row_data = array(
- 'post_id' => $post_id,
- 'post_parent_id' => $post->parent_id,
- );
-
- $insert_data = array(
- 'field_name' => '',
- 'field_value' => '',
- );
-
- $insert_data = array_merge( $row_data, $insert_data );
-
- $wpdb->insert(
- $this->cache_table_name,
- $insert_data
- );
-
- return;
- }
-
- $this->post_delete_cache( $post_id ); // remove existing records from cache
- $post_insert_data_count = $this->post_insert_data( $fields_sql, $post_id, $post ); // add post_meta to the cache
-
- if ( $post_insert_data_count == 0 ) {// then this post has no fields but should be able to still appear in unfiltered results - so add it to the index anyway
-
- $row_data = array(
- 'post_id' => $post_id,
- 'post_parent_id' => $post->parent_id,
- );
-
- $insert_data = array(
- 'field_name' => '',
- 'field_value' => '',
- );
-
- $insert_data = array_merge( $row_data, $insert_data );
-
- $wpdb->insert(
- $this->cache_table_name,
- $insert_data
- );
- }
-
- foreach ( $field_differences as $filter => $terms ) {
-
- $source = '';
- if ( $this->is_taxonomy_key( $filter ) ) {
- $source = 'taxonomy';
- } elseif ( $this->is_meta_value( $filter ) ) {
- $source = 'post_meta';
- }
-
- if ( $source != '' ) {
- $cc = 0;
-
- foreach ( $terms as $term_value ) {
- $cc++;
-
- // delete existing value
- $delete_args = array(
-
- 'field_name' => $filter,
- 'field_value' => $term_value,
-
- );
-
- array_push( $all_delete_rows, $delete_args );
-
- if ( ! isset( $get_cache_terms[ $filter ] ) ) {
- $get_cache_terms[ $filter ] = array();
-
- }
- $get_cache_terms[ $filter ][ $term_value ] = 1;
- }
- }
- }
- $this->term_results_delete_rows( $all_delete_rows );
-
- $all_cache_term_ids = $this->get_all_cache_term_ids( $get_cache_terms );
-
- $this->insert_all_term_results( $all_cache_term_ids );
-
- return;
- }
-
-
- private function term_results_delete_rows( $delete_rows ) {
- global $wpdb;
-
- $this->term_results_table_name = Search_Filter_Helper::get_table_name( 'search_filter_term_results' );
-
- if ( count( $delete_rows ) > 0 ) {
-
- // delete all rows in one query
- $sql_where_parts = array();
- foreach ( $delete_rows as $del_row ) {
-
- $sql_part = $wpdb->prepare( "(field_name='%s' AND field_value='%s')", $del_row['field_name'], $del_row['field_value'] );
- array_push( $sql_where_parts, $sql_part );
- }
-
- $no_conditions = count( $sql_where_parts );
-
- if ( $no_conditions > 0 ) {
-
- $sql_where_in = implode( ' OR ', $sql_where_parts );
- $sql = 'DELETE FROM ' . $this->term_results_table_name . ' WHERE ' . $sql_where_in;
- $results = $wpdb->get_results( $sql );
- }
- }
- }
-
-
- public function insert_all_term_results( $filter_term_ids ) {
- global $wpdb;
-
- $sql_where_parts = array();
-
- $this->term_results_table_name = Search_Filter_Helper::get_table_name( 'search_filter_term_results' );
-
- if ( count( $filter_term_ids ) > 0 ) {
- foreach ( $filter_term_ids as $filter_name => $filter_term_ids ) {
-
- foreach ( $filter_term_ids as $term_id => $term_result_ids ) {
- $results_ids = implode( ',', array_keys( $term_result_ids ) );
- $sql_part = $wpdb->prepare( "('%s', '%s', '%s')", $filter_name, $term_id, $results_ids );
- array_push( $sql_where_parts, $sql_part );
- }
- }
-
- $sql_where_in = implode( ', ', $sql_where_parts );
- $sql = 'INSERT INTO `' . $this->term_results_table_name . '` (`field_name`, `field_value`, `result_ids`) VALUES ' . $sql_where_in;
- $insert_result = $wpdb->get_results( $sql );
-
- }
-
- }
-
- private function get_all_cache_term_ids( $cache_terms ) {
- global $wpdb;
-
- $this->cache_table_name = Search_Filter_Helper::get_table_name( 'search_filter_cache' );
-
- $field_term_ids = array();
-
- if ( count( $cache_terms ) > 0 ) {
-
- $sql_where_parts = array();
- foreach ( $cache_terms as $filter_name => $terms ) {
- $value_col = 'field_value';
- $value_type = '%s';
-
- if ( $this->is_taxonomy_key( $filter_name ) ) {
- $value_col = 'field_value_num';
- $value_type = '%d';
- }
- /*
- else if($this->is_meta_value($filter_name))
- {
- $value_col = "field_value";
- }*/
-
- foreach ( $terms as $term_id => $term ) {
- $sql_part = $wpdb->prepare( "(field_name = '%s' AND $value_col = '$value_type')", $filter_name, $term_id );
- array_push( $sql_where_parts, $sql_part );
- }
- }
-
- $no_conditions = count( $sql_where_parts );
-
- if ( $no_conditions == 0 ) {
- return $field_term_ids;
- }
-
- $sql_where_in = implode( ' OR ', $sql_where_parts );
-
- $sql = 'SELECT post_id, field_name, field_value, field_value_num FROM ' . $this->cache_table_name . ' WHERE ' . $sql_where_in;
-
- $term_results = $wpdb->get_results( $sql );
-
- foreach ( $term_results as $term_result ) {
- if ( ! isset( $field_term_ids[ $term_result->field_name ] ) ) {
- $field_term_ids[ $term_result->field_name ] = array();
- }
-
- $field_value_col = 'field_value';
- if ( $this->is_taxonomy_key( $term_result->field_name ) ) {
- $field_value_col = 'field_value_num';
- }
-
- if ( ! isset( $field_term_ids[ $term_result->field_name ][ $term_result->{$field_value_col} ] ) ) {
- $field_term_ids[ $term_result->field_name ][ $term_result->{$field_value_col} ] = array();
- }
-
- $field_term_ids[ $term_result->field_name ][ $term_result->{$field_value_col} ][ $term_result->post_id ] = 1;
-
- }
- }
-
- return $field_term_ids;
- }
- private function post_delete_cache( $post_id, $update_term_cache = false ) {
- global $wpdb;
-
- $this->cache_table_name = Search_Filter_Helper::get_table_name( 'search_filter_cache' );
-
- if ( $update_term_cache ) {
- $results = $wpdb->get_results(
- $wpdb->prepare(
- "
- SELECT post_id, field_name, field_value_num, field_value
- FROM $this->cache_table_name
- WHERE post_id = '%d'
- ",
- $post_id
- )
- );
- }
-
- // now data for thsi post id from cache table - we've collected the data in $results for use after
- $wpdb->delete( $this->cache_table_name, array( 'post_id' => $post_id ) );
-
- if ( ! $update_term_cache ) {
- return;
- }
-
- // now we use the data collected in results, to loop through and update teh term cache table too
- $term_cache_delete_rows = array();
- $get_cache_terms = array();
-
- foreach ( $results as $result ) {
-
- $field_value_col = 'field_value';
- if ( $this->is_taxonomy_key( $result->field_name ) ) {
- $field_value_col = 'field_value_num';
- }
-
- $term_value = $result->{$field_value_col};
- $term_name = $result->field_name;
-
- $delete_args = array(
-
- 'field_name' => $term_name,
- 'field_value' => $term_value,
-
- );
-
- array_push( $term_cache_delete_rows, $delete_args );
-
- if ( ! isset( $get_cache_terms[ $term_name ] ) ) {
- $get_cache_terms[ $term_name ] = array();
-
- }
- $get_cache_terms[ $term_name ][ $term_value ] = 1;
- }
-
- // we need to update the term cache too so trigger a rebuild of term cahce
- $this->term_results_delete_rows( $term_cache_delete_rows );
- // get the new values for the rows
- $all_cache_term_ids = $this->get_all_cache_term_ids( $get_cache_terms );
- // insert the new values for the rows
- $this->insert_all_term_results( $all_cache_term_ids );
- }
-
-
-
- private function post_insert_data( $fields_sql, $post_id, $post ) {
- global $wpdb;
-
- if ( ! empty( $fields_sql ) ) {
-
- $this->cache_table_name = Search_Filter_Helper::get_table_name( 'search_filter_cache' );
- $sql_where_in = implode( ', ', $fields_sql );
- $sql = 'INSERT INTO `' . $this->cache_table_name . '` (`post_id`, `post_parent_id`, `field_name`, `field_value_num`, `field_value`, `term_parent_id`) VALUES ' . $sql_where_in;
- $insert_result = $wpdb->get_results( $sql );
- }
-
- $insert_count = count( $fields_sql );
-
- return $insert_count;
- }
-
- private function set_post_cache_taxonomy_terms( $post_id, $post ) {
- $insert_arr = array();
-
- $post_type = $post->post_type;
- $taxonomies = get_object_taxonomies( $post_type, 'objects' );
- $current_language = false;
- if ( Search_Filter_Helper::has_wpml() ) {
- $current_language = Search_Filter_Helper::wpml_current_language();
- if ( $current_language ) {
- $post_language_details = apply_filters( 'wpml_post_language_details', null, $post_id );
-
- if ( ! empty( $post_language_details ) ) {
- $language_code = $post_language_details['language_code'];
- if ( ( $language_code !== '' ) && ( ! empty( $language_code ) ) ) {
- do_action( 'wpml_switch_language', $language_code );
- }
- }
- }
- }
-
- foreach ( $taxonomies as $taxonomy_slug => $taxonomy ) {
-
- // get the terms related to post
- $terms = get_the_terms( $post_id, $taxonomy_slug );
-
- $insert_arr[ '_sft_' . $taxonomy_slug ] = array();
-
- if ( ! empty( $terms ) ) {
- foreach ( $terms as $term ) {
-
- $term_id = $term->term_id;
-
- if ( Search_Filter_Helper::has_wpml() ) {
- // we need to find the language of the post
- $post_lang_code = Search_Filter_Helper::wpml_post_language_code( $post_id );
-
- // then send this with object ID to ensure that WPML is not converting this back
- $term_id = Search_Filter_Helper::wpml_object_id( $term->term_id, $term->taxonomy, true, $post_lang_code );
- }
-
- array_push( $insert_arr[ '_sft_' . $taxonomy_slug ], (string) $term_id );
- }
- }
- }
-
- if ( Search_Filter_Helper::has_wpml() ) {
- do_action( 'wpml_switch_language', $current_language );
- }
-
- return $insert_arr;
-
- }
-
- public function insert_post_cache_taxonomy_terms( $taxonomy_insert_array, $post_id, $post ) {
- global $wpdb;
-
- $parent_id = 0;
- $wp_parent_id = wp_get_post_parent_id( $post_id );
-
- if ( $wp_parent_id ) {
- $parent_id = $wp_parent_id;
- }
-
- $sql_where_parts = array();
-
- foreach ( $taxonomy_insert_array as $field_name => $field_terms ) {
- // find depth & parent of taxonomy term
- $taxonomy_name = '';
- if ( strpos( $field_name, SF_TAX_PRE ) === 0 ) {
- $taxonomy_name = substr( $field_name, strlen( SF_TAX_PRE ) );
- }
-
- foreach ( $field_terms as $term_id ) {
-
- $term = get_term( $term_id, $taxonomy_name );
- $term_parent_id = 0;
- // If there was an error, continue to the next term.
- if ( ! is_wp_error( $term ) ) {
- $term_parent_id = $term->parent;
- }
-
- $sql_part = $wpdb->prepare( "('%d', '%d', '%s', '%d', '%s', '%d')", $post_id, $parent_id, $field_name, $term_id, '', $term_parent_id );
- array_push( $sql_where_parts, $sql_part );
- }
- }
-
- return $sql_where_parts;
- }
-
- public function get_cache_data() {
- return $this->cache_data;
- }
-
- private function set_post_cache_meta_terms( $post_id, $post ) {
- // so we need to find out which meta keys are in use
- $insert_arr = array();
-
- if ( is_array( $this->cache_data['meta_keys'] ) ) {
- foreach ( $this->cache_data['meta_keys'] as $meta_key ) {
-
- $post_custom_values = get_post_custom_values( $meta_key, $post_id );
-
- if ( is_array( $post_custom_values ) ) {
- $insert_arr[ '_sfm_' . $meta_key ] = array();
-
- foreach ( $post_custom_values as $post_custom_data ) {
-
- if ( has_filter( 'search_filter_post_cache_build_meta_data' ) ) {
- $post_custom_data = apply_filters( 'search_filter_post_cache_build_meta_data', $post_custom_data, $post_id, $meta_key );
- }
-
- if ( is_serialized( $post_custom_data ) ) {
- $post_custom_data = unserialize( $post_custom_data );
-
- }
-
- if ( is_array( $post_custom_data ) ) {
- foreach ( $post_custom_data as $post_custom_value_a ) {
- if ( is_serialized( $post_custom_value_a ) ) {
- $post_custom_value_a = unserialize( $post_custom_value_a );
- }
-
- if ( is_array( $post_custom_value_a ) ) {
- foreach ( $post_custom_value_a as $post_custom_value_b ) {
- array_push( $insert_arr[ '_sfm_' . $meta_key ], (string) $post_custom_value_b );
- }
- } else {
- array_push( $insert_arr[ '_sfm_' . $meta_key ], (string) $post_custom_value_a );
- }
- }
- } else {
- array_push( $insert_arr[ '_sfm_' . $meta_key ], (string) $post_custom_data );
- }
- }
- }
- }
- }
-
- return $insert_arr;
- }
-
-
- public function insert_post_custom_post_data( $post_id, $insert_array, $data_type = 'number' ) {
- if ( ! $this->cache_enabled() ) {
- return;
- }
- $fields_data = $this->insert_post_cache_custom_terms( $post_id, $insert_array, $data_type );
-
- $args = array(
- 'fields_data' => $fields_data,
- );
- $this->update_post_cache( $post_id, $args );
-
- }
-
-
- public function insert_post_cache_custom_terms( $post_id, $insert_array, $data_type = 'number' ) {
- // now insert
- global $wpdb;
-
- $parent_id = 0;
- $wp_parent_id = wp_get_post_parent_id( $post_id );
-
- if ( $wp_parent_id ) {
- $parent_id = $wp_parent_id;
- }
-
- $fields_values = array();
-
- $sql_where_parts = array();
- foreach ( $insert_array as $field_name => $field_terms ) {
- $fields_values[ $field_name ] = $field_terms['values'];
-
- /*
- if(!is_array($field_terms)) {
- $field_terms = array($field_terms);
- }*/
- $data_type = $field_terms['type'];
-
- foreach ( $field_terms['values'] as $term_value ) {
-
- $term_value_str = '';
- $term_value_num = 0;
-
- if ( $data_type == 'number' ) {
- $term_value_num = $term_value;
- } else {
- $term_value_str = $term_value;
- }
-
- $sql_part = $wpdb->prepare( "('%d', '%d', '%s', '%d', '%s', '%d')", $post_id, $parent_id, $field_name, $term_value_num, $term_value_str, 0 );
- array_push( $sql_where_parts, $sql_part );
- }
- }
-
- $field_data = array();
- $field_data[0] = $fields_values;
- $field_data[1] = $sql_where_parts;
-
- return $field_data;
- }
-
- private function insert_post_cache_post_meta_terms( $meta_insert_array, $post_id, $post ) {
- // now insert
- global $wpdb;
-
- $parent_id = 0;
- $wp_parent_id = wp_get_post_parent_id( $post_id );
-
- if ( $wp_parent_id ) {
- $parent_id = $wp_parent_id;
- }
-
- $sql_where_parts = array();
- foreach ( $meta_insert_array as $field_name => $field_terms ) {
- foreach ( $field_terms as $term_value ) {
-
- $sql_part = $wpdb->prepare( "('%d', '%d', '%s', '%d', '%s', '%d')", $post_id, $parent_id, $field_name, 0, $term_value, 0 );
- array_push( $sql_where_parts, $sql_part );
- }
- }
-
- return $sql_where_parts;
- }
-
- public function is_meta_value( $key ) {
- if ( substr( $key, 0, 5 ) === SF_META_PRE ) {
- return true;
- }
- return false;
- }
-
- public function is_taxonomy_key( $key ) {
- if ( substr( $key, 0, 5 ) === SF_TAX_PRE ) {
- return true;
- }
- return false;
- }
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-register-widget.php b/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-register-widget.php
deleted file mode 100644
index 2b7e2269..00000000
--- a/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-register-widget.php
+++ /dev/null
@@ -1,125 +0,0 @@
-plugin_slug = $plugin->get_plugin_slug();
-
- //register_widget('search_filter_widget');
- }*/
-
- public function __construct() {
- // Instantiate the parent object
- parent::__construct( false, 'Search & Filter Form' );
-
- // $plugin = Search_Filter::get_instance();
- $this->plugin_slug = 'search-filter';
- }
- function widget( $args, $instance ) {
- extract( $args );
-
- $title = apply_filters( 'widget_title', $instance['title'] );
-
- echo $before_widget; // Widget starts to print information
-
- // Check if title is set
- if ( $title ) {
- echo $before_title . $title . $after_title;
- }
-
- $formid = apply_filters( 'widget_title', $instance['formid'] );
-
- echo do_shortcode( '[searchandfilter id="' . $formid . '"]' );
-
- echo $after_widget; // Widget ends printing information
- // do_shortcode('[searchandfilter id="11"]');
- }
-
- function update( $new_instance, $old_instance ) {
- // Save widget options
- $instance = $old_instance;
-
- $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
- $instance['formid'] = ( ! empty( $new_instance['formid'] ) ) ? strip_tags( $new_instance['formid'] ) : '';
-
- return $instance;
-
- }
-
- function form( $instance ) {
-
- if ( ( isset( $instance['title'] ) ) && ( isset( $instance['formid'] ) ) ) {
- $title = __( esc_attr( $instance['title'] ), $this->plugin_slug );
- $formid = esc_attr( $instance['formid'] );
- } else {
- $title = __( '', $this->plugin_slug );
- $formid = __( '', $this->plugin_slug );
- }
-
- ?>
-
-
-
- Choose a Search Form:
-
-
- post_count > 0 ) {
- foreach ( $custom_posts->posts as $post ) {
- ?>
- ID ) {
- echo ' selected="selected"'; }
- ?>
- >post_title ); ?>
- have_posts()) : $custom_posts->the_post();
- ?>
- >
-
-
-
-
-
-
-
- __( 'Search & Filter', $this->plugin_slug ),
- 'singular_name' => __( 'Search Form', $this->plugin_slug ),
- 'add_new' => __( 'Add New Search Form', $this->plugin_slug ),
- 'add_new_item' => __( 'Add New Search Form', $this->plugin_slug ),
- 'edit_item' => __( 'Edit Search Form', $this->plugin_slug ),
- 'new_item' => __( 'New Search Form', $this->plugin_slug ),
- 'view_item' => __( 'View Search Form', $this->plugin_slug ),
- 'search_items' => __( 'Search \'Search Forms\'', $this->plugin_slug ),
- 'not_found' => __( 'No Search Forms found', $this->plugin_slug ),
- 'not_found_in_trash' => __( 'No Search Forms found in Trash', $this->plugin_slug ),
- );
-
- register_post_type(
- $this->plugin_slug . '-widget',
- array(
- 'labels' => $labels,
- 'public' => false,
- 'show_ui' => true,
- '_builtin' => false,
- 'capability_type' => 'page',
- 'hierarchical' => true,
- 'rewrite' => false,
- 'supports' => array( 'title' ),
- 'show_in_menu' => false,
- /*'has_archive' => true,*/
- )
- );
- }
-
-
- public function init_widget() {
- register_widget( 'Search_Filter_Register_Widget' );
- }
-
-
-
- function sf_rewrite_rules( $rules ) {
- global $searchandfilter;
- $newrules = array();
-
- $args = array(
- 'posts_per_page' => -1,
- 'post_type' => $this->plugin_slug . '-widget',
- 'post_status' => 'publish',
- );
-
- if ( has_filter( 'sf_rewrite_query_args' ) ) {
- $args = apply_filters( 'sf_rewrite_query_args', $args );
- }
-
- $all_search_forms = get_posts( $args );
-
- foreach ( $all_search_forms as $search_form ) {
- $settings = Search_Filter_Helper::get_settings_meta( $search_form->ID );
-
- if ( isset( $settings['page_slug'] ) ) {
- if ( $settings['page_slug'] != '' ) {
- $base_id = $search_form->ID;
-
- // $newrules[$settings['page_slug'].'/page/([0-9]+)/([0-9]+)$'] = 'index.php?&sfid='.$base_id.'&paged=$matches[2]&lang=$matches[1]'; //pagination & lang rule
- // $newrules[$settings['page_slug'].'/page/([0-9]+)$'] = 'index.php?&sfid='.$base_id.'&paged=$matches[1]'; //pagination rule
- // $newrules[$settings['page_slug'].'/page/([0-9]+)$'] = 'index.php?&sfid='.$base_id.'&paged=$matches[1]'; //pagination rule
-
- $use_rewrite = true;
- if ( isset( $settings['display_results_as'] ) ) {
- if ( $settings['display_results_as'] != 'archive' ) {
- $use_rewrite = false;
- }
- }
-
- if ( $use_rewrite == true ) {
- $newrules[ $settings['page_slug'] . '$' ] = 'index.php?&sfid=' . $base_id; // regular plain slug
-
- if ( has_filter( 'sf_archive_slug_rewrite' ) ) {
-
- $newrules = apply_filters( 'sf_archive_slug_rewrite', $newrules, $base_id, $settings['page_slug'] );
- }
- }
- }
- }
- }
-
- return $newrules + $rules;
- }
- /**
- * Load the plugin text domain for translation.
- *
- * @since 1.0.0
- */
- public function load_plugin_textdomain() {
-
- $domain = $this->plugin_slug;
- $locale = apply_filters( 'plugin_locale', get_locale(), $domain );
-
- load_textdomain( $domain, trailingslashit( WP_LANG_DIR ) . $domain . '/' . $domain . '-' . $locale . '.mo' );
- load_plugin_textdomain( $domain, false, basename( plugin_dir_path( dirname( __FILE__ ) ) ) . '/languages/' );
-
- }
-
-
-
- /**
- *
- * @since 1.0.0
- *
- * @param int $blog_id ID of the new blog.
- */
- /*
- public function activate_new_site( $blog_id ) {
-
- if ( 1 !== did_action( 'wpmu_new_blog' ) ) {
- return;
- }
-
- switch_to_blog( $blog_id );
- self::single_activate();
- restore_current_blog();
-
- }*/
-
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-third-party.php b/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-third-party.php
deleted file mode 100644
index 8e8f18be..00000000
--- a/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-third-party.php
+++ /dev/null
@@ -1,746 +0,0 @@
-cache_table_name = Search_Filter_Helper::get_table_name( 'search_filter_cache' );
- $this->woocommerce = new Search_Filter_Third_Party_Woocommerce();
- // frontend only, or ajax
- if ( ( ! is_admin() ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
-
- // beaverbuilder themer plugin
- // removes paged = 1 from pagination when its the first page, otherwise themer kicks in a scroll on page load
- add_filter( 'sf_main_query_pre_get_posts', array( $this, 'sf_beaver_themer_pre_get_posts' ), 11, 2 );
- // -- relevanssi
- add_filter( 'sf_edit_query_args_after_custom_filter', array( $this, 'relevanssi_filter_query_args' ), 12, 2 );
- add_filter( 'sf_apply_custom_filter', array( $this, 'relevanssi_add_custom_filter' ), 10, 3 );
-
- // -- polylang
- add_filter( 'sf_archive_results_url', array( $this, 'pll_sf_archive_results_url' ), 10, 3 );
- add_filter( 'sf_ajax_results_url', array( $this, 'pll_sf_ajax_results_url' ), 10, 2 );
- add_filter( 'sf_ajax_form_url', array( $this, 'pll_sf_form_url' ), 10, 3 );
-
- // -- ACF + WPML - looks like WPML fixed this
- // add_filter('sf_input_object_acf_field', array($this, 'acf_translate_field'), 10, 3);
-
- if ( class_exists( 'Easy_Digital_Downloads' ) ) {
- add_filter( 'shortcode_atts_downloads', array( $this, 'edd_filter_downloads_shortcode' ), 1000, 3 );
- add_filter( 'do_shortcode_tag', array( $this, 'edd_filter_downloads_shortcode_output' ), 1000, 3 );
- add_filter( 'search_filter_form_attributes', array( $this, 'edd_search_filter_form_attributes' ), 10, 2 );
- }
- if ( class_exists( 'Easy_Digital_Downloads' ) ) {
- add_filter( 'shortcode_atts_downloads', array( $this, 'edd_filter_downloads_shortcode' ), 1000, 3 );
- add_filter( 'do_shortcode_tag', array( $this, 'edd_filter_downloads_shortcode_output' ), 1000, 3 );
- add_filter( 'search_filter_form_attributes', array( $this, 'edd_search_filter_form_attributes' ), 10, 2 );
- }
-
- // -- custom layouts
- add_filter( 'shortcode_atts_custom-layout', array( $this, 'custom_layouts_shortcode_attributes' ), 1000, 3 );
- add_filter( 'search_filter_form_attributes', array( $this, 'custom_layouts_search_filter_form_attributes' ), 10, 2 );
- }
-
- // -- polylang
- add_filter( 'sf_edit_query_args', array( $this, 'sf_poly_query_args' ), 11, 2 );
- add_filter( 'pll_get_post_types', array( $this, 'pll_sf_add_translations' ), 10, 2 );
- add_filter( 'pll_get_post_types', array( $this, 'pll_sf_get_translations' ), 100000, 2 ); // try to set this as late as possible
- add_filter( 'sf_edit_cache_query_args', array( $this, 'poly_lang_sf_edit_cache_query_args' ), 10, 2 );
- add_filter( 'sf_edit_search_forms_query_args', array( $this, 'poly_lang_sf_edit_cache_query_args' ), 10, 2 ); // set the language when fetching our built in search forms (suppress filters no longer works)
- add_filter( 'sf_archive_slug_rewrite', array( $this, 'pll_sf_archive_slug_rewrite' ), 10, 3 );
- add_filter( 'sf_rewrite_query_args', array( $this, 'pll_sf_rewrite_args' ), 10, 3 );
- add_filter( 'sf_pre_get_posts_admin_cache', array( $this, 'sf_pre_get_posts_admin_cache' ), 10, 3 );
- add_action( 'search_filter_pre_update_post_cache', array( $this, 'sf_wpml_update_post_cache' ), 10, 2 );
- if ( Search_Filter_Helper::has_dynamic_ooo() ) {
- add_filter( 'search_filter_admin_option_display_results', array( $this, 'dce_filter_display_results_options' ), 10, 2 );
- add_filter( 'search_filter_form_attributes', array( $this, 'dce_search_filter_form_attributes' ), 10, 2 );
- }
-
- $this->init();
- }
-
- public function acf_translate_field( $field, $field_name, $sfid ) {
- if ( ! Search_Filter_Helper::has_wpml() ) {
- return $field;
- }
- if ( ! function_exists( 'acf_get_field' ) ) {
- return $field;
- }
-
- if ( $field ) {
- $field_key = $field['key'];
- $field_ID = $field['ID'];
-
- // now try to find the translated versino
- $field_group_id = wp_get_post_parent_id( $field_ID );
- if ( $field_group_id ) {
- $translated_group_id = Search_Filter_Helper::wpml_object_id( $field_group_id, 'acf-field-group', true );
- if ( $translated_group_id ) {
- global $wpdb;
- $result = $wpdb->get_row(
- $wpdb->prepare( "SELECT ID FROM {$wpdb->prefix}posts WHERE post_excerpt='%s' AND post_parent='%d'", $field_name, $translated_group_id )
- );
- if ( $result ) {
- $translated_field = acf_get_field( $result->ID );
- if ( $translated_field ) {
- $field = $translated_field;
- }
- }
- }
- }
- }
- return $field;
- }
-
- public function custom_layouts_shortcode_attributes( $out, $pairs, $atts ) {
- if ( ! isset( $atts['search_filter_id'] ) ) {
- return $out;
- }
-
- $this->custom_layouts_query_id = absint( $atts['search_filter_id'] );
- add_filter( 'custom-layouts\layout\query_args', array( $this, 'custom_layouts_add_sf_query' ) );
- remove_filter( 'shortcode_atts_custom-layouts', array( $this, 'custom_layouts_shortcode_attributes' ), 1000, 3 );
- $out['cache'] = 'no'; // disable query caching and handle within S&F
- return $out;
- }
- public function custom_layouts_add_sf_query( $query_args ) {
- if ( $this->custom_layouts_query_id !== 0 ) {
- $query_args['search_filter_id'] = $this->custom_layouts_query_id;
- $this->custom_layouts_query_id = 0;
- }
-
- remove_filter( 'custom-layouts\layout\query_args', array( $this, 'custom_layouts_add_sf_query' ) );
- return $query_args;
- }
-
- public function init() {
- }
-
- /* EDD integration */
- public function edd_filter_downloads_shortcode( $out, $pairs, $atts ) {
- if ( ! isset( $atts['search_filter_id'] ) ) {
- return $out;
- }
-
- $search_filter_id = intval( $atts['search_filter_id'] );
- do_shortcode( "[searchandfilter id='$search_filter_id' action='filter_next_query']" );
- // do_action("search_filter_setup_pagination", $search_filter_id);
- global $searchandfilter;
- $sf_inst = $searchandfilter->get( $search_filter_id );
- $sf_inst->query->prep_query();
-
- return $out;
- }
-
- public function edd_filter_downloads_shortcode_output( $output, $tag, $atts ) {
- if ( ! isset( $atts['search_filter_id'] ) ) {
- return $output;
- }
-
- if ( $tag !== 'downloads' ) {
- return $output;
- }
-
- global $searchandfilter;
- $search_filter_id = intval( $atts['search_filter_id'] );
-
- $sf_inst = $searchandfilter->get( $search_filter_id );
-
- // make sure this search form is tyring to use EDD
- if ( $sf_inst->settings( 'display_results_as' ) == 'custom_edd_store' ) {
-
- // wrap both pagination + results in 1 container for ajax
- $output = '' . $output . '
';
- }
-
- return $output;
- }
- public function edd_search_filter_form_attributes( $attributes, $sfid ) {
- if ( isset( $attributes['data-display-result-method'] ) ) {
- if ( $attributes['data-display-result-method'] == 'custom_edd_store' ) {
- $attributes['data-ajax-target'] = '.search-filter-results-' . $sfid;
-
- // for fixing pagination issue when there are multiple instance of the S&F.
- $attributes['data-ajax-links-selector'] = '.search-filter-results-' . $sfid . ' .edd_pagination a';
- }
- }
-
- return $attributes;
- }
- public function custom_layouts_search_filter_form_attributes( $attributes, $sfid ) {
- if ( isset( $attributes['data-display-result-method'] ) ) {
- if ( $attributes['data-display-result-method'] == 'custom_layouts' ) {
- $attributes['data-ajax-target'] = '.search-filter-results-' . $sfid;
- if ( defined( 'CUSTOM_LAYOUTS_VERSION' ) && version_compare( CUSTOM_LAYOUTS_VERSION, '1.3.2-beta', '<' ) ) {
- $attributes['data-ajax-target'] = '.cl-layout-container';
- }
-
- // for fixing pagination issue when there are multiple instance of the S&F.
- $attributes['data-ajax-links-selector'] = '.search-filter-results-' . $sfid . ' .cl-pagination a';
- }
- }
- return $attributes;
- }
-
- public function dce_search_filter_form_attributes( $attributes, $sfid ) {
- if ( isset( $attributes['data-display-result-method'] ) ) {
- $search_filter_results_class = '.search-filter-results-' . absint( $sfid );
- if ( $attributes['data-display-result-method'] == 'custom_dce_posts' ) {
- $attributes['data-ajax-target'] = '.elementor-widget-dce-dynamicposts-v2' . $search_filter_results_class;
- if ( defined( 'DCE_VERSION' ) && version_compare( DCE_VERSION, '1.13.0', '<' ) ) {
- $attributes['data-ajax-target'] = '.dce-posts-container';
- }
-
- // for fixing pagination issue when there are multiple instance of the S&F.
- $attributes['data-ajax-links-selector'] = '.elementor-widget-dce-dynamicposts-v2' . $search_filter_results_class . ' .dce-pagination a';
-
- if ( isset( $attributes['data-infinite-scroll-result-class'] ) ) {
- unset( $attributes['data-infinite-scroll-result-class'] );
- }
-
- if ( isset( $attributes['data-ajax-pagination-type'] ) ) {
- unset( $attributes['data-ajax-pagination-type'] );
- }
-
- if ( isset( $attributes['data-infinite-scroll-container'] ) ) {
- unset( $attributes['data-infinite-scroll-container'] );
- }
- } elseif ( $attributes['data-display-result-method'] == 'custom_dce_google_maps' ) {
- $attributes['data-ajax-target'] = '.elementor-widget-dyncontel-acf-google-maps' . $search_filter_results_class;
-
- // for fixing pagination issue when there are multiple instance of the S&F.
- $attributes['data-ajax-links-selector'] = '.elementor-widget-dyncontel-acf-google-maps' . $search_filter_results_class . ' .dce-pagination a';
-
- if ( isset( $attributes['data-infinite-scroll-result-class'] ) ) {
- unset( $attributes['data-infinite-scroll-result-class'] );
- }
-
- if ( isset( $attributes['data-ajax-pagination-type'] ) ) {
- unset( $attributes['data-ajax-pagination-type'] );
- }
-
- if ( isset( $attributes['data-infinite-scroll-container'] ) ) {
- unset( $attributes['data-infinite-scroll-container'] );
- }
- } elseif ( $attributes['data-display-result-method'] == 'custom_dce_google_maps_posts' ) {
- $attributes['data-ajax-target'] = '.elementor-widget-dyncontel-acf-google-maps' . $search_filter_results_class;
-
- // for fixing pagination issue when there are multiple instance of the S&F.
- $attributes['data-ajax-links-selector'] = '.elementor-widget-dyncontel-acf-google-maps' . $search_filter_results_class . ' .dce-pagination a';
-
- // we want additional areas to be udpated with ajax:
- $attributes['data-ajax-update-sections'] = wp_json_encode(
- array(
- '.elementor-widget-dce-dynamicposts-v2' . $search_filter_results_class,
- )
- );
-
- if ( isset( $attributes['data-infinite-scroll-result-class'] ) ) {
- unset( $attributes['data-infinite-scroll-result-class'] );
- }
-
- if ( isset( $attributes['data-ajax-pagination-type'] ) ) {
- unset( $attributes['data-ajax-pagination-type'] );
- }
-
- if ( isset( $attributes['data-infinite-scroll-container'] ) ) {
- unset( $attributes['data-infinite-scroll-container'] );
- }
- }
- }
-
- return $attributes;
- }
-
- public function dce_filter_display_results_options( $display_results_methods ) {
- $display_results_methods['custom_dce_posts'] = array(
- 'label' => __( 'Dynamic.ooo: Posts' ),
- 'description' =>
- '' . __( 'Use the powerful Dynamic Posts v2 widget for Elementor to create any kind of layout you can imagine.', $this->plugin_slug ) . '
' .
- '' . __( 'View the setup instructions', $this->plugin_slug ) . '
',
-
- 'base' => 'shortcode',
- );
-
- if ( version_compare( DCE_VERSION, '1.13.0', '>=' ) ) {
- $display_results_methods['custom_dce_google_maps'] = array(
- 'label' => __( 'Dynamic.ooo: Google Maps' ),
- 'description' =>
- '' . __( 'Use the powerful Dynamic Google Maps widget for Elementor to create advanced searches that work with your maps!', $this->plugin_slug ) . '
' .
- '' . __( 'View the setup instructions', $this->plugin_slug ) . '
',
-
- 'base' => 'shortcode',
- );
- }
-
- if ( version_compare( DCE_VERSION, '1.13.0', '>=' ) ) {
- $display_results_methods['custom_dce_google_maps_posts'] = array(
- 'label' => __( 'Dynamic.ooo: Posts + Google Maps' ),
- 'description' =>
- '' . __( 'Use the powerful Dynamic Google Maps widget combined with a Dynamic Posts widget to create advanced searches that work with your maps + posts at the same time!', $this->plugin_slug ) . '
' .
- '' . __( 'View the setup instructions', $this->plugin_slug ) . '
',
-
- 'base' => 'shortcode',
- );
- }
-
- return $display_results_methods;
- }
-
-
-
-
- // update all the translations too (in case they were auto updated / synced by )
- // the advanced tranlsation editor
- public function sf_wpml_update_post_cache( $post ) {
- if ( ! Search_Filter_Helper::has_wpml() ) {
- return;
- }
-
- // $post_lang_code = Search_Filter_Helper::wpml_post_language_code($post_id);
- $element_type = 'post_' . $post->post_type;
- $translation_group_id = apply_filters( 'wpml_element_trid', null, $post->ID, $element_type );
- $translations = apply_filters( 'wpml_get_element_translations', null, $translation_group_id, $element_type );
- // $lang_details = apply_filters( 'wpml_post_language_details', "", $post->ID );
- $current_lang_code = strtolower( Search_Filter_Helper::wpml_post_language_code( $post->ID ) );
-
- if ( is_array( $translations ) ) {
- foreach ( $translations as $translation ) {
- $translation_lang = strtolower( $translation->language_code );
- // don't update the current post, because we're already doing it
- if ( $translation_lang !== $current_lang_code ) {
-
- if ( ( $current_lang_code !== '' ) && ( ! empty( $current_lang_code ) ) ) {
- do_action( 'wpml_switch_language', $translation_lang );
-
- // don't infinite loop...
- remove_action( 'search_filter_pre_update_post_cache', array( $this, 'sf_wpml_update_post_cache' ), 10, 2 );
- do_action( 'search_filter_update_post_cache', $translation->element_id );
-
- add_action( 'search_filter_pre_update_post_cache', array( $this, 'sf_wpml_update_post_cache' ), 10, 2 ); }
- }
- }
- }
-
- do_action( 'wpml_switch_language', $current_lang_code );
- }
-
-
-
-
-
- // this is the last stage to modify the query, it doesn't modify anything relating to auto count or hte cache, only
- // the main query which is holding the actual results
- public function sf_beaver_themer_pre_get_posts( $query, $sfid ) {
- if ( ! class_exists( 'FLThemeBuilderLoader' ) ) {
- return $query;
- }
-
- if ( ! $query->is_main_query() ) {
- return $query;
- }
-
- if ( isset( $query->query_vars['search_filter_id'] ) ) {
- if ( $query->get( 'paged' ) == 1 ) {
- $query->set( 'paged', 0 );
- }
- }
-
- return $query;
-
- }
-
- // public function sf_edd_fes_field_save_frontend($field, $save_id, $value, $user_id)
- public function sf_edd_fes_field_save_frontend( $field, $save_id, $value ) {
- // FES has an issue where the same filter is used but with 3 args or 4 args
- // if the field is a digit, then actually this is the ID
-
- $post_id = 0;
- if ( ctype_digit( $field ) ) {
- $post_id = $field;
- } elseif ( ctype_digit( $save_id ) ) {
- $post_id = $save_id;
- }
-
- // do_action('search_filter_update_post_cache', $save_id);
- }
- public function sf_edd_fes_submission_form_published( $post_id ) {
- do_action( 'search_filter_update_post_cache', $post_id );
- }
-
- /* EDD integration */
-
- public function edd_prep_downloads_sf_query( $query, $atts ) {
- return $query;
- }
-
- // polylang integration
- // tells polylang that the post type `search-filter-widget` should be translatable
- public function pll_sf_add_translations( $types, $hide ) {
- $types['search-filter-widget'] = 'search-filter-widget';
- return $types;
- }
- public function pll_sf_get_translations( $types, $hide ) {
- $this->polylang_post_types = $types;
- return $types;
- }
-
- public function sf_poly_query_args( $query_args, $sfid ) {
- global $searchandfilter;
- $sf_inst = $searchandfilter->get( $sfid );
-
- if ( Search_Filter_Helper::has_polylang() ) {
-
- // manually set language of our query, based on the lang of the S&F post (this is because ajax requests don't get a lang set, which only occurs on this display method
- // if($sf_inst->settings("display_results_as")=="shortcode") {
-
- $terms = wp_get_post_terms( $sfid, 'language', array( 'fields' => 'all' ) );
- $terms_arr = array(); // this shold only ever have 1 value, as a post can only be in 1 lang at a time
-
- // but lets support it anyway
- foreach ( $terms as $term ) {
- array_push( $terms_arr, $term->slug );
- }
-
- // check to see if hte language we are searching, is being handles by polylang
- $post_types_arr = $sf_inst->settings( 'post_types' );
- $post_types = array();
- if ( is_array( $post_types_arr ) ) {
- $post_types = array_keys( $post_types_arr );
- }
-
- $polylang_post_types = array_keys( $this->polylang_post_types );
-
- $intersect = array_intersect( $post_types, $polylang_post_types );
- if ( count( $intersect ) > 0 ) {
- $query_args['lang'] = implode( ',', $terms_arr );
- }
- // otherwise, don't set the lang of course, because the posts certainly won't have a lang attribute (yet)
- // there will be problems however, if a user is searching multiple post types, some of which are handles by polylang
- // some not, in this case, all language must be set to be handled by polylang for consistency
-
- // }
- }
-
- return $query_args;
- }
-
- public function poly_lang_sf_edit_cache_query_args( $query_args, $sfid ) {
- if ( Search_Filter_Helper::has_polylang() ) {
- /*
- $langs = array();
- global $polylang;
- foreach ($polylang->model->get_languages_list() as $term)
- {
- array_push($langs, $term->slug);
- }
-
- //$query_args["lang"] = $langs;
- //$query_args["lang"] = implode(",", $langs);
- */
- // this sets a query for all languages (seems to changes quite often, the above was the old method of include all languages)
- $query_args['lang'] = '';
- }
-
- return $query_args;
- }
-
- public function sf_pre_get_posts_admin_cache( $query, $sfid ) {
- if ( Search_Filter_Helper::has_polylang() ) {
- $query->set( 'lang', 'all' );
- }
-
- return $query;
- }
-
-
- public function add_url_args( $url, $str ) {
- $query_arg = '?';
- if ( strpos( $url, '?' ) !== false ) {
-
- // url has a question mark
- $query_arg = '&';
- }
-
- return $url . $query_arg . $str;
-
- }
- public function pll_sf_rewrite_args( $args ) {
- // if((function_exists('pll_home_url'))&&(function_exists('pll_current_language')))
- if ( Search_Filter_Helper::has_polylang() ) {
- $args['lang'] = '';
- }
-
- return $args;
- }
- public function pll_sf_archive_slug_rewrite( $newrules, $sfid, $page_slug ) {
- // if((function_exists('pll_home_url'))&&(function_exists('pll_current_language')))
- if ( Search_Filter_Helper::has_polylang() ) {
- // takes into account language prefix
- // $newrules = array();
- $newrules[ '([a-zA-Z0-9_-]+)/' . $page_slug . '$' ] = 'index.php?&sfid=' . $sfid; // regular plain slug
- }
-
- return $newrules;
- }
- public function pll_sf_ajax_results_url( $ajax_url, $sfid ) {
- if ( ( function_exists( 'pll_home_url' ) ) && ( function_exists( 'pll_current_language' ) ) ) {
-
- global $searchandfilter;
- $sf_inst = $searchandfilter->get( $sfid );
-
- // these are the display results methods that use the current url for ajax
- // we want to do it this way, to allow other display methods (like VC / ajax integration) to carry on working
- // $retain_results_methods = array("archive", "post_type_archive", "custom", "custom_woocommerce_store", "custom_edd_store", "bb_posts_module", "divi_post_module", "divi_shop_module", "elementor_posts_element","custom_layouts","custom_dce_posts");
-
- // todo - need to add extensions via external plugin
-
- if ( $sf_inst->settings( 'display_results_as' ) !== 'shortcode' ) {
- // so don't modify the ajax url, it will have the lang in there
- return $ajax_url;
- } else {
- // if we are doing an ajax request, make sure we are including the proper home url, with lang `/en`
- // allow sf_data to remain the same value
- $sf_data = 'all';
- $url_parts = parse_url( $ajax_url );
- if ( isset( $url_parts['query'] ) ) {
- parse_str( $url_parts['query'], $url_vars );
- if ( isset( $url_vars['sf_data'] ) ) {
- $sf_data = $url_vars['sf_data'];
- }
- }
-
- // if ( $sf_inst->settings( "display_results_as" ) == "shortcode" ) {
- if ( get_option( 'permalink_structure' ) ) {
- $home_url = trailingslashit( pll_home_url() );
- $ajax_url = $this->add_url_args( $home_url, "sfid=$sfid&sf_action=get_data&sf_data=$sf_data" );
-
- } else {
- $ajax_url = $this->add_url_args( pll_home_url(), "sfid=$sfid&sf_action=get_data&sf_data=$sf_data" );
- }
- }
- }
-
- return $ajax_url;
- }
- public function pll_sf_archive_results_url( $results_url, $sfid, $page_slug = '' ) {
- if ( ( function_exists( 'pll_home_url' ) ) && ( function_exists( 'pll_current_language' ) ) ) {
- $results_url = pll_home_url( pll_current_language() );
-
- if ( get_option( 'permalink_structure' ) ) {
- if ( $page_slug != '' ) {
- $results_url = trailingslashit( trailingslashit( $results_url ) . $page_slug );
- } else {
- $results_url = trailingslashit( $results_url );
- $results_url = $this->add_url_args( $results_url, "sfid=$sfid" );
- }
- } else {
- if ( strpos( $results_url, '?' ) !== false ) {
- $param = '&';
- } else {
- $param = '?';
- }
- $results_url .= $param . 'sfid=' . $sfid;
-
- }
- }
-
- return $results_url;
- }
-
- public function pll_sf_form_url( $results_url, $sfid, $page_slug = '' ) {
- if ( ( function_exists( 'pll_home_url' ) ) && ( function_exists( 'pll_current_language' ) ) ) {
- $results_url = pll_home_url( pll_current_language() );
-
- if ( get_option( 'permalink_structure' ) ) {
- $results_url = trailingslashit( $results_url );
- $results_url = $this->add_url_args( $results_url, "sfid=$sfid" );
- $results_url = $this->add_url_args( $results_url, 'sf_action=get_data' );
- $results_url = $this->add_url_args( $results_url, 'sf_data=form' );
-
- } else {
- $results_url = $this->add_url_args( $results_url, "sfid=$sfid" );
- $results_url = $this->add_url_args( $results_url, 'sf_action=get_data' );
- $results_url = $this->add_url_args( $results_url, 'sf_data=form' );
- // $results_url .= "&sfid=".$sfid;
- }
- }
-
- return $results_url;
- }
-
- /* Relevanssi integration */
- public function remove_relevanssi_defaults() {
- // relevanssi free + older premium
- remove_filter( 'the_posts', 'relevanssi_query' );
- remove_filter( 'posts_request', 'relevanssi_prevent_default_request', 9 );
- remove_filter( 'posts_request', 'relevanssi_prevent_default_request' );
-
- // new premium
- remove_filter( 'the_posts', 'relevanssi_query', 99 );
- remove_filter( 'posts_request', 'relevanssi_prevent_default_request', 10 );
-
- remove_filter( 'query_vars', 'relevanssi_query_vars' );
- }
-
- public function relevanssi_filter_query_args( $query_args, $sfid ) {
- // always remove normal relevanssi behaviour
- $this->remove_relevanssi_defaults();
-
- global $searchandfilter;
- $sf_inst = $searchandfilter->get( $sfid );
-
- if ( $sf_inst->settings( 'use_relevanssi' ) == 1 ) {// ensure it is enabled in the admin
-
- if ( isset( $query_args['s'] ) ) {// only run if a search term has actually been set
- if ( trim( $query_args['s'] ) != '' ) {
-
- $search_term = $query_args['s'];
- $query_args['s'] = '';
- }
- }
- }
-
- return $query_args;
- }
-
- public function relevanssi_sort_result_ids( $result_ids, $query_args, $sfid ) {
- global $searchandfilter;
- $sf_inst = $searchandfilter->get( $sfid );
-
- if ( count( $result_ids ) == 1 ) {
- if ( isset( $result_ids[0] ) ) {
- if ( $result_ids[0] == 0 ) {
- return $result_ids;
- }
- }
- }
-
- if ( ( $sf_inst->settings( 'use_relevanssi' ) == 1 ) && ( $sf_inst->settings( 'use_relevanssi_sort' ) == 1 ) ) {// ensure it is enabled in the admin
-
- if ( isset( $this->relevanssi_result_ids[ 'sf-' . $sfid ] ) ) {
- $return_ids_ordered = array();
-
- $ordering_array = $this->relevanssi_result_ids[ 'sf-' . $sfid ];
-
- $ordering_array = array_flip( $ordering_array );
-
- foreach ( $result_ids as $result_id ) {
- $return_ids_ordered[ $ordering_array[ $result_id ] ] = $result_id;
- }
-
- ksort( $return_ids_ordered );
-
- return $return_ids_ordered;
- }
- }
-
- return $result_ids;
- }
-
-
- public function relevanssi_add_custom_filter( $ids_array, $query_args, $sfid ) {
- global $searchandfilter;
- $sf_inst = $searchandfilter->get( $sfid );
-
- $this->remove_relevanssi_defaults();
-
- if ( $sf_inst->settings( 'use_relevanssi' ) == 1 ) {// ensure it is enabled in the admin
-
- if ( isset( $query_args['s'] ) ) {// only run if a search term has actually been set
-
- if ( trim( $query_args['s'] ) != '' ) {
- // $search_term = $query_args['s'];
-
- if ( function_exists( 'relevanssi_do_query' ) ) {
- $expand_args = array(
- 'posts_per_page' => -1,
- 'paged' => 1,
- 'fields' => 'ids', // relevanssi only implemented support for this in 3.5 - before this, it would return the whole post object
-
- // 'orderby' => "", //remove sorting
- 'meta_key' => '',
- // 'order' => "asc",
-
- /* speed improvements */
- 'no_found_rows' => true,
- 'update_post_meta_cache' => false,
- 'update_post_term_cache' => false,
-
- );
-
- $query_args = array_merge( $query_args, $expand_args );
-
- // $query_args['orderby'] = "relevance";
- // $query_args['order'] = "asc";
- unset( $query_args['order'] );
- unset( $query_args['orderby'] );
-
- // The Query
- $query_arr = new WP_Query( $query_args );
- relevanssi_do_query( $query_arr );
-
- $ids_array = array();
- if ( $query_arr->have_posts() ) {
-
- foreach ( $query_arr->posts as $post ) {
- $post_id = 0;
-
- if ( is_numeric( $post ) ) {
- $post_id = $post;
- } elseif ( is_object( $post ) ) {
- if ( isset( $post->ID ) ) {
- $post_id = $post->ID;
- }
- }
-
- if ( $post_id != 0 ) {
- array_push( $ids_array, $post_id );
- }
- }
- }
-
- if ( $sf_inst->settings( 'use_relevanssi_sort' ) == 1 ) {
- // keep a copy for ordering the results later
- $this->relevanssi_result_ids[ 'sf-' . $sfid ] = $ids_array;
-
- // now add the filter
- add_filter( 'sf_apply_filter_sort_post__in', array( $this, 'relevanssi_sort_result_ids' ), 10, 3 );
- }
-
- return $ids_array;
- }
- }
- }
- }
-
- return array( false ); // this tells S&F to ignore this custom filter
- }
-}
-require_once plugin_dir_path( __FILE__ ) . 'third-party/class-search-filter-woocommerce.php';
diff --git a/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-wp-cache.php b/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-wp-cache.php
deleted file mode 100644
index 35704a50..00000000
--- a/wp/wp-content/plugins/search-filter-pro/includes/class-search-filter-wp-cache.php
+++ /dev/null
@@ -1,133 +0,0 @@
-term_id ] = $taxonomy_term;
- self::$wp_tax_terms[ $taxonomy_name ]['slug'][ $taxonomy_term->slug ] = $taxonomy_term;
- }
-
- self::$wp_tax_terms_found_all[ $taxonomy_name ] = true;
- }
- }
- }
- }
-
- public static function get_taxonomy_terms( $taxonomy_name ) {
- self::setup( $taxonomy_name );
-
- if ( ( isset( self::$wp_tax_terms[ $taxonomy_name ] ) ) && ( isset( self::$wp_tax_terms_found_all[ $taxonomy_name ] ) ) ) {
- if ( self::$wp_tax_terms_found_all[ $taxonomy_name ] == true ) {
- return self::$wp_tax_terms[ $taxonomy_name ]['id'];
- }
- }
-
- self::$wp_tax_terms_found_all[ $taxonomy_name ] = true;
-
- self::$wp_tax_terms[ $taxonomy_name ] = array();
- self::$wp_tax_terms[ $taxonomy_name ]['id'] = array();
- self::$wp_tax_terms[ $taxonomy_name ]['slug'] = array();
-
- self::$wp_tax_terms[ $taxonomy_name ] = array();
- $t_taxonomy_terms = get_terms(
- $taxonomy_name,
- array(
- 'hide_empty' => false,
- )
- );
-
- if ( ! empty( $t_taxonomy_terms ) ) {
-
- foreach ( $t_taxonomy_terms as $taxonomy_term ) {
- $tax_term_basic = new stdClass();
- $tax_term_basic->term_id = $taxonomy_term->term_id;
- $tax_term_basic->slug = $taxonomy_term->slug;
-
- self::$wp_tax_terms[ $taxonomy_name ]['id'][ $taxonomy_term->term_id ] = $tax_term_basic;
- self::$wp_tax_terms[ $taxonomy_name ]['slug'][ $taxonomy_term->slug ] = $tax_term_basic;
-
- // self::$wp_tax_terms[$taxonomy_name]['id'][$t_taxonomy_terms[$ti]->term_id] = $t_taxonomy_terms[$ti];
- // self::$wp_tax_terms[$taxonomy_name]['slug'][$t_taxonomy_terms[$ti]->slug] = $t_taxonomy_terms[$ti];
- }
-
- if ( self::$use_transients == 1 ) {
- Search_Filter_Wp_Cache::set_transient( self::$wp_tax_terms_cache_key . $taxonomy_name, array_values( self::$wp_tax_terms[ $taxonomy_name ]['id'] ) );
- }
- }
-
- /*
- for ($ti = 0; $ti < count($t_taxonomy_terms); $ti++) {
- self::$wp_tax_terms[$taxonomy_name]['id'][$t_taxonomy_terms[$ti]->term_id] = $t_taxonomy_terms[$ti];
- self::$wp_tax_terms[$taxonomy_name]['slug'][$t_taxonomy_terms[$ti]->slug] = $t_taxonomy_terms[$ti];
- }*/
-
- if ( empty( self::$wp_tax_terms[ $taxonomy_name ] ) ) {
- return array();
- }
-
- return self::$wp_tax_terms[ $taxonomy_name ]['id'];
- }
-
-
- public static function get_taxonomy_term_by( $by, $term_name, $taxonomy_name ) {
- self::setup( $taxonomy_name );
-
- if ( ! isset( self::$wp_tax_terms[ $taxonomy_name ] ) ) {
- self::$wp_tax_terms[ $taxonomy_name ] = array();
- self::$wp_tax_terms[ $taxonomy_name ]['id'] = array();
- self::$wp_tax_terms[ $taxonomy_name ]['slug'] = array();
- }
-
- if ( isset( self::$wp_tax_terms[ $taxonomy_name ][ $by ][ $term_name ] ) ) {
- return self::$wp_tax_terms[ $taxonomy_name ][ $by ][ $term_name ];
- }
-
- // else, term name does not exist, so fetch it
- $term = get_term_by( $by, $term_name, $taxonomy_name );
-
- // if ( !is_wp_error( $term ) ) {
- if ( $term ) {
- self::$wp_tax_terms[ $taxonomy_name ]['id'][ $term->term_id ] = $term;
- self::$wp_tax_terms[ $taxonomy_name ]['slug'][ $term->slug ] = $term;
-
- if ( isset( self::$wp_tax_terms[ $taxonomy_name ][ $by ][ $term_name ] ) ) {
- return self::$wp_tax_terms[ $taxonomy_name ][ $by ][ $term_name ];
- } else {
- return array();
- }
- }
-
- return false;
- }
-
- public static function get_post_type_taxonomies( $post_type ) {
- }
-
- public static function is_taxonomy_archive( $query = '' ) {
- if ( $query == '' ) {
- if ( self::$is_taxonomy_archive === -1 ) {
- self::$is_taxonomy_archive = false;
-
- if ( ( is_tax() || is_category() || is_tag() ) && ( is_archive() ) ) {
-
- self::$is_taxonomy_archive = true;
- }
- }
-
- return self::$is_taxonomy_archive;
- } else {
- if ( ( $query->is_tax() || $query->is_category() || $query->is_tag() ) && ( $query->is_archive() ) ) {
-
- return true;
- }
-
- return false;
- }
-
- }
- public static function get_post_types_by_taxonomy( $tax = 'category' ) {
- $out = array();
- $post_types = get_post_types();
- foreach ( $post_types as $post_type ) {
-
- if ( ! isset( self::$post_types[ $post_type ] ) ) {
- self::$post_types[ $post_type ] = array();
- }
-
- if ( ! isset( self::$post_types[ $post_type ]['taxonomies'] ) ) {
- self::$post_types[ $post_type ]['taxonomies'] = get_object_taxonomies( $post_type );
- }
-
- $taxonomies = self::$post_types[ $post_type ]['taxonomies'];
- if ( in_array( $tax, $taxonomies ) ) {
- $out[] = $post_type;
- }
- }
- return $out;
- }
-
- public static function is_taxonomy_archive_of_post_type( $post_type, $single = true ) {
- if ( ! self::is_taxonomy_archive() ) {
- return false;
- }
-
- if ( ! isset( self::$post_types[ $post_type ] ) ) {
- self::$post_types[ $post_type ] = array();
- }
-
- if ( ! isset( self::$post_types[ $post_type ]['taxonomies'] ) ) {
- self::$post_types[ $post_type ]['taxonomies'] = get_object_taxonomies( $post_type );
- }
-
- global $searchandfilter;
- $term = $searchandfilter->get_queried_object();
- $is_taxonomy_archive = false;
-
- if ( isset( $term->taxonomy ) ) {
- $taxonomy_name = $term->taxonomy;
-
- $tax_post_types = self::get_post_types_by_taxonomy( $taxonomy_name );
-
- // make sure this tax is not shared unless single is false(we need for woocommerce, because all taxes are shared betweeen 2 post types - variations and products
- if ( ( ( 1 === count( $tax_post_types ) ) && ( $single ) ) || ( ! $single ) ) {
- $is_taxonomy_archive = in_array( $taxonomy_name, self::$post_types[ $post_type ]['taxonomies'] );
- }
- }
-
- return $is_taxonomy_archive;
- }
-}
-
diff --git a/wp/wp-content/plugins/search-filter-pro/includes/index.php b/wp/wp-content/plugins/search-filter-pro/includes/index.php
deleted file mode 100644
index 8142269b..00000000
--- a/wp/wp-content/plugins/search-filter-pro/includes/index.php
+++ /dev/null
@@ -1 +0,0 @@
-cache_table_name = Search_Filter_Helper::get_table_name( 'search_filter_cache' );
-
- if ( ( ! is_admin() ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
- add_filter( 'sf_edit_query_args', array( $this, 'sf_woocommerce_query_args' ), 11, 2 );
- add_filter( 'sf_main_query_pre_get_posts', array( $this, 'sf_woocommerce_pre_get_posts' ), 11, 2 );
- add_filter( 'sf_query_cache_post__in', array( $this, 'sf_woocommerce_get_variable_product_ids' ), 11, 2 );
- add_filter( 'sf_query_post__in', array( $this, 'sf_woocommerce_convert_variable_product_ids' ), 11, 2 );
- add_filter( 'sf_query_cache_count_ids', array( $this, 'sf_woocommerce_conv_variable_ids' ), 11, 2 );
- add_filter( 'sf_admin_filter_settings_save', array( $this, 'sf_woocommerce_filter_settings_save' ), 11, 2 );
- add_filter( 'sf_query_cache_register_all_ids', array( $this, 'sf_woocommerce_register_all_result_ids' ), 11, 2 );
- add_filter( 'sf_apply_custom_filter', array( $this, 'sf_woocommerce_add_stock_status' ), 11, 3 );
- // Integrate with WC products shortcode.
- add_filter( 'shortcode_atts_products', array( $this, 'wc_products_shortcode_attributes' ), 1000, 3 );
- }
-
- // Public + admin.
- add_filter( 'search_filter_post_cache_insert_data', array( $this, 'sf_woo_post_cache_insert_data' ), 10, 3 );
- add_action( 'search_filter_cache_update_post', array( $this, 'sf_woo_update_post_cache' ), 10, 3 );
- add_filter( 'search_filter_post_cache_data', array( $this, 'sf_woocommerce_cache_data' ), 11, 2 );
- add_filter( 'search_filter_cache_should_index_post', array( $this, 'sf_woocommerce_cache_update' ), 11, 3 );
- }
-
- public function is_woo_enabled() {
- if ( ! isset( $this->woocommerce_enabled ) ) {
- if ( ! function_exists( 'is_plugin_active' ) ) {
- include_once ABSPATH . '/wp-admin/includes/plugin.php';
- }
-
- $this->woocommerce_enabled = is_plugin_active( 'woocommerce/woocommerce.php' );
- }
- return $this->woocommerce_enabled;
- }
-
- public function wc_products_shortcode_attributes( $out, $pairs, $atts ) {
-
- if ( ! isset( $atts['search_filter_id'] ) ) {
- return $out;
- }
-
- // Remove products shortcode caching.
- $out['cache'] = false;
- $this->wc_products_query_id = absint( $atts['search_filter_id'] );
-
- add_filter( 'woocommerce_shortcode_products_query', array( $this, 'wc_add_sf_query' ) );
- remove_filter( 'shortcode_atts_products', array( $this, 'wc_products_shortcode_attributes' ), 1000, 3 );
- return $out;
- }
-
- public function wc_add_sf_query( $query_args ) {
-
- // Remove products shortcode caching.
- if ( $this->wc_products_query_id !== 0 ) {
- $query_args['search_filter_id'] = $this->wc_products_query_id;
- $this->wc_products_query_id = 0;
- }
-
- remove_filter( 'woocommerce_shortcode_products_query', array( $this, 'wc_add_sf_query' ) );
- return $query_args;
- }
-
- public function sf_woocommerce_product_sorting( $orderby ) {
- if ( isset( $orderby['popularity'] ) ) {
- unset( $orderby['popularity'] );
- }
- return $orderby;
- }
-
- public function sf_woocommerce_add_stock_status( $ids_array, $query_args, $sfid ) {
- if ( ! $this->is_woo_enabled() ) {
- return $ids_array;
- }
-
- if ( ! $this->sf_woocommerce_is_woo_query( $sfid ) ) {
- return $ids_array;
- }
-
- /*
- * Get the instock IDs from the DB directly check for the woocommerce setting
- * "show out of stock products", and only enable this on that condition.
- */
-
- if ( get_option( 'woocommerce_hide_out_of_stock_items' ) === 'yes' ) {
-
- $merge = true;
- if ( isset( $ids_array[0] ) ) {
- if ( $ids_array[0] === false ) {
- $merge = false;
- }
- }
-
- global $wpdb;
-
- $term_results_table_name = Search_Filter_Helper::get_table_name( 'search_filter_term_results' );
-
- $field_terms_results = $wpdb->get_results(
- "
- SELECT field_name, field_value, result_ids
- FROM $term_results_table_name
- WHERE field_name = '_sfm__stock_status'
- AND field_value = 'instock' LIMIT 0, 1
- "
- );
-
- if ( ( count( $field_terms_results ) === 1 ) && ( property_exists( $field_terms_results[0], 'result_ids' ) ) ) {
- $instock_ids = explode( ',', $field_terms_results[0]->result_ids );
-
- if ( $merge === false ) {
- $ids_array = $instock_ids;
- } else {
- $ids_array = array_intersect( $ids_array, $instock_ids );
- }
- }
- }
-
- return $ids_array;
- }
-
- public function sf_woo_update_product_insert_data( $insert_data, $post_id, $type ) {
-
- $product = wc_get_product( $post_id );
- // $post_status = get_post_status($post->ID); //don't index variations if the parent is private
-
- if ( $product->is_type( 'variable' ) ) {
-
- // then remove `price`, and remove all taxonomy related attributes (as we want to add them manually, based on variations data)
- if ( $type == 'taxonomy' ) {
-
- $product_attributes = $product->get_attributes();
-
- foreach ( $insert_data as $data_key => $data ) {
-
- $attr_key = strpos( $data_key, '_sft_pa_' );
-
- if ( $attr_key !== false ) {
-
- $tax_name = str_replace( '_sft_', '', $data_key );
-
- if ( isset( $product_attributes[ $tax_name ] ) ) {
-
- // Now check to see if the attribute is used as variation, if not, then index it.
- if ( $product_attributes[ $tax_name ]['variation'] === true ) {
- unset( $insert_data[ $data_key ] );
- }
- }
- }
- }
- } elseif ( $type === 'meta' ) {
- $this->wc_variable_meta_keys = array_keys( $insert_data );
- }
- } elseif ( $product->is_type( 'simple' ) ) {
- // Then we need to add product attributes, that are not taxonomies.
- if ( $type === 'meta' ) {
-
- $product_attributes = $product->get_attributes();
-
- foreach ( $product_attributes as $product_attribute ) {
-
- if ( ! $product_attribute->is_taxonomy() ) {
- $attribute_name = $product_attribute->get_name();
- $sf_field_name = '_sfm_attribute_' . $attribute_name;
- $attribute_options = $product_attribute->get_options();
-
- $insert_data[ $sf_field_name ] = $attribute_options;
- }
- }
- }
- }
-
- return $insert_data;
- }
- public function sf_woo_update_post_cache( $post_id, $post, $context ) {
- // If we're not in the cache context, and we update a parent post, then we want to
- // rebuild the children.
- if ( $post->post_type !== 'product' ) {
- return;
- }
-
- if ( $context !== 'none' ) {
- return;
- }
-
- // If the product is variable, loop the through the IDS:
- $product = wc_get_product( $post_id );
- if ( $product->is_type( 'variable' ) ) {
- $variations = $product->get_available_variations();
- foreach ( $variations as $variation ) {
- do_action( 'search_filter_update_post_cache', $variation['variation_id'] );
- }
- }
- }
- public function sf_woo_update_variation_insert_data( $insert_data, $post_id, $type ) {
-
- if ( $type === 'taxonomy' ) {
- $variation_tax_data = $this->sf_woo_get_variation_insert_data_tax( $post_id );
- $insert_data = array_merge( $insert_data, $variation_tax_data );
-
- } elseif ( $type === 'meta' ) {
- $variation_meta_data = $this->sf_woo_get_variation_insert_data_meta( $post_id );
- $insert_data = array_merge( $insert_data, $variation_meta_data );
-
- }
- return $insert_data;
- }
-
- public function sf_woo_post_cache_insert_data( $insert_data, $post_id, $type ) {
- if ( ! $this->is_woo_enabled() ) {
- return $insert_data;
- }
-
- $post = get_post( $post_id );
-
- if ( ! $post ) {
- return $insert_data;
- }
- if ( $post->post_type === 'product' ) {
- return $this->sf_woo_update_product_insert_data( $insert_data, $post_id, $type );
- } elseif ( $post->post_type === 'product_variation' ) {
- return $this->sf_woo_update_variation_insert_data( $insert_data, $post_id, $type );
- }
-
- return $insert_data;
- }
-
-
- private function sf_woo_get_product_terms_insert_data( $post_id ) {
-
- $insert_arr = array();
-
- if ( ! $this->is_woo_enabled() ) {
- return $insert_arr;
- }
-
- $post = get_post( $post_id );
- $post_type = $post->post_type;
- $taxonomies = get_object_taxonomies( $post_type, 'objects' );
- $current_language = false;
-
- if ( Search_Filter_Helper::has_wpml() ) {
- $current_language = Search_Filter_Helper::wpml_current_language();
- $post_language_details = apply_filters( 'wpml_post_language_details', null, $post_id );
-
- if ( ! empty( $post_language_details ) ) {
- $language_code = $post_language_details['language_code'];
- if ( ( $language_code !== '' ) && ( ! empty( $language_code ) ) ) {
- do_action( 'wpml_switch_language', $language_code );
- }
- }
- }
-
- foreach ( $taxonomies as $taxonomy_slug => $taxonomy ) {
-
- $attr_key = strpos( $taxonomy_slug, 'pa_' );
- if ( ( $attr_key === false ) && ( $attr_key !== 0 ) ) {
-
- // get the terms related to post
- $terms = get_the_terms( $post_id, $taxonomy_slug );
- $insert_arr[ '_sft_' . $taxonomy_slug ] = array();
-
- if ( ! empty( $terms ) ) {
- foreach ( $terms as $term ) {
-
- $term_id = $term->term_id;
-
- if ( Search_Filter_Helper::has_wpml() ) {
- // we need to find the language of the post
- $post_lang_code = Search_Filter_Helper::wpml_post_language_code( $post_id );
-
- // then send this with object ID to ensure that WPML is not converting this back
- $term_id = Search_Filter_Helper::wpml_object_id( $term->term_id, $term->taxonomy, true, $post_lang_code );
- }
-
- array_push( $insert_arr[ '_sft_' . $taxonomy_slug ], (string) $term_id );
- }
- }
- }
- }
-
- if ( Search_Filter_Helper::has_wpml() ) {
- do_action( 'wpml_switch_language', $current_language );
- }
-
- return $insert_arr;
-
- }
-
- public function sf_woo_get_variation_post_meta_values( $variation_id ) {
-
- $index_data = array();
-
- $meta_key_fields = $this->get_all_meta_key_names();
-
- $wanted_meta_keys = array();
- foreach ( $meta_key_fields as $meta_key_field_name ) {
-
- if ( ( $meta_key_field_name !== '_price' ) && ( strpos( $meta_key_field_name, 'attribute_' ) === false ) ) {
- array_push( $wanted_meta_keys, $meta_key_field_name );
- }
- }
-
- $remove_keys = array( '_stock_status' );
- $wanted_meta_keys = array_diff( $wanted_meta_keys, $remove_keys );
-
- foreach ( $wanted_meta_keys as $wanted_meta_key ) {
-
- $post_meta_values = get_post_meta( $variation_id, $wanted_meta_key );
-
- if ( ! empty( $post_meta_values ) ) {
- $index_data[ '_sfm_' . $wanted_meta_key ] = array();
- $index_data[ '_sfm_' . $wanted_meta_key ]['values'] = $post_meta_values;
- $index_data[ '_sfm_' . $wanted_meta_key ]['type'] = 'string';
- }
- }
-
- if ( isset( $index_data['_sfm__stock_status'] ) ) {
-
- }
-
- return $index_data;
- }
- public function sf_woo_get_variation_taxonomy_values( $index_data, $product_id ) {
-
- // $index_data = array();
-
- $product = wc_get_product( $product_id );
-
- $product_attributes = $product->get_attributes();
-
- foreach ( $product_attributes as $product_attribute ) {
-
- // now check to see if the attribute is used as variation, if not, then index it
- if ( $product_attribute['variation'] === false ) {
-
- $name = $product_attribute['name'];
- // $product_options = array();
- if ( ( ! is_array( $product_attribute['options'] ) ) && ( ! empty( $product_attribute['options'] ) ) ) {
- $product_options = array( $product_attribute['options'] );
- } else {
- $product_options = $product_attribute['options'];
- }
-
- if ( ! empty( $product_options ) ) {
- $index_data[ '_sft_' . $name ] = array();
- $index_data[ '_sft_' . $name ]['values'] = $product_options;
- $index_data[ '_sft_' . $name ]['type'] = 'number';
- }
- }
- }
-
- return $index_data;
-
- }
-
- public function sf_woo_get_variation_taxonomy_insert_data( $index_data, $product_id ) {
-
- $product = wc_get_product( $product_id );
-
- if ( $product ) {
- $product_attributes = $product->get_attributes();
-
- foreach ( $product_attributes as $product_attribute ) {
-
- // now check to see if the attribute is used as variation, if not, then index it
- if ( $product_attribute['variation'] === false ) {
-
- $name = $product_attribute['name'];
- // $product_options = array();
- if ( ( ! is_array( $product_attribute['options'] ) ) && ( ! empty( $product_attribute['options'] ) ) ) {
- $product_options = array( $product_attribute['options'] );
- } else {
- $product_options = $product_attribute['options'];
- }
-
- if ( ! empty( $product_options ) ) {
- $index_data[ '_sft_' . $name ] = $product_options;
- }
- }
- }
- }
-
- return $index_data;
-
- }
-
- public function sf_woo_post_cache_get_delete_variation_data( $post_id ) {
-
- // delete all variation data from the cache - we lookup our own tables, because the variation IDs might have changed
- global $wpdb;
-
- // so loop through any IDs, collect all the field name & values
- // delete them all, then send the field name and values to the term updater
- // do_action("search_filter_delete_post_cache", $variation_id);
- $this->cache_table_name = Search_Filter_Helper::get_table_name( 'search_filter_cache' );
-
- $results = $wpdb->get_results(
- $wpdb->prepare(
- "
- SELECT DISTINCT post_id
- FROM $this->cache_table_name
- WHERE post_parent_id = '%d'
- ",
- $post_id
- )
- );
-
- foreach ( $results as $result ) {
- do_action( 'search_filter_delete_post_cache', $result->post_id );
- }
- }
-
- public function sf_woo_get_variation_insert_data_meta( $variation_id ) {
-
- if ( ! $this->is_woo_enabled() ) {
- return array();
- }
-
- $current_language = false;
- if ( Search_Filter_Helper::has_wpml() ) {
- $current_language = Search_Filter_Helper::wpml_current_language();
- $post_language_details = apply_filters( 'wpml_post_language_details', null, $variation_id );
-
- if ( ! empty( $post_language_details ) ) {
- $language_code = $post_language_details['language_code'];
- if ( ( $language_code !== '' ) && ( ! empty( $language_code ) ) ) {
- do_action( 'wpml_switch_language', $language_code );
- }
- }
- }
-
- $variation = wc_get_product( $variation_id );
- $parent_product = wc_get_product( $variation->get_parent_id() );
-
- // loop through the variations
- $single_variation = new WC_Product_Variation( $variation_id );
- $variation_price = $single_variation->get_price();
- $variation_attributes = $single_variation->get_variation_attributes();
-
- // start by adding post meta / can be an empty array
- // $variation_values = array();
-
- // TODO - WHAT IS THIS DOING?
- $variation_values = $this->sf_woo_get_variation_post_meta_values( $variation_id );
- // loop through the variations attributes
- foreach ( $variation_attributes as $variation_key => $variation_value ) {
-
- if ( strpos( $variation_key, 'attribute_' ) !== false ) {
- // if the name begins with attribute_pa, then its a taxonomy
- if ( strpos( $variation_key, 'attribute_pa' ) === false ) {
-
- if ( ! empty( $variation_value ) ) {
- $meta_name = $variation_key;
- $field_name = '_sfm_' . $meta_name;
- $variation_values[ $field_name ] = array( $variation_value );
- }
- }
- }
- }
-
- // Figure out which meta keys to index of the variations.
- global $search_filter_post_cache;
- $cache_data = $search_filter_post_cache->get_cache_data();
- $meta_keys = array();
- if ( isset( $cache_data['meta_keys'] ) ) {
- if ( is_array( $cache_data['meta_keys'] ) ) {
- // $meta_keys = $cache_data['meta_keys'];
- foreach ( $cache_data['meta_keys'] as $meta_key ) {
- $meta_key = '_sfm_' . $meta_key;
- array_push( $meta_keys, $meta_key );
- }
- }
- }
-
- // merge meta keys in the post cache with the existing passed through
- $this->wc_variable_meta_keys = array_unique( array_merge( $this->wc_variable_meta_keys, $meta_keys ) );
-
- // now we add the other post meta, like _width, _height
- $post_meta = get_post_meta( $variation_id );
-
- foreach ( $this->wc_variable_meta_keys as $meta_key ) {
-
- // make sure the key starts with meta prefix
- $prefix = '_sfm_';
- if ( strpos( $meta_key, $prefix ) !== false ) {
-
- if ( substr( $meta_key, 0, strlen( $prefix ) ) == $prefix ) {
- $meta_key = substr( $meta_key, strlen( $prefix ) );
- }
-
- if ( isset( $post_meta[ $meta_key ] ) ) {
- $field_name = '_sfm_' . $meta_key;
- $variation_value = $post_meta[ $meta_key ];
- $variation_values[ $field_name ] = array();
- if ( ! is_array( $variation_value ) ) {
- $variation_value = array( $variation_value );
- }
- $variation_values[ $field_name ] = $variation_value;
- } else {
- if ( ! isset( $meta_missing_count[ $meta_key ] ) ) {
- $meta_missing_count[ $meta_key ] = 0;
- }
- $meta_missing_count[ $meta_key ]++;
- }
- }
- }
-
- $variation_values['_sfm__price'] = array( $variation_price );
-
- // We're managing stock status at product level, not variation, so forget about it for variations
- // (ie, just copy the parent value).
- if ( $parent_product->managing_stock() == true ) {
- if ( isset( $variation_values['_sfm__stock_status'] ) ) {
- unset( $variation_values['_sfm__stock_status'] );
- }
- // Copy the value from the parent product to the variation so we can get matches on _stock_status.
- $variation_values['_sfm__stock_status'] = array( $parent_product->get_stock_status() );
- }
- $variation_insert_data = $variation_values;
-
- if ( Search_Filter_Helper::has_wpml() ) {
- do_action( 'wpml_switch_language', $current_language );
- }
- return $variation_insert_data;
- }
- public function sf_woo_get_variation_insert_data_tax( $variation_id ) {
-
- if ( ! $this->is_woo_enabled() ) {
- return array();
- }
-
- $current_language = false;
- if ( Search_Filter_Helper::has_wpml() ) {
- $current_language = Search_Filter_Helper::wpml_current_language();
- $post_language_details = apply_filters( 'wpml_post_language_details', null, $variation_id );
-
- if ( ! empty( $post_language_details ) ) {
- $language_code = $post_language_details['language_code'];
- if ( ( $language_code !== '' ) && ( ! empty( $language_code ) ) ) {
- do_action( 'wpml_switch_language', $language_code );
- }
- }
- }
-
- $variation = wc_get_product( $variation_id );
- $parent_product = wc_get_product( $variation->get_parent_id() );
-
- // loop through the variations
- $single_variation = new WC_Product_Variation( $variation_id );
- $variation_price = $single_variation->get_price();
- $variation_attributes = $single_variation->get_variation_attributes();
-
- // start by adding post meta / can be an empty array
- $variation_values = array();
- $variation_values = $this->sf_woo_get_variation_taxonomy_insert_data( $variation_values, $variation->get_parent_id() );
- // loop through the variations attributes
- foreach ( $variation_attributes as $variation_key => $variation_value ) {
-
- if ( strpos( $variation_key, 'attribute_' ) !== false ) {
-
- // if(!empty($variation_value)) {
-
- // if the name begins with attribute_pa, then its a taxonomy
- if ( strpos( $variation_key, 'attribute_pa' ) !== false ) {
-
- if ( ! empty( $variation_value ) ) {
-
- $taxonomy_name = str_replace( 'attribute_', '', $variation_key );
- $term = get_term_by( 'slug', $variation_value, $taxonomy_name );
-
- if ( ( ! is_wp_error( $term ) ) && ( ! empty( $term ) ) ) {
- $field_name = '_sft_' . $taxonomy_name;
- $variation_values[ $field_name ] = array( $term->term_id );
- }
- } else {
- // the attribute was empty, which means "ANY" was selected, which means we need to attach all
- // possible attributes to this variation
- $taxonomy_name = str_replace( 'attribute_', '', $variation_key );
-
- if ( isset( $product_attributes[ $taxonomy_name ] ) ) {
-
- $values = $product_attributes[ $taxonomy_name ]->get_options();
-
- $field_name = '_sft_' . $taxonomy_name;
- $variation_values[ $field_name ] = $values;
- }
- }
- }
- }
- }
-
- // get the terms on the parent post, so we can add them to all the variations in our cache
- $term_values = $this->sf_woo_get_product_terms_insert_data( $variation->get_parent_id() );
- // combine parent taxonomies with variation attributes
-
- $variation_insert_data = array_merge( $term_values, $variation_values );
-
- if ( Search_Filter_Helper::has_wpml() ) {
- do_action( 'wpml_switch_language', $current_language );
- }
-
- return $variation_insert_data;
- }
-
- public function get_cache_post_types() {
-
- if ( empty( $this->wc_forms_post_types ) ) {
-
- $search_form_post_types = array();
-
- $search_form_query = new WP_Query( 'post_type=search-filter-widget&post_status=publish&posts_per_page=-1&suppress_filters=1' );
- $search_forms = $search_form_query->get_posts();
-
- foreach ( $search_forms as $search_form ) {
-
- $search_form_settings = Search_Filter_Helper::get_settings_meta( $search_form->ID );
- $this_post_types = array_keys( $search_form_settings['post_types'] );
- foreach ( $this_post_types as $this_post_type ) {
-
- array_push( $search_form_post_types, $this_post_type );
- }
- }
- $this->wc_forms_post_types = array_unique( $search_form_post_types );
-
- }
-
- return $this->wc_forms_post_types;
-
- }
-
- public function sf_woocommerce_cache_update( $should_index_post, $post_id, $post ) {
-
- if ( ! $this->is_woo_enabled() ) {
- return $should_index_post;
- }
- $post_type = $post->post_type;
-
- // Essentially we want to remove private posts from all our queries & db,
- // causing too many counting errors depending on if user is logged in
- if ( ( $post_type === 'product' ) ) {
- // Inly really needs to be product, because variation will always have published status
- $post_status = get_post_status( $post_id ); // don't index variations if the parent is private, and if its not in any search forms
-
- $exclude_from_catalog = false;
- if ( has_term( 'exclude-from-catalog', 'product_visibility', $post_id ) ) {
- $exclude_from_catalog = true;
- }
- // drafts & private mess up the count numbers, while the main query doesn't show them, so may aswell sync, and exclude across the board
- if ( ( $post_status === 'private' ) || ( $post_status === 'draft' ) || ( $exclude_from_catalog === true ) ) {
- $this->sf_woo_post_cache_get_delete_variation_data( $post_id );
- do_action( 'search_filter_delete_post_cache', $post_id );
- return false;
- }
- }
-
- return $should_index_post;
- }
-
- public function sf_woocommerce_cache_data( $cache_data ) {
- // check to see if we are using woocommerce post types
- if ( ! $this->is_woo_enabled() ) {
- return $cache_data;
- }
-
- if ( empty( $cache_data ) ) {
- return $cache_data;
- }
-
- if ( empty( $cache_data['post_types'] ) ) {
- return $cache_data;
- }
-
- // if either product or variation
- // we want to record `_stock_status` regardless if it has been set as a field - we need this because calc get complicated when checking if stock is managed at variation or product level
- if ( ( in_array( 'product', $cache_data['post_types'] ) ) || ( in_array( 'product_variation', $cache_data['post_types'] ) ) ) {
- if ( ! in_array( '_stock_status', $cache_data['meta_keys'] ) ) {
- if ( ! isset( $cache_data['meta_keys'] ) ) {
- $cache_data['meta_keys'] = array();
- }
- array_push( $cache_data['meta_keys'], '_stock_status' );
- }
- }
-
- /*
- * TODO - potential problem, this data is only calculated when a search form is saved,
- * it should also be recalculated when the cache restarts building,
- * may be not, depends maybe only need for debug
- */
-
- return $cache_data;
-
- }
-
- public function sf_woocommerce_is_woo_variations_query( $sfid ) {
- if ( ! $this->is_woo_enabled() ) {
- return false;
- }
-
- global $searchandfilter;
- $sf_inst = $searchandfilter->get( $sfid );
-
- $post_types_arr = $sf_inst->settings( 'post_types' );
- $post_types = array();
- if ( is_array( $post_types_arr ) ) {
- $post_types = array_keys( $post_types_arr );
- }
-
- if ( ( in_array( 'product', $post_types ) ) && ( in_array( 'product_variation', $post_types ) ) ) {
- // then we need to store the vairation data in the DB, variations (even when taxonomies) are actually stored as post meta on the variation itself, so add these to the meta list
- return true;
- }
-
- return false;
- }
- public function sf_woocommerce_should_reduce_variations( $sfid ) {
- if ( ! $this->is_woo_enabled() ) {
- return false;
- }
- $should_reduce = apply_filters( 'search_filter_woo_should_reduce_variation', true );
- return $should_reduce;
- }
-
- public function sf_woocommerce_is_woo_query( $sfid ) {
- if ( ! $this->is_woo_enabled() ) {
- return false;
- }
-
- global $searchandfilter;
- $sf_inst = $searchandfilter->get( $sfid );
-
- $post_types_arr = $sf_inst->settings( 'post_types' );
- $post_types = array();
- if ( is_array( $post_types_arr ) ) {
- $post_types = array_keys( $post_types_arr );
- }
-
- if ( in_array( 'product', $post_types ) ) {
- // then we need to store the vairation data in the DB, variations (even when taxonomies) are actually stored as post meta on the variation itself, so add these to the meta list
- return true;
- }
- return false;
- }
-
- public function sf_woocommerce_convert_term_results( $filters, $cache_term_results, $sfid ) {
-
- // check to see if we are using woocommerce post types
- if ( ! $this->is_woo_enabled() ) {
- return $filters;
- }
-
- if ( empty( $filters ) ) {
- return $filters;
- }
-
- foreach ( $this->woo_meta_keys_added as $woo_tax_name ) {
-
- if ( isset( $cache_term_results[ '_sfm_attribute_' . $woo_tax_name ] ) ) {
- $terms = $cache_term_results[ '_sfm_attribute_' . $woo_tax_name ];
-
- foreach ( $terms as $term_name => $result_ids ) {
-
- $tax = Search_Filter_Wp_Data::get_taxonomy_term_by( 'slug', $term_name, $woo_tax_name );
-
- if ( ( $tax ) && ( isset( $filters[ '_sft_' . $woo_tax_name ] ) ) ) {
- // Remove the parent post ID from the `cache_result_ids`.
- if ( ! isset( $filters[ '_sft_' . $woo_tax_name ]['terms'][ $term_name ] ) ) {
- $filters[ '_sft_' . $woo_tax_name ]['terms'][ $term_name ] = array();
- $filters[ '_sft_' . $woo_tax_name ]['terms'][ $term_name ]['term_id'] = $tax->term_id;
- $filters[ '_sft_' . $woo_tax_name ]['terms'][ $term_name ]['cache_result_ids'] = array();
- }
- $filters[ '_sft_' . $woo_tax_name ]['terms'][ $term_name ]['cache_result_ids'] = array_merge( $filters[ '_sft_' . $woo_tax_name ]['terms'][ $term_name ]['cache_result_ids'], $result_ids );
- }
- }
- }
- }
- return $filters;
- }
- public function sf_woocommerce_register_all_result_ids( $register, $sfid ) {
- if ( ! $this->is_woo_enabled() ) {
- return $register;
- }
-
- return $register;
-
- }
- public function sf_woocommerce_is_filtered() {
- return true;
- }
-
- public function sf_woocommerce_convert_variable_product_ids( $post_ids, $sfid ) {
- global $searchandfilter;
- $sf_inst = $searchandfilter->get( $sfid );
-
- // make sure this search form is tyring to use woocommerce
- if ( $this->sf_woocommerce_is_woo_variations_query( $sfid ) && $this->sf_woocommerce_should_reduce_variations( $sfid ) ) {
- $post_ids = $this->sf_woocommerce_conv_variable_ids( $post_ids, $sfid );
- }
-
- return $post_ids;
- }
- public function sf_woocommerce_get_variable_product_ids( $post_ids, $sfid ) {
- if ( ! $this->is_woo_enabled() ) {
- return $post_ids;
- }
-
- global $searchandfilter;
- $sf_inst = $searchandfilter->get( $sfid );
-
- // make sure this search form is tyring to use woocommerce
- if ( $this->sf_woocommerce_is_woo_variations_query( $sfid ) && $this->sf_woocommerce_should_reduce_variations( $sfid ) ) {
-
- $this->woo_all_results_ids_keys = $sf_inst->query->cache->get_registered_result_ids();
- $all_result_ids = array_keys( $this->woo_all_results_ids_keys );
-
- // run query to convert variation IDs to parent/product IDs
- $parent_conv_args = array(
- 'post_type' => 'product_variation',
- 'posts_per_page' => -1,
- 'paged' => 1,
- 'post__in' => $all_result_ids,
- 'fields' => 'id=>parent',
-
- 'orderby' => '', // remove sorting
- 'meta_key' => '',
- 'order' => '',
- 'post_status' => '',
-
- // speed improvements
- 'no_found_rows' => true,
- 'update_post_meta_cache' => false,
- 'update_post_term_cache' => false,
- );
-
- // The Query
- $query_arr = new WP_Query( $parent_conv_args );
-
- $new_ids = array();
- if ( $query_arr->have_posts() ) {
- foreach ( $query_arr->posts as $post ) {
-
- if ( $post->post_parent == 0 ) {
- // $new_ids[$post->ID] = $post->ID;
- } else {
- $new_ids[ $post->ID ] = $post->post_parent;
- }
- }
- }
-
- $this->woo_result_ids_map = ( $new_ids );
- }
-
- return $post_ids;
- }
-
- public function sf_woocommerce_conv_variable_ids( $post_ids, $sfid ) {
- // make sure this search form is tyring to use woocommerce
- if ( $this->sf_woocommerce_is_woo_variations_query( $sfid ) && $this->sf_woocommerce_should_reduce_variations( $sfid ) ) {
-
- // $post_ids = array_unique($post_ids); //so no duplicates
- $replacements = $this->woo_result_ids_map;
- foreach ( $post_ids as $key => $value ) {
- if ( isset( $replacements[ $value ] ) ) {
- $post_ids[ $key ] = $replacements[ $value ];
- }
- }
- $post_ids = array_unique( $post_ids ); // so no duplicates
- }
-
- return $post_ids;
- }
-
- public function sf_woocommerce_pre_get_posts( $query, $sfid ) {
-
- if ( ! $this->is_woo_enabled() ) {
- return $query;
- }
-
- $is_shop = false;
- if ( function_exists( 'is_shop' ) ) {
- $is_shop = is_shop();
- }
-
- // is_shop is not always true for product attributes / archives
- // so we need to detect if we are one of those
- global $searchandfilter;
- $enable_taxonomy_archives = $searchandfilter->get( $sfid )->settings( 'enable_taxonomy_archives' );
-
- if ( ( $enable_taxonomy_archives == 1 ) && ( Search_Filter_Wp_Data::is_taxonomy_archive_of_post_type( 'product', false ) ) ) {
-
- $sf_current_query = $searchandfilter->get( $sfid )->current_query();
- $term = $searchandfilter->get_queried_object();
- $taxonomy = $term->taxonomy;
-
- // exclude current tax archive as a filter when checking "is_filtered"
- if ( ! $sf_current_query->is_filtered( array( '_sft_' . $taxonomy ) ) ) {
- $is_shop = true;
- }
- }
-
- if ( $is_shop ) {
- // in woocommerce, don't set paged for page 1 - otherwise page description will be hidden
- if ( $query->get( 'paged' ) == 1 ) {
- $query->set( 'paged', null );
- }
- }
-
- // make sure post type is "product" only, not with variations, otherwise,
- // they will show in the results (if the variation ID has not been converted to its parent ID yet)
- if ( $this->sf_woocommerce_is_woo_variations_query( $sfid ) && $this->sf_woocommerce_should_reduce_variations( $sfid ) ) {
- $query->set( 'post_type', 'product' );
- } elseif ( $this->sf_woocommerce_is_woo_variations_query( $sfid ) && ! $this->sf_woocommerce_should_reduce_variations( $sfid ) ) {
- $query->set( 'post_type', array( 'product', 'product_variation' ) );
- }
-
- return $query;
- }
- public function sf_woocommerce_query_args( $query_args, $sfid ) {
- if ( ! $this->is_woo_enabled() ) {
- return $query_args;
- }
-
- global $searchandfilter;
- $sf_inst = $searchandfilter->get( $sfid );
-
- // make sure this search form is tyring to use woocommerce
- if ( $sf_inst->settings( 'display_results_as' ) == 'custom_woocommerce_store' ) {
-
- $enable_taxonomy_archives = $sf_inst->settings( 'enable_taxonomy_archives' );
-
- if ( ( $enable_taxonomy_archives == 1 ) && ( Search_Filter_Wp_Data::is_taxonomy_archive_of_post_type( 'product', false ) ) ) {
-
- // if its using tax archive, and we're on a tax archive, make sure we don't include the current tax in `is_filtered` before applying WC is_filtered
-
- $sf_current_query = $searchandfilter->get( $sfid )->current_query();
- $term = $searchandfilter->get_queried_object();
- $taxonomy = $term->taxonomy;
-
- // exclude current tax archive as a filter when checking "is_filtered"
- if ( ( $sf_current_query->is_filtered( array( '_sft_' . $taxonomy ) ) ) || ( ! empty( $sf_current_query->get_search_term() ) ) ) {
- add_filter( 'woocommerce_is_filtered', array( $this, 'sf_woocommerce_is_filtered' ) );
- }
- } else {
- $sf_current_query = $sf_inst->current_query();
- if ( ( $sf_current_query->is_filtered() ) || ( ! empty( $sf_current_query->get_search_term() ) ) ) {
- add_filter( 'woocommerce_is_filtered', array( $this, 'sf_woocommerce_is_filtered' ) );
- }
- }
-
- return $query_args;
- }
-
- return $query_args;
- }
- public function sf_woocommerce_filter_settings_save( $settings, $sfid ) {
- // make sure this search form is tyring to use woocommerce
- if ( isset( $settings['display_results_as'] ) ) {
- // if($settings["display_results_as"]=="custom_woocommerce_store"){
- if ( $this->sf_woocommerce_is_woo_variations_query( $sfid ) && $this->sf_woocommerce_should_reduce_variations( $sfid ) ) {
-
- $settings['treat_child_posts_as_parent'] = 1;
- } else {
- $settings['treat_child_posts_as_parent'] = 0;
- }
- }
-
- return $settings;
- }
-
- private function get_fields_meta( $sfid ) {
-
- $meta_key = '_search-filter-fields';
- $search_form_fields = ( get_post_meta( $sfid, $meta_key, true ) );
-
- return $search_form_fields;
- }
- public function get_all_meta_key_names() {
- $filters = array();
-
- $search_form_query = new WP_Query( 'post_type=search-filter-widget&post_status=publish&posts_per_page=-1&suppress_filters=1' );
- $search_forms = $search_form_query->get_posts();
-
- foreach ( $search_forms as $search_form ) {
- $search_form_fields = $this->get_fields_meta( $search_form->ID );
-
- if ( $search_form_fields ) {
- foreach ( $search_form_fields as $key => $field ) {
- if ( $field['type'] === 'post_meta' ) {
- if ( $field['meta_type'] === 'choice' ) {
- array_push( $filters, $field['meta_key'] );
- }
- }
- }
- }
- }
- $filters = array_unique( $filters );
- return $filters;
- }
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/index.php b/wp/wp-content/plugins/search-filter-pro/index.php
deleted file mode 100644
index e71af0ef..00000000
--- a/wp/wp-content/plugins/search-filter-pro/index.php
+++ /dev/null
@@ -1 +0,0 @@
-\n"
-"Language-Team: LANGUAGE \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.5.7\n"
-"X-Poedit-KeywordsList: __;_e;_n;_x;esc_html_e;esc_html__;esc_attr_e;"
-"esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2\n"
-"X-Poedit-Basepath: ../\n"
-"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#: class-plugin-name-admin.php:170
-msgid "Page Title"
-msgstr ""
-
-#: class-plugin-name-admin.php:171
-msgid "Menu Text"
-msgstr ""
-
-#: class-plugin-name-admin.php:197
-msgid "Settings"
-msgstr ""
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/css/chosen-sprite.png b/wp/wp-content/plugins/search-filter-pro/public/assets/css/chosen-sprite.png
deleted file mode 100644
index 3611ae4a..00000000
Binary files a/wp/wp-content/plugins/search-filter-pro/public/assets/css/chosen-sprite.png and /dev/null differ
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/css/chosen-sprite@2x.png b/wp/wp-content/plugins/search-filter-pro/public/assets/css/chosen-sprite@2x.png
deleted file mode 100644
index ffe4d7d1..00000000
Binary files a/wp/wp-content/plugins/search-filter-pro/public/assets/css/chosen-sprite@2x.png and /dev/null differ
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/css/index.php b/wp/wp-content/plugins/search-filter-pro/public/assets/css/index.php
deleted file mode 100644
index e71af0ef..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/css/index.php
+++ /dev/null
@@ -1 +0,0 @@
- .select2-results__options {
- max-height: 200px;
- overflow-y: auto;
-}
-
-.select2-container--default .select2-results__option[role=group] {
- padding: 0;
-}
-
-.select2-container--default .select2-results__option[aria-disabled=true] {
- color: #999;
-}
-
-.select2-container--default .select2-results__option[aria-selected=true] {
- background-color: #ddd;
-}
-
-.select2-container--default .select2-results__option .select2-results__option {
- padding-left: 1em;
-}
-
-.select2-container--default .select2-results__option .select2-results__option .select2-results__group {
- padding-left: 0;
-}
-
-.select2-container--default .select2-results__option .select2-results__option .select2-results__option {
- margin-left: -1em;
- padding-left: 2em;
-}
-
-.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
- margin-left: -2em;
- padding-left: 3em;
-}
-
-.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
- margin-left: -3em;
- padding-left: 4em;
-}
-
-.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
- margin-left: -4em;
- padding-left: 5em;
-}
-
-.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {
- margin-left: -5em;
- padding-left: 6em;
-}
-
-.select2-container--default .select2-results__option--highlighted[aria-selected] {
- background-color: #5897fb;
- color: white;
-}
-
-.select2-container--default .select2-results__group {
- cursor: default;
- display: block;
- padding: 6px;
-}
-
-.select2-container--classic .select2-selection--single {
- background-color: #f7f7f7;
- border: 1px solid #aaa;
- border-radius: 4px;
- outline: 0;
- background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);
- background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);
- background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFFFFFFF", endColorstr="#FFEEEEEE", GradientType=0);
-}
-
-.select2-container--classic .select2-selection--single:focus {
- border: 1px solid #5897fb;
-}
-
-.select2-container--classic .select2-selection--single .select2-selection__rendered {
- color: #444;
- line-height: 28px;
-}
-
-.select2-container--classic .select2-selection--single .select2-selection__clear {
- cursor: pointer;
- float: right;
- font-weight: bold;
- margin-right: 10px;
-}
-
-.select2-container--classic .select2-selection--single .select2-selection__placeholder {
- color: #999;
-}
-
-.select2-container--classic .select2-selection--single .select2-selection__arrow {
- background-color: #ddd;
- border: none;
- border-left: 1px solid #aaa;
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
- height: 26px;
- position: absolute;
- top: 1px;
- right: 1px;
- width: 20px;
- background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
- background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);
- background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFEEEEEE", endColorstr="#FFCCCCCC", GradientType=0);
-}
-
-.select2-container--classic .select2-selection--single .select2-selection__arrow b {
- border-color: #888 transparent transparent transparent;
- border-style: solid;
- border-width: 5px 4px 0 4px;
- height: 0;
- left: 50%;
- margin-left: -4px;
- margin-top: -2px;
- position: absolute;
- top: 50%;
- width: 0;
-}
-
-.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__clear {
- float: left;
-}
-
-.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__arrow {
- border: none;
- border-right: 1px solid #aaa;
- border-radius: 0;
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px;
- left: 1px;
- right: auto;
-}
-
-.select2-container--classic.select2-container--open .select2-selection--single {
- border: 1px solid #5897fb;
-}
-
-.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {
- background: transparent;
- border: none;
-}
-
-.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {
- border-color: transparent transparent #888 transparent;
- border-width: 0 4px 5px 4px;
-}
-
-.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {
- border-top: none;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
- background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);
- background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);
- background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFFFFFFF", endColorstr="#FFEEEEEE", GradientType=0);
-}
-
-.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {
- border-bottom: none;
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
- background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);
- background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);
- background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFEEEEEE", endColorstr="#FFFFFFFF", GradientType=0);
-}
-
-.select2-container--classic .select2-selection--multiple {
- background-color: white;
- border: 1px solid #aaa;
- border-radius: 4px;
- cursor: text;
- outline: 0;
-}
-
-.select2-container--classic .select2-selection--multiple:focus {
- border: 1px solid #5897fb;
-}
-
-.select2-container--classic .select2-selection--multiple .select2-selection__rendered {
- list-style: none;
- margin: 0;
- padding: 0 5px;
-}
-
-.select2-container--classic .select2-selection--multiple .select2-selection__clear {
- display: none;
-}
-
-.select2-container--classic .select2-selection--multiple .select2-selection__choice {
- background-color: #e4e4e4;
- border: 1px solid #aaa;
- border-radius: 4px;
- cursor: default;
- float: left;
- margin-right: 5px;
- margin-top: 5px;
- padding: 0 5px;
-}
-
-.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {
- color: #888;
- cursor: pointer;
- display: inline-block;
- font-weight: bold;
- margin-right: 2px;
-}
-
-.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {
- color: #555;
-}
-
-.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice {
- float: right;
- margin-left: 5px;
- margin-right: auto;
-}
-
-.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove {
- margin-left: 2px;
- margin-right: auto;
-}
-
-.select2-container--classic.select2-container--open .select2-selection--multiple {
- border: 1px solid #5897fb;
-}
-
-.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {
- border-top: none;
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-
-.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {
- border-bottom: none;
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-.select2-container--classic .select2-search--dropdown .select2-search__field {
- border: 1px solid #aaa;
- outline: 0;
-}
-
-.select2-container--classic .select2-search--inline .select2-search__field {
- outline: 0;
- box-shadow: none;
-}
-
-.select2-container--classic .select2-dropdown {
- background-color: white;
- border: 1px solid transparent;
-}
-
-.select2-container--classic .select2-dropdown--above {
- border-bottom: none;
-}
-
-.select2-container--classic .select2-dropdown--below {
- border-top: none;
-}
-
-.select2-container--classic .select2-results > .select2-results__options {
- max-height: 200px;
- overflow-y: auto;
-}
-
-.select2-container--classic .select2-results__option[role=group] {
- padding: 0;
-}
-
-.select2-container--classic .select2-results__option[aria-disabled=true] {
- color: grey;
-}
-
-.select2-container--classic .select2-results__option--highlighted[aria-selected] {
- background-color: #3875d7;
- color: white;
-}
-
-.select2-container--classic .select2-results__group {
- cursor: default;
- display: block;
- padding: 6px;
-}
-
-.select2-container--classic.select2-container--open .select2-dropdown {
- border-color: #5897fb;
-}
-
-.searchandfilter-date-picker .ui-helper-hidden {
- display: none;
-}
-
-.searchandfilter-date-picker .ui-helper-hidden-accessible {
- border: 0;
- clip: rect(0 0 0 0);
- height: 1px;
- margin: -1px;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px;
-}
-
-.searchandfilter-date-picker .ui-helper-reset {
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- line-height: 1.3;
- text-decoration: none;
- font-size: 100%;
- list-style: none;
-}
-
-.searchandfilter-date-picker .ui-helper-clearfix:after,
-.searchandfilter-date-picker .ui-helper-clearfix:before {
- content: "";
- display: table;
- border-collapse: collapse;
-}
-
-.searchandfilter-date-picker .ui-helper-clearfix:after {
- clear: both;
-}
-
-.searchandfilter-date-picker .ui-helper-clearfix {
- min-height: 0;
-}
-
-.searchandfilter-date-picker .ui-helper-zfix {
- width: 100%;
- height: 100%;
- top: 0;
- left: 0;
- position: absolute;
- opacity: 0;
- filter: Alpha(Opacity=0);
-}
-
-.searchandfilter-date-picker .ui-front {
- z-index: 100;
-}
-
-.searchandfilter-date-picker .ui-state-disabled {
- cursor: default !important;
-}
-
-.searchandfilter-date-picker .ui-icon {
- display: block;
- text-indent: -99999px;
- overflow: hidden;
- background-repeat: no-repeat;
-}
-
-.searchandfilter-date-picker .ui-widget-overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
-}
-
-.searchandfilter-date-picker .ui-datepicker {
- width: 17em;
- padding: 0.2em 0.2em 0;
- display: none;
-}
-
-.searchandfilter-date-picker .ui-datepicker .ui-datepicker-header {
- position: relative;
- padding: 0.2em 0;
-}
-
-.searchandfilter-date-picker .ui-datepicker .ui-datepicker-next,
-.searchandfilter-date-picker .ui-datepicker .ui-datepicker-prev {
- position: absolute;
- top: 2px;
- width: 1.8em;
- height: 1.8em;
-}
-
-.searchandfilter-date-picker .ui-datepicker .ui-datepicker-next-hover,
-.searchandfilter-date-picker .ui-datepicker .ui-datepicker-prev-hover {
- top: 1px;
-}
-
-.searchandfilter-date-picker .ui-datepicker .ui-datepicker-prev {
- left: 2px;
-}
-
-.searchandfilter-date-picker .ui-datepicker .ui-datepicker-next {
- right: 2px;
-}
-
-.searchandfilter-date-picker .ui-datepicker .ui-datepicker-prev-hover {
- left: 1px;
-}
-
-.searchandfilter-date-picker .ui-datepicker .ui-datepicker-next-hover {
- right: 1px;
-}
-
-.searchandfilter-date-picker .ui-datepicker .ui-datepicker-next span,
-.searchandfilter-date-picker .ui-datepicker .ui-datepicker-prev span {
- display: block;
- position: absolute;
- left: 50%;
- margin-left: -8px;
- top: 50%;
- margin-top: -8px;
-}
-
-.searchandfilter-date-picker .ui-datepicker .ui-datepicker-title {
- margin: 0 2.3em;
- line-height: 1.8em;
- text-align: center;
-}
-
-.searchandfilter-date-picker .ui-datepicker .ui-datepicker-title select {
- font-size: 1em;
- margin: 1px 0;
- display: inline-block;
-}
-
-.searchandfilter-date-picker .ui-datepicker select.ui-datepicker-month-year {
- width: 100%;
-}
-
-.searchandfilter-date-picker .ui-datepicker select.ui-datepicker-month,
-.searchandfilter-date-picker .ui-datepicker select.ui-datepicker-year {
- width: 49%;
-}
-
-.searchandfilter-date-picker .ui-icon {
- width: 16px;
- height: 16px;
- background-position: 16px 16px;
-}
-
-.searchandfilter-date-picker .ui-datepicker table {
- width: 100%;
- font-size: 0.9em;
- border-collapse: collapse;
- margin: 0 0 0.4em;
-}
-
-.searchandfilter-date-picker .ui-datepicker th {
- padding: 0.7em 0.3em;
- text-align: center;
- font-weight: 700;
- border: 0;
-}
-
-.searchandfilter-date-picker .ui-datepicker td {
- border: 0;
- padding: 1px;
-}
-
-.searchandfilter-date-picker .ui-datepicker td a,
-.searchandfilter-date-picker .ui-datepicker td span {
- display: block;
- text-align: center;
- text-decoration: none;
-}
-
-.searchandfilter-date-picker .ui-widget {
- font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif;
- font-size: 1.1em;
-}
-
-/* .ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-next-hover,.ui-datepicker .ui-datepicker-prev-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td a,.ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget button,.ui-widget input,.ui-widget select,.ui-widget textarea{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#eee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;color:#333}.ui-widget-content a{color:#333}.ui-widget-header{border:1px solid #e78f08;background:#f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;color:#fff;font-weight:700}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;font-weight:700;color:#1c94c4}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#1c94c4;text-decoration:none}.ui-state-focus,.ui-state-hover,.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-focus,.ui-widget-header .ui-state-hover{border:1px solid #fbcb09;background:#fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;font-weight:700;color:#c77405}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#c77405;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:700;color:#eb8f00}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#eb8f00;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;color:#fff}.ui-state-error a,.ui-state-error-text,.ui-widget-content .ui-state-error a,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error a,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px;background-position:16px 16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_ffffff_256x240.png)}.ui-state-active .ui-icon,.ui-state-default .ui-icon,.ui-state-focus .ui-icon,.ui-state-hover .ui-icon{background-image:url(images/ui-icons_ef8c08_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_228ef1_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_ffd27a_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-first,.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-left,.ui-corner-tl,.ui-corner-top{border-top-left-radius:4px}.ui-corner-all,.ui-corner-right,.ui-corner-top,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bl,.ui-corner-bottom,.ui-corner-left{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-br,.ui-corner-right{border-bottom-right-radius:4px}.ui-widget-overlay{background:#666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px} */
-/* date picker for jquery */
-.ll-skin-melon {
- font-size: 90%;
-}
-
-.ll-skin-melon .ui-widget {
- font-family: "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, Verdana, sans-serif;
- background: #2e3641;
- border: none;
- border-radius: 0;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
-}
-
-.ll-skin-melon .ui-datepicker {
- padding: 0;
-}
-
-.ll-skin-melon .ui-datepicker-header {
- border: none;
- background: 0 0;
- font-weight: 400;
- font-size: 15px;
-}
-
-.ll-skin-melon .ui-datepicker-header .ui-state-hover {
- background: 0 0;
- border-color: transparent;
- cursor: pointer;
- border-radius: 0;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
-}
-
-.ll-skin-melon .ui-datepicker .ui-datepicker-title {
- margin-top: 0.4em;
- margin-bottom: 0.3em;
- color: #e9f0f4;
-}
-
-.ll-skin-melon .ui-datepicker .ui-datepicker-next, .ll-skin-melon .ui-datepicker .ui-datepicker-next-hover, .ll-skin-melon .ui-datepicker .ui-datepicker-prev, .ll-skin-melon .ui-datepicker .ui-datepicker-prev-hover {
- top: 0.9em;
- border: none;
-}
-
-.ll-skin-melon .ui-datepicker .ui-datepicker-prev-hover {
- left: 2px;
-}
-
-.ll-skin-melon .ui-datepicker .ui-datepicker-next-hover {
- right: 2px;
-}
-
-.ll-skin-melon .ui-datepicker .ui-datepicker-next span, .ll-skin-melon .ui-datepicker .ui-datepicker-prev span {
- background-image: url(../img/ui-icons_ffffff_256x240.png);
- background-position: -32px 0;
- margin-top: 0;
- top: 0;
- font-weight: 400;
-}
-
-.ll-skin-melon .ui-datepicker .ui-datepicker-prev span {
- background-position: -96px 0;
-}
-
-.ll-skin-melon .ui-datepicker table {
- margin: 0;
-}
-
-.ll-skin-melon .ui-datepicker th {
- padding: 1em 0;
- color: #ccc;
- font-size: 13px;
- font-weight: 400;
- border: none;
- border-top: 1px solid #3a414d;
-}
-
-.ll-skin-melon .ui-datepicker td {
- background: #f97e76;
- border: none;
- padding: 0;
-}
-
-.ll-skin-melon td .ui-state-default {
- background: 0 0;
- border: none;
- text-align: center;
- padding: 0.5em;
- margin: 0;
- font-weight: 400;
- color: #efefef;
- font-size: 16px;
-}
-
-.ll-skin-melon .ui-state-disabled {
- opacity: 1;
-}
-
-.ll-skin-melon .ui-state-disabled .ui-state-default {
- color: #fba49e;
-}
-
-.ll-skin-melon td .ui-state-active, .ll-skin-melon td .ui-state-hover {
- background: #2e3641;
-}
-
-/* Slider styles minified */
-/*! nouislider - 11.1.0 - 2018-04-02 11:18:13 */
-.noUi-target, .noUi-target * {
- -webkit-touch-callout: none;
- -webkit-tap-highlight-color: transparent;
- -webkit-user-select: none;
- -ms-touch-action: none;
- touch-action: none;
- -ms-user-select: none;
- -moz-user-select: none;
- user-select: none;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.noUi-target {
- position: relative;
- direction: ltr;
-}
-
-.noUi-base, .noUi-connects {
- width: 100%;
- height: 100%;
- position: relative;
- z-index: 1;
-}
-
-.noUi-connects {
- overflow: hidden;
- z-index: 0;
-}
-
-.noUi-connect, .noUi-origin {
- will-change: transform;
- position: absolute;
- z-index: 1;
- top: 0;
- left: 0;
- height: 100%;
- width: 100%;
- -ms-transform-origin: 0 0;
- -webkit-transform-origin: 0 0;
- transform-origin: 0 0;
-}
-
-html:not([dir=rtl]) .noUi-horizontal .noUi-origin {
- left: auto;
- right: 0;
-}
-
-.noUi-vertical .noUi-origin {
- width: 0;
-}
-
-.noUi-horizontal .noUi-origin {
- height: 0;
-}
-
-.noUi-handle {
- position: absolute;
-}
-
-.noUi-state-tap .noUi-connect, .noUi-state-tap .noUi-origin {
- -webkit-transition: transform 0.3s;
- transition: transform 0.3s;
-}
-
-.noUi-state-drag * {
- cursor: inherit !important;
-}
-
-.noUi-horizontal {
- height: 18px;
-}
-
-.noUi-horizontal .noUi-handle {
- width: 34px;
- height: 28px;
- left: -17px;
- top: -6px;
-}
-
-.noUi-vertical {
- width: 18px;
-}
-
-.noUi-vertical .noUi-handle {
- width: 28px;
- height: 34px;
- left: -6px;
- top: -17px;
-}
-
-html:not([dir=rtl]) .noUi-horizontal .noUi-handle {
- right: -17px;
- left: auto;
-}
-
-.noUi-target {
- background: #FAFAFA;
- border-radius: 4px;
- border: 1px solid #D3D3D3;
- box-shadow: inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB;
-}
-
-.noUi-connects {
- border-radius: 3px;
-}
-
-.noUi-connect {
- background: #3FB8AF;
-}
-
-.noUi-draggable {
- cursor: ew-resize;
-}
-
-.noUi-vertical .noUi-draggable {
- cursor: ns-resize;
-}
-
-.noUi-handle {
- border: 1px solid #D9D9D9;
- border-radius: 3px;
- background: #FFF;
- cursor: default;
- box-shadow: inset 0 0 1px #FFF, inset 0 1px 7px #EBEBEB, 0 3px 6px -3px #BBB;
-}
-
-.noUi-active {
- box-shadow: inset 0 0 1px #FFF, inset 0 1px 7px #DDD, 0 3px 6px -3px #BBB;
-}
-
-.noUi-handle:after, .noUi-handle:before {
- content: "";
- display: block;
- position: absolute;
- height: 14px;
- width: 1px;
- background: #E8E7E6;
- left: 14px;
- top: 6px;
-}
-
-.noUi-handle:after {
- left: 17px;
-}
-
-.noUi-vertical .noUi-handle:after, .noUi-vertical .noUi-handle:before {
- width: 14px;
- height: 1px;
- left: 6px;
- top: 14px;
-}
-
-.noUi-vertical .noUi-handle:after {
- top: 17px;
-}
-
-[disabled] .noUi-connect {
- background: #B8B8B8;
-}
-
-[disabled] .noUi-handle, [disabled].noUi-handle, [disabled].noUi-target {
- cursor: not-allowed;
-}
-
-.noUi-pips, .noUi-pips * {
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.noUi-pips {
- position: absolute;
- color: #999;
-}
-
-.noUi-value {
- position: absolute;
- white-space: nowrap;
- text-align: center;
-}
-
-.noUi-value-sub {
- color: #ccc;
- font-size: 10px;
-}
-
-.noUi-marker {
- position: absolute;
- background: #CCC;
-}
-
-.noUi-marker-large, .noUi-marker-sub {
- background: #AAA;
-}
-
-.noUi-pips-horizontal {
- padding: 10px 0;
- height: 80px;
- top: 100%;
- left: 0;
- width: 100%;
-}
-
-.noUi-value-horizontal {
- -webkit-transform: translate(-50%, 50%);
- transform: translate(-50%, 50%);
-}
-
-.noUi-rtl .noUi-value-horizontal {
- -webkit-transform: translate(50%, 50%);
- transform: translate(50%, 50%);
-}
-
-.noUi-marker-horizontal.noUi-marker {
- margin-left: -1px;
- width: 2px;
- height: 5px;
-}
-
-.noUi-marker-horizontal.noUi-marker-sub {
- height: 10px;
-}
-
-.noUi-marker-horizontal.noUi-marker-large {
- height: 15px;
-}
-
-.noUi-pips-vertical {
- padding: 0 10px;
- height: 100%;
- top: 0;
- left: 100%;
-}
-
-.noUi-value-vertical {
- -webkit-transform: translate(0, -50%);
- transform: translate(0, -50%, 0);
- padding-left: 25px;
-}
-
-.noUi-rtl .noUi-value-vertical {
- -webkit-transform: translate(0, 50%);
- transform: translate(0, 50%);
-}
-
-.noUi-marker-vertical.noUi-marker {
- width: 5px;
- height: 2px;
- margin-top: -1px;
-}
-
-.noUi-marker-vertical.noUi-marker-sub {
- width: 10px;
-}
-
-.noUi-marker-vertical.noUi-marker-large {
- width: 15px;
-}
-
-.noUi-tooltip {
- display: block;
- position: absolute;
- border: 1px solid #D9D9D9;
- border-radius: 3px;
- background: #fff;
- color: #000;
- padding: 5px;
- text-align: center;
- white-space: nowrap;
-}
-
-.noUi-horizontal .noUi-tooltip {
- -webkit-transform: translate(-50%, 0);
- transform: translate(-50%, 0);
- left: 50%;
- bottom: 120%;
-}
-
-.noUi-vertical .noUi-tooltip {
- -webkit-transform: translate(0, -50%);
- transform: translate(0, -50%);
- top: 50%;
- right: 120%;
-}
-
-/* Search & Filter Styles */
-.searchandfilter p {
- margin-top: 1em;
- display: block;
-}
-
-.searchandfilter ul {
- display: block;
- margin-top: 0;
- margin-bottom: 0;
-}
-
-.searchandfilter ul li {
- list-style: none;
- display: block;
- padding-right: 10px;
- padding: 10px 0;
- margin: 0;
-}
-
-.searchandfilter ul li li {
- padding: 5px 0;
-}
-
-.searchandfilter ul li ul li ul {
- margin-left: 20px;
-}
-
-.searchandfilter label {
- display: inline-block;
- margin: 0;
- padding: 0;
-}
-
-.searchandfilter > ul > li[data-sf-combobox="1"] label {
- display: block;
-}
-
-.searchandfilter li[data-sf-field-input-type=checkbox] label, .searchandfilter li[data-sf-field-input-type=radio] label,
-.searchandfilter li[data-sf-field-input-type=range-radio] label, .searchandfilter li[data-sf-field-input-type=range-checkbox] label {
- padding-left: 10px;
-}
-
-.searchandfilter .sf-date-prefix {
- padding-right: 5px;
- display: inline-block;
-}
-
-.searchandfilter .sf-date-postfix {
- padding-left: 5px;
- display: inline-block;
-}
-
-.searchandfilter .sf-count {
- padding-left: 5px;
- display: inline-block;
-}
-
-.searchandfilter .screen-reader-text {
- clip: rect(1px, 1px, 1px, 1px);
- height: 1px;
- overflow: hidden;
- position: absolute !important;
- width: 1px;
-}
-
-.searchandfilter h4 {
- margin: 0;
- padding: 5px 0 10px 0;
- font-size: 16px;
-}
-
-.searchandfilter .sf-range-max, .searchandfilter .sf-range-min {
- max-width: 80px;
-}
-
-.searchandfilter .sf-meta-range-radio-fromto .sf-range-max,
-.searchandfilter .sf-meta-range-radio-fromto .sf-range-min {
- display: inline-block;
- vertical-align: middle;
-}
-
-.searchandfilter .sf-meta-range-radio-fromto span.sf-range-values-seperator {
- vertical-align: middle;
- display: inline-block;
- margin: 0 15px;
-}
-
-.searchandfilter .datepicker {
- max-width: 170px;
-}
-
-.searchandfilter select.sf-input-select {
- min-width: 170px;
-}
-
-.searchandfilter select.sf-range-min.sf-input-select,
-.searchandfilter select.sf-range-max.sf-input-select {
- min-width: auto;
-}
-
-.searchandfilter ul > li > ul:not(.children) {
- margin-left: 0;
-}
-
-/* slider */
-.searchandfilter .meta-slider {
- margin-top: 10px;
- margin-bottom: 10px;
- height: 15px;
- max-width: 220px;
-}
-
-.searchandfilter .noUi-connect {
- background-color: #526E91;
-}
-
-.searchandfilter.search-filter-disabled .noUi-connect {
- opacity: 0.7;
-}
-
-/*
-.searchandfilter .noUi-connect[disabled="disabled"]
-{
- background-color:#666666;
-}*/
-.searchandfilter .noUi-horizontal.noUi-extended {
- padding: 0 10px;
-}
-
-.searchandfilter .noUi-horizontal.noUi-extended .noUi-origin {
- right: -10px;
-}
-
-.searchandfilter .noUi-handle {
- border-color: #cccccc;
-}
-
-.searchandfilter .noUi-horizontal .noUi-handle {
- width: 24px;
- height: 24px;
- top: -5px;
- border-radius: 20px;
- left: -12px;
-}
-
-.searchandfilter .noUi-horizontal .noUi-handle:before, .searchandfilter .noUi-horizontal .noUi-handle:after {
- height: 9px;
- top: 7px;
-}
-
-.searchandfilter .noUi-horizontal .noUi-handle:before {
- left: 9px;
-}
-
-.searchandfilter .noUi-horizontal .noUi-handle:after {
- left: 12px;
-}
-
-.search-filter-scroll-loading {
- display: block;
- margin: 10px;
- margin-top: 20px;
- height: 30px;
- width: 30px;
- animation: search-filter-loader-rotate 0.7s infinite linear;
- border: 5px solid rgba(0, 0, 0, 0.15);
- border-right-color: rgba(0, 0, 0, 0.6);
- border-radius: 50%;
-}
-
-@keyframes search-filter-loader-rotate {
- 0% {
- transform: rotate(0deg);
- }
- 100% {
- transform: rotate(360deg);
- }
-}
-.ll-skin-melon {
- font-size: 90%;
-}
-
-.ll-skin-melon .ui-datepicker td {
- background: #f7f7f7;
- border: none;
- padding: 0;
-}
-
-.ll-skin-melon .ui-datepicker th {
- border-color: #4D6077;
-}
-
-.ll-skin-melon .ui-widget {
- font-family: inherit;
- background: #526E91;
- border: none;
- border-radius: 0;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);
- -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);
- box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);
-}
-
-.searchandfilter.horizontal ul > li {
- display: inline-block;
- padding-right: 10px;
-}
-
-.searchandfilter.horizontal ul > li li {
- display: block;
-}
-
-.ll-skin-melon td .ui-state-default {
- background: transparent;
- border: none;
- text-align: center;
- padding: 0.3em;
- margin: 0;
- font-weight: normal;
- color: #6C88AC;
- font-size: 14px;
-}
-
-.ll-skin-melon td .ui-state-active {
- background: #526E91;
- color: #ffffff;
-}
-
-.ll-skin-melon td .ui-state-hover {
- background: #C4D6EC;
-}
-
-.searchandfilter select option.hide, .searchandfilter li.hide {
- display: none;
-}
-
-.searchandfilter .disabled {
- opacity: 0.7;
-}
-
-.chosen-container-multi .chosen-choices li.search-field input[type=text] {
- height: auto;
- padding: 5px;
- color: #666;
-}
-
-.chosen-container {
- font-size: 14px;
-}
-
-.chosen-container-single .chosen-single {
- height: auto;
-}
-
-.chosen-container-multi .chosen-choices li.search-field input[type=text] {
- font-family: inherit;
-}
-
-.chosen-container-multi .chosen-choices li.search-choice {
- margin: 3px 3px 3px 5px;
-}
-
-.chosen-container .chosen-results li.active-result {
- /*display:list-item !important;*/
-}
-
-.search-filter-results .sf-active {
- font-weight: bold;
-}
-
-.search-filter-results .sf-disabled {
- opacity: 0.5;
-}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/css/search-filter.min.css b/wp/wp-content/plugins/search-filter-pro/public/assets/css/search-filter.min.css
deleted file mode 100644
index d6c1a1a1..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/css/search-filter.min.css
+++ /dev/null
@@ -1,11 +0,0 @@
-/*!
-Chosen, a Select Box Enhancer for jQuery and Prototype
-by Patrick Filler for Harvest, http://getharvest.com
-
-Version 1.8.7
-Full source at https://github.com/harvesthq/chosen
-Copyright (c) 2011-2018 Harvest http://getharvest.com
-
-MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
-This file is generated by `grunt build`, do not edit it by hand.
-*/.chosen-container,.noUi-target,.noUi-target *{-webkit-user-select:none;-ms-user-select:none}.chosen-container{position:relative;display:inline-block;vertical-align:middle;-moz-user-select:none;user-select:none}.chosen-container *{-webkit-box-sizing:border-box;box-sizing:border-box}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;width:100%;border:1px solid #aaa;border-top:0;background:#fff;-webkit-box-shadow:0 4px 5px rgba(0,0,0,.15);box-shadow:0 4px 5px rgba(0,0,0,.15);clip:rect(0,0,0,0);-webkit-clip-path:inset(100% 100%);clip-path:inset(100% 100%)}.chosen-container.chosen-with-drop .chosen-drop{clip:auto;-webkit-clip-path:none;clip-path:none}.chosen-container a{cursor:pointer}.chosen-container .chosen-single .group-name,.chosen-container .search-choice .group-name{margin-right:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:400;color:#999}.chosen-container .chosen-single .group-name:after,.chosen-container .search-choice .group-name:after{content:":";padding-left:2px;vertical-align:top}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;border:1px solid #aaa;border-radius:5px;background-color:#fff;background:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#fff),color-stop(50%,#f6f6f6),color-stop(52%,#eee),to(#f4f4f4));background:linear-gradient(#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background-clip:padding-box;-webkit-box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-single .chosen-single abbr:hover,.chosen-container-single.chosen-disabled .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%;background:url(chosen-sprite.png) 0 2px no-repeat}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;background:url(chosen-sprite.png) 100% -20px no-repeat;font-size:1em;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-single .chosen-drop{margin-top:-1px;border-radius:0 0 4px 4px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;clip:rect(0,0,0,0);-webkit-clip-path:inset(100% 100%);clip-path:inset(100% 100%)}.chosen-container .chosen-results{color:#444;position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px;word-wrap:break-word;-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{background-color:#3875d7;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#3875d7),color-stop(90%,#2a62bc));background-image:linear-gradient(#3875d7 20%,#2a62bc 90%);color:#fff}.chosen-container .chosen-results li.no-results{color:#777;display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;margin:0;padding:0 5px;width:100%;height:auto;border:1px solid #aaa;background-color:#fff;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(1%,#eee),color-stop(15%,#fff));background-image:linear-gradient(#eee 1%,#fff 15%);cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;outline:0;border:0!important;background:0 0!important;-webkit-box-shadow:none;box-shadow:none;font-size:100%;line-height:normal;border-radius:0;width:25px}.chosen-container-multi .chosen-choices li.search-choice{position:relative;padding:3px 20px 3px 5px;border:1px solid #aaa;max-width:100%;border-radius:3px;background-color:#eee;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),to(#eee));background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-size:100% 19px;background-repeat:repeat-x;background-clip:padding-box;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);color:#333;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice span{word-wrap:break-word}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:4px;right:3px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{background-position:-42px -10px}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),to(#eee));background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #aaa;border-bottom-right-radius:0;border-bottom-left-radius:0;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#eee),color-stop(80%,#fff));background-image:linear-gradient(#eee 20%,#fff 80%);-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:none;background:0 0}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:-18px 2px}.chosen-container-active .chosen-choices{border:1px solid #5897fb;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#222!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close,.chosen-disabled .chosen-single{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:none}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;background:url(chosen-sprite.png) -30px -20px no-repeat;direction:rtl}.chosen-rtl.chosen-container-single .chosen-single div b{background-position:6px 2px}.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b{background-position:-12px 2px}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:144dpi),only screen and (min-resolution:1.5dppx){.chosen-container .chosen-results-scroll-down span,.chosen-container .chosen-results-scroll-up span,.chosen-container-multi .chosen-choices .search-choice .search-choice-close,.chosen-container-single .chosen-search input[type=text],.chosen-container-single .chosen-single abbr,.chosen-container-single .chosen-single div b,.chosen-rtl .chosen-search input[type=text]{background-image:url(chosen-sprite@2x.png)!important;background-size:52px 37px!important;background-repeat:no-repeat!important}}.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:#fff;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;height:1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;white-space:nowrap!important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent;border-style:solid;border-width:5px 4px 0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888;border-width:0 4px 5px}.select2-container--default .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-search--inline,.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:1px solid #000;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--above .select2-selection--single{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple,.select2-container--default.select2-container--open.select2-container--below .select2-selection--single{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:0 0;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:#fff}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top,#fff 50%,#eee 100%);background-image:-o-linear-gradient(top,#fff 50%,#eee 100%);background-image:linear-gradient(to bottom,#fff 50%,#eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFFFFFFF", endColorstr="#FFEEEEEE", GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.noUi-pips,.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:700;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top,#eee 50%,#ccc 100%);background-image:-o-linear-gradient(top,#eee 50%,#ccc 100%);background-image:linear-gradient(to bottom,#eee 50%,#ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFEEEEEE", endColorstr="#FFCCCCCC", GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent;border-style:solid;border-width:5px 4px 0;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir=rtl] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:4px 0 0 4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:0 0;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888;border-width:0 4px 5px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top,#fff 0,#eee 50%);background-image:-o-linear-gradient(top,#fff 0,#eee 50%);background-image:linear-gradient(to bottom,#fff 0,#eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFFFFFFF", endColorstr="#FFEEEEEE", GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top,#eee 50%,#fff 100%);background-image:-o-linear-gradient(top,#eee 50%,#fff 100%);background-image:linear-gradient(to bottom,#eee 50%,#fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFEEEEEE", endColorstr="#FFFFFFFF", GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:#fff;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:700;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir=rtl] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}.searchandfilter-date-picker .ui-helper-hidden{display:none}.searchandfilter-date-picker .ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.searchandfilter-date-picker .ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.searchandfilter-date-picker .ui-helper-clearfix:after,.searchandfilter-date-picker .ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse}.searchandfilter-date-picker .ui-helper-clearfix:after{clear:both}.searchandfilter-date-picker .ui-helper-clearfix{min-height:0}.searchandfilter-date-picker .ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.searchandfilter-date-picker .ui-front{z-index:100}.searchandfilter-date-picker .ui-state-disabled{cursor:default!important}.searchandfilter-date-picker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.searchandfilter-date-picker .ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.searchandfilter-date-picker .ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.searchandfilter-date-picker .ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.searchandfilter-date-picker .ui-datepicker .ui-datepicker-next,.searchandfilter-date-picker .ui-datepicker .ui-datepicker-prev{position:absolute;top:2px;width:1.8em;height:1.8em}.searchandfilter-date-picker .ui-datepicker .ui-datepicker-next-hover,.searchandfilter-date-picker .ui-datepicker .ui-datepicker-prev-hover{top:1px}.searchandfilter-date-picker .ui-datepicker .ui-datepicker-prev{left:2px}.searchandfilter-date-picker .ui-datepicker .ui-datepicker-next{right:2px}.searchandfilter-date-picker .ui-datepicker .ui-datepicker-prev-hover{left:1px}.searchandfilter-date-picker .ui-datepicker .ui-datepicker-next-hover{right:1px}.searchandfilter-date-picker .ui-datepicker .ui-datepicker-next span,.searchandfilter-date-picker .ui-datepicker .ui-datepicker-prev span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.searchandfilter-date-picker .ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.searchandfilter-date-picker .ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0;display:inline-block}.searchandfilter-date-picker .ui-datepicker select.ui-datepicker-month-year{width:100%}.searchandfilter-date-picker .ui-datepicker select.ui-datepicker-month,.searchandfilter-date-picker .ui-datepicker select.ui-datepicker-year{width:49%}.searchandfilter-date-picker .ui-icon{width:16px;height:16px;background-position:16px 16px}.searchandfilter-date-picker .ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.searchandfilter-date-picker .ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.searchandfilter-date-picker .ui-datepicker td{border:0;padding:1px}.searchandfilter-date-picker .ui-datepicker td a,.searchandfilter-date-picker .ui-datepicker td span{display:block;text-align:center;text-decoration:none}.searchandfilter-date-picker .ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.ll-skin-melon .ui-datepicker{padding:0}.ll-skin-melon .ui-datepicker-header{border:none;background:0 0;font-weight:400;font-size:15px}.ll-skin-melon .ui-datepicker-header .ui-state-hover{background:0 0;border-color:transparent;cursor:pointer;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0}.ll-skin-melon .ui-datepicker .ui-datepicker-title{margin-top:.4em;margin-bottom:.3em;color:#e9f0f4}.ll-skin-melon .ui-datepicker .ui-datepicker-next,.ll-skin-melon .ui-datepicker .ui-datepicker-next-hover,.ll-skin-melon .ui-datepicker .ui-datepicker-prev,.ll-skin-melon .ui-datepicker .ui-datepicker-prev-hover{top:.9em;border:none}.ll-skin-melon .ui-datepicker .ui-datepicker-prev-hover{left:2px}.ll-skin-melon .ui-datepicker .ui-datepicker-next-hover{right:2px}.ll-skin-melon .ui-datepicker .ui-datepicker-next span,.ll-skin-melon .ui-datepicker .ui-datepicker-prev span{background-image:url(../img/ui-icons_ffffff_256x240.png);background-position:-32px 0;margin-top:0;top:0;font-weight:400}.ll-skin-melon .ui-datepicker .ui-datepicker-prev span{background-position:-96px 0}.ll-skin-melon .ui-datepicker table{margin:0}.ll-skin-melon .ui-datepicker th{padding:1em 0;color:#ccc;font-size:13px;font-weight:400;border:none;border-top:1px solid #3a414d}.ll-skin-melon .ui-state-disabled{opacity:1}.ll-skin-melon .ui-state-disabled .ui-state-default{color:#fba49e}/*! nouislider - 11.1.0 - 2018-04-02 11:18:13 */.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-ms-touch-action:none;touch-action:none;-moz-user-select:none;user-select:none;-moz-box-sizing:border-box;box-sizing:border-box}.noUi-target{position:relative;direction:ltr;background:#FAFAFA;border-radius:4px;border:1px solid #D3D3D3;box-shadow:inset 0 1px 1px #F0F0F0,0 3px 6px -5px #BBB}.noUi-base,.noUi-connects{width:100%;height:100%;position:relative;z-index:1}.noUi-connects{overflow:hidden;z-index:0;border-radius:3px}.noUi-handle,.noUi-tooltip{position:absolute;border:1px solid #D9D9D9}.noUi-connect,.noUi-origin{will-change:transform;position:absolute;z-index:1;top:0;left:0;height:100%;width:100%;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;transform-origin:0 0}html:not([dir=rtl]) .noUi-horizontal .noUi-origin{left:auto;right:0}.noUi-vertical .noUi-origin{width:0}.noUi-horizontal .noUi-origin{height:0}.noUi-state-tap .noUi-connect,.noUi-state-tap .noUi-origin{-webkit-transition:transform .3s;transition:transform .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{width:34px;height:28px;left:-17px;top:-6px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{width:28px;height:34px;left:-6px;top:-17px}html:not([dir=rtl]) .noUi-horizontal .noUi-handle{right:-17px;left:auto}.noUi-connect{background:#3FB8AF}.noUi-draggable{cursor:ew-resize}.noUi-vertical .noUi-draggable{cursor:ns-resize}.noUi-handle{border-radius:3px;background:#FFF;cursor:default;box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #EBEBEB,0 3px 6px -3px #BBB}.noUi-active{box-shadow:inset 0 0 1px #FFF,inset 0 1px 7px #DDD,0 3px 6px -3px #BBB}.noUi-handle:after,.noUi-handle:before{content:"";display:block;position:absolute;height:14px;width:1px;background:#E8E7E6;left:14px;top:6px}.noUi-handle:after{left:17px}.noUi-vertical .noUi-handle:after,.noUi-vertical .noUi-handle:before{width:14px;height:1px;left:6px;top:14px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect{background:#B8B8B8}[disabled] .noUi-handle,[disabled].noUi-handle,[disabled].noUi-target{cursor:not-allowed}.noUi-pips,.noUi-pips *{-moz-box-sizing:border-box;box-sizing:border-box}.noUi-pips{position:absolute}.noUi-value{position:absolute;white-space:nowrap;text-align:center}.noUi-value-sub{color:#ccc;font-size:10px}.noUi-marker{position:absolute;background:#CCC}.noUi-marker-large,.noUi-marker-sub{background:#AAA}.noUi-pips-horizontal{padding:10px 0;height:80px;top:100%;left:0;width:100%}.noUi-value-horizontal{-webkit-transform:translate(-50%,50%);transform:translate(-50%,50%)}.noUi-rtl .noUi-value-horizontal{-webkit-transform:translate(50%,50%);transform:translate(50%,50%)}.noUi-marker-horizontal.noUi-marker{margin-left:-1px;width:2px;height:5px}.noUi-marker-horizontal.noUi-marker-sub{height:10px}.noUi-marker-horizontal.noUi-marker-large{height:15px}.noUi-pips-vertical{padding:0 10px;height:100%;top:0;left:100%}.noUi-value-vertical{-webkit-transform:translate(0,-50%);transform:translate(0,-50%,0);padding-left:25px}.noUi-rtl .noUi-value-vertical{-webkit-transform:translate(0,50%);transform:translate(0,50%)}.noUi-marker-vertical.noUi-marker{width:5px;height:2px;margin-top:-1px}.noUi-marker-vertical.noUi-marker-sub{width:10px}.noUi-marker-vertical.noUi-marker-large{width:15px}.noUi-tooltip{display:block;border-radius:3px;background:#fff;color:#000;padding:5px;text-align:center;white-space:nowrap}.noUi-horizontal .noUi-tooltip{-webkit-transform:translate(-50%,0);transform:translate(-50%,0);left:50%;bottom:120%}.noUi-vertical .noUi-tooltip{-webkit-transform:translate(0,-50%);transform:translate(0,-50%);top:50%;right:120%}.searchandfilter p{margin-top:1em;display:block}.searchandfilter ul{display:block;margin-top:0;margin-bottom:0}.searchandfilter ul li{list-style:none;display:block;padding:10px 0;margin:0}.searchandfilter ul li li{padding:5px 0}.searchandfilter ul li ul li ul{margin-left:20px}.searchandfilter label{display:inline-block;margin:0;padding:0}.searchandfilter>ul>li[data-sf-combobox="1"] label{display:block}.searchandfilter li[data-sf-field-input-type=checkbox] label,.searchandfilter li[data-sf-field-input-type=radio] label,.searchandfilter li[data-sf-field-input-type=range-checkbox] label,.searchandfilter li[data-sf-field-input-type=range-radio] label{padding-left:10px}.searchandfilter .sf-date-prefix{padding-right:5px;display:inline-block}.searchandfilter .sf-count,.searchandfilter .sf-date-postfix{padding-left:5px;display:inline-block}.searchandfilter .screen-reader-text{clip:rect(1px,1px,1px,1px);height:1px;overflow:hidden;position:absolute!important;width:1px}.searchandfilter h4{margin:0;padding:5px 0 10px;font-size:16px}.searchandfilter .sf-range-max,.searchandfilter .sf-range-min{max-width:80px}.searchandfilter .sf-meta-range-radio-fromto .sf-range-max,.searchandfilter .sf-meta-range-radio-fromto .sf-range-min{display:inline-block;vertical-align:middle}.searchandfilter .sf-meta-range-radio-fromto span.sf-range-values-seperator{vertical-align:middle;display:inline-block;margin:0 15px}.searchandfilter .datepicker{max-width:170px}.searchandfilter select.sf-input-select{min-width:170px}.searchandfilter select.sf-range-max.sf-input-select,.searchandfilter select.sf-range-min.sf-input-select{min-width:auto}.searchandfilter ul>li>ul:not(.children){margin-left:0}.searchandfilter .meta-slider{margin-top:10px;margin-bottom:10px;height:15px;max-width:220px}.searchandfilter .noUi-connect{background-color:#526E91}.searchandfilter.search-filter-disabled .noUi-connect{opacity:.7}.searchandfilter .noUi-horizontal.noUi-extended{padding:0 10px}.searchandfilter .noUi-horizontal.noUi-extended .noUi-origin{right:-10px}.searchandfilter .noUi-handle{border-color:#ccc}.searchandfilter .noUi-horizontal .noUi-handle{width:24px;height:24px;top:-5px;border-radius:20px;left:-12px}.searchandfilter .noUi-horizontal .noUi-handle:after,.searchandfilter .noUi-horizontal .noUi-handle:before{height:9px;top:7px}.searchandfilter .noUi-horizontal .noUi-handle:before{left:9px}.searchandfilter .noUi-horizontal .noUi-handle:after{left:12px}.search-filter-scroll-loading{display:block;margin:20px 10px 10px;height:30px;width:30px;animation:search-filter-loader-rotate .7s infinite linear;border:5px solid rgba(0,0,0,.15);border-right-color:rgba(0,0,0,.6);border-radius:50%}@keyframes search-filter-loader-rotate{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.ll-skin-melon{font-size:90%}.ll-skin-melon .ui-datepicker td{background:#f7f7f7;border:none;padding:0}.ll-skin-melon .ui-datepicker th{border-color:#4D6077}.ll-skin-melon .ui-widget{font-family:inherit;background:#526E91;border:none;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.3);-webkit-box-shadow:0 0 3px rgba(0,0,0,.3);box-shadow:0 0 3px rgba(0,0,0,.3)}.searchandfilter.horizontal ul>li{display:inline-block;padding-right:10px}.searchandfilter.horizontal ul>li li{display:block}.ll-skin-melon td .ui-state-default{background:0 0;border:none;text-align:center;padding:.3em;margin:0;font-weight:400;color:#6C88AC;font-size:14px}.ll-skin-melon td .ui-state-active{background:#526E91;color:#fff}.ll-skin-melon td .ui-state-hover{background:#C4D6EC}.searchandfilter li.hide,.searchandfilter select option.hide{display:none}.searchandfilter .disabled{opacity:.7}.chosen-container-multi .chosen-choices li.search-field input[type=text]{height:auto;padding:5px;color:#666;font-family:inherit}.chosen-container{font-size:14px}.chosen-container-single .chosen-single{height:auto}.chosen-container-multi .chosen-choices li.search-choice{margin:3px 3px 3px 5px}.search-filter-results .sf-active{font-weight:700}.search-filter-results .sf-disabled{opacity:.5}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/img/ui-icons_ffffff_256x240.png b/wp/wp-content/plugins/search-filter-pro/public/assets/img/ui-icons_ffffff_256x240.png
deleted file mode 100644
index 4f624bb2..00000000
Binary files a/wp/wp-content/plugins/search-filter-pro/public/assets/img/ui-icons_ffffff_256x240.png and /dev/null differ
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/index.php b/wp/wp-content/plugins/search-filter-pro/public/assets/index.php
deleted file mode 100644
index e71af0ef..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/index.php
+++ /dev/null
@@ -1 +0,0 @@
-" + (this.escape_html(item.group_label)) + "" + item.html;
- } else {
- return item.html;
- }
- };
-
- AbstractChosen.prototype.mouse_enter = function() {
- return this.mouse_on_container = true;
- };
-
- AbstractChosen.prototype.mouse_leave = function() {
- return this.mouse_on_container = false;
- };
-
- AbstractChosen.prototype.input_focus = function(evt) {
- if (this.is_multiple) {
- if (!this.active_field) {
- return setTimeout(((function(_this) {
- return function() {
- return _this.container_mousedown();
- };
- })(this)), 50);
- }
- } else {
- if (!this.active_field) {
- return this.activate_field();
- }
- }
- };
-
- AbstractChosen.prototype.input_blur = function(evt) {
- if (!this.mouse_on_container) {
- this.active_field = false;
- return setTimeout(((function(_this) {
- return function() {
- return _this.blur_test();
- };
- })(this)), 100);
- }
- };
-
- AbstractChosen.prototype.label_click_handler = function(evt) {
- if (this.is_multiple) {
- return this.container_mousedown(evt);
- } else {
- return this.activate_field();
- }
- };
-
- AbstractChosen.prototype.results_option_build = function(options) {
- var content, data, data_content, i, len, ref, shown_results;
- content = '';
- shown_results = 0;
- ref = this.results_data;
- for (i = 0, len = ref.length; i < len; i++) {
- data = ref[i];
- data_content = '';
- if (data.group) {
- data_content = this.result_add_group(data);
- } else {
- data_content = this.result_add_option(data);
- }
- if (data_content !== '') {
- shown_results++;
- content += data_content;
- }
- if (options != null ? options.first : void 0) {
- if (data.selected && this.is_multiple) {
- this.choice_build(data);
- } else if (data.selected && !this.is_multiple) {
- this.single_set_selected_text(this.choice_label(data));
- }
- }
- if (shown_results >= this.max_shown_results) {
- break;
- }
- }
- return content;
- };
-
- AbstractChosen.prototype.result_add_option = function(option) {
- var classes, option_el;
- if (!option.search_match) {
- return '';
- }
- if (!this.include_option_in_results(option)) {
- return '';
- }
- classes = [];
- if (!option.disabled && !(option.selected && this.is_multiple)) {
- classes.push("active-result");
- }
- if (option.disabled && !(option.selected && this.is_multiple)) {
- classes.push("disabled-result");
- }
- if (option.selected) {
- classes.push("result-selected");
- }
- if (option.group_array_index != null) {
- classes.push("group-option");
- }
- if (option.classes !== "") {
- classes.push(option.classes);
- }
- option_el = document.createElement("li");
- option_el.className = classes.join(" ");
- if (option.style) {
- option_el.style.cssText = option.style;
- }
- option_el.setAttribute("data-option-array-index", option.array_index);
- option_el.innerHTML = option.highlighted_html || option.html;
- if (option.title) {
- option_el.title = option.title;
- }
- return this.outerHTML(option_el);
- };
-
- AbstractChosen.prototype.result_add_group = function(group) {
- var classes, group_el;
- if (!(group.search_match || group.group_match)) {
- return '';
- }
- if (!(group.active_options > 0)) {
- return '';
- }
- classes = [];
- classes.push("group-result");
- if (group.classes) {
- classes.push(group.classes);
- }
- group_el = document.createElement("li");
- group_el.className = classes.join(" ");
- group_el.innerHTML = group.highlighted_html || this.escape_html(group.label);
- if (group.title) {
- group_el.title = group.title;
- }
- return this.outerHTML(group_el);
- };
-
- AbstractChosen.prototype.results_update_field = function() {
- this.set_default_text();
- if (!this.is_multiple) {
- this.results_reset_cleanup();
- }
- this.result_clear_highlight();
- this.results_build();
- if (this.results_showing) {
- return this.winnow_results();
- }
- };
-
- AbstractChosen.prototype.reset_single_select_options = function() {
- var i, len, ref, result, results1;
- ref = this.results_data;
- results1 = [];
- for (i = 0, len = ref.length; i < len; i++) {
- result = ref[i];
- if (result.selected) {
- results1.push(result.selected = false);
- } else {
- results1.push(void 0);
- }
- }
- return results1;
- };
-
- AbstractChosen.prototype.results_toggle = function() {
- if (this.results_showing) {
- return this.results_hide();
- } else {
- return this.results_show();
- }
- };
-
- AbstractChosen.prototype.results_search = function(evt) {
- if (this.results_showing) {
- return this.winnow_results();
- } else {
- return this.results_show();
- }
- };
-
- AbstractChosen.prototype.winnow_results = function(options) {
- var escapedQuery, fix, i, len, option, prefix, query, ref, regex, results, results_group, search_match, startpos, suffix, text;
- this.no_results_clear();
- results = 0;
- query = this.get_search_text();
- escapedQuery = query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
- regex = this.get_search_regex(escapedQuery);
- ref = this.results_data;
- for (i = 0, len = ref.length; i < len; i++) {
- option = ref[i];
- option.search_match = false;
- results_group = null;
- search_match = null;
- option.highlighted_html = '';
- if (this.include_option_in_results(option)) {
- if (option.group) {
- option.group_match = false;
- option.active_options = 0;
- }
- if ((option.group_array_index != null) && this.results_data[option.group_array_index]) {
- results_group = this.results_data[option.group_array_index];
- if (results_group.active_options === 0 && results_group.search_match) {
- results += 1;
- }
- results_group.active_options += 1;
- }
- text = option.group ? option.label : option.text;
- if (!(option.group && !this.group_search)) {
- search_match = this.search_string_match(text, regex);
- option.search_match = search_match != null;
- if (option.search_match && !option.group) {
- results += 1;
- }
- if (option.search_match) {
- if (query.length) {
- startpos = search_match.index;
- prefix = text.slice(0, startpos);
- fix = text.slice(startpos, startpos + query.length);
- suffix = text.slice(startpos + query.length);
- option.highlighted_html = (this.escape_html(prefix)) + "" + (this.escape_html(fix)) + " " + (this.escape_html(suffix));
- }
- if (results_group != null) {
- results_group.group_match = true;
- }
- } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) {
- option.search_match = true;
- }
- }
- }
- }
- this.result_clear_highlight();
- if (results < 1 && query.length) {
- this.update_results_content("");
- return this.no_results(query);
- } else {
- this.update_results_content(this.results_option_build());
- if (!(options != null ? options.skip_highlight : void 0)) {
- return this.winnow_results_set_highlight();
- }
- }
- };
-
- AbstractChosen.prototype.get_search_regex = function(escaped_search_string) {
- var regex_flag, regex_string;
- regex_string = this.search_contains ? escaped_search_string : "(^|\\s|\\b)" + escaped_search_string + "[^\\s]*";
- if (!(this.enable_split_word_search || this.search_contains)) {
- regex_string = "^" + regex_string;
- }
- regex_flag = this.case_sensitive_search ? "" : "i";
- return new RegExp(regex_string, regex_flag);
- };
-
- AbstractChosen.prototype.search_string_match = function(search_string, regex) {
- var match;
- match = regex.exec(search_string);
- if (!this.search_contains && (match != null ? match[1] : void 0)) {
- match.index += 1;
- }
- return match;
- };
-
- AbstractChosen.prototype.choices_count = function() {
- var i, len, option, ref;
- if (this.selected_option_count != null) {
- return this.selected_option_count;
- }
- this.selected_option_count = 0;
- ref = this.form_field.options;
- for (i = 0, len = ref.length; i < len; i++) {
- option = ref[i];
- if (option.selected) {
- this.selected_option_count += 1;
- }
- }
- return this.selected_option_count;
- };
-
- AbstractChosen.prototype.choices_click = function(evt) {
- evt.preventDefault();
- this.activate_field();
- if (!(this.results_showing || this.is_disabled)) {
- return this.results_show();
- }
- };
-
- AbstractChosen.prototype.keydown_checker = function(evt) {
- var ref, stroke;
- stroke = (ref = evt.which) != null ? ref : evt.keyCode;
- this.search_field_scale();
- if (stroke !== 8 && this.pending_backstroke) {
- this.clear_backstroke();
- }
- switch (stroke) {
- case 8:
- this.backstroke_length = this.get_search_field_value().length;
- break;
- case 9:
- if (this.results_showing && !this.is_multiple) {
- this.result_select(evt);
- }
- this.mouse_on_container = false;
- break;
- case 13:
- if (this.results_showing) {
- evt.preventDefault();
- }
- break;
- case 27:
- if (this.results_showing) {
- evt.preventDefault();
- }
- break;
- case 32:
- if (this.disable_search) {
- evt.preventDefault();
- }
- break;
- case 38:
- evt.preventDefault();
- this.keyup_arrow();
- break;
- case 40:
- evt.preventDefault();
- this.keydown_arrow();
- break;
- }
- };
-
- AbstractChosen.prototype.keyup_checker = function(evt) {
- var ref, stroke;
- stroke = (ref = evt.which) != null ? ref : evt.keyCode;
- this.search_field_scale();
- switch (stroke) {
- case 8:
- if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) {
- this.keydown_backstroke();
- } else if (!this.pending_backstroke) {
- this.result_clear_highlight();
- this.results_search();
- }
- break;
- case 13:
- evt.preventDefault();
- if (this.results_showing) {
- this.result_select(evt);
- }
- break;
- case 27:
- if (this.results_showing) {
- this.results_hide();
- }
- break;
- case 9:
- case 16:
- case 17:
- case 18:
- case 38:
- case 40:
- case 91:
- break;
- default:
- this.results_search();
- break;
- }
- };
-
- AbstractChosen.prototype.clipboard_event_checker = function(evt) {
- if (this.is_disabled) {
- return;
- }
- return setTimeout(((function(_this) {
- return function() {
- return _this.results_search();
- };
- })(this)), 50);
- };
-
- AbstractChosen.prototype.container_width = function() {
- if (this.options.width != null) {
- return this.options.width;
- } else {
- return this.form_field.offsetWidth + "px";
- }
- };
-
- AbstractChosen.prototype.include_option_in_results = function(option) {
- if (this.is_multiple && (!this.display_selected_options && option.selected)) {
- return false;
- }
- if (!this.display_disabled_options && option.disabled) {
- return false;
- }
- if (option.empty) {
- return false;
- }
- return true;
- };
-
- AbstractChosen.prototype.search_results_touchstart = function(evt) {
- this.touch_started = true;
- return this.search_results_mouseover(evt);
- };
-
- AbstractChosen.prototype.search_results_touchmove = function(evt) {
- this.touch_started = false;
- return this.search_results_mouseout(evt);
- };
-
- AbstractChosen.prototype.search_results_touchend = function(evt) {
- if (this.touch_started) {
- return this.search_results_mouseup(evt);
- }
- };
-
- AbstractChosen.prototype.outerHTML = function(element) {
- var tmp;
- if (element.outerHTML) {
- return element.outerHTML;
- }
- tmp = document.createElement("div");
- tmp.appendChild(element);
- return tmp.innerHTML;
- };
-
- AbstractChosen.prototype.get_single_html = function() {
- return "\n " + this.default_text + " \n
\n \n";
- };
-
- AbstractChosen.prototype.get_multi_html = function() {
- return "\n";
- };
-
- AbstractChosen.prototype.get_no_results_html = function(terms) {
- return "\n " + this.results_none_found + " " + (this.escape_html(terms)) + " \n ";
- };
-
- AbstractChosen.browser_is_supported = function() {
- if ("Microsoft Internet Explorer" === window.navigator.appName) {
- return document.documentMode >= 8;
- }
- if (/iP(od|hone)/i.test(window.navigator.userAgent) || /IEMobile/i.test(window.navigator.userAgent) || /Windows Phone/i.test(window.navigator.userAgent) || /BlackBerry/i.test(window.navigator.userAgent) || /BB10/i.test(window.navigator.userAgent) || /Android.*Mobile/i.test(window.navigator.userAgent)) {
- return false;
- }
- return true;
- };
-
- AbstractChosen.default_multiple_text = "Select Some Options";
-
- AbstractChosen.default_single_text = "Select an Option";
-
- AbstractChosen.default_no_result_text = "No results match";
-
- return AbstractChosen;
-
- })();
-
- $ = jQuery;
-
- $.fn.extend({
- chosen: function(options) {
- if (!AbstractChosen.browser_is_supported()) {
- return this;
- }
- return this.each(function(input_field) {
- var $this, chosen;
- $this = $(this);
- chosen = $this.data('chosen');
- if (options === 'destroy') {
- if (chosen instanceof Chosen) {
- chosen.destroy();
- }
- return;
- }
- if (!(chosen instanceof Chosen)) {
- $this.data('chosen', new Chosen(this, options));
- }
- });
- }
- });
-
- Chosen = (function(superClass) {
- extend(Chosen, superClass);
-
- function Chosen() {
- return Chosen.__super__.constructor.apply(this, arguments);
- }
-
- Chosen.prototype.setup = function() {
- this.form_field_jq = $(this.form_field);
- return this.current_selectedIndex = this.form_field.selectedIndex;
- };
-
- Chosen.prototype.set_up_html = function() {
- var container_classes, container_props;
- container_classes = ["chosen-container"];
- container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single"));
- if (this.inherit_select_classes && this.form_field.className) {
- container_classes.push(this.form_field.className);
- }
- if (this.is_rtl) {
- container_classes.push("chosen-rtl");
- }
- container_props = {
- 'class': container_classes.join(' '),
- 'title': this.form_field.title
- };
- if (this.form_field.id.length) {
- container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen";
- }
- this.container = $("
", container_props);
- this.container.width(this.container_width());
- if (this.is_multiple) {
- this.container.html(this.get_multi_html());
- } else {
- this.container.html(this.get_single_html());
- }
- this.form_field_jq.hide().after(this.container);
- this.dropdown = this.container.find('div.chosen-drop').first();
- this.search_field = this.container.find('input').first();
- this.search_results = this.container.find('ul.chosen-results').first();
- this.search_field_scale();
- this.search_no_results = this.container.find('li.no-results').first();
- if (this.is_multiple) {
- this.search_choices = this.container.find('ul.chosen-choices').first();
- this.search_container = this.container.find('li.search-field').first();
- } else {
- this.search_container = this.container.find('div.chosen-search').first();
- this.selected_item = this.container.find('.chosen-single').first();
- }
- this.results_build();
- this.set_tab_index();
- return this.set_label_behavior();
- };
-
- Chosen.prototype.on_ready = function() {
- return this.form_field_jq.trigger("chosen:ready", {
- chosen: this
- });
- };
-
- Chosen.prototype.register_observers = function() {
- this.container.on('touchstart.chosen', (function(_this) {
- return function(evt) {
- _this.container_mousedown(evt);
- };
- })(this));
- this.container.on('touchend.chosen', (function(_this) {
- return function(evt) {
- _this.container_mouseup(evt);
- };
- })(this));
- this.container.on('mousedown.chosen', (function(_this) {
- return function(evt) {
- _this.container_mousedown(evt);
- };
- })(this));
- this.container.on('mouseup.chosen', (function(_this) {
- return function(evt) {
- _this.container_mouseup(evt);
- };
- })(this));
- this.container.on('mouseenter.chosen', (function(_this) {
- return function(evt) {
- _this.mouse_enter(evt);
- };
- })(this));
- this.container.on('mouseleave.chosen', (function(_this) {
- return function(evt) {
- _this.mouse_leave(evt);
- };
- })(this));
- this.search_results.on('mouseup.chosen', (function(_this) {
- return function(evt) {
- _this.search_results_mouseup(evt);
- };
- })(this));
- this.search_results.on('mouseover.chosen', (function(_this) {
- return function(evt) {
- _this.search_results_mouseover(evt);
- };
- })(this));
- this.search_results.on('mouseout.chosen', (function(_this) {
- return function(evt) {
- _this.search_results_mouseout(evt);
- };
- })(this));
- this.search_results.on('mousewheel.chosen DOMMouseScroll.chosen', (function(_this) {
- return function(evt) {
- _this.search_results_mousewheel(evt);
- };
- })(this));
- this.search_results.on('touchstart.chosen', (function(_this) {
- return function(evt) {
- _this.search_results_touchstart(evt);
- };
- })(this));
- this.search_results.on('touchmove.chosen', (function(_this) {
- return function(evt) {
- _this.search_results_touchmove(evt);
- };
- })(this));
- this.search_results.on('touchend.chosen', (function(_this) {
- return function(evt) {
- _this.search_results_touchend(evt);
- };
- })(this));
- this.form_field_jq.on("chosen:updated.chosen", (function(_this) {
- return function(evt) {
- _this.results_update_field(evt);
- };
- })(this));
- this.form_field_jq.on("chosen:activate.chosen", (function(_this) {
- return function(evt) {
- _this.activate_field(evt);
- };
- })(this));
- this.form_field_jq.on("chosen:open.chosen", (function(_this) {
- return function(evt) {
- _this.container_mousedown(evt);
- };
- })(this));
- this.form_field_jq.on("chosen:close.chosen", (function(_this) {
- return function(evt) {
- _this.close_field(evt);
- };
- })(this));
- this.search_field.on('blur.chosen', (function(_this) {
- return function(evt) {
- _this.input_blur(evt);
- };
- })(this));
- this.search_field.on('keyup.chosen', (function(_this) {
- return function(evt) {
- _this.keyup_checker(evt);
- };
- })(this));
- this.search_field.on('keydown.chosen', (function(_this) {
- return function(evt) {
- _this.keydown_checker(evt);
- };
- })(this));
- this.search_field.on('focus.chosen', (function(_this) {
- return function(evt) {
- _this.input_focus(evt);
- };
- })(this));
- this.search_field.on('cut.chosen', (function(_this) {
- return function(evt) {
- _this.clipboard_event_checker(evt);
- };
- })(this));
- this.search_field.on('paste.chosen', (function(_this) {
- return function(evt) {
- _this.clipboard_event_checker(evt);
- };
- })(this));
- if (this.is_multiple) {
- return this.search_choices.on('click.chosen', (function(_this) {
- return function(evt) {
- _this.choices_click(evt);
- };
- })(this));
- } else {
- return this.container.on('click.chosen', function(evt) {
- evt.preventDefault();
- });
- }
- };
-
- Chosen.prototype.destroy = function() {
- $(this.container[0].ownerDocument).off('click.chosen', this.click_test_action);
- if (this.form_field_label.length > 0) {
- this.form_field_label.off('click.chosen');
- }
- if (this.search_field[0].tabIndex) {
- this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex;
- }
- this.container.remove();
- this.form_field_jq.removeData('chosen');
- return this.form_field_jq.show();
- };
-
- Chosen.prototype.search_field_disabled = function() {
- this.is_disabled = this.form_field.disabled || this.form_field_jq.parents('fieldset').is(':disabled');
- this.container.toggleClass('chosen-disabled', this.is_disabled);
- this.search_field[0].disabled = this.is_disabled;
- if (!this.is_multiple) {
- this.selected_item.off('focus.chosen', this.activate_field);
- }
- if (this.is_disabled) {
- return this.close_field();
- } else if (!this.is_multiple) {
- return this.selected_item.on('focus.chosen', this.activate_field);
- }
- };
-
- Chosen.prototype.container_mousedown = function(evt) {
- var ref;
- if (this.is_disabled) {
- return;
- }
- if (evt && ((ref = evt.type) === 'mousedown' || ref === 'touchstart') && !this.results_showing) {
- evt.preventDefault();
- }
- if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) {
- if (!this.active_field) {
- if (this.is_multiple) {
- this.search_field.val("");
- }
- $(this.container[0].ownerDocument).on('click.chosen', this.click_test_action);
- this.results_show();
- } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) {
- evt.preventDefault();
- this.results_toggle();
- }
- return this.activate_field();
- }
- };
-
- Chosen.prototype.container_mouseup = function(evt) {
- if (evt.target.nodeName === "ABBR" && !this.is_disabled) {
- return this.results_reset(evt);
- }
- };
-
- Chosen.prototype.search_results_mousewheel = function(evt) {
- var delta;
- if (evt.originalEvent) {
- delta = evt.originalEvent.deltaY || -evt.originalEvent.wheelDelta || evt.originalEvent.detail;
- }
- if (delta != null) {
- evt.preventDefault();
- if (evt.type === 'DOMMouseScroll') {
- delta = delta * 40;
- }
- return this.search_results.scrollTop(delta + this.search_results.scrollTop());
- }
- };
-
- Chosen.prototype.blur_test = function(evt) {
- if (!this.active_field && this.container.hasClass("chosen-container-active")) {
- return this.close_field();
- }
- };
-
- Chosen.prototype.close_field = function() {
- $(this.container[0].ownerDocument).off("click.chosen", this.click_test_action);
- this.active_field = false;
- this.results_hide();
- this.container.removeClass("chosen-container-active");
- this.clear_backstroke();
- this.show_search_field_default();
- this.search_field_scale();
- return this.search_field.blur();
- };
-
- Chosen.prototype.activate_field = function() {
- if (this.is_disabled) {
- return;
- }
- this.container.addClass("chosen-container-active");
- this.active_field = true;
- this.search_field.val(this.search_field.val());
- return this.search_field.focus();
- };
-
- Chosen.prototype.test_active_click = function(evt) {
- var active_container;
- active_container = $(evt.target).closest('.chosen-container');
- if (active_container.length && this.container[0] === active_container[0]) {
- return this.active_field = true;
- } else {
- return this.close_field();
- }
- };
-
- Chosen.prototype.results_build = function() {
- this.parsing = true;
- this.selected_option_count = null;
- this.results_data = SelectParser.select_to_array(this.form_field);
- if (this.is_multiple) {
- this.search_choices.find("li.search-choice").remove();
- } else {
- this.single_set_selected_text();
- if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) {
- this.search_field[0].readOnly = true;
- this.container.addClass("chosen-container-single-nosearch");
- } else {
- this.search_field[0].readOnly = false;
- this.container.removeClass("chosen-container-single-nosearch");
- }
- }
- this.update_results_content(this.results_option_build({
- first: true
- }));
- this.search_field_disabled();
- this.show_search_field_default();
- this.search_field_scale();
- return this.parsing = false;
- };
-
- Chosen.prototype.result_do_highlight = function(el) {
- var high_bottom, high_top, maxHeight, visible_bottom, visible_top;
- if (el.length) {
- this.result_clear_highlight();
- this.result_highlight = el;
- this.result_highlight.addClass("highlighted");
- maxHeight = parseInt(this.search_results.css("maxHeight"), 10);
- visible_top = this.search_results.scrollTop();
- visible_bottom = maxHeight + visible_top;
- high_top = this.result_highlight.position().top + this.search_results.scrollTop();
- high_bottom = high_top + this.result_highlight.outerHeight();
- if (high_bottom >= visible_bottom) {
- return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0);
- } else if (high_top < visible_top) {
- return this.search_results.scrollTop(high_top);
- }
- }
- };
-
- Chosen.prototype.result_clear_highlight = function() {
- if (this.result_highlight) {
- this.result_highlight.removeClass("highlighted");
- }
- return this.result_highlight = null;
- };
-
- Chosen.prototype.results_show = function() {
- if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
- this.form_field_jq.trigger("chosen:maxselected", {
- chosen: this
- });
- return false;
- }
- this.container.addClass("chosen-with-drop");
- this.results_showing = true;
- this.search_field.focus();
- this.search_field.val(this.get_search_field_value());
- this.winnow_results();
- return this.form_field_jq.trigger("chosen:showing_dropdown", {
- chosen: this
- });
- };
-
- Chosen.prototype.update_results_content = function(content) {
- return this.search_results.html(content);
- };
-
- Chosen.prototype.results_hide = function() {
- if (this.results_showing) {
- this.result_clear_highlight();
- this.container.removeClass("chosen-with-drop");
- this.form_field_jq.trigger("chosen:hiding_dropdown", {
- chosen: this
- });
- }
- return this.results_showing = false;
- };
-
- Chosen.prototype.set_tab_index = function(el) {
- var ti;
- if (this.form_field.tabIndex) {
- ti = this.form_field.tabIndex;
- this.form_field.tabIndex = -1;
- return this.search_field[0].tabIndex = ti;
- }
- };
-
- Chosen.prototype.set_label_behavior = function() {
- this.form_field_label = this.form_field_jq.parents("label");
- if (!this.form_field_label.length && this.form_field.id.length) {
- this.form_field_label = $("label[for='" + this.form_field.id + "']");
- }
- if (this.form_field_label.length > 0) {
- return this.form_field_label.on('click.chosen', this.label_click_handler);
- }
- };
-
- Chosen.prototype.show_search_field_default = function() {
- if (this.is_multiple && this.choices_count() < 1 && !this.active_field) {
- this.search_field.val(this.default_text);
- return this.search_field.addClass("default");
- } else {
- this.search_field.val("");
- return this.search_field.removeClass("default");
- }
- };
-
- Chosen.prototype.search_results_mouseup = function(evt) {
- var target;
- target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
- if (target.length) {
- this.result_highlight = target;
- this.result_select(evt);
- return this.search_field.focus();
- }
- };
-
- Chosen.prototype.search_results_mouseover = function(evt) {
- var target;
- target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first();
- if (target) {
- return this.result_do_highlight(target);
- }
- };
-
- Chosen.prototype.search_results_mouseout = function(evt) {
- if ($(evt.target).hasClass("active-result") || $(evt.target).parents('.active-result').first()) {
- return this.result_clear_highlight();
- }
- };
-
- Chosen.prototype.choice_build = function(item) {
- var choice, close_link;
- choice = $(' ', {
- "class": "search-choice"
- }).html("" + (this.choice_label(item)) + " ");
- if (item.disabled) {
- choice.addClass('search-choice-disabled');
- } else {
- close_link = $(' ', {
- "class": 'search-choice-close',
- 'data-option-array-index': item.array_index
- });
- close_link.on('click.chosen', (function(_this) {
- return function(evt) {
- return _this.choice_destroy_link_click(evt);
- };
- })(this));
- choice.append(close_link);
- }
- return this.search_container.before(choice);
- };
-
- Chosen.prototype.choice_destroy_link_click = function(evt) {
- evt.preventDefault();
- evt.stopPropagation();
- if (!this.is_disabled) {
- return this.choice_destroy($(evt.target));
- }
- };
-
- Chosen.prototype.choice_destroy = function(link) {
- if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) {
- if (this.active_field) {
- this.search_field.focus();
- } else {
- this.show_search_field_default();
- }
- if (this.is_multiple && this.choices_count() > 0 && this.get_search_field_value().length < 1) {
- this.results_hide();
- }
- link.parents('li').first().remove();
- return this.search_field_scale();
- }
- };
-
- Chosen.prototype.results_reset = function() {
- this.reset_single_select_options();
- this.form_field.options[0].selected = true;
- this.single_set_selected_text();
- this.show_search_field_default();
- this.results_reset_cleanup();
- this.trigger_form_field_change();
- if (this.active_field) {
- return this.results_hide();
- }
- };
-
- Chosen.prototype.results_reset_cleanup = function() {
- this.current_selectedIndex = this.form_field.selectedIndex;
- return this.selected_item.find("abbr").remove();
- };
-
- Chosen.prototype.result_select = function(evt) {
- var high, item;
- if (this.result_highlight) {
- high = this.result_highlight;
- this.result_clear_highlight();
- if (this.is_multiple && this.max_selected_options <= this.choices_count()) {
- this.form_field_jq.trigger("chosen:maxselected", {
- chosen: this
- });
- return false;
- }
- if (this.is_multiple) {
- high.removeClass("active-result");
- } else {
- this.reset_single_select_options();
- }
- high.addClass("result-selected");
- item = this.results_data[high[0].getAttribute("data-option-array-index")];
- item.selected = true;
- this.form_field.options[item.options_index].selected = true;
- this.selected_option_count = null;
- if (this.is_multiple) {
- this.choice_build(item);
- } else {
- this.single_set_selected_text(this.choice_label(item));
- }
- if (this.is_multiple && (!this.hide_results_on_select || (evt.metaKey || evt.ctrlKey))) {
- if (evt.metaKey || evt.ctrlKey) {
- this.winnow_results({
- skip_highlight: true
- });
- } else {
- this.search_field.val("");
- this.winnow_results();
- }
- } else {
- this.results_hide();
- this.show_search_field_default();
- }
- if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) {
- this.trigger_form_field_change({
- selected: this.form_field.options[item.options_index].value
- });
- }
- this.current_selectedIndex = this.form_field.selectedIndex;
- evt.preventDefault();
- return this.search_field_scale();
- }
- };
-
- Chosen.prototype.single_set_selected_text = function(text) {
- if (text == null) {
- text = this.default_text;
- }
- if (text === this.default_text) {
- this.selected_item.addClass("chosen-default");
- } else {
- this.single_deselect_control_build();
- this.selected_item.removeClass("chosen-default");
- }
- return this.selected_item.find("span").html(text);
- };
-
- Chosen.prototype.result_deselect = function(pos) {
- var result_data;
- result_data = this.results_data[pos];
- if (!this.form_field.options[result_data.options_index].disabled) {
- result_data.selected = false;
- this.form_field.options[result_data.options_index].selected = false;
- this.selected_option_count = null;
- this.result_clear_highlight();
- if (this.results_showing) {
- this.winnow_results();
- }
- this.trigger_form_field_change({
- deselected: this.form_field.options[result_data.options_index].value
- });
- this.search_field_scale();
- return true;
- } else {
- return false;
- }
- };
-
- Chosen.prototype.single_deselect_control_build = function() {
- if (!this.allow_single_deselect) {
- return;
- }
- if (!this.selected_item.find("abbr").length) {
- this.selected_item.find("span").first().after(" ");
- }
- return this.selected_item.addClass("chosen-single-with-deselect");
- };
-
- Chosen.prototype.get_search_field_value = function() {
- return this.search_field.val();
- };
-
- Chosen.prototype.get_search_text = function() {
- return $.trim(this.get_search_field_value());
- };
-
- Chosen.prototype.escape_html = function(text) {
- return $('
').text(text).html();
- };
-
- Chosen.prototype.winnow_results_set_highlight = function() {
- var do_high, selected_results;
- selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : [];
- do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first();
- if (do_high != null) {
- return this.result_do_highlight(do_high);
- }
- };
-
- Chosen.prototype.no_results = function(terms) {
- var no_results_html;
- no_results_html = this.get_no_results_html(terms);
- this.search_results.append(no_results_html);
- return this.form_field_jq.trigger("chosen:no_results", {
- chosen: this
- });
- };
-
- Chosen.prototype.no_results_clear = function() {
- return this.search_results.find(".no-results").remove();
- };
-
- Chosen.prototype.keydown_arrow = function() {
- var next_sib;
- if (this.results_showing && this.result_highlight) {
- next_sib = this.result_highlight.nextAll("li.active-result").first();
- if (next_sib) {
- return this.result_do_highlight(next_sib);
- }
- } else {
- return this.results_show();
- }
- };
-
- Chosen.prototype.keyup_arrow = function() {
- var prev_sibs;
- if (!this.results_showing && !this.is_multiple) {
- return this.results_show();
- } else if (this.result_highlight) {
- prev_sibs = this.result_highlight.prevAll("li.active-result");
- if (prev_sibs.length) {
- return this.result_do_highlight(prev_sibs.first());
- } else {
- if (this.choices_count() > 0) {
- this.results_hide();
- }
- return this.result_clear_highlight();
- }
- }
- };
-
- Chosen.prototype.keydown_backstroke = function() {
- var next_available_destroy;
- if (this.pending_backstroke) {
- this.choice_destroy(this.pending_backstroke.find("a").first());
- return this.clear_backstroke();
- } else {
- next_available_destroy = this.search_container.siblings("li.search-choice").last();
- if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) {
- this.pending_backstroke = next_available_destroy;
- if (this.single_backstroke_delete) {
- return this.keydown_backstroke();
- } else {
- return this.pending_backstroke.addClass("search-choice-focus");
- }
- }
- }
- };
-
- Chosen.prototype.clear_backstroke = function() {
- if (this.pending_backstroke) {
- this.pending_backstroke.removeClass("search-choice-focus");
- }
- return this.pending_backstroke = null;
- };
-
- Chosen.prototype.search_field_scale = function() {
- var div, i, len, style, style_block, styles, width;
- if (!this.is_multiple) {
- return;
- }
- style_block = {
- position: 'absolute',
- left: '-1000px',
- top: '-1000px',
- display: 'none',
- whiteSpace: 'pre'
- };
- styles = ['fontSize', 'fontStyle', 'fontWeight', 'fontFamily', 'lineHeight', 'textTransform', 'letterSpacing'];
- for (i = 0, len = styles.length; i < len; i++) {
- style = styles[i];
- style_block[style] = this.search_field.css(style);
- }
- div = $('
').css(style_block);
- div.text(this.get_search_field_value());
- $('body').append(div);
- width = div.width() + 25;
- div.remove();
- if (this.container.is(':visible')) {
- width = Math.min(this.container.outerWidth() - 10, width);
- }
- return this.search_field.width(width);
- };
-
- Chosen.prototype.trigger_form_field_change = function(extra) {
- this.form_field_jq.trigger("input", extra);
- return this.form_field_jq.trigger("change", extra);
- };
-
- return Chosen;
-
- })(AbstractChosen);
-
-}).call(this);
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/chosen.jquery.min.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/chosen.jquery.min.js
deleted file mode 100644
index 4ad16475..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/chosen.jquery.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/* Chosen v1.8.7 | (c) 2011-2018 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */
-
-(function(){var t,e,s,i,n=function(t,e){return function(){return t.apply(e,arguments)}},r=function(t,e){function s(){this.constructor=t}for(var i in e)o.call(e,i)&&(t[i]=e[i]);return s.prototype=e.prototype,t.prototype=new s,t.__super__=e.prototype,t},o={}.hasOwnProperty;(i=function(){function t(){this.options_index=0,this.parsed=[]}return t.prototype.add_node=function(t){return"OPTGROUP"===t.nodeName.toUpperCase()?this.add_group(t):this.add_option(t)},t.prototype.add_group=function(t){var e,s,i,n,r,o;for(e=this.parsed.length,this.parsed.push({array_index:e,group:!0,label:t.label,title:t.title?t.title:void 0,children:0,disabled:t.disabled,classes:t.className}),o=[],s=0,i=(r=t.childNodes).length;s"+this.escape_html(t.group_label)+""+t.html:t.html},t.prototype.mouse_enter=function(){return this.mouse_on_container=!0},t.prototype.mouse_leave=function(){return this.mouse_on_container=!1},t.prototype.input_focus=function(t){if(this.is_multiple){if(!this.active_field)return setTimeout(function(t){return function(){return t.container_mousedown()}}(this),50)}else if(!this.active_field)return this.activate_field()},t.prototype.input_blur=function(t){if(!this.mouse_on_container)return this.active_field=!1,setTimeout(function(t){return function(){return t.blur_test()}}(this),100)},t.prototype.label_click_handler=function(t){return this.is_multiple?this.container_mousedown(t):this.activate_field()},t.prototype.results_option_build=function(t){var e,s,i,n,r,o,h;for(e="",h=0,n=0,r=(o=this.results_data).length;n=this.max_shown_results));n++);return e},t.prototype.result_add_option=function(t){var e,s;return t.search_match&&this.include_option_in_results(t)?(e=[],t.disabled||t.selected&&this.is_multiple||e.push("active-result"),!t.disabled||t.selected&&this.is_multiple||e.push("disabled-result"),t.selected&&e.push("result-selected"),null!=t.group_array_index&&e.push("group-option"),""!==t.classes&&e.push(t.classes),s=document.createElement("li"),s.className=e.join(" "),t.style&&(s.style.cssText=t.style),s.setAttribute("data-option-array-index",t.array_index),s.innerHTML=t.highlighted_html||t.html,t.title&&(s.title=t.title),this.outerHTML(s)):""},t.prototype.result_add_group=function(t){var e,s;return(t.search_match||t.group_match)&&t.active_options>0?((e=[]).push("group-result"),t.classes&&e.push(t.classes),s=document.createElement("li"),s.className=e.join(" "),s.innerHTML=t.highlighted_html||this.escape_html(t.label),t.title&&(s.title=t.title),this.outerHTML(s)):""},t.prototype.results_update_field=function(){if(this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing)return this.winnow_results()},t.prototype.reset_single_select_options=function(){var t,e,s,i,n;for(n=[],t=0,e=(s=this.results_data).length;t"+this.escape_html(s)+""+this.escape_html(p)),null!=a&&(a.group_match=!0)):null!=r.group_array_index&&this.results_data[r.group_array_index].search_match&&(r.search_match=!0)));return this.result_clear_highlight(),_<1&&h.length?(this.update_results_content(""),this.no_results(h)):(this.update_results_content(this.results_option_build()),(null!=t?t.skip_highlight:void 0)?void 0:this.winnow_results_set_highlight())},t.prototype.get_search_regex=function(t){var e,s;return s=this.search_contains?t:"(^|\\s|\\b)"+t+"[^\\s]*",this.enable_split_word_search||this.search_contains||(s="^"+s),e=this.case_sensitive_search?"":"i",new RegExp(s,e)},t.prototype.search_string_match=function(t,e){var s;return s=e.exec(t),!this.search_contains&&(null!=s?s[1]:void 0)&&(s.index+=1),s},t.prototype.choices_count=function(){var t,e,s;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,t=0,e=(s=this.form_field.options).length;t0?this.keydown_backstroke():this.pending_backstroke||(this.result_clear_highlight(),this.results_search());break;case 13:t.preventDefault(),this.results_showing&&this.result_select(t);break;case 27:this.results_showing&&this.results_hide();break;case 9:case 16:case 17:case 18:case 38:case 40:case 91:break;default:this.results_search()}},t.prototype.clipboard_event_checker=function(t){if(!this.is_disabled)return setTimeout(function(t){return function(){return t.results_search()}}(this),50)},t.prototype.container_width=function(){return null!=this.options.width?this.options.width:this.form_field.offsetWidth+"px"},t.prototype.include_option_in_results=function(t){return!(this.is_multiple&&!this.display_selected_options&&t.selected)&&(!(!this.display_disabled_options&&t.disabled)&&!t.empty)},t.prototype.search_results_touchstart=function(t){return this.touch_started=!0,this.search_results_mouseover(t)},t.prototype.search_results_touchmove=function(t){return this.touch_started=!1,this.search_results_mouseout(t)},t.prototype.search_results_touchend=function(t){if(this.touch_started)return this.search_results_mouseup(t)},t.prototype.outerHTML=function(t){var e;return t.outerHTML?t.outerHTML:((e=document.createElement("div")).appendChild(t),e.innerHTML)},t.prototype.get_single_html=function(){return'\n '+this.default_text+' \n
\n \n'},t.prototype.get_multi_html=function(){return'\n'},t.prototype.get_no_results_html=function(t){return'\n '+this.results_none_found+" "+this.escape_html(t)+" \n "},t.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:!(/iP(od|hone)/i.test(window.navigator.userAgent)||/IEMobile/i.test(window.navigator.userAgent)||/Windows Phone/i.test(window.navigator.userAgent)||/BlackBerry/i.test(window.navigator.userAgent)||/BB10/i.test(window.navigator.userAgent)||/Android.*Mobile/i.test(window.navigator.userAgent))},t.default_multiple_text="Select Some Options",t.default_single_text="Select an Option",t.default_no_result_text="No results match",t}(),(t=jQuery).fn.extend({chosen:function(i){return e.browser_is_supported()?this.each(function(e){var n,r;r=(n=t(this)).data("chosen"),"destroy"!==i?r instanceof s||n.data("chosen",new s(this,i)):r instanceof s&&r.destroy()}):this}}),s=function(s){function n(){return n.__super__.constructor.apply(this,arguments)}return r(n,e),n.prototype.setup=function(){return this.form_field_jq=t(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex},n.prototype.set_up_html=function(){var e,s;return(e=["chosen-container"]).push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&e.push(this.form_field.className),this.is_rtl&&e.push("chosen-rtl"),s={"class":e.join(" "),title:this.form_field.title},this.form_field.id.length&&(s.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=t("
",s),this.container.width(this.container_width()),this.is_multiple?this.container.html(this.get_multi_html()):this.container.html(this.get_single_html()),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior()},n.prototype.on_ready=function(){return this.form_field_jq.trigger("chosen:ready",{chosen:this})},n.prototype.register_observers=function(){return this.container.on("touchstart.chosen",function(t){return function(e){t.container_mousedown(e)}}(this)),this.container.on("touchend.chosen",function(t){return function(e){t.container_mouseup(e)}}(this)),this.container.on("mousedown.chosen",function(t){return function(e){t.container_mousedown(e)}}(this)),this.container.on("mouseup.chosen",function(t){return function(e){t.container_mouseup(e)}}(this)),this.container.on("mouseenter.chosen",function(t){return function(e){t.mouse_enter(e)}}(this)),this.container.on("mouseleave.chosen",function(t){return function(e){t.mouse_leave(e)}}(this)),this.search_results.on("mouseup.chosen",function(t){return function(e){t.search_results_mouseup(e)}}(this)),this.search_results.on("mouseover.chosen",function(t){return function(e){t.search_results_mouseover(e)}}(this)),this.search_results.on("mouseout.chosen",function(t){return function(e){t.search_results_mouseout(e)}}(this)),this.search_results.on("mousewheel.chosen DOMMouseScroll.chosen",function(t){return function(e){t.search_results_mousewheel(e)}}(this)),this.search_results.on("touchstart.chosen",function(t){return function(e){t.search_results_touchstart(e)}}(this)),this.search_results.on("touchmove.chosen",function(t){return function(e){t.search_results_touchmove(e)}}(this)),this.search_results.on("touchend.chosen",function(t){return function(e){t.search_results_touchend(e)}}(this)),this.form_field_jq.on("chosen:updated.chosen",function(t){return function(e){t.results_update_field(e)}}(this)),this.form_field_jq.on("chosen:activate.chosen",function(t){return function(e){t.activate_field(e)}}(this)),this.form_field_jq.on("chosen:open.chosen",function(t){return function(e){t.container_mousedown(e)}}(this)),this.form_field_jq.on("chosen:close.chosen",function(t){return function(e){t.close_field(e)}}(this)),this.search_field.on("blur.chosen",function(t){return function(e){t.input_blur(e)}}(this)),this.search_field.on("keyup.chosen",function(t){return function(e){t.keyup_checker(e)}}(this)),this.search_field.on("keydown.chosen",function(t){return function(e){t.keydown_checker(e)}}(this)),this.search_field.on("focus.chosen",function(t){return function(e){t.input_focus(e)}}(this)),this.search_field.on("cut.chosen",function(t){return function(e){t.clipboard_event_checker(e)}}(this)),this.search_field.on("paste.chosen",function(t){return function(e){t.clipboard_event_checker(e)}}(this)),this.is_multiple?this.search_choices.on("click.chosen",function(t){return function(e){t.choices_click(e)}}(this)):this.container.on("click.chosen",function(t){t.preventDefault()})},n.prototype.destroy=function(){return t(this.container[0].ownerDocument).off("click.chosen",this.click_test_action),this.form_field_label.length>0&&this.form_field_label.off("click.chosen"),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},n.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field.disabled||this.form_field_jq.parents("fieldset").is(":disabled"),this.container.toggleClass("chosen-disabled",this.is_disabled),this.search_field[0].disabled=this.is_disabled,this.is_multiple||this.selected_item.off("focus.chosen",this.activate_field),this.is_disabled?this.close_field():this.is_multiple?void 0:this.selected_item.on("focus.chosen",this.activate_field)},n.prototype.container_mousedown=function(e){var s;if(!this.is_disabled)return!e||"mousedown"!==(s=e.type)&&"touchstart"!==s||this.results_showing||e.preventDefault(),null!=e&&t(e.target).hasClass("search-choice-close")?void 0:(this.active_field?this.is_multiple||!e||t(e.target)[0]!==this.selected_item[0]&&!t(e.target).parents("a.chosen-single").length||(e.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),t(this.container[0].ownerDocument).on("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},n.prototype.container_mouseup=function(t){if("ABBR"===t.target.nodeName&&!this.is_disabled)return this.results_reset(t)},n.prototype.search_results_mousewheel=function(t){var e;if(t.originalEvent&&(e=t.originalEvent.deltaY||-t.originalEvent.wheelDelta||t.originalEvent.detail),null!=e)return t.preventDefault(),"DOMMouseScroll"===t.type&&(e*=40),this.search_results.scrollTop(e+this.search_results.scrollTop())},n.prototype.blur_test=function(t){if(!this.active_field&&this.container.hasClass("chosen-container-active"))return this.close_field()},n.prototype.close_field=function(){return t(this.container[0].ownerDocument).off("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale(),this.search_field.blur()},n.prototype.activate_field=function(){if(!this.is_disabled)return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},n.prototype.test_active_click=function(e){var s;return(s=t(e.target).closest(".chosen-container")).length&&this.container[0]===s[0]?this.active_field=!0:this.close_field()},n.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=i.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},n.prototype.result_do_highlight=function(t){var e,s,i,n,r;if(t.length){if(this.result_clear_highlight(),this.result_highlight=t,this.result_highlight.addClass("highlighted"),i=parseInt(this.search_results.css("maxHeight"),10),r=this.search_results.scrollTop(),n=i+r,s=this.result_highlight.position().top+this.search_results.scrollTop(),(e=s+this.result_highlight.outerHeight())>=n)return this.search_results.scrollTop(e-i>0?e-i:0);if(s0)return this.form_field_label.on("click.chosen",this.label_click_handler)},n.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},n.prototype.search_results_mouseup=function(e){var s;if((s=t(e.target).hasClass("active-result")?t(e.target):t(e.target).parents(".active-result").first()).length)return this.result_highlight=s,this.result_select(e),this.search_field.focus()},n.prototype.search_results_mouseover=function(e){var s;if(s=t(e.target).hasClass("active-result")?t(e.target):t(e.target).parents(".active-result").first())return this.result_do_highlight(s)},n.prototype.search_results_mouseout=function(e){if(t(e.target).hasClass("active-result")||t(e.target).parents(".active-result").first())return this.result_clear_highlight()},n.prototype.choice_build=function(e){var s,i;return s=t(" ",{"class":"search-choice"}).html(""+this.choice_label(e)+" "),e.disabled?s.addClass("search-choice-disabled"):((i=t(" ",{"class":"search-choice-close","data-option-array-index":e.array_index})).on("click.chosen",function(t){return function(e){return t.choice_destroy_link_click(e)}}(this)),s.append(i)),this.search_container.before(s)},n.prototype.choice_destroy_link_click=function(e){if(e.preventDefault(),e.stopPropagation(),!this.is_disabled)return this.choice_destroy(t(e.target))},n.prototype.choice_destroy=function(t){if(this.result_deselect(t[0].getAttribute("data-option-array-index")))return this.active_field?this.search_field.focus():this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.get_search_field_value().length<1&&this.results_hide(),t.parents("li").first().remove(),this.search_field_scale()},n.prototype.results_reset=function(){if(this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.trigger_form_field_change(),this.active_field)return this.results_hide()},n.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},n.prototype.result_select=function(t){var e,s;if(this.result_highlight)return e=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?e.removeClass("active-result"):this.reset_single_select_options(),e.addClass("result-selected"),s=this.results_data[e[0].getAttribute("data-option-array-index")],s.selected=!0,this.form_field.options[s.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(s):this.single_set_selected_text(this.choice_label(s)),this.is_multiple&&(!this.hide_results_on_select||t.metaKey||t.ctrlKey)?t.metaKey||t.ctrlKey?this.winnow_results({skip_highlight:!0}):(this.search_field.val(""),this.winnow_results()):(this.results_hide(),this.show_search_field_default()),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.trigger_form_field_change({selected:this.form_field.options[s.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,t.preventDefault(),this.search_field_scale())},n.prototype.single_set_selected_text=function(t){return null==t&&(t=this.default_text),t===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").html(t)},n.prototype.result_deselect=function(t){var e;return e=this.results_data[t],!this.form_field.options[e.options_index].disabled&&(e.selected=!1,this.form_field.options[e.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.trigger_form_field_change({deselected:this.form_field.options[e.options_index].value}),this.search_field_scale(),!0)},n.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect)return this.selected_item.find("abbr").length||this.selected_item.find("span").first().after(' '),this.selected_item.addClass("chosen-single-with-deselect")},n.prototype.get_search_field_value=function(){return this.search_field.val()},n.prototype.get_search_text=function(){return t.trim(this.get_search_field_value())},n.prototype.escape_html=function(e){return t("
").text(e).html()},n.prototype.winnow_results_set_highlight=function(){var t,e;if(e=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),null!=(t=e.length?e.first():this.search_results.find(".active-result").first()))return this.result_do_highlight(t)},n.prototype.no_results=function(t){var e;return e=this.get_no_results_html(t),this.search_results.append(e),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},n.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},n.prototype.keydown_arrow=function(){var t;return this.results_showing&&this.result_highlight?(t=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(t):void 0:this.results_show()},n.prototype.keyup_arrow=function(){var t;return this.results_showing||this.is_multiple?this.result_highlight?(t=this.result_highlight.prevAll("li.active-result")).length?this.result_do_highlight(t.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight()):void 0:this.results_show()},n.prototype.keydown_backstroke=function(){var t;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(t=this.search_container.siblings("li.search-choice").last()).length&&!t.hasClass("search-choice-disabled")?(this.pending_backstroke=t,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0},n.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},n.prototype.search_field_scale=function(){var e,s,i,n,r,o,h;if(this.is_multiple){for(r={position:"absolute",left:"-1000px",top:"-1000px",display:"none",whiteSpace:"pre"},s=0,i=(o=["fontSize","fontStyle","fontWeight","fontFamily","lineHeight","textTransform","letterSpacing"]).length;s ").css(r)).text(this.get_search_field_value()),t("body").append(e),h=e.width()+25,e.remove(),this.container.is(":visible")&&(h=Math.min(this.container.outerWidth()-10,h)),this.search_field.width(h)}},n.prototype.trigger_form_field_change=function(t){return this.form_field_jq.trigger("input",t),this.form_field_jq.trigger("change",t)},n}()}).call(this);
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ar.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ar.js
deleted file mode 100644
index 62424099..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ar.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ar",[],function(){return{errorLoading:function(){return"لا يمكن تحميل النتائج"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="الرجاء حذف "+t+" عناصر";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="الرجاء إضافة "+t+" عناصر";return n},loadingMore:function(){return"جاري تحميل نتائج إضافية..."},maximumSelected:function(e){var t="تستطيع إختيار "+e.maximum+" بنود فقط";return t},noResults:function(){return"لم يتم العثور على أي نتائج"},searching:function(){return"جاري البحث…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/az.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/az.js
deleted file mode 100644
index 9c119a39..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/az.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/az",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return t+" simvol silin"},inputTooShort:function(e){var t=e.minimum-e.input.length;return t+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(e){return"Sadəcə "+e.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/bg.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/bg.js
deleted file mode 100644
index 72a3bd54..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/bg.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/bg",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Моля въведете с "+t+" по-малко символ";return t>1&&(n+="a"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Моля въведете още "+t+" символ";return t>1&&(n+="a"),n},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(e){var t="Можете да направите до "+e.maximum+" ";return e.maximum>1?t+="избора":t+="избор",t},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ca.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ca.js
deleted file mode 100644
index 9ef134fe..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ca.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Si us plau, elimina "+t+" car";return t==1?n+="àcter":n+="àcters",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Si us plau, introdueix "+t+" car";return t==1?n+="àcter":n+="àcters",n},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var t="Només es pot seleccionar "+e.maximum+" element";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/cs.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/cs.js
deleted file mode 100644
index 22a1f4ac..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/cs.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/cs",[],function(){function e(e,t){switch(e){case 2:return t?"dva":"dvě";case 3:return"tři";case 4:return"čtyři"}return""}return{errorLoading:function(){return"Výsledky nemohly být načteny."},inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím zadejte o jeden znak méně":n<=4?"Prosím zadejte o "+e(n,!0)+" znaky méně":"Prosím zadejte o "+n+" znaků méně"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím zadejte ještě jeden znak":n<=4?"Prosím zadejte ještě další "+e(n,!0)+" znaky":"Prosím zadejte ještě dalších "+n+" znaků"},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(t){var n=t.maximum;return n==1?"Můžete zvolit jen jednu položku":n<=4?"Můžete zvolit maximálně "+e(n,!1)+" položky":"Můžete zvolit maximálně "+n+" položek"},noResults:function(){return"Nenalezeny žádné položky"},searching:function(){return"Vyhledávání…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/da.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/da.js
deleted file mode 100644
index f0996927..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/da.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Angiv venligst "+t+" tegn mindre";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Angiv venligst "+t+" tegn mere";return n},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var t="Du kan kun vælge "+e.maximum+" emne";return e.maximum!=1&&(t+="r"),t},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/de.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/de.js
deleted file mode 100644
index da7e5cb4..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/de.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/de",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Bitte "+t+" Zeichen weniger eingeben"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Bitte "+t+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var t="Sie können nur "+e.maximum+" Eintr";return e.maximum===1?t+="ag":t+="äge",t+=" auswählen",t},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/en.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/en.js
deleted file mode 100644
index 1f414f30..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/en.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Please enter "+t+" or more characters";return n},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/es.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/es.js
deleted file mode 100644
index ca0d6cba..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/es.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"La carga falló"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor, elimine "+t+" car";return t==1?n+="ácter":n+="acteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Por favor, introduzca "+t+" car";return t==1?n+="ácter":n+="acteres",n},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var t="Sólo puede seleccionar "+e.maximum+" elemento";return e.maximum!=1&&(t+="s"),t},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/et.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/et.js
deleted file mode 100644
index 10d6597f..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/et.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" vähem",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Sisesta "+t+" täht";return t!=1&&(n+="e"),n+=" rohkem",n},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var t="Saad vaid "+e.maximum+" tulemus";return e.maximum==1?t+="e":t+="t",t+=" valida",t},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/eu.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/eu.js
deleted file mode 100644
index eaa83987..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/eu.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gutxiago",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return t==1?n+="karaktere bat":n+=t+" karaktere",n+=" gehiago",n},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return e.maximum===1?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/fa.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/fa.js
deleted file mode 100644
index b3668c42..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/fa.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="لطفاً "+t+" کاراکتر را حذف نمایید";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="لطفاً تعداد "+t+" کاراکتر یا بیشتر وارد نمایید";return n},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(e){var t="شما تنها میتوانید "+e.maximum+" آیتم را انتخاب نمایید";return t},noResults:function(){return"هیچ نتیجهای یافت نشد"},searching:function(){return"در حال جستجو..."}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/fi.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/fi.js
deleted file mode 100644
index c128bff6..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/fi.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Ole hyvä ja anna "+t+" merkkiä vähemmän"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Ole hyvä ja anna "+t+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(e){return"Voit valita ainoastaan "+e.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/fr.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/fr.js
deleted file mode 100644
index 7f6ebfb4..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/fr.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/fr",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Supprimez "+t+" caractère";return t!==1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Saisissez "+t+" caractère";return t!==1&&(n+="s"),n},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){var t="Vous pouvez seulement sélectionner "+e.maximum+" élément";return e.maximum!==1&&(t+="s"),t},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/gl.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/gl.js
deleted file mode 100644
index 2ea96bd7..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/gl.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/gl",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Elimine ";return t===1?n+="un carácter":n+=t+" caracteres",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Engada ";return t===1?n+="un carácter":n+=t+" caracteres",n},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){var t="Só pode ";return e.maximum===1?t+="un elemento":t+=e.maximum+" elementos",t},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/he.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/he.js
deleted file mode 100644
index 76f0810a..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/he.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/he",[],function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="נא למחוק ";return t===1?n+="תו אחד":n+=t+" תווים",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="נא להכניס ";return t===1?n+="תו אחד":n+=t+" תווים",n+=" או יותר",n},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(e){var t="באפשרותך לבחור עד ";return e.maximum===1?t+="פריט אחד":t+=e.maximum+" פריטים",t},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/hi.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/hi.js
deleted file mode 100644
index 681e8560..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/hi.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hi",[],function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" अक्षर को हटा दें";return t>1&&(n=t+" अक्षरों को हटा दें "),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="कृपया "+t+" या अधिक अक्षर दर्ज करें";return n},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(e){var t="आप केवल "+e.maximum+" आइटम का चयन कर सकते हैं";return t},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/hr.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/hr.js
deleted file mode 100644
index 54d17491..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/hr.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hr",[],function(){function e(e){var t=" "+e+" znak";return e%10<5&&e%10>0&&(e%100<5||e%100>19)?e%10>1&&(t+="a"):t+="ova",t}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Unesite "+e(n)},inputTooShort:function(t){var n=t.minimum-t.input.length;return"Unesite još "+e(n)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(e){return"Maksimalan broj odabranih stavki je "+e.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/hu.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/hu.js
deleted file mode 100644
index f89dc37b..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/hu.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/hu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Túl hosszú. "+t+" karakterrel több, mint kellene."},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Túl rövid. Még "+t+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/id.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/id.js
deleted file mode 100644
index 59154198..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/id.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/id",[],function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Hapuskan "+t+" huruf"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Masukkan "+t+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(e){return"Anda hanya dapat memilih "+e.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/is.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/is.js
deleted file mode 100644
index 844bbca0..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/is.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/is",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vinsamlegast styttið texta um "+t+" staf";return t<=1?n:n+"i"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vinsamlegast skrifið "+t+" staf";return t>1&&(n+="i"),n+=" í viðbót",n},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(e){return"Þú getur aðeins valið "+e.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/it.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/it.js
deleted file mode 100644
index 62784c6f..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/it.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Per favore cancella "+t+" caratter";return t!==1?n+="i":n+="e",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Per favore inserisci "+t+" o più caratteri";return n},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var t="Puoi selezionare solo "+e.maximum+" element";return e.maximum!==1?t+="i":t+="o",t},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ja.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ja.js
deleted file mode 100644
index ecc8b438..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ja.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ja",[],function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" 文字を削除してください";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="少なくとも "+t+" 文字を入力してください";return n},loadingMore:function(){return"読み込み中…"},maximumSelected:function(e){var t=e.maximum+" 件しか選択できません";return t},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ko.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ko.js
deleted file mode 100644
index 711043da..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ko.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="너무 깁니다. "+t+" 글자 지워주세요.";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="너무 짧습니다. "+t+" 글자 더 입력해주세요.";return n},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(e){var t="최대 "+e.maximum+"개까지만 선택 가능합니다.";return t},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/lt.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/lt.js
deleted file mode 100644
index b1d46422..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/lt.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lt",[],function(){function e(e,t,n,r){return e%100>9&&e%100<21||e%10===0?e%10>1?n:r:t}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Pašalinkite "+n+" simbol";return r+=e(n,"ių","ius","į"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Įrašykite dar "+n+" simbol";return r+=e(n,"ių","ius","į"),r},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(t){var n="Jūs galite pasirinkti tik "+t.maximum+" element";return n+=e(t.maximum,"ų","us","ą"),n},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/lv.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/lv.js
deleted file mode 100644
index 0d6da7f1..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/lv.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/lv",[],function(){function e(e,t,n,r){return e===11?t:e%10===1?n:r}return{inputTooLong:function(t){var n=t.input.length-t.maximum,r="Lūdzu ievadiet par "+n;return r+=" simbol"+e(n,"iem","u","iem"),r+" mazāk"},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Lūdzu ievadiet vēl "+n;return r+=" simbol"+e(n,"us","u","us"),r},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(t){var n="Jūs varat izvēlēties ne vairāk kā "+t.maximum;return n+=" element"+e(t.maximum,"us","u","us"),n},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/mk.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/mk.js
deleted file mode 100644
index 2efac652..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/mk.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/mk",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Ве молиме внесете "+e.maximum+" помалку карактер";return e.maximum!==1&&(n+="и"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Ве молиме внесете уште "+e.maximum+" карактер";return e.maximum!==1&&(n+="и"),n},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(e){var t="Можете да изберете само "+e.maximum+" ставк";return e.maximum===1?t+="а":t+="и",t},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ms.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ms.js
deleted file mode 100644
index 3f2ce70c..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ms.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Sila hapuskan "+t+" aksara"},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Sila masukkan "+t+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(e){return"Anda hanya boleh memilih "+e.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/nb.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/nb.js
deleted file mode 100644
index b1910340..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/nb.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nb",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum;return"Vennligst fjern "+t+" tegn"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vennligst skriv inn ";return t>1?n+=" flere tegn":n+=" tegn til",n},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/nl.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/nl.js
deleted file mode 100644
index d2f8736d..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/nl.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/nl",[],function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Gelieve "+t+" karakters te verwijderen";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Gelieve "+t+" of meer karakters in te voeren";return n},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var t=e.maximum==1?"kan":"kunnen",n="Er "+t+" maar "+e.maximum+" item";return e.maximum!=1&&(n+="s"),n+=" worden geselecteerd",n},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/pl.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/pl.js
deleted file mode 100644
index dd252090..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/pl.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pl",[],function(){var e=["znak","znaki","znaków"],t=["element","elementy","elementów"],n=function(t,n){if(t===1)return n[0];if(t>1&&t<=4)return n[1];if(t>=5)return n[2]};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(t){var r=t.input.length-t.maximum;return"Usuń "+r+" "+n(r,e)},inputTooShort:function(t){var r=t.minimum-t.input.length;return"Podaj przynajmniej "+r+" "+n(r,e)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(e){return"Możesz zaznaczyć tylko "+e.maximum+" "+n(e.maximum,t)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/pt-BR.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/pt-BR.js
deleted file mode 100644
index d77841ff..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/pt-BR.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt-BR",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Apague "+t+" caracter";return t!=1&&(n+="es"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Digite "+t+" ou mais caracteres";return n},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var t="Você só pode selecionar "+e.maximum+" ite";return e.maximum==1?t+="m":t+="ns",t},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/pt.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/pt.js
deleted file mode 100644
index a6570fae..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/pt.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Por favor apague "+t+" ";return n+=t!=1?"caracteres":"carácter",n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Introduza "+t+" ou mais caracteres";return n},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){var t="Apenas pode seleccionar "+e.maximum+" ";return t+=e.maximum!=1?"itens":"item",t},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ro.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ro.js
deleted file mode 100644
index b23cdd85..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ro.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ro",[],function(){return{errorLoading:function(){return"Rezultatele nu au putut fi incărcate."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să ștergeți"+t+" caracter";return t!==1&&(n+="e"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vă rugăm să introduceți "+t+"sau mai multe caractere";return n},loadingMore:function(){return"Se încarcă mai multe rezultate…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",e.maximum!==1&&(t+="e"),t},noResults:function(){return"Nu au fost găsite rezultate"},searching:function(){return"Căutare…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ru.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ru.js
deleted file mode 100644
index c95fdfa4..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/ru.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/ru",[],function(){function e(e,t,n,r){return e%10<5&&e%10>0&&e%100<5||e%100>20?e%10>1?n:t:r}return{errorLoading:function(){return"Невозможно загрузить результаты"},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Пожалуйста, введите на "+n+" символ";return r+=e(n,"","a","ов"),r+=" меньше",r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Пожалуйста, введите еще хотя бы "+n+" символ";return r+=e(n,"","a","ов"),r},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(t){var n="Вы можете выбрать не более "+t.maximum+" элемент";return n+=e(t.maximum,"","a","ов"),n},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/sk.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/sk.js
deleted file mode 100644
index e29c996e..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/sk.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sk",[],function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{inputTooLong:function(t){var n=t.input.length-t.maximum;return n==1?"Prosím, zadajte o jeden znak menej":n>=2&&n<=4?"Prosím, zadajte o "+e[n](!0)+" znaky menej":"Prosím, zadajte o "+n+" znakov menej"},inputTooShort:function(t){var n=t.minimum-t.input.length;return n==1?"Prosím, zadajte ešte jeden znak":n<=4?"Prosím, zadajte ešte ďalšie "+e[n](!0)+" znaky":"Prosím, zadajte ešte ďalších "+n+" znakov"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(t){return t.maximum==1?"Môžete zvoliť len jednu položku":t.maximum>=2&&t.maximum<=4?"Môžete zvoliť najviac "+e[t.maximum](!1)+" položky":"Môžete zvoliť najviac "+t.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/sr-Cyrl.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/sr-Cyrl.js
deleted file mode 100644
index c9d61f0a..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/sr-Cyrl.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr-Cyrl",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Преузимање није успело."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Обришите "+n+" симбол";return r+=e(n,"","а","а"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Укуцајте бар још "+n+" симбол";return r+=e(n,"","а","а"),r},loadingMore:function(){return"Преузимање још резултата…"},maximumSelected:function(t){var n="Можете изабрати само "+t.maximum+" ставк";return n+=e(t.maximum,"у","е","и"),n},noResults:function(){return"Ништа није пронађено"},searching:function(){return"Претрага…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/sr.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/sr.js
deleted file mode 100644
index 02d577ce..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/sr.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sr",[],function(){function e(e,t,n,r){return e%10==1&&e%100!=11?t:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?n:r}return{errorLoading:function(){return"Preuzimanje nije uspelo."},inputTooLong:function(t){var n=t.input.length-t.maximum,r="Obrišite "+n+" simbol";return r+=e(n,"","a","a"),r},inputTooShort:function(t){var n=t.minimum-t.input.length,r="Ukucajte bar još "+n+" simbol";return r+=e(n,"","a","a"),r},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(t){var n="Možete izabrati samo "+t.maximum+" stavk";return n+=e(t.maximum,"u","e","i"),n},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/sv.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/sv.js
deleted file mode 100644
index 33348747..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/sv.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vänligen sudda ut "+t+" tecken";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vänligen skriv in "+t+" eller fler tecken";return n},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(e){var t="Du kan max välja "+e.maximum+" element";return t},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/th.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/th.js
deleted file mode 100644
index 9e7c2fc8..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/th.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/th",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="โปรดลบออก "+t+" ตัวอักษร";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="โปรดพิมพ์เพิ่มอีก "+t+" ตัวอักษร";return n},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(e){var t="คุณสามารถเลือกได้ไม่เกิน "+e.maximum+" รายการ";return t},noResults:function(){return"ไม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/tr.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/tr.js
deleted file mode 100644
index 7ba93cb7..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/tr.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/tr",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n=t+" karakter daha girmelisiniz";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="En az "+t+" karakter daha girmelisiniz";return n},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(e){var t="Sadece "+e.maximum+" seçim yapabilirsiniz";return t},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/uk.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/uk.js
deleted file mode 100644
index 1f22d5fa..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/uk.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/uk",[],function(){function e(e,t,n,r){return e%100>10&&e%100<15?r:e%10===1?t:e%10>1&&e%10<5?n:r}return{errorLoading:function(){return"Неможливо завантажити результати"},inputTooLong:function(t){var n=t.input.length-t.maximum;return"Будь ласка, видаліть "+n+" "+e(t.maximum,"літеру","літери","літер")},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Будь ласка, введіть "+t+" або більше літер"},loadingMore:function(){return"Завантаження інших результатів…"},maximumSelected:function(t){return"Ви можете вибрати лише "+t.maximum+" "+e(t.maximum,"пункт","пункти","пунктів")},noResults:function(){return"Нічого не знайдено"},searching:function(){return"Пошук…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/vi.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/vi.js
deleted file mode 100644
index b9c0cd38..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/vi.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/vi",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vui lòng nhập ít hơn "+t+" ký tự";return t!=1&&(n+="s"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Vui lòng nhập nhiều hơn "+t+' ký tự"';return n},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(e){var t="Chỉ có thể chọn được "+e.maximum+" lựa chọn";return t},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/zh-CN.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/zh-CN.js
deleted file mode 100644
index 9ed3ca96..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/zh-CN.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(e){var t=e.input.length-e.maximum,n="请删除"+t+"个字符";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="请再输入至少"+t+"个字符";return n},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(e){var t="最多只能选择"+e.maximum+"个项目";return t},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/zh-TW.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/zh-TW.js
deleted file mode 100644
index ab6b49ae..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/i18n/zh-TW.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! Select2 4.0.2 | https://github.com/select2/select2/blob/master/LICENSE.md */
-
-(function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="請刪掉"+t+"個字元";return n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="請再輸入"+t+"個字元";return n},loadingMore:function(){return"載入中…"},maximumSelected:function(e){var t="你只能選擇最多"+e.maximum+"項";return t},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"}}}),{define:e.define,require:e.require}})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/search-filter-build.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/search-filter-build.js
deleted file mode 100644
index 110c0748..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/search-filter-build.js
+++ /dev/null
@@ -1,5914 +0,0 @@
-(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;oh&&(g=!0,h=Math.abs(h)),n!==!1&&(h=o(h,n)),h=h.toString(),-1!==h.indexOf(".")?(v=h.split("."),w=v[0],t&&(x=t+v[1])):w=h,r&&(w=e(w).match(/.{1,3}/g),w=e(w.join(e(r)))),g&&s&&(b+=s),u&&(b+=u),g&&p&&(b+=p),b+=w,b+=x,f&&(b+=f),d&&(b=d(b,m)),b):!1}function f(e,t,o,u,f,a,c,s,p,d,l,h){var g,v="";return l&&(h=l(h)),h&&"string"==typeof h?(s&&n(h,s)&&(h=h.replace(s,""),g=!0),u&&n(h,u)&&(h=h.replace(u,"")),p&&n(h,p)&&(h=h.replace(p,""),g=!0),f&&r(h,f)&&(h=h.slice(0,-1*f.length)),t&&(h=h.split(t).join("")),o&&(h=h.replace(o,".")),g&&(v+="-"),v+=h,v=v.replace(/[^0-9\.\-.]/g,""),""===v?!1:(v=Number(v),c&&(v=c(v)),i(v)?v:!1)):!1}function a(e){var n,r,i,o={};for(n=0;n=0&&8>i))throw new Error(r);o[r]=i}else if("encoder"===r||"decoder"===r||"edit"===r||"undo"===r){if("function"!=typeof i)throw new Error(r);o[r]=i}else{if("string"!=typeof i)throw new Error(r);o[r]=i}return t(o,"mark","thousand"),t(o,"prefix","negative"),t(o,"prefix","negativeBefore"),o}function c(e,n,r){var t,i=[];for(t=0;t 0) {
- addClass(element, className);
- setTimeout(function(){
- removeClass(element, className);
- }, duration);
- }
- }
-
- // Limits a value to 0 - 100
- function limit ( a ) {
- return Math.max(Math.min(a, 100), 0);
- }
-
- // Wraps a variable as an array, if it isn't one yet.
- // Note that an input array is returned by reference!
- function asArray ( a ) {
- return Array.isArray(a) ? a : [a];
- }
-
- // Counts decimals
- function countDecimals ( numStr ) {
- numStr = String(numStr);
- var pieces = numStr.split(".");
- return pieces.length > 1 ? pieces[1].length : 0;
- }
-
- // http://youmightnotneedjquery.com/#add_class
- function addClass ( el, className ) {
- if ( el.classList ) {
- el.classList.add(className);
- } else {
- el.className += ' ' + className;
- }
- }
-
- // http://youmightnotneedjquery.com/#remove_class
- function removeClass ( el, className ) {
- if ( el.classList ) {
- el.classList.remove(className);
- } else {
- el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
- }
- }
-
- // https://plainjs.com/javascript/attributes/adding-removing-and-testing-for-classes-9/
- function hasClass ( el, className ) {
- return el.classList ? el.classList.contains(className) : new RegExp('\\b' + className + '\\b').test(el.className);
- }
-
- // https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollY#Notes
- function getPageOffset ( doc ) {
-
- var supportPageOffset = window.pageXOffset !== undefined;
- var isCSS1Compat = ((doc.compatMode || "") === "CSS1Compat");
- var x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? doc.documentElement.scrollLeft : doc.body.scrollLeft;
- var y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? doc.documentElement.scrollTop : doc.body.scrollTop;
-
- return {
- x: x,
- y: y
- };
- }
-
- // we provide a function to compute constants instead
- // of accessing window.* as soon as the module needs it
- // so that we do not compute anything if not needed
- function getActions ( ) {
-
- // Determine the events to bind. IE11 implements pointerEvents without
- // a prefix, which breaks compatibility with the IE10 implementation.
- return window.navigator.pointerEnabled ? {
- start: 'pointerdown',
- move: 'pointermove',
- end: 'pointerup'
- } : window.navigator.msPointerEnabled ? {
- start: 'MSPointerDown',
- move: 'MSPointerMove',
- end: 'MSPointerUp'
- } : {
- start: 'mousedown touchstart',
- move: 'mousemove touchmove',
- end: 'mouseup touchend'
- };
- }
-
- // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md
- // Issue #785
- function getSupportsPassive ( ) {
-
- var supportsPassive = false;
-
- try {
-
- var opts = Object.defineProperty({}, 'passive', {
- get: function() {
- supportsPassive = true;
- }
- });
-
- window.addEventListener('test', null, opts);
-
- } catch (e) {}
-
- return supportsPassive;
- }
-
- function getSupportsTouchActionNone ( ) {
- return window.CSS && CSS.supports && CSS.supports('touch-action', 'none');
- }
-
-
-// Value calculation
-
- // Determine the size of a sub-range in relation to a full range.
- function subRangeRatio ( pa, pb ) {
- return (100 / (pb - pa));
- }
-
- // (percentage) How many percent is this value of this range?
- function fromPercentage ( range, value ) {
- return (value * 100) / ( range[1] - range[0] );
- }
-
- // (percentage) Where is this value on this range?
- function toPercentage ( range, value ) {
- return fromPercentage( range, range[0] < 0 ?
- value + Math.abs(range[0]) :
- value - range[0] );
- }
-
- // (value) How much is this percentage on this range?
- function isPercentage ( range, value ) {
- return ((value * ( range[1] - range[0] )) / 100) + range[0];
- }
-
-
-// Range conversion
-
- function getJ ( value, arr ) {
-
- var j = 1;
-
- while ( value >= arr[j] ){
- j += 1;
- }
-
- return j;
- }
-
- // (percentage) Input a value, find where, on a scale of 0-100, it applies.
- function toStepping ( xVal, xPct, value ) {
-
- if ( value >= xVal.slice(-1)[0] ){
- return 100;
- }
-
- var j = getJ( value, xVal );
- var va = xVal[j-1];
- var vb = xVal[j];
- var pa = xPct[j-1];
- var pb = xPct[j];
-
- return pa + (toPercentage([va, vb], value) / subRangeRatio (pa, pb));
- }
-
- // (value) Input a percentage, find where it is on the specified range.
- function fromStepping ( xVal, xPct, value ) {
-
- // There is no range group that fits 100
- if ( value >= 100 ){
- return xVal.slice(-1)[0];
- }
-
- var j = getJ( value, xPct );
- var va = xVal[j-1];
- var vb = xVal[j];
- var pa = xPct[j-1];
- var pb = xPct[j];
-
- return isPercentage([va, vb], (value - pa) * subRangeRatio (pa, pb));
- }
-
- // (percentage) Get the step that applies at a certain value.
- function getStep ( xPct, xSteps, snap, value ) {
-
- if ( value === 100 ) {
- return value;
- }
-
- var j = getJ( value, xPct );
- var a = xPct[j-1];
- var b = xPct[j];
-
- // If 'snap' is set, steps are used as fixed points on the slider.
- if ( snap ) {
-
- // Find the closest position, a or b.
- if ((value - a) > ((b-a)/2)){
- return b;
- }
-
- return a;
- }
-
- if ( !xSteps[j-1] ){
- return value;
- }
-
- return xPct[j-1] + closest(
- value - xPct[j-1],
- xSteps[j-1]
- );
- }
-
-
-// Entry parsing
-
- function handleEntryPoint ( index, value, that ) {
-
- var percentage;
-
- // Wrap numerical input in an array.
- if ( typeof value === "number" ) {
- value = [value];
- }
-
- // Reject any invalid input, by testing whether value is an array.
- if ( !Array.isArray(value) ){
- throw new Error("noUiSlider (" + VERSION + "): 'range' contains invalid value.");
- }
-
- // Covert min/max syntax to 0 and 100.
- if ( index === 'min' ) {
- percentage = 0;
- } else if ( index === 'max' ) {
- percentage = 100;
- } else {
- percentage = parseFloat( index );
- }
-
- // Check for correct input.
- if ( !isNumeric( percentage ) || !isNumeric( value[0] ) ) {
- throw new Error("noUiSlider (" + VERSION + "): 'range' value isn't numeric.");
- }
-
- // Store values.
- that.xPct.push( percentage );
- that.xVal.push( value[0] );
-
- // NaN will evaluate to false too, but to keep
- // logging clear, set step explicitly. Make sure
- // not to override the 'step' setting with false.
- if ( !percentage ) {
- if ( !isNaN( value[1] ) ) {
- that.xSteps[0] = value[1];
- }
- } else {
- that.xSteps.push( isNaN(value[1]) ? false : value[1] );
- }
-
- that.xHighestCompleteStep.push(0);
- }
-
- function handleStepPoint ( i, n, that ) {
-
- // Ignore 'false' stepping.
- if ( !n ) {
- return true;
- }
-
- // Factor to range ratio
- that.xSteps[i] = fromPercentage([that.xVal[i], that.xVal[i+1]], n) / subRangeRatio(that.xPct[i], that.xPct[i+1]);
-
- var totalSteps = (that.xVal[i+1] - that.xVal[i]) / that.xNumSteps[i];
- var highestStep = Math.ceil(Number(totalSteps.toFixed(3)) - 1);
- var step = that.xVal[i] + (that.xNumSteps[i] * highestStep);
-
- that.xHighestCompleteStep[i] = step;
- }
-
-
-// Interface
-
- function Spectrum ( entry, snap, singleStep ) {
-
- this.xPct = [];
- this.xVal = [];
- this.xSteps = [ singleStep || false ];
- this.xNumSteps = [ false ];
- this.xHighestCompleteStep = [];
-
- this.snap = snap;
-
- var index;
- var ordered = []; // [0, 'min'], [1, '50%'], [2, 'max']
-
- // Map the object keys to an array.
- for ( index in entry ) {
- if ( entry.hasOwnProperty(index) ) {
- ordered.push([entry[index], index]);
- }
- }
-
- // Sort all entries by value (numeric sort).
- if ( ordered.length && typeof ordered[0][0] === "object" ) {
- ordered.sort(function(a, b) { return a[0][0] - b[0][0]; });
- } else {
- ordered.sort(function(a, b) { return a[0] - b[0]; });
- }
-
-
- // Convert all entries to subranges.
- for ( index = 0; index < ordered.length; index++ ) {
- handleEntryPoint(ordered[index][1], ordered[index][0], this);
- }
-
- // Store the actual step values.
- // xSteps is sorted in the same order as xPct and xVal.
- this.xNumSteps = this.xSteps.slice(0);
-
- // Convert all numeric steps to the percentage of the subrange they represent.
- for ( index = 0; index < this.xNumSteps.length; index++ ) {
- handleStepPoint(index, this.xNumSteps[index], this);
- }
- }
-
- Spectrum.prototype.getMargin = function ( value ) {
-
- var step = this.xNumSteps[0];
-
- if ( step && ((value / step) % 1) !== 0 ) {
- throw new Error("noUiSlider (" + VERSION + "): 'limit', 'margin' and 'padding' must be divisible by step.");
- }
-
- return this.xPct.length === 2 ? fromPercentage(this.xVal, value) : false;
- };
-
- Spectrum.prototype.toStepping = function ( value ) {
-
- value = toStepping( this.xVal, this.xPct, value );
-
- return value;
- };
-
- Spectrum.prototype.fromStepping = function ( value ) {
-
- return fromStepping( this.xVal, this.xPct, value );
- };
-
- Spectrum.prototype.getStep = function ( value ) {
-
- value = getStep(this.xPct, this.xSteps, this.snap, value );
-
- return value;
- };
-
- Spectrum.prototype.getNearbySteps = function ( value ) {
-
- var j = getJ(value, this.xPct);
-
- return {
- stepBefore: { startValue: this.xVal[j-2], step: this.xNumSteps[j-2], highestStep: this.xHighestCompleteStep[j-2] },
- thisStep: { startValue: this.xVal[j-1], step: this.xNumSteps[j-1], highestStep: this.xHighestCompleteStep[j-1] },
- stepAfter: { startValue: this.xVal[j-0], step: this.xNumSteps[j-0], highestStep: this.xHighestCompleteStep[j-0] }
- };
- };
-
- Spectrum.prototype.countStepDecimals = function () {
- var stepDecimals = this.xNumSteps.map(countDecimals);
- return Math.max.apply(null, stepDecimals);
- };
-
- // Outside testing
- Spectrum.prototype.convert = function ( value ) {
- return this.getStep(this.toStepping(value));
- };
-
-/* Every input option is tested and parsed. This'll prevent
- endless validation in internal methods. These tests are
- structured with an item for every option available. An
- option can be marked as required by setting the 'r' flag.
- The testing function is provided with three arguments:
- - The provided value for the option;
- - A reference to the options object;
- - The name for the option;
-
- The testing function returns false when an error is detected,
- or true when everything is OK. It can also modify the option
- object, to make sure all values can be correctly looped elsewhere. */
-
- var defaultFormatter = { 'to': function( value ){
- return value !== undefined && value.toFixed(2);
- }, 'from': Number };
-
- function validateFormat ( entry ) {
-
- // Any object with a to and from method is supported.
- if ( isValidFormatter(entry) ) {
- return true;
- }
-
- throw new Error("noUiSlider (" + VERSION + "): 'format' requires 'to' and 'from' methods.");
- }
-
- function testStep ( parsed, entry ) {
-
- if ( !isNumeric( entry ) ) {
- throw new Error("noUiSlider (" + VERSION + "): 'step' is not numeric.");
- }
-
- // The step option can still be used to set stepping
- // for linear sliders. Overwritten if set in 'range'.
- parsed.singleStep = entry;
- }
-
- function testRange ( parsed, entry ) {
-
- // Filter incorrect input.
- if ( typeof entry !== 'object' || Array.isArray(entry) ) {
- throw new Error("noUiSlider (" + VERSION + "): 'range' is not an object.");
- }
-
- // Catch missing start or end.
- if ( entry.min === undefined || entry.max === undefined ) {
- throw new Error("noUiSlider (" + VERSION + "): Missing 'min' or 'max' in 'range'.");
- }
-
- // Catch equal start or end.
- if ( entry.min === entry.max ) {
- throw new Error("noUiSlider (" + VERSION + "): 'range' 'min' and 'max' cannot be equal.");
- }
-
- parsed.spectrum = new Spectrum(entry, parsed.snap, parsed.singleStep);
- }
-
- function testStart ( parsed, entry ) {
-
- entry = asArray(entry);
-
- // Validate input. Values aren't tested, as the public .val method
- // will always provide a valid location.
- if ( !Array.isArray( entry ) || !entry.length ) {
- throw new Error("noUiSlider (" + VERSION + "): 'start' option is incorrect.");
- }
-
- // Store the number of handles.
- parsed.handles = entry.length;
-
- // When the slider is initialized, the .val method will
- // be called with the start options.
- parsed.start = entry;
- }
-
- function testSnap ( parsed, entry ) {
-
- // Enforce 100% stepping within subranges.
- parsed.snap = entry;
-
- if ( typeof entry !== 'boolean' ){
- throw new Error("noUiSlider (" + VERSION + "): 'snap' option must be a boolean.");
- }
- }
-
- function testAnimate ( parsed, entry ) {
-
- // Enforce 100% stepping within subranges.
- parsed.animate = entry;
-
- if ( typeof entry !== 'boolean' ){
- throw new Error("noUiSlider (" + VERSION + "): 'animate' option must be a boolean.");
- }
- }
-
- function testAnimationDuration ( parsed, entry ) {
-
- parsed.animationDuration = entry;
-
- if ( typeof entry !== 'number' ){
- throw new Error("noUiSlider (" + VERSION + "): 'animationDuration' option must be a number.");
- }
- }
-
- function testConnect ( parsed, entry ) {
-
- var connect = [false];
- var i;
-
- // Map legacy options
- if ( entry === 'lower' ) {
- entry = [true, false];
- }
-
- else if ( entry === 'upper' ) {
- entry = [false, true];
- }
-
- // Handle boolean options
- if ( entry === true || entry === false ) {
-
- for ( i = 1; i < parsed.handles; i++ ) {
- connect.push(entry);
- }
-
- connect.push(false);
- }
-
- // Reject invalid input
- else if ( !Array.isArray( entry ) || !entry.length || entry.length !== parsed.handles + 1 ) {
- throw new Error("noUiSlider (" + VERSION + "): 'connect' option doesn't match handle count.");
- }
-
- else {
- connect = entry;
- }
-
- parsed.connect = connect;
- }
-
- function testOrientation ( parsed, entry ) {
-
- // Set orientation to an a numerical value for easy
- // array selection.
- switch ( entry ){
- case 'horizontal':
- parsed.ort = 0;
- break;
- case 'vertical':
- parsed.ort = 1;
- break;
- default:
- throw new Error("noUiSlider (" + VERSION + "): 'orientation' option is invalid.");
- }
- }
-
- function testMargin ( parsed, entry ) {
-
- if ( !isNumeric(entry) ){
- throw new Error("noUiSlider (" + VERSION + "): 'margin' option must be numeric.");
- }
-
- // Issue #582
- if ( entry === 0 ) {
- return;
- }
-
- parsed.margin = parsed.spectrum.getMargin(entry);
-
- if ( !parsed.margin ) {
- throw new Error("noUiSlider (" + VERSION + "): 'margin' option is only supported on linear sliders.");
- }
- }
-
- function testLimit ( parsed, entry ) {
-
- if ( !isNumeric(entry) ){
- throw new Error("noUiSlider (" + VERSION + "): 'limit' option must be numeric.");
- }
-
- parsed.limit = parsed.spectrum.getMargin(entry);
-
- if ( !parsed.limit || parsed.handles < 2 ) {
- throw new Error("noUiSlider (" + VERSION + "): 'limit' option is only supported on linear sliders with 2 or more handles.");
- }
- }
-
- function testPadding ( parsed, entry ) {
-
- if ( !isNumeric(entry) && !Array.isArray(entry) ){
- throw new Error("noUiSlider (" + VERSION + "): 'padding' option must be numeric or array of exactly 2 numbers.");
- }
-
- if ( Array.isArray(entry) && !(entry.length === 2 || isNumeric(entry[0]) || isNumeric(entry[1])) ) {
- throw new Error("noUiSlider (" + VERSION + "): 'padding' option must be numeric or array of exactly 2 numbers.");
- }
-
- if ( entry === 0 ) {
- return;
- }
-
- if ( !Array.isArray(entry) ) {
- entry = [entry, entry];
- }
-
- // 'getMargin' returns false for invalid values.
- parsed.padding = [parsed.spectrum.getMargin(entry[0]), parsed.spectrum.getMargin(entry[1])];
-
- if ( parsed.padding[0] === false || parsed.padding[1] === false ) {
- throw new Error("noUiSlider (" + VERSION + "): 'padding' option is only supported on linear sliders.");
- }
-
- if ( parsed.padding[0] < 0 || parsed.padding[1] < 0 ) {
- throw new Error("noUiSlider (" + VERSION + "): 'padding' option must be a positive number(s).");
- }
-
- if ( parsed.padding[0] + parsed.padding[1] >= 100 ) {
- throw new Error("noUiSlider (" + VERSION + "): 'padding' option must not exceed 100% of the range.");
- }
- }
-
- function testDirection ( parsed, entry ) {
-
- // Set direction as a numerical value for easy parsing.
- // Invert connection for RTL sliders, so that the proper
- // handles get the connect/background classes.
- switch ( entry ) {
- case 'ltr':
- parsed.dir = 0;
- break;
- case 'rtl':
- parsed.dir = 1;
- break;
- default:
- throw new Error("noUiSlider (" + VERSION + "): 'direction' option was not recognized.");
- }
- }
-
- function testBehaviour ( parsed, entry ) {
-
- // Make sure the input is a string.
- if ( typeof entry !== 'string' ) {
- throw new Error("noUiSlider (" + VERSION + "): 'behaviour' must be a string containing options.");
- }
-
- // Check if the string contains any keywords.
- // None are required.
- var tap = entry.indexOf('tap') >= 0;
- var drag = entry.indexOf('drag') >= 0;
- var fixed = entry.indexOf('fixed') >= 0;
- var snap = entry.indexOf('snap') >= 0;
- var hover = entry.indexOf('hover') >= 0;
-
- if ( fixed ) {
-
- if ( parsed.handles !== 2 ) {
- throw new Error("noUiSlider (" + VERSION + "): 'fixed' behaviour must be used with 2 handles");
- }
-
- // Use margin to enforce fixed state
- testMargin(parsed, parsed.start[1] - parsed.start[0]);
- }
-
- parsed.events = {
- tap: tap || snap,
- drag: drag,
- fixed: fixed,
- snap: snap,
- hover: hover
- };
- }
-
- function testTooltips ( parsed, entry ) {
-
- if ( entry === false ) {
- return;
- }
-
- else if ( entry === true ) {
-
- parsed.tooltips = [];
-
- for ( var i = 0; i < parsed.handles; i++ ) {
- parsed.tooltips.push(true);
- }
- }
-
- else {
-
- parsed.tooltips = asArray(entry);
-
- if ( parsed.tooltips.length !== parsed.handles ) {
- throw new Error("noUiSlider (" + VERSION + "): must pass a formatter for all handles.");
- }
-
- parsed.tooltips.forEach(function(formatter){
- if ( typeof formatter !== 'boolean' && (typeof formatter !== 'object' || typeof formatter.to !== 'function') ) {
- throw new Error("noUiSlider (" + VERSION + "): 'tooltips' must be passed a formatter or 'false'.");
- }
- });
- }
- }
-
- function testAriaFormat ( parsed, entry ) {
- parsed.ariaFormat = entry;
- validateFormat(entry);
- }
-
- function testFormat ( parsed, entry ) {
- parsed.format = entry;
- validateFormat(entry);
- }
-
- function testCssPrefix ( parsed, entry ) {
-
- if ( typeof entry !== 'string' && entry !== false ) {
- throw new Error("noUiSlider (" + VERSION + "): 'cssPrefix' must be a string or `false`.");
- }
-
- parsed.cssPrefix = entry;
- }
-
- function testCssClasses ( parsed, entry ) {
-
- if ( typeof entry !== 'object' ) {
- throw new Error("noUiSlider (" + VERSION + "): 'cssClasses' must be an object.");
- }
-
- if ( typeof parsed.cssPrefix === 'string' ) {
- parsed.cssClasses = {};
-
- for ( var key in entry ) {
- if ( !entry.hasOwnProperty(key) ) { continue; }
-
- parsed.cssClasses[key] = parsed.cssPrefix + entry[key];
- }
- } else {
- parsed.cssClasses = entry;
- }
- }
-
- // Test all developer settings and parse to assumption-safe values.
- function testOptions ( options ) {
-
- // To prove a fix for #537, freeze options here.
- // If the object is modified, an error will be thrown.
- // Object.freeze(options);
-
- var parsed = {
- margin: 0,
- limit: 0,
- padding: 0,
- animate: true,
- animationDuration: 300,
- ariaFormat: defaultFormatter,
- format: defaultFormatter
- };
-
- // Tests are executed in the order they are presented here.
- var tests = {
- 'step': { r: false, t: testStep },
- 'start': { r: true, t: testStart },
- 'connect': { r: true, t: testConnect },
- 'direction': { r: true, t: testDirection },
- 'snap': { r: false, t: testSnap },
- 'animate': { r: false, t: testAnimate },
- 'animationDuration': { r: false, t: testAnimationDuration },
- 'range': { r: true, t: testRange },
- 'orientation': { r: false, t: testOrientation },
- 'margin': { r: false, t: testMargin },
- 'limit': { r: false, t: testLimit },
- 'padding': { r: false, t: testPadding },
- 'behaviour': { r: true, t: testBehaviour },
- 'ariaFormat': { r: false, t: testAriaFormat },
- 'format': { r: false, t: testFormat },
- 'tooltips': { r: false, t: testTooltips },
- 'cssPrefix': { r: true, t: testCssPrefix },
- 'cssClasses': { r: true, t: testCssClasses }
- };
-
- var defaults = {
- 'connect': false,
- 'direction': 'ltr',
- 'behaviour': 'tap',
- 'orientation': 'horizontal',
- 'cssPrefix' : 'noUi-',
- 'cssClasses': {
- target: 'target',
- base: 'base',
- origin: 'origin',
- handle: 'handle',
- handleLower: 'handle-lower',
- handleUpper: 'handle-upper',
- horizontal: 'horizontal',
- vertical: 'vertical',
- background: 'background',
- connect: 'connect',
- connects: 'connects',
- ltr: 'ltr',
- rtl: 'rtl',
- draggable: 'draggable',
- drag: 'state-drag',
- tap: 'state-tap',
- active: 'active',
- tooltip: 'tooltip',
- pips: 'pips',
- pipsHorizontal: 'pips-horizontal',
- pipsVertical: 'pips-vertical',
- marker: 'marker',
- markerHorizontal: 'marker-horizontal',
- markerVertical: 'marker-vertical',
- markerNormal: 'marker-normal',
- markerLarge: 'marker-large',
- markerSub: 'marker-sub',
- value: 'value',
- valueHorizontal: 'value-horizontal',
- valueVertical: 'value-vertical',
- valueNormal: 'value-normal',
- valueLarge: 'value-large',
- valueSub: 'value-sub'
- }
- };
-
- // AriaFormat defaults to regular format, if any.
- if ( options.format && !options.ariaFormat ) {
- options.ariaFormat = options.format;
- }
-
- // Run all options through a testing mechanism to ensure correct
- // input. It should be noted that options might get modified to
- // be handled properly. E.g. wrapping integers in arrays.
- Object.keys(tests).forEach(function( name ){
-
- // If the option isn't set, but it is required, throw an error.
- if ( !isSet(options[name]) && defaults[name] === undefined ) {
-
- if ( tests[name].r ) {
- throw new Error("noUiSlider (" + VERSION + "): '" + name + "' is required.");
- }
-
- return true;
- }
-
- tests[name].t( parsed, !isSet(options[name]) ? defaults[name] : options[name] );
- });
-
- // Forward pips options
- parsed.pips = options.pips;
-
- // All recent browsers accept unprefixed transform.
- // We need -ms- for IE9 and -webkit- for older Android;
- // Assume use of -webkit- if unprefixed and -ms- are not supported.
- // https://caniuse.com/#feat=transforms2d
- var d = document.createElement("div");
- var msPrefix = d.style.msTransform !== undefined;
- var noPrefix = d.style.transform !== undefined;
-
- parsed.transformRule = noPrefix ? 'transform' : (msPrefix ? 'msTransform' : 'webkitTransform');
-
- // Pips don't move, so we can place them using left/top.
- var styles = [['left', 'top'], ['right', 'bottom']];
-
- parsed.style = styles[parsed.dir][parsed.ort];
-
- return parsed;
- }
-
-
-function scope ( target, options, originalOptions ){
-
- var actions = getActions();
- var supportsTouchActionNone = getSupportsTouchActionNone();
- var supportsPassive = supportsTouchActionNone && getSupportsPassive();
-
- // All variables local to 'scope' are prefixed with 'scope_'
- var scope_Target = target;
- var scope_Locations = [];
- var scope_Base;
- var scope_Handles;
- var scope_HandleNumbers = [];
- var scope_ActiveHandlesCount = 0;
- var scope_Connects;
- var scope_Spectrum = options.spectrum;
- var scope_Values = [];
- var scope_Events = {};
- var scope_Self;
- var scope_Pips;
- var scope_Document = target.ownerDocument;
- var scope_DocumentElement = scope_Document.documentElement;
- var scope_Body = scope_Document.body;
-
-
- // For horizontal sliders in standard ltr documents,
- // make .noUi-origin overflow to the left so the document doesn't scroll.
- var scope_DirOffset = (scope_Document.dir === 'rtl') || (options.ort === 1) ? 0 : 100;
-
-/*! In this file: Construction of DOM elements; */
-
- // Creates a node, adds it to target, returns the new node.
- function addNodeTo ( addTarget, className ) {
-
- var div = scope_Document.createElement('div');
-
- if ( className ) {
- addClass(div, className);
- }
-
- addTarget.appendChild(div);
-
- return div;
- }
-
- // Append a origin to the base
- function addOrigin ( base, handleNumber ) {
-
- var origin = addNodeTo(base, options.cssClasses.origin);
- var handle = addNodeTo(origin, options.cssClasses.handle);
-
- handle.setAttribute('data-handle', handleNumber);
-
- // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex
- // 0 = focusable and reachable
- handle.setAttribute('tabindex', '0');
- handle.setAttribute('role', 'slider');
- handle.setAttribute('aria-orientation', options.ort ? 'vertical' : 'horizontal');
-
- if ( handleNumber === 0 ) {
- addClass(handle, options.cssClasses.handleLower);
- }
-
- else if ( handleNumber === options.handles - 1 ) {
- addClass(handle, options.cssClasses.handleUpper);
- }
-
- return origin;
- }
-
- // Insert nodes for connect elements
- function addConnect ( base, add ) {
-
- if ( !add ) {
- return false;
- }
-
- return addNodeTo(base, options.cssClasses.connect);
- }
-
- // Add handles to the slider base.
- function addElements ( connectOptions, base ) {
-
- var connectBase = addNodeTo(base, options.cssClasses.connects);
-
- scope_Handles = [];
- scope_Connects = [];
-
- scope_Connects.push(addConnect(connectBase, connectOptions[0]));
-
- // [::::O====O====O====]
- // connectOptions = [0, 1, 1, 1]
-
- for ( var i = 0; i < options.handles; i++ ) {
- // Keep a list of all added handles.
- scope_Handles.push(addOrigin(base, i));
- scope_HandleNumbers[i] = i;
- scope_Connects.push(addConnect(connectBase, connectOptions[i + 1]));
- }
- }
-
- // Initialize a single slider.
- function addSlider ( addTarget ) {
-
- // Apply classes and data to the target.
- addClass(addTarget, options.cssClasses.target);
-
- if ( options.dir === 0 ) {
- addClass(addTarget, options.cssClasses.ltr);
- } else {
- addClass(addTarget, options.cssClasses.rtl);
- }
-
- if ( options.ort === 0 ) {
- addClass(addTarget, options.cssClasses.horizontal);
- } else {
- addClass(addTarget, options.cssClasses.vertical);
- }
-
- scope_Base = addNodeTo(addTarget, options.cssClasses.base);
- }
-
-
- function addTooltip ( handle, handleNumber ) {
-
- if ( !options.tooltips[handleNumber] ) {
- return false;
- }
-
- return addNodeTo(handle.firstChild, options.cssClasses.tooltip);
- }
-
- // The tooltips option is a shorthand for using the 'update' event.
- function tooltips ( ) {
-
- // Tooltips are added with options.tooltips in original order.
- var tips = scope_Handles.map(addTooltip);
-
- bindEvent('update', function(values, handleNumber, unencoded) {
-
- if ( !tips[handleNumber] ) {
- return;
- }
-
- var formattedValue = values[handleNumber];
-
- if ( options.tooltips[handleNumber] !== true ) {
- formattedValue = options.tooltips[handleNumber].to(unencoded[handleNumber]);
- }
-
- tips[handleNumber].innerHTML = formattedValue;
- });
- }
-
-
- function aria ( ) {
-
- bindEvent('update', function ( values, handleNumber, unencoded, tap, positions ) {
-
- // Update Aria Values for all handles, as a change in one changes min and max values for the next.
- scope_HandleNumbers.forEach(function( index ){
-
- var handle = scope_Handles[index];
-
- var min = checkHandlePosition(scope_Locations, index, 0, true, true, true);
- var max = checkHandlePosition(scope_Locations, index, 100, true, true, true);
-
- var now = positions[index];
- var text = options.ariaFormat.to(unencoded[index]);
-
- handle.children[0].setAttribute('aria-valuemin', min.toFixed(1));
- handle.children[0].setAttribute('aria-valuemax', max.toFixed(1));
- handle.children[0].setAttribute('aria-valuenow', now.toFixed(1));
- handle.children[0].setAttribute('aria-valuetext', text);
- });
- });
- }
-
-
- function getGroup ( mode, values, stepped ) {
-
- // Use the range.
- if ( mode === 'range' || mode === 'steps' ) {
- return scope_Spectrum.xVal;
- }
-
- if ( mode === 'count' ) {
-
- if ( values < 2 ) {
- throw new Error("noUiSlider (" + VERSION + "): 'values' (>= 2) required for mode 'count'.");
- }
-
- // Divide 0 - 100 in 'count' parts.
- var interval = values - 1;
- var spread = ( 100 / interval );
-
- values = [];
-
- // List these parts and have them handled as 'positions'.
- while ( interval-- ) {
- values[ interval ] = ( interval * spread );
- }
-
- values.push(100);
-
- mode = 'positions';
- }
-
- if ( mode === 'positions' ) {
-
- // Map all percentages to on-range values.
- return values.map(function( value ){
- return scope_Spectrum.fromStepping( stepped ? scope_Spectrum.getStep( value ) : value );
- });
- }
-
- if ( mode === 'values' ) {
-
- // If the value must be stepped, it needs to be converted to a percentage first.
- if ( stepped ) {
-
- return values.map(function( value ){
-
- // Convert to percentage, apply step, return to value.
- return scope_Spectrum.fromStepping( scope_Spectrum.getStep( scope_Spectrum.toStepping( value ) ) );
- });
-
- }
-
- // Otherwise, we can simply use the values.
- return values;
- }
- }
-
- function generateSpread ( density, mode, group ) {
-
- function safeIncrement(value, increment) {
- // Avoid floating point variance by dropping the smallest decimal places.
- return (value + increment).toFixed(7) / 1;
- }
-
- var indexes = {};
- var firstInRange = scope_Spectrum.xVal[0];
- var lastInRange = scope_Spectrum.xVal[scope_Spectrum.xVal.length-1];
- var ignoreFirst = false;
- var ignoreLast = false;
- var prevPct = 0;
-
- // Create a copy of the group, sort it and filter away all duplicates.
- group = unique(group.slice().sort(function(a, b){ return a - b; }));
-
- // Make sure the range starts with the first element.
- if ( group[0] !== firstInRange ) {
- group.unshift(firstInRange);
- ignoreFirst = true;
- }
-
- // Likewise for the last one.
- if ( group[group.length - 1] !== lastInRange ) {
- group.push(lastInRange);
- ignoreLast = true;
- }
-
- group.forEach(function ( current, index ) {
-
- // Get the current step and the lower + upper positions.
- var step;
- var i;
- var q;
- var low = current;
- var high = group[index+1];
- var newPct;
- var pctDifference;
- var pctPos;
- var type;
- var steps;
- var realSteps;
- var stepsize;
-
- // When using 'steps' mode, use the provided steps.
- // Otherwise, we'll step on to the next subrange.
- if ( mode === 'steps' ) {
- step = scope_Spectrum.xNumSteps[ index ];
- }
-
- // Default to a 'full' step.
- if ( !step ) {
- step = high-low;
- }
-
- // Low can be 0, so test for false. If high is undefined,
- // we are at the last subrange. Index 0 is already handled.
- if ( low === false || high === undefined ) {
- return;
- }
-
- // Make sure step isn't 0, which would cause an infinite loop (#654)
- step = Math.max(step, 0.0000001);
-
- // Find all steps in the subrange.
- for ( i = low; i <= high; i = safeIncrement(i, step) ) {
-
- // Get the percentage value for the current step,
- // calculate the size for the subrange.
- newPct = scope_Spectrum.toStepping( i );
- pctDifference = newPct - prevPct;
-
- steps = pctDifference / density;
- realSteps = Math.round(steps);
-
- // This ratio represents the amount of percentage-space a point indicates.
- // For a density 1 the points/percentage = 1. For density 2, that percentage needs to be re-devided.
- // Round the percentage offset to an even number, then divide by two
- // to spread the offset on both sides of the range.
- stepsize = pctDifference/realSteps;
-
- // Divide all points evenly, adding the correct number to this subrange.
- // Run up to <= so that 100% gets a point, event if ignoreLast is set.
- for ( q = 1; q <= realSteps; q += 1 ) {
-
- // The ratio between the rounded value and the actual size might be ~1% off.
- // Correct the percentage offset by the number of points
- // per subrange. density = 1 will result in 100 points on the
- // full range, 2 for 50, 4 for 25, etc.
- pctPos = prevPct + ( q * stepsize );
- indexes[pctPos.toFixed(5)] = ['x', 0];
- }
-
- // Determine the point type.
- type = (group.indexOf(i) > -1) ? 1 : ( mode === 'steps' ? 2 : 0 );
-
- // Enforce the 'ignoreFirst' option by overwriting the type for 0.
- if ( !index && ignoreFirst ) {
- type = 0;
- }
-
- if ( !(i === high && ignoreLast)) {
- // Mark the 'type' of this point. 0 = plain, 1 = real value, 2 = step value.
- indexes[newPct.toFixed(5)] = [i, type];
- }
-
- // Update the percentage count.
- prevPct = newPct;
- }
- });
-
- return indexes;
- }
-
- function addMarking ( spread, filterFunc, formatter ) {
-
- var element = scope_Document.createElement('div');
-
- var valueSizeClasses = [
- options.cssClasses.valueNormal,
- options.cssClasses.valueLarge,
- options.cssClasses.valueSub
- ];
- var markerSizeClasses = [
- options.cssClasses.markerNormal,
- options.cssClasses.markerLarge,
- options.cssClasses.markerSub
- ];
- var valueOrientationClasses = [
- options.cssClasses.valueHorizontal,
- options.cssClasses.valueVertical
- ];
- var markerOrientationClasses = [
- options.cssClasses.markerHorizontal,
- options.cssClasses.markerVertical
- ];
-
- addClass(element, options.cssClasses.pips);
- addClass(element, options.ort === 0 ? options.cssClasses.pipsHorizontal : options.cssClasses.pipsVertical);
-
- function getClasses( type, source ){
- var a = source === options.cssClasses.value;
- var orientationClasses = a ? valueOrientationClasses : markerOrientationClasses;
- var sizeClasses = a ? valueSizeClasses : markerSizeClasses;
-
- return source + ' ' + orientationClasses[options.ort] + ' ' + sizeClasses[type];
- }
-
- function addSpread ( offset, values ){
-
- // Apply the filter function, if it is set.
- values[1] = (values[1] && filterFunc) ? filterFunc(values[0], values[1]) : values[1];
-
- // Add a marker for every point
- var node = addNodeTo(element, false);
- node.className = getClasses(values[1], options.cssClasses.marker);
- node.style[options.style] = offset + '%';
-
- // Values are only appended for points marked '1' or '2'.
- if ( values[1] ) {
- node = addNodeTo(element, false);
- node.className = getClasses(values[1], options.cssClasses.value);
- node.setAttribute('data-value', values[0]);
- node.style[options.style] = offset + '%';
- node.innerText = formatter.to(values[0]);
- }
- }
-
- // Append all points.
- Object.keys(spread).forEach(function(a){
- addSpread(a, spread[a]);
- });
-
- return element;
- }
-
- function removePips ( ) {
- if ( scope_Pips ) {
- removeElement(scope_Pips);
- scope_Pips = null;
- }
- }
-
- function pips ( grid ) {
-
- // Fix #669
- removePips();
-
- var mode = grid.mode;
- var density = grid.density || 1;
- var filter = grid.filter || false;
- var values = grid.values || false;
- var stepped = grid.stepped || false;
- var group = getGroup( mode, values, stepped );
- var spread = generateSpread( density, mode, group );
- var format = grid.format || {
- to: Math.round
- };
-
- scope_Pips = scope_Target.appendChild(addMarking(
- spread,
- filter,
- format
- ));
-
- return scope_Pips;
- }
-
-/*! In this file: Browser events (not slider events like slide, change); */
-
- // Shorthand for base dimensions.
- function baseSize ( ) {
- var rect = scope_Base.getBoundingClientRect();
- var alt = 'offset' + ['Width', 'Height'][options.ort];
- return options.ort === 0 ? (rect.width||scope_Base[alt]) : (rect.height||scope_Base[alt]);
- }
-
- // Handler for attaching events trough a proxy.
- function attachEvent ( events, element, callback, data ) {
-
- // This function can be used to 'filter' events to the slider.
- // element is a node, not a nodeList
-
- var method = function ( e ){
-
- e = fixEvent(e, data.pageOffset, data.target || element);
-
- // fixEvent returns false if this event has a different target
- // when handling (multi-) touch events;
- if ( !e ) {
- return false;
- }
-
- // doNotReject is passed by all end events to make sure released touches
- // are not rejected, leaving the slider "stuck" to the cursor;
- if ( scope_Target.hasAttribute('disabled') && !data.doNotReject ) {
- return false;
- }
-
- // Stop if an active 'tap' transition is taking place.
- if ( hasClass(scope_Target, options.cssClasses.tap) && !data.doNotReject ) {
- return false;
- }
-
- // Ignore right or middle clicks on start #454
- if ( events === actions.start && e.buttons !== undefined && e.buttons > 1 ) {
- return false;
- }
-
- // Ignore right or middle clicks on start #454
- if ( data.hover && e.buttons ) {
- return false;
- }
-
- // 'supportsPassive' is only true if a browser also supports touch-action: none in CSS.
- // iOS safari does not, so it doesn't get to benefit from passive scrolling. iOS does support
- // touch-action: manipulation, but that allows panning, which breaks
- // sliders after zooming/on non-responsive pages.
- // See: https://bugs.webkit.org/show_bug.cgi?id=133112
- if ( !supportsPassive ) {
- e.preventDefault();
- }
-
- e.calcPoint = e.points[ options.ort ];
-
- // Call the event handler with the event [ and additional data ].
- callback ( e, data );
- };
-
- var methods = [];
-
- // Bind a closure on the target for every event type.
- events.split(' ').forEach(function( eventName ){
- element.addEventListener(eventName, method, supportsPassive ? { passive: true } : false);
- methods.push([eventName, method]);
- });
-
- return methods;
- }
-
- // Provide a clean event with standardized offset values.
- function fixEvent ( e, pageOffset, eventTarget ) {
-
- // Filter the event to register the type, which can be
- // touch, mouse or pointer. Offset changes need to be
- // made on an event specific basis.
- var touch = e.type.indexOf('touch') === 0;
- var mouse = e.type.indexOf('mouse') === 0;
- var pointer = e.type.indexOf('pointer') === 0;
-
- var x;
- var y;
-
- // IE10 implemented pointer events with a prefix;
- if ( e.type.indexOf('MSPointer') === 0 ) {
- pointer = true;
- }
-
- // In the event that multitouch is activated, the only thing one handle should be concerned
- // about is the touches that originated on top of it.
- if ( touch ) {
-
- // Returns true if a touch originated on the target.
- var isTouchOnTarget = function (checkTouch) {
- return checkTouch.target === eventTarget || eventTarget.contains(checkTouch.target);
- };
-
- // In the case of touchstart events, we need to make sure there is still no more than one
- // touch on the target so we look amongst all touches.
- if (e.type === 'touchstart') {
-
- var targetTouches = Array.prototype.filter.call(e.touches, isTouchOnTarget);
-
- // Do not support more than one touch per handle.
- if ( targetTouches.length > 1 ) {
- return false;
- }
-
- x = targetTouches[0].pageX;
- y = targetTouches[0].pageY;
-
- } else {
-
- // In the other cases, find on changedTouches is enough.
- var targetTouch = Array.prototype.find.call(e.changedTouches, isTouchOnTarget);
-
- // Cancel if the target touch has not moved.
- if ( !targetTouch ) {
- return false;
- }
-
- x = targetTouch.pageX;
- y = targetTouch.pageY;
- }
- }
-
- pageOffset = pageOffset || getPageOffset(scope_Document);
-
- if ( mouse || pointer ) {
- x = e.clientX + pageOffset.x;
- y = e.clientY + pageOffset.y;
- }
-
- e.pageOffset = pageOffset;
- e.points = [x, y];
- e.cursor = mouse || pointer; // Fix #435
-
- return e;
- }
-
- // Translate a coordinate in the document to a percentage on the slider
- function calcPointToPercentage ( calcPoint ) {
- var location = calcPoint - offset(scope_Base, options.ort);
- var proposal = ( location * 100 ) / baseSize();
-
- // Clamp proposal between 0% and 100%
- // Out-of-bound coordinates may occur when .noUi-base pseudo-elements
- // are used (e.g. contained handles feature)
- proposal = limit(proposal);
-
- return options.dir ? 100 - proposal : proposal;
- }
-
- // Find handle closest to a certain percentage on the slider
- function getClosestHandle ( proposal ) {
-
- var closest = 100;
- var handleNumber = false;
-
- scope_Handles.forEach(function(handle, index){
-
- // Disabled handles are ignored
- if ( handle.hasAttribute('disabled') ) {
- return;
- }
-
- var pos = Math.abs(scope_Locations[index] - proposal);
-
- if ( pos < closest || (pos === 100 && closest === 100) ) {
- handleNumber = index;
- closest = pos;
- }
- });
-
- return handleNumber;
- }
-
- // Fire 'end' when a mouse or pen leaves the document.
- function documentLeave ( event, data ) {
- if ( event.type === "mouseout" && event.target.nodeName === "HTML" && event.relatedTarget === null ){
- eventEnd (event, data);
- }
- }
-
- // Handle movement on document for handle and range drag.
- function eventMove ( event, data ) {
-
- // Fix #498
- // Check value of .buttons in 'start' to work around a bug in IE10 mobile (data.buttonsProperty).
- // https://connect.microsoft.com/IE/feedback/details/927005/mobile-ie10-windows-phone-buttons-property-of-pointermove-event-always-zero
- // IE9 has .buttons and .which zero on mousemove.
- // Firefox breaks the spec MDN defines.
- if ( navigator.appVersion.indexOf("MSIE 9") === -1 && event.buttons === 0 && data.buttonsProperty !== 0 ) {
- return eventEnd(event, data);
- }
-
- // Check if we are moving up or down
- var movement = (options.dir ? -1 : 1) * (event.calcPoint - data.startCalcPoint);
-
- // Convert the movement into a percentage of the slider width/height
- var proposal = (movement * 100) / data.baseSize;
-
- moveHandles(movement > 0, proposal, data.locations, data.handleNumbers);
- }
-
- // Unbind move events on document, call callbacks.
- function eventEnd ( event, data ) {
-
- // The handle is no longer active, so remove the class.
- if ( data.handle ) {
- removeClass(data.handle, options.cssClasses.active);
- scope_ActiveHandlesCount -= 1;
- }
-
- // Unbind the move and end events, which are added on 'start'.
- data.listeners.forEach(function( c ) {
- scope_DocumentElement.removeEventListener(c[0], c[1]);
- });
-
- if ( scope_ActiveHandlesCount === 0 ) {
- // Remove dragging class.
- removeClass(scope_Target, options.cssClasses.drag);
- setZindex();
-
- // Remove cursor styles and text-selection events bound to the body.
- if ( event.cursor ) {
- scope_Body.style.cursor = '';
- scope_Body.removeEventListener('selectstart', preventDefault);
- }
- }
-
- data.handleNumbers.forEach(function(handleNumber){
- fireEvent('change', handleNumber);
- fireEvent('set', handleNumber);
- fireEvent('end', handleNumber);
- });
- }
-
- // Bind move events on document.
- function eventStart ( event, data ) {
-
- var handle;
- if ( data.handleNumbers.length === 1 ) {
-
- var handleOrigin = scope_Handles[data.handleNumbers[0]];
-
- // Ignore 'disabled' handles
- if ( handleOrigin.hasAttribute('disabled') ) {
- return false;
- }
-
- handle = handleOrigin.children[0];
- scope_ActiveHandlesCount += 1;
-
- // Mark the handle as 'active' so it can be styled.
- addClass(handle, options.cssClasses.active);
- }
-
- // A drag should never propagate up to the 'tap' event.
- event.stopPropagation();
-
- // Record the event listeners.
- var listeners = [];
-
- // Attach the move and end events.
- var moveEvent = attachEvent(actions.move, scope_DocumentElement, eventMove, {
- // The event target has changed so we need to propagate the original one so that we keep
- // relying on it to extract target touches.
- target: event.target,
- handle: handle,
- listeners: listeners,
- startCalcPoint: event.calcPoint,
- baseSize: baseSize(),
- pageOffset: event.pageOffset,
- handleNumbers: data.handleNumbers,
- buttonsProperty: event.buttons,
- locations: scope_Locations.slice()
- });
-
- var endEvent = attachEvent(actions.end, scope_DocumentElement, eventEnd, {
- target: event.target,
- handle: handle,
- listeners: listeners,
- doNotReject: true,
- handleNumbers: data.handleNumbers
- });
-
- var outEvent = attachEvent("mouseout", scope_DocumentElement, documentLeave, {
- target: event.target,
- handle: handle,
- listeners: listeners,
- doNotReject: true,
- handleNumbers: data.handleNumbers
- });
-
- // We want to make sure we pushed the listeners in the listener list rather than creating
- // a new one as it has already been passed to the event handlers.
- listeners.push.apply(listeners, moveEvent.concat(endEvent, outEvent));
-
- // Text selection isn't an issue on touch devices,
- // so adding cursor styles can be skipped.
- if ( event.cursor ) {
-
- // Prevent the 'I' cursor and extend the range-drag cursor.
- scope_Body.style.cursor = getComputedStyle(event.target).cursor;
-
- // Mark the target with a dragging state.
- if ( scope_Handles.length > 1 ) {
- addClass(scope_Target, options.cssClasses.drag);
- }
-
- // Prevent text selection when dragging the handles.
- // In noUiSlider <= 9.2.0, this was handled by calling preventDefault on mouse/touch start/move,
- // which is scroll blocking. The selectstart event is supported by FireFox starting from version 52,
- // meaning the only holdout is iOS Safari. This doesn't matter: text selection isn't triggered there.
- // The 'cursor' flag is false.
- // See: http://caniuse.com/#search=selectstart
- scope_Body.addEventListener('selectstart', preventDefault, false);
- }
-
- data.handleNumbers.forEach(function(handleNumber){
- fireEvent('start', handleNumber);
- });
- }
-
- // Move closest handle to tapped location.
- function eventTap ( event ) {
-
- // The tap event shouldn't propagate up
- event.stopPropagation();
-
- var proposal = calcPointToPercentage(event.calcPoint);
- var handleNumber = getClosestHandle(proposal);
-
- // Tackle the case that all handles are 'disabled'.
- if ( handleNumber === false ) {
- return false;
- }
-
- // Flag the slider as it is now in a transitional state.
- // Transition takes a configurable amount of ms (default 300). Re-enable the slider after that.
- if ( !options.events.snap ) {
- addClassFor(scope_Target, options.cssClasses.tap, options.animationDuration);
- }
-
- setHandle(handleNumber, proposal, true, true);
-
- setZindex();
-
- fireEvent('slide', handleNumber, true);
- fireEvent('update', handleNumber, true);
- fireEvent('change', handleNumber, true);
- fireEvent('set', handleNumber, true);
-
- if ( options.events.snap ) {
- eventStart(event, { handleNumbers: [handleNumber] });
- }
- }
-
- // Fires a 'hover' event for a hovered mouse/pen position.
- function eventHover ( event ) {
-
- var proposal = calcPointToPercentage(event.calcPoint);
-
- var to = scope_Spectrum.getStep(proposal);
- var value = scope_Spectrum.fromStepping(to);
-
- Object.keys(scope_Events).forEach(function( targetEvent ) {
- if ( 'hover' === targetEvent.split('.')[0] ) {
- scope_Events[targetEvent].forEach(function( callback ) {
- callback.call( scope_Self, value );
- });
- }
- });
- }
-
- // Attach events to several slider parts.
- function bindSliderEvents ( behaviour ) {
-
- // Attach the standard drag event to the handles.
- if ( !behaviour.fixed ) {
-
- scope_Handles.forEach(function( handle, index ){
-
- // These events are only bound to the visual handle
- // element, not the 'real' origin element.
- attachEvent ( actions.start, handle.children[0], eventStart, {
- handleNumbers: [index]
- });
- });
- }
-
- // Attach the tap event to the slider base.
- if ( behaviour.tap ) {
- attachEvent (actions.start, scope_Base, eventTap, {});
- }
-
- // Fire hover events
- if ( behaviour.hover ) {
- attachEvent (actions.move, scope_Base, eventHover, { hover: true });
- }
-
- // Make the range draggable.
- if ( behaviour.drag ){
-
- scope_Connects.forEach(function( connect, index ){
-
- if ( connect === false || index === 0 || index === scope_Connects.length - 1 ) {
- return;
- }
-
- var handleBefore = scope_Handles[index - 1];
- var handleAfter = scope_Handles[index];
- var eventHolders = [connect];
-
- addClass(connect, options.cssClasses.draggable);
-
- // When the range is fixed, the entire range can
- // be dragged by the handles. The handle in the first
- // origin will propagate the start event upward,
- // but it needs to be bound manually on the other.
- if ( behaviour.fixed ) {
- eventHolders.push(handleBefore.children[0]);
- eventHolders.push(handleAfter.children[0]);
- }
-
- eventHolders.forEach(function( eventHolder ) {
- attachEvent ( actions.start, eventHolder, eventStart, {
- handles: [handleBefore, handleAfter],
- handleNumbers: [index - 1, index]
- });
- });
- });
- }
- }
-
-/*! In this file: Slider events (not browser events); */
-
- // Attach an event to this slider, possibly including a namespace
- function bindEvent ( namespacedEvent, callback ) {
- scope_Events[namespacedEvent] = scope_Events[namespacedEvent] || [];
- scope_Events[namespacedEvent].push(callback);
-
- // If the event bound is 'update,' fire it immediately for all handles.
- if ( namespacedEvent.split('.')[0] === 'update' ) {
- scope_Handles.forEach(function(a, index){
- fireEvent('update', index);
- });
- }
- }
-
- // Undo attachment of event
- function removeEvent ( namespacedEvent ) {
-
- var event = namespacedEvent && namespacedEvent.split('.')[0];
- var namespace = event && namespacedEvent.substring(event.length);
-
- Object.keys(scope_Events).forEach(function( bind ){
-
- var tEvent = bind.split('.')[0];
- var tNamespace = bind.substring(tEvent.length);
-
- if ( (!event || event === tEvent) && (!namespace || namespace === tNamespace) ) {
- delete scope_Events[bind];
- }
- });
- }
-
- // External event handling
- function fireEvent ( eventName, handleNumber, tap ) {
-
- Object.keys(scope_Events).forEach(function( targetEvent ) {
-
- var eventType = targetEvent.split('.')[0];
-
- if ( eventName === eventType ) {
- scope_Events[targetEvent].forEach(function( callback ) {
-
- callback.call(
- // Use the slider public API as the scope ('this')
- scope_Self,
- // Return values as array, so arg_1[arg_2] is always valid.
- scope_Values.map(options.format.to),
- // Handle index, 0 or 1
- handleNumber,
- // Unformatted slider values
- scope_Values.slice(),
- // Event is fired by tap, true or false
- tap || false,
- // Left offset of the handle, in relation to the slider
- scope_Locations.slice()
- );
- });
- }
- });
- }
-
-/*! In this file: Mechanics for slider operation */
-
- function toPct ( pct ) {
- return pct + '%';
- }
-
- // Split out the handle positioning logic so the Move event can use it, too
- function checkHandlePosition ( reference, handleNumber, to, lookBackward, lookForward, getValue ) {
-
- // For sliders with multiple handles, limit movement to the other handle.
- // Apply the margin option by adding it to the handle positions.
- if ( scope_Handles.length > 1 ) {
-
- if ( lookBackward && handleNumber > 0 ) {
- to = Math.max(to, reference[handleNumber - 1] + options.margin);
- }
-
- if ( lookForward && handleNumber < scope_Handles.length - 1 ) {
- to = Math.min(to, reference[handleNumber + 1] - options.margin);
- }
- }
-
- // The limit option has the opposite effect, limiting handles to a
- // maximum distance from another. Limit must be > 0, as otherwise
- // handles would be unmoveable.
- if ( scope_Handles.length > 1 && options.limit ) {
-
- if ( lookBackward && handleNumber > 0 ) {
- to = Math.min(to, reference[handleNumber - 1] + options.limit);
- }
-
- if ( lookForward && handleNumber < scope_Handles.length - 1 ) {
- to = Math.max(to, reference[handleNumber + 1] - options.limit);
- }
- }
-
- // The padding option keeps the handles a certain distance from the
- // edges of the slider. Padding must be > 0.
- if ( options.padding ) {
-
- if ( handleNumber === 0 ) {
- to = Math.max(to, options.padding[0]);
- }
-
- if ( handleNumber === scope_Handles.length - 1 ) {
- to = Math.min(to, 100 - options.padding[1]);
- }
- }
-
- to = scope_Spectrum.getStep(to);
-
- // Limit percentage to the 0 - 100 range
- to = limit(to);
-
- // Return false if handle can't move
- if ( to === reference[handleNumber] && !getValue ) {
- return false;
- }
-
- return to;
- }
-
- // Uses slider orientation to create CSS rules. a = base value;
- function inRuleOrder ( v, a ) {
- var o = options.ort;
- return (o?a:v) + ', ' + (o?v:a);
- }
-
- // Moves handle(s) by a percentage
- // (bool, % to move, [% where handle started, ...], [index in scope_Handles, ...])
- function moveHandles ( upward, proposal, locations, handleNumbers ) {
-
- var proposals = locations.slice();
-
- var b = [!upward, upward];
- var f = [upward, !upward];
-
- // Copy handleNumbers so we don't change the dataset
- handleNumbers = handleNumbers.slice();
-
- // Check to see which handle is 'leading'.
- // If that one can't move the second can't either.
- if ( upward ) {
- handleNumbers.reverse();
- }
-
- // Step 1: get the maximum percentage that any of the handles can move
- if ( handleNumbers.length > 1 ) {
-
- handleNumbers.forEach(function(handleNumber, o) {
-
- var to = checkHandlePosition(proposals, handleNumber, proposals[handleNumber] + proposal, b[o], f[o], false);
-
- // Stop if one of the handles can't move.
- if ( to === false ) {
- proposal = 0;
- } else {
- proposal = to - proposals[handleNumber];
- proposals[handleNumber] = to;
- }
- });
- }
-
- // If using one handle, check backward AND forward
- else {
- b = f = [true];
- }
-
- var state = false;
-
- // Step 2: Try to set the handles with the found percentage
- handleNumbers.forEach(function(handleNumber, o) {
- state = setHandle(handleNumber, locations[handleNumber] + proposal, b[o], f[o]) || state;
- });
-
- // Step 3: If a handle moved, fire events
- if ( state ) {
- handleNumbers.forEach(function(handleNumber){
- fireEvent('update', handleNumber);
- fireEvent('slide', handleNumber);
- });
- }
- }
-
- // Takes a base value and an offset. This offset is used for the connect bar size.
- // In the initial design for this feature, the origin element was 1% wide.
- // Unfortunately, a rounding bug in Chrome makes it impossible to implement this feature
- // in this manner: https://bugs.chromium.org/p/chromium/issues/detail?id=798223
- function transformDirection ( a, b ) {
- return options.dir ? 100 - a - b : a;
- }
-
- // Updates scope_Locations and scope_Values, updates visual state
- function updateHandlePosition ( handleNumber, to ) {
-
- // Update locations.
- scope_Locations[handleNumber] = to;
-
- // Convert the value to the slider stepping/range.
- scope_Values[handleNumber] = scope_Spectrum.fromStepping(to);
-
- var rule = 'translate(' + inRuleOrder(toPct(transformDirection(to, 0) - scope_DirOffset), '0') + ')';
- scope_Handles[handleNumber].style[options.transformRule] = rule;
-
- updateConnect(handleNumber);
- updateConnect(handleNumber + 1);
- }
-
- // Handles before the slider middle are stacked later = higher,
- // Handles after the middle later is lower
- // [[7] [8] .......... | .......... [5] [4]
- function setZindex ( ) {
-
- scope_HandleNumbers.forEach(function(handleNumber){
- var dir = (scope_Locations[handleNumber] > 50 ? -1 : 1);
- var zIndex = 3 + (scope_Handles.length + (dir * handleNumber));
- scope_Handles[handleNumber].style.zIndex = zIndex;
- });
- }
-
- // Test suggested values and apply margin, step.
- function setHandle ( handleNumber, to, lookBackward, lookForward ) {
-
- to = checkHandlePosition(scope_Locations, handleNumber, to, lookBackward, lookForward, false);
-
- if ( to === false ) {
- return false;
- }
-
- updateHandlePosition(handleNumber, to);
-
- return true;
- }
-
- // Updates style attribute for connect nodes
- function updateConnect ( index ) {
-
- // Skip connects set to false
- if ( !scope_Connects[index] ) {
- return;
- }
-
- var l = 0;
- var h = 100;
-
- if ( index !== 0 ) {
- l = scope_Locations[index - 1];
- }
-
- if ( index !== scope_Connects.length - 1 ) {
- h = scope_Locations[index];
- }
-
- // We use two rules:
- // 'translate' to change the left/top offset;
- // 'scale' to change the width of the element;
- // As the element has a width of 100%, a translation of 100% is equal to 100% of the parent (.noUi-base)
- var connectWidth = h - l;
- var translateRule = 'translate(' + inRuleOrder(toPct(transformDirection(l, connectWidth)), '0') + ')';
- var scaleRule = 'scale(' + inRuleOrder(connectWidth / 100, '1') + ')';
-
- scope_Connects[index].style[options.transformRule] = translateRule + ' ' + scaleRule;
- }
-
-/*! In this file: All methods eventually exposed in slider.noUiSlider... */
-
- // Parses value passed to .set method. Returns current value if not parse-able.
- function resolveToValue ( to, handleNumber ) {
-
- // Setting with null indicates an 'ignore'.
- // Inputting 'false' is invalid.
- if ( to === null || to === false || to === undefined ) {
- return scope_Locations[handleNumber];
- }
-
- // If a formatted number was passed, attempt to decode it.
- if ( typeof to === 'number' ) {
- to = String(to);
- }
-
- to = options.format.from(to);
- to = scope_Spectrum.toStepping(to);
-
- // If parsing the number failed, use the current value.
- if ( to === false || isNaN(to) ) {
- return scope_Locations[handleNumber];
- }
-
- return to;
- }
-
- // Set the slider value.
- function valueSet ( input, fireSetEvent ) {
-
- var values = asArray(input);
- var isInit = scope_Locations[0] === undefined;
-
- // Event fires by default
- fireSetEvent = (fireSetEvent === undefined ? true : !!fireSetEvent);
-
- // Animation is optional.
- // Make sure the initial values were set before using animated placement.
- if ( options.animate && !isInit ) {
- addClassFor(scope_Target, options.cssClasses.tap, options.animationDuration);
- }
-
- // First pass, without lookAhead but with lookBackward. Values are set from left to right.
- scope_HandleNumbers.forEach(function(handleNumber){
- setHandle(handleNumber, resolveToValue(values[handleNumber], handleNumber), true, false);
- });
-
- // Second pass. Now that all base values are set, apply constraints
- scope_HandleNumbers.forEach(function(handleNumber){
- setHandle(handleNumber, scope_Locations[handleNumber], true, true);
- });
-
- setZindex();
-
- scope_HandleNumbers.forEach(function(handleNumber){
-
- fireEvent('update', handleNumber);
-
- // Fire the event only for handles that received a new value, as per #579
- if ( values[handleNumber] !== null && fireSetEvent ) {
- fireEvent('set', handleNumber);
- }
- });
- }
-
- // Reset slider to initial values
- function valueReset ( fireSetEvent ) {
- valueSet(options.start, fireSetEvent);
- }
-
- // Get the slider value.
- function valueGet ( ) {
-
- var values = scope_Values.map(options.format.to);
-
- // If only one handle is used, return a single value.
- if ( values.length === 1 ){
- return values[0];
- }
-
- return values;
- }
-
- // Removes classes from the root and empties it.
- function destroy ( ) {
-
- for ( var key in options.cssClasses ) {
- if ( !options.cssClasses.hasOwnProperty(key) ) { continue; }
- removeClass(scope_Target, options.cssClasses[key]);
- }
-
- while (scope_Target.firstChild) {
- scope_Target.removeChild(scope_Target.firstChild);
- }
-
- delete scope_Target.noUiSlider;
- }
-
- // Get the current step size for the slider.
- function getCurrentStep ( ) {
-
- // Check all locations, map them to their stepping point.
- // Get the step point, then find it in the input list.
- return scope_Locations.map(function( location, index ){
-
- var nearbySteps = scope_Spectrum.getNearbySteps( location );
- var value = scope_Values[index];
- var increment = nearbySteps.thisStep.step;
- var decrement = null;
-
- // If the next value in this step moves into the next step,
- // the increment is the start of the next step - the current value
- if ( increment !== false ) {
- if ( value + increment > nearbySteps.stepAfter.startValue ) {
- increment = nearbySteps.stepAfter.startValue - value;
- }
- }
-
-
- // If the value is beyond the starting point
- if ( value > nearbySteps.thisStep.startValue ) {
- decrement = nearbySteps.thisStep.step;
- }
-
- else if ( nearbySteps.stepBefore.step === false ) {
- decrement = false;
- }
-
- // If a handle is at the start of a step, it always steps back into the previous step first
- else {
- decrement = value - nearbySteps.stepBefore.highestStep;
- }
-
-
- // Now, if at the slider edges, there is not in/decrement
- if ( location === 100 ) {
- increment = null;
- }
-
- else if ( location === 0 ) {
- decrement = null;
- }
-
- // As per #391, the comparison for the decrement step can have some rounding issues.
- var stepDecimals = scope_Spectrum.countStepDecimals();
-
- // Round per #391
- if ( increment !== null && increment !== false ) {
- increment = Number(increment.toFixed(stepDecimals));
- }
-
- if ( decrement !== null && decrement !== false ) {
- decrement = Number(decrement.toFixed(stepDecimals));
- }
-
- return [decrement, increment];
- });
- }
-
- // Updateable: margin, limit, padding, step, range, animate, snap
- function updateOptions ( optionsToUpdate, fireSetEvent ) {
-
- // Spectrum is created using the range, snap, direction and step options.
- // 'snap' and 'step' can be updated.
- // If 'snap' and 'step' are not passed, they should remain unchanged.
- var v = valueGet();
-
- var updateAble = ['margin', 'limit', 'padding', 'range', 'animate', 'snap', 'step', 'format'];
-
- // Only change options that we're actually passed to update.
- updateAble.forEach(function(name){
- if ( optionsToUpdate[name] !== undefined ) {
- originalOptions[name] = optionsToUpdate[name];
- }
- });
-
- var newOptions = testOptions(originalOptions);
-
- // Load new options into the slider state
- updateAble.forEach(function(name){
- if ( optionsToUpdate[name] !== undefined ) {
- options[name] = newOptions[name];
- }
- });
-
- scope_Spectrum = newOptions.spectrum;
-
- // Limit, margin and padding depend on the spectrum but are stored outside of it. (#677)
- options.margin = newOptions.margin;
- options.limit = newOptions.limit;
- options.padding = newOptions.padding;
-
- // Update pips, removes existing.
- if ( options.pips ) {
- pips(options.pips);
- }
-
- // Invalidate the current positioning so valueSet forces an update.
- scope_Locations = [];
- valueSet(optionsToUpdate.start || v, fireSetEvent);
- }
-
-/*! In this file: Calls to functions. All other scope_ files define functions only; */
-
- // Create the base element, initialize HTML and set classes.
- // Add handles and connect elements.
- addSlider(scope_Target);
- addElements(options.connect, scope_Base);
-
- // Attach user events.
- bindSliderEvents(options.events);
-
- // Use the public value method to set the start values.
- valueSet(options.start);
-
- scope_Self = {
- destroy: destroy,
- steps: getCurrentStep,
- on: bindEvent,
- off: removeEvent,
- get: valueGet,
- set: valueSet,
- reset: valueReset,
- // Exposed for unit testing, don't use this in your application.
- __moveHandles: function(a, b, c) { moveHandles(a, b, scope_Locations, c); },
- options: originalOptions, // Issue #600, #678
- updateOptions: updateOptions,
- target: scope_Target, // Issue #597
- removePips: removePips,
- pips: pips // Issue #594
- };
-
- if ( options.pips ) {
- pips(options.pips);
- }
-
- if ( options.tooltips ) {
- tooltips();
- }
-
- aria();
-
- return scope_Self;
-
-}
-
-
- // Run the standard initializer
- function initialize ( target, originalOptions ) {
-
- if ( !target || !target.nodeName ) {
- throw new Error("noUiSlider (" + VERSION + "): create requires a single element, got: " + target);
- }
-
- // Throw an error if the slider was already initialized.
- if ( target.noUiSlider ) {
- throw new Error("noUiSlider (" + VERSION + "): Slider was already initialized.");
- }
-
- // Test the options and create the slider environment;
- var options = testOptions( originalOptions, target );
- var api = scope( target, options, originalOptions );
-
- target.noUiSlider = api;
-
- return api;
- }
-
- // Use an object instead of a function for future expandability;
- return {
- version: VERSION,
- create: initialize
- };
-
-}));
-},{}],3:[function(require,module,exports){
-(function (global){
-
-var $ = (typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null);
-var state = require('./state');
-var process_form = require('./process_form');
-var noUiSlider = require('nouislider');
-//var cookies = require('js-cookie');
-var thirdParty = require('./thirdparty');
-
-window.searchAndFilter = {
- extensions: [],
- registerExtension: function( extensionName ) {
- this.extensions.push( extensionName );
- }
-};
-
-module.exports = function(options)
-{
- var defaults = {
- startOpened: false,
- isInit: true,
- action: ""
- };
-
- var opts = jQuery.extend(defaults, options);
-
- thirdParty.init();
-
- //loop through each item matched
- this.each(function()
- {
-
- var $this = $(this);
- var self = this;
- this.sfid = $this.attr("data-sf-form-id");
-
- state.addSearchForm(this.sfid, this);
-
- this.$fields = $this.find("> ul > li"); //a reference to each fields parent LI
-
- this.enable_taxonomy_archives = $this.attr('data-taxonomy-archives');
- this.current_taxonomy_archive = $this.attr('data-current-taxonomy-archive');
-
- if(typeof(this.enable_taxonomy_archives)=="undefined")
- {
- this.enable_taxonomy_archives = "0";
- }
- if(typeof(this.current_taxonomy_archive)=="undefined")
- {
- this.current_taxonomy_archive = "";
- }
-
- process_form.init(self.enable_taxonomy_archives, self.current_taxonomy_archive);
- //process_form.setTaxArchiveResultsUrl(self);
- process_form.enableInputs(self);
-
- if(typeof(this.extra_query_params)=="undefined")
- {
- this.extra_query_params = {all: {}, results: {}, ajax: {}};
- }
-
-
- this.template_is_loaded = $this.attr("data-template-loaded");
- this.is_ajax = $this.attr("data-ajax");
- this.instance_number = $this.attr('data-instance-count');
- this.$ajax_results_container = jQuery($this.attr("data-ajax-target"));
-
- this.ajax_update_sections = $this.attr("data-ajax-update-sections") ? JSON.parse( $this.attr("data-ajax-update-sections") ) : [];
- this.replace_results = $this.attr("data-replace-results") === "0" ? false : true;
-
- this.results_url = $this.attr("data-results-url");
- this.debug_mode = $this.attr("data-debug-mode");
- this.update_ajax_url = $this.attr("data-update-ajax-url");
- this.pagination_type = $this.attr("data-ajax-pagination-type");
- this.auto_count = $this.attr("data-auto-count");
- this.auto_count_refresh_mode = $this.attr("data-auto-count-refresh-mode");
- this.only_results_ajax = $this.attr("data-only-results-ajax"); //if we are not on the results page, redirect rather than try to load via ajax
- this.scroll_to_pos = $this.attr("data-scroll-to-pos");
- this.custom_scroll_to = $this.attr("data-custom-scroll-to");
- this.scroll_on_action = $this.attr("data-scroll-on-action");
- this.lang_code = $this.attr("data-lang-code");
- this.ajax_url = $this.attr('data-ajax-url');
- this.ajax_form_url = $this.attr('data-ajax-form-url');
- this.is_rtl = $this.attr('data-is-rtl');
-
- this.display_result_method = $this.attr('data-display-result-method');
- this.maintain_state = $this.attr('data-maintain-state');
- this.ajax_action = "";
- this.last_submit_query_params = "";
-
- this.current_paged = parseInt($this.attr('data-init-paged'));
- this.last_load_more_html = "";
- this.load_more_html = "";
- this.ajax_data_type = $this.attr('data-ajax-data-type');
- this.ajax_target_attr = $this.attr("data-ajax-target");
- this.use_history_api = $this.attr("data-use-history-api");
- this.is_submitting = false;
-
- this.last_ajax_request = null;
-
- if(typeof(this.results_html)=="undefined")
- {
- this.results_html = "";
- }
-
- if(typeof(this.use_history_api)=="undefined")
- {
- this.use_history_api = "";
- }
-
- if(typeof(this.pagination_type)=="undefined")
- {
- this.pagination_type = "normal";
- }
- if(typeof(this.current_paged)=="undefined")
- {
- this.current_paged = 1;
- }
-
- if(typeof(this.ajax_target_attr)=="undefined")
- {
- this.ajax_target_attr = "";
- }
-
- if(typeof(this.ajax_url)=="undefined")
- {
- this.ajax_url = "";
- }
-
- if(typeof(this.ajax_form_url)=="undefined")
- {
- this.ajax_form_url = "";
- }
-
- if(typeof(this.results_url)=="undefined")
- {
- this.results_url = "";
- }
-
- if(typeof(this.scroll_to_pos)=="undefined")
- {
- this.scroll_to_pos = "";
- }
-
- if(typeof(this.scroll_on_action)=="undefined")
- {
- this.scroll_on_action = "";
- }
- if(typeof(this.custom_scroll_to)=="undefined")
- {
- this.custom_scroll_to = "";
- }
- this.$custom_scroll_to = jQuery(this.custom_scroll_to);
-
- if(typeof(this.update_ajax_url)=="undefined")
- {
- this.update_ajax_url = "";
- }
-
- if(typeof(this.debug_mode)=="undefined")
- {
- this.debug_mode = "";
- }
-
- if(typeof(this.ajax_target_object)=="undefined")
- {
- this.ajax_target_object = "";
- }
-
- if(typeof(this.template_is_loaded)=="undefined")
- {
- this.template_is_loaded = "0";
- }
-
- if(typeof(this.auto_count_refresh_mode)=="undefined")
- {
- this.auto_count_refresh_mode = "0";
- }
-
- this.ajax_links_selector = $this.attr("data-ajax-links-selector");
-
-
- this.auto_update = $this.attr("data-auto-update");
- this.inputTimer = 0;
-
- this.setInfiniteScrollContainer = function()
- {
- // When we navigate away from search results, and then press back,
- // is_max_paged is retained, so we only want to set it to false if
- // we are initalizing the results page the first time - so just
- // check if this var is undefined (as it should be on first use);
- if ( typeof ( this.is_max_paged ) === 'undefined' ) {
- this.is_max_paged = false; //for load more only, once we detect we're at the end set this to true
- }
-
- this.use_scroll_loader = $this.attr('data-show-scroll-loader');
- this.infinite_scroll_container = $this.attr('data-infinite-scroll-container');
- this.infinite_scroll_trigger_amount = $this.attr('data-infinite-scroll-trigger');
- this.infinite_scroll_result_class = $this.attr('data-infinite-scroll-result-class');
- this.$infinite_scroll_container = this.$ajax_results_container;
-
- if(typeof(this.infinite_scroll_container)=="undefined")
- {
- this.infinite_scroll_container = "";
- }
- else
- {
- this.$infinite_scroll_container = jQuery(this.ajax_target_attr + ' ' + this.infinite_scroll_container);
- }
-
- if(typeof(this.infinite_scroll_result_class)=="undefined")
- {
- this.infinite_scroll_result_class = "";
- }
-
- if(typeof(this.use_scroll_loader)=="undefined")
- {
- this.use_scroll_loader = 1;
- }
-
- };
- this.setInfiniteScrollContainer();
-
- /* functions */
-
- this.reset = function(submit_form)
- {
-
- this.resetForm(submit_form);
- return true;
- }
-
- this.inputUpdate = function(delayDuration)
- {
- if(typeof(delayDuration)=="undefined")
- {
- var delayDuration = 300;
- }
-
- self.resetTimer(delayDuration);
- }
-
- this.scrollToPos = function() {
- var offset = 0;
- var canScroll = true;
-
- if(self.is_ajax==1)
- {
- if(self.scroll_to_pos=="window")
- {
- offset = 0;
-
- }
- else if(self.scroll_to_pos=="form")
- {
- offset = $this.offset().top;
- }
- else if(self.scroll_to_pos=="results")
- {
- if(self.$ajax_results_container.length>0)
- {
- offset = self.$ajax_results_container.offset().top;
- }
- }
- else if(self.scroll_to_pos=="custom")
- {
- //custom_scroll_to
- if(self.$custom_scroll_to.length>0)
- {
- offset = self.$custom_scroll_to.offset().top;
- }
- }
- else
- {
- canScroll = false;
- }
-
- if(canScroll)
- {
- $("html, body").stop().animate({
- scrollTop: offset
- }, "normal", "easeOutQuad" );
- }
- }
-
- };
-
- this.attachActiveClass = function(){
-
- //check to see if we are using ajax & auto count
- //if not, the search form does not get reloaded, so we need to update the sf-option-active class on all fields
-
- $this.on('change', 'input[type="radio"], input[type="checkbox"], select', function(e)
- {
- var $cthis = $(this);
- var $cthis_parent = $cthis.closest("li[data-sf-field-name]");
- var this_tag = $cthis.prop("tagName").toLowerCase();
- var input_type = $cthis.attr("type");
- var parent_tag = $cthis_parent.prop("tagName").toLowerCase();
-
- if((this_tag=="input")&&((input_type=="radio")||(input_type=="checkbox")) && (parent_tag=="li"))
- {
- var $all_options = $cthis_parent.parent().find('li');
- var $all_options_fields = $cthis_parent.parent().find('input:checked');
-
- $all_options.removeClass("sf-option-active");
- $all_options_fields.each(function(){
-
- var $parent = $(this).closest("li");
- $parent.addClass("sf-option-active");
-
- });
-
- }
- else if(this_tag=="select")
- {
- var $all_options = $cthis.children();
- $all_options.removeClass("sf-option-active");
- var this_val = $cthis.val();
-
- var this_arr_val = (typeof this_val == 'string' || this_val instanceof String) ? [this_val] : this_val;
-
- $(this_arr_val).each(function(i, value){
- $cthis.find("option[value='"+value+"']").addClass("sf-option-active");
- });
-
-
- }
- });
-
- };
- this.initAutoUpdateEvents = function(){
-
- /* auto update */
- if((self.auto_update==1)||(self.auto_count_refresh_mode==1))
- {
- $this.on('change', 'input[type="radio"], input[type="checkbox"], select', function(e) {
- self.inputUpdate(200);
- });
-
- $this.on('input', 'input[type="number"]', function(e) {
- self.inputUpdate(800);
- });
-
- var $textInput = $this.find('input[type="text"]:not(.sf-datepicker)');
- var lastValue = $textInput.val();
-
- $this.on('input', 'input[type="text"]:not(.sf-datepicker)', function()
- {
- if(lastValue!=$textInput.val())
- {
- self.inputUpdate(1200);
- }
-
- lastValue = $textInput.val();
- });
-
-
- $this.on('keypress', 'input[type="text"]:not(.sf-datepicker)', function(e)
- {
- if (e.which == 13){
-
- e.preventDefault();
- self.submitForm();
- return false;
- }
-
- });
-
- //$this.on('input', 'input.sf-datepicker', self.dateInputType);
-
- }
- };
-
- //this.initAutoUpdateEvents();
-
-
- this.clearTimer = function()
- {
- clearTimeout(self.inputTimer);
- };
- this.resetTimer = function(delayDuration)
- {
- clearTimeout(self.inputTimer);
- self.inputTimer = setTimeout(self.formUpdated, delayDuration);
-
- };
-
- this.addDatePickers = function()
- {
- var $date_picker = $this.find(".sf-datepicker");
-
- if($date_picker.length>0)
- {
- $date_picker.each(function(){
-
- var $this = $(this);
- var dateFormat = "";
- var dateDropdownYear = false;
- var dateDropdownMonth = false;
-
- var $closest_date_wrap = $this.closest(".sf_date_field");
- if($closest_date_wrap.length>0)
- {
- dateFormat = $closest_date_wrap.attr("data-date-format");
-
- if($closest_date_wrap.attr("data-date-use-year-dropdown")==1)
- {
- dateDropdownYear = true;
- }
- if($closest_date_wrap.attr("data-date-use-month-dropdown")==1)
- {
- dateDropdownMonth = true;
- }
- }
-
- var datePickerOptions = {
- inline: true,
- showOtherMonths: true,
- onSelect: function(e, from_field){ self.dateSelect(e, from_field, $(this)); },
- dateFormat: dateFormat,
-
- changeMonth: dateDropdownMonth,
- changeYear: dateDropdownYear
- };
-
- if(self.is_rtl==1)
- {
- datePickerOptions.direction = "rtl";
- }
-
- $this.datepicker(datePickerOptions);
-
- if(self.lang_code!="")
- {
- $.datepicker.setDefaults(
- $.extend(
- {'dateFormat':dateFormat},
- $.datepicker.regional[ self.lang_code]
- )
- );
-
- }
- else
- {
- $.datepicker.setDefaults(
- $.extend(
- {'dateFormat':dateFormat},
- $.datepicker.regional["en"]
- )
- );
-
- }
-
- });
-
- if($('.ll-skin-melon').length==0){
-
- $date_picker.datepicker('widget').wrap('
');
- }
-
- }
- };
-
- this.dateSelect = function(e, from_field, $this)
- {
- var $input_field = $(from_field.input.get(0));
- var $this = $(this);
-
- var $date_fields = $input_field.closest('[data-sf-field-input-type="daterange"], [data-sf-field-input-type="date"]');
- $date_fields.each(function(e, index){
-
- var $tf_date_pickers = $(this).find(".sf-datepicker");
- var no_date_pickers = $tf_date_pickers.length;
-
- if(no_date_pickers>1)
- {
- //then it is a date range, so make sure both fields are filled before updating
- var dp_counter = 0;
- var dp_empty_field_count = 0;
- $tf_date_pickers.each(function(){
-
- if($(this).val()=="")
- {
- dp_empty_field_count++;
- }
-
- dp_counter++;
- });
-
- if(dp_empty_field_count==0)
- {
- self.inputUpdate(1);
- }
- }
- else
- {
- self.inputUpdate(1);
- }
-
- });
- };
-
- this.addRangeSliders = function()
- {
- var $meta_range = $this.find(".sf-meta-range-slider");
-
- if($meta_range.length>0)
- {
- $meta_range.each(function(){
-
- var $this = $(this);
- var min = $this.attr("data-min");
- var max = $this.attr("data-max");
- var smin = $this.attr("data-start-min");
- var smax = $this.attr("data-start-max");
- var display_value_as = $this.attr("data-display-values-as");
- var step = $this.attr("data-step");
- var $start_val = $this.find('.sf-range-min');
- var $end_val = $this.find('.sf-range-max');
-
-
- var decimal_places = $this.attr("data-decimal-places");
- var thousand_seperator = $this.attr("data-thousand-seperator");
- var decimal_seperator = $this.attr("data-decimal-seperator");
-
- var field_format = wNumb({
- mark: decimal_seperator,
- decimals: parseFloat(decimal_places),
- thousand: thousand_seperator
- });
-
-
-
- var min_unformatted = parseFloat(smin);
- var min_formatted = field_format.to(parseFloat(smin));
- var max_formatted = field_format.to(parseFloat(smax));
- var max_unformatted = parseFloat(smax);
- //alert(min_formatted);
- //alert(max_formatted);
- //alert(display_value_as);
-
-
- if(display_value_as=="textinput")
- {
- $start_val.val(min_formatted);
- $end_val.val(max_formatted);
- }
- else if(display_value_as=="text")
- {
- $start_val.html(min_formatted);
- $end_val.html(max_formatted);
- }
-
-
- var noUIOptions = {
- range: {
- 'min': [ parseFloat(min) ],
- 'max': [ parseFloat(max) ]
- },
- start: [min_formatted, max_formatted],
- handles: 2,
- connect: true,
- step: parseFloat(step),
-
- behaviour: 'extend-tap',
- format: field_format
- };
-
-
-
- if(self.is_rtl==1)
- {
- noUIOptions.direction = "rtl";
- }
-
- var slider_object = $(this).find(".meta-slider")[0];
-
- if( "undefined" !== typeof( slider_object.noUiSlider ) ) {
- //destroy if it exists.. this means somehow another instance had initialised it..
- slider_object.noUiSlider.destroy();
- }
-
- noUiSlider.create(slider_object, noUIOptions);
-
- $start_val.off();
- $start_val.on('change', function(){
- slider_object.noUiSlider.set([$(this).val(), null]);
- });
-
- $end_val.off();
- $end_val.on('change', function(){
- slider_object.noUiSlider.set([null, $(this).val()]);
- });
-
- //$start_val.html(min_formatted);
- //$end_val.html(max_formatted);
-
- slider_object.noUiSlider.off('update');
- slider_object.noUiSlider.on('update', function( values, handle ) {
-
- var slider_start_val = min_formatted;
- var slider_end_val = max_formatted;
-
- var value = values[handle];
-
-
- if ( handle ) {
- max_formatted = value;
- } else {
- min_formatted = value;
- }
-
- if(display_value_as=="textinput")
- {
- $start_val.val(min_formatted);
- $end_val.val(max_formatted);
- }
- else if(display_value_as=="text")
- {
- $start_val.html(min_formatted);
- $end_val.html(max_formatted);
- }
-
-
- //i think the function that builds the URL needs to decode the formatted string before adding to the url
- if((self.auto_update==1)||(self.auto_count_refresh_mode==1))
- {
- //only try to update if the values have actually changed
- if((slider_start_val!=min_formatted)||(slider_end_val!=max_formatted)) {
-
- self.inputUpdate(800);
- }
-
-
- }
-
- });
-
- });
-
- self.clearTimer(); //ignore any changes recently made by the slider (this was just init shouldn't count as an update event)
- }
- };
-
- this.init = function(keep_pagination)
- {
- if(typeof(keep_pagination)=="undefined")
- {
- var keep_pagination = false;
- }
-
- this.initAutoUpdateEvents();
- this.attachActiveClass();
-
- this.addDatePickers();
- this.addRangeSliders();
-
- //init combo boxes
- var $combobox = $this.find("select[data-combobox='1']");
-
- if($combobox.length>0)
- {
- $combobox.each(function(index ){
- var $thiscb = $( this );
- var nrm = $thiscb.attr("data-combobox-nrm");
-
- if (typeof $thiscb.chosen != "undefined")
- {
- var chosenoptions = {
- search_contains: true
- };
-
- if((typeof(nrm)!=="undefined")&&(nrm)){
- chosenoptions.no_results_text = nrm;
- }
- // safe to use the function
- //search_contains
- if(self.is_rtl==1)
- {
- $thiscb.addClass("chosen-rtl");
- }
-
- $thiscb.chosen(chosenoptions);
- }
- else
- {
-
- var select2options = {};
-
- if(self.is_rtl==1)
- {
- select2options.dir = "rtl";
- }
- if((typeof(nrm)!=="undefined")&&(nrm)){
- select2options.language= {
- "noResults": function(){
- return nrm;
- }
- };
- }
-
- $thiscb.select2(select2options);
- }
-
- });
-
-
- }
-
- self.isSubmitting = false;
-
- //if ajax is enabled init the pagination
- if(self.is_ajax==1)
- {
- self.setupAjaxPagination();
- }
-
- $this.on("submit", this.submitForm);
-
- self.initWooCommerceControls(); //woocommerce orderby
-
- if(keep_pagination==false)
- {
- self.last_submit_query_params = self.getUrlParams(false);
- }
- }
-
- this.onWindowScroll = function(event)
- {
- if((!self.is_loading_more) && (!self.is_max_paged))
- {
- var window_scroll = $(window).scrollTop();
- var window_scroll_bottom = $(window).scrollTop() + $(window).height();
- var scroll_offset = parseInt(self.infinite_scroll_trigger_amount);
-
- if(self.$infinite_scroll_container.length==1)
- {
- var results_scroll_bottom = self.$infinite_scroll_container.offset().top + self.$infinite_scroll_container.height();
-
- var offset = (self.$infinite_scroll_container.offset().top + self.$infinite_scroll_container.height()) - window_scroll;
-
- if(window_scroll_bottom > results_scroll_bottom + scroll_offset)
- {
- self.loadMoreResults();
- }
- else
- {//dont load more
-
- }
- }
- }
- }
-
- this.stripQueryStringAndHashFromPath = function(url) {
- return url.split("?")[0].split("#")[0];
- }
-
- this.gup = function( name, url ) {
- if (!url) url = location.href
- name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
- var regexS = "[\\?&]"+name+"=([^]*)";
- var regex = new RegExp( regexS );
- var results = regex.exec( url );
- return results == null ? null : results[1];
- };
-
-
- this.getUrlParams = function(keep_pagination, type, exclude)
- {
- if(typeof(keep_pagination)=="undefined")
- {
- var keep_pagination = true;
- }
-
- if(typeof(type)=="undefined")
- {
- var type = "";
- }
-
- var url_params_str = "";
-
- // get all params from fields
- var url_params_array = process_form.getUrlParams(self);
-
- var length = Object.keys(url_params_array).length;
- var count = 0;
-
- if(typeof(exclude)!="undefined") {
- if (url_params_array.hasOwnProperty(exclude)) {
- length--;
- }
- }
-
- if(length>0)
- {
- for (var k in url_params_array) {
- if (url_params_array.hasOwnProperty(k)) {
-
- var can_add = true;
- if(typeof(exclude)!="undefined")
- {
- if(k==exclude) {
- can_add = false;
- }
- }
-
- if(can_add) {
- url_params_str += k + "=" + url_params_array[k];
-
- if (count < length - 1) {
- url_params_str += "&";
- }
-
- count++;
- }
- }
- }
- }
-
- var query_params = "";
-
- //form params as url query string
- var form_params = url_params_str;
-
- //get url params from the form itself (what the user has selected)
- query_params = self.joinUrlParam(query_params, form_params);
-
- //add pagination
- if(keep_pagination==true)
- {
- var pageNumber = self.$ajax_results_container.attr("data-paged");
-
- if(typeof(pageNumber)=="undefined")
- {
- pageNumber = 1;
- }
-
- if(pageNumber>1)
- {
- query_params = self.joinUrlParam(query_params, "sf_paged="+pageNumber);
- }
- }
-
- //add sfid
- //query_params = self.joinUrlParam(query_params, "sfid="+self.sfid);
-
- // loop through any extra params (from ext plugins) and add to the url (ie woocommerce `orderby`)
- /*var extra_query_param = "";
- var length = Object.keys(self.extra_query_params).length;
- var count = 0;
-
- if(length>0)
- {
-
- for (var k in self.extra_query_params) {
- if (self.extra_query_params.hasOwnProperty(k)) {
-
- if(self.extra_query_params[k]!="")
- {
- extra_query_param = k+"="+self.extra_query_params[k];
- query_params = self.joinUrlParam(query_params, extra_query_param);
- }
- */
- query_params = self.addQueryParams(query_params, self.extra_query_params.all);
-
- if(type!="")
- {
- //query_params = self.addQueryParams(query_params, self.extra_query_params[type]);
- }
-
- return query_params;
- }
- this.addQueryParams = function(query_params, new_params)
- {
- var extra_query_param = "";
- var length = Object.keys(new_params).length;
- var count = 0;
-
- if(length>0)
- {
-
- for (var k in new_params) {
- if (new_params.hasOwnProperty(k)) {
-
- if(new_params[k]!="")
- {
- extra_query_param = k+"="+new_params[k];
- query_params = self.joinUrlParam(query_params, extra_query_param);
- }
- }
- }
- }
-
- return query_params;
- }
- this.addUrlParam = function(url, string)
- {
- var add_params = "";
-
- if(url!="")
- {
- if(url.indexOf("?") != -1)
- {
- add_params += "&";
- }
- else
- {
- //url = this.trailingSlashIt(url);
- add_params += "?";
- }
- }
-
- if(string!="")
- {
-
- return url + add_params + string;
- }
- else
- {
- return url;
- }
- };
-
- this.joinUrlParam = function(params, string)
- {
- var add_params = "";
-
- if(params!="")
- {
- add_params += "&";
- }
-
- if(string!="")
- {
-
- return params + add_params + string;
- }
- else
- {
- return params;
- }
- };
-
- this.setAjaxResultsURLs = function(query_params)
- {
- if(typeof(self.ajax_results_conf)=="undefined")
- {
- self.ajax_results_conf = new Array();
- }
-
- self.ajax_results_conf['processing_url'] = "";
- self.ajax_results_conf['results_url'] = "";
- self.ajax_results_conf['data_type'] = "";
-
- //if(self.ajax_url!="")
- if(self.display_result_method=="shortcode")
- {//then we want to do a request to the ajax endpoint
- self.ajax_results_conf['results_url'] = self.addUrlParam(self.results_url, query_params);
-
- //add lang code to ajax api request, lang code should already be in there for other requests (ie, supplied in the Results URL)
-
- if(self.lang_code!="")
- {
- //so add it
- query_params = self.joinUrlParam(query_params, "lang="+self.lang_code);
- }
-
- self.ajax_results_conf['processing_url'] = self.addUrlParam(self.ajax_url, query_params);
- //self.ajax_results_conf['data_type'] = 'json';
-
- }
- else if(self.display_result_method=="post_type_archive")
- {
- process_form.setTaxArchiveResultsUrl(self, self.results_url);
- var results_url = process_form.getResultsUrl(self, self.results_url);
-
- self.ajax_results_conf['results_url'] = self.addUrlParam(results_url, query_params);
- self.ajax_results_conf['processing_url'] = self.addUrlParam(results_url, query_params);
-
- }
- else if(self.display_result_method=="custom_woocommerce_store")
- {
- process_form.setTaxArchiveResultsUrl(self, self.results_url);
- var results_url = process_form.getResultsUrl(self, self.results_url);
-
- self.ajax_results_conf['results_url'] = self.addUrlParam(results_url, query_params);
- self.ajax_results_conf['processing_url'] = self.addUrlParam(results_url, query_params);
-
- }
- else
- {//otherwise we want to pull the results directly from the results page
- self.ajax_results_conf['results_url'] = self.addUrlParam(self.results_url, query_params);
- self.ajax_results_conf['processing_url'] = self.addUrlParam(self.ajax_url, query_params);
- //self.ajax_results_conf['data_type'] = 'html';
- }
-
- self.ajax_results_conf['processing_url'] = self.addQueryParams(self.ajax_results_conf['processing_url'], self.extra_query_params['ajax']);
-
- self.ajax_results_conf['data_type'] = self.ajax_data_type;
- };
-
-
-
- this.updateLoaderTag = function($object) {
-
- var $parent;
-
- if(self.infinite_scroll_result_class!="")
- {
- $parent = self.$infinite_scroll_container.find(self.infinite_scroll_result_class).last().parent();
- }
- else
- {
- $parent = self.$infinite_scroll_container;
- }
-
- var tagName = $parent.prop("tagName");
-
- var tagType = 'div';
- if( ( tagName.toLowerCase() == 'ol' ) || ( tagName.toLowerCase() == 'ul' ) ){
- tagType = 'li';
- }
-
- var $new = $('<'+tagType+' />').html($object.html());
- var attributes = $object.prop("attributes");
-
- // loop through attributes and apply them on
- $.each(attributes, function() {
- $new.attr(this.name, this.value);
- });
-
- return $new;
-
- }
-
-
- this.loadMoreResults = function()
- {
- if ( this.is_max_paged === true ) {
- return;
- }
- self.is_loading_more = true;
-
- //trigger start event
- var event_data = {
- sfid: self.sfid,
- targetSelector: self.ajax_target_attr,
- type: "load_more",
- object: self
- };
-
- self.triggerEvent("sf:ajaxstart", event_data);
- process_form.setTaxArchiveResultsUrl(self, self.results_url);
- var query_params = self.getUrlParams(true);
- self.last_submit_query_params = self.getUrlParams(false); //grab a copy of hte URL params without pagination already added
-
- var ajax_processing_url = "";
- var ajax_results_url = "";
- var data_type = "";
-
-
- //now add the new pagination
- var next_paged_number = this.current_paged + 1;
- query_params = self.joinUrlParam(query_params, "sf_paged="+next_paged_number);
-
- self.setAjaxResultsURLs(query_params);
- ajax_processing_url = self.ajax_results_conf['processing_url'];
- ajax_results_url = self.ajax_results_conf['results_url'];
- data_type = self.ajax_results_conf['data_type'];
-
- //abort any previous ajax requests
- if(self.last_ajax_request)
- {
- self.last_ajax_request.abort();
- }
-
- if(self.use_scroll_loader==1)
- {
- var $loader = $('
',{
- 'class': 'search-filter-scroll-loading'
- });//.appendTo(self.$ajax_results_container);
-
- $loader = self.updateLoaderTag($loader);
-
- self.infiniteScrollAppend($loader);
- }
- self.last_ajax_request = $.get(ajax_processing_url, function(data, status, request)
- {
- self.current_paged++;
- self.last_ajax_request = null;
-
- // **************
- // TODO - PASTE THIS AND WATCH THE REDIRECT - ONLY HAPPENS WITH WC (CPT AND TAX DOES NOT)
- // https://search-filter.test/product-category/clothing/tshirts/page/3/?sf_paged=3
-
- //updates the resutls & form html
- self.addResults(data, data_type);
-
- }, data_type).fail(function(jqXHR, textStatus, errorThrown)
- {
- var data = {};
- data.sfid = self.sfid;
- data.object = self;
- data.targetSelector = self.ajax_target_attr;
- data.ajaxURL = ajax_processing_url;
- data.jqXHR = jqXHR;
- data.textStatus = textStatus;
- data.errorThrown = errorThrown;
- self.triggerEvent("sf:ajaxerror", data);
-
- }).always(function()
- {
- var data = {};
- data.sfid = self.sfid;
- data.targetSelector = self.ajax_target_attr;
- data.object = self;
-
- if(self.use_scroll_loader==1)
- {
- $loader.detach();
- }
-
- self.is_loading_more = false;
-
- self.triggerEvent("sf:ajaxfinish", data);
- });
-
- }
- this.fetchAjaxResults = function()
- {
- //trigger start event
- var event_data = {
- sfid: self.sfid,
- targetSelector: self.ajax_target_attr,
- type: "load_results",
- object: self
- };
-
- self.triggerEvent("sf:ajaxstart", event_data);
-
- //refocus any input fields after the form has been updated
- var $last_active_input_text = $this.find('input[type="text"]:focus').not(".sf-datepicker");
- if($last_active_input_text.length==1)
- {
- var last_active_input_text = $last_active_input_text.attr("name");
- }
-
- $this.addClass("search-filter-disabled");
- process_form.disableInputs(self);
-
- //fade out results
- self.$ajax_results_container.animate({ opacity: 0.5 }, "fast"); //loading
- self.fadeContentAreas( "out" );
-
- if(self.ajax_action=="pagination")
- {
- //need to remove active filter from URL
-
- //query_params = self.last_submit_query_params;
-
- //now add the new pagination
- var pageNumber = self.$ajax_results_container.attr("data-paged");
-
- if(typeof(pageNumber)=="undefined")
- {
- pageNumber = 1;
- }
- process_form.setTaxArchiveResultsUrl(self, self.results_url);
- query_params = self.getUrlParams(false);
-
- if(pageNumber>1)
- {
- query_params = self.joinUrlParam(query_params, "sf_paged="+pageNumber);
- }
-
- }
- else if(self.ajax_action=="submit")
- {
- var query_params = self.getUrlParams(true);
- self.last_submit_query_params = self.getUrlParams(false); //grab a copy of hte URL params without pagination already added
- }
-
- var ajax_processing_url = "";
- var ajax_results_url = "";
- var data_type = "";
-
- self.setAjaxResultsURLs(query_params);
- ajax_processing_url = self.ajax_results_conf['processing_url'];
- ajax_results_url = self.ajax_results_conf['results_url'];
- data_type = self.ajax_results_conf['data_type'];
-
-
- //abort any previous ajax requests
- if(self.last_ajax_request)
- {
- self.last_ajax_request.abort();
- }
- var ajax_action = self.ajax_action;
- self.last_ajax_request = $.get(ajax_processing_url, function(data, status, request)
- {
- self.last_ajax_request = null;
-
- //updates the resutls & form html
- self.updateResults(data, data_type);
-
- // scroll
- // set the var back to what it was before the ajax request nad the form re-init
- self.ajax_action = ajax_action;
- self.scrollResults( self.ajax_action );
-
- /* update URL */
- //update url before pagination, because we need to do some checks agains the URL for infinite scroll
- self.updateUrlHistory(ajax_results_url);
-
- //setup pagination
- self.setupAjaxPagination();
-
- self.isSubmitting = false;
-
- /* user def */
- self.initWooCommerceControls(); //woocommerce orderby
-
-
- }, data_type).fail(function(jqXHR, textStatus, errorThrown)
- {
- var data = {};
- data.sfid = self.sfid;
- data.targetSelector = self.ajax_target_attr;
- data.object = self;
- data.ajaxURL = ajax_processing_url;
- data.jqXHR = jqXHR;
- data.textStatus = textStatus;
- data.errorThrown = errorThrown;
- self.isSubmitting = false;
- self.triggerEvent("sf:ajaxerror", data);
-
- }).always(function()
- {
- self.$ajax_results_container.stop(true,true).animate({ opacity: 1}, "fast"); //finished loading
- self.fadeContentAreas( "in" );
- var data = {};
- data.sfid = self.sfid;
- data.targetSelector = self.ajax_target_attr;
- data.object = self;
- $this.removeClass("search-filter-disabled");
- process_form.enableInputs(self);
-
- //refocus the last active text field
- if(last_active_input_text!="")
- {
- var $input = [];
- self.$fields.each(function(){
-
- var $active_input = $(this).find("input[name='"+last_active_input_text+"']");
- if($active_input.length==1)
- {
- $input = $active_input;
- }
-
- });
- if($input.length==1) {
-
- $input.focus().val($input.val());
- self.focusCampo($input[0]);
- }
- }
-
- $this.find("input[name='_sf_search']").trigger('focus');
- self.triggerEvent("sf:ajaxfinish", data );
-
- });
- };
-
- this.focusCampo = function(inputField){
- //var inputField = document.getElementById(id);
- if (inputField != null && inputField.value.length != 0){
- if (inputField.createTextRange){
- var FieldRange = inputField.createTextRange();
- FieldRange.moveStart('character',inputField.value.length);
- FieldRange.collapse();
- FieldRange.select();
- }else if (inputField.selectionStart || inputField.selectionStart == '0') {
- var elemLen = inputField.value.length;
- inputField.selectionStart = elemLen;
- inputField.selectionEnd = elemLen;
- }
- inputField.blur();
- inputField.focus();
- } else{
- if ( inputField ) {
- inputField.focus();
- }
-
- }
- }
-
- this.triggerEvent = function(eventname, data)
- {
- var $event_container = $(".searchandfilter[data-sf-form-id='"+self.sfid+"']");
- $event_container.trigger(eventname, [ data ]);
- }
-
- this.fetchAjaxForm = function()
- {
- //trigger start event
- var event_data = {
- sfid: self.sfid,
- targetSelector: self.ajax_target_attr,
- type: "form",
- object: self
- };
-
- self.triggerEvent("sf:ajaxformstart", [ event_data ]);
-
- $this.addClass("search-filter-disabled");
- process_form.disableInputs(self);
-
- var query_params = self.getUrlParams();
-
- if(self.lang_code!="")
- {
- //so add it
- query_params = self.joinUrlParam(query_params, "lang="+self.lang_code);
- }
-
- var ajax_processing_url = self.addUrlParam(self.ajax_form_url, query_params);
- var data_type = "json";
-
-
- //abort any previous ajax requests
- /*if(self.last_ajax_request)
- {
- self.last_ajax_request.abort();
- }*/
-
-
- //self.last_ajax_request =
-
- $.get(ajax_processing_url, function(data, status, request)
- {
- //self.last_ajax_request = null;
-
- //updates the resutls & form html
- self.updateForm(data, data_type);
-
-
- }, data_type).fail(function(jqXHR, textStatus, errorThrown)
- {
- var data = {};
- data.sfid = self.sfid;
- data.targetSelector = self.ajax_target_attr;
- data.object = self;
- data.ajaxURL = ajax_processing_url;
- data.jqXHR = jqXHR;
- data.textStatus = textStatus;
- data.errorThrown = errorThrown;
- self.triggerEvent("sf:ajaxerror", [ data ]);
-
- }).always(function()
- {
- var data = {};
- data.sfid = self.sfid;
- data.targetSelector = self.ajax_target_attr;
- data.object = self;
-
- $this.removeClass("search-filter-disabled");
- process_form.enableInputs(self);
-
- self.triggerEvent("sf:ajaxformfinish", [ data ]);
- });
- };
-
- this.copyListItemsContents = function($list_from, $list_to)
- {
- //copy over child list items
- var li_contents_array = new Array();
- var from_attributes = new Array();
-
- var $from_fields = $list_from.find("> ul > li");
-
- $from_fields.each(function(i){
-
- li_contents_array.push($(this).html());
-
- var attributes = $(this).prop("attributes");
- from_attributes.push(attributes);
-
- //var field_name = $(this).attr("data-sf-field-name");
- //var to_field = $list_to.find("> ul > li[data-sf-field-name='"+field_name+"']");
-
- //self.copyAttributes($(this), $list_to, "data-sf-");
-
- });
-
- var li_it = 0;
- var $to_fields = $list_to.find("> ul > li");
- $to_fields.each(function(i){
- $(this).html(li_contents_array[li_it]);
-
- var $from_field = $($from_fields.get(li_it));
-
- var $to_field = $(this);
- $to_field.removeAttr("data-sf-taxonomy-archive");
- self.copyAttributes($from_field, $to_field);
-
- li_it++;
- });
-
- /*var $from_fields = $list_from.find(" ul > li");
- var $to_fields = $list_to.find(" > li");
- $from_fields.each(function(index, val){
- if($(this).hasAttribute("data-sf-taxonomy-archive"))
- {
-
- }
- });
-
- this.copyAttributes($list_from, $list_to);*/
- }
-
- this.updateFormAttributes = function($list_from, $list_to)
- {
- var from_attributes = $list_from.prop("attributes");
- // loop through
attributes and apply them on
-
- var to_attributes = $list_to.prop("attributes");
- $.each(to_attributes, function() {
- $list_to.removeAttr(this.name);
- });
-
- $.each(from_attributes, function() {
- $list_to.attr(this.name, this.value);
- });
-
- }
-
- this.copyAttributes = function($from, $to, prefix)
- {
- if(typeof(prefix)=="undefined")
- {
- var prefix = "";
- }
-
- var from_attributes = $from.prop("attributes");
-
- var to_attributes = $to.prop("attributes");
- $.each(to_attributes, function() {
-
- if(prefix!="") {
- if (this.name.indexOf(prefix) == 0) {
- $to.removeAttr(this.name);
- }
- }
- else
- {
- //$to.removeAttr(this.name);
- }
- });
-
- $.each(from_attributes, function() {
- $to.attr(this.name, this.value);
- });
- }
-
- this.copyFormAttributes = function($from, $to)
- {
- $to.removeAttr("data-current-taxonomy-archive");
- this.copyAttributes($from, $to);
-
- }
-
- this.updateForm = function(data, data_type)
- {
- if(data_type=="json")
- {//then we did a request to the ajax endpoint, so expect an object back
-
- if(typeof(data['form'])!=="undefined")
- {
- //remove all events from S&F form
- $this.off();
-
- //refresh the form (auto count)
- self.copyListItemsContents($(data['form']), $this);
-
- //re init S&F class on the form
- //$this.searchAndFilter();
-
- //if ajax is enabled init the pagination
-
- this.init(true);
-
- if(self.is_ajax==1)
- {
- self.setupAjaxPagination();
- }
-
-
-
- }
- }
-
-
- }
- this.addResults = function(data, data_type)
- {
- if(data_type=="json")
- {//then we did a request to the ajax endpoint, so expect an object back
- //grab the results and load in
- //self.$ajax_results_container.append(data['results']);
- self.load_more_html = data['results'];
- }
- else if(data_type=="html")
- {//we are expecting the html of the results page back, so extract the html we need
- var $data_obj = $(data);
- self.load_more_html = $data_obj.find(self.ajax_target_attr).html();
- }
-
- console.log("NEW HTML", self.load_more_html);
-
- var infinite_scroll_end = false;
-
- if($("
"+self.load_more_html+"
").find("[data-search-filter-action='infinite-scroll-end']").length>0)
- {
- infinite_scroll_end = true;
- }
-
- //if there is another selector for infinite scroll, find the contents of that instead
- if(self.infinite_scroll_container!="")
- {
- self.load_more_html = $("
"+self.load_more_html+"
").find(self.infinite_scroll_container).html();
- }
- if(self.infinite_scroll_result_class!="")
- {
- var $result_items = $("
"+self.load_more_html+"
").find(self.infinite_scroll_result_class);
- var $result_items_container = $('
', {});
- $result_items_container.append($result_items);
-
- self.load_more_html = $result_items_container.html();
- }
-
- if(infinite_scroll_end)
- {//we found a data attribute signalling the last page so finish here
-
- self.is_max_paged = true;
- self.last_load_more_html = self.load_more_html;
-
- self.infiniteScrollAppend(self.load_more_html);
-
- }
- else if(self.last_load_more_html!==self.load_more_html)
- {
- //check to make sure the new html fetched is different
- self.last_load_more_html = self.load_more_html;
- self.infiniteScrollAppend(self.load_more_html);
-
- }
- else
- {//we received the same message again so don't add, and tell S&F that we're at the end..
- self.is_max_paged = true;
- }
- }
-
-
- this.infiniteScrollAppend = function($object)
- {
- if(self.infinite_scroll_result_class!="")
- {
- self.$infinite_scroll_container.find(self.infinite_scroll_result_class).last().after($object);
- }
- else
- {
- self.$infinite_scroll_container.append($object);
- }
- }
-
-
- this.updateResults = function(data, data_type)
- {
- if(data_type=="json")
- {//then we did a request to the ajax endpoint, so expect an object back
- //grab the results and load in
- this.results_html = data['results'];
-
- if ( this.replace_results ) {
- self.$ajax_results_container.html(this.results_html);
- }
-
- if(typeof(data['form'])!=="undefined")
- {
- //remove all events from S&F form
- $this.off();
-
- //remove pagination
- self.removeAjaxPagination();
-
- //refresh the form (auto count)
- self.copyListItemsContents($(data['form']), $this);
-
- //update attributes on form
- self.copyFormAttributes($(data['form']), $this);
-
- //re init S&F class on the form
- $this.searchAndFilter({'isInit': false});
- }
- else
- {
- //$this.find("input").removeAttr("disabled");
- }
- }
- else if(data_type=="html") {//we are expecting the html of the results page back, so extract the html we need
-
- var $data_obj = $(data);
-
- this.results_html = $data_obj.find( this.ajax_target_attr ).html();
-
- if ( this.replace_results ) {
- self.$ajax_results_container.html(this.results_html);
- }
-
- self.updateContentAreas( $data_obj );
-
- if (self.$ajax_results_container.find(".searchandfilter").length > 0)
- {//then there are search form(s) inside the results container, so re-init them
-
- self.$ajax_results_container.find(".searchandfilter").searchAndFilter();
- }
-
- //if the current search form is not inside the results container, then proceed as normal and update the form
- if(self.$ajax_results_container.find(".searchandfilter[data-sf-form-id='" + self.sfid + "']").length==0) {
-
- var $new_search_form = $data_obj.find(".searchandfilter[data-sf-form-id='" + self.sfid + "']");
-
- if ($new_search_form.length == 1) {//then replace the search form with the new one
-
- //remove all events from S&F form
- $this.off();
-
- //remove pagination
- self.removeAjaxPagination();
-
- //refresh the form (auto count)
- self.copyListItemsContents($new_search_form, $this);
-
- //update attributes on form
- self.copyFormAttributes($new_search_form, $this);
-
- //re init S&F class on the form
- $this.searchAndFilter({'isInit': false});
-
- }
- else {
-
- //$this.find("input").removeAttr("disabled");
- }
- }
- }
-
- self.is_max_paged = false; //for infinite scroll
- self.current_paged = 1; //for infinite scroll
- self.setInfiniteScrollContainer();
-
- }
-
- this.updateContentAreas = function( $html_data ) {
-
- // add additional content areas
- if ( this.ajax_update_sections && this.ajax_update_sections.length ) {
- for (index = 0; index < this.ajax_update_sections.length; ++index) {
- var selector = this.ajax_update_sections[index];
- $( selector ).html( $html_data.find( selector ).html() );
- }
- }
- }
- this.fadeContentAreas = function( direction ) {
-
- var opacity = 0.5;
- if ( direction === "in" ) {
- opacity = 1;
- }
-
- if ( this.ajax_update_sections && this.ajax_update_sections.length ) {
- for (index = 0; index < this.ajax_update_sections.length; ++index) {
- var selector = this.ajax_update_sections[index];
- $( selector ).stop(true,true).animate( { opacity: opacity}, "fast" );
- }
- }
-
-
- }
-
- this.removeWooCommerceControls = function(){
- var $woo_orderby = $('.woocommerce-ordering .orderby');
- var $woo_orderby_form = $('.woocommerce-ordering');
-
- $woo_orderby_form.off();
- $woo_orderby.off();
- };
-
- this.addQueryParam = function(name, value, url_type){
-
- if(typeof(url_type)=="undefined")
- {
- var url_type = "all";
- }
- self.extra_query_params[url_type][name] = value;
-
- };
-
- this.initWooCommerceControls = function(){
-
- self.removeWooCommerceControls();
-
- var $woo_orderby = $('.woocommerce-ordering .orderby');
- var $woo_orderby_form = $('.woocommerce-ordering');
-
- var order_val = "";
- if($woo_orderby.length>0)
- {
- order_val = $woo_orderby.val();
- }
- else
- {
- order_val = self.getQueryParamFromURL("orderby", window.location.href);
- }
-
- if(order_val=="menu_order")
- {
- order_val = "";
- }
-
- if((order_val!="")&&(!!order_val))
- {
- self.extra_query_params.all.orderby = order_val;
- }
-
-
- $woo_orderby_form.on('submit', function(e)
- {
- e.preventDefault();
- //var form = e.target;
- return false;
- });
-
- $woo_orderby.on("change", function(e)
- {
- e.preventDefault();
-
- var val = $(this).val();
- if(val=="menu_order")
- {
- val = "";
- }
-
- self.extra_query_params.all.orderby = val;
-
- $this.trigger("submit")
-
- return false;
- });
-
- }
-
- this.scrollResults = function()
- {
- if((self.scroll_on_action==self.ajax_action)||(self.scroll_on_action=="all"))
- {
- self.scrollToPos(); //scroll the window if it has been set
- //self.ajax_action = "";
- }
- }
-
- this.updateUrlHistory = function(ajax_results_url)
- {
- var use_history_api = 0;
- if (window.history && window.history.pushState)
- {
- use_history_api = $this.attr("data-use-history-api");
- }
-
- if((self.update_ajax_url==1)&&(use_history_api==1))
- {
- //now check if the browser supports history state push :)
- if (window.history && window.history.pushState)
- {
- history.pushState(null, null, ajax_results_url);
- }
- }
- }
- this.removeAjaxPagination = function()
- {
- if(typeof(self.ajax_links_selector)!="undefined")
- {
- var $ajax_links_object = jQuery(self.ajax_links_selector);
-
- if($ajax_links_object.length>0)
- {
- $ajax_links_object.off();
- }
- }
- }
-
- this.getBaseUrl = function( url ) {
- //now see if we are on the URL we think...
- var url_parts = url.split("?");
- var url_base = "";
-
- if(url_parts.length>0)
- {
- url_base = url_parts[0];
- }
- else {
- url_base = url;
- }
- return url_base;
- }
- this.canFetchAjaxResults = function(fetch_type)
- {
- if(typeof(fetch_type)=="undefined")
- {
- var fetch_type = "";
- }
-
- var fetch_ajax_results = false;
-
- if(self.is_ajax==1)
- {//then we will ajax submit the form
-
- //and if we can find the results container
- if(self.$ajax_results_container.length==1)
- {
- fetch_ajax_results = true;
- }
-
- var results_url = self.results_url; //
- var results_url_encoded = ''; //
- var current_url = window.location.href;
-
- //ignore # and everything after
- var hash_pos = window.location.href.indexOf('#');
- if(hash_pos!==-1){
- current_url = window.location.href.substr(0, window.location.href.indexOf('#'));
- }
-
- if( ( ( self.display_result_method=="custom_woocommerce_store" ) || ( self.display_result_method=="post_type_archive" ) ) && ( self.enable_taxonomy_archives == 1 ) )
- {
- if( self.current_taxonomy_archive !=="" )
- {
- fetch_ajax_results = true;
- return fetch_ajax_results;
- }
-
- /*var results_url = process_form.getResultsUrl(self, self.results_url);
- var active_tax = process_form.getActiveTax();
- var query_params = self.getUrlParams(true, '', active_tax);*/
- }
-
-
-
-
- //now see if we are on the URL we think...
- var url_base = this.getBaseUrl( current_url );
- //var results_url_base = this.getBaseUrl( current_url );
-
- var lang = self.getQueryParamFromURL("lang", window.location.href);
- if((typeof(lang)!=="undefined")&&(lang!==null))
- {
- url_base = self.addUrlParam(url_base, "lang="+lang);
- }
-
- var sfid = self.getQueryParamFromURL("sfid", window.location.href);
-
- //if sfid is a number
- if(Number(parseFloat(sfid)) == sfid)
- {
- url_base = self.addUrlParam(url_base, "sfid="+sfid);
- }
-
- //if any of the 3 conditions are true, then its good to go
- // - 1 | if the url base == results_url
- // - 2 | if url base+ "/" == results_url - in case of user error in the results URL
- // - 3 | if the results URL has url params, and the current url starts with the results URL
-
- //trim any trailing slash for easier comparison:
- url_base = url_base.replace(/\/$/, '');
- results_url = results_url.replace(/\/$/, '');
- results_url_encoded = encodeURI(results_url);
-
-
- var current_url_contains_results_url = -1;
- if((url_base==results_url)||(url_base.toLowerCase()==results_url_encoded.toLowerCase()) ){
- current_url_contains_results_url = 1;
- } else {
- if ( results_url.indexOf( '?' ) !== -1 && current_url.lastIndexOf(results_url, 0) === 0 ) {
- current_url_contains_results_url = 1;
- }
- }
-
- if(self.only_results_ajax==1)
- {//if a user has chosen to only allow ajax on results pages (default behaviour)
-
- if( current_url_contains_results_url > -1)
- {//this means the current URL contains the results url, which means we can do ajax
- fetch_ajax_results = true;
- }
- else
- {
- fetch_ajax_results = false;
- }
- }
- else
- {
- if(fetch_type=="pagination")
- {
- if( current_url_contains_results_url > -1)
- {//this means the current URL contains the results url, which means we can do ajax
-
- }
- else
- {
- //don't ajax pagination when not on a S&F page
- fetch_ajax_results = false;
- }
-
-
- }
-
- }
- }
-
- return fetch_ajax_results;
- }
-
- this.setupAjaxPagination = function()
- {
- //infinite scroll
- if(this.pagination_type==="infinite_scroll")
- {
- var infinite_scroll_end = false;
- if(self.$ajax_results_container.find("[data-search-filter-action='infinite-scroll-end']").length>0)
- {
- infinite_scroll_end = true;
- self.is_max_paged = true;
- }
-
- if(parseInt(this.instance_number)===1) {
- $(window).off("scroll", self.onWindowScroll);
-
- if (self.canFetchAjaxResults("pagination")) {
- $(window).on("scroll", self.onWindowScroll);
- }
- }
- }
- else if(typeof(self.ajax_links_selector)=="undefined") {
- return;
- }
- else {
- $(document).off('click', self.ajax_links_selector);
- $(document).off(self.ajax_links_selector);
- $(self.ajax_links_selector).off();
-
- $(document).on('click', self.ajax_links_selector, function(e){
-
- if(self.canFetchAjaxResults("pagination"))
- {
- e.preventDefault();
-
- var link = jQuery(this).attr('href');
- self.ajax_action = "pagination";
-
- var pageNumber = self.getPagedFromURL(link);
-
- self.$ajax_results_container.attr("data-paged", pageNumber);
-
- self.fetchAjaxResults();
-
- return false;
- }
- });
- }
- };
-
- this.getPagedFromURL = function(URL){
-
- var pagedVal = 1;
- //first test to see if we have "/page/4/" in the URL
- var tpVal = self.getQueryParamFromURL("sf_paged", URL);
- if((typeof(tpVal)=="string")||(typeof(tpVal)=="number"))
- {
- pagedVal = tpVal;
- }
-
- return pagedVal;
- };
-
- this.getQueryParamFromURL = function(name, URL){
-
- var qstring = "?"+URL.split('?')[1];
- if(typeof(qstring)!="undefined")
- {
- var val = decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(qstring)||[,""])[1].replace(/\+/g, '%20'))||null;
- return val;
- }
- return "";
- };
-
-
-
- this.formUpdated = function(e){
-
- //e.preventDefault();
- if(self.auto_update==1) {
- self.submitForm();
- }
- else if((self.auto_update==0)&&(self.auto_count_refresh_mode==1))
- {
- self.formUpdatedFetchAjax();
- }
-
- return false;
- };
-
- this.formUpdatedFetchAjax = function(){
-
- //loop through all the fields and build the URL
- self.fetchAjaxForm();
-
-
- return false;
- };
-
- //make any corrections/updates to fields before the submit completes
- this.setFields = function(e){
-
- //if(self.is_ajax==0) {
-
- //sometimes the form is submitted without the slider yet having updated, and as we get our values from
- //the slider and not inputs, we need to check it if needs to be set
- //only occurs if ajax is off, and autosubmit on
- self.$fields.each(function() {
-
- var $field = $(this);
-
- var range_display_values = $field.find('.sf-meta-range-slider').attr("data-display-values-as");//data-display-values-as="text"
-
- if(range_display_values==="textinput") {
-
- if($field.find(".meta-slider").length>0){
-
- }
- $field.find(".meta-slider").each(function (index) {
-
- var slider_object = $(this)[0];
- var $slider_el = $(this).closest(".sf-meta-range-slider");
- //var minVal = $slider_el.attr("data-min");
- //var maxVal = $slider_el.attr("data-max");
- var minVal = $slider_el.find(".sf-range-min").val();
- var maxVal = $slider_el.find(".sf-range-max").val();
- slider_object.noUiSlider.set([minVal, maxVal]);
-
- });
- }
- });
- //}
-
- }
-
- //submit
- this.submitForm = function(e){
-
- //loop through all the fields and build the URL
- if(self.isSubmitting == true) {
- return false;
- }
-
- self.setFields();
- self.clearTimer();
-
- self.isSubmitting = true;
-
- process_form.setTaxArchiveResultsUrl(self, self.results_url);
-
- self.$ajax_results_container.attr("data-paged", 1); //init paged
-
- if(self.canFetchAjaxResults())
- {//then we will ajax submit the form
-
- self.ajax_action = "submit"; //so we know it wasn't pagination
- self.fetchAjaxResults();
- }
- else
- {//then we will simply redirect to the Results URL
-
- var results_url = process_form.getResultsUrl(self, self.results_url);
- var query_params = self.getUrlParams(true, '');
- results_url = self.addUrlParam(results_url, query_params);
-
- window.location.href = results_url;
- }
-
- return false;
- };
- this.resetForm = function(submit_form)
- {
- //unset all fields
- self.$fields.each(function(){
-
- var $field = $(this);
-
- $field.removeAttr("data-sf-taxonomy-archive");
-
- //standard field types
- $field.find("select:not([multiple='multiple']) > option:first-child").prop("selected", true);
- $field.find("select[multiple='multiple'] > option").prop("selected", false);
- $field.find("input[type='checkbox']").prop("checked", false);
- $field.find("> ul > li:first-child input[type='radio']").prop("checked", true);
- $field.find("input[type='text']").val("");
- $field.find(".sf-option-active").removeClass("sf-option-active");
- $field.find("> ul > li:first-child input[type='radio']").parent().addClass("sf-option-active"); //re add active class to first "default" option
-
- //number range - 2 number input fields
- $field.find("input[type='number']").each(function(index){
-
- var $thisInput = $(this);
-
- if($thisInput.parent().parent().hasClass("sf-meta-range")) {
-
- if(index==0) {
- $thisInput.val($thisInput.attr("min"));
- }
- else if(index==1) {
- $thisInput.val($thisInput.attr("max"));
- }
- }
-
- });
-
- //meta / numbers with 2 inputs (from / to fields) - second input must be reset to max value
- var $meta_select_from_to = $field.find(".sf-meta-range-select-fromto");
-
- if($meta_select_from_to.length>0) {
-
- var start_min = $meta_select_from_to.attr("data-min");
- var start_max = $meta_select_from_to.attr("data-max");
-
- $meta_select_from_to.find("select").each(function(index){
-
- var $thisInput = $(this);
-
- if(index==0) {
-
- $thisInput.val(start_min);
- }
- else if(index==1) {
- $thisInput.val(start_max);
- }
-
- });
- }
-
- var $meta_radio_from_to = $field.find(".sf-meta-range-radio-fromto");
-
- if($meta_radio_from_to.length>0)
- {
- var start_min = $meta_radio_from_to.attr("data-min");
- var start_max = $meta_radio_from_to.attr("data-max");
-
- var $radio_groups = $meta_radio_from_to.find('.sf-input-range-radio');
-
- $radio_groups.each(function(index){
-
-
- var $radios = $(this).find(".sf-input-radio");
- $radios.prop("checked", false);
-
- if(index==0)
- {
- $radios.filter('[value="'+start_min+'"]').prop("checked", true);
- }
- else if(index==1)
- {
- $radios.filter('[value="'+start_max+'"]').prop("checked", true);
- }
-
- });
-
- }
-
- //number slider - noUiSlider
- $field.find(".meta-slider").each(function(index){
-
- var slider_object = $(this)[0];
- /*var slider_object = $container.find(".meta-slider")[0];
- var slider_val = slider_object.noUiSlider.get();*/
-
- var $slider_el = $(this).closest(".sf-meta-range-slider");
- var minVal = $slider_el.attr("data-min");
- var maxVal = $slider_el.attr("data-max");
- slider_object.noUiSlider.set([minVal, maxVal]);
-
- });
-
- //need to see if any are combobox and act accordingly
- var $combobox = $field.find("select[data-combobox='1']");
- if($combobox.length>0)
- {
- if (typeof $combobox.chosen != "undefined")
- {
- $combobox.trigger("chosen:updated"); //for chosen only
- }
- else
- {
- $combobox.val('');
- $combobox.trigger('change.select2');
- }
- }
-
-
- });
- self.clearTimer();
-
-
-
- if(submit_form=="always")
- {
- self.submitForm();
- }
- else if(submit_form=="never")
- {
- if(this.auto_count_refresh_mode==1)
- {
- self.formUpdatedFetchAjax();
- }
- }
- else if(submit_form=="auto")
- {
- if(this.auto_update==true)
- {
- self.submitForm();
- }
- else
- {
- if(this.auto_count_refresh_mode==1)
- {
- self.formUpdatedFetchAjax();
- }
- }
- }
-
- };
-
- this.init();
-
- var event_data = {};
- event_data.sfid = self.sfid;
- event_data.targetSelector = self.ajax_target_attr;
- event_data.object = this;
- if(opts.isInit)
- {
- self.triggerEvent("sf:init", event_data);
- }
-
- });
-};
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9wdWJsaWMvYXNzZXRzL2pzL2luY2x1ZGVzL3BsdWdpbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiXG52YXIgJCBcdFx0XHRcdD0gKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ2pRdWVyeSddIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFsnalF1ZXJ5J10gOiBudWxsKTtcbnZhciBzdGF0ZSBcdFx0XHQ9IHJlcXVpcmUoJy4vc3RhdGUnKTtcbnZhciBwcm9jZXNzX2Zvcm0gXHQ9IHJlcXVpcmUoJy4vcHJvY2Vzc19mb3JtJyk7XG52YXIgbm9VaVNsaWRlclx0XHQ9IHJlcXVpcmUoJ25vdWlzbGlkZXInKTtcbi8vdmFyIGNvb2tpZXMgICAgICAgICA9IHJlcXVpcmUoJ2pzLWNvb2tpZScpO1xudmFyIHRoaXJkUGFydHkgICAgICA9IHJlcXVpcmUoJy4vdGhpcmRwYXJ0eScpO1xuXG53aW5kb3cuc2VhcmNoQW5kRmlsdGVyID0ge1xuICAgIGV4dGVuc2lvbnM6IFtdLFxuICAgIHJlZ2lzdGVyRXh0ZW5zaW9uOiBmdW5jdGlvbiggZXh0ZW5zaW9uTmFtZSApIHtcbiAgICAgICAgdGhpcy5leHRlbnNpb25zLnB1c2goIGV4dGVuc2lvbk5hbWUgKTtcbiAgICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpXG57XG4gICAgdmFyIGRlZmF1bHRzID0ge1xuICAgICAgICBzdGFydE9wZW5lZDogZmFsc2UsXG4gICAgICAgIGlzSW5pdDogdHJ1ZSxcbiAgICAgICAgYWN0aW9uOiBcIlwiXG4gICAgfTtcblxuICAgIHZhciBvcHRzID0galF1ZXJ5LmV4dGVuZChkZWZhdWx0cywgb3B0aW9ucyk7XG4gICAgXG4gICAgdGhpcmRQYXJ0eS5pbml0KCk7XG4gICAgXG4gICAgLy9sb29wIHRocm91Z2ggZWFjaCBpdGVtIG1hdGNoZWRcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24oKVxuICAgIHtcblxuICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIHRoaXMuc2ZpZCA9ICR0aGlzLmF0dHIoXCJkYXRhLXNmLWZvcm0taWRcIik7XG5cbiAgICAgICAgc3RhdGUuYWRkU2VhcmNoRm9ybSh0aGlzLnNmaWQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuJGZpZWxkcyA9ICR0aGlzLmZpbmQoXCI+IHVsID4gbGlcIik7IC8vYSByZWZlcmVuY2UgdG8gZWFjaCBmaWVsZHMgcGFyZW50IExJXG5cbiAgICAgICAgdGhpcy5lbmFibGVfdGF4b25vbXlfYXJjaGl2ZXMgPSAkdGhpcy5hdHRyKCdkYXRhLXRheG9ub215LWFyY2hpdmVzJyk7XG4gICAgICAgIHRoaXMuY3VycmVudF90YXhvbm9teV9hcmNoaXZlID0gJHRoaXMuYXR0cignZGF0YS1jdXJyZW50LXRheG9ub215LWFyY2hpdmUnKTtcblxuICAgICAgICBpZih0eXBlb2YodGhpcy5lbmFibGVfdGF4b25vbXlfYXJjaGl2ZXMpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZV90YXhvbm9teV9hcmNoaXZlcyA9IFwiMFwiO1xuICAgICAgICB9XG4gICAgICAgIGlmKHR5cGVvZih0aGlzLmN1cnJlbnRfdGF4b25vbXlfYXJjaGl2ZSk9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudF90YXhvbm9teV9hcmNoaXZlID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2Nlc3NfZm9ybS5pbml0KHNlbGYuZW5hYmxlX3RheG9ub215X2FyY2hpdmVzLCBzZWxmLmN1cnJlbnRfdGF4b25vbXlfYXJjaGl2ZSk7XG4gICAgICAgIC8vcHJvY2Vzc19mb3JtLnNldFRheEFyY2hpdmVSZXN1bHRzVXJsKHNlbGYpO1xuICAgICAgICBwcm9jZXNzX2Zvcm0uZW5hYmxlSW5wdXRzKHNlbGYpO1xuXG4gICAgICAgIGlmKHR5cGVvZih0aGlzLmV4dHJhX3F1ZXJ5X3BhcmFtcyk9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZXh0cmFfcXVlcnlfcGFyYW1zID0ge2FsbDoge30sIHJlc3VsdHM6IHt9LCBhamF4OiB7fX07XG4gICAgICAgIH1cblxuXG4gICAgICAgIHRoaXMudGVtcGxhdGVfaXNfbG9hZGVkID0gJHRoaXMuYXR0cihcImRhdGEtdGVtcGxhdGUtbG9hZGVkXCIpO1xuICAgICAgICB0aGlzLmlzX2FqYXggPSAkdGhpcy5hdHRyKFwiZGF0YS1hamF4XCIpO1xuICAgICAgICB0aGlzLmluc3RhbmNlX251bWJlciA9ICR0aGlzLmF0dHIoJ2RhdGEtaW5zdGFuY2UtY291bnQnKTtcbiAgICAgICAgdGhpcy4kYWpheF9yZXN1bHRzX2NvbnRhaW5lciA9IGpRdWVyeSgkdGhpcy5hdHRyKFwiZGF0YS1hamF4LXRhcmdldFwiKSk7XG5cbiAgICAgICAgdGhpcy5hamF4X3VwZGF0ZV9zZWN0aW9ucyA9ICR0aGlzLmF0dHIoXCJkYXRhLWFqYXgtdXBkYXRlLXNlY3Rpb25zXCIpID8gSlNPTi5wYXJzZSggJHRoaXMuYXR0cihcImRhdGEtYWpheC11cGRhdGUtc2VjdGlvbnNcIikgKSA6IFtdO1xuICAgICAgICB0aGlzLnJlcGxhY2VfcmVzdWx0cyA9ICR0aGlzLmF0dHIoXCJkYXRhLXJlcGxhY2UtcmVzdWx0c1wiKSA9PT0gXCIwXCIgPyBmYWxzZSA6IHRydWU7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnJlc3VsdHNfdXJsID0gJHRoaXMuYXR0cihcImRhdGEtcmVzdWx0cy11cmxcIik7XG4gICAgICAgIHRoaXMuZGVidWdfbW9kZSA9ICR0aGlzLmF0dHIoXCJkYXRhLWRlYnVnLW1vZGVcIik7XG4gICAgICAgIHRoaXMudXBkYXRlX2FqYXhfdXJsID0gJHRoaXMuYXR0cihcImRhdGEtdXBkYXRlLWFqYXgtdXJsXCIpO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb25fdHlwZSA9ICR0aGlzLmF0dHIoXCJkYXRhLWFqYXgtcGFnaW5hdGlvbi10eXBlXCIpO1xuICAgICAgICB0aGlzLmF1dG9fY291bnQgPSAkdGhpcy5hdHRyKFwiZGF0YS1hdXRvLWNvdW50XCIpO1xuICAgICAgICB0aGlzLmF1dG9fY291bnRfcmVmcmVzaF9tb2RlID0gJHRoaXMuYXR0cihcImRhdGEtYXV0by1jb3VudC1yZWZyZXNoLW1vZGVcIik7XG4gICAgICAgIHRoaXMub25seV9yZXN1bHRzX2FqYXggPSAkdGhpcy5hdHRyKFwiZGF0YS1vbmx5LXJlc3VsdHMtYWpheFwiKTsgLy9pZiB3ZSBhcmUgbm90IG9uIHRoZSByZXN1bHRzIHBhZ2UsIHJlZGlyZWN0IHJhdGhlciB0aGFuIHRyeSB0byBsb2FkIHZpYSBhamF4XG4gICAgICAgIHRoaXMuc2Nyb2xsX3RvX3BvcyA9ICR0aGlzLmF0dHIoXCJkYXRhLXNjcm9sbC10by1wb3NcIik7XG4gICAgICAgIHRoaXMuY3VzdG9tX3Njcm9sbF90byA9ICR0aGlzLmF0dHIoXCJkYXRhLWN1c3RvbS1zY3JvbGwtdG9cIik7XG4gICAgICAgIHRoaXMuc2Nyb2xsX29uX2FjdGlvbiA9ICR0aGlzLmF0dHIoXCJkYXRhLXNjcm9sbC1vbi1hY3Rpb25cIik7XG4gICAgICAgIHRoaXMubGFuZ19jb2RlID0gJHRoaXMuYXR0cihcImRhdGEtbGFuZy1jb2RlXCIpO1xuICAgICAgICB0aGlzLmFqYXhfdXJsID0gJHRoaXMuYXR0cignZGF0YS1hamF4LXVybCcpO1xuICAgICAgICB0aGlzLmFqYXhfZm9ybV91cmwgPSAkdGhpcy5hdHRyKCdkYXRhLWFqYXgtZm9ybS11cmwnKTtcbiAgICAgICAgdGhpcy5pc19ydGwgPSAkdGhpcy5hdHRyKCdkYXRhLWlzLXJ0bCcpO1xuXG4gICAgICAgIHRoaXMuZGlzcGxheV9yZXN1bHRfbWV0aG9kID0gJHRoaXMuYXR0cignZGF0YS1kaXNwbGF5LXJlc3VsdC1tZXRob2QnKTtcbiAgICAgICAgdGhpcy5tYWludGFpbl9zdGF0ZSA9ICR0aGlzLmF0dHIoJ2RhdGEtbWFpbnRhaW4tc3RhdGUnKTtcbiAgICAgICAgdGhpcy5hamF4X2FjdGlvbiA9IFwiXCI7XG4gICAgICAgIHRoaXMubGFzdF9zdWJtaXRfcXVlcnlfcGFyYW1zID0gXCJcIjtcblxuICAgICAgICB0aGlzLmN1cnJlbnRfcGFnZWQgPSBwYXJzZUludCgkdGhpcy5hdHRyKCdkYXRhLWluaXQtcGFnZWQnKSk7XG4gICAgICAgIHRoaXMubGFzdF9sb2FkX21vcmVfaHRtbCA9IFwiXCI7XG4gICAgICAgIHRoaXMubG9hZF9tb3JlX2h0bWwgPSBcIlwiO1xuICAgICAgICB0aGlzLmFqYXhfZGF0YV90eXBlID0gJHRoaXMuYXR0cignZGF0YS1hamF4LWRhdGEtdHlwZScpO1xuICAgICAgICB0aGlzLmFqYXhfdGFyZ2V0X2F0dHIgPSAkdGhpcy5hdHRyKFwiZGF0YS1hamF4LXRhcmdldFwiKTtcbiAgICAgICAgdGhpcy51c2VfaGlzdG9yeV9hcGkgPSAkdGhpcy5hdHRyKFwiZGF0YS11c2UtaGlzdG9yeS1hcGlcIik7XG4gICAgICAgIHRoaXMuaXNfc3VibWl0dGluZyA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMubGFzdF9hamF4X3JlcXVlc3QgPSBudWxsO1xuXG4gICAgICAgIGlmKHR5cGVvZih0aGlzLnJlc3VsdHNfaHRtbCk9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0c19odG1sID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZih0aGlzLnVzZV9oaXN0b3J5X2FwaSk9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXNlX2hpc3RvcnlfYXBpID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZih0aGlzLnBhZ2luYXRpb25fdHlwZSk9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbl90eXBlID0gXCJub3JtYWxcIjtcbiAgICAgICAgfVxuICAgICAgICBpZih0eXBlb2YodGhpcy5jdXJyZW50X3BhZ2VkKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50X3BhZ2VkID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZih0aGlzLmFqYXhfdGFyZ2V0X2F0dHIpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFqYXhfdGFyZ2V0X2F0dHIgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mKHRoaXMuYWpheF91cmwpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFqYXhfdXJsID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZih0aGlzLmFqYXhfZm9ybV91cmwpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFqYXhfZm9ybV91cmwgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mKHRoaXMucmVzdWx0c191cmwpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdHNfdXJsID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZih0aGlzLnNjcm9sbF90b19wb3MpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbF90b19wb3MgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mKHRoaXMuc2Nyb2xsX29uX2FjdGlvbik9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsX29uX2FjdGlvbiA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYodHlwZW9mKHRoaXMuY3VzdG9tX3Njcm9sbF90byk9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tX3Njcm9sbF90byA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kY3VzdG9tX3Njcm9sbF90byA9IGpRdWVyeSh0aGlzLmN1c3RvbV9zY3JvbGxfdG8pO1xuXG4gICAgICAgIGlmKHR5cGVvZih0aGlzLnVwZGF0ZV9hamF4X3VybCk9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlX2FqYXhfdXJsID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZih0aGlzLmRlYnVnX21vZGUpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnX21vZGUgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mKHRoaXMuYWpheF90YXJnZXRfb2JqZWN0KT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hamF4X3RhcmdldF9vYmplY3QgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mKHRoaXMudGVtcGxhdGVfaXNfbG9hZGVkKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZV9pc19sb2FkZWQgPSBcIjBcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZih0aGlzLmF1dG9fY291bnRfcmVmcmVzaF9tb2RlKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5hdXRvX2NvdW50X3JlZnJlc2hfbW9kZSA9IFwiMFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hamF4X2xpbmtzX3NlbGVjdG9yID0gJHRoaXMuYXR0cihcImRhdGEtYWpheC1saW5rcy1zZWxlY3RvclwiKTtcblxuXG4gICAgICAgIHRoaXMuYXV0b191cGRhdGUgPSAkdGhpcy5hdHRyKFwiZGF0YS1hdXRvLXVwZGF0ZVwiKTtcbiAgICAgICAgdGhpcy5pbnB1dFRpbWVyID0gMDtcblxuICAgICAgICB0aGlzLnNldEluZmluaXRlU2Nyb2xsQ29udGFpbmVyID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIG5hdmlnYXRlIGF3YXkgZnJvbSBzZWFyY2ggcmVzdWx0cywgYW5kIHRoZW4gcHJlc3MgYmFjayxcbiAgICAgICAgICAgIC8vIGlzX21heF9wYWdlZCBpcyByZXRhaW5lZCwgc28gd2Ugb25seSB3YW50IHRvIHNldCBpdCB0byBmYWxzZSBpZlxuICAgICAgICAgICAgLy8gd2UgYXJlIGluaXRhbGl6aW5nIHRoZSByZXN1bHRzIHBhZ2UgdGhlIGZpcnN0IHRpbWUgLSBzbyBqdXN0IFxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyB2YXIgaXMgdW5kZWZpbmVkIChhcyBpdCBzaG91bGQgYmUgb24gZmlyc3QgdXNlKTtcbiAgICAgICAgICAgIGlmICggdHlwZW9mICggdGhpcy5pc19tYXhfcGFnZWQgKSA9PT0gJ3VuZGVmaW5lZCcgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc19tYXhfcGFnZWQgPSBmYWxzZTsgLy9mb3IgbG9hZCBtb3JlIG9ubHksIG9uY2Ugd2UgZGV0ZWN0IHdlJ3JlIGF0IHRoZSBlbmQgc2V0IHRoaXMgdG8gdHJ1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnVzZV9zY3JvbGxfbG9hZGVyID0gJHRoaXMuYXR0cignZGF0YS1zaG93LXNjcm9sbC1sb2FkZXInKTtcbiAgICAgICAgICAgIHRoaXMuaW5maW5pdGVfc2Nyb2xsX2NvbnRhaW5lciA9ICR0aGlzLmF0dHIoJ2RhdGEtaW5maW5pdGUtc2Nyb2xsLWNvbnRhaW5lcicpO1xuICAgICAgICAgICAgdGhpcy5pbmZpbml0ZV9zY3JvbGxfdHJpZ2dlcl9hbW91bnQgPSAkdGhpcy5hdHRyKCdkYXRhLWluZmluaXRlLXNjcm9sbC10cmlnZ2VyJyk7XG4gICAgICAgICAgICB0aGlzLmluZmluaXRlX3Njcm9sbF9yZXN1bHRfY2xhc3MgPSAkdGhpcy5hdHRyKCdkYXRhLWluZmluaXRlLXNjcm9sbC1yZXN1bHQtY2xhc3MnKTtcbiAgICAgICAgICAgIHRoaXMuJGluZmluaXRlX3Njcm9sbF9jb250YWluZXIgPSB0aGlzLiRhamF4X3Jlc3VsdHNfY29udGFpbmVyO1xuXG4gICAgICAgICAgICBpZih0eXBlb2YodGhpcy5pbmZpbml0ZV9zY3JvbGxfY29udGFpbmVyKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZmluaXRlX3Njcm9sbF9jb250YWluZXIgPSBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuJGluZmluaXRlX3Njcm9sbF9jb250YWluZXIgPSBqUXVlcnkodGhpcy5hamF4X3RhcmdldF9hdHRyICsgJyAnICsgdGhpcy5pbmZpbml0ZV9zY3JvbGxfY29udGFpbmVyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYodHlwZW9mKHRoaXMuaW5maW5pdGVfc2Nyb2xsX3Jlc3VsdF9jbGFzcyk9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmZpbml0ZV9zY3JvbGxfcmVzdWx0X2NsYXNzID0gXCJcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYodHlwZW9mKHRoaXMudXNlX3Njcm9sbF9sb2FkZXIpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlX3Njcm9sbF9sb2FkZXIgPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2V0SW5maW5pdGVTY3JvbGxDb250YWluZXIoKTtcblxuICAgICAgICAvKiBmdW5jdGlvbnMgKi9cblxuICAgICAgICB0aGlzLnJlc2V0ID0gZnVuY3Rpb24oc3VibWl0X2Zvcm0pXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdGhpcy5yZXNldEZvcm0oc3VibWl0X2Zvcm0pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlucHV0VXBkYXRlID0gZnVuY3Rpb24oZGVsYXlEdXJhdGlvbilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodHlwZW9mKGRlbGF5RHVyYXRpb24pPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBkZWxheUR1cmF0aW9uID0gMzAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWxmLnJlc2V0VGltZXIoZGVsYXlEdXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNjcm9sbFRvUG9zID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHZhciBjYW5TY3JvbGwgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZihzZWxmLmlzX2FqYXg9PTEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYoc2VsZi5zY3JvbGxfdG9fcG9zPT1cIndpbmRvd1wiKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmKHNlbGYuc2Nyb2xsX3RvX3Bvcz09XCJmb3JtXCIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAkdGhpcy5vZmZzZXQoKS50b3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYoc2VsZi5zY3JvbGxfdG9fcG9zPT1cInJlc3VsdHNcIilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHNlbGYuJGFqYXhfcmVzdWx0c19jb250YWluZXIubGVuZ3RoPjApXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHNlbGYuJGFqYXhfcmVzdWx0c19jb250YWluZXIub2Zmc2V0KCkudG9wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYoc2VsZi5zY3JvbGxfdG9fcG9zPT1cImN1c3RvbVwiKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLy9jdXN0b21fc2Nyb2xsX3RvXG4gICAgICAgICAgICAgICAgICAgIGlmKHNlbGYuJGN1c3RvbV9zY3JvbGxfdG8ubGVuZ3RoPjApXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHNlbGYuJGN1c3RvbV9zY3JvbGxfdG8ub2Zmc2V0KCkudG9wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNhblNjcm9sbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKGNhblNjcm9sbClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICQoXCJodG1sLCBib2R5XCIpLnN0b3AoKS5hbmltYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcDogb2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgIH0sIFwibm9ybWFsXCIsIFwiZWFzZU91dFF1YWRcIiApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYXR0YWNoQWN0aXZlQ2xhc3MgPSBmdW5jdGlvbigpe1xuXG4gICAgICAgICAgICAvL2NoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgdXNpbmcgYWpheCAmIGF1dG8gY291bnRcbiAgICAgICAgICAgIC8vaWYgbm90LCB0aGUgc2VhcmNoIGZvcm0gZG9lcyBub3QgZ2V0IHJlbG9hZGVkLCBzbyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgc2Ytb3B0aW9uLWFjdGl2ZSBjbGFzcyBvbiBhbGwgZmllbGRzXG5cbiAgICAgICAgICAgICR0aGlzLm9uKCdjaGFuZ2UnLCAnaW5wdXRbdHlwZT1cInJhZGlvXCJdLCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sIHNlbGVjdCcsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyICRjdGhpcyA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgdmFyICRjdGhpc19wYXJlbnQgPSAkY3RoaXMuY2xvc2VzdChcImxpW2RhdGEtc2YtZmllbGQtbmFtZV1cIik7XG4gICAgICAgICAgICAgICAgdmFyIHRoaXNfdGFnID0gJGN0aGlzLnByb3AoXCJ0YWdOYW1lXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdmFyIGlucHV0X3R5cGUgPSAkY3RoaXMuYXR0cihcInR5cGVcIik7XG4gICAgICAgICAgICAgICAgdmFyIHBhcmVudF90YWcgPSAkY3RoaXNfcGFyZW50LnByb3AoXCJ0YWdOYW1lXCIpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgICAgICBpZigodGhpc190YWc9PVwiaW5wdXRcIikmJigoaW5wdXRfdHlwZT09XCJyYWRpb1wiKXx8KGlucHV0X3R5cGU9PVwiY2hlY2tib3hcIikpICYmIChwYXJlbnRfdGFnPT1cImxpXCIpKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRhbGxfb3B0aW9ucyA9ICRjdGhpc19wYXJlbnQucGFyZW50KCkuZmluZCgnbGknKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRhbGxfb3B0aW9uc19maWVsZHMgPSAkY3RoaXNfcGFyZW50LnBhcmVudCgpLmZpbmQoJ2lucHV0OmNoZWNrZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAkYWxsX29wdGlvbnMucmVtb3ZlQ2xhc3MoXCJzZi1vcHRpb24tYWN0aXZlXCIpO1xuICAgICAgICAgICAgICAgICAgICAkYWxsX29wdGlvbnNfZmllbGRzLmVhY2goZnVuY3Rpb24oKXtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRwYXJlbnQgPSAkKHRoaXMpLmNsb3Nlc3QoXCJsaVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJlbnQuYWRkQ2xhc3MoXCJzZi1vcHRpb24tYWN0aXZlXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYodGhpc190YWc9PVwic2VsZWN0XCIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGFsbF9vcHRpb25zID0gJGN0aGlzLmNoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgICAgICRhbGxfb3B0aW9ucy5yZW1vdmVDbGFzcyhcInNmLW9wdGlvbi1hY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aGlzX3ZhbCA9ICRjdGhpcy52YWwoKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgdGhpc19hcnJfdmFsID0gKHR5cGVvZiB0aGlzX3ZhbCA9PSAnc3RyaW5nJyB8fCB0aGlzX3ZhbCBpbnN0YW5jZW9mIFN0cmluZykgPyBbdGhpc192YWxdIDogdGhpc192YWw7XG5cbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzX2Fycl92YWwpLmVhY2goZnVuY3Rpb24oaSwgdmFsdWUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgJGN0aGlzLmZpbmQoXCJvcHRpb25bdmFsdWU9J1wiK3ZhbHVlK1wiJ11cIikuYWRkQ2xhc3MoXCJzZi1vcHRpb24tYWN0aXZlXCIpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5pbml0QXV0b1VwZGF0ZUV2ZW50cyA9IGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgICAgIC8qIGF1dG8gdXBkYXRlICovXG4gICAgICAgICAgICBpZigoc2VsZi5hdXRvX3VwZGF0ZT09MSl8fChzZWxmLmF1dG9fY291bnRfcmVmcmVzaF9tb2RlPT0xKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAkdGhpcy5vbignY2hhbmdlJywgJ2lucHV0W3R5cGU9XCJyYWRpb1wiXSwgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLCBzZWxlY3QnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXRVcGRhdGUoMjAwKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICR0aGlzLm9uKCdpbnB1dCcsICdpbnB1dFt0eXBlPVwibnVtYmVyXCJdJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0VXBkYXRlKDgwMCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgJHRleHRJbnB1dCA9ICR0aGlzLmZpbmQoJ2lucHV0W3R5cGU9XCJ0ZXh0XCJdOm5vdCguc2YtZGF0ZXBpY2tlciknKTtcbiAgICAgICAgICAgICAgICB2YXIgbGFzdFZhbHVlID0gJHRleHRJbnB1dC52YWwoKTtcblxuICAgICAgICAgICAgICAgICR0aGlzLm9uKCdpbnB1dCcsICdpbnB1dFt0eXBlPVwidGV4dFwiXTpub3QoLnNmLWRhdGVwaWNrZXIpJywgZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYobGFzdFZhbHVlIT0kdGV4dElucHV0LnZhbCgpKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0VXBkYXRlKDEyMDApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlID0gJHRleHRJbnB1dC52YWwoKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICAgICAgJHRoaXMub24oJ2tleXByZXNzJywgJ2lucHV0W3R5cGU9XCJ0ZXh0XCJdOm5vdCguc2YtZGF0ZXBpY2tlciknLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUud2hpY2ggPT0gMTMpe1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN1Ym1pdEZvcm0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyR0aGlzLm9uKCdpbnB1dCcsICdpbnB1dC5zZi1kYXRlcGlja2VyJywgc2VsZi5kYXRlSW5wdXRUeXBlKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vdGhpcy5pbml0QXV0b1VwZGF0ZUV2ZW50cygpO1xuXG5cbiAgICAgICAgdGhpcy5jbGVhclRpbWVyID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoc2VsZi5pbnB1dFRpbWVyKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yZXNldFRpbWVyID0gZnVuY3Rpb24oZGVsYXlEdXJhdGlvbilcbiAgICAgICAge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHNlbGYuaW5wdXRUaW1lcik7XG4gICAgICAgICAgICBzZWxmLmlucHV0VGltZXIgPSBzZXRUaW1lb3V0KHNlbGYuZm9ybVVwZGF0ZWQsIGRlbGF5RHVyYXRpb24pO1xuXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5hZGREYXRlUGlja2VycyA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyICRkYXRlX3BpY2tlciA9ICR0aGlzLmZpbmQoXCIuc2YtZGF0ZXBpY2tlclwiKTtcblxuICAgICAgICAgICAgaWYoJGRhdGVfcGlja2VyLmxlbmd0aD4wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICRkYXRlX3BpY2tlci5lYWNoKGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGVGb3JtYXQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZURyb3Bkb3duWWVhciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZURyb3Bkb3duTW9udGggPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgJGNsb3Nlc3RfZGF0ZV93cmFwID0gJHRoaXMuY2xvc2VzdChcIi5zZl9kYXRlX2ZpZWxkXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZigkY2xvc2VzdF9kYXRlX3dyYXAubGVuZ3RoPjApXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQgPSAkY2xvc2VzdF9kYXRlX3dyYXAuYXR0cihcImRhdGEtZGF0ZS1mb3JtYXRcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRjbG9zZXN0X2RhdGVfd3JhcC5hdHRyKFwiZGF0YS1kYXRlLXVzZS15ZWFyLWRyb3Bkb3duXCIpPT0xKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVEcm9wZG93blllYXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGNsb3Nlc3RfZGF0ZV93cmFwLmF0dHIoXCJkYXRhLWRhdGUtdXNlLW1vbnRoLWRyb3Bkb3duXCIpPT0xKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVEcm9wZG93bk1vbnRoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRlUGlja2VyT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dPdGhlck1vbnRoczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbihlLCBmcm9tX2ZpZWxkKXsgc2VsZi5kYXRlU2VsZWN0KGUsIGZyb21fZmllbGQsICQodGhpcykpOyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdDogZGF0ZUZvcm1hdCxcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTW9udGg6IGRhdGVEcm9wZG93bk1vbnRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlWWVhcjogZGF0ZURyb3Bkb3duWWVhclxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmKHNlbGYuaXNfcnRsPT0xKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlUGlja2VyT3B0aW9ucy5kaXJlY3Rpb24gPSBcInJ0bFwiO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgJHRoaXMuZGF0ZXBpY2tlcihkYXRlUGlja2VyT3B0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYoc2VsZi5sYW5nX2NvZGUhPVwiXCIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQuZGF0ZXBpY2tlci5zZXREZWZhdWx0cyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmV4dGVuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydkYXRlRm9ybWF0JzpkYXRlRm9ybWF0fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5kYXRlcGlja2VyLnJlZ2lvbmFsWyBzZWxmLmxhbmdfY29kZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkLmRhdGVwaWNrZXIuc2V0RGVmYXVsdHMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5leHRlbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnZGF0ZUZvcm1hdCc6ZGF0ZUZvcm1hdH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZGF0ZXBpY2tlci5yZWdpb25hbFtcImVuXCJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmKCQoJy5sbC1za2luLW1lbG9uJykubGVuZ3RoPT0wKXtcblxuICAgICAgICAgICAgICAgICAgICAkZGF0ZV9waWNrZXIuZGF0ZXBpY2tlcignd2lkZ2V0Jykud3JhcCgnPGRpdiBjbGFzcz1cImxsLXNraW4tbWVsb24gc2VhcmNoYW5kZmlsdGVyLWRhdGUtcGlja2VyXCIvPicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZGF0ZVNlbGVjdCA9IGZ1bmN0aW9uKGUsIGZyb21fZmllbGQsICR0aGlzKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgJGlucHV0X2ZpZWxkID0gJChmcm9tX2ZpZWxkLmlucHV0LmdldCgwKSk7XG4gICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xuXG4gICAgICAgICAgICB2YXIgJGRhdGVfZmllbGRzID0gJGlucHV0X2ZpZWxkLmNsb3Nlc3QoJ1tkYXRhLXNmLWZpZWxkLWlucHV0LXR5cGU9XCJkYXRlcmFuZ2VcIl0sIFtkYXRhLXNmLWZpZWxkLWlucHV0LXR5cGU9XCJkYXRlXCJdJyk7XG4gICAgICAgICAgICAkZGF0ZV9maWVsZHMuZWFjaChmdW5jdGlvbihlLCBpbmRleCl7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyICR0Zl9kYXRlX3BpY2tlcnMgPSAkKHRoaXMpLmZpbmQoXCIuc2YtZGF0ZXBpY2tlclwiKTtcbiAgICAgICAgICAgICAgICB2YXIgbm9fZGF0ZV9waWNrZXJzID0gJHRmX2RhdGVfcGlja2Vycy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYobm9fZGF0ZV9waWNrZXJzPjEpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAvL3RoZW4gaXQgaXMgYSBkYXRlIHJhbmdlLCBzbyBtYWtlIHN1cmUgYm90aCBmaWVsZHMgYXJlIGZpbGxlZCBiZWZvcmUgdXBkYXRpbmdcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRwX2NvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZHBfZW1wdHlfZmllbGRfY291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAkdGZfZGF0ZV9waWNrZXJzLmVhY2goZnVuY3Rpb24oKXtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoJCh0aGlzKS52YWwoKT09XCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcF9lbXB0eV9maWVsZF9jb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkcF9jb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmKGRwX2VtcHR5X2ZpZWxkX2NvdW50PT0wKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0VXBkYXRlKDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXRVcGRhdGUoMSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFkZFJhbmdlU2xpZGVycyA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyICRtZXRhX3JhbmdlID0gJHRoaXMuZmluZChcIi5zZi1tZXRhLXJhbmdlLXNsaWRlclwiKTtcblxuICAgICAgICAgICAgaWYoJG1ldGFfcmFuZ2UubGVuZ3RoPjApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgJG1ldGFfcmFuZ2UuZWFjaChmdW5jdGlvbigpe1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtaW4gPSAkdGhpcy5hdHRyKFwiZGF0YS1taW5cIik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXggPSAkdGhpcy5hdHRyKFwiZGF0YS1tYXhcIik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzbWluID0gJHRoaXMuYXR0cihcImRhdGEtc3RhcnQtbWluXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc21heCA9ICR0aGlzLmF0dHIoXCJkYXRhLXN0YXJ0LW1heFwiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3BsYXlfdmFsdWVfYXMgPSAkdGhpcy5hdHRyKFwiZGF0YS1kaXNwbGF5LXZhbHVlcy1hc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSAkdGhpcy5hdHRyKFwiZGF0YS1zdGVwXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgJHN0YXJ0X3ZhbCA9ICR0aGlzLmZpbmQoJy5zZi1yYW5nZS1taW4nKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRlbmRfdmFsID0gJHRoaXMuZmluZCgnLnNmLXJhbmdlLW1heCcpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlY2ltYWxfcGxhY2VzID0gJHRoaXMuYXR0cihcImRhdGEtZGVjaW1hbC1wbGFjZXNcIik7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aG91c2FuZF9zZXBlcmF0b3IgPSAkdGhpcy5hdHRyKFwiZGF0YS10aG91c2FuZC1zZXBlcmF0b3JcIik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkZWNpbWFsX3NlcGVyYXRvciA9ICR0aGlzLmF0dHIoXCJkYXRhLWRlY2ltYWwtc2VwZXJhdG9yXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZF9mb3JtYXQgPSB3TnVtYih7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrOiBkZWNpbWFsX3NlcGVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWxzOiBwYXJzZUZsb2F0KGRlY2ltYWxfcGxhY2VzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRob3VzYW5kOiB0aG91c2FuZF9zZXBlcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cblxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBtaW5fdW5mb3JtYXR0ZWQgPSBwYXJzZUZsb2F0KHNtaW4pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWluX2Zvcm1hdHRlZCA9IGZpZWxkX2Zvcm1hdC50byhwYXJzZUZsb2F0KHNtaW4pKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heF9mb3JtYXR0ZWQgPSBmaWVsZF9mb3JtYXQudG8ocGFyc2VGbG9hdChzbWF4KSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXhfdW5mb3JtYXR0ZWQgPSBwYXJzZUZsb2F0KHNtYXgpO1xuICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KG1pbl9mb3JtYXR0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KG1heF9mb3JtYXR0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KGRpc3BsYXlfdmFsdWVfYXMpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgaWYoZGlzcGxheV92YWx1ZV9hcz09XCJ0ZXh0aW5wdXRcIilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXJ0X3ZhbC52YWwobWluX2Zvcm1hdHRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZW5kX3ZhbC52YWwobWF4X2Zvcm1hdHRlZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihkaXNwbGF5X3ZhbHVlX2FzPT1cInRleHRcIilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXJ0X3ZhbC5odG1sKG1pbl9mb3JtYXR0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGVuZF92YWwuaHRtbChtYXhfZm9ybWF0dGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIG5vVUlPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWluJzogWyBwYXJzZUZsb2F0KG1pbikgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWF4JzogWyBwYXJzZUZsb2F0KG1heCkgXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBbbWluX2Zvcm1hdHRlZCwgbWF4X2Zvcm1hdHRlZF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA6IHBhcnNlRmxvYXQoc3RlcCksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJlaGF2aW91cjogJ2V4dGVuZC10YXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBmaWVsZF9mb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuXG5cbiAgICAgICAgICAgICAgICAgICAgaWYoc2VsZi5pc19ydGw9PTEpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vVUlPcHRpb25zLmRpcmVjdGlvbiA9IFwicnRsXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgc2xpZGVyX29iamVjdCA9ICQodGhpcykuZmluZChcIi5tZXRhLXNsaWRlclwiKVswXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiggXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mKCBzbGlkZXJfb2JqZWN0Lm5vVWlTbGlkZXIgKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZGVzdHJveSBpZiBpdCBleGlzdHMuLiB0aGlzIG1lYW5zIHNvbWVob3cgYW5vdGhlciBpbnN0YW5jZSBoYWQgaW5pdGlhbGlzZWQgaXQuLlxuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVyX29iamVjdC5ub1VpU2xpZGVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIG5vVWlTbGlkZXIuY3JlYXRlKHNsaWRlcl9vYmplY3QsIG5vVUlPcHRpb25zKTtcblxuICAgICAgICAgICAgICAgICAgICAkc3RhcnRfdmFsLm9mZigpO1xuICAgICAgICAgICAgICAgICAgICAkc3RhcnRfdmFsLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVyX29iamVjdC5ub1VpU2xpZGVyLnNldChbJCh0aGlzKS52YWwoKSwgbnVsbF0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAkZW5kX3ZhbC5vZmYoKTtcbiAgICAgICAgICAgICAgICAgICAgJGVuZF92YWwub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXJfb2JqZWN0Lm5vVWlTbGlkZXIuc2V0KFtudWxsLCAkKHRoaXMpLnZhbCgpXSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vJHN0YXJ0X3ZhbC5odG1sKG1pbl9mb3JtYXR0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAvLyRlbmRfdmFsLmh0bWwobWF4X2Zvcm1hdHRlZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyX29iamVjdC5ub1VpU2xpZGVyLm9mZigndXBkYXRlJyk7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlcl9vYmplY3Qubm9VaVNsaWRlci5vbigndXBkYXRlJywgZnVuY3Rpb24oIHZhbHVlcywgaGFuZGxlICkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xpZGVyX3N0YXJ0X3ZhbCAgPSBtaW5fZm9ybWF0dGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNsaWRlcl9lbmRfdmFsICA9IG1heF9mb3JtYXR0ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1toYW5kbGVdO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaGFuZGxlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9mb3JtYXR0ZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluX2Zvcm1hdHRlZCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkaXNwbGF5X3ZhbHVlX2FzPT1cInRleHRpbnB1dFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdGFydF92YWwudmFsKG1pbl9mb3JtYXR0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlbmRfdmFsLnZhbChtYXhfZm9ybWF0dGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoZGlzcGxheV92YWx1ZV9hcz09XCJ0ZXh0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXJ0X3ZhbC5odG1sKG1pbl9mb3JtYXR0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlbmRfdmFsLmh0bWwobWF4X2Zvcm1hdHRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9pIHRoaW5rIHRoZSBmdW5jdGlvbiB0aGF0IGJ1aWxkcyB0aGUgVVJMIG5lZWRzIHRvIGRlY29kZSB0aGUgZm9ybWF0dGVkIHN0cmluZyBiZWZvcmUgYWRkaW5nIHRvIHRoZSB1cmxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKChzZWxmLmF1dG9fdXBkYXRlPT0xKXx8KHNlbGYuYXV0b19jb3VudF9yZWZyZXNoX21vZGU9PTEpKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb25seSB0cnkgdG8gdXBkYXRlIGlmIHRoZSB2YWx1ZXMgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHNsaWRlcl9zdGFydF92YWwhPW1pbl9mb3JtYXR0ZWQpfHwoc2xpZGVyX2VuZF92YWwhPW1heF9mb3JtYXR0ZWQpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dFVwZGF0ZSg4MDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHNlbGYuY2xlYXJUaW1lcigpOyAvL2lnbm9yZSBhbnkgY2hhbmdlcyByZWNlbnRseSBtYWRlIGJ5IHRoZSBzbGlkZXIgKHRoaXMgd2FzIGp1c3QgaW5pdCBzaG91bGRuJ3QgY291bnQgYXMgYW4gdXBkYXRlIGV2ZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKGtlZXBfcGFnaW5hdGlvbilcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodHlwZW9mKGtlZXBfcGFnaW5hdGlvbik9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIGtlZXBfcGFnaW5hdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmluaXRBdXRvVXBkYXRlRXZlbnRzKCk7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaEFjdGl2ZUNsYXNzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkRGF0ZVBpY2tlcnMoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkUmFuZ2VTbGlkZXJzKCk7XG5cbiAgICAgICAgICAgIC8vaW5pdCBjb21ibyBib3hlc1xuICAgICAgICAgICAgdmFyICRjb21ib2JveCA9ICR0aGlzLmZpbmQoXCJzZWxlY3RbZGF0YS1jb21ib2JveD0nMSddXCIpO1xuXG4gICAgICAgICAgICBpZigkY29tYm9ib3gubGVuZ3RoPjApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgJGNvbWJvYm94LmVhY2goZnVuY3Rpb24oaW5kZXggKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyICR0aGlzY2IgPSAkKCB0aGlzICk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBucm0gPSAkdGhpc2NiLmF0dHIoXCJkYXRhLWNvbWJvYm94LW5ybVwiKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICR0aGlzY2IuY2hvc2VuICE9IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaG9zZW5vcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaF9jb250YWluczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHR5cGVvZihucm0pIT09XCJ1bmRlZmluZWRcIikmJihucm0pKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5vcHRpb25zLm5vX3Jlc3VsdHNfdGV4dCA9IG5ybTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNhZmUgdG8gdXNlIHRoZSBmdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9zZWFyY2hfY29udGFpbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNlbGYuaXNfcnRsPT0xKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzY2IuYWRkQ2xhc3MoXCJjaG9zZW4tcnRsXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAkdGhpc2NiLmNob3NlbihjaG9zZW5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdDJvcHRpb25zID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNlbGYuaXNfcnRsPT0xKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdDJvcHRpb25zLmRpciA9IFwicnRsXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZigodHlwZW9mKG5ybSkhPT1cInVuZGVmaW5lZFwiKSYmKG5ybSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdDJvcHRpb25zLmxhbmd1YWdlPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibm9SZXN1bHRzXCI6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnJtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXNjYi5zZWxlY3QyKHNlbGVjdDJvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWxmLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvL2lmIGFqYXggaXMgZW5hYmxlZCBpbml0IHRoZSBwYWdpbmF0aW9uXG4gICAgICAgICAgICBpZihzZWxmLmlzX2FqYXg9PTEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZi5zZXR1cEFqYXhQYWdpbmF0aW9uKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICR0aGlzLm9uKFwic3VibWl0XCIsIHRoaXMuc3VibWl0Rm9ybSk7XG5cbiAgICAgICAgICAgIHNlbGYuaW5pdFdvb0NvbW1lcmNlQ29udHJvbHMoKTsgLy93b29jb21tZXJjZSBvcmRlcmJ5XG5cbiAgICAgICAgICAgIGlmKGtlZXBfcGFnaW5hdGlvbj09ZmFsc2UpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZi5sYXN0X3N1Ym1pdF9xdWVyeV9wYXJhbXMgPSBzZWxmLmdldFVybFBhcmFtcyhmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uV2luZG93U2Nyb2xsID0gZnVuY3Rpb24oZXZlbnQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKCghc2VsZi5pc19sb2FkaW5nX21vcmUpICYmICghc2VsZi5pc19tYXhfcGFnZWQpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciB3aW5kb3dfc2Nyb2xsID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpO1xuICAgICAgICAgICAgICAgIHZhciB3aW5kb3dfc2Nyb2xsX2JvdHRvbSA9ICQod2luZG93KS5zY3JvbGxUb3AoKSArICQod2luZG93KS5oZWlnaHQoKTtcbiAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsX29mZnNldCA9IHBhcnNlSW50KHNlbGYuaW5maW5pdGVfc2Nyb2xsX3RyaWdnZXJfYW1vdW50KTtcblxuICAgICAgICAgICAgICAgIGlmKHNlbGYuJGluZmluaXRlX3Njcm9sbF9jb250YWluZXIubGVuZ3RoPT0xKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdHNfc2Nyb2xsX2JvdHRvbSA9IHNlbGYuJGluZmluaXRlX3Njcm9sbF9jb250YWluZXIub2Zmc2V0KCkudG9wICsgc2VsZi4kaW5maW5pdGVfc2Nyb2xsX2NvbnRhaW5lci5oZWlnaHQoKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gKHNlbGYuJGluZmluaXRlX3Njcm9sbF9jb250YWluZXIub2Zmc2V0KCkudG9wICsgc2VsZi4kaW5maW5pdGVfc2Nyb2xsX2NvbnRhaW5lci5oZWlnaHQoKSkgLSB3aW5kb3dfc2Nyb2xsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvd19zY3JvbGxfYm90dG9tID4gcmVzdWx0c19zY3JvbGxfYm90dG9tICsgc2Nyb2xsX29mZnNldClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkTW9yZVJlc3VsdHMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHsvL2RvbnQgbG9hZCBtb3JlXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RyaXBRdWVyeVN0cmluZ0FuZEhhc2hGcm9tUGF0aCA9IGZ1bmN0aW9uKHVybCkge1xuICAgICAgICAgICAgcmV0dXJuIHVybC5zcGxpdChcIj9cIilbMF0uc3BsaXQoXCIjXCIpWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ndXAgPSBmdW5jdGlvbiggbmFtZSwgdXJsICkge1xuICAgICAgICAgICAgaWYgKCF1cmwpIHVybCA9IGxvY2F0aW9uLmhyZWZcbiAgICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoL1tcXFtdLyxcIlxcXFxcXFtcIikucmVwbGFjZSgvW1xcXV0vLFwiXFxcXFxcXVwiKTtcbiAgICAgICAgICAgIHZhciByZWdleFMgPSBcIltcXFxcPyZdXCIrbmFtZStcIj0oW14mI10qKVwiO1xuICAgICAgICAgICAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCggcmVnZXhTICk7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHJlZ2V4LmV4ZWMoIHVybCApO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMgPT0gbnVsbCA/IG51bGwgOiByZXN1bHRzWzFdO1xuICAgICAgICB9O1xuXG5cbiAgICAgICAgdGhpcy5nZXRVcmxQYXJhbXMgPSBmdW5jdGlvbihrZWVwX3BhZ2luYXRpb24sIHR5cGUsIGV4Y2x1ZGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHR5cGVvZihrZWVwX3BhZ2luYXRpb24pPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBrZWVwX3BhZ2luYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZih0eXBlb2YodHlwZSk9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBcIlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgdXJsX3BhcmFtc19zdHIgPSBcIlwiO1xuXG4gICAgICAgICAgICAvLyBnZXQgYWxsIHBhcmFtcyBmcm9tIGZpZWxkc1xuICAgICAgICAgICAgdmFyIHVybF9wYXJhbXNfYXJyYXkgPSBwcm9jZXNzX2Zvcm0uZ2V0VXJsUGFyYW1zKHNlbGYpO1xuXG4gICAgICAgICAgICB2YXIgbGVuZ3RoID0gT2JqZWN0LmtleXModXJsX3BhcmFtc19hcnJheSkubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGNvdW50ID0gMDtcblxuICAgICAgICAgICAgaWYodHlwZW9mKGV4Y2x1ZGUpIT1cInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVybF9wYXJhbXNfYXJyYXkuaGFzT3duUHJvcGVydHkoZXhjbHVkZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihsZW5ndGg+MClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrIGluIHVybF9wYXJhbXNfYXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVybF9wYXJhbXNfYXJyYXkuaGFzT3duUHJvcGVydHkoaykpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbl9hZGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mKGV4Y2x1ZGUpIT1cInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGs9PWV4Y2x1ZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuX2FkZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2FuX2FkZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybF9wYXJhbXNfc3RyICs9IGsgKyBcIj1cIiArIHVybF9wYXJhbXNfYXJyYXlba107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPCBsZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybF9wYXJhbXNfc3RyICs9IFwiJlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBxdWVyeV9wYXJhbXMgPSBcIlwiO1xuXG4gICAgICAgICAgICAvL2Zvcm0gcGFyYW1zIGFzIHVybCBxdWVyeSBzdHJpbmdcbiAgICAgICAgICAgIHZhciBmb3JtX3BhcmFtcyA9IHVybF9wYXJhbXNfc3RyO1xuXG4gICAgICAgICAgICAvL2dldCB1cmwgcGFyYW1zIGZyb20gdGhlIGZvcm0gaXRzZWxmICh3aGF0IHRoZSB1c2VyIGhhcyBzZWxlY3RlZClcbiAgICAgICAgICAgIHF1ZXJ5X3BhcmFtcyA9IHNlbGYuam9pblVybFBhcmFtKHF1ZXJ5X3BhcmFtcywgZm9ybV9wYXJhbXMpO1xuXG4gICAgICAgICAgICAvL2FkZCBwYWdpbmF0aW9uXG4gICAgICAgICAgICBpZihrZWVwX3BhZ2luYXRpb249PXRydWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHBhZ2VOdW1iZXIgPSBzZWxmLiRhamF4X3Jlc3VsdHNfY29udGFpbmVyLmF0dHIoXCJkYXRhLXBhZ2VkXCIpO1xuXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mKHBhZ2VOdW1iZXIpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZU51bWJlciA9IDE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYocGFnZU51bWJlcj4xKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlfcGFyYW1zID0gc2VsZi5qb2luVXJsUGFyYW0ocXVlcnlfcGFyYW1zLCBcInNmX3BhZ2VkPVwiK3BhZ2VOdW1iZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9hZGQgc2ZpZFxuICAgICAgICAgICAgLy9xdWVyeV9wYXJhbXMgPSBzZWxmLmpvaW5VcmxQYXJhbShxdWVyeV9wYXJhbXMsIFwic2ZpZD1cIitzZWxmLnNmaWQpO1xuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggYW55IGV4dHJhIHBhcmFtcyAoZnJvbSBleHQgcGx1Z2lucykgYW5kIGFkZCB0byB0aGUgdXJsIChpZSB3b29jb21tZXJjZSBgb3JkZXJieWApXG4gICAgICAgICAgICAvKnZhciBleHRyYV9xdWVyeV9wYXJhbSA9IFwiXCI7XG4gICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE9iamVjdC5rZXlzKHNlbGYuZXh0cmFfcXVlcnlfcGFyYW1zKS5sZW5ndGg7XG4gICAgICAgICAgICAgdmFyIGNvdW50ID0gMDtcblxuICAgICAgICAgICAgIGlmKGxlbmd0aD4wKVxuICAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgIGZvciAodmFyIGsgaW4gc2VsZi5leHRyYV9xdWVyeV9wYXJhbXMpIHtcbiAgICAgICAgICAgICBpZiAoc2VsZi5leHRyYV9xdWVyeV9wYXJhbXMuaGFzT3duUHJvcGVydHkoaykpIHtcblxuICAgICAgICAgICAgIGlmKHNlbGYuZXh0cmFfcXVlcnlfcGFyYW1zW2tdIT1cIlwiKVxuICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICBleHRyYV9xdWVyeV9wYXJhbSA9IGsrXCI9XCIrc2VsZi5leHRyYV9xdWVyeV9wYXJhbXNba107XG4gICAgICAgICAgICAgcXVlcnlfcGFyYW1zID0gc2VsZi5qb2luVXJsUGFyYW0ocXVlcnlfcGFyYW1zLCBleHRyYV9xdWVyeV9wYXJhbSk7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBxdWVyeV9wYXJhbXMgPSBzZWxmLmFkZFF1ZXJ5UGFyYW1zKHF1ZXJ5X3BhcmFtcywgc2VsZi5leHRyYV9xdWVyeV9wYXJhbXMuYWxsKTtcblxuICAgICAgICAgICAgaWYodHlwZSE9XCJcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvL3F1ZXJ5X3BhcmFtcyA9IHNlbGYuYWRkUXVlcnlQYXJhbXMocXVlcnlfcGFyYW1zLCBzZWxmLmV4dHJhX3F1ZXJ5X3BhcmFtc1t0eXBlXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBxdWVyeV9wYXJhbXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRRdWVyeVBhcmFtcyA9IGZ1bmN0aW9uKHF1ZXJ5X3BhcmFtcywgbmV3X3BhcmFtcylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGV4dHJhX3F1ZXJ5X3BhcmFtID0gXCJcIjtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBPYmplY3Qua2V5cyhuZXdfcGFyYW1zKS5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgY291bnQgPSAwO1xuXG4gICAgICAgICAgICBpZihsZW5ndGg+MClcbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgaW4gbmV3X3BhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV3X3BhcmFtcy5oYXNPd25Qcm9wZXJ0eShrKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihuZXdfcGFyYW1zW2tdIT1cIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3F1ZXJ5X3BhcmFtID0gaytcIj1cIituZXdfcGFyYW1zW2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3BhcmFtcyA9IHNlbGYuam9pblVybFBhcmFtKHF1ZXJ5X3BhcmFtcywgZXh0cmFfcXVlcnlfcGFyYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcXVlcnlfcGFyYW1zO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkVXJsUGFyYW0gPSBmdW5jdGlvbih1cmwsIHN0cmluZylcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIGFkZF9wYXJhbXMgPSBcIlwiO1xuXG4gICAgICAgICAgICBpZih1cmwhPVwiXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYodXJsLmluZGV4T2YoXCI/XCIpICE9IC0xKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkX3BhcmFtcyArPSBcIiZcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLy91cmwgPSB0aGlzLnRyYWlsaW5nU2xhc2hJdCh1cmwpO1xuICAgICAgICAgICAgICAgICAgICBhZGRfcGFyYW1zICs9IFwiP1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoc3RyaW5nIT1cIlwiKVxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybCArIGFkZF9wYXJhbXMgKyBzdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmpvaW5VcmxQYXJhbSA9IGZ1bmN0aW9uKHBhcmFtcywgc3RyaW5nKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYWRkX3BhcmFtcyA9IFwiXCI7XG5cbiAgICAgICAgICAgIGlmKHBhcmFtcyE9XCJcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRfcGFyYW1zICs9IFwiJlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihzdHJpbmchPVwiXCIpXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zICsgYWRkX3BhcmFtcyArIHN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc2V0QWpheFJlc3VsdHNVUkxzID0gZnVuY3Rpb24ocXVlcnlfcGFyYW1zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih0eXBlb2Yoc2VsZi5hamF4X3Jlc3VsdHNfY29uZik9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZi5hamF4X3Jlc3VsdHNfY29uZiA9IG5ldyBBcnJheSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWxmLmFqYXhfcmVzdWx0c19jb25mWydwcm9jZXNzaW5nX3VybCddID0gXCJcIjtcbiAgICAgICAgICAgIHNlbGYuYWpheF9yZXN1bHRzX2NvbmZbJ3Jlc3VsdHNfdXJsJ10gPSBcIlwiO1xuICAgICAgICAgICAgc2VsZi5hamF4X3Jlc3VsdHNfY29uZlsnZGF0YV90eXBlJ10gPSBcIlwiO1xuXG4gICAgICAgICAgICAvL2lmKHNlbGYuYWpheF91cmwhPVwiXCIpXG4gICAgICAgICAgICBpZihzZWxmLmRpc3BsYXlfcmVzdWx0X21ldGhvZD09XCJzaG9ydGNvZGVcIilcbiAgICAgICAgICAgIHsvL3RoZW4gd2Ugd2FudCB0byBkbyBhIHJlcXVlc3QgdG8gdGhlIGFqYXggZW5kcG9pbnRcbiAgICAgICAgICAgICAgICBzZWxmLmFqYXhfcmVzdWx0c19jb25mWydyZXN1bHRzX3VybCddID0gc2VsZi5hZGRVcmxQYXJhbShzZWxmLnJlc3VsdHNfdXJsLCBxdWVyeV9wYXJhbXMpO1xuXG4gICAgICAgICAgICAgICAgLy9hZGQgbGFuZyBjb2RlIHRvIGFqYXggYXBpIHJlcXVlc3QsIGxhbmcgY29kZSBzaG91bGQgYWxyZWFkeSBiZSBpbiB0aGVyZSBmb3Igb3RoZXIgcmVxdWVzdHMgKGllLCBzdXBwbGllZCBpbiB0aGUgUmVzdWx0cyBVUkwpXG5cbiAgICAgICAgICAgICAgICBpZihzZWxmLmxhbmdfY29kZSE9XCJcIilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC8vc28gYWRkIGl0XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3BhcmFtcyA9IHNlbGYuam9pblVybFBhcmFtKHF1ZXJ5X3BhcmFtcywgXCJsYW5nPVwiK3NlbGYubGFuZ19jb2RlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZWxmLmFqYXhfcmVzdWx0c19jb25mWydwcm9jZXNzaW5nX3VybCddID0gc2VsZi5hZGRVcmxQYXJhbShzZWxmLmFqYXhfdXJsLCBxdWVyeV9wYXJhbXMpO1xuICAgICAgICAgICAgICAgIC8vc2VsZi5hamF4X3Jlc3VsdHNfY29uZlsnZGF0YV90eXBlJ10gPSAnanNvbic7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoc2VsZi5kaXNwbGF5X3Jlc3VsdF9tZXRob2Q9PVwicG9zdF90eXBlX2FyY2hpdmVcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzX2Zvcm0uc2V0VGF4QXJjaGl2ZVJlc3VsdHNVcmwoc2VsZiwgc2VsZi5yZXN1bHRzX3VybCk7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdHNfdXJsID0gcHJvY2Vzc19mb3JtLmdldFJlc3VsdHNVcmwoc2VsZiwgc2VsZi5yZXN1bHRzX3VybCk7XG5cbiAgICAgICAgICAgICAgICBzZWxmLmFqYXhfcmVzdWx0c19jb25mWydyZXN1bHRzX3VybCddID0gc2VsZi5hZGRVcmxQYXJhbShyZXN1bHRzX3VybCwgcXVlcnlfcGFyYW1zKTtcbiAgICAgICAgICAgICAgICBzZWxmLmFqYXhfcmVzdWx0c19jb25mWydwcm9jZXNzaW5nX3VybCddID0gc2VsZi5hZGRVcmxQYXJhbShyZXN1bHRzX3VybCwgcXVlcnlfcGFyYW1zKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihzZWxmLmRpc3BsYXlfcmVzdWx0X21ldGhvZD09XCJjdXN0b21fd29vY29tbWVyY2Vfc3RvcmVcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzX2Zvcm0uc2V0VGF4QXJjaGl2ZVJlc3VsdHNVcmwoc2VsZiwgc2VsZi5yZXN1bHRzX3VybCk7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdHNfdXJsID0gcHJvY2Vzc19mb3JtLmdldFJlc3VsdHNVcmwoc2VsZiwgc2VsZi5yZXN1bHRzX3VybCk7XG5cbiAgICAgICAgICAgICAgICBzZWxmLmFqYXhfcmVzdWx0c19jb25mWydyZXN1bHRzX3VybCddID0gc2VsZi5hZGRVcmxQYXJhbShyZXN1bHRzX3VybCwgcXVlcnlfcGFyYW1zKTtcbiAgICAgICAgICAgICAgICBzZWxmLmFqYXhfcmVzdWx0c19jb25mWydwcm9jZXNzaW5nX3VybCddID0gc2VsZi5hZGRVcmxQYXJhbShyZXN1bHRzX3VybCwgcXVlcnlfcGFyYW1zKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgey8vb3RoZXJ3aXNlIHdlIHdhbnQgdG8gcHVsbCB0aGUgcmVzdWx0cyBkaXJlY3RseSBmcm9tIHRoZSByZXN1bHRzIHBhZ2VcbiAgICAgICAgICAgICAgICBzZWxmLmFqYXhfcmVzdWx0c19jb25mWydyZXN1bHRzX3VybCddID0gc2VsZi5hZGRVcmxQYXJhbShzZWxmLnJlc3VsdHNfdXJsLCBxdWVyeV9wYXJhbXMpO1xuICAgICAgICAgICAgICAgIHNlbGYuYWpheF9yZXN1bHRzX2NvbmZbJ3Byb2Nlc3NpbmdfdXJsJ10gPSBzZWxmLmFkZFVybFBhcmFtKHNlbGYuYWpheF91cmwsIHF1ZXJ5X3BhcmFtcyk7XG4gICAgICAgICAgICAgICAgLy9zZWxmLmFqYXhfcmVzdWx0c19jb25mWydkYXRhX3R5cGUnXSA9ICdodG1sJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VsZi5hamF4X3Jlc3VsdHNfY29uZlsncHJvY2Vzc2luZ191cmwnXSA9IHNlbGYuYWRkUXVlcnlQYXJhbXMoc2VsZi5hamF4X3Jlc3VsdHNfY29uZlsncHJvY2Vzc2luZ191cmwnXSwgc2VsZi5leHRyYV9xdWVyeV9wYXJhbXNbJ2FqYXgnXSk7XG5cbiAgICAgICAgICAgIHNlbGYuYWpheF9yZXN1bHRzX2NvbmZbJ2RhdGFfdHlwZSddID0gc2VsZi5hamF4X2RhdGFfdHlwZTtcbiAgICAgICAgfTtcblxuXG5cbiAgICAgICAgdGhpcy51cGRhdGVMb2FkZXJUYWcgPSBmdW5jdGlvbigkb2JqZWN0KSB7XG5cbiAgICAgICAgICAgIHZhciAkcGFyZW50O1xuXG4gICAgICAgICAgICBpZihzZWxmLmluZmluaXRlX3Njcm9sbF9yZXN1bHRfY2xhc3MhPVwiXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgJHBhcmVudCA9IHNlbGYuJGluZmluaXRlX3Njcm9sbF9jb250YWluZXIuZmluZChzZWxmLmluZmluaXRlX3Njcm9sbF9yZXN1bHRfY2xhc3MpLmxhc3QoKS5wYXJlbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAkcGFyZW50ID0gc2VsZi4kaW5maW5pdGVfc2Nyb2xsX2NvbnRhaW5lcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHRhZ05hbWUgPSAkcGFyZW50LnByb3AoXCJ0YWdOYW1lXCIpO1xuXG4gICAgICAgICAgICB2YXIgdGFnVHlwZSA9ICdkaXYnO1xuICAgICAgICAgICAgaWYoICggdGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdvbCcgKSB8fCAoIHRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAndWwnICkgKXtcbiAgICAgICAgICAgICAgICB0YWdUeXBlID0gJ2xpJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyICRuZXcgPSAkKCc8Jyt0YWdUeXBlKycgLz4nKS5odG1sKCRvYmplY3QuaHRtbCgpKTtcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gJG9iamVjdC5wcm9wKFwiYXR0cmlidXRlc1wiKTtcblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIDxzZWxlY3Q+IGF0dHJpYnV0ZXMgYW5kIGFwcGx5IHRoZW0gb24gPGRpdj5cbiAgICAgICAgICAgICQuZWFjaChhdHRyaWJ1dGVzLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkbmV3LmF0dHIodGhpcy5uYW1lLCB0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gJG5ldztcblxuICAgICAgICB9XG5cblxuICAgICAgICB0aGlzLmxvYWRNb3JlUmVzdWx0cyA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCB0aGlzLmlzX21heF9wYWdlZCA9PT0gdHJ1ZSApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmlzX2xvYWRpbmdfbW9yZSA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vdHJpZ2dlciBzdGFydCBldmVudFxuICAgICAgICAgICAgdmFyIGV2ZW50X2RhdGEgPSB7XG4gICAgICAgICAgICAgICAgc2ZpZDogc2VsZi5zZmlkLFxuICAgICAgICAgICAgICAgIHRhcmdldFNlbGVjdG9yOiBzZWxmLmFqYXhfdGFyZ2V0X2F0dHIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJsb2FkX21vcmVcIixcbiAgICAgICAgICAgICAgICBvYmplY3Q6IHNlbGZcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHNlbGYudHJpZ2dlckV2ZW50KFwic2Y6YWpheHN0YXJ0XCIsIGV2ZW50X2RhdGEpO1xuICAgICAgICAgICAgcHJvY2Vzc19mb3JtLnNldFRheEFyY2hpdmVSZXN1bHRzVXJsKHNlbGYsIHNlbGYucmVzdWx0c191cmwpO1xuICAgICAgICAgICAgdmFyIHF1ZXJ5X3BhcmFtcyA9IHNlbGYuZ2V0VXJsUGFyYW1zKHRydWUpO1xuICAgICAgICAgICAgc2VsZi5sYXN0X3N1Ym1pdF9xdWVyeV9wYXJhbXMgPSBzZWxmLmdldFVybFBhcmFtcyhmYWxzZSk7IC8vZ3JhYiBhIGNvcHkgb2YgaHRlIFVSTCBwYXJhbXMgd2l0aG91dCBwYWdpbmF0aW9uIGFscmVhZHkgYWRkZWRcblxuICAgICAgICAgICAgdmFyIGFqYXhfcHJvY2Vzc2luZ191cmwgPSBcIlwiO1xuICAgICAgICAgICAgdmFyIGFqYXhfcmVzdWx0c191cmwgPSBcIlwiO1xuICAgICAgICAgICAgdmFyIGRhdGFfdHlwZSA9IFwiXCI7XG5cblxuICAgICAgICAgICAgLy9ub3cgYWRkIHRoZSBuZXcgcGFnaW5hdGlvblxuICAgICAgICAgICAgdmFyIG5leHRfcGFnZWRfbnVtYmVyID0gdGhpcy5jdXJyZW50X3BhZ2VkICsgMTtcbiAgICAgICAgICAgIHF1ZXJ5X3BhcmFtcyA9IHNlbGYuam9pblVybFBhcmFtKHF1ZXJ5X3BhcmFtcywgXCJzZl9wYWdlZD1cIituZXh0X3BhZ2VkX251bWJlcik7XG5cbiAgICAgICAgICAgIHNlbGYuc2V0QWpheFJlc3VsdHNVUkxzKHF1ZXJ5X3BhcmFtcyk7XG4gICAgICAgICAgICBhamF4X3Byb2Nlc3NpbmdfdXJsID0gc2VsZi5hamF4X3Jlc3VsdHNfY29uZlsncHJvY2Vzc2luZ191cmwnXTtcbiAgICAgICAgICAgIGFqYXhfcmVzdWx0c191cmwgPSBzZWxmLmFqYXhfcmVzdWx0c19jb25mWydyZXN1bHRzX3VybCddO1xuICAgICAgICAgICAgZGF0YV90eXBlID0gc2VsZi5hamF4X3Jlc3VsdHNfY29uZlsnZGF0YV90eXBlJ107XG5cbiAgICAgICAgICAgIC8vYWJvcnQgYW55IHByZXZpb3VzIGFqYXggcmVxdWVzdHNcbiAgICAgICAgICAgIGlmKHNlbGYubGFzdF9hamF4X3JlcXVlc3QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZi5sYXN0X2FqYXhfcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihzZWxmLnVzZV9zY3JvbGxfbG9hZGVyPT0xKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciAkbG9hZGVyID0gJCgnPGRpdi8+Jyx7XG4gICAgICAgICAgICAgICAgICAgICdjbGFzcyc6ICdzZWFyY2gtZmlsdGVyLXNjcm9sbC1sb2FkaW5nJ1xuICAgICAgICAgICAgICAgIH0pOy8vLmFwcGVuZFRvKHNlbGYuJGFqYXhfcmVzdWx0c19jb250YWluZXIpO1xuXG4gICAgICAgICAgICAgICAgJGxvYWRlciA9IHNlbGYudXBkYXRlTG9hZGVyVGFnKCRsb2FkZXIpO1xuXG4gICAgICAgICAgICAgICAgc2VsZi5pbmZpbml0ZVNjcm9sbEFwcGVuZCgkbG9hZGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYubGFzdF9hamF4X3JlcXVlc3QgPSAkLmdldChhamF4X3Byb2Nlc3NpbmdfdXJsLCBmdW5jdGlvbihkYXRhLCBzdGF0dXMsIHJlcXVlc3QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50X3BhZ2VkKys7XG4gICAgICAgICAgICAgICAgc2VsZi5sYXN0X2FqYXhfcmVxdWVzdCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAvLyAqKioqKioqKioqKioqKlxuICAgICAgICAgICAgICAgIC8vIFRPRE8gLSBQQVNURSBUSElTIEFORCBXQVRDSCBUSEUgUkVESVJFQ1QgLSBPTkxZIEhBUFBFTlMgV0lUSCBXQyAoQ1BUIEFORCBUQVggRE9FUyBOT1QpXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9zZWFyY2gtZmlsdGVyLnRlc3QvcHJvZHVjdC1jYXRlZ29yeS9jbG90aGluZy90c2hpcnRzL3BhZ2UvMy8/c2ZfcGFnZWQ9M1xuXG4gICAgICAgICAgICAgICAgLy91cGRhdGVzIHRoZSByZXN1dGxzICYgZm9ybSBodG1sXG4gICAgICAgICAgICAgICAgc2VsZi5hZGRSZXN1bHRzKGRhdGEsIGRhdGFfdHlwZSk7XG5cbiAgICAgICAgICAgIH0sIGRhdGFfdHlwZSkuZmFpbChmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICBkYXRhLnNmaWQgPSBzZWxmLnNmaWQ7XG4gICAgICAgICAgICAgICAgZGF0YS5vYmplY3QgPSBzZWxmO1xuICAgICAgICAgICAgICAgIGRhdGEudGFyZ2V0U2VsZWN0b3IgPSBzZWxmLmFqYXhfdGFyZ2V0X2F0dHI7XG4gICAgICAgICAgICAgICAgZGF0YS5hamF4VVJMID0gYWpheF9wcm9jZXNzaW5nX3VybDtcbiAgICAgICAgICAgICAgICBkYXRhLmpxWEhSID0ganFYSFI7XG4gICAgICAgICAgICAgICAgZGF0YS50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcbiAgICAgICAgICAgICAgICBkYXRhLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyRXZlbnQoXCJzZjphamF4ZXJyb3JcIiwgZGF0YSk7XG5cbiAgICAgICAgICAgIH0pLmFsd2F5cyhmdW5jdGlvbigpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICBkYXRhLnNmaWQgPSBzZWxmLnNmaWQ7XG4gICAgICAgICAgICAgICAgZGF0YS50YXJnZXRTZWxlY3RvciA9IHNlbGYuYWpheF90YXJnZXRfYXR0cjtcbiAgICAgICAgICAgICAgICBkYXRhLm9iamVjdCA9IHNlbGY7XG5cbiAgICAgICAgICAgICAgICBpZihzZWxmLnVzZV9zY3JvbGxfbG9hZGVyPT0xKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJGxvYWRlci5kZXRhY2goKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZWxmLmlzX2xvYWRpbmdfbW9yZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyRXZlbnQoXCJzZjphamF4ZmluaXNoXCIsIGRhdGEpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZldGNoQWpheFJlc3VsdHMgPSBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdHJpZ2dlciBzdGFydCBldmVudFxuICAgICAgICAgICAgdmFyIGV2ZW50X2RhdGEgPSB7XG4gICAgICAgICAgICAgICAgc2ZpZDogc2VsZi5zZmlkLFxuICAgICAgICAgICAgICAgIHRhcmdldFNlbGVjdG9yOiBzZWxmLmFqYXhfdGFyZ2V0X2F0dHIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJsb2FkX3Jlc3VsdHNcIixcbiAgICAgICAgICAgICAgICBvYmplY3Q6IHNlbGZcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHNlbGYudHJpZ2dlckV2ZW50KFwic2Y6YWpheHN0YXJ0XCIsIGV2ZW50X2RhdGEpO1xuXG4gICAgICAgICAgICAvL3JlZm9jdXMgYW55IGlucHV0IGZpZWxkcyBhZnRlciB0aGUgZm9ybSBoYXMgYmVlbiB1cGRhdGVkXG4gICAgICAgICAgICB2YXIgJGxhc3RfYWN0aXZlX2lucHV0X3RleHQgPSAkdGhpcy5maW5kKCdpbnB1dFt0eXBlPVwidGV4dFwiXTpmb2N1cycpLm5vdChcIi5zZi1kYXRlcGlja2VyXCIpO1xuICAgICAgICAgICAgaWYoJGxhc3RfYWN0aXZlX2lucHV0X3RleHQubGVuZ3RoPT0xKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0X2FjdGl2ZV9pbnB1dF90ZXh0ID0gJGxhc3RfYWN0aXZlX2lucHV0X3RleHQuYXR0cihcIm5hbWVcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICR0aGlzLmFkZENsYXNzKFwic2VhcmNoLWZpbHRlci1kaXNhYmxlZFwiKTtcbiAgICAgICAgICAgIHByb2Nlc3NfZm9ybS5kaXNhYmxlSW5wdXRzKHNlbGYpO1xuXG4gICAgICAgICAgICAvL2ZhZGUgb3V0IHJlc3VsdHNcbiAgICAgICAgICAgIHNlbGYuJGFqYXhfcmVzdWx0c19jb250YWluZXIuYW5pbWF0ZSh7IG9wYWNpdHk6IDAuNSB9LCBcImZhc3RcIik7IC8vbG9hZGluZ1xuICAgICAgICAgICAgc2VsZi5mYWRlQ29udGVudEFyZWFzKCBcIm91dFwiICk7XG5cbiAgICAgICAgICAgIGlmKHNlbGYuYWpheF9hY3Rpb249PVwicGFnaW5hdGlvblwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vbmVlZCB0byByZW1vdmUgYWN0aXZlIGZpbHRlciBmcm9tIFVSTFxuXG4gICAgICAgICAgICAgICAgLy9xdWVyeV9wYXJhbXMgPSBzZWxmLmxhc3Rfc3VibWl0X3F1ZXJ5X3BhcmFtcztcblxuICAgICAgICAgICAgICAgIC8vbm93IGFkZCB0aGUgbmV3IHBhZ2luYXRpb25cbiAgICAgICAgICAgICAgICB2YXIgcGFnZU51bWJlciA9IHNlbGYuJGFqYXhfcmVzdWx0c19jb250YWluZXIuYXR0cihcImRhdGEtcGFnZWRcIik7XG5cbiAgICAgICAgICAgICAgICBpZih0eXBlb2YocGFnZU51bWJlcik9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwYWdlTnVtYmVyID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvY2Vzc19mb3JtLnNldFRheEFyY2hpdmVSZXN1bHRzVXJsKHNlbGYsIHNlbGYucmVzdWx0c191cmwpO1xuICAgICAgICAgICAgICAgIHF1ZXJ5X3BhcmFtcyA9IHNlbGYuZ2V0VXJsUGFyYW1zKGZhbHNlKTtcblxuICAgICAgICAgICAgICAgIGlmKHBhZ2VOdW1iZXI+MSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3BhcmFtcyA9IHNlbGYuam9pblVybFBhcmFtKHF1ZXJ5X3BhcmFtcywgXCJzZl9wYWdlZD1cIitwYWdlTnVtYmVyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoc2VsZi5hamF4X2FjdGlvbj09XCJzdWJtaXRcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgcXVlcnlfcGFyYW1zID0gc2VsZi5nZXRVcmxQYXJhbXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgc2VsZi5sYXN0X3N1Ym1pdF9xdWVyeV9wYXJhbXMgPSBzZWxmLmdldFVybFBhcmFtcyhmYWxzZSk7IC8vZ3JhYiBhIGNvcHkgb2YgaHRlIFVSTCBwYXJhbXMgd2l0aG91dCBwYWdpbmF0aW9uIGFscmVhZHkgYWRkZWRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGFqYXhfcHJvY2Vzc2luZ191cmwgPSBcIlwiO1xuICAgICAgICAgICAgdmFyIGFqYXhfcmVzdWx0c191cmwgPSBcIlwiO1xuICAgICAgICAgICAgdmFyIGRhdGFfdHlwZSA9IFwiXCI7XG5cbiAgICAgICAgICAgIHNlbGYuc2V0QWpheFJlc3VsdHNVUkxzKHF1ZXJ5X3BhcmFtcyk7XG4gICAgICAgICAgICBhamF4X3Byb2Nlc3NpbmdfdXJsID0gc2VsZi5hamF4X3Jlc3VsdHNfY29uZlsncHJvY2Vzc2luZ191cmwnXTtcbiAgICAgICAgICAgIGFqYXhfcmVzdWx0c191cmwgPSBzZWxmLmFqYXhfcmVzdWx0c19jb25mWydyZXN1bHRzX3VybCddO1xuICAgICAgICAgICAgZGF0YV90eXBlID0gc2VsZi5hamF4X3Jlc3VsdHNfY29uZlsnZGF0YV90eXBlJ107XG5cblxuICAgICAgICAgICAgLy9hYm9ydCBhbnkgcHJldmlvdXMgYWpheCByZXF1ZXN0c1xuICAgICAgICAgICAgaWYoc2VsZi5sYXN0X2FqYXhfcmVxdWVzdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxmLmxhc3RfYWpheF9yZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYWpheF9hY3Rpb24gPSBzZWxmLmFqYXhfYWN0aW9uO1xuICAgICAgICAgICAgc2VsZi5sYXN0X2FqYXhfcmVxdWVzdCA9ICQuZ2V0KGFqYXhfcHJvY2Vzc2luZ191cmwsIGZ1bmN0aW9uKGRhdGEsIHN0YXR1cywgcmVxdWVzdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxmLmxhc3RfYWpheF9yZXF1ZXN0ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIC8vdXBkYXRlcyB0aGUgcmVzdXRscyAmIGZvcm0gaHRtbFxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlUmVzdWx0cyhkYXRhLCBkYXRhX3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgLy8gc2Nyb2xsIFxuICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgdmFyIGJhY2sgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHRoZSBhamF4IHJlcXVlc3QgbmFkIHRoZSBmb3JtIHJlLWluaXRcbiAgICAgICAgICAgICAgICBzZWxmLmFqYXhfYWN0aW9uID0gYWpheF9hY3Rpb247XG4gICAgICAgICAgICAgICAgc2VsZi5zY3JvbGxSZXN1bHRzKCBzZWxmLmFqYXhfYWN0aW9uICk7XG5cbiAgICAgICAgICAgICAgICAvKiB1cGRhdGUgVVJMICovXG4gICAgICAgICAgICAgICAgLy91cGRhdGUgdXJsIGJlZm9yZSBwYWdpbmF0aW9uLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gc29tZSBjaGVja3MgYWdhaW5zIHRoZSBVUkwgZm9yIGluZmluaXRlIHNjcm9sbFxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlVXJsSGlzdG9yeShhamF4X3Jlc3VsdHNfdXJsKTtcblxuICAgICAgICAgICAgICAgIC8vc2V0dXAgcGFnaW5hdGlvblxuICAgICAgICAgICAgICAgIHNlbGYuc2V0dXBBamF4UGFnaW5hdGlvbigpO1xuXG4gICAgICAgICAgICAgICAgc2VsZi5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIC8qIHVzZXIgZGVmICovXG4gICAgICAgICAgICAgICAgc2VsZi5pbml0V29vQ29tbWVyY2VDb250cm9scygpOyAvL3dvb2NvbW1lcmNlIG9yZGVyYnlcblxuXG4gICAgICAgICAgICB9LCBkYXRhX3R5cGUpLmZhaWwoZnVuY3Rpb24oanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge307XG4gICAgICAgICAgICAgICAgZGF0YS5zZmlkID0gc2VsZi5zZmlkO1xuICAgICAgICAgICAgICAgIGRhdGEudGFyZ2V0U2VsZWN0b3IgPSBzZWxmLmFqYXhfdGFyZ2V0X2F0dHI7XG4gICAgICAgICAgICAgICAgZGF0YS5vYmplY3QgPSBzZWxmO1xuICAgICAgICAgICAgICAgIGRhdGEuYWpheFVSTCA9IGFqYXhfcHJvY2Vzc2luZ191cmw7XG4gICAgICAgICAgICAgICAgZGF0YS5qcVhIUiA9IGpxWEhSO1xuICAgICAgICAgICAgICAgIGRhdGEudGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7XG4gICAgICAgICAgICAgICAgZGF0YS5lcnJvclRocm93biA9IGVycm9yVGhyb3duO1xuICAgICAgICAgICAgICAgIHNlbGYuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyRXZlbnQoXCJzZjphamF4ZXJyb3JcIiwgZGF0YSk7XG5cbiAgICAgICAgICAgIH0pLmFsd2F5cyhmdW5jdGlvbigpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZi4kYWpheF9yZXN1bHRzX2NvbnRhaW5lci5zdG9wKHRydWUsdHJ1ZSkuYW5pbWF0ZSh7IG9wYWNpdHk6IDF9LCBcImZhc3RcIik7IC8vZmluaXNoZWQgbG9hZGluZ1xuICAgICAgICAgICAgICAgIHNlbGYuZmFkZUNvbnRlbnRBcmVhcyggXCJpblwiICk7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICBkYXRhLnNmaWQgPSBzZWxmLnNmaWQ7XG4gICAgICAgICAgICAgICAgZGF0YS50YXJnZXRTZWxlY3RvciA9IHNlbGYuYWpheF90YXJnZXRfYXR0cjtcbiAgICAgICAgICAgICAgICBkYXRhLm9iamVjdCA9IHNlbGY7XG4gICAgICAgICAgICAgICAgJHRoaXMucmVtb3ZlQ2xhc3MoXCJzZWFyY2gtZmlsdGVyLWRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NfZm9ybS5lbmFibGVJbnB1dHMoc2VsZik7XG5cbiAgICAgICAgICAgICAgICAvL3JlZm9jdXMgdGhlIGxhc3QgYWN0aXZlIHRleHQgZmllbGRcbiAgICAgICAgICAgICAgICBpZihsYXN0X2FjdGl2ZV9pbnB1dF90ZXh0IT1cIlwiKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRpbnB1dCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLiRmaWVsZHMuZWFjaChmdW5jdGlvbigpe1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGFjdGl2ZV9pbnB1dCA9ICQodGhpcykuZmluZChcImlucHV0W25hbWU9J1wiK2xhc3RfYWN0aXZlX2lucHV0X3RleHQrXCInXVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRhY3RpdmVfaW5wdXQubGVuZ3RoPT0xKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbnB1dCA9ICRhY3RpdmVfaW5wdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKCRpbnB1dC5sZW5ndGg9PTEpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0LmZvY3VzKCkudmFsKCRpbnB1dC52YWwoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvY3VzQ2FtcG8oJGlucHV0WzBdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICR0aGlzLmZpbmQoXCJpbnB1dFtuYW1lPSdfc2Zfc2VhcmNoJ11cIikudHJpZ2dlcignZm9jdXMnKTtcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJFdmVudChcInNmOmFqYXhmaW5pc2hcIiwgIGRhdGEgKTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5mb2N1c0NhbXBvID0gZnVuY3Rpb24oaW5wdXRGaWVsZCl7XG4gICAgICAgICAgICAvL3ZhciBpbnB1dEZpZWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgICAgICAgaWYgKGlucHV0RmllbGQgIT0gbnVsbCAmJiBpbnB1dEZpZWxkLnZhbHVlLmxlbmd0aCAhPSAwKXtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRGaWVsZC5jcmVhdGVUZXh0UmFuZ2Upe1xuICAgICAgICAgICAgICAgICAgICB2YXIgRmllbGRSYW5nZSA9IGlucHV0RmllbGQuY3JlYXRlVGV4dFJhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIEZpZWxkUmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLGlucHV0RmllbGQudmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgRmllbGRSYW5nZS5jb2xsYXBzZSgpO1xuICAgICAgICAgICAgICAgICAgICBGaWVsZFJhbmdlLnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgIH1lbHNlIGlmIChpbnB1dEZpZWxkLnNlbGVjdGlvblN0YXJ0IHx8IGlucHV0RmllbGQuc2VsZWN0aW9uU3RhcnQgPT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbGVtTGVuID0gaW5wdXRGaWVsZC52YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0RmllbGQuc2VsZWN0aW9uU3RhcnQgPSBlbGVtTGVuO1xuICAgICAgICAgICAgICAgICAgICBpbnB1dEZpZWxkLnNlbGVjdGlvbkVuZCA9IGVsZW1MZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlucHV0RmllbGQuYmx1cigpO1xuICAgICAgICAgICAgICAgIGlucHV0RmllbGQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZXtcbiAgICAgICAgICAgICAgICBpZiAoIGlucHV0RmllbGQgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0RmllbGQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRyaWdnZXJFdmVudCA9IGZ1bmN0aW9uKGV2ZW50bmFtZSwgZGF0YSlcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyICRldmVudF9jb250YWluZXIgPSAkKFwiLnNlYXJjaGFuZGZpbHRlcltkYXRhLXNmLWZvcm0taWQ9J1wiK3NlbGYuc2ZpZCtcIiddXCIpO1xuICAgICAgICAgICAgJGV2ZW50X2NvbnRhaW5lci50cmlnZ2VyKGV2ZW50bmFtZSwgWyBkYXRhIF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mZXRjaEFqYXhGb3JtID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL3RyaWdnZXIgc3RhcnQgZXZlbnRcbiAgICAgICAgICAgIHZhciBldmVudF9kYXRhID0ge1xuICAgICAgICAgICAgICAgIHNmaWQ6IHNlbGYuc2ZpZCxcbiAgICAgICAgICAgICAgICB0YXJnZXRTZWxlY3Rvcjogc2VsZi5hamF4X3RhcmdldF9hdHRyLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiZm9ybVwiLFxuICAgICAgICAgICAgICAgIG9iamVjdDogc2VsZlxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgc2VsZi50cmlnZ2VyRXZlbnQoXCJzZjphamF4Zm9ybXN0YXJ0XCIsIFsgZXZlbnRfZGF0YSBdKTtcblxuICAgICAgICAgICAgJHRoaXMuYWRkQ2xhc3MoXCJzZWFyY2gtZmlsdGVyLWRpc2FibGVkXCIpO1xuICAgICAgICAgICAgcHJvY2Vzc19mb3JtLmRpc2FibGVJbnB1dHMoc2VsZik7XG5cbiAgICAgICAgICAgIHZhciBxdWVyeV9wYXJhbXMgPSBzZWxmLmdldFVybFBhcmFtcygpO1xuXG4gICAgICAgICAgICBpZihzZWxmLmxhbmdfY29kZSE9XCJcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvL3NvIGFkZCBpdFxuICAgICAgICAgICAgICAgIHF1ZXJ5X3BhcmFtcyA9IHNlbGYuam9pblVybFBhcmFtKHF1ZXJ5X3BhcmFtcywgXCJsYW5nPVwiK3NlbGYubGFuZ19jb2RlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGFqYXhfcHJvY2Vzc2luZ191cmwgPSBzZWxmLmFkZFVybFBhcmFtKHNlbGYuYWpheF9mb3JtX3VybCwgcXVlcnlfcGFyYW1zKTtcbiAgICAgICAgICAgIHZhciBkYXRhX3R5cGUgPSBcImpzb25cIjtcblxuXG4gICAgICAgICAgICAvL2Fib3J0IGFueSBwcmV2aW91cyBhamF4IHJlcXVlc3RzXG4gICAgICAgICAgICAvKmlmKHNlbGYubGFzdF9hamF4X3JlcXVlc3QpXG4gICAgICAgICAgICAge1xuICAgICAgICAgICAgIHNlbGYubGFzdF9hamF4X3JlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgICAgICB9Ki9cblxuXG4gICAgICAgICAgICAvL3NlbGYubGFzdF9hamF4X3JlcXVlc3QgPVxuXG4gICAgICAgICAgICAkLmdldChhamF4X3Byb2Nlc3NpbmdfdXJsLCBmdW5jdGlvbihkYXRhLCBzdGF0dXMsIHJlcXVlc3QpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy9zZWxmLmxhc3RfYWpheF9yZXF1ZXN0ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIC8vdXBkYXRlcyB0aGUgcmVzdXRscyAmIGZvcm0gaHRtbFxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlRm9ybShkYXRhLCBkYXRhX3R5cGUpO1xuXG5cbiAgICAgICAgICAgIH0sIGRhdGFfdHlwZSkuZmFpbChmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICBkYXRhLnNmaWQgPSBzZWxmLnNmaWQ7XG4gICAgICAgICAgICAgICAgZGF0YS50YXJnZXRTZWxlY3RvciA9IHNlbGYuYWpheF90YXJnZXRfYXR0cjtcbiAgICAgICAgICAgICAgICBkYXRhLm9iamVjdCA9IHNlbGY7XG4gICAgICAgICAgICAgICAgZGF0YS5hamF4VVJMID0gYWpheF9wcm9jZXNzaW5nX3VybDtcbiAgICAgICAgICAgICAgICBkYXRhLmpxWEhSID0ganFYSFI7XG4gICAgICAgICAgICAgICAgZGF0YS50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcbiAgICAgICAgICAgICAgICBkYXRhLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyRXZlbnQoXCJzZjphamF4ZXJyb3JcIiwgWyBkYXRhIF0pO1xuXG4gICAgICAgICAgICB9KS5hbHdheXMoZnVuY3Rpb24oKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge307XG4gICAgICAgICAgICAgICAgZGF0YS5zZmlkID0gc2VsZi5zZmlkO1xuICAgICAgICAgICAgICAgIGRhdGEudGFyZ2V0U2VsZWN0b3IgPSBzZWxmLmFqYXhfdGFyZ2V0X2F0dHI7XG4gICAgICAgICAgICAgICAgZGF0YS5vYmplY3QgPSBzZWxmO1xuXG4gICAgICAgICAgICAgICAgJHRoaXMucmVtb3ZlQ2xhc3MoXCJzZWFyY2gtZmlsdGVyLWRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NfZm9ybS5lbmFibGVJbnB1dHMoc2VsZik7XG5cbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJFdmVudChcInNmOmFqYXhmb3JtZmluaXNoXCIsIFsgZGF0YSBdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY29weUxpc3RJdGVtc0NvbnRlbnRzID0gZnVuY3Rpb24oJGxpc3RfZnJvbSwgJGxpc3RfdG8pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vY29weSBvdmVyIGNoaWxkIGxpc3QgaXRlbXNcbiAgICAgICAgICAgIHZhciBsaV9jb250ZW50c19hcnJheSA9IG5ldyBBcnJheSgpO1xuICAgICAgICAgICAgdmFyIGZyb21fYXR0cmlidXRlcyA9IG5ldyBBcnJheSgpO1xuXG4gICAgICAgICAgICB2YXIgJGZyb21fZmllbGRzID0gJGxpc3RfZnJvbS5maW5kKFwiPiB1bCA+IGxpXCIpO1xuXG4gICAgICAgICAgICAkZnJvbV9maWVsZHMuZWFjaChmdW5jdGlvbihpKXtcblxuICAgICAgICAgICAgICAgIGxpX2NvbnRlbnRzX2FycmF5LnB1c2goJCh0aGlzKS5odG1sKCkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSAkKHRoaXMpLnByb3AoXCJhdHRyaWJ1dGVzXCIpO1xuICAgICAgICAgICAgICAgIGZyb21fYXR0cmlidXRlcy5wdXNoKGF0dHJpYnV0ZXMpO1xuXG4gICAgICAgICAgICAgICAgLy92YXIgZmllbGRfbmFtZSA9ICQodGhpcykuYXR0cihcImRhdGEtc2YtZmllbGQtbmFtZVwiKTtcbiAgICAgICAgICAgICAgICAvL3ZhciB0b19maWVsZCA9ICRsaXN0X3RvLmZpbmQoXCI+IHVsID4gbGlbZGF0YS1zZi1maWVsZC1uYW1lPSdcIitmaWVsZF9uYW1lK1wiJ11cIik7XG5cbiAgICAgICAgICAgICAgICAvL3NlbGYuY29weUF0dHJpYnV0ZXMoJCh0aGlzKSwgJGxpc3RfdG8sIFwiZGF0YS1zZi1cIik7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB2YXIgbGlfaXQgPSAwO1xuICAgICAgICAgICAgdmFyICR0b19maWVsZHMgPSAkbGlzdF90by5maW5kKFwiPiB1bCA+IGxpXCIpO1xuICAgICAgICAgICAgJHRvX2ZpZWxkcy5lYWNoKGZ1bmN0aW9uKGkpe1xuICAgICAgICAgICAgICAgICQodGhpcykuaHRtbChsaV9jb250ZW50c19hcnJheVtsaV9pdF0pO1xuXG4gICAgICAgICAgICAgICAgdmFyICRmcm9tX2ZpZWxkID0gJCgkZnJvbV9maWVsZHMuZ2V0KGxpX2l0KSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgJHRvX2ZpZWxkID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICAkdG9fZmllbGQucmVtb3ZlQXR0cihcImRhdGEtc2YtdGF4b25vbXktYXJjaGl2ZVwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLmNvcHlBdHRyaWJ1dGVzKCRmcm9tX2ZpZWxkLCAkdG9fZmllbGQpO1xuXG4gICAgICAgICAgICAgICAgbGlfaXQrKztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvKnZhciAkZnJvbV9maWVsZHMgPSAkbGlzdF9mcm9tLmZpbmQoXCIgdWwgPiBsaVwiKTtcbiAgICAgICAgICAgICB2YXIgJHRvX2ZpZWxkcyA9ICRsaXN0X3RvLmZpbmQoXCIgPiBsaVwiKTtcbiAgICAgICAgICAgICAkZnJvbV9maWVsZHMuZWFjaChmdW5jdGlvbihpbmRleCwgdmFsKXtcbiAgICAgICAgICAgICBpZigkKHRoaXMpLmhhc0F0dHJpYnV0ZShcImRhdGEtc2YtdGF4b25vbXktYXJjaGl2ZVwiKSlcbiAgICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICB0aGlzLmNvcHlBdHRyaWJ1dGVzKCRsaXN0X2Zyb20sICRsaXN0X3RvKTsqL1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVGb3JtQXR0cmlidXRlcyA9IGZ1bmN0aW9uKCRsaXN0X2Zyb20sICRsaXN0X3RvKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZnJvbV9hdHRyaWJ1dGVzID0gJGxpc3RfZnJvbS5wcm9wKFwiYXR0cmlidXRlc1wiKTtcbiAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCA8c2VsZWN0PiBhdHRyaWJ1dGVzIGFuZCBhcHBseSB0aGVtIG9uIDxkaXY+XG5cbiAgICAgICAgICAgIHZhciB0b19hdHRyaWJ1dGVzID0gJGxpc3RfdG8ucHJvcChcImF0dHJpYnV0ZXNcIik7XG4gICAgICAgICAgICAkLmVhY2godG9fYXR0cmlidXRlcywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgJGxpc3RfdG8ucmVtb3ZlQXR0cih0aGlzLm5hbWUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICQuZWFjaChmcm9tX2F0dHJpYnV0ZXMsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICRsaXN0X3RvLmF0dHIodGhpcy5uYW1lLCB0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvcHlBdHRyaWJ1dGVzID0gZnVuY3Rpb24oJGZyb20sICR0bywgcHJlZml4KVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih0eXBlb2YocHJlZml4KT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJlZml4ID0gXCJcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGZyb21fYXR0cmlidXRlcyA9ICRmcm9tLnByb3AoXCJhdHRyaWJ1dGVzXCIpO1xuXG4gICAgICAgICAgICB2YXIgdG9fYXR0cmlidXRlcyA9ICR0by5wcm9wKFwiYXR0cmlidXRlc1wiKTtcbiAgICAgICAgICAgICQuZWFjaCh0b19hdHRyaWJ1dGVzLCBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgIGlmKHByZWZpeCE9XCJcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lLmluZGV4T2YocHJlZml4KSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG8ucmVtb3ZlQXR0cih0aGlzLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC8vJHRvLnJlbW92ZUF0dHIodGhpcy5uYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgJC5lYWNoKGZyb21fYXR0cmlidXRlcywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgJHRvLmF0dHIodGhpcy5uYW1lLCB0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb3B5Rm9ybUF0dHJpYnV0ZXMgPSBmdW5jdGlvbigkZnJvbSwgJHRvKVxuICAgICAgICB7XG4gICAgICAgICAgICAkdG8ucmVtb3ZlQXR0cihcImRhdGEtY3VycmVudC10YXhvbm9teS1hcmNoaXZlXCIpO1xuICAgICAgICAgICAgdGhpcy5jb3B5QXR0cmlidXRlcygkZnJvbSwgJHRvKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVGb3JtID0gZnVuY3Rpb24oZGF0YSwgZGF0YV90eXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZihkYXRhX3R5cGU9PVwianNvblwiKVxuICAgICAgICAgICAgey8vdGhlbiB3ZSBkaWQgYSByZXF1ZXN0IHRvIHRoZSBhamF4IGVuZHBvaW50LCBzbyBleHBlY3QgYW4gb2JqZWN0IGJhY2tcblxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZihkYXRhWydmb3JtJ10pIT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC8vcmVtb3ZlIGFsbCBldmVudHMgZnJvbSBTJkYgZm9ybVxuICAgICAgICAgICAgICAgICAgICAkdGhpcy5vZmYoKTtcblxuICAgICAgICAgICAgICAgICAgICAvL3JlZnJlc2ggdGhlIGZvcm0gKGF1dG8gY291bnQpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29weUxpc3RJdGVtc0NvbnRlbnRzKCQoZGF0YVsnZm9ybSddKSwgJHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vcmUgaW5pdCBTJkYgY2xhc3Mgb24gdGhlIGZvcm1cbiAgICAgICAgICAgICAgICAgICAgLy8kdGhpcy5zZWFyY2hBbmRGaWx0ZXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAvL2lmIGFqYXggaXMgZW5hYmxlZCBpbml0IHRoZSBwYWdpbmF0aW9uXG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0KHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmKHNlbGYuaXNfYWpheD09MSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXR1cEFqYXhQYWdpbmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkUmVzdWx0cyA9IGZ1bmN0aW9uKGRhdGEsIGRhdGFfdHlwZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoZGF0YV90eXBlPT1cImpzb25cIilcbiAgICAgICAgICAgIHsvL3RoZW4gd2UgZGlkIGEgcmVxdWVzdCB0byB0aGUgYWpheCBlbmRwb2ludCwgc28gZXhwZWN0IGFuIG9iamVjdCBiYWNrXG4gICAgICAgICAgICAgICAgLy9ncmFiIHRoZSByZXN1bHRzIGFuZCBsb2FkIGluXG4gICAgICAgICAgICAgICAgLy9zZWxmLiRhamF4X3Jlc3VsdHNfY29udGFpbmVyLmFwcGVuZChkYXRhWydyZXN1bHRzJ10pO1xuICAgICAgICAgICAgICAgIHNlbGYubG9hZF9tb3JlX2h0bWwgPSBkYXRhWydyZXN1bHRzJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKGRhdGFfdHlwZT09XCJodG1sXCIpXG4gICAgICAgICAgICB7Ly93ZSBhcmUgZXhwZWN0aW5nIHRoZSBodG1sIG9mIHRoZSByZXN1bHRzIHBhZ2UgYmFjaywgc28gZXh0cmFjdCB0aGUgaHRtbCB3ZSBuZWVkXG4gICAgICAgICAgICAgICAgdmFyICRkYXRhX29iaiA9ICQoZGF0YSk7XG4gICAgICAgICAgICAgICAgc2VsZi5sb2FkX21vcmVfaHRtbCA9ICRkYXRhX29iai5maW5kKHNlbGYuYWpheF90YXJnZXRfYXR0cikuaHRtbCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIk5FVyBIVE1MXCIsIHNlbGYubG9hZF9tb3JlX2h0bWwpO1xuXG4gICAgICAgICAgICB2YXIgaW5maW5pdGVfc2Nyb2xsX2VuZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZigkKFwiPGRpdj5cIitzZWxmLmxvYWRfbW9yZV9odG1sK1wiPC9kaXY+XCIpLmZpbmQoXCJbZGF0YS1zZWFyY2gtZmlsdGVyLWFjdGlvbj0naW5maW5pdGUtc2Nyb2xsLWVuZCddXCIpLmxlbmd0aD4wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGluZmluaXRlX3Njcm9sbF9lbmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGFub3RoZXIgc2VsZWN0b3IgZm9yIGluZmluaXRlIHNjcm9sbCwgZmluZCB0aGUgY29udGVudHMgb2YgdGhhdCBpbnN0ZWFkXG4gICAgICAgICAgICBpZihzZWxmLmluZmluaXRlX3Njcm9sbF9jb250YWluZXIhPVwiXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZi5sb2FkX21vcmVfaHRtbCA9ICQoXCI8ZGl2PlwiK3NlbGYubG9hZF9tb3JlX2h0bWwrXCI8L2Rpdj5cIikuZmluZChzZWxmLmluZmluaXRlX3Njcm9sbF9jb250YWluZXIpLmh0bWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHNlbGYuaW5maW5pdGVfc2Nyb2xsX3Jlc3VsdF9jbGFzcyE9XCJcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgJHJlc3VsdF9pdGVtcyA9ICQoXCI8ZGl2PlwiK3NlbGYubG9hZF9tb3JlX2h0bWwrXCI8L2Rpdj5cIikuZmluZChzZWxmLmluZmluaXRlX3Njcm9sbF9yZXN1bHRfY2xhc3MpO1xuICAgICAgICAgICAgICAgIHZhciAkcmVzdWx0X2l0ZW1zX2NvbnRhaW5lciA9ICQoJzxkaXYvPicsIHt9KTtcbiAgICAgICAgICAgICAgICAkcmVzdWx0X2l0ZW1zX2NvbnRhaW5lci5hcHBlbmQoJHJlc3VsdF9pdGVtcyk7XG5cbiAgICAgICAgICAgICAgICBzZWxmLmxvYWRfbW9yZV9odG1sID0gJHJlc3VsdF9pdGVtc19jb250YWluZXIuaHRtbCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihpbmZpbml0ZV9zY3JvbGxfZW5kKVxuICAgICAgICAgICAgey8vd2UgZm91bmQgYSBkYXRhIGF0dHJpYnV0ZSBzaWduYWxsaW5nIHRoZSBsYXN0IHBhZ2Ugc28gZmluaXNoIGhlcmVcblxuICAgICAgICAgICAgICAgIHNlbGYuaXNfbWF4X3BhZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZWxmLmxhc3RfbG9hZF9tb3JlX2h0bWwgPSBzZWxmLmxvYWRfbW9yZV9odG1sO1xuXG4gICAgICAgICAgICAgICAgc2VsZi5pbmZpbml0ZVNjcm9sbEFwcGVuZChzZWxmLmxvYWRfbW9yZV9odG1sKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihzZWxmLmxhc3RfbG9hZF9tb3JlX2h0bWwhPT1zZWxmLmxvYWRfbW9yZV9odG1sKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBuZXcgaHRtbCBmZXRjaGVkIGlzIGRpZmZlcmVudFxuICAgICAgICAgICAgICAgIHNlbGYubGFzdF9sb2FkX21vcmVfaHRtbCA9IHNlbGYubG9hZF9tb3JlX2h0bWw7XG4gICAgICAgICAgICAgICAgc2VsZi5pbmZpbml0ZVNjcm9sbEFwcGVuZChzZWxmLmxvYWRfbW9yZV9odG1sKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgey8vd2UgcmVjZWl2ZWQgdGhlIHNhbWUgbWVzc2FnZSBhZ2FpbiBzbyBkb24ndCBhZGQsIGFuZCB0ZWxsIFMmRiB0aGF0IHdlJ3JlIGF0IHRoZSBlbmQuLlxuICAgICAgICAgICAgICAgIHNlbGYuaXNfbWF4X3BhZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbEFwcGVuZCA9IGZ1bmN0aW9uKCRvYmplY3QpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHNlbGYuaW5maW5pdGVfc2Nyb2xsX3Jlc3VsdF9jbGFzcyE9XCJcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxmLiRpbmZpbml0ZV9zY3JvbGxfY29udGFpbmVyLmZpbmQoc2VsZi5pbmZpbml0ZV9zY3JvbGxfcmVzdWx0X2NsYXNzKS5sYXN0KCkuYWZ0ZXIoJG9iamVjdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICBzZWxmLiRpbmZpbml0ZV9zY3JvbGxfY29udGFpbmVyLmFwcGVuZCgkb2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgdGhpcy51cGRhdGVSZXN1bHRzID0gZnVuY3Rpb24oZGF0YSwgZGF0YV90eXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZihkYXRhX3R5cGU9PVwianNvblwiKVxuICAgICAgICAgICAgey8vdGhlbiB3ZSBkaWQgYSByZXF1ZXN0IHRvIHRoZSBhamF4IGVuZHBvaW50LCBzbyBleHBlY3QgYW4gb2JqZWN0IGJhY2tcbiAgICAgICAgICAgICAgICAvL2dyYWIgdGhlIHJlc3VsdHMgYW5kIGxvYWQgaW5cbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHNfaHRtbCA9IGRhdGFbJ3Jlc3VsdHMnXTtcblxuICAgICAgICAgICAgICAgIGlmICggdGhpcy5yZXBsYWNlX3Jlc3VsdHMgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuJGFqYXhfcmVzdWx0c19jb250YWluZXIuaHRtbCh0aGlzLnJlc3VsdHNfaHRtbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mKGRhdGFbJ2Zvcm0nXSkhPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLy9yZW1vdmUgYWxsIGV2ZW50cyBmcm9tIFMmRiBmb3JtXG4gICAgICAgICAgICAgICAgICAgICR0aGlzLm9mZigpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vcmVtb3ZlIHBhZ2luYXRpb25cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVBamF4UGFnaW5hdGlvbigpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vcmVmcmVzaCB0aGUgZm9ybSAoYXV0byBjb3VudClcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3B5TGlzdEl0ZW1zQ29udGVudHMoJChkYXRhWydmb3JtJ10pLCAkdGhpcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy91cGRhdGUgYXR0cmlidXRlcyBvbiBmb3JtXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29weUZvcm1BdHRyaWJ1dGVzKCQoZGF0YVsnZm9ybSddKSwgJHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vcmUgaW5pdCBTJkYgY2xhc3Mgb24gdGhlIGZvcm1cbiAgICAgICAgICAgICAgICAgICAgJHRoaXMuc2VhcmNoQW5kRmlsdGVyKHsnaXNJbml0JzogZmFsc2V9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLy8kdGhpcy5maW5kKFwiaW5wdXRcIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoZGF0YV90eXBlPT1cImh0bWxcIikgey8vd2UgYXJlIGV4cGVjdGluZyB0aGUgaHRtbCBvZiB0aGUgcmVzdWx0cyBwYWdlIGJhY2ssIHNvIGV4dHJhY3QgdGhlIGh0bWwgd2UgbmVlZFxuXG4gICAgICAgICAgICAgICAgdmFyICRkYXRhX29iaiA9ICQoZGF0YSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHNfaHRtbCA9ICRkYXRhX29iai5maW5kKCB0aGlzLmFqYXhfdGFyZ2V0X2F0dHIgKS5odG1sKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIHRoaXMucmVwbGFjZV9yZXN1bHRzICkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLiRhamF4X3Jlc3VsdHNfY29udGFpbmVyLmh0bWwodGhpcy5yZXN1bHRzX2h0bWwpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQ29udGVudEFyZWFzKCAkZGF0YV9vYmogKTtcblxuICAgICAgICAgICAgICAgIGlmIChzZWxmLiRhamF4X3Jlc3VsdHNfY29udGFpbmVyLmZpbmQoXCIuc2VhcmNoYW5kZmlsdGVyXCIpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgey8vdGhlbiB0aGVyZSBhcmUgc2VhcmNoIGZvcm0ocykgaW5zaWRlIHRoZSByZXN1bHRzIGNvbnRhaW5lciwgc28gcmUtaW5pdCB0aGVtXG5cbiAgICAgICAgICAgICAgICAgICAgc2VsZi4kYWpheF9yZXN1bHRzX2NvbnRhaW5lci5maW5kKFwiLnNlYXJjaGFuZGZpbHRlclwiKS5zZWFyY2hBbmRGaWx0ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL2lmIHRoZSBjdXJyZW50IHNlYXJjaCBmb3JtIGlzIG5vdCBpbnNpZGUgdGhlIHJlc3VsdHMgY29udGFpbmVyLCB0aGVuIHByb2NlZWQgYXMgbm9ybWFsIGFuZCB1cGRhdGUgdGhlIGZvcm1cbiAgICAgICAgICAgICAgICBpZihzZWxmLiRhamF4X3Jlc3VsdHNfY29udGFpbmVyLmZpbmQoXCIuc2VhcmNoYW5kZmlsdGVyW2RhdGEtc2YtZm9ybS1pZD0nXCIgKyBzZWxmLnNmaWQgKyBcIiddXCIpLmxlbmd0aD09MCkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciAkbmV3X3NlYXJjaF9mb3JtID0gJGRhdGFfb2JqLmZpbmQoXCIuc2VhcmNoYW5kZmlsdGVyW2RhdGEtc2YtZm9ybS1pZD0nXCIgKyBzZWxmLnNmaWQgKyBcIiddXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgkbmV3X3NlYXJjaF9mb3JtLmxlbmd0aCA9PSAxKSB7Ly90aGVuIHJlcGxhY2UgdGhlIHNlYXJjaCBmb3JtIHdpdGggdGhlIG5ldyBvbmVcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9yZW1vdmUgYWxsIGV2ZW50cyBmcm9tIFMmRiBmb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5vZmYoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9yZW1vdmUgcGFnaW5hdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVBamF4UGFnaW5hdGlvbigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3JlZnJlc2ggdGhlIGZvcm0gKGF1dG8gY291bnQpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvcHlMaXN0SXRlbXNDb250ZW50cygkbmV3X3NlYXJjaF9mb3JtLCAkdGhpcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdXBkYXRlIGF0dHJpYnV0ZXMgb24gZm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3B5Rm9ybUF0dHJpYnV0ZXMoJG5ld19zZWFyY2hfZm9ybSwgJHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3JlIGluaXQgUyZGIGNsYXNzIG9uIHRoZSBmb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy5zZWFyY2hBbmRGaWx0ZXIoeydpc0luaXQnOiBmYWxzZX0pO1xuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vJHRoaXMuZmluZChcImlucHV0XCIpLnJlbW92ZUF0dHIoXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VsZi5pc19tYXhfcGFnZWQgPSBmYWxzZTsgLy9mb3IgaW5maW5pdGUgc2Nyb2xsXG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRfcGFnZWQgPSAxOyAvL2ZvciBpbmZpbml0ZSBzY3JvbGxcbiAgICAgICAgICAgIHNlbGYuc2V0SW5maW5pdGVTY3JvbGxDb250YWluZXIoKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVDb250ZW50QXJlYXMgPSBmdW5jdGlvbiggJGh0bWxfZGF0YSApIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gYWRkIGFkZGl0aW9uYWwgY29udGVudCBhcmVhc1xuICAgICAgICAgICAgaWYgKCB0aGlzLmFqYXhfdXBkYXRlX3NlY3Rpb25zICYmIHRoaXMuYWpheF91cGRhdGVfc2VjdGlvbnMubGVuZ3RoICkge1xuICAgICAgICAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuYWpheF91cGRhdGVfc2VjdGlvbnMubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RvciA9IHRoaXMuYWpheF91cGRhdGVfc2VjdGlvbnNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAkKCBzZWxlY3RvciApLmh0bWwoICRodG1sX2RhdGEuZmluZCggc2VsZWN0b3IgKS5odG1sKCkgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mYWRlQ29udGVudEFyZWFzID0gZnVuY3Rpb24oIGRpcmVjdGlvbiApIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIG9wYWNpdHkgPSAwLjU7XG4gICAgICAgICAgICBpZiAoIGRpcmVjdGlvbiA9PT0gXCJpblwiICkge1xuICAgICAgICAgICAgICAgIG9wYWNpdHkgPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIHRoaXMuYWpheF91cGRhdGVfc2VjdGlvbnMgJiYgdGhpcy5hamF4X3VwZGF0ZV9zZWN0aW9ucy5sZW5ndGggKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5hamF4X3VwZGF0ZV9zZWN0aW9ucy5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gdGhpcy5hamF4X3VwZGF0ZV9zZWN0aW9uc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICQoIHNlbGVjdG9yICkuc3RvcCh0cnVlLHRydWUpLmFuaW1hdGUoIHsgb3BhY2l0eTogb3BhY2l0eX0sIFwiZmFzdFwiICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW1vdmVXb29Db21tZXJjZUNvbnRyb2xzID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHZhciAkd29vX29yZGVyYnkgPSAkKCcud29vY29tbWVyY2Utb3JkZXJpbmcgLm9yZGVyYnknKTtcbiAgICAgICAgICAgIHZhciAkd29vX29yZGVyYnlfZm9ybSA9ICQoJy53b29jb21tZXJjZS1vcmRlcmluZycpO1xuXG4gICAgICAgICAgICAkd29vX29yZGVyYnlfZm9ybS5vZmYoKTtcbiAgICAgICAgICAgICR3b29fb3JkZXJieS5vZmYoKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFkZFF1ZXJ5UGFyYW0gPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgdXJsX3R5cGUpe1xuXG4gICAgICAgICAgICBpZih0eXBlb2YodXJsX3R5cGUpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciB1cmxfdHlwZSA9IFwiYWxsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmV4dHJhX3F1ZXJ5X3BhcmFtc1t1cmxfdHlwZV1bbmFtZV0gPSB2YWx1ZTtcblxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaW5pdFdvb0NvbW1lcmNlQ29udHJvbHMgPSBmdW5jdGlvbigpe1xuXG4gICAgICAgICAgICBzZWxmLnJlbW92ZVdvb0NvbW1lcmNlQ29udHJvbHMoKTtcblxuICAgICAgICAgICAgdmFyICR3b29fb3JkZXJieSA9ICQoJy53b29jb21tZXJjZS1vcmRlcmluZyAub3JkZXJieScpO1xuICAgICAgICAgICAgdmFyICR3b29fb3JkZXJieV9mb3JtID0gJCgnLndvb2NvbW1lcmNlLW9yZGVyaW5nJyk7XG5cbiAgICAgICAgICAgIHZhciBvcmRlcl92YWwgPSBcIlwiO1xuICAgICAgICAgICAgaWYoJHdvb19vcmRlcmJ5Lmxlbmd0aD4wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9yZGVyX3ZhbCA9ICR3b29fb3JkZXJieS52YWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcmRlcl92YWwgPSBzZWxmLmdldFF1ZXJ5UGFyYW1Gcm9tVVJMKFwib3JkZXJieVwiLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKG9yZGVyX3ZhbD09XCJtZW51X29yZGVyXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3JkZXJfdmFsID0gXCJcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoKG9yZGVyX3ZhbCE9XCJcIikmJighIW9yZGVyX3ZhbCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZi5leHRyYV9xdWVyeV9wYXJhbXMuYWxsLm9yZGVyYnkgPSBvcmRlcl92YWw7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgJHdvb19vcmRlcmJ5X2Zvcm0ub24oJ3N1Ym1pdCcsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIC8vdmFyIGZvcm0gPSBlLnRhcmdldDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgJHdvb19vcmRlcmJ5Lm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9ICQodGhpcykudmFsKCk7XG4gICAgICAgICAgICAgICAgaWYodmFsPT1cIm1lbnVfb3JkZXJcIilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2VsZi5leHRyYV9xdWVyeV9wYXJhbXMuYWxsLm9yZGVyYnkgPSB2YWw7XG5cbiAgICAgICAgICAgICAgICAkdGhpcy50cmlnZ2VyKFwic3VibWl0XCIpXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zY3JvbGxSZXN1bHRzID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZigoc2VsZi5zY3JvbGxfb25fYWN0aW9uPT1zZWxmLmFqYXhfYWN0aW9uKXx8KHNlbGYuc2Nyb2xsX29uX2FjdGlvbj09XCJhbGxcIikpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZi5zY3JvbGxUb1BvcygpOyAvL3Njcm9sbCB0aGUgd2luZG93IGlmIGl0IGhhcyBiZWVuIHNldFxuICAgICAgICAgICAgICAgIC8vc2VsZi5hamF4X2FjdGlvbiA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZVVybEhpc3RvcnkgPSBmdW5jdGlvbihhamF4X3Jlc3VsdHNfdXJsKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdXNlX2hpc3RvcnlfYXBpID0gMDtcbiAgICAgICAgICAgIGlmICh3aW5kb3cuaGlzdG9yeSAmJiB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdXNlX2hpc3RvcnlfYXBpID0gJHRoaXMuYXR0cihcImRhdGEtdXNlLWhpc3RvcnktYXBpXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZigoc2VsZi51cGRhdGVfYWpheF91cmw9PTEpJiYodXNlX2hpc3RvcnlfYXBpPT0xKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvL25vdyBjaGVjayBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cyBoaXN0b3J5IHN0YXRlIHB1c2ggOilcbiAgICAgICAgICAgICAgICBpZiAod2luZG93Lmhpc3RvcnkgJiYgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgYWpheF9yZXN1bHRzX3VybCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlQWpheFBhZ2luYXRpb24gPSBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHR5cGVvZihzZWxmLmFqYXhfbGlua3Nfc2VsZWN0b3IpIT1cInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciAkYWpheF9saW5rc19vYmplY3QgPSBqUXVlcnkoc2VsZi5hamF4X2xpbmtzX3NlbGVjdG9yKTtcblxuICAgICAgICAgICAgICAgIGlmKCRhamF4X2xpbmtzX29iamVjdC5sZW5ndGg+MClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICRhamF4X2xpbmtzX29iamVjdC5vZmYoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdldEJhc2VVcmwgPSBmdW5jdGlvbiggdXJsICkge1xuICAgICAgICAgICAgLy9ub3cgc2VlIGlmIHdlIGFyZSBvbiB0aGUgVVJMIHdlIHRoaW5rLi4uXG4gICAgICAgICAgICB2YXIgdXJsX3BhcnRzID0gdXJsLnNwbGl0KFwiP1wiKTtcbiAgICAgICAgICAgIHZhciB1cmxfYmFzZSA9IFwiXCI7XG5cbiAgICAgICAgICAgIGlmKHVybF9wYXJ0cy5sZW5ndGg+MClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1cmxfYmFzZSA9IHVybF9wYXJ0c1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHVybF9iYXNlID0gdXJsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVybF9iYXNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FuRmV0Y2hBamF4UmVzdWx0cyA9IGZ1bmN0aW9uKGZldGNoX3R5cGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHR5cGVvZihmZXRjaF90eXBlKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgZmV0Y2hfdHlwZSA9IFwiXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBmZXRjaF9hamF4X3Jlc3VsdHMgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYoc2VsZi5pc19hamF4PT0xKVxuICAgICAgICAgICAgey8vdGhlbiB3ZSB3aWxsIGFqYXggc3VibWl0IHRoZSBmb3JtXG5cbiAgICAgICAgICAgICAgICAvL2FuZCBpZiB3ZSBjYW4gZmluZCB0aGUgcmVzdWx0cyBjb250YWluZXJcbiAgICAgICAgICAgICAgICBpZihzZWxmLiRhamF4X3Jlc3VsdHNfY29udGFpbmVyLmxlbmd0aD09MSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGZldGNoX2FqYXhfcmVzdWx0cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdHNfdXJsID0gc2VsZi5yZXN1bHRzX3VybDsgIC8vXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdHNfdXJsX2VuY29kZWQgPSAnJzsgIC8vXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRfdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG5cbiAgICAgICAgICAgICAgICAvL2lnbm9yZSAjIGFuZCBldmVyeXRoaW5nIGFmdGVyXG4gICAgICAgICAgICAgICAgdmFyIGhhc2hfcG9zID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignIycpO1xuICAgICAgICAgICAgICAgIGlmKGhhc2hfcG9zIT09LTEpe1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3VybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnN1YnN0cigwLCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKCcjJykpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKCAoICggc2VsZi5kaXNwbGF5X3Jlc3VsdF9tZXRob2Q9PVwiY3VzdG9tX3dvb2NvbW1lcmNlX3N0b3JlXCIgKSB8fCAoIHNlbGYuZGlzcGxheV9yZXN1bHRfbWV0aG9kPT1cInBvc3RfdHlwZV9hcmNoaXZlXCIgKSApICYmICggc2VsZi5lbmFibGVfdGF4b25vbXlfYXJjaGl2ZXMgPT0gMSApIClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmKCBzZWxmLmN1cnJlbnRfdGF4b25vbXlfYXJjaGl2ZSAhPT1cIlwiIClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hfYWpheF9yZXN1bHRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaF9hamF4X3Jlc3VsdHM7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKnZhciByZXN1bHRzX3VybCA9IHByb2Nlc3NfZm9ybS5nZXRSZXN1bHRzVXJsKHNlbGYsIHNlbGYucmVzdWx0c191cmwpO1xuICAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZV90YXggPSBwcm9jZXNzX2Zvcm0uZ2V0QWN0aXZlVGF4KCk7XG4gICAgICAgICAgICAgICAgICAgICB2YXIgcXVlcnlfcGFyYW1zID0gc2VsZi5nZXRVcmxQYXJhbXModHJ1ZSwgJycsIGFjdGl2ZV90YXgpOyovXG4gICAgICAgICAgICAgICAgfVxuXG5cblxuXG4gICAgICAgICAgICAgICAgLy9ub3cgc2VlIGlmIHdlIGFyZSBvbiB0aGUgVVJMIHdlIHRoaW5rLi4uXG4gICAgICAgICAgICAgICAgdmFyIHVybF9iYXNlID0gdGhpcy5nZXRCYXNlVXJsKCBjdXJyZW50X3VybCApO1xuICAgICAgICAgICAgICAgIC8vdmFyIHJlc3VsdHNfdXJsX2Jhc2UgPSB0aGlzLmdldEJhc2VVcmwoIGN1cnJlbnRfdXJsICk7XG5cbiAgICAgICAgICAgICAgICB2YXIgbGFuZyA9IHNlbGYuZ2V0UXVlcnlQYXJhbUZyb21VUkwoXCJsYW5nXCIsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgICAgICAgICBpZigodHlwZW9mKGxhbmcpIT09XCJ1bmRlZmluZWRcIikmJihsYW5nIT09bnVsbCkpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB1cmxfYmFzZSA9IHNlbGYuYWRkVXJsUGFyYW0odXJsX2Jhc2UsIFwibGFuZz1cIitsYW5nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgc2ZpZCA9IHNlbGYuZ2V0UXVlcnlQYXJhbUZyb21VUkwoXCJzZmlkXCIsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgICAgICAgICAgICAgIC8vaWYgc2ZpZCBpcyBhIG51bWJlclxuICAgICAgICAgICAgICAgIGlmKE51bWJlcihwYXJzZUZsb2F0KHNmaWQpKSA9PSBzZmlkKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsX2Jhc2UgPSBzZWxmLmFkZFVybFBhcmFtKHVybF9iYXNlLCBcInNmaWQ9XCIrc2ZpZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy9pZiBhbnkgb2YgdGhlIDMgY29uZGl0aW9ucyBhcmUgdHJ1ZSwgdGhlbiBpdHMgZ29vZCB0byBnb1xuICAgICAgICAgICAgICAgIC8vIC0gMSB8IGlmIHRoZSB1cmwgYmFzZSA9PSByZXN1bHRzX3VybFxuICAgICAgICAgICAgICAgIC8vIC0gMiB8IGlmIHVybCBiYXNlKyBcIi9cIiAgPT0gcmVzdWx0c191cmwgLSBpbiBjYXNlIG9mIHVzZXIgZXJyb3IgaW4gdGhlIHJlc3VsdHMgVVJMXG4gICAgICAgICAgICAgICAgLy8gLSAzIHwgaWYgdGhlIHJlc3VsdHMgVVJMIGhhcyB1cmwgcGFyYW1zLCBhbmQgdGhlIGN1cnJlbnQgdXJsIHN0YXJ0cyB3aXRoIHRoZSByZXN1bHRzIFVSTCBcblxuICAgICAgICAgICAgICAgIC8vdHJpbSBhbnkgdHJhaWxpbmcgc2xhc2ggZm9yIGVhc2llciBjb21wYXJpc29uOlxuICAgICAgICAgICAgICAgIHVybF9iYXNlID0gdXJsX2Jhc2UucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgICAgICAgICAgICAgICByZXN1bHRzX3VybCA9IHJlc3VsdHNfdXJsLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gICAgICAgICAgICAgICAgcmVzdWx0c191cmxfZW5jb2RlZCA9IGVuY29kZVVSSShyZXN1bHRzX3VybCk7XG4gICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudF91cmxfY29udGFpbnNfcmVzdWx0c191cmwgPSAtMTtcbiAgICAgICAgICAgICAgICBpZigodXJsX2Jhc2U9PXJlc3VsdHNfdXJsKXx8KHVybF9iYXNlLnRvTG93ZXJDYXNlKCk9PXJlc3VsdHNfdXJsX2VuY29kZWQudG9Mb3dlckNhc2UoKSkgICl7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdXJsX2NvbnRhaW5zX3Jlc3VsdHNfdXJsID0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3VsdHNfdXJsLmluZGV4T2YoICc/JyApICE9PSAtMSAmJiBjdXJyZW50X3VybC5sYXN0SW5kZXhPZihyZXN1bHRzX3VybCwgMCkgPT09IDAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3VybF9jb250YWluc19yZXN1bHRzX3VybCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZihzZWxmLm9ubHlfcmVzdWx0c19hamF4PT0xKVxuICAgICAgICAgICAgICAgIHsvL2lmIGEgdXNlciBoYXMgY2hvc2VuIHRvIG9ubHkgYWxsb3cgYWpheCBvbiByZXN1bHRzIHBhZ2VzIChkZWZhdWx0IGJlaGF2aW91cilcblxuICAgICAgICAgICAgICAgICAgICBpZiggY3VycmVudF91cmxfY29udGFpbnNfcmVzdWx0c191cmwgPiAtMSlcbiAgICAgICAgICAgICAgICAgICAgey8vdGhpcyBtZWFucyB0aGUgY3VycmVudCBVUkwgY29udGFpbnMgdGhlIHJlc3VsdHMgdXJsLCB3aGljaCBtZWFucyB3ZSBjYW4gZG8gYWpheFxuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hfYWpheF9yZXN1bHRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoX2FqYXhfcmVzdWx0cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGZldGNoX3R5cGU9PVwicGFnaW5hdGlvblwiKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiggY3VycmVudF91cmxfY29udGFpbnNfcmVzdWx0c191cmwgPiAtMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHsvL3RoaXMgbWVhbnMgdGhlIGN1cnJlbnQgVVJMIGNvbnRhaW5zIHRoZSByZXN1bHRzIHVybCwgd2hpY2ggbWVhbnMgd2UgY2FuIGRvIGFqYXhcblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZG9uJ3QgYWpheCBwYWdpbmF0aW9uIHdoZW4gbm90IG9uIGEgUyZGIHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaF9hamF4X3Jlc3VsdHMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZldGNoX2FqYXhfcmVzdWx0cztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0dXBBamF4UGFnaW5hdGlvbiA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgLy9pbmZpbml0ZSBzY3JvbGxcbiAgICAgICAgICAgIGlmKHRoaXMucGFnaW5hdGlvbl90eXBlPT09XCJpbmZpbml0ZV9zY3JvbGxcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5maW5pdGVfc2Nyb2xsX2VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmKHNlbGYuJGFqYXhfcmVzdWx0c19jb250YWluZXIuZmluZChcIltkYXRhLXNlYXJjaC1maWx0ZXItYWN0aW9uPSdpbmZpbml0ZS1zY3JvbGwtZW5kJ11cIikubGVuZ3RoPjApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpbmZpbml0ZV9zY3JvbGxfZW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pc19tYXhfcGFnZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKHBhcnNlSW50KHRoaXMuaW5zdGFuY2VfbnVtYmVyKT09PTEpIHtcbiAgICAgICAgICAgICAgICAgICAgJCh3aW5kb3cpLm9mZihcInNjcm9sbFwiLCBzZWxmLm9uV2luZG93U2Nyb2xsKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5jYW5GZXRjaEFqYXhSZXN1bHRzKFwicGFnaW5hdGlvblwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh3aW5kb3cpLm9uKFwic2Nyb2xsXCIsIHNlbGYub25XaW5kb3dTY3JvbGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZih0eXBlb2Yoc2VsZi5hamF4X2xpbmtzX3NlbGVjdG9yKT09XCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm9mZignY2xpY2snLCBzZWxmLmFqYXhfbGlua3Nfc2VsZWN0b3IpO1xuICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm9mZihzZWxmLmFqYXhfbGlua3Nfc2VsZWN0b3IpO1xuICAgICAgICAgICAgICAgICQoc2VsZi5hamF4X2xpbmtzX3NlbGVjdG9yKS5vZmYoKTtcblxuICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsIHNlbGYuYWpheF9saW5rc19zZWxlY3RvciwgZnVuY3Rpb24oZSl7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYoc2VsZi5jYW5GZXRjaEFqYXhSZXN1bHRzKFwicGFnaW5hdGlvblwiKSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGluayA9IGpRdWVyeSh0aGlzKS5hdHRyKCdocmVmJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFqYXhfYWN0aW9uID0gXCJwYWdpbmF0aW9uXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWdlTnVtYmVyID0gc2VsZi5nZXRQYWdlZEZyb21VUkwobGluayk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuJGFqYXhfcmVzdWx0c19jb250YWluZXIuYXR0cihcImRhdGEtcGFnZWRcIiwgcGFnZU51bWJlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmV0Y2hBamF4UmVzdWx0cygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmdldFBhZ2VkRnJvbVVSTCA9IGZ1bmN0aW9uKFVSTCl7XG5cbiAgICAgICAgICAgIHZhciBwYWdlZFZhbCA9IDE7XG4gICAgICAgICAgICAvL2ZpcnN0IHRlc3QgdG8gc2VlIGlmIHdlIGhhdmUgXCIvcGFnZS80L1wiIGluIHRoZSBVUkxcbiAgICAgICAgICAgIHZhciB0cFZhbCA9IHNlbGYuZ2V0UXVlcnlQYXJhbUZyb21VUkwoXCJzZl9wYWdlZFwiLCBVUkwpO1xuICAgICAgICAgICAgaWYoKHR5cGVvZih0cFZhbCk9PVwic3RyaW5nXCIpfHwodHlwZW9mKHRwVmFsKT09XCJudW1iZXJcIikpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcGFnZWRWYWwgPSB0cFZhbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHBhZ2VkVmFsO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZ2V0UXVlcnlQYXJhbUZyb21VUkwgPSBmdW5jdGlvbihuYW1lLCBVUkwpe1xuXG4gICAgICAgICAgICB2YXIgcXN0cmluZyA9IFwiP1wiK1VSTC5zcGxpdCgnPycpWzFdO1xuICAgICAgICAgICAgaWYodHlwZW9mKHFzdHJpbmcpIT1cInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciB2YWwgPSBkZWNvZGVVUklDb21wb25lbnQoKG5ldyBSZWdFeHAoJ1s/fCZdJyArIG5hbWUgKyAnPScgKyAnKFteJjtdKz8pKCZ8I3w7fCQpJykuZXhlYyhxc3RyaW5nKXx8WyxcIlwiXSlbMV0ucmVwbGFjZSgvXFwrL2csICclMjAnKSl8fG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9O1xuXG5cblxuICAgICAgICB0aGlzLmZvcm1VcGRhdGVkID0gZnVuY3Rpb24oZSl7XG5cbiAgICAgICAgICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaWYoc2VsZi5hdXRvX3VwZGF0ZT09MSkge1xuICAgICAgICAgICAgICAgIHNlbGYuc3VibWl0Rm9ybSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZigoc2VsZi5hdXRvX3VwZGF0ZT09MCkmJihzZWxmLmF1dG9fY291bnRfcmVmcmVzaF9tb2RlPT0xKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxmLmZvcm1VcGRhdGVkRmV0Y2hBamF4KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1VcGRhdGVkRmV0Y2hBamF4ID0gZnVuY3Rpb24oKXtcblxuICAgICAgICAgICAgLy9sb29wIHRocm91Z2ggYWxsIHRoZSBmaWVsZHMgYW5kIGJ1aWxkIHRoZSBVUkxcbiAgICAgICAgICAgIHNlbGYuZmV0Y2hBamF4Rm9ybSgpO1xuXG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfTtcblxuICAgICAgICAvL21ha2UgYW55IGNvcnJlY3Rpb25zL3VwZGF0ZXMgdG8gZmllbGRzIGJlZm9yZSB0aGUgc3VibWl0IGNvbXBsZXRlc1xuICAgICAgICB0aGlzLnNldEZpZWxkcyA9IGZ1bmN0aW9uKGUpe1xuXG4gICAgICAgICAgICAvL2lmKHNlbGYuaXNfYWpheD09MCkge1xuXG4gICAgICAgICAgICAgICAgLy9zb21ldGltZXMgdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdpdGhvdXQgdGhlIHNsaWRlciB5ZXQgaGF2aW5nIHVwZGF0ZWQsIGFuZCBhcyB3ZSBnZXQgb3VyIHZhbHVlcyBmcm9tXG4gICAgICAgICAgICAgICAgLy90aGUgc2xpZGVyIGFuZCBub3QgaW5wdXRzLCB3ZSBuZWVkIHRvIGNoZWNrIGl0IGlmIG5lZWRzIHRvIGJlIHNldFxuICAgICAgICAgICAgICAgIC8vb25seSBvY2N1cnMgaWYgYWpheCBpcyBvZmYsIGFuZCBhdXRvc3VibWl0IG9uXG4gICAgICAgICAgICAgICAgc2VsZi4kZmllbGRzLmVhY2goZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyICRmaWVsZCA9ICQodGhpcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlX2Rpc3BsYXlfdmFsdWVzID0gJGZpZWxkLmZpbmQoJy5zZi1tZXRhLXJhbmdlLXNsaWRlcicpLmF0dHIoXCJkYXRhLWRpc3BsYXktdmFsdWVzLWFzXCIpOy8vZGF0YS1kaXNwbGF5LXZhbHVlcy1hcz1cInRleHRcIlxuXG4gICAgICAgICAgICAgICAgICAgIGlmKHJhbmdlX2Rpc3BsYXlfdmFsdWVzPT09XCJ0ZXh0aW5wdXRcIikge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZigkZmllbGQuZmluZChcIi5tZXRhLXNsaWRlclwiKS5sZW5ndGg+MCl7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICRmaWVsZC5maW5kKFwiLm1ldGEtc2xpZGVyXCIpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xpZGVyX29iamVjdCA9ICQodGhpcylbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRzbGlkZXJfZWwgPSAkKHRoaXMpLmNsb3Nlc3QoXCIuc2YtbWV0YS1yYW5nZS1zbGlkZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgbWluVmFsID0gJHNsaWRlcl9lbC5hdHRyKFwiZGF0YS1taW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgbWF4VmFsID0gJHNsaWRlcl9lbC5hdHRyKFwiZGF0YS1tYXhcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pblZhbCA9ICRzbGlkZXJfZWwuZmluZChcIi5zZi1yYW5nZS1taW5cIikudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heFZhbCA9ICRzbGlkZXJfZWwuZmluZChcIi5zZi1yYW5nZS1tYXhcIikudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVyX29iamVjdC5ub1VpU2xpZGVyLnNldChbbWluVmFsLCBtYXhWYWxdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vfVxuXG4gICAgICAgIH1cblxuICAgICAgICAvL3N1Ym1pdFxuICAgICAgICB0aGlzLnN1Ym1pdEZvcm0gPSBmdW5jdGlvbihlKXtcblxuICAgICAgICAgICAgLy9sb29wIHRocm91Z2ggYWxsIHRoZSBmaWVsZHMgYW5kIGJ1aWxkIHRoZSBVUkxcbiAgICAgICAgICAgIGlmKHNlbGYuaXNTdWJtaXR0aW5nID09IHRydWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlbGYuc2V0RmllbGRzKCk7XG4gICAgICAgICAgICBzZWxmLmNsZWFyVGltZXIoKTtcblxuICAgICAgICAgICAgc2VsZi5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICBwcm9jZXNzX2Zvcm0uc2V0VGF4QXJjaGl2ZVJlc3VsdHNVcmwoc2VsZiwgc2VsZi5yZXN1bHRzX3VybCk7XG5cbiAgICAgICAgICAgIHNlbGYuJGFqYXhfcmVzdWx0c19jb250YWluZXIuYXR0cihcImRhdGEtcGFnZWRcIiwgMSk7IC8vaW5pdCBwYWdlZFxuXG4gICAgICAgICAgICBpZihzZWxmLmNhbkZldGNoQWpheFJlc3VsdHMoKSlcbiAgICAgICAgICAgIHsvL3RoZW4gd2Ugd2lsbCBhamF4IHN1Ym1pdCB0aGUgZm9ybVxuXG4gICAgICAgICAgICAgICAgc2VsZi5hamF4X2FjdGlvbiA9IFwic3VibWl0XCI7IC8vc28gd2Uga25vdyBpdCB3YXNuJ3QgcGFnaW5hdGlvblxuICAgICAgICAgICAgICAgIHNlbGYuZmV0Y2hBamF4UmVzdWx0cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgey8vdGhlbiB3ZSB3aWxsIHNpbXBseSByZWRpcmVjdCB0byB0aGUgUmVzdWx0cyBVUkxcblxuICAgICAgICAgICAgICAgIHZhciByZXN1bHRzX3VybCA9IHByb2Nlc3NfZm9ybS5nZXRSZXN1bHRzVXJsKHNlbGYsIHNlbGYucmVzdWx0c191cmwpO1xuICAgICAgICAgICAgICAgIHZhciBxdWVyeV9wYXJhbXMgPSBzZWxmLmdldFVybFBhcmFtcyh0cnVlLCAnJyk7XG4gICAgICAgICAgICAgICAgcmVzdWx0c191cmwgPSBzZWxmLmFkZFVybFBhcmFtKHJlc3VsdHNfdXJsLCBxdWVyeV9wYXJhbXMpO1xuXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZXN1bHRzX3VybDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybSA9IGZ1bmN0aW9uKHN1Ym1pdF9mb3JtKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL3Vuc2V0IGFsbCBmaWVsZHNcbiAgICAgICAgICAgIHNlbGYuJGZpZWxkcy5lYWNoKGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgICAgICAgICB2YXIgJGZpZWxkID0gJCh0aGlzKTtcblx0XHRcdFx0XG5cdFx0XHRcdCRmaWVsZC5yZW1vdmVBdHRyKFwiZGF0YS1zZi10YXhvbm9teS1hcmNoaXZlXCIpO1xuXHRcdFx0XHRcbiAgICAgICAgICAgICAgICAvL3N0YW5kYXJkIGZpZWxkIHR5cGVzXG4gICAgICAgICAgICAgICAgJGZpZWxkLmZpbmQoXCJzZWxlY3Q6bm90KFttdWx0aXBsZT0nbXVsdGlwbGUnXSkgPiBvcHRpb246Zmlyc3QtY2hpbGRcIikucHJvcChcInNlbGVjdGVkXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgICRmaWVsZC5maW5kKFwic2VsZWN0W211bHRpcGxlPSdtdWx0aXBsZSddID4gb3B0aW9uXCIpLnByb3AoXCJzZWxlY3RlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgJGZpZWxkLmZpbmQoXCJpbnB1dFt0eXBlPSdjaGVja2JveCddXCIpLnByb3AoXCJjaGVja2VkXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAkZmllbGQuZmluZChcIj4gdWwgPiBsaTpmaXJzdC1jaGlsZCBpbnB1dFt0eXBlPSdyYWRpbyddXCIpLnByb3AoXCJjaGVja2VkXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgICRmaWVsZC5maW5kKFwiaW5wdXRbdHlwZT0ndGV4dCddXCIpLnZhbChcIlwiKTtcbiAgICAgICAgICAgICAgICAkZmllbGQuZmluZChcIi5zZi1vcHRpb24tYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwic2Ytb3B0aW9uLWFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICAkZmllbGQuZmluZChcIj4gdWwgPiBsaTpmaXJzdC1jaGlsZCBpbnB1dFt0eXBlPSdyYWRpbyddXCIpLnBhcmVudCgpLmFkZENsYXNzKFwic2Ytb3B0aW9uLWFjdGl2ZVwiKTsgLy9yZSBhZGQgYWN0aXZlIGNsYXNzIHRvIGZpcnN0IFwiZGVmYXVsdFwiIG9wdGlvblxuXG4gICAgICAgICAgICAgICAgLy9udW1iZXIgcmFuZ2UgLSAyIG51bWJlciBpbnB1dCBmaWVsZHNcbiAgICAgICAgICAgICAgICAkZmllbGQuZmluZChcImlucHV0W3R5cGU9J251bWJlciddXCIpLmVhY2goZnVuY3Rpb24oaW5kZXgpe1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciAkdGhpc0lucHV0ID0gJCh0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICBpZigkdGhpc0lucHV0LnBhcmVudCgpLnBhcmVudCgpLmhhc0NsYXNzKFwic2YtbWV0YS1yYW5nZVwiKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpbmRleD09MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzSW5wdXQudmFsKCR0aGlzSW5wdXQuYXR0cihcIm1pblwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGluZGV4PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXNJbnB1dC52YWwoJHRoaXNJbnB1dC5hdHRyKFwibWF4XCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvL21ldGEgLyBudW1iZXJzIHdpdGggMiBpbnB1dHMgKGZyb20gLyB0byBmaWVsZHMpIC0gc2Vjb25kIGlucHV0IG11c3QgYmUgcmVzZXQgdG8gbWF4IHZhbHVlXG4gICAgICAgICAgICAgICAgdmFyICRtZXRhX3NlbGVjdF9mcm9tX3RvID0gJGZpZWxkLmZpbmQoXCIuc2YtbWV0YS1yYW5nZS1zZWxlY3QtZnJvbXRvXCIpO1xuXG4gICAgICAgICAgICAgICAgaWYoJG1ldGFfc2VsZWN0X2Zyb21fdG8ubGVuZ3RoPjApIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRfbWluID0gJG1ldGFfc2VsZWN0X2Zyb21fdG8uYXR0cihcImRhdGEtbWluXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRfbWF4ID0gJG1ldGFfc2VsZWN0X2Zyb21fdG8uYXR0cihcImRhdGEtbWF4XCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICRtZXRhX3NlbGVjdF9mcm9tX3RvLmZpbmQoXCJzZWxlY3RcIikuZWFjaChmdW5jdGlvbihpbmRleCl7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkdGhpc0lucHV0ID0gJCh0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaW5kZXg9PTApIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzSW5wdXQudmFsKHN0YXJ0X21pbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGluZGV4PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXNJbnB1dC52YWwoc3RhcnRfbWF4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgJG1ldGFfcmFkaW9fZnJvbV90byA9ICRmaWVsZC5maW5kKFwiLnNmLW1ldGEtcmFuZ2UtcmFkaW8tZnJvbXRvXCIpO1xuXG4gICAgICAgICAgICAgICAgaWYoJG1ldGFfcmFkaW9fZnJvbV90by5sZW5ndGg+MClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGFydF9taW4gPSAkbWV0YV9yYWRpb19mcm9tX3RvLmF0dHIoXCJkYXRhLW1pblwiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0X21heCA9ICRtZXRhX3JhZGlvX2Zyb21fdG8uYXR0cihcImRhdGEtbWF4XCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciAkcmFkaW9fZ3JvdXBzID0gJG1ldGFfcmFkaW9fZnJvbV90by5maW5kKCcuc2YtaW5wdXQtcmFuZ2UtcmFkaW8nKTtcblxuICAgICAgICAgICAgICAgICAgICAkcmFkaW9fZ3JvdXBzLmVhY2goZnVuY3Rpb24oaW5kZXgpe1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkcmFkaW9zID0gJCh0aGlzKS5maW5kKFwiLnNmLWlucHV0LXJhZGlvXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJHJhZGlvcy5wcm9wKFwiY2hlY2tlZFwiLCBmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGluZGV4PT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyYWRpb3MuZmlsdGVyKCdbdmFsdWU9XCInK3N0YXJ0X21pbisnXCJdJykucHJvcChcImNoZWNrZWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGluZGV4PT0xKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyYWRpb3MuZmlsdGVyKCdbdmFsdWU9XCInK3N0YXJ0X21heCsnXCJdJykucHJvcChcImNoZWNrZWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL251bWJlciBzbGlkZXIgLSBub1VpU2xpZGVyXG4gICAgICAgICAgICAgICAgJGZpZWxkLmZpbmQoXCIubWV0YS1zbGlkZXJcIikuZWFjaChmdW5jdGlvbihpbmRleCl7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHNsaWRlcl9vYmplY3QgPSAkKHRoaXMpWzBdO1xuICAgICAgICAgICAgICAgICAgICAvKnZhciBzbGlkZXJfb2JqZWN0ID0gJGNvbnRhaW5lci5maW5kKFwiLm1ldGEtc2xpZGVyXCIpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgdmFyIHNsaWRlcl92YWwgPSBzbGlkZXJfb2JqZWN0Lm5vVWlTbGlkZXIuZ2V0KCk7Ki9cblxuICAgICAgICAgICAgICAgICAgICB2YXIgJHNsaWRlcl9lbCA9ICQodGhpcykuY2xvc2VzdChcIi5zZi1tZXRhLXJhbmdlLXNsaWRlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1pblZhbCA9ICRzbGlkZXJfZWwuYXR0cihcImRhdGEtbWluXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4VmFsID0gJHNsaWRlcl9lbC5hdHRyKFwiZGF0YS1tYXhcIik7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlcl9vYmplY3Qubm9VaVNsaWRlci5zZXQoW21pblZhbCwgbWF4VmFsXSk7XG5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vbmVlZCB0byBzZWUgaWYgYW55IGFyZSBjb21ib2JveCBhbmQgYWN0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICAgICAgdmFyICRjb21ib2JveCA9ICRmaWVsZC5maW5kKFwic2VsZWN0W2RhdGEtY29tYm9ib3g9JzEnXVwiKTtcbiAgICAgICAgICAgICAgICBpZigkY29tYm9ib3gubGVuZ3RoPjApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICRjb21ib2JveC5jaG9zZW4gIT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGNvbWJvYm94LnRyaWdnZXIoXCJjaG9zZW46dXBkYXRlZFwiKTsgLy9mb3IgY2hvc2VuIG9ubHlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjb21ib2JveC52YWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGNvbWJvYm94LnRyaWdnZXIoJ2NoYW5nZS5zZWxlY3QyJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWxmLmNsZWFyVGltZXIoKTtcblxuXG5cbiAgICAgICAgICAgIGlmKHN1Ym1pdF9mb3JtPT1cImFsd2F5c1wiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNlbGYuc3VibWl0Rm9ybSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihzdWJtaXRfZm9ybT09XCJuZXZlclwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuYXV0b19jb3VudF9yZWZyZXNoX21vZGU9PTEpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcm1VcGRhdGVkRmV0Y2hBamF4KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihzdWJtaXRfZm9ybT09XCJhdXRvXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5hdXRvX3VwZGF0ZT09dHJ1ZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc3VibWl0Rm9ybSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmF1dG9fY291bnRfcmVmcmVzaF9tb2RlPT0xKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcm1VcGRhdGVkRmV0Y2hBamF4KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmluaXQoKTtcblxuICAgICAgICB2YXIgZXZlbnRfZGF0YSA9IHt9O1xuICAgICAgICBldmVudF9kYXRhLnNmaWQgPSBzZWxmLnNmaWQ7XG4gICAgICAgIGV2ZW50X2RhdGEudGFyZ2V0U2VsZWN0b3IgPSBzZWxmLmFqYXhfdGFyZ2V0X2F0dHI7XG4gICAgICAgIGV2ZW50X2RhdGEub2JqZWN0ID0gdGhpcztcbiAgICAgICAgaWYob3B0cy5pc0luaXQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNlbGYudHJpZ2dlckV2ZW50KFwic2Y6aW5pdFwiLCBldmVudF9kYXRhKTtcbiAgICAgICAgfVxuXG4gICAgfSk7XG59O1xuIl19
-},{"./process_form":4,"./state":5,"./thirdparty":6,"nouislider":2}],4:[function(require,module,exports){
-(function (global){
-
-var $ = (typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null);
-
-module.exports = {
-
- taxonomy_archives: 0,
- url_params: {},
- tax_archive_results_url: "",
- active_tax: "",
- fields: {},
- init: function(taxonomy_archives, current_taxonomy_archive){
-
- this.taxonomy_archives = 0;
- this.url_params = {};
- this.tax_archive_results_url = "";
- this.active_tax = "";
-
- //this.$fields = $fields;
- this.taxonomy_archives = taxonomy_archives;
- this.current_taxonomy_archive = current_taxonomy_archive;
-
- this.clearUrlComponents();
-
- },
- setTaxArchiveResultsUrl: function($form, current_results_url, get_active) {
-
- var self = this;
- this.clearTaxArchiveResultsUrl();
- //var current_results_url = "";
- if(this.taxonomy_archives!=1)
- {
- return;
- }
-
- if(typeof(get_active)=="undefined")
- {
- var get_active = false;
- }
-
- //check to see if we have any taxonomies selected
- //if so, check their rewrites and use those as the results url
- var $field = false;
- var field_name = "";
- var field_value = "";
-
- var $active_taxonomy = $form.$fields.parent().find("[data-sf-taxonomy-archive='1']");
- if($active_taxonomy.length==1)
- {
- $field = $active_taxonomy;
-
- var fieldType = $field.attr("data-sf-field-type");
-
- if ((fieldType == "tag") || (fieldType == "category") || (fieldType == "taxonomy")) {
- var taxonomy_value = self.processTaxonomy($field, true);
- field_name = $field.attr("data-sf-field-name");
- var taxonomy_name = field_name.replace("_sft_", "");
-
- if (taxonomy_value) {
- field_value = taxonomy_value.value;
- }
- }
-
- if(field_value=="")
- {
- $field = false;
- }
- }
-
- if((self.current_taxonomy_archive!="")&&(self.current_taxonomy_archive!=taxonomy_name))
- {
-
- this.tax_archive_results_url = current_results_url;
- return;
- }
-
- if(((field_value=="")||(!$field) ))
- {
- $form.$fields.each(function () {
-
- if (!$field) {
-
- var fieldType = $(this).attr("data-sf-field-type");
-
- if ((fieldType == "tag") || (fieldType == "category") || (fieldType == "taxonomy")) {
- var taxonomy_value = self.processTaxonomy($(this), true);
- field_name = $(this).attr("data-sf-field-name");
-
- if (taxonomy_value) {
-
- field_value = taxonomy_value.value;
-
- if (field_value != "") {
-
- $field = $(this);
- }
-
- }
- }
- }
- });
- }
-
- if( ($field) && (field_value != "" )) {
- //if we found a field
- var rewrite_attr = ($field.attr("data-sf-term-rewrite"));
-
- if(rewrite_attr!="") {
-
- var rewrite = JSON.parse(rewrite_attr);
- var input_type = $field.attr("data-sf-field-input-type");
- self.active_tax = field_name;
-
- //find the active element
- if ((input_type == "radio") || (input_type == "checkbox")) {
-
- //var $active = $field.find(".sf-option-active");
- //explode the values if there is a delim
- //field_value
-
- var is_single_value = true;
- var field_values = field_value.split(",").join("+").split("+");
- if (field_values.length > 1) {
- is_single_value = false;
- }
-
- if (is_single_value) {
-
- var $input = $field.find("input[value='" + field_value + "']");
- var $active = $input.parent();
- var depth = $active.attr("data-sf-depth");
-
- //now loop through parents to grab their names
- var values = new Array();
- values.push(field_value);
-
- for (var i = depth; i > 0; i--) {
- $active = $active.parent().parent();
- values.push($active.find("input").val());
- }
-
- values.reverse();
-
- //grab the rewrite for this depth
- var active_rewrite = rewrite[depth];
- var url = active_rewrite;
-
-
- //then map from the parents to the depth
- $(values).each(function (index, value) {
-
- url = url.replace("[" + index + "]", value);
-
- });
- this.tax_archive_results_url = url;
- }
- else {
-
- //if there are multiple values,
- //then we need to check for 3 things:
-
- //if the values selected are all in the same tree then we can do some clever rewrite stuff
- //merge all values in same level, then combine the levels
-
- //if they are from different trees then just combine them or just use `field_value`
- /*
-
- var depths = new Array();
- $(field_values).each(function (index, val) {
-
- var $input = $field.find("input[value='" + field_value + "']");
- var $active = $input.parent();
-
- var depth = $active.attr("data-sf-depth");
- //depths.push(depth);
-
- });*/
-
- }
- }
- else if ((input_type == "select") || (input_type == "multiselect")) {
-
- var is_single_value = true;
- var field_values = field_value.split(",").join("+").split("+");
- if (field_values.length > 1) {
- is_single_value = false;
- }
-
- if (is_single_value) {
-
- var $active = $field.find("option[value='" + field_value + "']");
- var depth = $active.attr("data-sf-depth");
-
- var values = new Array();
- values.push(field_value);
-
- for (var i = depth; i > 0; i--) {
- $active = $active.prevAll("option[data-sf-depth='" + (i - 1) + "']");
- values.push($active.val());
- }
-
- values.reverse();
- var active_rewrite = rewrite[depth];
- var url = active_rewrite;
- $(values).each(function (index, value) {
-
- url = url.replace("[" + index + "]", value);
-
- });
- this.tax_archive_results_url = url;
- }
-
- }
- }
-
- }
- //this.tax_archive_results_url = current_results_url;
- },
- getResultsUrl: function($form, current_results_url) {
-
- //this.setTaxArchiveResultsUrl($form, current_results_url);
-
- if(this.tax_archive_results_url=="")
- {
- return current_results_url;
- }
-
- return this.tax_archive_results_url;
- },
- getUrlParams: function($form){
-
- this.buildUrlComponents($form, true);
-
- if(this.tax_archive_results_url!="")
- {
-
- if(this.active_tax!="")
- {
- var field_name = this.active_tax;
-
- if(typeof(this.url_params[field_name])!="undefined")
- {
- delete this.url_params[field_name];
- }
- }
- }
-
- return this.url_params;
- },
- clearUrlComponents: function(){
- //this.url_components = "";
- this.url_params = {};
- },
- clearTaxArchiveResultsUrl: function() {
- this.tax_archive_results_url = '';
- },
- disableInputs: function($form){
- var self = this;
-
- $form.$fields.each(function(){
-
- var $inputs = $(this).find("input, select, .meta-slider");
- $inputs.attr("disabled", "disabled");
- $inputs.attr("disabled", true);
- $inputs.prop("disabled", true);
- $inputs.trigger("chosen:updated");
-
- });
-
-
- },
- enableInputs: function($form){
- var self = this;
- $form.$fields.each(function(){
- var $inputs = $(this).find("input, select, .meta-slider");
- $inputs.prop("disabled", false);
- $inputs.attr("disabled", false);
- $inputs.trigger("chosen:updated");
- });
-
-
- },
- buildUrlComponents: function($form, clear_components){
-
- var self = this;
-
- if(typeof(clear_components)!="undefined")
- {
- if(clear_components==true)
- {
- this.clearUrlComponents();
- }
- }
-
- $form.$fields.each(function(){
-
- var fieldName = $(this).attr("data-sf-field-name");
- var fieldType = $(this).attr("data-sf-field-type");
-
- if(fieldType=="search")
- {
- self.processSearchField($(this));
- }
- else if((fieldType=="tag")||(fieldType=="category")||(fieldType=="taxonomy"))
- {
- self.processTaxonomy($(this));
- }
- else if(fieldType=="sort_order")
- {
- self.processSortOrderField($(this));
- }
- else if(fieldType=="posts_per_page")
- {
- self.processResultsPerPageField($(this));
- }
- else if(fieldType=="author")
- {
- self.processAuthor($(this));
- }
- else if(fieldType=="post_type")
- {
- self.processPostType($(this));
- }
- else if(fieldType=="post_date")
- {
- self.processPostDate($(this));
- }
- else if(fieldType=="post_meta")
- {
- self.processPostMeta($(this));
-
- }
- else
- {
-
- }
-
- });
-
- },
- processSearchField: function($container)
- {
- var self = this;
-
- var $field = $container.find("input[name^='_sf_search']");
-
- if($field.length>0)
- {
- var fieldName = $field.attr("name").replace('[]', '');
- var fieldVal = $field.val();
-
- if(fieldVal!="")
- {
- //self.url_components += "&_sf_s="+encodeURIComponent(fieldVal);
- self.url_params['_sf_s'] = encodeURIComponent(fieldVal);
- }
- }
- },
- processSortOrderField: function($container)
- {
- this.processAuthor($container);
-
- },
- processResultsPerPageField: function($container)
- {
- this.processAuthor($container);
-
- },
- getActiveTax: function($field) {
- return this.active_tax;
- },
- getSelectVal: function($field){
-
- var fieldVal = "";
-
- if($field.val()!=0)
- {
- fieldVal = $field.val();
- }
-
- if(fieldVal==null)
- {
- fieldVal = "";
- }
-
- return fieldVal;
- },
- getMetaSelectVal: function($field){
-
- var fieldVal = "";
-
- fieldVal = $field.val();
-
- if(fieldVal==null)
- {
- fieldVal = "";
- }
-
- return fieldVal;
- },
- getMultiSelectVal: function($field, operator){
-
- var delim = "+";
- if(operator=="or")
- {
- delim = ",";
- }
-
- if(typeof($field.val())=="object")
- {
- if($field.val()!=null)
- {
- return $field.val().join(delim);
- }
- }
-
- },
- getMetaMultiSelectVal: function($field, operator){
-
- var delim = "-+-";
- if(operator=="or")
- {
- delim = "-,-";
- }
-
- if(typeof($field.val())=="object")
- {
- if($field.val()!=null)
- {
-
- var fieldval = [];
-
- $($field.val()).each(function(index,value){
-
- fieldval.push((value));
- });
-
- return fieldval.join(delim);
- }
- }
-
- return "";
-
- },
- getCheckboxVal: function($field, operator){
-
-
- var fieldVal = $field.map(function(){
- if($(this).prop("checked")==true)
- {
- return $(this).val();
- }
- }).get();
-
- var delim = "+";
- if(operator=="or")
- {
- delim = ",";
- }
-
- return fieldVal.join(delim);
- },
- getMetaCheckboxVal: function($field, operator){
-
-
- var fieldVal = $field.map(function(){
- if($(this).prop("checked")==true)
- {
- return ($(this).val());
- }
- }).get();
-
- var delim = "-+-";
- if(operator=="or")
- {
- delim = "-,-";
- }
-
- return fieldVal.join(delim);
- },
- getRadioVal: function($field){
-
- var fieldVal = $field.map(function()
- {
- if($(this).prop("checked")==true)
- {
- return $(this).val();
- }
-
- }).get();
-
-
- if(fieldVal[0]!=0)
- {
- return fieldVal[0];
- }
- },
- getMetaRadioVal: function($field){
-
- var fieldVal = $field.map(function()
- {
- if($(this).prop("checked")==true)
- {
- return $(this).val();
- }
-
- }).get();
-
- return fieldVal[0];
- },
- processAuthor: function($container)
- {
- var self = this;
-
-
- var fieldType = $container.attr("data-sf-field-type");
- var inputType = $container.attr("data-sf-field-input-type");
-
- var $field;
- var fieldName = "";
- var fieldVal = "";
-
- if(inputType=="select")
- {
- $field = $container.find("select");
- fieldName = $field.attr("name").replace('[]', '');
-
- fieldVal = self.getSelectVal($field);
- }
- else if(inputType=="multiselect")
- {
- $field = $container.find("select");
- fieldName = $field.attr("name").replace('[]', '');
- var operator = $field.attr("data-operator");
-
- fieldVal = self.getMultiSelectVal($field, "or");
-
- }
- else if(inputType=="checkbox")
- {
- $field = $container.find("ul > li input:checkbox");
-
- if($field.length>0)
- {
- fieldName = $field.attr("name").replace('[]', '');
-
- var operator = $container.find("> ul").attr("data-operator");
- fieldVal = self.getCheckboxVal($field, "or");
- }
-
- }
- else if(inputType=="radio")
- {
-
- $field = $container.find("ul > li input:radio");
-
- if($field.length>0)
- {
- fieldName = $field.attr("name").replace('[]', '');
-
- fieldVal = self.getRadioVal($field);
- }
- }
-
- if(typeof(fieldVal)!="undefined")
- {
- if(fieldVal!="")
- {
- var fieldSlug = "";
-
- if(fieldName=="_sf_author")
- {
- fieldSlug = "authors";
- }
- else if(fieldName=="_sf_sort_order")
- {
- fieldSlug = "sort_order";
- }
- else if(fieldName=="_sf_ppp")
- {
- fieldSlug = "_sf_ppp";
- }
- else if(fieldName=="_sf_post_type")
- {
- fieldSlug = "post_types";
- }
- else
- {
-
- }
-
- if(fieldSlug!="")
- {
- //self.url_components += "&"+fieldSlug+"="+fieldVal;
- self.url_params[fieldSlug] = fieldVal;
- }
- }
- }
-
- },
- processPostType : function($this){
-
- this.processAuthor($this);
-
- },
- processPostMeta: function($container)
- {
- var self = this;
-
- var fieldType = $container.attr("data-sf-field-type");
- var inputType = $container.attr("data-sf-field-input-type");
- var metaType = $container.attr("data-sf-meta-type");
-
- var fieldVal = "";
- var $field;
- var fieldName = "";
-
- if(metaType=="number")
- {
- if(inputType=="range-number")
- {
- $field = $container.find(".sf-meta-range-number input");
-
- var values = [];
- $field.each(function(){
-
- values.push($(this).val());
-
- });
-
- fieldVal = values.join("+");
-
- }
- else if(inputType=="range-slider")
- {
- $field = $container.find(".sf-meta-range-slider input");
-
- //get any number formatting stuff
- var $meta_range = $container.find(".sf-meta-range-slider");
-
- var decimal_places = $meta_range.attr("data-decimal-places");
- var thousand_seperator = $meta_range.attr("data-thousand-seperator");
- var decimal_seperator = $meta_range.attr("data-decimal-seperator");
-
- var field_format = wNumb({
- mark: decimal_seperator,
- decimals: parseFloat(decimal_places),
- thousand: thousand_seperator
- });
-
- var values = [];
-
-
- var slider_object = $container.find(".meta-slider")[0];
- //val from slider object
- var slider_val = slider_object.noUiSlider.get();
-
- values.push(field_format.from(slider_val[0]));
- values.push(field_format.from(slider_val[1]));
-
- fieldVal = values.join("+");
-
- fieldName = $meta_range.attr("data-sf-field-name");
-
-
- }
- else if(inputType=="range-radio")
- {
- $field = $container.find(".sf-input-range-radio");
-
- if($field.length==0)
- {
- //then try again, we must be using a single field
- $field = $container.find("> ul");
- }
-
- var $meta_range = $container.find(".sf-meta-range");
-
- //there is an element with a from/to class - so we need to get the values of the from & to input fields seperately
- if($field.length>0)
- {
- var field_vals = [];
-
- $field.each(function(){
-
- var $radios = $(this).find(".sf-input-radio");
- field_vals.push(self.getMetaRadioVal($radios));
-
- });
-
- //prevent second number from being lower than the first
- if(field_vals.length==2)
- {
- if(Number(field_vals[1])
0)
- {
- var field_vals = [];
-
- $field.each(function(){
-
- var $this = $(this);
- field_vals.push(self.getMetaSelectVal($this));
-
- });
-
- //prevent second number from being lower than the first
- if(field_vals.length==2)
- {
- if(Number(field_vals[1]) li input:checkbox");
-
- if($field.length>0)
- {
- fieldVal = self.getCheckboxVal($field, "and");
- }
- }
-
- if(fieldName=="")
- {
- fieldName = $field.attr("name").replace('[]', '');
- }
- }
- else if(metaType=="choice")
- {
- if(inputType=="select")
- {
- $field = $container.find("select");
-
- fieldVal = self.getMetaSelectVal($field);
-
- }
- else if(inputType=="multiselect")
- {
- $field = $container.find("select");
- var operator = $field.attr("data-operator");
-
- fieldVal = self.getMetaMultiSelectVal($field, operator);
- }
- else if(inputType=="checkbox")
- {
- $field = $container.find("ul > li input:checkbox");
-
- if($field.length>0)
- {
- var operator = $container.find("> ul").attr("data-operator");
- fieldVal = self.getMetaCheckboxVal($field, operator);
- }
- }
- else if(inputType=="radio")
- {
- $field = $container.find("ul > li input:radio");
-
- if($field.length>0)
- {
- fieldVal = self.getMetaRadioVal($field);
- }
- }
-
- fieldVal = encodeURIComponent(fieldVal);
- if(typeof($field)!=="undefined")
- {
- if($field.length>0)
- {
- fieldName = $field.attr("name").replace('[]', '');
-
- //for those who insist on using & ampersands in the name of the custom field (!)
- fieldName = (fieldName);
- }
- }
-
- }
- else if(metaType=="date")
- {
- self.processPostDate($container);
- }
-
- if(typeof(fieldVal)!="undefined")
- {
- if(fieldVal!="")
- {
- //self.url_components += "&"+encodeURIComponent(fieldName)+"="+(fieldVal);
- self.url_params[encodeURIComponent(fieldName)] = (fieldVal);
- }
- }
- },
- processPostDate: function($container)
- {
- var self = this;
-
- var fieldType = $container.attr("data-sf-field-type");
- var inputType = $container.attr("data-sf-field-input-type");
-
- var $field;
- var fieldName = "";
- var fieldVal = "";
-
- $field = $container.find("ul > li input:text");
- fieldName = $field.attr("name").replace('[]', '');
-
- var dates = [];
- $field.each(function(){
-
- dates.push($(this).val());
-
- });
-
- if($field.length==2)
- {
- if((dates[0]!="")||(dates[1]!=""))
- {
- fieldVal = dates.join("+");
- fieldVal = fieldVal.replace(/\//g,'');
- }
- }
- else if($field.length==1)
- {
- if(dates[0]!="")
- {
- fieldVal = dates.join("+");
- fieldVal = fieldVal.replace(/\//g,'');
- }
- }
-
- if(typeof(fieldVal)!="undefined")
- {
- if(fieldVal!="")
- {
- var fieldSlug = "";
-
- if(fieldName=="_sf_post_date")
- {
- fieldSlug = "post_date";
- }
- else
- {
- fieldSlug = fieldName;
- }
-
- if(fieldSlug!="")
- {
- //self.url_components += "&"+fieldSlug+"="+fieldVal;
- self.url_params[fieldSlug] = fieldVal;
- }
- }
- }
-
- },
- processTaxonomy: function($container, return_object)
- {
- if(typeof(return_object)=="undefined")
- {
- return_object = false;
- }
-
- //if()
- //var fieldName = $(this).attr("data-sf-field-name");
- var self = this;
-
- var fieldType = $container.attr("data-sf-field-type");
- var inputType = $container.attr("data-sf-field-input-type");
-
- var $field;
- var fieldName = "";
- var fieldVal = "";
-
- if(inputType=="select")
- {
- $field = $container.find("select");
- fieldName = $field.attr("name").replace('[]', '');
-
- fieldVal = self.getSelectVal($field);
- }
- else if(inputType=="multiselect")
- {
- $field = $container.find("select");
- fieldName = $field.attr("name").replace('[]', '');
- var operator = $field.attr("data-operator");
-
- fieldVal = self.getMultiSelectVal($field, operator);
- }
- else if(inputType=="checkbox")
- {
- $field = $container.find("ul > li input:checkbox");
- if($field.length>0)
- {
- fieldName = $field.attr("name").replace('[]', '');
-
- var operator = $container.find("> ul").attr("data-operator");
- fieldVal = self.getCheckboxVal($field, operator);
- }
- }
- else if(inputType=="radio")
- {
- $field = $container.find("ul > li input:radio");
- if($field.length>0)
- {
- fieldName = $field.attr("name").replace('[]', '');
-
- fieldVal = self.getRadioVal($field);
- }
- }
-
- if(typeof(fieldVal)!="undefined")
- {
- if(fieldVal!="")
- {
- if(return_object==true)
- {
- return {name: fieldName, value: fieldVal};
- }
- else
- {
- //self.url_components += "&"+fieldName+"="+fieldVal;
- self.url_params[fieldName] = fieldVal;
- }
-
- }
- }
-
- if(return_object==true)
- {
- return false;
- }
- }
-};
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9wdWJsaWMvYXNzZXRzL2pzL2luY2x1ZGVzL3Byb2Nlc3NfZm9ybS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIlxudmFyICQgPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snalF1ZXJ5J10gOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsWydqUXVlcnknXSA6IG51bGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuXHR0YXhvbm9teV9hcmNoaXZlczogMCxcbiAgICB1cmxfcGFyYW1zOiB7fSxcbiAgICB0YXhfYXJjaGl2ZV9yZXN1bHRzX3VybDogXCJcIixcbiAgICBhY3RpdmVfdGF4OiBcIlwiLFxuICAgIGZpZWxkczoge30sXG5cdGluaXQ6IGZ1bmN0aW9uKHRheG9ub215X2FyY2hpdmVzLCBjdXJyZW50X3RheG9ub215X2FyY2hpdmUpe1xuXG4gICAgICAgIHRoaXMudGF4b25vbXlfYXJjaGl2ZXMgPSAwO1xuICAgICAgICB0aGlzLnVybF9wYXJhbXMgPSB7fTtcbiAgICAgICAgdGhpcy50YXhfYXJjaGl2ZV9yZXN1bHRzX3VybCA9IFwiXCI7XG4gICAgICAgIHRoaXMuYWN0aXZlX3RheCA9IFwiXCI7XG5cblx0XHQvL3RoaXMuJGZpZWxkcyA9ICRmaWVsZHM7XG4gICAgICAgIHRoaXMudGF4b25vbXlfYXJjaGl2ZXMgPSB0YXhvbm9teV9hcmNoaXZlcztcbiAgICAgICAgdGhpcy5jdXJyZW50X3RheG9ub215X2FyY2hpdmUgPSBjdXJyZW50X3RheG9ub215X2FyY2hpdmU7XG5cblx0XHR0aGlzLmNsZWFyVXJsQ29tcG9uZW50cygpO1xuXG5cdH0sXG4gICAgc2V0VGF4QXJjaGl2ZVJlc3VsdHNVcmw6IGZ1bmN0aW9uKCRmb3JtLCBjdXJyZW50X3Jlc3VsdHNfdXJsLCBnZXRfYWN0aXZlKSB7XG5cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXHRcdHRoaXMuY2xlYXJUYXhBcmNoaXZlUmVzdWx0c1VybCgpO1xuICAgICAgICAvL3ZhciBjdXJyZW50X3Jlc3VsdHNfdXJsID0gXCJcIjtcbiAgICAgICAgaWYodGhpcy50YXhvbm9teV9hcmNoaXZlcyE9MSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mKGdldF9hY3RpdmUpPT1cInVuZGVmaW5lZFwiKVxuXHRcdHtcblx0XHRcdHZhciBnZXRfYWN0aXZlID0gZmFsc2U7XG5cdFx0fVxuXG4gICAgICAgIC8vY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYW55IHRheG9ub21pZXMgc2VsZWN0ZWRcbiAgICAgICAgLy9pZiBzbywgY2hlY2sgdGhlaXIgcmV3cml0ZXMgYW5kIHVzZSB0aG9zZSBhcyB0aGUgcmVzdWx0cyB1cmxcbiAgICAgICAgdmFyICRmaWVsZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZmllbGRfbmFtZSA9IFwiXCI7XG4gICAgICAgIHZhciBmaWVsZF92YWx1ZSA9IFwiXCI7XG5cbiAgICAgICAgdmFyICRhY3RpdmVfdGF4b25vbXkgPSAkZm9ybS4kZmllbGRzLnBhcmVudCgpLmZpbmQoXCJbZGF0YS1zZi10YXhvbm9teS1hcmNoaXZlPScxJ11cIik7XG4gICAgICAgIGlmKCRhY3RpdmVfdGF4b25vbXkubGVuZ3RoPT0xKVxuICAgICAgICB7XG4gICAgICAgICAgICAkZmllbGQgPSAkYWN0aXZlX3RheG9ub215O1xuXG4gICAgICAgICAgICB2YXIgZmllbGRUeXBlID0gJGZpZWxkLmF0dHIoXCJkYXRhLXNmLWZpZWxkLXR5cGVcIik7XG5cbiAgICAgICAgICAgIGlmICgoZmllbGRUeXBlID09IFwidGFnXCIpIHx8IChmaWVsZFR5cGUgPT0gXCJjYXRlZ29yeVwiKSB8fCAoZmllbGRUeXBlID09IFwidGF4b25vbXlcIikpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGF4b25vbXlfdmFsdWUgPSBzZWxmLnByb2Nlc3NUYXhvbm9teSgkZmllbGQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGZpZWxkX25hbWUgPSAkZmllbGQuYXR0cihcImRhdGEtc2YtZmllbGQtbmFtZVwiKTtcbiAgICAgICAgICAgICAgICB2YXIgdGF4b25vbXlfbmFtZSA9IGZpZWxkX25hbWUucmVwbGFjZShcIl9zZnRfXCIsIFwiXCIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRheG9ub215X3ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkX3ZhbHVlID0gdGF4b25vbXlfdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihmaWVsZF92YWx1ZT09XCJcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAkZmllbGQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKChzZWxmLmN1cnJlbnRfdGF4b25vbXlfYXJjaGl2ZSE9XCJcIikmJihzZWxmLmN1cnJlbnRfdGF4b25vbXlfYXJjaGl2ZSE9dGF4b25vbXlfbmFtZSkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdGhpcy50YXhfYXJjaGl2ZV9yZXN1bHRzX3VybCA9IGN1cnJlbnRfcmVzdWx0c191cmw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZigoKGZpZWxkX3ZhbHVlPT1cIlwiKXx8KCEkZmllbGQpICkpXG4gICAgICAgIHtcbiAgICAgICAgICAgICRmb3JtLiRmaWVsZHMuZWFjaChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoISRmaWVsZCkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZFR5cGUgPSAkKHRoaXMpLmF0dHIoXCJkYXRhLXNmLWZpZWxkLXR5cGVcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKChmaWVsZFR5cGUgPT0gXCJ0YWdcIikgfHwgKGZpZWxkVHlwZSA9PSBcImNhdGVnb3J5XCIpIHx8IChmaWVsZFR5cGUgPT0gXCJ0YXhvbm9teVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRheG9ub215X3ZhbHVlID0gc2VsZi5wcm9jZXNzVGF4b25vbXkoJCh0aGlzKSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1zZi1maWVsZC1uYW1lXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGF4b25vbXlfdmFsdWUpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX3ZhbHVlID0gdGF4b25vbXlfdmFsdWUudmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRfdmFsdWUgIT0gXCJcIikge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWVsZCA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCAoJGZpZWxkKSAmJiAoZmllbGRfdmFsdWUgIT0gXCJcIiApKSB7XG4gICAgICAgICAgICAvL2lmIHdlIGZvdW5kIGEgZmllbGRcblx0XHRcdHZhciByZXdyaXRlX2F0dHIgPSAoJGZpZWxkLmF0dHIoXCJkYXRhLXNmLXRlcm0tcmV3cml0ZVwiKSk7XG5cbiAgICAgICAgICAgIGlmKHJld3JpdGVfYXR0ciE9XCJcIikge1xuXG4gICAgICAgICAgICAgICAgdmFyIHJld3JpdGUgPSBKU09OLnBhcnNlKHJld3JpdGVfYXR0cik7XG4gICAgICAgICAgICAgICAgdmFyIGlucHV0X3R5cGUgPSAkZmllbGQuYXR0cihcImRhdGEtc2YtZmllbGQtaW5wdXQtdHlwZVwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLmFjdGl2ZV90YXggPSBmaWVsZF9uYW1lO1xuXG4gICAgICAgICAgICAgICAgLy9maW5kIHRoZSBhY3RpdmUgZWxlbWVudFxuICAgICAgICAgICAgICAgIGlmICgoaW5wdXRfdHlwZSA9PSBcInJhZGlvXCIpIHx8IChpbnB1dF90eXBlID09IFwiY2hlY2tib3hcIikpIHtcblxuICAgICAgICAgICAgICAgICAgICAvL3ZhciAkYWN0aXZlID0gJGZpZWxkLmZpbmQoXCIuc2Ytb3B0aW9uLWFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgLy9leHBsb2RlIHRoZSB2YWx1ZXMgaWYgdGhlcmUgaXMgYSBkZWxpbVxuICAgICAgICAgICAgICAgICAgICAvL2ZpZWxkX3ZhbHVlXG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzX3NpbmdsZV92YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZF92YWx1ZXMgPSBmaWVsZF92YWx1ZS5zcGxpdChcIixcIikuam9pbihcIitcIikuc3BsaXQoXCIrXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRfdmFsdWVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NpbmdsZV92YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3NpbmdsZV92YWx1ZSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGlucHV0ID0gJGZpZWxkLmZpbmQoXCJpbnB1dFt2YWx1ZT0nXCIgKyBmaWVsZF92YWx1ZSArIFwiJ11cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGFjdGl2ZSA9ICRpbnB1dC5wYXJlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXB0aCA9ICRhY3RpdmUuYXR0cihcImRhdGEtc2YtZGVwdGhcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbm93IGxvb3AgdGhyb3VnaCBwYXJlbnRzIHRvIGdyYWIgdGhlaXIgbmFtZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGZpZWxkX3ZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IGRlcHRoOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFjdGl2ZSA9ICRhY3RpdmUucGFyZW50KCkucGFyZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goJGFjdGl2ZS5maW5kKFwiaW5wdXRcIikudmFsKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucmV2ZXJzZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2dyYWIgdGhlIHJld3JpdGUgZm9yIHRoaXMgZGVwdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY3RpdmVfcmV3cml0ZSA9IHJld3JpdGVbZGVwdGhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IGFjdGl2ZV9yZXdyaXRlO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlbiBtYXAgZnJvbSB0aGUgcGFyZW50cyB0byB0aGUgZGVwdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICQodmFsdWVzKS5lYWNoKGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKFwiW1wiICsgaW5kZXggKyBcIl1cIiwgdmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGF4X2FyY2hpdmVfcmVzdWx0c191cmwgPSB1cmw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgdGhlcmUgYXJlIG11bHRpcGxlIHZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlbiB3ZSBuZWVkIHRvIGNoZWNrIGZvciAzIHRoaW5nczpcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiB0aGUgdmFsdWVzIHNlbGVjdGVkIGFyZSBhbGwgaW4gdGhlIHNhbWUgdHJlZSB0aGVuIHdlIGNhbiBkbyBzb21lIGNsZXZlciByZXdyaXRlIHN0dWZmXG4gICAgICAgICAgICAgICAgICAgICAgICAvL21lcmdlIGFsbCB2YWx1ZXMgaW4gc2FtZSBsZXZlbCwgdGhlbiBjb21iaW5lIHRoZSBsZXZlbHNcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiB0aGV5IGFyZSBmcm9tIGRpZmZlcmVudCB0cmVlcyB0aGVuIGp1c3QgY29tYmluZSB0aGVtIG9yIGp1c3QgdXNlIGBmaWVsZF92YWx1ZWBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVwdGhzID0gbmV3IEFycmF5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgJChmaWVsZF92YWx1ZXMpLmVhY2goZnVuY3Rpb24gKGluZGV4LCB2YWwpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkaW5wdXQgPSAkZmllbGQuZmluZChcImlucHV0W3ZhbHVlPSdcIiArIGZpZWxkX3ZhbHVlICsgXCInXVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGFjdGl2ZSA9ICRpbnB1dC5wYXJlbnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXB0aCA9ICRhY3RpdmUuYXR0cihcImRhdGEtc2YtZGVwdGhcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgLy9kZXB0aHMucHVzaChkZXB0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICB9KTsqL1xuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoKGlucHV0X3R5cGUgPT0gXCJzZWxlY3RcIikgfHwgKGlucHV0X3R5cGUgPT0gXCJtdWx0aXNlbGVjdFwiKSkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBpc19zaW5nbGVfdmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmllbGRfdmFsdWVzID0gZmllbGRfdmFsdWUuc3BsaXQoXCIsXCIpLmpvaW4oXCIrXCIpLnNwbGl0KFwiK1wiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkX3ZhbHVlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc19zaW5nbGVfdmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc19zaW5nbGVfdmFsdWUpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRhY3RpdmUgPSAkZmllbGQuZmluZChcIm9wdGlvblt2YWx1ZT0nXCIgKyBmaWVsZF92YWx1ZSArIFwiJ11cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVwdGggPSAkYWN0aXZlLmF0dHIoXCJkYXRhLXNmLWRlcHRoXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChmaWVsZF92YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBkZXB0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhY3RpdmUgPSAkYWN0aXZlLnByZXZBbGwoXCJvcHRpb25bZGF0YS1zZi1kZXB0aD0nXCIgKyAoaSAtIDEpICsgXCInXVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCgkYWN0aXZlLnZhbCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY3RpdmVfcmV3cml0ZSA9IHJld3JpdGVbZGVwdGhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IGFjdGl2ZV9yZXdyaXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh2YWx1ZXMpLmVhY2goZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoXCJbXCIgKyBpbmRleCArIFwiXVwiLCB2YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YXhfYXJjaGl2ZV9yZXN1bHRzX3VybCA9IHVybDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgLy90aGlzLnRheF9hcmNoaXZlX3Jlc3VsdHNfdXJsID0gY3VycmVudF9yZXN1bHRzX3VybDtcbiAgICB9LFxuICAgIGdldFJlc3VsdHNVcmw6IGZ1bmN0aW9uKCRmb3JtLCBjdXJyZW50X3Jlc3VsdHNfdXJsKSB7XG5cbiAgICAgICAgLy90aGlzLnNldFRheEFyY2hpdmVSZXN1bHRzVXJsKCRmb3JtLCBjdXJyZW50X3Jlc3VsdHNfdXJsKTtcblxuICAgICAgICBpZih0aGlzLnRheF9hcmNoaXZlX3Jlc3VsdHNfdXJsPT1cIlwiKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudF9yZXN1bHRzX3VybDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnRheF9hcmNoaXZlX3Jlc3VsdHNfdXJsO1xuICAgIH0sXG5cdGdldFVybFBhcmFtczogZnVuY3Rpb24oJGZvcm0pe1xuXG5cdFx0dGhpcy5idWlsZFVybENvbXBvbmVudHMoJGZvcm0sIHRydWUpO1xuXG4gICAgICAgIGlmKHRoaXMudGF4X2FyY2hpdmVfcmVzdWx0c191cmwhPVwiXCIpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYodGhpcy5hY3RpdmVfdGF4IT1cIlwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBmaWVsZF9uYW1lID0gdGhpcy5hY3RpdmVfdGF4O1xuXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mKHRoaXMudXJsX3BhcmFtc1tmaWVsZF9uYW1lXSkhPVwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy51cmxfcGFyYW1zW2ZpZWxkX25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cdFx0cmV0dXJuIHRoaXMudXJsX3BhcmFtcztcblx0fSxcblx0Y2xlYXJVcmxDb21wb25lbnRzOiBmdW5jdGlvbigpe1xuXHRcdC8vdGhpcy51cmxfY29tcG9uZW50cyA9IFwiXCI7XG5cdFx0dGhpcy51cmxfcGFyYW1zID0ge307XG5cdH0sXG5cdGNsZWFyVGF4QXJjaGl2ZVJlc3VsdHNVcmw6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMudGF4X2FyY2hpdmVfcmVzdWx0c191cmwgPSAnJztcblx0fSxcblx0ZGlzYWJsZUlucHV0czogZnVuY3Rpb24oJGZvcm0pe1xuXHRcdHZhciBzZWxmID0gdGhpcztcblx0XHRcblx0XHQkZm9ybS4kZmllbGRzLmVhY2goZnVuY3Rpb24oKXtcblx0XHRcdFxuXHRcdFx0dmFyICRpbnB1dHMgPSAkKHRoaXMpLmZpbmQoXCJpbnB1dCwgc2VsZWN0LCAubWV0YS1zbGlkZXJcIik7XG5cdFx0XHQkaW5wdXRzLmF0dHIoXCJkaXNhYmxlZFwiLCBcImRpc2FibGVkXCIpO1xuXHRcdFx0JGlucHV0cy5hdHRyKFwiZGlzYWJsZWRcIiwgdHJ1ZSk7XG5cdFx0XHQkaW5wdXRzLnByb3AoXCJkaXNhYmxlZFwiLCB0cnVlKTtcblx0XHRcdCRpbnB1dHMudHJpZ2dlcihcImNob3Nlbjp1cGRhdGVkXCIpO1xuXHRcdFx0XG5cdFx0fSk7XG5cdFx0XG5cdFx0XG5cdH0sXG5cdGVuYWJsZUlucHV0czogZnVuY3Rpb24oJGZvcm0pe1xuXHRcdHZhciBzZWxmID0gdGhpcztcblx0XHQkZm9ybS4kZmllbGRzLmVhY2goZnVuY3Rpb24oKXtcblx0XHRcdHZhciAkaW5wdXRzID0gJCh0aGlzKS5maW5kKFwiaW5wdXQsIHNlbGVjdCwgLm1ldGEtc2xpZGVyXCIpO1xuXHRcdFx0JGlucHV0cy5wcm9wKFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xuXHRcdFx0JGlucHV0cy5hdHRyKFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xuXHRcdFx0JGlucHV0cy50cmlnZ2VyKFwiY2hvc2VuOnVwZGF0ZWRcIik7XHRcdFx0XG5cdFx0fSk7XG5cdFx0XG5cdFx0XG5cdH0sXG5cdGJ1aWxkVXJsQ29tcG9uZW50czogZnVuY3Rpb24oJGZvcm0sIGNsZWFyX2NvbXBvbmVudHMpe1xuXHRcdFxuXHRcdHZhciBzZWxmID0gdGhpcztcblx0XHRcblx0XHRpZih0eXBlb2YoY2xlYXJfY29tcG9uZW50cykhPVwidW5kZWZpbmVkXCIpXG5cdFx0e1xuXHRcdFx0aWYoY2xlYXJfY29tcG9uZW50cz09dHJ1ZSlcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5jbGVhclVybENvbXBvbmVudHMoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0JGZvcm0uJGZpZWxkcy5lYWNoKGZ1bmN0aW9uKCl7XG5cdFx0XHRcblx0XHRcdHZhciBmaWVsZE5hbWUgPSAkKHRoaXMpLmF0dHIoXCJkYXRhLXNmLWZpZWxkLW5hbWVcIik7XG5cdFx0XHR2YXIgZmllbGRUeXBlID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1zZi1maWVsZC10eXBlXCIpO1xuXHRcdFx0XG5cdFx0XHRpZihmaWVsZFR5cGU9PVwic2VhcmNoXCIpXG5cdFx0XHR7XG5cdFx0XHRcdHNlbGYucHJvY2Vzc1NlYXJjaEZpZWxkKCQodGhpcykpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZigoZmllbGRUeXBlPT1cInRhZ1wiKXx8KGZpZWxkVHlwZT09XCJjYXRlZ29yeVwiKXx8KGZpZWxkVHlwZT09XCJ0YXhvbm9teVwiKSlcblx0XHRcdHtcblx0XHRcdFx0c2VsZi5wcm9jZXNzVGF4b25vbXkoJCh0aGlzKSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKGZpZWxkVHlwZT09XCJzb3J0X29yZGVyXCIpXG5cdFx0XHR7XG5cdFx0XHRcdHNlbGYucHJvY2Vzc1NvcnRPcmRlckZpZWxkKCQodGhpcykpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZihmaWVsZFR5cGU9PVwicG9zdHNfcGVyX3BhZ2VcIilcblx0XHRcdHtcblx0XHRcdFx0c2VsZi5wcm9jZXNzUmVzdWx0c1BlclBhZ2VGaWVsZCgkKHRoaXMpKTtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYoZmllbGRUeXBlPT1cImF1dGhvclwiKVxuXHRcdFx0e1xuXHRcdFx0XHRzZWxmLnByb2Nlc3NBdXRob3IoJCh0aGlzKSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKGZpZWxkVHlwZT09XCJwb3N0X3R5cGVcIilcblx0XHRcdHtcblx0XHRcdFx0c2VsZi5wcm9jZXNzUG9zdFR5cGUoJCh0aGlzKSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKGZpZWxkVHlwZT09XCJwb3N0X2RhdGVcIilcblx0XHRcdHtcblx0XHRcdFx0c2VsZi5wcm9jZXNzUG9zdERhdGUoJCh0aGlzKSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKGZpZWxkVHlwZT09XCJwb3N0X21ldGFcIilcblx0XHRcdHtcblx0XHRcdFx0c2VsZi5wcm9jZXNzUG9zdE1ldGEoJCh0aGlzKSk7XG5cdFx0XHRcdFxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHRcblx0XHRcdH1cblx0XHRcdFxuXHRcdH0pO1xuXHRcdFxuXHR9LFxuXHRwcm9jZXNzU2VhcmNoRmllbGQ6IGZ1bmN0aW9uKCRjb250YWluZXIpXG5cdHtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0XG5cdFx0dmFyICRmaWVsZCA9ICRjb250YWluZXIuZmluZChcImlucHV0W25hbWVePSdfc2Zfc2VhcmNoJ11cIik7XG5cdFx0XG5cdFx0aWYoJGZpZWxkLmxlbmd0aD4wKVxuXHRcdHtcblx0XHRcdHZhciBmaWVsZE5hbWUgPSAkZmllbGQuYXR0cihcIm5hbWVcIikucmVwbGFjZSgnW10nLCAnJyk7XG5cdFx0XHR2YXIgZmllbGRWYWwgPSAkZmllbGQudmFsKCk7XG5cdFx0XHRcblx0XHRcdGlmKGZpZWxkVmFsIT1cIlwiKVxuXHRcdFx0e1xuXHRcdFx0XHQvL3NlbGYudXJsX2NvbXBvbmVudHMgKz0gXCImX3NmX3M9XCIrZW5jb2RlVVJJQ29tcG9uZW50KGZpZWxkVmFsKTtcblx0XHRcdFx0c2VsZi51cmxfcGFyYW1zWydfc2ZfcyddID0gZW5jb2RlVVJJQ29tcG9uZW50KGZpZWxkVmFsKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdHByb2Nlc3NTb3J0T3JkZXJGaWVsZDogZnVuY3Rpb24oJGNvbnRhaW5lcilcblx0e1xuXHRcdHRoaXMucHJvY2Vzc0F1dGhvcigkY29udGFpbmVyKTtcblx0XHRcblx0fSxcblx0cHJvY2Vzc1Jlc3VsdHNQZXJQYWdlRmllbGQ6IGZ1bmN0aW9uKCRjb250YWluZXIpXG5cdHtcblx0XHR0aGlzLnByb2Nlc3NBdXRob3IoJGNvbnRhaW5lcik7XG5cdFx0XG5cdH0sXG5cdGdldEFjdGl2ZVRheDogZnVuY3Rpb24oJGZpZWxkKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWN0aXZlX3RheDtcblx0fSxcblx0Z2V0U2VsZWN0VmFsOiBmdW5jdGlvbigkZmllbGQpe1xuXG5cdFx0dmFyIGZpZWxkVmFsID0gXCJcIjtcblx0XHRcblx0XHRpZigkZmllbGQudmFsKCkhPTApXG5cdFx0e1xuXHRcdFx0ZmllbGRWYWwgPSAkZmllbGQudmFsKCk7XG5cdFx0fVxuXHRcdFxuXHRcdGlmKGZpZWxkVmFsPT1udWxsKVxuXHRcdHtcblx0XHRcdGZpZWxkVmFsID0gXCJcIjtcblx0XHR9XG5cdFx0XG5cdFx0cmV0dXJuIGZpZWxkVmFsO1xuXHR9LFxuXHRnZXRNZXRhU2VsZWN0VmFsOiBmdW5jdGlvbigkZmllbGQpe1xuXHRcdFxuXHRcdHZhciBmaWVsZFZhbCA9IFwiXCI7XG5cdFx0XG5cdFx0ZmllbGRWYWwgPSAkZmllbGQudmFsKCk7XG5cdFx0XHRcdFx0XHRcblx0XHRpZihmaWVsZFZhbD09bnVsbClcblx0XHR7XG5cdFx0XHRmaWVsZFZhbCA9IFwiXCI7XG5cdFx0fVxuXHRcdFxuXHRcdHJldHVybiBmaWVsZFZhbDtcblx0fSxcblx0Z2V0TXVsdGlTZWxlY3RWYWw6IGZ1bmN0aW9uKCRmaWVsZCwgb3BlcmF0b3Ipe1xuXHRcdFxuXHRcdHZhciBkZWxpbSA9IFwiK1wiO1xuXHRcdGlmKG9wZXJhdG9yPT1cIm9yXCIpXG5cdFx0e1xuXHRcdFx0ZGVsaW0gPSBcIixcIjtcblx0XHR9XG5cdFx0XG5cdFx0aWYodHlwZW9mKCRmaWVsZC52YWwoKSk9PVwib2JqZWN0XCIpXG5cdFx0e1xuXHRcdFx0aWYoJGZpZWxkLnZhbCgpIT1udWxsKVxuXHRcdFx0e1xuXHRcdFx0XHRyZXR1cm4gJGZpZWxkLnZhbCgpLmpvaW4oZGVsaW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRcblx0fSxcblx0Z2V0TWV0YU11bHRpU2VsZWN0VmFsOiBmdW5jdGlvbigkZmllbGQsIG9wZXJhdG9yKXtcblx0XHRcblx0XHR2YXIgZGVsaW0gPSBcIi0rLVwiO1xuXHRcdGlmKG9wZXJhdG9yPT1cIm9yXCIpXG5cdFx0e1xuXHRcdFx0ZGVsaW0gPSBcIi0sLVwiO1xuXHRcdH1cblx0XHRcdFx0XG5cdFx0aWYodHlwZW9mKCRmaWVsZC52YWwoKSk9PVwib2JqZWN0XCIpXG5cdFx0e1xuXHRcdFx0aWYoJGZpZWxkLnZhbCgpIT1udWxsKVxuXHRcdFx0e1xuXHRcdFx0XHRcblx0XHRcdFx0dmFyIGZpZWxkdmFsID0gW107XG5cdFx0XHRcdFxuXHRcdFx0XHQkKCRmaWVsZC52YWwoKSkuZWFjaChmdW5jdGlvbihpbmRleCx2YWx1ZSl7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0ZmllbGR2YWwucHVzaCgodmFsdWUpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdFxuXHRcdFx0XHRyZXR1cm4gZmllbGR2YWwuam9pbihkZWxpbSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdFxuXHRcdHJldHVybiBcIlwiO1xuXHRcdFxuXHR9LFxuXHRnZXRDaGVja2JveFZhbDogZnVuY3Rpb24oJGZpZWxkLCBvcGVyYXRvcil7XG5cdFx0XG5cdFx0XG5cdFx0dmFyIGZpZWxkVmFsID0gJGZpZWxkLm1hcChmdW5jdGlvbigpe1xuXHRcdFx0aWYoJCh0aGlzKS5wcm9wKFwiY2hlY2tlZFwiKT09dHJ1ZSlcblx0XHRcdHtcblx0XHRcdFx0cmV0dXJuICQodGhpcykudmFsKCk7XG5cdFx0XHR9XG5cdFx0fSkuZ2V0KCk7XG5cdFx0XG5cdFx0dmFyIGRlbGltID0gXCIrXCI7XG5cdFx0aWYob3BlcmF0b3I9PVwib3JcIilcblx0XHR7XG5cdFx0XHRkZWxpbSA9IFwiLFwiO1xuXHRcdH1cblx0XHRcblx0XHRyZXR1cm4gZmllbGRWYWwuam9pbihkZWxpbSk7XG5cdH0sXG5cdGdldE1ldGFDaGVja2JveFZhbDogZnVuY3Rpb24oJGZpZWxkLCBvcGVyYXRvcil7XG5cdFx0XG5cdFx0XG5cdFx0dmFyIGZpZWxkVmFsID0gJGZpZWxkLm1hcChmdW5jdGlvbigpe1xuXHRcdFx0aWYoJCh0aGlzKS5wcm9wKFwiY2hlY2tlZFwiKT09dHJ1ZSlcblx0XHRcdHtcblx0XHRcdFx0cmV0dXJuICgkKHRoaXMpLnZhbCgpKTtcblx0XHRcdH1cblx0XHR9KS5nZXQoKTtcblx0XHRcblx0XHR2YXIgZGVsaW0gPSBcIi0rLVwiO1xuXHRcdGlmKG9wZXJhdG9yPT1cIm9yXCIpXG5cdFx0e1xuXHRcdFx0ZGVsaW0gPSBcIi0sLVwiO1xuXHRcdH1cblx0XHRcblx0XHRyZXR1cm4gZmllbGRWYWwuam9pbihkZWxpbSk7XG5cdH0sXG5cdGdldFJhZGlvVmFsOiBmdW5jdGlvbigkZmllbGQpe1xuXHRcdFx0XHRcdFx0XHRcblx0XHR2YXIgZmllbGRWYWwgPSAkZmllbGQubWFwKGZ1bmN0aW9uKClcblx0XHR7XG5cdFx0XHRpZigkKHRoaXMpLnByb3AoXCJjaGVja2VkXCIpPT10cnVlKVxuXHRcdFx0e1xuXHRcdFx0XHRyZXR1cm4gJCh0aGlzKS52YWwoKTtcblx0XHRcdH1cblx0XHRcdFxuXHRcdH0pLmdldCgpO1xuXHRcdFxuXHRcdFxuXHRcdGlmKGZpZWxkVmFsWzBdIT0wKVxuXHRcdHtcblx0XHRcdHJldHVybiBmaWVsZFZhbFswXTtcblx0XHR9XG5cdH0sXG5cdGdldE1ldGFSYWRpb1ZhbDogZnVuY3Rpb24oJGZpZWxkKXtcblx0XHRcdFx0XHRcdFx0XG5cdFx0dmFyIGZpZWxkVmFsID0gJGZpZWxkLm1hcChmdW5jdGlvbigpXG5cdFx0e1xuXHRcdFx0aWYoJCh0aGlzKS5wcm9wKFwiY2hlY2tlZFwiKT09dHJ1ZSlcblx0XHRcdHtcblx0XHRcdFx0cmV0dXJuICQodGhpcykudmFsKCk7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHR9KS5nZXQoKTtcblx0XHRcblx0XHRyZXR1cm4gZmllbGRWYWxbMF07XG5cdH0sXG5cdHByb2Nlc3NBdXRob3I6IGZ1bmN0aW9uKCRjb250YWluZXIpXG5cdHtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0XG5cdFx0XG5cdFx0dmFyIGZpZWxkVHlwZSA9ICRjb250YWluZXIuYXR0cihcImRhdGEtc2YtZmllbGQtdHlwZVwiKTtcblx0XHR2YXIgaW5wdXRUeXBlID0gJGNvbnRhaW5lci5hdHRyKFwiZGF0YS1zZi1maWVsZC1pbnB1dC10eXBlXCIpO1xuXHRcdFxuXHRcdHZhciAkZmllbGQ7XG5cdFx0dmFyIGZpZWxkTmFtZSA9IFwiXCI7XG5cdFx0dmFyIGZpZWxkVmFsID0gXCJcIjtcblx0XHRcblx0XHRpZihpbnB1dFR5cGU9PVwic2VsZWN0XCIpXG5cdFx0e1xuXHRcdFx0JGZpZWxkID0gJGNvbnRhaW5lci5maW5kKFwic2VsZWN0XCIpO1xuXHRcdFx0ZmllbGROYW1lID0gJGZpZWxkLmF0dHIoXCJuYW1lXCIpLnJlcGxhY2UoJ1tdJywgJycpO1xuXHRcdFx0XG5cdFx0XHRmaWVsZFZhbCA9IHNlbGYuZ2V0U2VsZWN0VmFsKCRmaWVsZCk7IFxuXHRcdH1cblx0XHRlbHNlIGlmKGlucHV0VHlwZT09XCJtdWx0aXNlbGVjdFwiKVxuXHRcdHtcblx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInNlbGVjdFwiKTtcblx0XHRcdGZpZWxkTmFtZSA9ICRmaWVsZC5hdHRyKFwibmFtZVwiKS5yZXBsYWNlKCdbXScsICcnKTtcblx0XHRcdHZhciBvcGVyYXRvciA9ICRmaWVsZC5hdHRyKFwiZGF0YS1vcGVyYXRvclwiKTtcblx0XHRcdFxuXHRcdFx0ZmllbGRWYWwgPSBzZWxmLmdldE11bHRpU2VsZWN0VmFsKCRmaWVsZCwgXCJvclwiKTtcblx0XHRcdFxuXHRcdH1cblx0XHRlbHNlIGlmKGlucHV0VHlwZT09XCJjaGVja2JveFwiKVxuXHRcdHtcblx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInVsID4gbGkgaW5wdXQ6Y2hlY2tib3hcIik7XG5cdFx0XHRcblx0XHRcdGlmKCRmaWVsZC5sZW5ndGg+MClcblx0XHRcdHtcblx0XHRcdFx0ZmllbGROYW1lID0gJGZpZWxkLmF0dHIoXCJuYW1lXCIpLnJlcGxhY2UoJ1tdJywgJycpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0dmFyIG9wZXJhdG9yID0gJGNvbnRhaW5lci5maW5kKFwiPiB1bFwiKS5hdHRyKFwiZGF0YS1vcGVyYXRvclwiKTtcblx0XHRcdFx0ZmllbGRWYWwgPSBzZWxmLmdldENoZWNrYm94VmFsKCRmaWVsZCwgXCJvclwiKTtcblx0XHRcdH1cblx0XHRcdFxuXHRcdH1cblx0XHRlbHNlIGlmKGlucHV0VHlwZT09XCJyYWRpb1wiKVxuXHRcdHtcblx0XHRcdFxuXHRcdFx0JGZpZWxkID0gJGNvbnRhaW5lci5maW5kKFwidWwgPiBsaSBpbnB1dDpyYWRpb1wiKTtcblx0XHRcdFx0XHRcdFxuXHRcdFx0aWYoJGZpZWxkLmxlbmd0aD4wKVxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZE5hbWUgPSAkZmllbGQuYXR0cihcIm5hbWVcIikucmVwbGFjZSgnW10nLCAnJyk7XG5cdFx0XHRcdFxuXHRcdFx0XHRmaWVsZFZhbCA9IHNlbGYuZ2V0UmFkaW9WYWwoJGZpZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0aWYodHlwZW9mKGZpZWxkVmFsKSE9XCJ1bmRlZmluZWRcIilcblx0XHR7XG5cdFx0XHRpZihmaWVsZFZhbCE9XCJcIilcblx0XHRcdHtcblx0XHRcdFx0dmFyIGZpZWxkU2x1ZyA9IFwiXCI7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZihmaWVsZE5hbWU9PVwiX3NmX2F1dGhvclwiKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0ZmllbGRTbHVnID0gXCJhdXRob3JzXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZihmaWVsZE5hbWU9PVwiX3NmX3NvcnRfb3JkZXJcIilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGZpZWxkU2x1ZyA9IFwic29ydF9vcmRlclwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYoZmllbGROYW1lPT1cIl9zZl9wcHBcIilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGZpZWxkU2x1ZyA9IFwiX3NmX3BwcFwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYoZmllbGROYW1lPT1cIl9zZl9wb3N0X3R5cGVcIilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGZpZWxkU2x1ZyA9IFwicG9zdF90eXBlc1wiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0e1xuXHRcdFx0XHRcblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0aWYoZmllbGRTbHVnIT1cIlwiKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Ly9zZWxmLnVybF9jb21wb25lbnRzICs9IFwiJlwiK2ZpZWxkU2x1ZytcIj1cIitmaWVsZFZhbDtcblx0XHRcdFx0XHRzZWxmLnVybF9wYXJhbXNbZmllbGRTbHVnXSA9IGZpZWxkVmFsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdFxuXHR9LFxuXHRwcm9jZXNzUG9zdFR5cGUgOiBmdW5jdGlvbigkdGhpcyl7XG5cdFx0XG5cdFx0dGhpcy5wcm9jZXNzQXV0aG9yKCR0aGlzKTtcblx0XHRcblx0fSxcblx0cHJvY2Vzc1Bvc3RNZXRhOiBmdW5jdGlvbigkY29udGFpbmVyKVxuXHR7XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdFxuXHRcdHZhciBmaWVsZFR5cGUgPSAkY29udGFpbmVyLmF0dHIoXCJkYXRhLXNmLWZpZWxkLXR5cGVcIik7XG5cdFx0dmFyIGlucHV0VHlwZSA9ICRjb250YWluZXIuYXR0cihcImRhdGEtc2YtZmllbGQtaW5wdXQtdHlwZVwiKTtcblx0XHR2YXIgbWV0YVR5cGUgPSAkY29udGFpbmVyLmF0dHIoXCJkYXRhLXNmLW1ldGEtdHlwZVwiKTtcblxuXHRcdHZhciBmaWVsZFZhbCA9IFwiXCI7XG5cdFx0dmFyICRmaWVsZDtcblx0XHR2YXIgZmllbGROYW1lID0gXCJcIjtcblx0XHRcblx0XHRpZihtZXRhVHlwZT09XCJudW1iZXJcIilcblx0XHR7XG5cdFx0XHRpZihpbnB1dFR5cGU9PVwicmFuZ2UtbnVtYmVyXCIpXG5cdFx0XHR7XG5cdFx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcIi5zZi1tZXRhLXJhbmdlLW51bWJlciBpbnB1dFwiKTtcblx0XHRcdFx0XG5cdFx0XHRcdHZhciB2YWx1ZXMgPSBbXTtcblx0XHRcdFx0JGZpZWxkLmVhY2goZnVuY3Rpb24oKXtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHR2YWx1ZXMucHVzaCgkKHRoaXMpLnZhbCgpKTtcblx0XHRcdFx0XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRcblx0XHRcdFx0ZmllbGRWYWwgPSB2YWx1ZXMuam9pbihcIitcIik7XG5cdFx0XHRcdFxuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZihpbnB1dFR5cGU9PVwicmFuZ2Utc2xpZGVyXCIpXG5cdFx0XHR7XG5cdFx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcIi5zZi1tZXRhLXJhbmdlLXNsaWRlciBpbnB1dFwiKTtcblx0XHRcdFx0XG5cdFx0XHRcdC8vZ2V0IGFueSBudW1iZXIgZm9ybWF0dGluZyBzdHVmZlxuXHRcdFx0XHR2YXIgJG1ldGFfcmFuZ2UgPSAkY29udGFpbmVyLmZpbmQoXCIuc2YtbWV0YS1yYW5nZS1zbGlkZXJcIik7XG5cdFx0XHRcdFxuXHRcdFx0XHR2YXIgZGVjaW1hbF9wbGFjZXMgPSAkbWV0YV9yYW5nZS5hdHRyKFwiZGF0YS1kZWNpbWFsLXBsYWNlc1wiKTtcblx0XHRcdFx0dmFyIHRob3VzYW5kX3NlcGVyYXRvciA9ICRtZXRhX3JhbmdlLmF0dHIoXCJkYXRhLXRob3VzYW5kLXNlcGVyYXRvclwiKTtcblx0XHRcdFx0dmFyIGRlY2ltYWxfc2VwZXJhdG9yID0gJG1ldGFfcmFuZ2UuYXR0cihcImRhdGEtZGVjaW1hbC1zZXBlcmF0b3JcIik7XG5cblx0XHRcdFx0dmFyIGZpZWxkX2Zvcm1hdCA9IHdOdW1iKHtcblx0XHRcdFx0XHRtYXJrOiBkZWNpbWFsX3NlcGVyYXRvcixcblx0XHRcdFx0XHRkZWNpbWFsczogcGFyc2VGbG9hdChkZWNpbWFsX3BsYWNlcyksXG5cdFx0XHRcdFx0dGhvdXNhbmQ6IHRob3VzYW5kX3NlcGVyYXRvclxuXHRcdFx0XHR9KTtcblx0XHRcdFx0XG5cdFx0XHRcdHZhciB2YWx1ZXMgPSBbXTtcblxuXG5cdFx0XHRcdHZhciBzbGlkZXJfb2JqZWN0ID0gJGNvbnRhaW5lci5maW5kKFwiLm1ldGEtc2xpZGVyXCIpWzBdO1xuXHRcdFx0XHQvL3ZhbCBmcm9tIHNsaWRlciBvYmplY3Rcblx0XHRcdFx0dmFyIHNsaWRlcl92YWwgPSBzbGlkZXJfb2JqZWN0Lm5vVWlTbGlkZXIuZ2V0KCk7XG5cblx0XHRcdFx0dmFsdWVzLnB1c2goZmllbGRfZm9ybWF0LmZyb20oc2xpZGVyX3ZhbFswXSkpO1xuXHRcdFx0XHR2YWx1ZXMucHVzaChmaWVsZF9mb3JtYXQuZnJvbShzbGlkZXJfdmFsWzFdKSk7XG5cdFx0XHRcdFxuXHRcdFx0XHRmaWVsZFZhbCA9IHZhbHVlcy5qb2luKFwiK1wiKTtcblx0XHRcdFx0XG5cdFx0XHRcdGZpZWxkTmFtZSA9ICRtZXRhX3JhbmdlLmF0dHIoXCJkYXRhLXNmLWZpZWxkLW5hbWVcIik7XG5cdFx0XHRcdFxuXHRcdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYoaW5wdXRUeXBlPT1cInJhbmdlLXJhZGlvXCIpXG5cdFx0XHR7XG5cdFx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcIi5zZi1pbnB1dC1yYW5nZS1yYWRpb1wiKTtcblx0XHRcdFx0XG5cdFx0XHRcdGlmKCRmaWVsZC5sZW5ndGg9PTApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQvL3RoZW4gdHJ5IGFnYWluLCB3ZSBtdXN0IGJlIHVzaW5nIGEgc2luZ2xlIGZpZWxkXG5cdFx0XHRcdFx0JGZpZWxkID0gJGNvbnRhaW5lci5maW5kKFwiPiB1bFwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciAkbWV0YV9yYW5nZSA9ICRjb250YWluZXIuZmluZChcIi5zZi1tZXRhLXJhbmdlXCIpO1xuXHRcdFx0XHRcblx0XHRcdFx0Ly90aGVyZSBpcyBhbiBlbGVtZW50IHdpdGggYSBmcm9tL3RvIGNsYXNzIC0gc28gd2UgbmVlZCB0byBnZXQgdGhlIHZhbHVlcyBvZiB0aGUgZnJvbSAmIHRvIGlucHV0IGZpZWxkcyBzZXBlcmF0ZWx5XG5cdFx0XHRcdGlmKCRmaWVsZC5sZW5ndGg+MClcblx0XHRcdFx0e1x0XG5cdFx0XHRcdFx0dmFyIGZpZWxkX3ZhbHMgPSBbXTtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHQkZmllbGQuZWFjaChmdW5jdGlvbigpe1xuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHR2YXIgJHJhZGlvcyA9ICQodGhpcykuZmluZChcIi5zZi1pbnB1dC1yYWRpb1wiKTtcblx0XHRcdFx0XHRcdGZpZWxkX3ZhbHMucHVzaChzZWxmLmdldE1ldGFSYWRpb1ZhbCgkcmFkaW9zKSk7XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHQvL3ByZXZlbnQgc2Vjb25kIG51bWJlciBmcm9tIGJlaW5nIGxvd2VyIHRoYW4gdGhlIGZpcnN0XG5cdFx0XHRcdFx0aWYoZmllbGRfdmFscy5sZW5ndGg9PTIpXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aWYoTnVtYmVyKGZpZWxkX3ZhbHNbMV0pPE51bWJlcihmaWVsZF92YWxzWzBdKSlcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0ZmllbGRfdmFsc1sxXSA9IGZpZWxkX3ZhbHNbMF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGZpZWxkVmFsID0gZmllbGRfdmFscy5qb2luKFwiK1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRpZigkZmllbGQubGVuZ3RoPT0xKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0ZmllbGROYW1lID0gJGZpZWxkLmZpbmQoXCIuc2YtaW5wdXQtcmFkaW9cIikuYXR0cihcIm5hbWVcIikucmVwbGFjZSgnW10nLCAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0ZmllbGROYW1lID0gJG1ldGFfcmFuZ2UuYXR0cihcImRhdGEtc2YtZmllbGQtbmFtZVwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKGlucHV0VHlwZT09XCJyYW5nZS1zZWxlY3RcIilcblx0XHRcdHtcblx0XHRcdFx0JGZpZWxkID0gJGNvbnRhaW5lci5maW5kKFwiLnNmLWlucHV0LXNlbGVjdFwiKTtcblx0XHRcdFx0dmFyICRtZXRhX3JhbmdlID0gJGNvbnRhaW5lci5maW5kKFwiLnNmLW1ldGEtcmFuZ2VcIik7XG5cdFx0XHRcdFxuXHRcdFx0XHQvL3RoZXJlIGlzIGFuIGVsZW1lbnQgd2l0aCBhIGZyb20vdG8gY2xhc3MgLSBzbyB3ZSBuZWVkIHRvIGdldCB0aGUgdmFsdWVzIG9mIHRoZSBmcm9tICYgdG8gaW5wdXQgZmllbGRzIHNlcGVyYXRlbHlcblx0XHRcdFx0XG5cdFx0XHRcdGlmKCRmaWVsZC5sZW5ndGg+MClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHZhciBmaWVsZF92YWxzID0gW107XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0JGZpZWxkLmVhY2goZnVuY3Rpb24oKXtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0dmFyICR0aGlzID0gJCh0aGlzKTtcblx0XHRcdFx0XHRcdGZpZWxkX3ZhbHMucHVzaChzZWxmLmdldE1ldGFTZWxlY3RWYWwoJHRoaXMpKTtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdC8vcHJldmVudCBzZWNvbmQgbnVtYmVyIGZyb20gYmVpbmcgbG93ZXIgdGhhbiB0aGUgZmlyc3Rcblx0XHRcdFx0XHRpZihmaWVsZF92YWxzLmxlbmd0aD09Milcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpZihOdW1iZXIoZmllbGRfdmFsc1sxXSk8TnVtYmVyKGZpZWxkX3ZhbHNbMF0pKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRmaWVsZF92YWxzWzFdID0gZmllbGRfdmFsc1swXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0ZmllbGRWYWwgPSBmaWVsZF92YWxzLmpvaW4oXCIrXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdGlmKCRmaWVsZC5sZW5ndGg9PTEpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRmaWVsZE5hbWUgPSAkZmllbGQuYXR0cihcIm5hbWVcIikucmVwbGFjZSgnW10nLCAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0ZmllbGROYW1lID0gJG1ldGFfcmFuZ2UuYXR0cihcImRhdGEtc2YtZmllbGQtbmFtZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYoaW5wdXRUeXBlPT1cInJhbmdlLWNoZWNrYm94XCIpXG5cdFx0XHR7XG5cdFx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInVsID4gbGkgaW5wdXQ6Y2hlY2tib3hcIik7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZigkZmllbGQubGVuZ3RoPjApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRmaWVsZFZhbCA9IHNlbGYuZ2V0Q2hlY2tib3hWYWwoJGZpZWxkLCBcImFuZFwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRpZihmaWVsZE5hbWU9PVwiXCIpXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkTmFtZSA9ICRmaWVsZC5hdHRyKFwibmFtZVwiKS5yZXBsYWNlKCdbXScsICcnKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZSBpZihtZXRhVHlwZT09XCJjaG9pY2VcIilcblx0XHR7XG5cdFx0XHRpZihpbnB1dFR5cGU9PVwic2VsZWN0XCIpXG5cdFx0XHR7XG5cdFx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInNlbGVjdFwiKTtcblx0XHRcdFx0XG5cdFx0XHRcdGZpZWxkVmFsID0gc2VsZi5nZXRNZXRhU2VsZWN0VmFsKCRmaWVsZCk7IFxuXHRcdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYoaW5wdXRUeXBlPT1cIm11bHRpc2VsZWN0XCIpXG5cdFx0XHR7XG5cdFx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInNlbGVjdFwiKTtcblx0XHRcdFx0dmFyIG9wZXJhdG9yID0gJGZpZWxkLmF0dHIoXCJkYXRhLW9wZXJhdG9yXCIpO1xuXHRcdFx0XHRcblx0XHRcdFx0ZmllbGRWYWwgPSBzZWxmLmdldE1ldGFNdWx0aVNlbGVjdFZhbCgkZmllbGQsIG9wZXJhdG9yKTtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYoaW5wdXRUeXBlPT1cImNoZWNrYm94XCIpXG5cdFx0XHR7XG5cdFx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInVsID4gbGkgaW5wdXQ6Y2hlY2tib3hcIik7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZigkZmllbGQubGVuZ3RoPjApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR2YXIgb3BlcmF0b3IgPSAkY29udGFpbmVyLmZpbmQoXCI+IHVsXCIpLmF0dHIoXCJkYXRhLW9wZXJhdG9yXCIpO1xuXHRcdFx0XHRcdGZpZWxkVmFsID0gc2VsZi5nZXRNZXRhQ2hlY2tib3hWYWwoJGZpZWxkLCBvcGVyYXRvcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2UgaWYoaW5wdXRUeXBlPT1cInJhZGlvXCIpXG5cdFx0XHR7XG5cdFx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInVsID4gbGkgaW5wdXQ6cmFkaW9cIik7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZigkZmllbGQubGVuZ3RoPjApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRmaWVsZFZhbCA9IHNlbGYuZ2V0TWV0YVJhZGlvVmFsKCRmaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0ZmllbGRWYWwgPSBlbmNvZGVVUklDb21wb25lbnQoZmllbGRWYWwpO1xuXHRcdFx0aWYodHlwZW9mKCRmaWVsZCkhPT1cInVuZGVmaW5lZFwiKVxuXHRcdFx0e1xuXHRcdFx0XHRpZigkZmllbGQubGVuZ3RoPjApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRmaWVsZE5hbWUgPSAkZmllbGQuYXR0cihcIm5hbWVcIikucmVwbGFjZSgnW10nLCAnJyk7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0Ly9mb3IgdGhvc2Ugd2hvIGluc2lzdCBvbiB1c2luZyAmIGFtcGVyc2FuZHMgaW4gdGhlIG5hbWUgb2YgdGhlIGN1c3RvbSBmaWVsZCAoISlcblx0XHRcdFx0XHRmaWVsZE5hbWUgPSAoZmllbGROYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0XG5cdFx0fVxuXHRcdGVsc2UgaWYobWV0YVR5cGU9PVwiZGF0ZVwiKVxuXHRcdHtcblx0XHRcdHNlbGYucHJvY2Vzc1Bvc3REYXRlKCRjb250YWluZXIpO1xuXHRcdH1cblx0XHRcblx0XHRpZih0eXBlb2YoZmllbGRWYWwpIT1cInVuZGVmaW5lZFwiKVxuXHRcdHtcblx0XHRcdGlmKGZpZWxkVmFsIT1cIlwiKVxuXHRcdFx0e1xuXHRcdFx0XHQvL3NlbGYudXJsX2NvbXBvbmVudHMgKz0gXCImXCIrZW5jb2RlVVJJQ29tcG9uZW50KGZpZWxkTmFtZSkrXCI9XCIrKGZpZWxkVmFsKTtcblx0XHRcdFx0c2VsZi51cmxfcGFyYW1zW2VuY29kZVVSSUNvbXBvbmVudChmaWVsZE5hbWUpXSA9IChmaWVsZFZhbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRwcm9jZXNzUG9zdERhdGU6IGZ1bmN0aW9uKCRjb250YWluZXIpXG5cdHtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0XG5cdFx0dmFyIGZpZWxkVHlwZSA9ICRjb250YWluZXIuYXR0cihcImRhdGEtc2YtZmllbGQtdHlwZVwiKTtcblx0XHR2YXIgaW5wdXRUeXBlID0gJGNvbnRhaW5lci5hdHRyKFwiZGF0YS1zZi1maWVsZC1pbnB1dC10eXBlXCIpO1xuXHRcdFxuXHRcdHZhciAkZmllbGQ7XG5cdFx0dmFyIGZpZWxkTmFtZSA9IFwiXCI7XG5cdFx0dmFyIGZpZWxkVmFsID0gXCJcIjtcblx0XHRcblx0XHQkZmllbGQgPSAkY29udGFpbmVyLmZpbmQoXCJ1bCA+IGxpIGlucHV0OnRleHRcIik7XG5cdFx0ZmllbGROYW1lID0gJGZpZWxkLmF0dHIoXCJuYW1lXCIpLnJlcGxhY2UoJ1tdJywgJycpO1xuXHRcdFxuXHRcdHZhciBkYXRlcyA9IFtdO1xuXHRcdCRmaWVsZC5lYWNoKGZ1bmN0aW9uKCl7XG5cdFx0XHRcblx0XHRcdGRhdGVzLnB1c2goJCh0aGlzKS52YWwoKSk7XG5cdFx0XG5cdFx0fSk7XG5cdFx0XG5cdFx0aWYoJGZpZWxkLmxlbmd0aD09Milcblx0XHR7XG5cdFx0XHRpZigoZGF0ZXNbMF0hPVwiXCIpfHwoZGF0ZXNbMV0hPVwiXCIpKVxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZFZhbCA9IGRhdGVzLmpvaW4oXCIrXCIpO1xuXHRcdFx0XHRmaWVsZFZhbCA9IGZpZWxkVmFsLnJlcGxhY2UoL1xcLy9nLCcnKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZSBpZigkZmllbGQubGVuZ3RoPT0xKVxuXHRcdHtcblx0XHRcdGlmKGRhdGVzWzBdIT1cIlwiKVxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZFZhbCA9IGRhdGVzLmpvaW4oXCIrXCIpO1xuXHRcdFx0XHRmaWVsZFZhbCA9IGZpZWxkVmFsLnJlcGxhY2UoL1xcLy9nLCcnKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0aWYodHlwZW9mKGZpZWxkVmFsKSE9XCJ1bmRlZmluZWRcIilcblx0XHR7XG5cdFx0XHRpZihmaWVsZFZhbCE9XCJcIilcblx0XHRcdHtcblx0XHRcdFx0dmFyIGZpZWxkU2x1ZyA9IFwiXCI7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZihmaWVsZE5hbWU9PVwiX3NmX3Bvc3RfZGF0ZVwiKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0ZmllbGRTbHVnID0gXCJwb3N0X2RhdGVcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRmaWVsZFNsdWcgPSBmaWVsZE5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdGlmKGZpZWxkU2x1ZyE9XCJcIilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vc2VsZi51cmxfY29tcG9uZW50cyArPSBcIiZcIitmaWVsZFNsdWcrXCI9XCIrZmllbGRWYWw7XG5cdFx0XHRcdFx0c2VsZi51cmxfcGFyYW1zW2ZpZWxkU2x1Z10gPSBmaWVsZFZhbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRcblx0fSxcblx0cHJvY2Vzc1RheG9ub215OiBmdW5jdGlvbigkY29udGFpbmVyLCByZXR1cm5fb2JqZWN0KVxuXHR7XG4gICAgICAgIGlmKHR5cGVvZihyZXR1cm5fb2JqZWN0KT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuX29iamVjdCA9IGZhbHNlO1xuICAgICAgICB9XG5cblx0XHQvL2lmKClcdFx0XHRcdFx0XG5cdFx0Ly92YXIgZmllbGROYW1lID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1zZi1maWVsZC1uYW1lXCIpO1xuXHRcdHZhciBzZWxmID0gdGhpcztcblx0XG5cdFx0dmFyIGZpZWxkVHlwZSA9ICRjb250YWluZXIuYXR0cihcImRhdGEtc2YtZmllbGQtdHlwZVwiKTtcblx0XHR2YXIgaW5wdXRUeXBlID0gJGNvbnRhaW5lci5hdHRyKFwiZGF0YS1zZi1maWVsZC1pbnB1dC10eXBlXCIpO1xuXHRcdFxuXHRcdHZhciAkZmllbGQ7XG5cdFx0dmFyIGZpZWxkTmFtZSA9IFwiXCI7XG5cdFx0dmFyIGZpZWxkVmFsID0gXCJcIjtcblx0XHRcblx0XHRpZihpbnB1dFR5cGU9PVwic2VsZWN0XCIpXG5cdFx0e1xuXHRcdFx0JGZpZWxkID0gJGNvbnRhaW5lci5maW5kKFwic2VsZWN0XCIpO1xuXHRcdFx0ZmllbGROYW1lID0gJGZpZWxkLmF0dHIoXCJuYW1lXCIpLnJlcGxhY2UoJ1tdJywgJycpO1xuXHRcdFx0XG5cdFx0XHRmaWVsZFZhbCA9IHNlbGYuZ2V0U2VsZWN0VmFsKCRmaWVsZCk7IFxuXHRcdH1cblx0XHRlbHNlIGlmKGlucHV0VHlwZT09XCJtdWx0aXNlbGVjdFwiKVxuXHRcdHtcblx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInNlbGVjdFwiKTtcblx0XHRcdGZpZWxkTmFtZSA9ICRmaWVsZC5hdHRyKFwibmFtZVwiKS5yZXBsYWNlKCdbXScsICcnKTtcblx0XHRcdHZhciBvcGVyYXRvciA9ICRmaWVsZC5hdHRyKFwiZGF0YS1vcGVyYXRvclwiKTtcblx0XHRcdFxuXHRcdFx0ZmllbGRWYWwgPSBzZWxmLmdldE11bHRpU2VsZWN0VmFsKCRmaWVsZCwgb3BlcmF0b3IpO1xuXHRcdH1cblx0XHRlbHNlIGlmKGlucHV0VHlwZT09XCJjaGVja2JveFwiKVxuXHRcdHtcblx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInVsID4gbGkgaW5wdXQ6Y2hlY2tib3hcIik7XG5cdFx0XHRpZigkZmllbGQubGVuZ3RoPjApXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkTmFtZSA9ICRmaWVsZC5hdHRyKFwibmFtZVwiKS5yZXBsYWNlKCdbXScsICcnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdHZhciBvcGVyYXRvciA9ICRjb250YWluZXIuZmluZChcIj4gdWxcIikuYXR0cihcImRhdGEtb3BlcmF0b3JcIik7XG5cdFx0XHRcdGZpZWxkVmFsID0gc2VsZi5nZXRDaGVja2JveFZhbCgkZmllbGQsIG9wZXJhdG9yKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZSBpZihpbnB1dFR5cGU9PVwicmFkaW9cIilcblx0XHR7XG5cdFx0XHQkZmllbGQgPSAkY29udGFpbmVyLmZpbmQoXCJ1bCA+IGxpIGlucHV0OnJhZGlvXCIpO1xuXHRcdFx0aWYoJGZpZWxkLmxlbmd0aD4wKVxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZE5hbWUgPSAkZmllbGQuYXR0cihcIm5hbWVcIikucmVwbGFjZSgnW10nLCAnJyk7XG5cdFx0XHRcdFxuXHRcdFx0XHRmaWVsZFZhbCA9IHNlbGYuZ2V0UmFkaW9WYWwoJGZpZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0aWYodHlwZW9mKGZpZWxkVmFsKSE9XCJ1bmRlZmluZWRcIilcblx0XHR7XG5cdFx0XHRpZihmaWVsZFZhbCE9XCJcIilcblx0XHRcdHtcbiAgICAgICAgICAgICAgICBpZihyZXR1cm5fb2JqZWN0PT10cnVlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtuYW1lOiBmaWVsZE5hbWUsIHZhbHVlOiBmaWVsZFZhbH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC8vc2VsZi51cmxfY29tcG9uZW50cyArPSBcIiZcIitmaWVsZE5hbWUrXCI9XCIrZmllbGRWYWw7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYudXJsX3BhcmFtc1tmaWVsZE5hbWVdID0gZmllbGRWYWw7XG4gICAgICAgICAgICAgICAgfVxuXG5cdFx0XHR9XG5cdFx0fVxuXG4gICAgICAgIGlmKHJldHVybl9vYmplY3Q9PXRydWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXHR9XG59OyJdfQ==
-},{}],5:[function(require,module,exports){
-
-module.exports = {
-
- searchForms: {},
-
- init: function(){
-
-
- },
- addSearchForm: function(id, object){
-
- this.searchForms[id] = object;
- },
- getSearchForm: function(id)
- {
- return this.searchForms[id];
- }
-
-};
-},{}],6:[function(require,module,exports){
-(function (global){
-
-var $ = (typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null);
-
-module.exports = {
-
- init: function(){
- $(document).on("sf:ajaxfinish", ".searchandfilter", function( e, data ) {
- var display_method = data.object.display_result_method;
- if ( display_method === 'custom_edd_store' ) {
- $('input.edd-add-to-cart').css('display', "none");
- $('a.edd-add-to-cart').addClass('edd-has-js');
- } else if ( display_method === 'custom_layouts' ) {
- if ( $('.cl-layout').hasClass( 'cl-layout--masonry' ) ) {
- //then re-init masonry
- const masonryContainer = document.querySelectorAll( '.cl-layout--masonry' );
- if ( masonryContainer.length > 0 ) {
- const customLayoutGrid = new Masonry( '.cl-layout--masonry', {
- // options...
- itemSelector: '.cl-layout__item',
- //columnWidth: 319
- percentPosition: true,
- //gutter: 10,
- transitionDuration: 0,
- } );
- imagesLoaded( masonryContainer ).on( 'progress', function() {
- customLayoutGrid.layout();
- } );
- }
- }
- }
- });
- },
-
-};
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9wdWJsaWMvYXNzZXRzL2pzL2luY2x1ZGVzL3RoaXJkcGFydHkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJcbnZhciAkIFx0XHRcdFx0PSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snalF1ZXJ5J10gOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsWydqUXVlcnknXSA6IG51bGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0XG5cdGluaXQ6IGZ1bmN0aW9uKCl7XG5cdFx0JChkb2N1bWVudCkub24oXCJzZjphamF4ZmluaXNoXCIsIFwiLnNlYXJjaGFuZGZpbHRlclwiLCBmdW5jdGlvbiggZSwgZGF0YSApIHtcblx0XHRcdHZhciBkaXNwbGF5X21ldGhvZCA9IGRhdGEub2JqZWN0LmRpc3BsYXlfcmVzdWx0X21ldGhvZDtcblx0XHRcdGlmICggZGlzcGxheV9tZXRob2QgPT09ICdjdXN0b21fZWRkX3N0b3JlJyApIHtcblx0XHRcdFx0JCgnaW5wdXQuZWRkLWFkZC10by1jYXJ0JykuY3NzKCdkaXNwbGF5JywgXCJub25lXCIpO1xuXHRcdFx0XHQkKCdhLmVkZC1hZGQtdG8tY2FydCcpLmFkZENsYXNzKCdlZGQtaGFzLWpzJyk7XG5cdFx0XHR9IGVsc2UgaWYgKCBkaXNwbGF5X21ldGhvZCA9PT0gJ2N1c3RvbV9sYXlvdXRzJyApIHtcblx0XHRcdFx0aWYgKCAkKCcuY2wtbGF5b3V0JykuaGFzQ2xhc3MoICdjbC1sYXlvdXQtLW1hc29ucnknICkgKSB7XG5cdFx0XHRcdFx0Ly90aGVuIHJlLWluaXQgbWFzb25yeVxuXHRcdFx0XHRcdGNvbnN0IG1hc29ucnlDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCAnLmNsLWxheW91dC0tbWFzb25yeScgKTtcblx0XHRcdFx0XHRpZiAoIG1hc29ucnlDb250YWluZXIubGVuZ3RoID4gMCApIHtcblx0XHRcdFx0XHRcdGNvbnN0IGN1c3RvbUxheW91dEdyaWQgPSBuZXcgTWFzb25yeSggJy5jbC1sYXlvdXQtLW1hc29ucnknLCB7XG5cdFx0XHRcdFx0XHRcdC8vIG9wdGlvbnMuLi5cblx0XHRcdFx0XHRcdFx0aXRlbVNlbGVjdG9yOiAnLmNsLWxheW91dF9faXRlbScsXG5cdFx0XHRcdFx0XHRcdC8vY29sdW1uV2lkdGg6IDMxOVxuXHRcdFx0XHRcdFx0XHRwZXJjZW50UG9zaXRpb246IHRydWUsXG5cdFx0XHRcdFx0XHRcdC8vZ3V0dGVyOiAxMCxcblx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbkR1cmF0aW9uOiAwLFxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0aW1hZ2VzTG9hZGVkKCBtYXNvbnJ5Q29udGFpbmVyICkub24oICdwcm9ncmVzcycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRjdXN0b21MYXlvdXRHcmlkLmxheW91dCgpO1xuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9LFxuXG59OyJdfQ==
-},{}]},{},[1])
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvcHVibGljL2Fzc2V0cy9qcy9hcHAuanMiLCJub2RlX21vZHVsZXMvbm91aXNsaWRlci9kaXN0cmlidXRlL25vdWlzbGlkZXIuanMiLCJzcmMvcHVibGljL2Fzc2V0cy9qcy9pbmNsdWRlcy9wbHVnaW4uanMiLCJzcmMvcHVibGljL2Fzc2V0cy9qcy9pbmNsdWRlcy9wcm9jZXNzX2Zvcm0uanMiLCJzcmMvcHVibGljL2Fzc2V0cy9qcy9pbmNsdWRlcy9zdGF0ZS5qcyIsInNyYy9wdWJsaWMvYXNzZXRzL2pzL2luY2x1ZGVzL3RoaXJkcGFydHkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxeUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMXRFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1OEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIoZnVuY3Rpb24gKGdsb2JhbCl7XG5cbnZhciBzdGF0ZSA9IHJlcXVpcmUoJy4vaW5jbHVkZXMvc3RhdGUnKTtcbnZhciBwbHVnaW4gPSByZXF1aXJlKCcuL2luY2x1ZGVzL3BsdWdpbicpO1xuXG5cbihmdW5jdGlvbiAoICQgKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0JChmdW5jdGlvbiAoKSB7XG5cblx0XHRpZiAoIU9iamVjdC5rZXlzKSB7XG5cdFx0ICBPYmplY3Qua2V5cyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0XHQndXNlIHN0cmljdCc7XG5cdFx0XHR2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuXHRcdFx0XHRoYXNEb250RW51bUJ1ZyA9ICEoe3RvU3RyaW5nOiBudWxsfSkucHJvcGVydHlJc0VudW1lcmFibGUoJ3RvU3RyaW5nJyksXG5cdFx0XHRcdGRvbnRFbnVtcyA9IFtcblx0XHRcdFx0ICAndG9TdHJpbmcnLFxuXHRcdFx0XHQgICd0b0xvY2FsZVN0cmluZycsXG5cdFx0XHRcdCAgJ3ZhbHVlT2YnLFxuXHRcdFx0XHQgICdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0XHRcdCAgJ2lzUHJvdG90eXBlT2YnLFxuXHRcdFx0XHQgICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0XHRcdCAgJ2NvbnN0cnVjdG9yJ1xuXHRcdFx0XHRdLFxuXHRcdFx0XHRkb250RW51bXNMZW5ndGggPSBkb250RW51bXMubGVuZ3RoO1xuXG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuXHRcdFx0ICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgJiYgKHR5cGVvZiBvYmogIT09ICdmdW5jdGlvbicgfHwgb2JqID09PSBudWxsKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gbm9uLW9iamVjdCcpO1xuXHRcdFx0ICB9XG5cblx0XHRcdCAgdmFyIHJlc3VsdCA9IFtdLCBwcm9wLCBpO1xuXG5cdFx0XHQgIGZvciAocHJvcCBpbiBvYmopIHtcblx0XHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkge1xuXHRcdFx0XHQgIHJlc3VsdC5wdXNoKHByb3ApO1xuXHRcdFx0XHR9XG5cdFx0XHQgIH1cblxuXHRcdFx0ICBpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGRvbnRFbnVtc0xlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdCAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqLCBkb250RW51bXNbaV0pKSB7XG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goZG9udEVudW1zW2ldKTtcblx0XHRcdFx0ICB9XG5cdFx0XHRcdH1cblx0XHRcdCAgfVxuXHRcdFx0ICByZXR1cm4gcmVzdWx0O1xuXHRcdFx0fTtcblx0XHQgIH0oKSk7XG5cdFx0fVxuXG5cdFx0LyogU2VhcmNoICYgRmlsdGVyIGpRdWVyeSBQbHVnaW4gKi9cblx0XHQkLmZuLnNlYXJjaEFuZEZpbHRlciA9IHBsdWdpbjtcblxuXHRcdC8qIGluaXQgKi9cblx0XHQkKFwiLnNlYXJjaGFuZGZpbHRlclwiKS5zZWFyY2hBbmRGaWx0ZXIoKTtcblxuXHRcdC8qIGV4dGVybmFsIGNvbnRyb2xzICovXG5cdFx0JChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIi5zZWFyY2gtZmlsdGVyLXJlc2V0XCIsIGZ1bmN0aW9uKGUpe1xuXG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdHZhciBzZWFyY2hGb3JtSUQgPSB0eXBlb2YoJCh0aGlzKS5hdHRyKFwiZGF0YS1zZWFyY2gtZm9ybS1pZFwiKSkhPVwidW5kZWZpbmVkXCIgPyAkKHRoaXMpLmF0dHIoXCJkYXRhLXNlYXJjaC1mb3JtLWlkXCIpIDogXCJcIjtcblx0XHRcdHZhciBzdWJtaXRGb3JtID0gdHlwZW9mKCQodGhpcykuYXR0cihcImRhdGEtc2Ytc3VibWl0LWZvcm1cIikpIT1cInVuZGVmaW5lZFwiID8gJCh0aGlzKS5hdHRyKFwiZGF0YS1zZi1zdWJtaXQtZm9ybVwiKSA6IFwiXCI7XG5cblx0XHRcdHN0YXRlLmdldFNlYXJjaEZvcm0oc2VhcmNoRm9ybUlEKS5yZXNldChzdWJtaXRGb3JtKTtcblxuXHRcdFx0Ly92YXIgJGxpbmtlZCA9ICQoXCIjc2VhcmNoLWZpbHRlci1mb3JtLVwiK3NlYXJjaEZvcm1JRCkuc2VhcmNoRmlsdGVyRm9ybSh7YWN0aW9uOiBcInJlc2V0XCJ9KTtcblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0fSk7XG5cblx0fSk7XG5cblxuLypcbiAqIGpRdWVyeSBFYXNpbmcgdjEuNC4xIC0gaHR0cDovL2dzZ2QuY28udWsvc2FuZGJveC9qcXVlcnkvZWFzaW5nL1xuICogT3BlbiBzb3VyY2UgdW5kZXIgdGhlIEJTRCBMaWNlbnNlLlxuICogQ29weXJpZ2h0IMKpIDIwMDggR2VvcmdlIE1jR2lubGV5IFNtaXRoXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9nZHNtaXRoL2pxdWVyeS5lYXNpbmcvbWFzdGVyL0xJQ0VOU0VcbiovXG5cbi8qIGdsb2JhbHMgalF1ZXJ5LCBkZWZpbmUsIG1vZHVsZSwgcmVxdWlyZSAqL1xuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdGRlZmluZShbJ2pxdWVyeSddLCBmdW5jdGlvbiAoJCkge1xuXHRcdFx0cmV0dXJuIGZhY3RvcnkoJCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3dbJ2pRdWVyeSddIDogdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbFsnalF1ZXJ5J10gOiBudWxsKSk7XG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeShqUXVlcnkpO1xuXHR9XG59KShmdW5jdGlvbigkKXtcblxuXHQvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgalF1ZXJ5IFwic3dpbmdcIiBlYXNpbmcgYXMgXCJqc3dpbmdcIlxuXHRpZiAodHlwZW9mICQuZWFzaW5nICE9PSAndW5kZWZpbmVkJykge1xuXHRcdCQuZWFzaW5nWydqc3dpbmcnXSA9ICQuZWFzaW5nWydzd2luZyddO1xuXHR9XG5cblx0dmFyIHBvdyA9IE1hdGgucG93LFxuXHRcdHNxcnQgPSBNYXRoLnNxcnQsXG5cdFx0c2luID0gTWF0aC5zaW4sXG5cdFx0Y29zID0gTWF0aC5jb3MsXG5cdFx0UEkgPSBNYXRoLlBJLFxuXHRcdGMxID0gMS43MDE1OCxcblx0XHRjMiA9IGMxICogMS41MjUsXG5cdFx0YzMgPSBjMSArIDEsXG5cdFx0YzQgPSAoIDIgKiBQSSApIC8gMyxcblx0XHRjNSA9ICggMiAqIFBJICkgLyA0LjU7XG5cblx0Ly8geCBpcyB0aGUgZnJhY3Rpb24gb2YgYW5pbWF0aW9uIHByb2dyZXNzLCBpbiB0aGUgcmFuZ2UgMC4uMVxuXHRmdW5jdGlvbiBib3VuY2VPdXQoeCkge1xuXHRcdHZhciBuMSA9IDcuNTYyNSxcblx0XHRcdGQxID0gMi43NTtcblx0XHRpZiAoIHggPCAxL2QxICkge1xuXHRcdFx0cmV0dXJuIG4xKngqeDtcblx0XHR9IGVsc2UgaWYgKCB4IDwgMi9kMSApIHtcblx0XHRcdHJldHVybiBuMSooeC09KDEuNS9kMSkpKnggKyAuNzU7XG5cdFx0fSBlbHNlIGlmICggeCA8IDIuNS9kMSApIHtcblx0XHRcdHJldHVybiBuMSooeC09KDIuMjUvZDEpKSp4ICsgLjkzNzU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBuMSooeC09KDIuNjI1L2QxKSkqeCArIC45ODQzNzU7XG5cdFx0fVxuXHR9XG5cblx0JC5leHRlbmQoICQuZWFzaW5nLCB7XG5cdFx0ZGVmOiAnZWFzZU91dFF1YWQnLFxuXHRcdHN3aW5nOiBmdW5jdGlvbiAoeCkge1xuXHRcdFx0cmV0dXJuICQuZWFzaW5nWyQuZWFzaW5nLmRlZl0oeCk7XG5cdFx0fSxcblx0XHRlYXNlSW5RdWFkOiBmdW5jdGlvbiAoeCkge1xuXHRcdFx0cmV0dXJuIHggKiB4O1xuXHRcdH0sXG5cdFx0ZWFzZU91dFF1YWQ6IGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRyZXR1cm4gMSAtICggMSAtIHggKSAqICggMSAtIHggKTtcblx0XHR9LFxuXHRcdGVhc2VJbk91dFF1YWQ6IGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRyZXR1cm4geCA8IDAuNSA/XG5cdFx0XHRcdDIgKiB4ICogeCA6XG5cdFx0XHRcdDEgLSBwb3coIC0yICogeCArIDIsIDIgKSAvIDI7XG5cdFx0fSxcblx0XHRlYXNlSW5DdWJpYzogZnVuY3Rpb24gKHgpIHtcblx0XHRcdHJldHVybiB4ICogeCAqIHg7XG5cdFx0fSxcblx0XHRlYXNlT3V0Q3ViaWM6IGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRyZXR1cm4gMSAtIHBvdyggMSAtIHgsIDMgKTtcblx0XHR9LFxuXHRcdGVhc2VJbk91dEN1YmljOiBmdW5jdGlvbiAoeCkge1xuXHRcdFx0cmV0dXJuIHggPCAwLjUgP1xuXHRcdFx0XHQ0ICogeCAqIHggKiB4IDpcblx0XHRcdFx0MSAtIHBvdyggLTIgKiB4ICsgMiwgMyApIC8gMjtcblx0XHR9LFxuXHRcdGVhc2VJblF1YXJ0OiBmdW5jdGlvbiAoeCkge1xuXHRcdFx0cmV0dXJuIHggKiB4ICogeCAqIHg7XG5cdFx0fSxcblx0XHRlYXNlT3V0UXVhcnQ6IGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRyZXR1cm4gMSAtIHBvdyggMSAtIHgsIDQgKTtcblx0XHR9LFxuXHRcdGVhc2VJbk91dFF1YXJ0OiBmdW5jdGlvbiAoeCkge1xuXHRcdFx0cmV0dXJuIHggPCAwLjUgP1xuXHRcdFx0XHQ4ICogeCAqIHggKiB4ICogeCA6XG5cdFx0XHRcdDEgLSBwb3coIC0yICogeCArIDIsIDQgKSAvIDI7XG5cdFx0fSxcblx0XHRlYXNlSW5RdWludDogZnVuY3Rpb24gKHgpIHtcblx0XHRcdHJldHVybiB4ICogeCAqIHggKiB4ICogeDtcblx0XHR9LFxuXHRcdGVhc2VPdXRRdWludDogZnVuY3Rpb24gKHgpIHtcblx0XHRcdHJldHVybiAxIC0gcG93KCAxIC0geCwgNSApO1xuXHRcdH0sXG5cdFx0ZWFzZUluT3V0UXVpbnQ6IGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRyZXR1cm4geCA8IDAuNSA/XG5cdFx0XHRcdDE2ICogeCAqIHggKiB4ICogeCAqIHggOlxuXHRcdFx0XHQxIC0gcG93KCAtMiAqIHggKyAyLCA1ICkgLyAyO1xuXHRcdH0sXG5cdFx0ZWFzZUluU2luZTogZnVuY3Rpb24gKHgpIHtcblx0XHRcdHJldHVybiAxIC0gY29zKCB4ICogUEkvMiApO1xuXHRcdH0sXG5cdFx0ZWFzZU91dFNpbmU6IGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRyZXR1cm4gc2luKCB4ICogUEkvMiApO1xuXHRcdH0sXG5cdFx0ZWFzZUluT3V0U2luZTogZnVuY3Rpb24gKHgpIHtcblx0XHRcdHJldHVybiAtKCBjb3MoIFBJICogeCApIC0gMSApIC8gMjtcblx0XHR9LFxuXHRcdGVhc2VJbkV4cG86IGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRyZXR1cm4geCA9PT0gMCA/IDAgOiBwb3coIDIsIDEwICogeCAtIDEwICk7XG5cdFx0fSxcblx0XHRlYXNlT3V0RXhwbzogZnVuY3Rpb24gKHgpIHtcblx0XHRcdHJldHVybiB4ID09PSAxID8gMSA6IDEgLSBwb3coIDIsIC0xMCAqIHggKTtcblx0XHR9LFxuXHRcdGVhc2VJbk91dEV4cG86IGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRyZXR1cm4geCA9PT0gMCA/IDAgOiB4ID09PSAxID8gMSA6IHggPCAwLjUgP1xuXHRcdFx0XHRwb3coIDIsIDIwICogeCAtIDEwICkgLyAyIDpcblx0XHRcdFx0KCAyIC0gcG93KCAyLCAtMjAgKiB4ICsgMTAgKSApIC8gMjtcblx0XHR9LFxuXHRcdGVhc2VJbkNpcmM6IGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRyZXR1cm4gMSAtIHNxcnQoIDEgLSBwb3coIHgsIDIgKSApO1xuXHRcdH0sXG5cdFx0ZWFzZU91dENpcmM6IGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRyZXR1cm4gc3FydCggMSAtIHBvdyggeCAtIDEsIDIgKSApO1xuXHRcdH0sXG5cdFx0ZWFzZUluT3V0Q2lyYzogZnVuY3Rpb24gKHgpIHtcblx0XHRcdHJldHVybiB4IDwgMC41ID9cblx0XHRcdFx0KCAxIC0gc3FydCggMSAtIHBvdyggMiAqIHgsIDIgKSApICkgLyAyIDpcblx0XHRcdFx0KCBzcXJ0KCAxIC0gcG93KCAtMiAqIHggKyAyLCAyICkgKSArIDEgKSAvIDI7XG5cdFx0fSxcblx0XHRlYXNlSW5FbGFzdGljOiBmdW5jdGlvbiAoeCkge1xuXHRcdFx0cmV0dXJuIHggPT09IDAgPyAwIDogeCA9PT0gMSA/IDEgOlxuXHRcdFx0XHQtcG93KCAyLCAxMCAqIHggLSAxMCApICogc2luKCAoIHggKiAxMCAtIDEwLjc1ICkgKiBjNCApO1xuXHRcdH0sXG5cdFx0ZWFzZU91dEVsYXN0aWM6IGZ1bmN0aW9uICh4KSB7XG5cdFx0XHRyZXR1cm4geCA9PT0gMCA/IDAgOiB4ID09PSAxID8gMSA6XG5cdFx0XHRcdHBvdyggMiwgLTEwICogeCApICogc2luKCAoIHggKiAxMCAtIDAuNzUgKSAqIGM0ICkgKyAxO1xuXHRcdH0sXG5cdFx0ZWFzZUluT3V0RWxhc3RpYzogZnVuY3Rpb24gKHgpIHtcblx0XHRcdHJldHVybiB4ID09PSAwID8gMCA6IHggPT09IDEgPyAxIDogeCA8IDAuNSA/XG5cdFx0XHRcdC0oIHBvdyggMiwgMjAgKiB4IC0gMTAgKSAqIHNpbiggKCAyMCAqIHggLSAxMS4xMjUgKSAqIGM1ICkpIC8gMiA6XG5cdFx0XHRcdHBvdyggMiwgLTIwICogeCArIDEwICkgKiBzaW4oICggMjAgKiB4IC0gMTEuMTI1ICkgKiBjNSApIC8gMiArIDE7XG5cdFx0fSxcblx0XHRlYXNlSW5CYWNrOiBmdW5jdGlvbiAoeCkge1xuXHRcdFx0cmV0dXJuIGMzICogeCAqIHggKiB4IC0gYzEgKiB4ICogeDtcblx0XHR9LFxuXHRcdGVhc2VPdXRCYWNrOiBmdW5jdGlvbiAoeCkge1xuXHRcdFx0cmV0dXJuIDEgKyBjMyAqIHBvdyggeCAtIDEsIDMgKSArIGMxICogcG93KCB4IC0gMSwgMiApO1xuXHRcdH0sXG5cdFx0ZWFzZUluT3V0QmFjazogZnVuY3Rpb24gKHgpIHtcblx0XHRcdHJldHVybiB4IDwgMC41ID9cblx0XHRcdFx0KCBwb3coIDIgKiB4LCAyICkgKiAoICggYzIgKyAxICkgKiAyICogeCAtIGMyICkgKSAvIDIgOlxuXHRcdFx0XHQoIHBvdyggMiAqIHggLSAyLCAyICkgKiggKCBjMiArIDEgKSAqICggeCAqIDIgLSAyICkgKyBjMiApICsgMiApIC8gMjtcblx0XHR9LFxuXHRcdGVhc2VJbkJvdW5jZTogZnVuY3Rpb24gKHgpIHtcblx0XHRcdHJldHVybiAxIC0gYm91bmNlT3V0KCAxIC0geCApO1xuXHRcdH0sXG5cdFx0ZWFzZU91dEJvdW5jZTogYm91bmNlT3V0LFxuXHRcdGVhc2VJbk91dEJvdW5jZTogZnVuY3Rpb24gKHgpIHtcblx0XHRcdHJldHVybiB4IDwgMC41ID9cblx0XHRcdFx0KCAxIC0gYm91bmNlT3V0KCAxIC0gMiAqIHggKSApIC8gMiA6XG5cdFx0XHRcdCggMSArIGJvdW5jZU91dCggMiAqIHggLSAxICkgKSAvIDI7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuICQ7XG59KTtcblxufShqUXVlcnkpKTtcblxuLy9zYWZhcmkgYmFjayBidXR0b24gZml4XG5qUXVlcnkoIHdpbmRvdyApLm9uKCBcInBhZ2VzaG93XCIsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQucGVyc2lzdGVkKSB7XG4gICAgICAgIGpRdWVyeShcIi5zZWFyY2hhbmRmaWx0ZXJcIikub2ZmKCk7XG4gICAgICAgIGpRdWVyeShcIi5zZWFyY2hhbmRmaWx0ZXJcIikuc2VhcmNoQW5kRmlsdGVyKCk7XG4gICAgfVxufSk7XG5cbi8qIHdwbnVtYiAtIG5vdWlzbGlkZXIgbnVtYmVyIGZvcm1hdHRpbmcgKi9cbiFmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGUuc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIil9ZnVuY3Rpb24gbihlLG4pe3JldHVybiBlLnN1YnN0cmluZygwLG4ubGVuZ3RoKT09PW59ZnVuY3Rpb24gcihlLG4pe3JldHVybiBlLnNsaWNlKC0xKm4ubGVuZ3RoKT09PW59ZnVuY3Rpb24gdChlLG4scil7aWYoKGVbbl18fGVbcl0pJiZlW25dPT09ZVtyXSl0aHJvdyBuZXcgRXJyb3Iobil9ZnVuY3Rpb24gaShlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZSYmaXNGaW5pdGUoZSl9ZnVuY3Rpb24gbyhlLG4pe3ZhciByPU1hdGgucG93KDEwLG4pO3JldHVybihNYXRoLnJvdW5kKGUqcikvcikudG9GaXhlZChuKX1mdW5jdGlvbiB1KG4scix0LHUsZixhLGMscyxwLGQsbCxoKXt2YXIgZyx2LHcsbT1oLHg9XCJcIixiPVwiXCI7cmV0dXJuIGEmJihoPWEoaCkpLGkoaCk/KG4hPT0hMSYmMD09PXBhcnNlRmxvYXQoaC50b0ZpeGVkKG4pKSYmKGg9MCksMD5oJiYoZz0hMCxoPU1hdGguYWJzKGgpKSxuIT09ITEmJihoPW8oaCxuKSksaD1oLnRvU3RyaW5nKCksLTEhPT1oLmluZGV4T2YoXCIuXCIpPyh2PWguc3BsaXQoXCIuXCIpLHc9dlswXSx0JiYoeD10K3ZbMV0pKTp3PWgsciYmKHc9ZSh3KS5tYXRjaCgvLnsxLDN9L2cpLHc9ZSh3LmpvaW4oZShyKSkpKSxnJiZzJiYoYis9cyksdSYmKGIrPXUpLGcmJnAmJihiKz1wKSxiKz13LGIrPXgsZiYmKGIrPWYpLGQmJihiPWQoYixtKSksYik6ITF9ZnVuY3Rpb24gZihlLHQsbyx1LGYsYSxjLHMscCxkLGwsaCl7dmFyIGcsdj1cIlwiO3JldHVybiBsJiYoaD1sKGgpKSxoJiZcInN0cmluZ1wiPT10eXBlb2YgaD8ocyYmbihoLHMpJiYoaD1oLnJlcGxhY2UocyxcIlwiKSxnPSEwKSx1JiZuKGgsdSkmJihoPWgucmVwbGFjZSh1LFwiXCIpKSxwJiZuKGgscCkmJihoPWgucmVwbGFjZShwLFwiXCIpLGc9ITApLGYmJnIoaCxmKSYmKGg9aC5zbGljZSgwLC0xKmYubGVuZ3RoKSksdCYmKGg9aC5zcGxpdCh0KS5qb2luKFwiXCIpKSxvJiYoaD1oLnJlcGxhY2UobyxcIi5cIikpLGcmJih2Kz1cIi1cIiksdis9aCx2PXYucmVwbGFjZSgvW14wLTlcXC5cXC0uXS9nLFwiXCIpLFwiXCI9PT12PyExOih2PU51bWJlcih2KSxjJiYodj1jKHYpKSxpKHYpP3Y6ITEpKTohMX1mdW5jdGlvbiBhKGUpe3ZhciBuLHIsaSxvPXt9O2ZvcihuPTA7bjxwLmxlbmd0aDtuKz0xKWlmKHI9cFtuXSxpPWVbcl0sdm9pZCAwPT09aSlcIm5lZ2F0aXZlXCIhPT1yfHxvLm5lZ2F0aXZlQmVmb3JlP1wibWFya1wiPT09ciYmXCIuXCIhPT1vLnRob3VzYW5kP29bcl09XCIuXCI6b1tyXT0hMTpvW3JdPVwiLVwiO2Vsc2UgaWYoXCJkZWNpbWFsc1wiPT09cil7aWYoIShpPj0wJiY4PmkpKXRocm93IG5ldyBFcnJvcihyKTtvW3JdPWl9ZWxzZSBpZihcImVuY29kZXJcIj09PXJ8fFwiZGVjb2RlclwiPT09cnx8XCJlZGl0XCI9PT1yfHxcInVuZG9cIj09PXIpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGkpdGhyb3cgbmV3IEVycm9yKHIpO29bcl09aX1lbHNle2lmKFwic3RyaW5nXCIhPXR5cGVvZiBpKXRocm93IG5ldyBFcnJvcihyKTtvW3JdPWl9cmV0dXJuIHQobyxcIm1hcmtcIixcInRob3VzYW5kXCIpLHQobyxcInByZWZpeFwiLFwibmVnYXRpdmVcIiksdChvLFwicHJlZml4XCIsXCJuZWdhdGl2ZUJlZm9yZVwiKSxvfWZ1bmN0aW9uIGMoZSxuLHIpe3ZhciB0LGk9W107Zm9yKHQ9MDt0PHAubGVuZ3RoO3QrPTEpaS5wdXNoKGVbcFt0XV0pO3JldHVybiBpLnB1c2gociksbi5hcHBseShcIlwiLGkpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBzP3ZvaWQoXCJvYmplY3RcIj09dHlwZW9mIGUmJihlPWEoZSksdGhpcy50bz1mdW5jdGlvbihuKXtyZXR1cm4gYyhlLHUsbil9LHRoaXMuZnJvbT1mdW5jdGlvbihuKXtyZXR1cm4gYyhlLGYsbil9KSk6bmV3IHMoZSl9dmFyIHA9W1wiZGVjaW1hbHNcIixcInRob3VzYW5kXCIsXCJtYXJrXCIsXCJwcmVmaXhcIixcInBvc3RmaXhcIixcImVuY29kZXJcIixcImRlY29kZXJcIixcIm5lZ2F0aXZlQmVmb3JlXCIsXCJuZWdhdGl2ZVwiLFwiZWRpdFwiLFwidW5kb1wiXTt3aW5kb3cud051bWI9c30oKTtcblxuXG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkluTnlZeTl3ZFdKc2FXTXZZWE56WlhSekwycHpMMkZ3Y0M1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRU0lzSW1acGJHVWlPaUpuWlc1bGNtRjBaV1F1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVhHNTJZWElnYzNSaGRHVWdQU0J5WlhGMWFYSmxLQ2N1TDJsdVkyeDFaR1Z6TDNOMFlYUmxKeWs3WEc1MllYSWdjR3gxWjJsdUlEMGdjbVZ4ZFdseVpTZ25MaTlwYm1Oc2RXUmxjeTl3YkhWbmFXNG5LVHRjYmx4dVhHNG9ablZ1WTNScGIyNGdLQ0FrSUNrZ2UxeHVYRzVjZEZ3aWRYTmxJSE4wY21samRGd2lPMXh1WEc1Y2RDUW9ablZ1WTNScGIyNGdLQ2tnZTF4dVhHNWNkRngwYVdZZ0tDRlBZbXBsWTNRdWEyVjVjeWtnZTF4dVhIUmNkQ0FnVDJKcVpXTjBMbXRsZVhNZ1BTQW9ablZ1WTNScGIyNGdLQ2tnZTF4dVhIUmNkRngwSjNWelpTQnpkSEpwWTNRbk8xeHVYSFJjZEZ4MGRtRnlJR2hoYzA5M2JsQnliM0JsY25SNUlEMGdUMkpxWldOMExuQnliM1J2ZEhsd1pTNW9ZWE5QZDI1UWNtOXdaWEowZVN4Y2JseDBYSFJjZEZ4MGFHRnpSRzl1ZEVWdWRXMUNkV2NnUFNBaEtIdDBiMU4wY21sdVp6b2diblZzYkgwcExuQnliM0JsY25SNVNYTkZiblZ0WlhKaFlteGxLQ2QwYjFOMGNtbHVaeWNwTEZ4dVhIUmNkRngwWEhSa2IyNTBSVzUxYlhNZ1BTQmJYRzVjZEZ4MFhIUmNkQ0FnSjNSdlUzUnlhVzVuSnl4Y2JseDBYSFJjZEZ4MElDQW5kRzlNYjJOaGJHVlRkSEpwYm1jbkxGeHVYSFJjZEZ4MFhIUWdJQ2QyWVd4MVpVOW1KeXhjYmx4MFhIUmNkRngwSUNBbmFHRnpUM2R1VUhKdmNHVnlkSGtuTEZ4dVhIUmNkRngwWEhRZ0lDZHBjMUJ5YjNSdmRIbHdaVTltSnl4Y2JseDBYSFJjZEZ4MElDQW5jSEp2Y0dWeWRIbEpjMFZ1ZFcxbGNtRmliR1VuTEZ4dVhIUmNkRngwWEhRZ0lDZGpiMjV6ZEhKMVkzUnZjaWRjYmx4MFhIUmNkRngwWFN4Y2JseDBYSFJjZEZ4MFpHOXVkRVZ1ZFcxelRHVnVaM1JvSUQwZ1pHOXVkRVZ1ZFcxekxteGxibWQwYUR0Y2JseHVYSFJjZEZ4MGNtVjBkWEp1SUdaMWJtTjBhVzl1SUNodlltb3BJSHRjYmx4MFhIUmNkQ0FnYVdZZ0tIUjVjR1Z2WmlCdlltb2dJVDA5SUNkdlltcGxZM1FuSUNZbUlDaDBlWEJsYjJZZ2IySnFJQ0U5UFNBblpuVnVZM1JwYjI0bklIeDhJRzlpYWlBOVBUMGdiblZzYkNrcElIdGNibHgwWEhSY2RGeDBkR2h5YjNjZ2JtVjNJRlI1Y0dWRmNuSnZjaWduVDJKcVpXTjBMbXRsZVhNZ1kyRnNiR1ZrSUc5dUlHNXZiaTF2WW1wbFkzUW5LVHRjYmx4MFhIUmNkQ0FnZlZ4dVhHNWNkRngwWEhRZ0lIWmhjaUJ5WlhOMWJIUWdQU0JiWFN3Z2NISnZjQ3dnYVR0Y2JseHVYSFJjZEZ4MElDQm1iM0lnS0hCeWIzQWdhVzRnYjJKcUtTQjdYRzVjZEZ4MFhIUmNkR2xtSUNob1lYTlBkMjVRY205d1pYSjBlUzVqWVd4c0tHOWlhaXdnY0hKdmNDa3BJSHRjYmx4MFhIUmNkRngwSUNCeVpYTjFiSFF1Y0hWemFDaHdjbTl3S1R0Y2JseDBYSFJjZEZ4MGZWeHVYSFJjZEZ4MElDQjlYRzVjYmx4MFhIUmNkQ0FnYVdZZ0tHaGhjMFJ2Ym5SRmJuVnRRblZuS1NCN1hHNWNkRngwWEhSY2RHWnZjaUFvYVNBOUlEQTdJR2tnUENCa2IyNTBSVzUxYlhOTVpXNW5kR2c3SUdrckt5a2dlMXh1WEhSY2RGeDBYSFFnSUdsbUlDaG9ZWE5QZDI1UWNtOXdaWEowZVM1allXeHNLRzlpYWl3Z1pHOXVkRVZ1ZFcxelcybGRLU2tnZTF4dVhIUmNkRngwWEhSY2RISmxjM1ZzZEM1d2RYTm9LR1J2Ym5SRmJuVnRjMXRwWFNrN1hHNWNkRngwWEhSY2RDQWdmVnh1WEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFFnSUgxY2JseDBYSFJjZENBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYmx4MFhIUmNkSDA3WEc1Y2RGeDBJQ0I5S0NrcE8xeHVYSFJjZEgxY2JseHVYSFJjZEM4cUlGTmxZWEpqYUNBbUlFWnBiSFJsY2lCcVVYVmxjbmtnVUd4MVoybHVJQ292WEc1Y2RGeDBKQzVtYmk1elpXRnlZMmhCYm1SR2FXeDBaWElnUFNCd2JIVm5hVzQ3WEc1Y2JseDBYSFF2S2lCcGJtbDBJQ292WEc1Y2RGeDBKQ2hjSWk1elpXRnlZMmhoYm1SbWFXeDBaWEpjSWlrdWMyVmhjbU5vUVc1a1JtbHNkR1Z5S0NrN1hHNWNibHgwWEhRdktpQmxlSFJsY201aGJDQmpiMjUwY205c2N5QXFMMXh1WEhSY2RDUW9aRzlqZFcxbGJuUXBMbTl1S0Z3aVkyeHBZMnRjSWl3Z1hDSXVjMlZoY21Ob0xXWnBiSFJsY2kxeVpYTmxkRndpTENCbWRXNWpkR2x2YmlobEtYdGNibHh1WEhSY2RGeDBaUzV3Y21WMlpXNTBSR1ZtWVhWc2RDZ3BPMXh1WEc1Y2RGeDBYSFIyWVhJZ2MyVmhjbU5vUm05eWJVbEVJRDBnZEhsd1pXOW1LQ1FvZEdocGN5a3VZWFIwY2loY0ltUmhkR0V0YzJWaGNtTm9MV1p2Y20wdGFXUmNJaWtwSVQxY0luVnVaR1ZtYVc1bFpGd2lJRDhnSkNoMGFHbHpLUzVoZEhSeUtGd2laR0YwWVMxelpXRnlZMmd0Wm05eWJTMXBaRndpS1NBNklGd2lYQ0k3WEc1Y2RGeDBYSFIyWVhJZ2MzVmliV2wwUm05eWJTQTlJSFI1Y0dWdlppZ2tLSFJvYVhNcExtRjBkSElvWENKa1lYUmhMWE5tTFhOMVltMXBkQzFtYjNKdFhDSXBLU0U5WENKMWJtUmxabWx1WldSY0lpQS9JQ1FvZEdocGN5a3VZWFIwY2loY0ltUmhkR0V0YzJZdGMzVmliV2wwTFdadmNtMWNJaWtnT2lCY0lsd2lPMXh1WEc1Y2RGeDBYSFJ6ZEdGMFpTNW5aWFJUWldGeVkyaEdiM0p0S0hObFlYSmphRVp2Y20xSlJDa3VjbVZ6WlhRb2MzVmliV2wwUm05eWJTazdYRzVjYmx4MFhIUmNkQzh2ZG1GeUlDUnNhVzVyWldRZ1BTQWtLRndpSTNObFlYSmphQzFtYVd4MFpYSXRabTl5YlMxY0lpdHpaV0Z5WTJoR2IzSnRTVVFwTG5ObFlYSmphRVpwYkhSbGNrWnZjbTBvZTJGamRHbHZiam9nWENKeVpYTmxkRndpZlNrN1hHNWNibHgwWEhSY2RISmxkSFZ5YmlCbVlXeHpaVHRjYmx4dVhIUmNkSDBwTzF4dVhHNWNkSDBwTzF4dVhHNWNiaThxWEc0Z0tpQnFVWFZsY25rZ1JXRnphVzVuSUhZeExqUXVNU0F0SUdoMGRIQTZMeTluYzJka0xtTnZMblZyTDNOaGJtUmliM2d2YW5GMVpYSjVMMlZoYzJsdVp5OWNiaUFxSUU5d1pXNGdjMjkxY21ObElIVnVaR1Z5SUhSb1pTQkNVMFFnVEdsalpXNXpaUzVjYmlBcUlFTnZjSGx5YVdkb2RDRENxU0F5TURBNElFZGxiM0puWlNCTlkwZHBibXhsZVNCVGJXbDBhRnh1SUNvZ1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNWNiaUFxSUdoMGRIQnpPaTh2Y21GM0xtZHBkR2gxWWk1amIyMHZaMlJ6YldsMGFDOXFjWFZsY25rdVpXRnphVzVuTDIxaGMzUmxjaTlNU1VORlRsTkZYRzRxTDF4dVhHNHZLaUJuYkc5aVlXeHpJR3BSZFdWeWVTd2daR1ZtYVc1bExDQnRiMlIxYkdVc0lISmxjWFZwY21VZ0tpOWNiaWhtZFc1amRHbHZiaUFvWm1GamRHOXllU2tnZTF4dVhIUnBaaUFvZEhsd1pXOW1JR1JsWm1sdVpTQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUlDWW1JR1JsWm1sdVpTNWhiV1FwSUh0Y2JseDBYSFJrWldacGJtVW9XeWRxY1hWbGNua25YU3dnWm5WdVkzUnBiMjRnS0NRcElIdGNibHgwWEhSY2RISmxkSFZ5YmlCbVlXTjBiM0o1S0NRcE8xeHVYSFJjZEgwcE8xeHVYSFI5SUdWc2MyVWdhV1lnS0hSNWNHVnZaaUJ0YjJSMWJHVWdQVDA5SUZ3aWIySnFaV04wWENJZ0ppWWdkSGx3Wlc5bUlHMXZaSFZzWlM1bGVIQnZjblJ6SUQwOVBTQmNJbTlpYW1WamRGd2lLU0I3WEc1Y2RGeDBiVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQm1ZV04wYjNKNUtDaDBlWEJsYjJZZ2QybHVaRzkzSUNFOVBTQmNJblZ1WkdWbWFXNWxaRndpSUQ4Z2QybHVaRzkzV3lkcVVYVmxjbmtuWFNBNklIUjVjR1Z2WmlCbmJHOWlZV3dnSVQwOUlGd2lkVzVrWldacGJtVmtYQ0lnUHlCbmJHOWlZV3hiSjJwUmRXVnllU2RkSURvZ2JuVnNiQ2twTzF4dVhIUjlJR1ZzYzJVZ2UxeHVYSFJjZEdaaFkzUnZjbmtvYWxGMVpYSjVLVHRjYmx4MGZWeHVmU2tvWm5WdVkzUnBiMjRvSkNsN1hHNWNibHgwTHk4Z1VISmxjMlZ5ZG1VZ2RHaGxJRzl5YVdkcGJtRnNJR3BSZFdWeWVTQmNJbk4zYVc1blhDSWdaV0Z6YVc1bklHRnpJRndpYW5OM2FXNW5YQ0pjYmx4MGFXWWdLSFI1Y0dWdlppQWtMbVZoYzJsdVp5QWhQVDBnSjNWdVpHVm1hVzVsWkNjcElIdGNibHgwWEhRa0xtVmhjMmx1WjFzbmFuTjNhVzVuSjEwZ1BTQWtMbVZoYzJsdVoxc25jM2RwYm1jblhUdGNibHgwZlZ4dVhHNWNkSFpoY2lCd2IzY2dQU0JOWVhSb0xuQnZkeXhjYmx4MFhIUnpjWEowSUQwZ1RXRjBhQzV6Y1hKMExGeHVYSFJjZEhOcGJpQTlJRTFoZEdndWMybHVMRnh1WEhSY2RHTnZjeUE5SUUxaGRHZ3VZMjl6TEZ4dVhIUmNkRkJKSUQwZ1RXRjBhQzVRU1N4Y2JseDBYSFJqTVNBOUlERXVOekF4TlRnc1hHNWNkRngwWXpJZ1BTQmpNU0FxSURFdU5USTFMRnh1WEhSY2RHTXpJRDBnWXpFZ0t5QXhMRnh1WEhSY2RHTTBJRDBnS0NBeUlDb2dVRWtnS1NBdklETXNYRzVjZEZ4MFl6VWdQU0FvSURJZ0tpQlFTU0FwSUM4Z05DNDFPMXh1WEc1Y2RDOHZJSGdnYVhNZ2RHaGxJR1p5WVdOMGFXOXVJRzltSUdGdWFXMWhkR2x2YmlCd2NtOW5jbVZ6Y3l3Z2FXNGdkR2hsSUhKaGJtZGxJREF1TGpGY2JseDBablZ1WTNScGIyNGdZbTkxYm1ObFQzVjBLSGdwSUh0Y2JseDBYSFIyWVhJZ2JqRWdQU0EzTGpVMk1qVXNYRzVjZEZ4MFhIUmtNU0E5SURJdU56VTdYRzVjZEZ4MGFXWWdLQ0I0SUR3Z01TOWtNU0FwSUh0Y2JseDBYSFJjZEhKbGRIVnliaUJ1TVNwNEtuZzdYRzVjZEZ4MGZTQmxiSE5sSUdsbUlDZ2dlQ0E4SURJdlpERWdLU0I3WEc1Y2RGeDBYSFJ5WlhSMWNtNGdiakVxS0hndFBTZ3hMalV2WkRFcEtTcDRJQ3NnTGpjMU8xeHVYSFJjZEgwZ1pXeHpaU0JwWmlBb0lIZ2dQQ0F5TGpVdlpERWdLU0I3WEc1Y2RGeDBYSFJ5WlhSMWNtNGdiakVxS0hndFBTZ3lMakkxTDJReEtTa3FlQ0FySUM0NU16YzFPMXh1WEhSY2RIMGdaV3h6WlNCN1hHNWNkRngwWEhSeVpYUjFjbTRnYmpFcUtIZ3RQU2d5TGpZeU5TOWtNU2twS25nZ0t5QXVPVGcwTXpjMU8xeHVYSFJjZEgxY2JseDBmVnh1WEc1Y2RDUXVaWGgwWlc1a0tDQWtMbVZoYzJsdVp5d2dlMXh1WEhSY2RHUmxaam9nSjJWaGMyVlBkWFJSZFdGa0p5eGNibHgwWEhSemQybHVaem9nWm5WdVkzUnBiMjRnS0hncElIdGNibHgwWEhSY2RISmxkSFZ5YmlBa0xtVmhjMmx1WjFza0xtVmhjMmx1Wnk1a1pXWmRLSGdwTzF4dVhIUmNkSDBzWEc1Y2RGeDBaV0Z6WlVsdVVYVmhaRG9nWm5WdVkzUnBiMjRnS0hncElIdGNibHgwWEhSY2RISmxkSFZ5YmlCNElDb2dlRHRjYmx4MFhIUjlMRnh1WEhSY2RHVmhjMlZQZFhSUmRXRmtPaUJtZFc1amRHbHZiaUFvZUNrZ2UxeHVYSFJjZEZ4MGNtVjBkWEp1SURFZ0xTQW9JREVnTFNCNElDa2dLaUFvSURFZ0xTQjRJQ2s3WEc1Y2RGeDBmU3hjYmx4MFhIUmxZWE5sU1c1UGRYUlJkV0ZrT2lCbWRXNWpkR2x2YmlBb2VDa2dlMXh1WEhSY2RGeDBjbVYwZFhKdUlIZ2dQQ0F3TGpVZ1AxeHVYSFJjZEZ4MFhIUXlJQ29nZUNBcUlIZ2dPbHh1WEhSY2RGeDBYSFF4SUMwZ2NHOTNLQ0F0TWlBcUlIZ2dLeUF5TENBeUlDa2dMeUF5TzF4dVhIUmNkSDBzWEc1Y2RGeDBaV0Z6WlVsdVEzVmlhV002SUdaMWJtTjBhVzl1SUNoNEtTQjdYRzVjZEZ4MFhIUnlaWFIxY200Z2VDQXFJSGdnS2lCNE8xeHVYSFJjZEgwc1hHNWNkRngwWldGelpVOTFkRU4xWW1sak9pQm1kVzVqZEdsdmJpQW9lQ2tnZTF4dVhIUmNkRngwY21WMGRYSnVJREVnTFNCd2IzY29JREVnTFNCNExDQXpJQ2s3WEc1Y2RGeDBmU3hjYmx4MFhIUmxZWE5sU1c1UGRYUkRkV0pwWXpvZ1puVnVZM1JwYjI0Z0tIZ3BJSHRjYmx4MFhIUmNkSEpsZEhWeWJpQjRJRHdnTUM0MUlEOWNibHgwWEhSY2RGeDBOQ0FxSUhnZ0tpQjRJQ29nZUNBNlhHNWNkRngwWEhSY2RERWdMU0J3YjNjb0lDMHlJQ29nZUNBcklESXNJRE1nS1NBdklESTdYRzVjZEZ4MGZTeGNibHgwWEhSbFlYTmxTVzVSZFdGeWREb2dablZ1WTNScGIyNGdLSGdwSUh0Y2JseDBYSFJjZEhKbGRIVnliaUI0SUNvZ2VDQXFJSGdnS2lCNE8xeHVYSFJjZEgwc1hHNWNkRngwWldGelpVOTFkRkYxWVhKME9pQm1kVzVqZEdsdmJpQW9lQ2tnZTF4dVhIUmNkRngwY21WMGRYSnVJREVnTFNCd2IzY29JREVnTFNCNExDQTBJQ2s3WEc1Y2RGeDBmU3hjYmx4MFhIUmxZWE5sU1c1UGRYUlJkV0Z5ZERvZ1puVnVZM1JwYjI0Z0tIZ3BJSHRjYmx4MFhIUmNkSEpsZEhWeWJpQjRJRHdnTUM0MUlEOWNibHgwWEhSY2RGeDBPQ0FxSUhnZ0tpQjRJQ29nZUNBcUlIZ2dPbHh1WEhSY2RGeDBYSFF4SUMwZ2NHOTNLQ0F0TWlBcUlIZ2dLeUF5TENBMElDa2dMeUF5TzF4dVhIUmNkSDBzWEc1Y2RGeDBaV0Z6WlVsdVVYVnBiblE2SUdaMWJtTjBhVzl1SUNoNEtTQjdYRzVjZEZ4MFhIUnlaWFIxY200Z2VDQXFJSGdnS2lCNElDb2dlQ0FxSUhnN1hHNWNkRngwZlN4Y2JseDBYSFJsWVhObFQzVjBVWFZwYm5RNklHWjFibU4wYVc5dUlDaDRLU0I3WEc1Y2RGeDBYSFJ5WlhSMWNtNGdNU0F0SUhCdmR5Z2dNU0F0SUhnc0lEVWdLVHRjYmx4MFhIUjlMRnh1WEhSY2RHVmhjMlZKYms5MWRGRjFhVzUwT2lCbWRXNWpkR2x2YmlBb2VDa2dlMXh1WEhSY2RGeDBjbVYwZFhKdUlIZ2dQQ0F3TGpVZ1AxeHVYSFJjZEZ4MFhIUXhOaUFxSUhnZ0tpQjRJQ29nZUNBcUlIZ2dLaUI0SURwY2JseDBYSFJjZEZ4ME1TQXRJSEJ2ZHlnZ0xUSWdLaUI0SUNzZ01pd2dOU0FwSUM4Z01qdGNibHgwWEhSOUxGeHVYSFJjZEdWaGMyVkpibE5wYm1VNklHWjFibU4wYVc5dUlDaDRLU0I3WEc1Y2RGeDBYSFJ5WlhSMWNtNGdNU0F0SUdOdmN5Z2dlQ0FxSUZCSkx6SWdLVHRjYmx4MFhIUjlMRnh1WEhSY2RHVmhjMlZQZFhSVGFXNWxPaUJtZFc1amRHbHZiaUFvZUNrZ2UxeHVYSFJjZEZ4MGNtVjBkWEp1SUhOcGJpZ2dlQ0FxSUZCSkx6SWdLVHRjYmx4MFhIUjlMRnh1WEhSY2RHVmhjMlZKYms5MWRGTnBibVU2SUdaMWJtTjBhVzl1SUNoNEtTQjdYRzVjZEZ4MFhIUnlaWFIxY200Z0xTZ2dZMjl6S0NCUVNTQXFJSGdnS1NBdElERWdLU0F2SURJN1hHNWNkRngwZlN4Y2JseDBYSFJsWVhObFNXNUZlSEJ2T2lCbWRXNWpkR2x2YmlBb2VDa2dlMXh1WEhSY2RGeDBjbVYwZFhKdUlIZ2dQVDA5SURBZ1B5QXdJRG9nY0c5M0tDQXlMQ0F4TUNBcUlIZ2dMU0F4TUNBcE8xeHVYSFJjZEgwc1hHNWNkRngwWldGelpVOTFkRVY0Y0c4NklHWjFibU4wYVc5dUlDaDRLU0I3WEc1Y2RGeDBYSFJ5WlhSMWNtNGdlQ0E5UFQwZ01TQS9JREVnT2lBeElDMGdjRzkzS0NBeUxDQXRNVEFnS2lCNElDazdYRzVjZEZ4MGZTeGNibHgwWEhSbFlYTmxTVzVQZFhSRmVIQnZPaUJtZFc1amRHbHZiaUFvZUNrZ2UxeHVYSFJjZEZ4MGNtVjBkWEp1SUhnZ1BUMDlJREFnUHlBd0lEb2dlQ0E5UFQwZ01TQS9JREVnT2lCNElEd2dNQzQxSUQ5Y2JseDBYSFJjZEZ4MGNHOTNLQ0F5TENBeU1DQXFJSGdnTFNBeE1DQXBJQzhnTWlBNlhHNWNkRngwWEhSY2RDZ2dNaUF0SUhCdmR5Z2dNaXdnTFRJd0lDb2dlQ0FySURFd0lDa2dLU0F2SURJN1hHNWNkRngwZlN4Y2JseDBYSFJsWVhObFNXNURhWEpqT2lCbWRXNWpkR2x2YmlBb2VDa2dlMXh1WEhSY2RGeDBjbVYwZFhKdUlERWdMU0J6Y1hKMEtDQXhJQzBnY0c5M0tDQjRMQ0F5SUNrZ0tUdGNibHgwWEhSOUxGeHVYSFJjZEdWaGMyVlBkWFJEYVhKak9pQm1kVzVqZEdsdmJpQW9lQ2tnZTF4dVhIUmNkRngwY21WMGRYSnVJSE54Y25Rb0lERWdMU0J3YjNjb0lIZ2dMU0F4TENBeUlDa2dLVHRjYmx4MFhIUjlMRnh1WEhSY2RHVmhjMlZKYms5MWRFTnBjbU02SUdaMWJtTjBhVzl1SUNoNEtTQjdYRzVjZEZ4MFhIUnlaWFIxY200Z2VDQThJREF1TlNBL1hHNWNkRngwWEhSY2RDZ2dNU0F0SUhOeGNuUW9JREVnTFNCd2IzY29JRElnS2lCNExDQXlJQ2tnS1NBcElDOGdNaUE2WEc1Y2RGeDBYSFJjZENnZ2MzRnlkQ2dnTVNBdElIQnZkeWdnTFRJZ0tpQjRJQ3NnTWl3Z01pQXBJQ2tnS3lBeElDa2dMeUF5TzF4dVhIUmNkSDBzWEc1Y2RGeDBaV0Z6WlVsdVJXeGhjM1JwWXpvZ1puVnVZM1JwYjI0Z0tIZ3BJSHRjYmx4MFhIUmNkSEpsZEhWeWJpQjRJRDA5UFNBd0lEOGdNQ0E2SUhnZ1BUMDlJREVnUHlBeElEcGNibHgwWEhSY2RGeDBMWEJ2ZHlnZ01pd2dNVEFnS2lCNElDMGdNVEFnS1NBcUlITnBiaWdnS0NCNElDb2dNVEFnTFNBeE1DNDNOU0FwSUNvZ1l6UWdLVHRjYmx4MFhIUjlMRnh1WEhSY2RHVmhjMlZQZFhSRmJHRnpkR2xqT2lCbWRXNWpkR2x2YmlBb2VDa2dlMXh1WEhSY2RGeDBjbVYwZFhKdUlIZ2dQVDA5SURBZ1B5QXdJRG9nZUNBOVBUMGdNU0EvSURFZ09seHVYSFJjZEZ4MFhIUndiM2NvSURJc0lDMHhNQ0FxSUhnZ0tTQXFJSE5wYmlnZ0tDQjRJQ29nTVRBZ0xTQXdMamMxSUNrZ0tpQmpOQ0FwSUNzZ01UdGNibHgwWEhSOUxGeHVYSFJjZEdWaGMyVkpiazkxZEVWc1lYTjBhV002SUdaMWJtTjBhVzl1SUNoNEtTQjdYRzVjZEZ4MFhIUnlaWFIxY200Z2VDQTlQVDBnTUNBL0lEQWdPaUI0SUQwOVBTQXhJRDhnTVNBNklIZ2dQQ0F3TGpVZ1AxeHVYSFJjZEZ4MFhIUXRLQ0J3YjNjb0lESXNJREl3SUNvZ2VDQXRJREV3SUNrZ0tpQnphVzRvSUNnZ01qQWdLaUI0SUMwZ01URXVNVEkxSUNrZ0tpQmpOU0FwS1NBdklESWdPbHh1WEhSY2RGeDBYSFJ3YjNjb0lESXNJQzB5TUNBcUlIZ2dLeUF4TUNBcElDb2djMmx1S0NBb0lESXdJQ29nZUNBdElERXhMakV5TlNBcElDb2dZelVnS1NBdklESWdLeUF4TzF4dVhIUmNkSDBzWEc1Y2RGeDBaV0Z6WlVsdVFtRmphem9nWm5WdVkzUnBiMjRnS0hncElIdGNibHgwWEhSY2RISmxkSFZ5YmlCak15QXFJSGdnS2lCNElDb2dlQ0F0SUdNeElDb2dlQ0FxSUhnN1hHNWNkRngwZlN4Y2JseDBYSFJsWVhObFQzVjBRbUZqYXpvZ1puVnVZM1JwYjI0Z0tIZ3BJSHRjYmx4MFhIUmNkSEpsZEhWeWJpQXhJQ3NnWXpNZ0tpQndiM2NvSUhnZ0xTQXhMQ0F6SUNrZ0t5QmpNU0FxSUhCdmR5Z2dlQ0F0SURFc0lESWdLVHRjYmx4MFhIUjlMRnh1WEhSY2RHVmhjMlZKYms5MWRFSmhZMnM2SUdaMWJtTjBhVzl1SUNoNEtTQjdYRzVjZEZ4MFhIUnlaWFIxY200Z2VDQThJREF1TlNBL1hHNWNkRngwWEhSY2RDZ2djRzkzS0NBeUlDb2dlQ3dnTWlBcElDb2dLQ0FvSUdNeUlDc2dNU0FwSUNvZ01pQXFJSGdnTFNCak1pQXBJQ2tnTHlBeUlEcGNibHgwWEhSY2RGeDBLQ0J3YjNjb0lESWdLaUI0SUMwZ01pd2dNaUFwSUNvb0lDZ2dZeklnS3lBeElDa2dLaUFvSUhnZ0tpQXlJQzBnTWlBcElDc2dZeklnS1NBcklESWdLU0F2SURJN1hHNWNkRngwZlN4Y2JseDBYSFJsWVhObFNXNUNiM1Z1WTJVNklHWjFibU4wYVc5dUlDaDRLU0I3WEc1Y2RGeDBYSFJ5WlhSMWNtNGdNU0F0SUdKdmRXNWpaVTkxZENnZ01TQXRJSGdnS1R0Y2JseDBYSFI5TEZ4dVhIUmNkR1ZoYzJWUGRYUkNiM1Z1WTJVNklHSnZkVzVqWlU5MWRDeGNibHgwWEhSbFlYTmxTVzVQZFhSQ2IzVnVZMlU2SUdaMWJtTjBhVzl1SUNoNEtTQjdYRzVjZEZ4MFhIUnlaWFIxY200Z2VDQThJREF1TlNBL1hHNWNkRngwWEhSY2RDZ2dNU0F0SUdKdmRXNWpaVTkxZENnZ01TQXRJRElnS2lCNElDa2dLU0F2SURJZ09seHVYSFJjZEZ4MFhIUW9JREVnS3lCaWIzVnVZMlZQZFhRb0lESWdLaUI0SUMwZ01TQXBJQ2tnTHlBeU8xeHVYSFJjZEgxY2JseDBmU2s3WEc1Y2RISmxkSFZ5YmlBa08xeHVmU2s3WEc1Y2JuMG9hbEYxWlhKNUtTazdYRzVjYmk4dmMyRm1ZWEpwSUdKaFkyc2dZblYwZEc5dUlHWnBlRnh1YWxGMVpYSjVLQ0IzYVc1a2IzY2dLUzV2YmlnZ1hDSndZV2RsYzJodmQxd2lMQ0JtZFc1amRHbHZiaWhsZG1WdWRDa2dlMXh1SUNBZ0lHbG1JQ2hsZG1WdWRDNXZjbWxuYVc1aGJFVjJaVzUwTG5CbGNuTnBjM1JsWkNrZ2UxeHVJQ0FnSUNBZ0lDQnFVWFZsY25rb1hDSXVjMlZoY21Ob1lXNWtabWxzZEdWeVhDSXBMbTltWmlncE8xeHVJQ0FnSUNBZ0lDQnFVWFZsY25rb1hDSXVjMlZoY21Ob1lXNWtabWxzZEdWeVhDSXBMbk5sWVhKamFFRnVaRVpwYkhSbGNpZ3BPMXh1SUNBZ0lIMWNibjBwTzF4dVhHNHZLaUIzY0c1MWJXSWdMU0J1YjNWcGMyeHBaR1Z5SUc1MWJXSmxjaUJtYjNKdFlYUjBhVzVuSUNvdlhHNGhablZ1WTNScGIyNG9LWHRjSW5WelpTQnpkSEpwWTNSY0lqdG1kVzVqZEdsdmJpQmxLR1VwZTNKbGRIVnliaUJsTG5Od2JHbDBLRndpWENJcExuSmxkbVZ5YzJVb0tTNXFiMmx1S0Z3aVhDSXBmV1oxYm1OMGFXOXVJRzRvWlN4dUtYdHlaWFIxY200Z1pTNXpkV0p6ZEhKcGJtY29NQ3h1TG14bGJtZDBhQ2s5UFQxdWZXWjFibU4wYVc5dUlISW9aU3h1S1h0eVpYUjFjbTRnWlM1emJHbGpaU2d0TVNwdUxteGxibWQwYUNrOVBUMXVmV1oxYm1OMGFXOXVJSFFvWlN4dUxISXBlMmxtS0NobFcyNWRmSHhsVzNKZEtTWW1aVnR1WFQwOVBXVmJjbDBwZEdoeWIzY2dibVYzSUVWeWNtOXlLRzRwZldaMWJtTjBhVzl1SUdrb1pTbDdjbVYwZFhKdVhDSnVkVzFpWlhKY0lqMDlkSGx3Wlc5bUlHVW1KbWx6Um1sdWFYUmxLR1VwZldaMWJtTjBhVzl1SUc4b1pTeHVLWHQyWVhJZ2NqMU5ZWFJvTG5CdmR5Z3hNQ3h1S1R0eVpYUjFjbTRvVFdGMGFDNXliM1Z1WkNobEtuSXBMM0lwTG5SdlJtbDRaV1FvYmlsOVpuVnVZM1JwYjI0Z2RTaHVMSElzZEN4MUxHWXNZU3hqTEhNc2NDeGtMR3dzYUNsN2RtRnlJR2NzZGl4M0xHMDlhQ3g0UFZ3aVhDSXNZajFjSWx3aU8zSmxkSFZ5YmlCaEppWW9hRDFoS0dncEtTeHBLR2dwUHlodUlUMDlJVEVtSmpBOVBUMXdZWEp6WlVac2IyRjBLR2d1ZEc5R2FYaGxaQ2h1S1NrbUppaG9QVEFwTERBK2FDWW1LR2M5SVRBc2FEMU5ZWFJvTG1GaWN5aG9LU2tzYmlFOVBTRXhKaVlvYUQxdktHZ3NiaWtwTEdnOWFDNTBiMU4wY21sdVp5Z3BMQzB4SVQwOWFDNXBibVJsZUU5bUtGd2lMbHdpS1Q4b2RqMW9Mbk53YkdsMEtGd2lMbHdpS1N4M1BYWmJNRjBzZENZbUtIZzlkQ3QyV3pGZEtTazZkejFvTEhJbUppaDNQV1VvZHlrdWJXRjBZMmdvTHk1N01Td3pmUzluS1N4M1BXVW9keTVxYjJsdUtHVW9jaWtwS1Nrc1p5WW1jeVltS0dJclBYTXBMSFVtSmloaUt6MTFLU3huSmlad0ppWW9ZaXM5Y0Nrc1lpczlkeXhpS3oxNExHWW1KaWhpS3oxbUtTeGtKaVlvWWoxa0tHSXNiU2twTEdJcE9pRXhmV1oxYm1OMGFXOXVJR1lvWlN4MExHOHNkU3htTEdFc1l5eHpMSEFzWkN4c0xHZ3BlM1poY2lCbkxIWTlYQ0pjSWp0eVpYUjFjbTRnYkNZbUtHZzliQ2hvS1Nrc2FDWW1YQ0p6ZEhKcGJtZGNJajA5ZEhsd1pXOW1JR2cvS0hNbUptNG9hQ3h6S1NZbUtHZzlhQzV5WlhCc1lXTmxLSE1zWENKY0lpa3NaejBoTUNrc2RTWW1iaWhvTEhVcEppWW9hRDFvTG5KbGNHeGhZMlVvZFN4Y0lsd2lLU2tzY0NZbWJpaG9MSEFwSmlZb2FEMW9MbkpsY0d4aFkyVW9jQ3hjSWx3aUtTeG5QU0V3S1N4bUppWnlLR2dzWmlrbUppaG9QV2d1YzJ4cFkyVW9NQ3d0TVNwbUxteGxibWQwYUNrcExIUW1KaWhvUFdndWMzQnNhWFFvZENrdWFtOXBiaWhjSWx3aUtTa3NieVltS0dnOWFDNXlaWEJzWVdObEtHOHNYQ0l1WENJcEtTeG5KaVlvZGlzOVhDSXRYQ0lwTEhZclBXZ3NkajEyTG5KbGNHeGhZMlVvTDF0ZU1DMDVYRnd1WEZ3dExsMHZaeXhjSWx3aUtTeGNJbHdpUFQwOWRqOGhNVG9vZGoxT2RXMWlaWElvZGlrc1l5WW1LSFk5WXloMktTa3NhU2gyS1Q5Mk9pRXhLU2s2SVRGOVpuVnVZM1JwYjI0Z1lTaGxLWHQyWVhJZ2JpeHlMR2tzYnoxN2ZUdG1iM0lvYmowd08yNDhjQzVzWlc1bmRHZzdiaXM5TVNscFppaHlQWEJiYmwwc2FUMWxXM0pkTEhadmFXUWdNRDA5UFdrcFhDSnVaV2RoZEdsMlpWd2lJVDA5Y254OGJ5NXVaV2RoZEdsMlpVSmxabTl5WlQ5Y0ltMWhjbXRjSWowOVBYSW1KbHdpTGx3aUlUMDlieTUwYUc5MWMyRnVaRDl2VzNKZFBWd2lMbHdpT205YmNsMDlJVEU2YjF0eVhUMWNJaTFjSWp0bGJITmxJR2xtS0Z3aVpHVmphVzFoYkhOY0lqMDlQWElwZTJsbUtDRW9hVDQ5TUNZbU9ENXBLU2wwYUhKdmR5QnVaWGNnUlhKeWIzSW9jaWs3YjF0eVhUMXBmV1ZzYzJVZ2FXWW9YQ0psYm1OdlpHVnlYQ0k5UFQxeWZIeGNJbVJsWTI5a1pYSmNJajA5UFhKOGZGd2laV1JwZEZ3aVBUMDljbng4WENKMWJtUnZYQ0k5UFQxeUtYdHBaaWhjSW1aMWJtTjBhVzl1WENJaFBYUjVjR1Z2WmlCcEtYUm9jbTkzSUc1bGR5QkZjbkp2Y2loeUtUdHZXM0pkUFdsOVpXeHpaWHRwWmloY0luTjBjbWx1WjF3aUlUMTBlWEJsYjJZZ2FTbDBhSEp2ZHlCdVpYY2dSWEp5YjNJb2NpazdiMXR5WFQxcGZYSmxkSFZ5YmlCMEtHOHNYQ0p0WVhKclhDSXNYQ0owYUc5MWMyRnVaRndpS1N4MEtHOHNYQ0p3Y21WbWFYaGNJaXhjSW01bFoyRjBhWFpsWENJcExIUW9ieXhjSW5CeVpXWnBlRndpTEZ3aWJtVm5ZWFJwZG1WQ1pXWnZjbVZjSWlrc2IzMW1kVzVqZEdsdmJpQmpLR1VzYml4eUtYdDJZWElnZEN4cFBWdGRPMlp2Y2loMFBUQTdkRHh3TG14bGJtZDBhRHQwS3oweEtXa3VjSFZ6YUNobFczQmJkRjFkS1R0eVpYUjFjbTRnYVM1d2RYTm9LSElwTEc0dVlYQndiSGtvWENKY0lpeHBLWDFtZFc1amRHbHZiaUJ6S0dVcGUzSmxkSFZ5YmlCMGFHbHpJR2x1YzNSaGJtTmxiMllnY3o5MmIybGtLRndpYjJKcVpXTjBYQ0k5UFhSNWNHVnZaaUJsSmlZb1pUMWhLR1VwTEhSb2FYTXVkRzg5Wm5WdVkzUnBiMjRvYmlsN2NtVjBkWEp1SUdNb1pTeDFMRzRwZlN4MGFHbHpMbVp5YjIwOVpuVnVZM1JwYjI0b2JpbDdjbVYwZFhKdUlHTW9aU3htTEc0cGZTa3BPbTVsZHlCektHVXBmWFpoY2lCd1BWdGNJbVJsWTJsdFlXeHpYQ0lzWENKMGFHOTFjMkZ1WkZ3aUxGd2liV0Z5YTF3aUxGd2ljSEpsWm1sNFhDSXNYQ0p3YjNOMFptbDRYQ0lzWENKbGJtTnZaR1Z5WENJc1hDSmtaV052WkdWeVhDSXNYQ0p1WldkaGRHbDJaVUpsWm05eVpWd2lMRndpYm1WbllYUnBkbVZjSWl4Y0ltVmthWFJjSWl4Y0luVnVaRzljSWwwN2QybHVaRzkzTG5kT2RXMWlQWE45S0NrN1hHNWNiaUpkZlE9PSIsIi8qISBub3Vpc2xpZGVyIC0gMTEuMS4wIC0gMjAxOC0wNC0wMiAxMToxODoxMyAqL1xyXG5cclxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XHJcblxyXG4gICAgaWYgKCB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7XHJcblxyXG4gICAgICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cclxuICAgICAgICBkZWZpbmUoW10sIGZhY3RvcnkpO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyApIHtcclxuXHJcbiAgICAgICAgLy8gTm9kZS9Db21tb25KU1xyXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFsc1xyXG4gICAgICAgIHdpbmRvdy5ub1VpU2xpZGVyID0gZmFjdG9yeSgpO1xyXG4gICAgfVxyXG5cclxufShmdW5jdGlvbiggKXtcclxuXHJcblx0J3VzZSBzdHJpY3QnO1xyXG5cclxuXHR2YXIgVkVSU0lPTiA9ICcxMS4xLjAnO1xyXG5cclxuXG5cdGZ1bmN0aW9uIGlzVmFsaWRGb3JtYXR0ZXIgKCBlbnRyeSApIHtcblx0XHRyZXR1cm4gdHlwZW9mIGVudHJ5ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZW50cnkudG8gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVudHJ5LmZyb20gPT09ICdmdW5jdGlvbic7XG5cdH1cblxuXHRmdW5jdGlvbiByZW1vdmVFbGVtZW50ICggZWwgKSB7XG5cdFx0ZWwucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChlbCk7XG5cdH1cblxuXHRmdW5jdGlvbiBpc1NldCAoIHZhbHVlICkge1xuXHRcdHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gQmluZGFibGUgdmVyc2lvblxuXHRmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCAoIGUgKSB7XG5cdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHR9XG5cblx0Ly8gUmVtb3ZlcyBkdXBsaWNhdGVzIGZyb20gYW4gYXJyYXkuXG5cdGZ1bmN0aW9uIHVuaXF1ZSAoIGFycmF5ICkge1xuXHRcdHJldHVybiBhcnJheS5maWx0ZXIoZnVuY3Rpb24oYSl7XG5cdFx0XHRyZXR1cm4gIXRoaXNbYV0gPyB0aGlzW2FdID0gdHJ1ZSA6IGZhbHNlO1xuXHRcdH0sIHt9KTtcblx0fVxuXG5cdC8vIFJvdW5kIGEgdmFsdWUgdG8gdGhlIGNsb3Nlc3QgJ3RvJy5cblx0ZnVuY3Rpb24gY2xvc2VzdCAoIHZhbHVlLCB0byApIHtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAvIHRvKSAqIHRvO1xuXHR9XG5cblx0Ly8gQ3VycmVudCBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIHRoZSBkb2N1bWVudC5cblx0ZnVuY3Rpb24gb2Zmc2V0ICggZWxlbSwgb3JpZW50YXRpb24gKSB7XG5cblx0XHR2YXIgcmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0dmFyIGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHR2YXIgZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0dmFyIHBhZ2VPZmZzZXQgPSBnZXRQYWdlT2Zmc2V0KGRvYyk7XG5cblx0XHQvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QgY29udGFpbnMgbGVmdCBzY3JvbGwgaW4gQ2hyb21lIG9uIEFuZHJvaWQuXG5cdFx0Ly8gSSBoYXZlbid0IGZvdW5kIGEgZmVhdHVyZSBkZXRlY3Rpb24gdGhhdCBwcm92ZXMgdGhpcy4gV29yc3QgY2FzZVxuXHRcdC8vIHNjZW5hcmlvIG9uIG1pcy1tYXRjaDogdGhlICd0YXAnIGZlYXR1cmUgb24gaG9yaXpvbnRhbCBzbGlkZXJzIGJyZWFrcy5cblx0XHRpZiAoIC93ZWJraXQuKkNocm9tZS4qTW9iaWxlL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSApIHtcblx0XHRcdHBhZ2VPZmZzZXQueCA9IDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9yaWVudGF0aW9uID8gKHJlY3QudG9wICsgcGFnZU9mZnNldC55IC0gZG9jRWxlbS5jbGllbnRUb3ApIDogKHJlY3QubGVmdCArIHBhZ2VPZmZzZXQueCAtIGRvY0VsZW0uY2xpZW50TGVmdCk7XG5cdH1cblxuXHQvLyBDaGVja3Mgd2hldGhlciBhIHZhbHVlIGlzIG51bWVyaWNhbC5cblx0ZnVuY3Rpb24gaXNOdW1lcmljICggYSApIHtcblx0XHRyZXR1cm4gdHlwZW9mIGEgPT09ICdudW1iZXInICYmICFpc05hTiggYSApICYmIGlzRmluaXRlKCBhICk7XG5cdH1cblxuXHQvLyBTZXRzIGEgY2xhc3MgYW5kIHJlbW92ZXMgaXQgYWZ0ZXIgW2R1cmF0aW9uXSBtcy5cblx0ZnVuY3Rpb24gYWRkQ2xhc3NGb3IgKCBlbGVtZW50LCBjbGFzc05hbWUsIGR1cmF0aW9uICkge1xuXHRcdGlmIChkdXJhdGlvbiA+IDApIHtcblx0XHRhZGRDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpO1xuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbigpe1xuXHRcdFx0XHRyZW1vdmVDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpO1xuXHRcdFx0fSwgZHVyYXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdC8vIExpbWl0cyBhIHZhbHVlIHRvIDAgLSAxMDBcblx0ZnVuY3Rpb24gbGltaXQgKCBhICkge1xuXHRcdHJldHVybiBNYXRoLm1heChNYXRoLm1pbihhLCAxMDApLCAwKTtcblx0fVxuXG5cdC8vIFdyYXBzIGEgdmFyaWFibGUgYXMgYW4gYXJyYXksIGlmIGl0IGlzbid0IG9uZSB5ZXQuXG5cdC8vIE5vdGUgdGhhdCBhbiBpbnB1dCBhcnJheSBpcyByZXR1cm5lZCBieSByZWZlcmVuY2UhXG5cdGZ1bmN0aW9uIGFzQXJyYXkgKCBhICkge1xuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KGEpID8gYSA6IFthXTtcblx0fVxuXG5cdC8vIENvdW50cyBkZWNpbWFsc1xuXHRmdW5jdGlvbiBjb3VudERlY2ltYWxzICggbnVtU3RyICkge1xuXHRcdG51bVN0ciA9IFN0cmluZyhudW1TdHIpO1xuXHRcdHZhciBwaWVjZXMgPSBudW1TdHIuc3BsaXQoXCIuXCIpO1xuXHRcdHJldHVybiBwaWVjZXMubGVuZ3RoID4gMSA/IHBpZWNlc1sxXS5sZW5ndGggOiAwO1xuXHR9XG5cblx0Ly8gaHR0cDovL3lvdW1pZ2h0bm90bmVlZGpxdWVyeS5jb20vI2FkZF9jbGFzc1xuXHRmdW5jdGlvbiBhZGRDbGFzcyAoIGVsLCBjbGFzc05hbWUgKSB7XG5cdFx0aWYgKCBlbC5jbGFzc0xpc3QgKSB7XG5cdFx0XHRlbC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsLmNsYXNzTmFtZSArPSAnICcgKyBjbGFzc05hbWU7XG5cdFx0fVxuXHR9XG5cblx0Ly8gaHR0cDovL3lvdW1pZ2h0bm90bmVlZGpxdWVyeS5jb20vI3JlbW92ZV9jbGFzc1xuXHRmdW5jdGlvbiByZW1vdmVDbGFzcyAoIGVsLCBjbGFzc05hbWUgKSB7XG5cdFx0aWYgKCBlbC5jbGFzc0xpc3QgKSB7XG5cdFx0XHRlbC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsLmNsYXNzTmFtZSA9IGVsLmNsYXNzTmFtZS5yZXBsYWNlKG5ldyBSZWdFeHAoJyhefFxcXFxiKScgKyBjbGFzc05hbWUuc3BsaXQoJyAnKS5qb2luKCd8JykgKyAnKFxcXFxifCQpJywgJ2dpJyksICcgJyk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gaHR0cHM6Ly9wbGFpbmpzLmNvbS9qYXZhc2NyaXB0L2F0dHJpYnV0ZXMvYWRkaW5nLXJlbW92aW5nLWFuZC10ZXN0aW5nLWZvci1jbGFzc2VzLTkvXG5cdGZ1bmN0aW9uIGhhc0NsYXNzICggZWwsIGNsYXNzTmFtZSApIHtcblx0XHRyZXR1cm4gZWwuY2xhc3NMaXN0ID8gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkgOiBuZXcgUmVnRXhwKCdcXFxcYicgKyBjbGFzc05hbWUgKyAnXFxcXGInKS50ZXN0KGVsLmNsYXNzTmFtZSk7XG5cdH1cblxuXHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L3Njcm9sbFkjTm90ZXNcblx0ZnVuY3Rpb24gZ2V0UGFnZU9mZnNldCAoIGRvYyApIHtcblxuXHRcdHZhciBzdXBwb3J0UGFnZU9mZnNldCA9IHdpbmRvdy5wYWdlWE9mZnNldCAhPT0gdW5kZWZpbmVkO1xuXHRcdHZhciBpc0NTUzFDb21wYXQgPSAoKGRvYy5jb21wYXRNb2RlIHx8IFwiXCIpID09PSBcIkNTUzFDb21wYXRcIik7XG5cdFx0dmFyIHggPSBzdXBwb3J0UGFnZU9mZnNldCA/IHdpbmRvdy5wYWdlWE9mZnNldCA6IGlzQ1NTMUNvbXBhdCA/IGRvYy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGRvYy5ib2R5LnNjcm9sbExlZnQ7XG5cdFx0dmFyIHkgPSBzdXBwb3J0UGFnZU9mZnNldCA/IHdpbmRvdy5wYWdlWU9mZnNldCA6IGlzQ1NTMUNvbXBhdCA/IGRvYy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIDogZG9jLmJvZHkuc2Nyb2xsVG9wO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHg6IHgsXG5cdFx0XHR5OiB5XG5cdFx0fTtcblx0fVxuXHJcblx0Ly8gd2UgcHJvdmlkZSBhIGZ1bmN0aW9uIHRvIGNvbXB1dGUgY29uc3RhbnRzIGluc3RlYWRcclxuXHQvLyBvZiBhY2Nlc3Npbmcgd2luZG93LiogYXMgc29vbiBhcyB0aGUgbW9kdWxlIG5lZWRzIGl0XHJcblx0Ly8gc28gdGhhdCB3ZSBkbyBub3QgY29tcHV0ZSBhbnl0aGluZyBpZiBub3QgbmVlZGVkXHJcblx0ZnVuY3Rpb24gZ2V0QWN0aW9ucyAoICkge1xyXG5cclxuXHRcdC8vIERldGVybWluZSB0aGUgZXZlbnRzIHRvIGJpbmQuIElFMTEgaW1wbGVtZW50cyBwb2ludGVyRXZlbnRzIHdpdGhvdXRcclxuXHRcdC8vIGEgcHJlZml4LCB3aGljaCBicmVha3MgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBJRTEwIGltcGxlbWVudGF0aW9uLlxyXG5cdFx0cmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IucG9pbnRlckVuYWJsZWQgPyB7XHJcblx0XHRcdHN0YXJ0OiAncG9pbnRlcmRvd24nLFxyXG5cdFx0XHRtb3ZlOiAncG9pbnRlcm1vdmUnLFxyXG5cdFx0XHRlbmQ6ICdwb2ludGVydXAnXHJcblx0XHR9IDogd2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkID8ge1xyXG5cdFx0XHRzdGFydDogJ01TUG9pbnRlckRvd24nLFxyXG5cdFx0XHRtb3ZlOiAnTVNQb2ludGVyTW92ZScsXHJcblx0XHRcdGVuZDogJ01TUG9pbnRlclVwJ1xyXG5cdFx0fSA6IHtcclxuXHRcdFx0c3RhcnQ6ICdtb3VzZWRvd24gdG91Y2hzdGFydCcsXHJcblx0XHRcdG1vdmU6ICdtb3VzZW1vdmUgdG91Y2htb3ZlJyxcclxuXHRcdFx0ZW5kOiAnbW91c2V1cCB0b3VjaGVuZCdcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vV0lDRy9FdmVudExpc3RlbmVyT3B0aW9ucy9ibG9iL2doLXBhZ2VzL2V4cGxhaW5lci5tZFxyXG5cdC8vIElzc3VlICM3ODVcclxuXHRmdW5jdGlvbiBnZXRTdXBwb3J0c1Bhc3NpdmUgKCApIHtcclxuXHJcblx0XHR2YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XHJcblxyXG5cdFx0dHJ5IHtcclxuXHJcblx0XHRcdHZhciBvcHRzID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcclxuXHRcdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0c3VwcG9ydHNQYXNzaXZlID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBudWxsLCBvcHRzKTtcclxuXHJcblx0XHR9IGNhdGNoIChlKSB7fVxyXG5cclxuXHRcdHJldHVybiBzdXBwb3J0c1Bhc3NpdmU7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBnZXRTdXBwb3J0c1RvdWNoQWN0aW9uTm9uZSAoICkge1xyXG5cdFx0cmV0dXJuIHdpbmRvdy5DU1MgJiYgQ1NTLnN1cHBvcnRzICYmIENTUy5zdXBwb3J0cygndG91Y2gtYWN0aW9uJywgJ25vbmUnKTtcclxuXHR9XHJcblxyXG5cclxuLy8gVmFsdWUgY2FsY3VsYXRpb25cclxuXHJcblx0Ly8gRGV0ZXJtaW5lIHRoZSBzaXplIG9mIGEgc3ViLXJhbmdlIGluIHJlbGF0aW9uIHRvIGEgZnVsbCByYW5nZS5cclxuXHRmdW5jdGlvbiBzdWJSYW5nZVJhdGlvICggcGEsIHBiICkge1xyXG5cdFx0cmV0dXJuICgxMDAgLyAocGIgLSBwYSkpO1xyXG5cdH1cclxuXHJcblx0Ly8gKHBlcmNlbnRhZ2UpIEhvdyBtYW55IHBlcmNlbnQgaXMgdGhpcyB2YWx1ZSBvZiB0aGlzIHJhbmdlP1xyXG5cdGZ1bmN0aW9uIGZyb21QZXJjZW50YWdlICggcmFuZ2UsIHZhbHVlICkge1xyXG5cdFx0cmV0dXJuICh2YWx1ZSAqIDEwMCkgLyAoIHJhbmdlWzFdIC0gcmFuZ2VbMF0gKTtcclxuXHR9XHJcblxyXG5cdC8vIChwZXJjZW50YWdlKSBXaGVyZSBpcyB0aGlzIHZhbHVlIG9uIHRoaXMgcmFuZ2U/XHJcblx0ZnVuY3Rpb24gdG9QZXJjZW50YWdlICggcmFuZ2UsIHZhbHVlICkge1xyXG5cdFx0cmV0dXJuIGZyb21QZXJjZW50YWdlKCByYW5nZSwgcmFuZ2VbMF0gPCAwID9cclxuXHRcdFx0dmFsdWUgKyBNYXRoLmFicyhyYW5nZVswXSkgOlxyXG5cdFx0XHRcdHZhbHVlIC0gcmFuZ2VbMF0gKTtcclxuXHR9XHJcblxyXG5cdC8vICh2YWx1ZSkgSG93IG11Y2ggaXMgdGhpcyBwZXJjZW50YWdlIG9uIHRoaXMgcmFuZ2U/XHJcblx0ZnVuY3Rpb24gaXNQZXJjZW50YWdlICggcmFuZ2UsIHZhbHVlICkge1xyXG5cdFx0cmV0dXJuICgodmFsdWUgKiAoIHJhbmdlWzFdIC0gcmFuZ2VbMF0gKSkgLyAxMDApICsgcmFuZ2VbMF07XHJcblx0fVxyXG5cclxuXHJcbi8vIFJhbmdlIGNvbnZlcnNpb25cclxuXHJcblx0ZnVuY3Rpb24gZ2V0SiAoIHZhbHVlLCBhcnIgKSB7XHJcblxyXG5cdFx0dmFyIGogPSAxO1xyXG5cclxuXHRcdHdoaWxlICggdmFsdWUgPj0gYXJyW2pdICl7XHJcblx0XHRcdGogKz0gMTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gajtcclxuXHR9XHJcblxyXG5cdC8vIChwZXJjZW50YWdlKSBJbnB1dCBhIHZhbHVlLCBmaW5kIHdoZXJlLCBvbiBhIHNjYWxlIG9mIDAtMTAwLCBpdCBhcHBsaWVzLlxyXG5cdGZ1bmN0aW9uIHRvU3RlcHBpbmcgKCB4VmFsLCB4UGN0LCB2YWx1ZSApIHtcclxuXHJcblx0XHRpZiAoIHZhbHVlID49IHhWYWwuc2xpY2UoLTEpWzBdICl7XHJcblx0XHRcdHJldHVybiAxMDA7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGogPSBnZXRKKCB2YWx1ZSwgeFZhbCApO1xyXG5cdFx0dmFyIHZhID0geFZhbFtqLTFdO1xyXG5cdFx0dmFyIHZiID0geFZhbFtqXTtcclxuXHRcdHZhciBwYSA9IHhQY3Rbai0xXTtcclxuXHRcdHZhciBwYiA9IHhQY3Rbal07XHJcblxyXG5cdFx0cmV0dXJuIHBhICsgKHRvUGVyY2VudGFnZShbdmEsIHZiXSwgdmFsdWUpIC8gc3ViUmFuZ2VSYXRpbyAocGEsIHBiKSk7XHJcblx0fVxyXG5cclxuXHQvLyAodmFsdWUpIElucHV0IGEgcGVyY2VudGFnZSwgZmluZCB3aGVyZSBpdCBpcyBvbiB0aGUgc3BlY2lmaWVkIHJhbmdlLlxyXG5cdGZ1bmN0aW9uIGZyb21TdGVwcGluZyAoIHhWYWwsIHhQY3QsIHZhbHVlICkge1xyXG5cclxuXHRcdC8vIFRoZXJlIGlzIG5vIHJhbmdlIGdyb3VwIHRoYXQgZml0cyAxMDBcclxuXHRcdGlmICggdmFsdWUgPj0gMTAwICl7XHJcblx0XHRcdHJldHVybiB4VmFsLnNsaWNlKC0xKVswXTtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgaiA9IGdldEooIHZhbHVlLCB4UGN0ICk7XHJcblx0XHR2YXIgdmEgPSB4VmFsW2otMV07XHJcblx0XHR2YXIgdmIgPSB4VmFsW2pdO1xyXG5cdFx0dmFyIHBhID0geFBjdFtqLTFdO1xyXG5cdFx0dmFyIHBiID0geFBjdFtqXTtcclxuXHJcblx0XHRyZXR1cm4gaXNQZXJjZW50YWdlKFt2YSwgdmJdLCAodmFsdWUgLSBwYSkgKiBzdWJSYW5nZVJhdGlvIChwYSwgcGIpKTtcclxuXHR9XHJcblxyXG5cdC8vIChwZXJjZW50YWdlKSBHZXQgdGhlIHN0ZXAgdGhhdCBhcHBsaWVzIGF0IGEgY2VydGFpbiB2YWx1ZS5cclxuXHRmdW5jdGlvbiBnZXRTdGVwICggeFBjdCwgeFN0ZXBzLCBzbmFwLCB2YWx1ZSApIHtcclxuXHJcblx0XHRpZiAoIHZhbHVlID09PSAxMDAgKSB7XHJcblx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHJcblx0XHR2YXIgaiA9IGdldEooIHZhbHVlLCB4UGN0ICk7XHJcblx0XHR2YXIgYSA9IHhQY3Rbai0xXTtcclxuXHRcdHZhciBiID0geFBjdFtqXTtcclxuXHJcblx0XHQvLyBJZiAnc25hcCcgaXMgc2V0LCBzdGVwcyBhcmUgdXNlZCBhcyBmaXhlZCBwb2ludHMgb24gdGhlIHNsaWRlci5cclxuXHRcdGlmICggc25hcCApIHtcclxuXHJcblx0XHRcdC8vIEZpbmQgdGhlIGNsb3Nlc3QgcG9zaXRpb24sIGEgb3IgYi5cclxuXHRcdFx0aWYgKCh2YWx1ZSAtIGEpID4gKChiLWEpLzIpKXtcclxuXHRcdFx0XHRyZXR1cm4gYjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0cmV0dXJuIGE7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCAheFN0ZXBzW2otMV0gKXtcclxuXHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB4UGN0W2otMV0gKyBjbG9zZXN0KFxyXG5cdFx0XHR2YWx1ZSAtIHhQY3Rbai0xXSxcclxuXHRcdFx0eFN0ZXBzW2otMV1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHJcbi8vIEVudHJ5IHBhcnNpbmdcclxuXHJcblx0ZnVuY3Rpb24gaGFuZGxlRW50cnlQb2ludCAoIGluZGV4LCB2YWx1ZSwgdGhhdCApIHtcclxuXHJcblx0XHR2YXIgcGVyY2VudGFnZTtcclxuXHJcblx0XHQvLyBXcmFwIG51bWVyaWNhbCBpbnB1dCBpbiBhbiBhcnJheS5cclxuXHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiICkge1xyXG5cdFx0XHR2YWx1ZSA9IFt2YWx1ZV07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gUmVqZWN0IGFueSBpbnZhbGlkIGlucHV0LCBieSB0ZXN0aW5nIHdoZXRoZXIgdmFsdWUgaXMgYW4gYXJyYXkuXHJcblx0XHRpZiAoICFBcnJheS5pc0FycmF5KHZhbHVlKSApe1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub1VpU2xpZGVyIChcIiArIFZFUlNJT04gKyBcIik6ICdyYW5nZScgY29udGFpbnMgaW52YWxpZCB2YWx1ZS5cIik7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ292ZXJ0IG1pbi9tYXggc3ludGF4IHRvIDAgYW5kIDEwMC5cclxuXHRcdGlmICggaW5kZXggPT09ICdtaW4nICkge1xyXG5cdFx0XHRwZXJjZW50YWdlID0gMDtcclxuXHRcdH0gZWxzZSBpZiAoIGluZGV4ID09PSAnbWF4JyApIHtcclxuXHRcdFx0cGVyY2VudGFnZSA9IDEwMDtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHBlcmNlbnRhZ2UgPSBwYXJzZUZsb2F0KCBpbmRleCApO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENoZWNrIGZvciBjb3JyZWN0IGlucHV0LlxyXG5cdFx0aWYgKCAhaXNOdW1lcmljKCBwZXJjZW50YWdlICkgfHwgIWlzTnVtZXJpYyggdmFsdWVbMF0gKSApIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm9VaVNsaWRlciAoXCIgKyBWRVJTSU9OICsgXCIpOiAncmFuZ2UnIHZhbHVlIGlzbid0IG51bWVyaWMuXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFN0b3JlIHZhbHVlcy5cclxuXHRcdHRoYXQueFBjdC5wdXNoKCBwZXJjZW50YWdlICk7XHJcblx0XHR0aGF0LnhWYWwucHVzaCggdmFsdWVbMF0gKTtcclxuXHJcblx0XHQvLyBOYU4gd2lsbCBldmFsdWF0ZSB0byBmYWxzZSB0b28sIGJ1dCB0byBrZWVwXHJcblx0XHQvLyBsb2dnaW5nIGNsZWFyLCBzZXQgc3RlcCBleHBsaWNpdGx5LiBNYWtlIHN1cmVcclxuXHRcdC8vIG5vdCB0byBvdmVycmlkZSB0aGUgJ3N0ZXAnIHNldHRpbmcgd2l0aCBmYWxzZS5cclxuXHRcdGlmICggIXBlcmNlbnRhZ2UgKSB7XHJcblx0XHRcdGlmICggIWlzTmFOKCB2YWx1ZVsxXSApICkge1xyXG5cdFx0XHRcdHRoYXQueFN0ZXBzWzBdID0gdmFsdWVbMV07XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoYXQueFN0ZXBzLnB1c2goIGlzTmFOKHZhbHVlWzFdKSA/IGZhbHNlIDogdmFsdWVbMV0gKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGF0LnhIaWdoZXN0Q29tcGxldGVTdGVwLnB1c2goMCk7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiBoYW5kbGVTdGVwUG9pbnQgKCBpLCBuLCB0aGF0ICkge1xyXG5cclxuXHRcdC8vIElnbm9yZSAnZmFsc2UnIHN0ZXBwaW5nLlxyXG5cdFx0aWYgKCAhbiApIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmFjdG9yIHRvIHJhbmdlIHJhdGlvXHJcblx0XHR0aGF0LnhTdGVwc1tpXSA9IGZyb21QZXJjZW50YWdlKFt0aGF0LnhWYWxbaV0sIHRoYXQueFZhbFtpKzFdXSwgbikgLyBzdWJSYW5nZVJhdGlvKHRoYXQueFBjdFtpXSwgdGhhdC54UGN0W2krMV0pO1xyXG5cclxuXHRcdHZhciB0b3RhbFN0ZXBzID0gKHRoYXQueFZhbFtpKzFdIC0gdGhhdC54VmFsW2ldKSAvIHRoYXQueE51bVN0ZXBzW2ldO1xyXG5cdFx0dmFyIGhpZ2hlc3RTdGVwID0gTWF0aC5jZWlsKE51bWJlcih0b3RhbFN0ZXBzLnRvRml4ZWQoMykpIC0gMSk7XHJcblx0XHR2YXIgc3RlcCA9IHRoYXQueFZhbFtpXSArICh0aGF0LnhOdW1TdGVwc1tpXSAqIGhpZ2hlc3RTdGVwKTtcclxuXHJcblx0XHR0aGF0LnhIaWdoZXN0Q29tcGxldGVTdGVwW2ldID0gc3RlcDtcclxuXHR9XHJcblxyXG5cclxuLy8gSW50ZXJmYWNlXHJcblxyXG5cdGZ1bmN0aW9uIFNwZWN0cnVtICggZW50cnksIHNuYXAsIHNpbmdsZVN0ZXAgKSB7XHJcblxyXG5cdFx0dGhpcy54UGN0ID0gW107XHJcblx0XHR0aGlzLnhWYWwgPSBbXTtcclxuXHRcdHRoaXMueFN0ZXBzID0gWyBzaW5nbGVTdGVwIHx8IGZhbHNlIF07XHJcblx0XHR0aGlzLnhOdW1TdGVwcyA9IFsgZmFsc2UgXTtcclxuXHRcdHRoaXMueEhpZ2hlc3RDb21wbGV0ZVN0ZXAgPSBbXTtcclxuXHJcblx0XHR0aGlzLnNuYXAgPSBzbmFwO1xyXG5cclxuXHRcdHZhciBpbmRleDtcclxuXHRcdHZhciBvcmRlcmVkID0gW107IC8vIFswLCAnbWluJ10sIFsxLCAnNTAlJ10sIFsyLCAnbWF4J11cclxuXHJcblx0XHQvLyBNYXAgdGhlIG9iamVjdCBrZXlzIHRvIGFuIGFycmF5LlxyXG5cdFx0Zm9yICggaW5kZXggaW4gZW50cnkgKSB7XHJcblx0XHRcdGlmICggZW50cnkuaGFzT3duUHJvcGVydHkoaW5kZXgpICkge1xyXG5cdFx0XHRcdG9yZGVyZWQucHVzaChbZW50cnlbaW5kZXhdLCBpbmRleF0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU29ydCBhbGwgZW50cmllcyBieSB2YWx1ZSAobnVtZXJpYyBzb3J0KS5cclxuXHRcdGlmICggb3JkZXJlZC5sZW5ndGggJiYgdHlwZW9mIG9yZGVyZWRbMF1bMF0gPT09IFwib2JqZWN0XCIgKSB7XHJcblx0XHRcdG9yZGVyZWQuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBhWzBdWzBdIC0gYlswXVswXTsgfSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRvcmRlcmVkLnNvcnQoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYVswXSAtIGJbMF07IH0pO1xyXG5cdFx0fVxyXG5cclxuXHJcblx0XHQvLyBDb252ZXJ0IGFsbCBlbnRyaWVzIHRvIHN1YnJhbmdlcy5cclxuXHRcdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBvcmRlcmVkLmxlbmd0aDsgaW5kZXgrKyApIHtcclxuXHRcdFx0aGFuZGxlRW50cnlQb2ludChvcmRlcmVkW2luZGV4XVsxXSwgb3JkZXJlZFtpbmRleF1bMF0sIHRoaXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFN0b3JlIHRoZSBhY3R1YWwgc3RlcCB2YWx1ZXMuXHJcblx0XHQvLyB4U3RlcHMgaXMgc29ydGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHhQY3QgYW5kIHhWYWwuXHJcblx0XHR0aGlzLnhOdW1TdGVwcyA9IHRoaXMueFN0ZXBzLnNsaWNlKDApO1xyXG5cclxuXHRcdC8vIENvbnZlcnQgYWxsIG51bWVyaWMgc3RlcHMgdG8gdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHN1YnJhbmdlIHRoZXkgcmVwcmVzZW50LlxyXG5cdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IHRoaXMueE51bVN0ZXBzLmxlbmd0aDsgaW5kZXgrKyApIHtcclxuXHRcdFx0aGFuZGxlU3RlcFBvaW50KGluZGV4LCB0aGlzLnhOdW1TdGVwc1tpbmRleF0sIHRoaXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0U3BlY3RydW0ucHJvdG90eXBlLmdldE1hcmdpbiA9IGZ1bmN0aW9uICggdmFsdWUgKSB7XHJcblxyXG5cdFx0dmFyIHN0ZXAgPSB0aGlzLnhOdW1TdGVwc1swXTtcclxuXHJcblx0XHRpZiAoIHN0ZXAgJiYgKCh2YWx1ZSAvIHN0ZXApICUgMSkgIT09IDAgKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vVWlTbGlkZXIgKFwiICsgVkVSU0lPTiArIFwiKTogJ2xpbWl0JywgJ21hcmdpbicgYW5kICdwYWRkaW5nJyBtdXN0IGJlIGRpdmlzaWJsZSBieSBzdGVwLlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy54UGN0Lmxlbmd0aCA9PT0gMiA/IGZyb21QZXJjZW50YWdlKHRoaXMueFZhbCwgdmFsdWUpIDogZmFsc2U7XHJcblx0fTtcclxuXHJcblx0U3BlY3RydW0ucHJvdG90eXBlLnRvU3RlcHBpbmcgPSBmdW5jdGlvbiAoIHZhbHVlICkge1xyXG5cclxuXHRcdHZhbHVlID0gdG9TdGVwcGluZyggdGhpcy54VmFsLCB0aGlzLnhQY3QsIHZhbHVlICk7XHJcblxyXG5cdFx0cmV0dXJuIHZhbHVlO1xyXG5cdH07XHJcblxyXG5cdFNwZWN0cnVtLnByb3RvdHlwZS5mcm9tU3RlcHBpbmcgPSBmdW5jdGlvbiAoIHZhbHVlICkge1xyXG5cclxuXHRcdHJldHVybiBmcm9tU3RlcHBpbmcoIHRoaXMueFZhbCwgdGhpcy54UGN0LCB2YWx1ZSApO1xyXG5cdH07XHJcblxyXG5cdFNwZWN0cnVtLnByb3RvdHlwZS5nZXRTdGVwID0gZnVuY3Rpb24gKCB2YWx1ZSApIHtcclxuXHJcblx0XHR2YWx1ZSA9IGdldFN0ZXAodGhpcy54UGN0LCB0aGlzLnhTdGVwcywgdGhpcy5zbmFwLCB2YWx1ZSApO1xyXG5cclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9O1xyXG5cclxuXHRTcGVjdHJ1bS5wcm90b3R5cGUuZ2V0TmVhcmJ5U3RlcHMgPSBmdW5jdGlvbiAoIHZhbHVlICkge1xyXG5cclxuXHRcdHZhciBqID0gZ2V0Sih2YWx1ZSwgdGhpcy54UGN0KTtcclxuXHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRzdGVwQmVmb3JlOiB7IHN0YXJ0VmFsdWU6IHRoaXMueFZhbFtqLTJdLCBzdGVwOiB0aGlzLnhOdW1TdGVwc1tqLTJdLCBoaWdoZXN0U3RlcDogdGhpcy54SGlnaGVzdENvbXBsZXRlU3RlcFtqLTJdIH0sXHJcblx0XHRcdHRoaXNTdGVwOiB7IHN0YXJ0VmFsdWU6IHRoaXMueFZhbFtqLTFdLCBzdGVwOiB0aGlzLnhOdW1TdGVwc1tqLTFdLCBoaWdoZXN0U3RlcDogdGhpcy54SGlnaGVzdENvbXBsZXRlU3RlcFtqLTFdIH0sXHJcblx0XHRcdHN0ZXBBZnRlcjogeyBzdGFydFZhbHVlOiB0aGlzLnhWYWxbai0wXSwgc3RlcDogdGhpcy54TnVtU3RlcHNbai0wXSwgaGlnaGVzdFN0ZXA6IHRoaXMueEhpZ2hlc3RDb21wbGV0ZVN0ZXBbai0wXSB9XHJcblx0XHR9O1xyXG5cdH07XHJcblxyXG5cdFNwZWN0cnVtLnByb3RvdHlwZS5jb3VudFN0ZXBEZWNpbWFscyA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdHZhciBzdGVwRGVjaW1hbHMgPSB0aGlzLnhOdW1TdGVwcy5tYXAoY291bnREZWNpbWFscyk7XHJcblx0XHRyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCwgc3RlcERlY2ltYWxzKTtcclxuXHR9O1xyXG5cclxuXHQvLyBPdXRzaWRlIHRlc3RpbmdcclxuXHRTcGVjdHJ1bS5wcm90b3R5cGUuY29udmVydCA9IGZ1bmN0aW9uICggdmFsdWUgKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5nZXRTdGVwKHRoaXMudG9TdGVwcGluZyh2YWx1ZSkpO1xyXG5cdH07XHJcblxyXG4vKlx0RXZlcnkgaW5wdXQgb3B0aW9uIGlzIHRlc3RlZCBhbmQgcGFyc2VkLiBUaGlzJ2xsIHByZXZlbnRcblx0ZW5kbGVzcyB2YWxpZGF0aW9uIGluIGludGVybmFsIG1ldGhvZHMuIFRoZXNlIHRlc3RzIGFyZVxuXHRzdHJ1Y3R1cmVkIHdpdGggYW4gaXRlbSBmb3IgZXZlcnkgb3B0aW9uIGF2YWlsYWJsZS4gQW5cblx0b3B0aW9uIGNhbiBiZSBtYXJrZWQgYXMgcmVxdWlyZWQgYnkgc2V0dGluZyB0aGUgJ3InIGZsYWcuXG5cdFRoZSB0ZXN0aW5nIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuXHRcdC0gVGhlIHByb3ZpZGVkIHZhbHVlIGZvciB0aGUgb3B0aW9uO1xuXHRcdC0gQSByZWZlcmVuY2UgdG8gdGhlIG9wdGlvbnMgb2JqZWN0O1xuXHRcdC0gVGhlIG5hbWUgZm9yIHRoZSBvcHRpb247XG5cblx0VGhlIHRlc3RpbmcgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIGFuIGVycm9yIGlzIGRldGVjdGVkLFxuXHRvciB0cnVlIHdoZW4gZXZlcnl0aGluZyBpcyBPSy4gSXQgY2FuIGFsc28gbW9kaWZ5IHRoZSBvcHRpb25cblx0b2JqZWN0LCB0byBtYWtlIHN1cmUgYWxsIHZhbHVlcyBjYW4gYmUgY29ycmVjdGx5IGxvb3BlZCBlbHNld2hlcmUuICovXG5cblx0dmFyIGRlZmF1bHRGb3JtYXR0ZXIgPSB7ICd0byc6IGZ1bmN0aW9uKCB2YWx1ZSApe1xuXHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnRvRml4ZWQoMik7XG5cdH0sICdmcm9tJzogTnVtYmVyIH07XG5cblx0ZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQgKCBlbnRyeSApIHtcblxuXHRcdC8vIEFueSBvYmplY3Qgd2l0aCBhIHRvIGFuZCBmcm9tIG1ldGhvZCBpcyBzdXBwb3J0ZWQuXG5cdFx0aWYgKCBpc1ZhbGlkRm9ybWF0dGVyKGVudHJ5KSApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vVWlTbGlkZXIgKFwiICsgVkVSU0lPTiArIFwiKTogJ2Zvcm1hdCcgcmVxdWlyZXMgJ3RvJyBhbmQgJ2Zyb20nIG1ldGhvZHMuXCIpO1xuXHR9XG5cblx0ZnVuY3Rpb24gdGVzdFN0ZXAgKCBwYXJzZWQsIGVudHJ5ICkge1xuXG5cdFx0aWYgKCAhaXNOdW1lcmljKCBlbnRyeSApICkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm9VaVNsaWRlciAoXCIgKyBWRVJTSU9OICsgXCIpOiAnc3RlcCcgaXMgbm90IG51bWVyaWMuXCIpO1xuXHRcdH1cblxuXHRcdC8vIFRoZSBzdGVwIG9wdGlvbiBjYW4gc3RpbGwgYmUgdXNlZCB0byBzZXQgc3RlcHBpbmdcblx0XHQvLyBmb3IgbGluZWFyIHNsaWRlcnMuIE92ZXJ3cml0dGVuIGlmIHNldCBpbiAncmFuZ2UnLlxuXHRcdHBhcnNlZC5zaW5nbGVTdGVwID0gZW50cnk7XG5cdH1cblxuXHRmdW5jdGlvbiB0ZXN0UmFuZ2UgKCBwYXJzZWQsIGVudHJ5ICkge1xuXG5cdFx0Ly8gRmlsdGVyIGluY29ycmVjdCBpbnB1dC5cblx0XHRpZiAoIHR5cGVvZiBlbnRyeSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShlbnRyeSkgKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub1VpU2xpZGVyIChcIiArIFZFUlNJT04gKyBcIik6ICdyYW5nZScgaXMgbm90IGFuIG9iamVjdC5cIik7XG5cdFx0fVxuXG5cdFx0Ly8gQ2F0Y2ggbWlzc2luZyBzdGFydCBvciBlbmQuXG5cdFx0aWYgKCBlbnRyeS5taW4gPT09IHVuZGVmaW5lZCB8fCBlbnRyeS5tYXggPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vVWlTbGlkZXIgKFwiICsgVkVSU0lPTiArIFwiKTogTWlzc2luZyAnbWluJyBvciAnbWF4JyBpbiAncmFuZ2UnLlwiKTtcblx0XHR9XG5cblx0XHQvLyBDYXRjaCBlcXVhbCBzdGFydCBvciBlbmQuXG5cdFx0aWYgKCBlbnRyeS5taW4gPT09IGVudHJ5Lm1heCApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vVWlTbGlkZXIgKFwiICsgVkVSU0lPTiArIFwiKTogJ3JhbmdlJyAnbWluJyBhbmQgJ21heCcgY2Fubm90IGJlIGVxdWFsLlwiKTtcblx0XHR9XG5cblx0XHRwYXJzZWQuc3BlY3RydW0gPSBuZXcgU3BlY3RydW0oZW50cnksIHBhcnNlZC5zbmFwLCBwYXJzZWQuc2luZ2xlU3RlcCk7XG5cdH1cblxuXHRmdW5jdGlvbiB0ZXN0U3RhcnQgKCBwYXJzZWQsIGVudHJ5ICkge1xuXG5cdFx0ZW50cnkgPSBhc0FycmF5KGVudHJ5KTtcblxuXHRcdC8vIFZhbGlkYXRlIGlucHV0LiBWYWx1ZXMgYXJlbid0IHRlc3RlZCwgYXMgdGhlIHB1YmxpYyAudmFsIG1ldGhvZFxuXHRcdC8vIHdpbGwgYWx3YXlzIHByb3ZpZGUgYSB2YWxpZCBsb2NhdGlvbi5cblx0XHRpZiAoICFBcnJheS5pc0FycmF5KCBlbnRyeSApIHx8ICFlbnRyeS5sZW5ndGggKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub1VpU2xpZGVyIChcIiArIFZFUlNJT04gKyBcIik6ICdzdGFydCcgb3B0aW9uIGlzIGluY29ycmVjdC5cIik7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgdGhlIG51bWJlciBvZiBoYW5kbGVzLlxuXHRcdHBhcnNlZC5oYW5kbGVzID0gZW50cnkubGVuZ3RoO1xuXG5cdFx0Ly8gV2hlbiB0aGUgc2xpZGVyIGlzIGluaXRpYWxpemVkLCB0aGUgLnZhbCBtZXRob2Qgd2lsbFxuXHRcdC8vIGJlIGNhbGxlZCB3aXRoIHRoZSBzdGFydCBvcHRpb25zLlxuXHRcdHBhcnNlZC5zdGFydCA9IGVudHJ5O1xuXHR9XG5cblx0ZnVuY3Rpb24gdGVzdFNuYXAgKCBwYXJzZWQsIGVudHJ5ICkge1xuXG5cdFx0Ly8gRW5mb3JjZSAxMDAlIHN0ZXBwaW5nIHdpdGhpbiBzdWJyYW5nZXMuXG5cdFx0cGFyc2VkLnNuYXAgPSBlbnRyeTtcblxuXHRcdGlmICggdHlwZW9mIGVudHJ5ICE9PSAnYm9vbGVhbicgKXtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vVWlTbGlkZXIgKFwiICsgVkVSU0lPTiArIFwiKTogJ3NuYXAnIG9wdGlvbiBtdXN0IGJlIGEgYm9vbGVhbi5cIik7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdGVzdEFuaW1hdGUgKCBwYXJzZWQsIGVudHJ5ICkge1xuXG5cdFx0Ly8gRW5mb3JjZSAxMDAlIHN0ZXBwaW5nIHdpdGhpbiBzdWJyYW5nZXMuXG5cdFx0cGFyc2VkLmFuaW1hdGUgPSBlbnRyeTtcblxuXHRcdGlmICggdHlwZW9mIGVudHJ5ICE9PSAnYm9vbGVhbicgKXtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vVWlTbGlkZXIgKFwiICsgVkVSU0lPTiArIFwiKTogJ2FuaW1hdGUnIG9wdGlvbiBtdXN0IGJlIGEgYm9vbGVhbi5cIik7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdGVzdEFuaW1hdGlvbkR1cmF0aW9uICggcGFyc2VkLCBlbnRyeSApIHtcblxuXHRcdHBhcnNlZC5hbmltYXRpb25EdXJhdGlvbiA9IGVudHJ5O1xuXG5cdFx0aWYgKCB0eXBlb2YgZW50cnkgIT09ICdudW1iZXInICl7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub1VpU2xpZGVyIChcIiArIFZFUlNJT04gKyBcIik6ICdhbmltYXRpb25EdXJhdGlvbicgb3B0aW9uIG11c3QgYmUgYSBudW1iZXIuXCIpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHRlc3RDb25uZWN0ICggcGFyc2VkLCBlbnRyeSApIHtcblxuXHRcdHZhciBjb25uZWN0ID0gW2ZhbHNlXTtcblx0XHR2YXIgaTtcblxuXHRcdC8vIE1hcCBsZWdhY3kgb3B0aW9uc1xuXHRcdGlmICggZW50cnkgPT09ICdsb3dlcicgKSB7XG5cdFx0XHRlbnRyeSA9IFt0cnVlLCBmYWxzZV07XG5cdFx0fVxuXG5cdFx0ZWxzZSBpZiAoIGVudHJ5ID09PSAndXBwZXInICkge1xuXHRcdFx0ZW50cnkgPSBbZmFsc2UsIHRydWVdO1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBib29sZWFuIG9wdGlvbnNcblx0XHRpZiAoIGVudHJ5ID09PSB0cnVlIHx8IGVudHJ5ID09PSBmYWxzZSApIHtcblxuXHRcdFx0Zm9yICggaSA9IDE7IGkgPCBwYXJzZWQuaGFuZGxlczsgaSsrICkge1xuXHRcdFx0XHRjb25uZWN0LnB1c2goZW50cnkpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25uZWN0LnB1c2goZmFsc2UpO1xuXHRcdH1cblxuXHRcdC8vIFJlamVjdCBpbnZhbGlkIGlucHV0XG5cdFx0ZWxzZSBpZiAoICFBcnJheS5pc0FycmF5KCBlbnRyeSApIHx8ICFlbnRyeS5sZW5ndGggfHwgZW50cnkubGVuZ3RoICE9PSBwYXJzZWQuaGFuZGxlcyArIDEgKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub1VpU2xpZGVyIChcIiArIFZFUlNJT04gKyBcIik6ICdjb25uZWN0JyBvcHRpb24gZG9lc24ndCBtYXRjaCBoYW5kbGUgY291bnQuXCIpO1xuXHRcdH1cblxuXHRcdGVsc2Uge1xuXHRcdFx0Y29ubmVjdCA9IGVudHJ5O1xuXHRcdH1cblxuXHRcdHBhcnNlZC5jb25uZWN0ID0gY29ubmVjdDtcblx0fVxuXG5cdGZ1bmN0aW9uIHRlc3RPcmllbnRhdGlvbiAoIHBhcnNlZCwgZW50cnkgKSB7XG5cblx0XHQvLyBTZXQgb3JpZW50YXRpb24gdG8gYW4gYSBudW1lcmljYWwgdmFsdWUgZm9yIGVhc3lcblx0XHQvLyBhcnJheSBzZWxlY3Rpb24uXG5cdFx0c3dpdGNoICggZW50cnkgKXtcblx0XHRcdGNhc2UgJ2hvcml6b250YWwnOlxuXHRcdFx0XHRwYXJzZWQub3J0ID0gMDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd2ZXJ0aWNhbCc6XG5cdFx0XHRcdHBhcnNlZC5vcnQgPSAxO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vVWlTbGlkZXIgKFwiICsgVkVSU0lPTiArIFwiKTogJ29yaWVudGF0aW9uJyBvcHRpb24gaXMgaW52YWxpZC5cIik7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdGVzdE1hcmdpbiAoIHBhcnNlZCwgZW50cnkgKSB7XG5cblx0XHRpZiAoICFpc051bWVyaWMoZW50cnkpICl7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub1VpU2xpZGVyIChcIiArIFZFUlNJT04gKyBcIik6ICdtYXJnaW4nIG9wdGlvbiBtdXN0IGJlIG51bWVyaWMuXCIpO1xuXHRcdH1cblxuXHRcdC8vIElzc3VlICM1ODJcblx0XHRpZiAoIGVudHJ5ID09PSAwICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHBhcnNlZC5tYXJnaW4gPSBwYXJzZWQuc3BlY3RydW0uZ2V0TWFyZ2luKGVudHJ5KTtcblxuXHRcdGlmICggIXBhcnNlZC5tYXJnaW4gKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub1VpU2xpZGVyIChcIiArIFZFUlNJT04gKyBcIik6ICdtYXJnaW4nIG9wdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBvbiBsaW5lYXIgc2xpZGVycy5cIik7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdGVzdExpbWl0ICggcGFyc2VkLCBlbnRyeSApIHtcblxuXHRcdGlmICggIWlzTnVtZXJpYyhlbnRyeSkgKXtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vVWlTbGlkZXIgKFwiICsgVkVSU0lPTiArIFwiKTogJ2xpbWl0JyBvcHRpb24gbXVzdCBiZSBudW1lcmljLlwiKTtcblx0XHR9XG5cblx0XHRwYXJzZWQubGltaXQgPSBwYXJzZWQuc3BlY3RydW0uZ2V0TWFyZ2luKGVudHJ5KTtcblxuXHRcdGlmICggIXBhcnNlZC5saW1pdCB8fCBwYXJzZWQuaGFuZGxlcyA8IDIgKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub1VpU2xpZGVyIChcIiArIFZFUlNJT04gKyBcIik6ICdsaW1pdCcgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIGxpbmVhciBzbGlkZXJzIHdpdGggMiBvciBtb3JlIGhhbmRsZXMuXCIpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHRlc3RQYWRkaW5nICggcGFyc2VkLCBlbnRyeSApIHtcblxuXHRcdGlmICggIWlzTnVtZXJpYyhlbnRyeSkgJiYgIUFycmF5LmlzQXJyYXkoZW50cnkpICl7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub1VpU2xpZGVyIChcIiArIFZFUlNJT04gKyBcIik6ICdwYWRkaW5nJyBvcHRpb24gbXVzdCBiZSBudW1lcmljIG9yIGFycmF5IG9mIGV4YWN0bHkgMiBudW1iZXJzLlwiKTtcblx0XHR9XG5cblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoZW50cnkpICYmICEoZW50cnkubGVuZ3RoID09PSAyIHx8IGlzTnVtZXJpYyhlbnRyeVswXSkgfHwgaXNOdW1lcmljKGVudHJ5WzFdKSkgKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub1VpU2xpZGVyIChcIiArIFZFUlNJT04gKyBcIik6ICdwYWRkaW5nJyBvcHRpb24gbXVzdCBiZSBudW1lcmljIG9yIGFycmF5IG9mIGV4YWN0bHkgMiBudW1iZXJzLlwiKTtcblx0XHR9XG5cblx0XHRpZiAoIGVudHJ5ID09PSAwICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggIUFycmF5LmlzQXJyYXkoZW50cnkpICkge1xuXHRcdFx0ZW50cnkgPSBbZW50cnksIGVudHJ5XTtcblx0XHR9XG5cblx0XHQvLyAnZ2V0TWFyZ2luJyByZXR1cm5zIGZhbHNlIGZvciBpbnZhbGlkIHZhbHVlcy5cblx0XHRwYXJzZWQucGFkZGluZyA9IFtwYXJzZWQuc3BlY3RydW0uZ2V0TWFyZ2luKGVudHJ5WzBdKSwgcGFyc2VkLnNwZWN0cnVtLmdldE1hcmdpbihlbnRyeVsxXSldO1xuXG5cdFx0aWYgKCBwYXJzZWQucGFkZGluZ1swXSA9PT0gZmFsc2UgfHwgcGFyc2VkLnBhZGRpbmdbMV0gPT09IGZhbHNlICkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm9VaVNsaWRlciAoXCIgKyBWRVJTSU9OICsgXCIpOiAncGFkZGluZycgb3B0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIGxpbmVhciBzbGlkZXJzLlwiKTtcblx0XHR9XG5cblx0XHRpZiAoIHBhcnNlZC5wYWRkaW5nWzBdIDwgMCB8fCBwYXJzZWQucGFkZGluZ1sxXSA8IDAgKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub1VpU2xpZGVyIChcIiArIFZFUlNJT04gKyBcIik6ICdwYWRkaW5nJyBvcHRpb24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcihzKS5cIik7XG5cdFx0fVxuXG5cdFx0aWYgKCBwYXJzZWQucGFkZGluZ1swXSArIHBhcnNlZC5wYWRkaW5nWzFdID49IDEwMCApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vVWlTbGlkZXIgKFwiICsgVkVSU0lPTiArIFwiKTogJ3BhZGRpbmcnIG9wdGlvbiBtdXN0IG5vdCBleGNlZWQgMTAwJSBvZiB0aGUgcmFuZ2UuXCIpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHRlc3REaXJlY3Rpb24gKCBwYXJzZWQsIGVudHJ5ICkge1xuXG5cdFx0Ly8gU2V0IGRpcmVjdGlvbiBhcyBhIG51bWVyaWNhbCB2YWx1ZSBmb3IgZWFzeSBwYXJzaW5nLlxuXHRcdC8vIEludmVydCBjb25uZWN0aW9uIGZvciBSVEwgc2xpZGVycywgc28gdGhhdCB0aGUgcHJvcGVyXG5cdFx0Ly8gaGFuZGxlcyBnZXQgdGhlIGNvbm5lY3QvYmFja2dyb3VuZCBjbGFzc2VzLlxuXHRcdHN3aXRjaCAoIGVudHJ5ICkge1xuXHRcdFx0Y2FzZSAnbHRyJzpcblx0XHRcdFx0cGFyc2VkLmRpciA9IDA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAncnRsJzpcblx0XHRcdFx0cGFyc2VkLmRpciA9IDE7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm9VaVNsaWRlciAoXCIgKyBWRVJTSU9OICsgXCIpOiAnZGlyZWN0aW9uJyBvcHRpb24gd2FzIG5vdCByZWNvZ25pemVkLlwiKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiB0ZXN0QmVoYXZpb3VyICggcGFyc2VkLCBlbnRyeSApIHtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGUgaW5wdXQgaXMgYSBzdHJpbmcuXG5cdFx0aWYgKCB0eXBlb2YgZW50cnkgIT09ICdzdHJpbmcnICkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm9VaVNsaWRlciAoXCIgKyBWRVJTSU9OICsgXCIpOiAnYmVoYXZpb3VyJyBtdXN0IGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgb3B0aW9ucy5cIik7XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIHN0cmluZyBjb250YWlucyBhbnkga2V5d29yZHMuXG5cdFx0Ly8gTm9uZSBhcmUgcmVxdWlyZWQuXG5cdFx0dmFyIHRhcCA9IGVudHJ5LmluZGV4T2YoJ3RhcCcpID49IDA7XG5cdFx0dmFyIGRyYWcgPSBlbnRyeS5pbmRleE9mKCdkcmFnJykgPj0gMDtcblx0XHR2YXIgZml4ZWQgPSBlbnRyeS5pbmRleE9mKCdmaXhlZCcpID49IDA7XG5cdFx0dmFyIHNuYXAgPSBlbnRyeS5pbmRleE9mKCdzbmFwJykgPj0gMDtcblx0XHR2YXIgaG92ZXIgPSBlbnRyeS5pbmRleE9mKCdob3ZlcicpID49IDA7XG5cblx0XHRpZiAoIGZpeGVkICkge1xuXG5cdFx0XHRpZiAoIHBhcnNlZC5oYW5kbGVzICE9PSAyICkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub1VpU2xpZGVyIChcIiArIFZFUlNJT04gKyBcIik6ICdmaXhlZCcgYmVoYXZpb3VyIG11c3QgYmUgdXNlZCB3aXRoIDIgaGFuZGxlc1wiKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVXNlIG1hcmdpbiB0byBlbmZvcmNlIGZpeGVkIHN0YXRlXG5cdFx0XHR0ZXN0TWFyZ2luKHBhcnNlZCwgcGFyc2VkLnN0YXJ0WzFdIC0gcGFyc2VkLnN0YXJ0WzBdKTtcblx0XHR9XG5cblx0XHRwYXJzZWQuZXZlbnRzID0ge1xuXHRcdFx0dGFwOiB0YXAgfHwgc25hcCxcblx0XHRcdGRyYWc6IGRyYWcsXG5cdFx0XHRmaXhlZDogZml4ZWQsXG5cdFx0XHRzbmFwOiBzbmFwLFxuXHRcdFx0aG92ZXI6IGhvdmVyXG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIHRlc3RUb29sdGlwcyAoIHBhcnNlZCwgZW50cnkgKSB7XG5cblx0XHRpZiAoIGVudHJ5ID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRlbHNlIGlmICggZW50cnkgPT09IHRydWUgKSB7XG5cblx0XHRcdHBhcnNlZC50b29sdGlwcyA9IFtdO1xuXG5cdFx0XHRmb3IgKCB2YXIgaSA9IDA7IGkgPCBwYXJzZWQuaGFuZGxlczsgaSsrICkge1xuXHRcdFx0XHRwYXJzZWQudG9vbHRpcHMucHVzaCh0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRlbHNlIHtcblxuXHRcdFx0cGFyc2VkLnRvb2x0aXBzID0gYXNBcnJheShlbnRyeSk7XG5cblx0XHRcdGlmICggcGFyc2VkLnRvb2x0aXBzLmxlbmd0aCAhPT0gcGFyc2VkLmhhbmRsZXMgKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vVWlTbGlkZXIgKFwiICsgVkVSU0lPTiArIFwiKTogbXVzdCBwYXNzIGEgZm9ybWF0dGVyIGZvciBhbGwgaGFuZGxlcy5cIik7XG5cdFx0XHR9XG5cblx0XHRcdHBhcnNlZC50b29sdGlwcy5mb3JFYWNoKGZ1bmN0aW9uKGZvcm1hdHRlcil7XG5cdFx0XHRcdGlmICggdHlwZW9mIGZvcm1hdHRlciAhPT0gJ2Jvb2xlYW4nICYmICh0eXBlb2YgZm9ybWF0dGVyICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgZm9ybWF0dGVyLnRvICE9PSAnZnVuY3Rpb24nKSApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub1VpU2xpZGVyIChcIiArIFZFUlNJT04gKyBcIik6ICd0b29sdGlwcycgbXVzdCBiZSBwYXNzZWQgYSBmb3JtYXR0ZXIgb3IgJ2ZhbHNlJy5cIik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIHRlc3RBcmlhRm9ybWF0ICggcGFyc2VkLCBlbnRyeSApIHtcblx0XHRwYXJzZWQuYXJpYUZvcm1hdCA9IGVudHJ5O1xuXHRcdHZhbGlkYXRlRm9ybWF0KGVudHJ5KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHRlc3RGb3JtYXQgKCBwYXJzZWQsIGVudHJ5ICkge1xuXHRcdHBhcnNlZC5mb3JtYXQgPSBlbnRyeTtcblx0XHR2YWxpZGF0ZUZvcm1hdChlbnRyeSk7XG5cdH1cblxuXHRmdW5jdGlvbiB0ZXN0Q3NzUHJlZml4ICggcGFyc2VkLCBlbnRyeSApIHtcblxuXHRcdGlmICggdHlwZW9mIGVudHJ5ICE9PSAnc3RyaW5nJyAmJiBlbnRyeSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub1VpU2xpZGVyIChcIiArIFZFUlNJT04gKyBcIik6ICdjc3NQcmVmaXgnIG11c3QgYmUgYSBzdHJpbmcgb3IgYGZhbHNlYC5cIik7XG5cdFx0fVxuXG5cdFx0cGFyc2VkLmNzc1ByZWZpeCA9IGVudHJ5O1xuXHR9XG5cblx0ZnVuY3Rpb24gdGVzdENzc0NsYXNzZXMgKCBwYXJzZWQsIGVudHJ5ICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZW50cnkgIT09ICdvYmplY3QnICkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm9VaVNsaWRlciAoXCIgKyBWRVJTSU9OICsgXCIpOiAnY3NzQ2xhc3NlcycgbXVzdCBiZSBhbiBvYmplY3QuXCIpO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZW9mIHBhcnNlZC5jc3NQcmVmaXggPT09ICdzdHJpbmcnICkge1xuXHRcdFx0cGFyc2VkLmNzc0NsYXNzZXMgPSB7fTtcblxuXHRcdFx0Zm9yICggdmFyIGtleSBpbiBlbnRyeSApIHtcblx0XHRcdFx0aWYgKCAhZW50cnkuaGFzT3duUHJvcGVydHkoa2V5KSApIHsgY29udGludWU7IH1cblxuXHRcdFx0XHRwYXJzZWQuY3NzQ2xhc3Nlc1trZXldID0gcGFyc2VkLmNzc1ByZWZpeCArIGVudHJ5W2tleV07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBhcnNlZC5jc3NDbGFzc2VzID0gZW50cnk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGVzdCBhbGwgZGV2ZWxvcGVyIHNldHRpbmdzIGFuZCBwYXJzZSB0byBhc3N1bXB0aW9uLXNhZmUgdmFsdWVzLlxuXHRmdW5jdGlvbiB0ZXN0T3B0aW9ucyAoIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBUbyBwcm92ZSBhIGZpeCBmb3IgIzUzNywgZnJlZXplIG9wdGlvbnMgaGVyZS5cblx0XHQvLyBJZiB0aGUgb2JqZWN0IGlzIG1vZGlmaWVkLCBhbiBlcnJvciB3aWxsIGJlIHRocm93bi5cblx0XHQvLyBPYmplY3QuZnJlZXplKG9wdGlvbnMpO1xuXG5cdFx0dmFyIHBhcnNlZCA9IHtcblx0XHRcdG1hcmdpbjogMCxcblx0XHRcdGxpbWl0OiAwLFxuXHRcdFx0cGFkZGluZzogMCxcblx0XHRcdGFuaW1hdGU6IHRydWUsXG5cdFx0XHRhbmltYXRpb25EdXJhdGlvbjogMzAwLFxuXHRcdFx0YXJpYUZvcm1hdDogZGVmYXVsdEZvcm1hdHRlcixcblx0XHRcdGZvcm1hdDogZGVmYXVsdEZvcm1hdHRlclxuXHRcdH07XG5cblx0XHQvLyBUZXN0cyBhcmUgZXhlY3V0ZWQgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIHByZXNlbnRlZCBoZXJlLlxuXHRcdHZhciB0ZXN0cyA9IHtcblx0XHRcdCdzdGVwJzogeyByOiBmYWxzZSwgdDogdGVzdFN0ZXAgfSxcblx0XHRcdCdzdGFydCc6IHsgcjogdHJ1ZSwgdDogdGVzdFN0YXJ0IH0sXG5cdFx0XHQnY29ubmVjdCc6IHsgcjogdHJ1ZSwgdDogdGVzdENvbm5lY3QgfSxcblx0XHRcdCdkaXJlY3Rpb24nOiB7IHI6IHRydWUsIHQ6IHRlc3REaXJlY3Rpb24gfSxcblx0XHRcdCdzbmFwJzogeyByOiBmYWxzZSwgdDogdGVzdFNuYXAgfSxcblx0XHRcdCdhbmltYXRlJzogeyByOiBmYWxzZSwgdDogdGVzdEFuaW1hdGUgfSxcblx0XHRcdCdhbmltYXRpb25EdXJhdGlvbic6IHsgcjogZmFsc2UsIHQ6IHRlc3RBbmltYXRpb25EdXJhdGlvbiB9LFxuXHRcdFx0J3JhbmdlJzogeyByOiB0cnVlLCB0OiB0ZXN0UmFuZ2UgfSxcblx0XHRcdCdvcmllbnRhdGlvbic6IHsgcjogZmFsc2UsIHQ6IHRlc3RPcmllbnRhdGlvbiB9LFxuXHRcdFx0J21hcmdpbic6IHsgcjogZmFsc2UsIHQ6IHRlc3RNYXJnaW4gfSxcblx0XHRcdCdsaW1pdCc6IHsgcjogZmFsc2UsIHQ6IHRlc3RMaW1pdCB9LFxuXHRcdFx0J3BhZGRpbmcnOiB7IHI6IGZhbHNlLCB0OiB0ZXN0UGFkZGluZyB9LFxuXHRcdFx0J2JlaGF2aW91cic6IHsgcjogdHJ1ZSwgdDogdGVzdEJlaGF2aW91ciB9LFxuXHRcdFx0J2FyaWFGb3JtYXQnOiB7IHI6IGZhbHNlLCB0OiB0ZXN0QXJpYUZvcm1hdCB9LFxuXHRcdFx0J2Zvcm1hdCc6IHsgcjogZmFsc2UsIHQ6IHRlc3RGb3JtYXQgfSxcblx0XHRcdCd0b29sdGlwcyc6IHsgcjogZmFsc2UsIHQ6IHRlc3RUb29sdGlwcyB9LFxuXHRcdFx0J2Nzc1ByZWZpeCc6IHsgcjogdHJ1ZSwgdDogdGVzdENzc1ByZWZpeCB9LFxuXHRcdFx0J2Nzc0NsYXNzZXMnOiB7IHI6IHRydWUsIHQ6IHRlc3RDc3NDbGFzc2VzIH1cblx0XHR9O1xuXG5cdFx0dmFyIGRlZmF1bHRzID0ge1xuXHRcdFx0J2Nvbm5lY3QnOiBmYWxzZSxcblx0XHRcdCdkaXJlY3Rpb24nOiAnbHRyJyxcblx0XHRcdCdiZWhhdmlvdXInOiAndGFwJyxcblx0XHRcdCdvcmllbnRhdGlvbic6ICdob3Jpem9udGFsJyxcblx0XHRcdCdjc3NQcmVmaXgnIDogJ25vVWktJyxcblx0XHRcdCdjc3NDbGFzc2VzJzoge1xuXHRcdFx0XHR0YXJnZXQ6ICd0YXJnZXQnLFxuXHRcdFx0XHRiYXNlOiAnYmFzZScsXG5cdFx0XHRcdG9yaWdpbjogJ29yaWdpbicsXG5cdFx0XHRcdGhhbmRsZTogJ2hhbmRsZScsXG5cdFx0XHRcdGhhbmRsZUxvd2VyOiAnaGFuZGxlLWxvd2VyJyxcblx0XHRcdFx0aGFuZGxlVXBwZXI6ICdoYW5kbGUtdXBwZXInLFxuXHRcdFx0XHRob3Jpem9udGFsOiAnaG9yaXpvbnRhbCcsXG5cdFx0XHRcdHZlcnRpY2FsOiAndmVydGljYWwnLFxuXHRcdFx0XHRiYWNrZ3JvdW5kOiAnYmFja2dyb3VuZCcsXG5cdFx0XHRcdGNvbm5lY3Q6ICdjb25uZWN0Jyxcblx0XHRcdFx0Y29ubmVjdHM6ICdjb25uZWN0cycsXG5cdFx0XHRcdGx0cjogJ2x0cicsXG5cdFx0XHRcdHJ0bDogJ3J0bCcsXG5cdFx0XHRcdGRyYWdnYWJsZTogJ2RyYWdnYWJsZScsXG5cdFx0XHRcdGRyYWc6ICdzdGF0ZS1kcmFnJyxcblx0XHRcdFx0dGFwOiAnc3RhdGUtdGFwJyxcblx0XHRcdFx0YWN0aXZlOiAnYWN0aXZlJyxcblx0XHRcdFx0dG9vbHRpcDogJ3Rvb2x0aXAnLFxuXHRcdFx0XHRwaXBzOiAncGlwcycsXG5cdFx0XHRcdHBpcHNIb3Jpem9udGFsOiAncGlwcy1ob3Jpem9udGFsJyxcblx0XHRcdFx0cGlwc1ZlcnRpY2FsOiAncGlwcy12ZXJ0aWNhbCcsXG5cdFx0XHRcdG1hcmtlcjogJ21hcmtlcicsXG5cdFx0XHRcdG1hcmtlckhvcml6b250YWw6ICdtYXJrZXItaG9yaXpvbnRhbCcsXG5cdFx0XHRcdG1hcmtlclZlcnRpY2FsOiAnbWFya2VyLXZlcnRpY2FsJyxcblx0XHRcdFx0bWFya2VyTm9ybWFsOiAnbWFya2VyLW5vcm1hbCcsXG5cdFx0XHRcdG1hcmtlckxhcmdlOiAnbWFya2VyLWxhcmdlJyxcblx0XHRcdFx0bWFya2VyU3ViOiAnbWFya2VyLXN1YicsXG5cdFx0XHRcdHZhbHVlOiAndmFsdWUnLFxuXHRcdFx0XHR2YWx1ZUhvcml6b250YWw6ICd2YWx1ZS1ob3Jpem9udGFsJyxcblx0XHRcdFx0dmFsdWVWZXJ0aWNhbDogJ3ZhbHVlLXZlcnRpY2FsJyxcblx0XHRcdFx0dmFsdWVOb3JtYWw6ICd2YWx1ZS1ub3JtYWwnLFxuXHRcdFx0XHR2YWx1ZUxhcmdlOiAndmFsdWUtbGFyZ2UnLFxuXHRcdFx0XHR2YWx1ZVN1YjogJ3ZhbHVlLXN1Yidcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gQXJpYUZvcm1hdCBkZWZhdWx0cyB0byByZWd1bGFyIGZvcm1hdCwgaWYgYW55LlxuXHRcdGlmICggb3B0aW9ucy5mb3JtYXQgJiYgIW9wdGlvbnMuYXJpYUZvcm1hdCApIHtcblx0XHRcdG9wdGlvbnMuYXJpYUZvcm1hdCA9IG9wdGlvbnMuZm9ybWF0O1xuXHRcdH1cblxuXHRcdC8vIFJ1biBhbGwgb3B0aW9ucyB0aHJvdWdoIGEgdGVzdGluZyBtZWNoYW5pc20gdG8gZW5zdXJlIGNvcnJlY3Rcblx0XHQvLyBpbnB1dC4gSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgb3B0aW9ucyBtaWdodCBnZXQgbW9kaWZpZWQgdG9cblx0XHQvLyBiZSBoYW5kbGVkIHByb3Blcmx5LiBFLmcuIHdyYXBwaW5nIGludGVnZXJzIGluIGFycmF5cy5cblx0XHRPYmplY3Qua2V5cyh0ZXN0cykuZm9yRWFjaChmdW5jdGlvbiggbmFtZSApe1xuXG5cdFx0XHQvLyBJZiB0aGUgb3B0aW9uIGlzbid0IHNldCwgYnV0IGl0IGlzIHJlcXVpcmVkLCB0aHJvdyBhbiBlcnJvci5cblx0XHRcdGlmICggIWlzU2V0KG9wdGlvbnNbbmFtZV0pICYmIGRlZmF1bHRzW25hbWVdID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0aWYgKCB0ZXN0c1tuYW1lXS5yICkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vVWlTbGlkZXIgKFwiICsgVkVSU0lPTiArIFwiKTogJ1wiICsgbmFtZSArIFwiJyBpcyByZXF1aXJlZC5cIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0dGVzdHNbbmFtZV0udCggcGFyc2VkLCAhaXNTZXQob3B0aW9uc1tuYW1lXSkgPyBkZWZhdWx0c1tuYW1lXSA6IG9wdGlvbnNbbmFtZV0gKTtcblx0XHR9KTtcblxuXHRcdC8vIEZvcndhcmQgcGlwcyBvcHRpb25zXG5cdFx0cGFyc2VkLnBpcHMgPSBvcHRpb25zLnBpcHM7XG5cblx0XHQvLyBBbGwgcmVjZW50IGJyb3dzZXJzIGFjY2VwdCB1bnByZWZpeGVkIHRyYW5zZm9ybS5cblx0XHQvLyBXZSBuZWVkIC1tcy0gZm9yIElFOSBhbmQgLXdlYmtpdC0gZm9yIG9sZGVyIEFuZHJvaWQ7XG5cdFx0Ly8gQXNzdW1lIHVzZSBvZiAtd2Via2l0LSBpZiB1bnByZWZpeGVkIGFuZCAtbXMtIGFyZSBub3Qgc3VwcG9ydGVkLlxuXHRcdC8vIGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9dHJhbnNmb3JtczJkXG5cdFx0dmFyIGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdHZhciBtc1ByZWZpeCA9IGQuc3R5bGUubXNUcmFuc2Zvcm0gIT09IHVuZGVmaW5lZDtcblx0XHR2YXIgbm9QcmVmaXggPSBkLnN0eWxlLnRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkO1xuXG5cdFx0cGFyc2VkLnRyYW5zZm9ybVJ1bGUgPSBub1ByZWZpeCA/ICd0cmFuc2Zvcm0nIDogKG1zUHJlZml4ID8gJ21zVHJhbnNmb3JtJyA6ICd3ZWJraXRUcmFuc2Zvcm0nKTtcblxuXHRcdC8vIFBpcHMgZG9uJ3QgbW92ZSwgc28gd2UgY2FuIHBsYWNlIHRoZW0gdXNpbmcgbGVmdC90b3AuXG5cdFx0dmFyIHN0eWxlcyA9IFtbJ2xlZnQnLCAndG9wJ10sIFsncmlnaHQnLCAnYm90dG9tJ11dO1xuXG5cdFx0cGFyc2VkLnN0eWxlID0gc3R5bGVzW3BhcnNlZC5kaXJdW3BhcnNlZC5vcnRdO1xuXG5cdFx0cmV0dXJuIHBhcnNlZDtcblx0fVxuXHJcblxyXG5mdW5jdGlvbiBzY29wZSAoIHRhcmdldCwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zICl7XHJcblxyXG5cdHZhciBhY3Rpb25zID0gZ2V0QWN0aW9ucygpO1xyXG5cdHZhciBzdXBwb3J0c1RvdWNoQWN0aW9uTm9uZSA9IGdldFN1cHBvcnRzVG91Y2hBY3Rpb25Ob25lKCk7XHJcblx0dmFyIHN1cHBvcnRzUGFzc2l2ZSA9IHN1cHBvcnRzVG91Y2hBY3Rpb25Ob25lICYmIGdldFN1cHBvcnRzUGFzc2l2ZSgpO1xyXG5cclxuXHQvLyBBbGwgdmFyaWFibGVzIGxvY2FsIHRvICdzY29wZScgYXJlIHByZWZpeGVkIHdpdGggJ3Njb3BlXydcclxuXHR2YXIgc2NvcGVfVGFyZ2V0ID0gdGFyZ2V0O1xyXG5cdHZhciBzY29wZV9Mb2NhdGlvbnMgPSBbXTtcclxuXHR2YXIgc2NvcGVfQmFzZTtcclxuXHR2YXIgc2NvcGVfSGFuZGxlcztcclxuXHR2YXIgc2NvcGVfSGFuZGxlTnVtYmVycyA9IFtdO1xyXG5cdHZhciBzY29wZV9BY3RpdmVIYW5kbGVzQ291bnQgPSAwO1xyXG5cdHZhciBzY29wZV9Db25uZWN0cztcclxuXHR2YXIgc2NvcGVfU3BlY3RydW0gPSBvcHRpb25zLnNwZWN0cnVtO1xyXG5cdHZhciBzY29wZV9WYWx1ZXMgPSBbXTtcclxuXHR2YXIgc2NvcGVfRXZlbnRzID0ge307XHJcblx0dmFyIHNjb3BlX1NlbGY7XHJcblx0dmFyIHNjb3BlX1BpcHM7XHJcblx0dmFyIHNjb3BlX0RvY3VtZW50ID0gdGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XHJcblx0dmFyIHNjb3BlX0RvY3VtZW50RWxlbWVudCA9IHNjb3BlX0RvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuXHR2YXIgc2NvcGVfQm9keSA9IHNjb3BlX0RvY3VtZW50LmJvZHk7XHJcblxyXG5cclxuXHQvLyBGb3IgaG9yaXpvbnRhbCBzbGlkZXJzIGluIHN0YW5kYXJkIGx0ciBkb2N1bWVudHMsXHJcblx0Ly8gbWFrZSAubm9VaS1vcmlnaW4gb3ZlcmZsb3cgdG8gdGhlIGxlZnQgc28gdGhlIGRvY3VtZW50IGRvZXNuJ3Qgc2Nyb2xsLlxyXG5cdHZhciBzY29wZV9EaXJPZmZzZXQgPSAoc2NvcGVfRG9jdW1lbnQuZGlyID09PSAncnRsJykgfHwgKG9wdGlvbnMub3J0ID09PSAxKSA/IDAgOiAxMDA7XHJcblxyXG4vKiEgSW4gdGhpcyBmaWxlOiBDb25zdHJ1Y3Rpb24gb2YgRE9NIGVsZW1lbnRzOyAqL1xyXG5cclxuXHQvLyBDcmVhdGVzIGEgbm9kZSwgYWRkcyBpdCB0byB0YXJnZXQsIHJldHVybnMgdGhlIG5ldyBub2RlLlxyXG5cdGZ1bmN0aW9uIGFkZE5vZGVUbyAoIGFkZFRhcmdldCwgY2xhc3NOYW1lICkge1xyXG5cclxuXHRcdHZhciBkaXYgPSBzY29wZV9Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHJcblx0XHRpZiAoIGNsYXNzTmFtZSApIHtcclxuXHRcdFx0YWRkQ2xhc3MoZGl2LCBjbGFzc05hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGFkZFRhcmdldC5hcHBlbmRDaGlsZChkaXYpO1xyXG5cclxuXHRcdHJldHVybiBkaXY7XHJcblx0fVxyXG5cclxuXHQvLyBBcHBlbmQgYSBvcmlnaW4gdG8gdGhlIGJhc2VcclxuXHRmdW5jdGlvbiBhZGRPcmlnaW4gKCBiYXNlLCBoYW5kbGVOdW1iZXIgKSB7XHJcblxyXG5cdFx0dmFyIG9yaWdpbiA9IGFkZE5vZGVUbyhiYXNlLCBvcHRpb25zLmNzc0NsYXNzZXMub3JpZ2luKTtcclxuXHRcdHZhciBoYW5kbGUgPSBhZGROb2RlVG8ob3JpZ2luLCBvcHRpb25zLmNzc0NsYXNzZXMuaGFuZGxlKTtcclxuXHJcblx0XHRoYW5kbGUuc2V0QXR0cmlidXRlKCdkYXRhLWhhbmRsZScsIGhhbmRsZU51bWJlcik7XHJcblxyXG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy90YWJpbmRleFxyXG5cdFx0Ly8gMCA9IGZvY3VzYWJsZSBhbmQgcmVhY2hhYmxlXHJcblx0XHRoYW5kbGUuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XHJcblx0XHRoYW5kbGUuc2V0QXR0cmlidXRlKCdyb2xlJywgJ3NsaWRlcicpO1xyXG5cdFx0aGFuZGxlLnNldEF0dHJpYnV0ZSgnYXJpYS1vcmllbnRhdGlvbicsIG9wdGlvbnMub3J0ID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJyk7XHJcblxyXG5cdFx0aWYgKCBoYW5kbGVOdW1iZXIgPT09IDAgKSB7XHJcblx0XHRcdGFkZENsYXNzKGhhbmRsZSwgb3B0aW9ucy5jc3NDbGFzc2VzLmhhbmRsZUxvd2VyKTtcclxuXHRcdH1cclxuXHJcblx0XHRlbHNlIGlmICggaGFuZGxlTnVtYmVyID09PSBvcHRpb25zLmhhbmRsZXMgLSAxICkge1xyXG5cdFx0XHRhZGRDbGFzcyhoYW5kbGUsIG9wdGlvbnMuY3NzQ2xhc3Nlcy5oYW5kbGVVcHBlcik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIG9yaWdpbjtcclxuXHR9XHJcblxyXG5cdC8vIEluc2VydCBub2RlcyBmb3IgY29ubmVjdCBlbGVtZW50c1xyXG5cdGZ1bmN0aW9uIGFkZENvbm5lY3QgKCBiYXNlLCBhZGQgKSB7XHJcblxyXG5cdFx0aWYgKCAhYWRkICkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGFkZE5vZGVUbyhiYXNlLCBvcHRpb25zLmNzc0NsYXNzZXMuY29ubmVjdCk7XHJcblx0fVxyXG5cclxuXHQvLyBBZGQgaGFuZGxlcyB0byB0aGUgc2xpZGVyIGJhc2UuXHJcblx0ZnVuY3Rpb24gYWRkRWxlbWVudHMgKCBjb25uZWN0T3B0aW9ucywgYmFzZSApIHtcclxuXHJcblx0XHR2YXIgY29ubmVjdEJhc2UgPSBhZGROb2RlVG8oYmFzZSwgb3B0aW9ucy5jc3NDbGFzc2VzLmNvbm5lY3RzKTtcclxuXHJcblx0XHRzY29wZV9IYW5kbGVzID0gW107XHJcblx0XHRzY29wZV9Db25uZWN0cyA9IFtdO1xyXG5cclxuXHRcdHNjb3BlX0Nvbm5lY3RzLnB1c2goYWRkQ29ubmVjdChjb25uZWN0QmFzZSwgY29ubmVjdE9wdGlvbnNbMF0pKTtcclxuXHJcblx0XHQvLyBbOjo6Ok89PT09Tz09PT1PPT09PV1cclxuXHRcdC8vIGNvbm5lY3RPcHRpb25zID0gWzAsIDEsIDEsIDFdXHJcblxyXG5cdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgb3B0aW9ucy5oYW5kbGVzOyBpKysgKSB7XHJcblx0XHRcdC8vIEtlZXAgYSBsaXN0IG9mIGFsbCBhZGRlZCBoYW5kbGVzLlxyXG5cdFx0XHRzY29wZV9IYW5kbGVzLnB1c2goYWRkT3JpZ2luKGJhc2UsIGkpKTtcclxuXHRcdFx0c2NvcGVfSGFuZGxlTnVtYmVyc1tpXSA9IGk7XHJcblx0XHRcdHNjb3BlX0Nvbm5lY3RzLnB1c2goYWRkQ29ubmVjdChjb25uZWN0QmFzZSwgY29ubmVjdE9wdGlvbnNbaSArIDFdKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBJbml0aWFsaXplIGEgc2luZ2xlIHNsaWRlci5cclxuXHRmdW5jdGlvbiBhZGRTbGlkZXIgKCBhZGRUYXJnZXQgKSB7XHJcblxyXG5cdFx0Ly8gQXBwbHkgY2xhc3NlcyBhbmQgZGF0YSB0byB0aGUgdGFyZ2V0LlxyXG5cdFx0YWRkQ2xhc3MoYWRkVGFyZ2V0LCBvcHRpb25zLmNzc0NsYXNzZXMudGFyZ2V0KTtcclxuXHJcblx0XHRpZiAoIG9wdGlvbnMuZGlyID09PSAwICkge1xyXG5cdFx0XHRhZGRDbGFzcyhhZGRUYXJnZXQsIG9wdGlvbnMuY3NzQ2xhc3Nlcy5sdHIpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0YWRkQ2xhc3MoYWRkVGFyZ2V0LCBvcHRpb25zLmNzc0NsYXNzZXMucnRsKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIG9wdGlvbnMub3J0ID09PSAwICkge1xyXG5cdFx0XHRhZGRDbGFzcyhhZGRUYXJnZXQsIG9wdGlvbnMuY3NzQ2xhc3Nlcy5ob3Jpem9udGFsKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGFkZENsYXNzKGFkZFRhcmdldCwgb3B0aW9ucy5jc3NDbGFzc2VzLnZlcnRpY2FsKTtcclxuXHRcdH1cclxuXHJcblx0XHRzY29wZV9CYXNlID0gYWRkTm9kZVRvKGFkZFRhcmdldCwgb3B0aW9ucy5jc3NDbGFzc2VzLmJhc2UpO1xyXG5cdH1cclxuXHJcblxyXG5cdGZ1bmN0aW9uIGFkZFRvb2x0aXAgKCBoYW5kbGUsIGhhbmRsZU51bWJlciApIHtcclxuXHJcblx0XHRpZiAoICFvcHRpb25zLnRvb2x0aXBzW2hhbmRsZU51bWJlcl0gKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gYWRkTm9kZVRvKGhhbmRsZS5maXJzdENoaWxkLCBvcHRpb25zLmNzc0NsYXNzZXMudG9vbHRpcCk7XHJcblx0fVxyXG5cclxuXHQvLyBUaGUgdG9vbHRpcHMgb3B0aW9uIGlzIGEgc2hvcnRoYW5kIGZvciB1c2luZyB0aGUgJ3VwZGF0ZScgZXZlbnQuXHJcblx0ZnVuY3Rpb24gdG9vbHRpcHMgKCApIHtcclxuXHJcblx0XHQvLyBUb29sdGlwcyBhcmUgYWRkZWQgd2l0aCBvcHRpb25zLnRvb2x0aXBzIGluIG9yaWdpbmFsIG9yZGVyLlxyXG5cdFx0dmFyIHRpcHMgPSBzY29wZV9IYW5kbGVzLm1hcChhZGRUb29sdGlwKTtcclxuXHJcblx0XHRiaW5kRXZlbnQoJ3VwZGF0ZScsIGZ1bmN0aW9uKHZhbHVlcywgaGFuZGxlTnVtYmVyLCB1bmVuY29kZWQpIHtcclxuXHJcblx0XHRcdGlmICggIXRpcHNbaGFuZGxlTnVtYmVyXSApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBmb3JtYXR0ZWRWYWx1ZSA9IHZhbHVlc1toYW5kbGVOdW1iZXJdO1xyXG5cclxuXHRcdFx0aWYgKCBvcHRpb25zLnRvb2x0aXBzW2hhbmRsZU51bWJlcl0gIT09IHRydWUgKSB7XHJcblx0XHRcdFx0Zm9ybWF0dGVkVmFsdWUgPSBvcHRpb25zLnRvb2x0aXBzW2hhbmRsZU51bWJlcl0udG8odW5lbmNvZGVkW2hhbmRsZU51bWJlcl0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aXBzW2hhbmRsZU51bWJlcl0uaW5uZXJIVE1MID0gZm9ybWF0dGVkVmFsdWU7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHRmdW5jdGlvbiBhcmlhICggKSB7XHJcblxyXG5cdFx0YmluZEV2ZW50KCd1cGRhdGUnLCBmdW5jdGlvbiAoIHZhbHVlcywgaGFuZGxlTnVtYmVyLCB1bmVuY29kZWQsIHRhcCwgcG9zaXRpb25zICkge1xyXG5cclxuXHRcdFx0Ly8gVXBkYXRlIEFyaWEgVmFsdWVzIGZvciBhbGwgaGFuZGxlcywgYXMgYSBjaGFuZ2UgaW4gb25lIGNoYW5nZXMgbWluIGFuZCBtYXggdmFsdWVzIGZvciB0aGUgbmV4dC5cclxuXHRcdFx0c2NvcGVfSGFuZGxlTnVtYmVycy5mb3JFYWNoKGZ1bmN0aW9uKCBpbmRleCApe1xyXG5cclxuXHRcdFx0XHR2YXIgaGFuZGxlID0gc2NvcGVfSGFuZGxlc1tpbmRleF07XHJcblxyXG5cdFx0XHRcdHZhciBtaW4gPSBjaGVja0hhbmRsZVBvc2l0aW9uKHNjb3BlX0xvY2F0aW9ucywgaW5kZXgsIDAsIHRydWUsIHRydWUsIHRydWUpO1xyXG5cdFx0XHRcdHZhciBtYXggPSBjaGVja0hhbmRsZVBvc2l0aW9uKHNjb3BlX0xvY2F0aW9ucywgaW5kZXgsIDEwMCwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG5cdFx0XHRcdHZhciBub3cgPSBwb3NpdGlvbnNbaW5kZXhdO1xyXG5cdFx0XHRcdHZhciB0ZXh0ID0gb3B0aW9ucy5hcmlhRm9ybWF0LnRvKHVuZW5jb2RlZFtpbmRleF0pO1xyXG5cclxuXHRcdFx0XHRoYW5kbGUuY2hpbGRyZW5bMF0uc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbWluJywgbWluLnRvRml4ZWQoMSkpO1xyXG5cdFx0XHRcdGhhbmRsZS5jaGlsZHJlblswXS5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVtYXgnLCBtYXgudG9GaXhlZCgxKSk7XHJcblx0XHRcdFx0aGFuZGxlLmNoaWxkcmVuWzBdLnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW5vdycsIG5vdy50b0ZpeGVkKDEpKTtcclxuXHRcdFx0XHRoYW5kbGUuY2hpbGRyZW5bMF0uc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVldGV4dCcsIHRleHQpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblxyXG5cdGZ1bmN0aW9uIGdldEdyb3VwICggbW9kZSwgdmFsdWVzLCBzdGVwcGVkICkge1xyXG5cclxuXHRcdC8vIFVzZSB0aGUgcmFuZ2UuXHJcblx0XHRpZiAoIG1vZGUgPT09ICdyYW5nZScgfHwgbW9kZSA9PT0gJ3N0ZXBzJyApIHtcclxuXHRcdFx0cmV0dXJuIHNjb3BlX1NwZWN0cnVtLnhWYWw7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBtb2RlID09PSAnY291bnQnICkge1xyXG5cclxuXHRcdFx0aWYgKCB2YWx1ZXMgPCAyICkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vVWlTbGlkZXIgKFwiICsgVkVSU0lPTiArIFwiKTogJ3ZhbHVlcycgKD49IDIpIHJlcXVpcmVkIGZvciBtb2RlICdjb3VudCcuXCIpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBEaXZpZGUgMCAtIDEwMCBpbiAnY291bnQnIHBhcnRzLlxyXG5cdFx0XHR2YXIgaW50ZXJ2YWwgPSB2YWx1ZXMgLSAxO1xyXG5cdFx0XHR2YXIgc3ByZWFkID0gKCAxMDAgLyBpbnRlcnZhbCApO1xyXG5cclxuXHRcdFx0dmFsdWVzID0gW107XHJcblxyXG5cdFx0XHQvLyBMaXN0IHRoZXNlIHBhcnRzIGFuZCBoYXZlIHRoZW0gaGFuZGxlZCBhcyAncG9zaXRpb25zJy5cclxuXHRcdFx0d2hpbGUgKCBpbnRlcnZhbC0tICkge1xyXG5cdFx0XHRcdHZhbHVlc1sgaW50ZXJ2YWwgXSA9ICggaW50ZXJ2YWwgKiBzcHJlYWQgKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFsdWVzLnB1c2goMTAwKTtcclxuXHJcblx0XHRcdG1vZGUgPSAncG9zaXRpb25zJztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIG1vZGUgPT09ICdwb3NpdGlvbnMnICkge1xyXG5cclxuXHRcdFx0Ly8gTWFwIGFsbCBwZXJjZW50YWdlcyB0byBvbi1yYW5nZSB2YWx1ZXMuXHJcblx0XHRcdHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKCB2YWx1ZSApe1xyXG5cdFx0XHRcdHJldHVybiBzY29wZV9TcGVjdHJ1bS5mcm9tU3RlcHBpbmcoIHN0ZXBwZWQgPyBzY29wZV9TcGVjdHJ1bS5nZXRTdGVwKCB2YWx1ZSApIDogdmFsdWUgKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCBtb2RlID09PSAndmFsdWVzJyApIHtcclxuXHJcblx0XHRcdC8vIElmIHRoZSB2YWx1ZSBtdXN0IGJlIHN0ZXBwZWQsIGl0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIHBlcmNlbnRhZ2UgZmlyc3QuXHJcblx0XHRcdGlmICggc3RlcHBlZCApIHtcclxuXHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24oIHZhbHVlICl7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQ29udmVydCB0byBwZXJjZW50YWdlLCBhcHBseSBzdGVwLCByZXR1cm4gdG8gdmFsdWUuXHJcblx0XHRcdFx0XHRyZXR1cm4gc2NvcGVfU3BlY3RydW0uZnJvbVN0ZXBwaW5nKCBzY29wZV9TcGVjdHJ1bS5nZXRTdGVwKCBzY29wZV9TcGVjdHJ1bS50b1N0ZXBwaW5nKCB2YWx1ZSApICkgKTtcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE90aGVyd2lzZSwgd2UgY2FuIHNpbXBseSB1c2UgdGhlIHZhbHVlcy5cclxuXHRcdFx0cmV0dXJuIHZhbHVlcztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGdlbmVyYXRlU3ByZWFkICggZGVuc2l0eSwgbW9kZSwgZ3JvdXAgKSB7XHJcblxyXG5cdFx0ZnVuY3Rpb24gc2FmZUluY3JlbWVudCh2YWx1ZSwgaW5jcmVtZW50KSB7XHJcblx0XHRcdC8vIEF2b2lkIGZsb2F0aW5nIHBvaW50IHZhcmlhbmNlIGJ5IGRyb3BwaW5nIHRoZSBzbWFsbGVzdCBkZWNpbWFsIHBsYWNlcy5cclxuXHRcdFx0cmV0dXJuICh2YWx1ZSArIGluY3JlbWVudCkudG9GaXhlZCg3KSAvIDE7XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIGluZGV4ZXMgPSB7fTtcclxuXHRcdHZhciBmaXJzdEluUmFuZ2UgPSBzY29wZV9TcGVjdHJ1bS54VmFsWzBdO1xyXG5cdFx0dmFyIGxhc3RJblJhbmdlID0gc2NvcGVfU3BlY3RydW0ueFZhbFtzY29wZV9TcGVjdHJ1bS54VmFsLmxlbmd0aC0xXTtcclxuXHRcdHZhciBpZ25vcmVGaXJzdCA9IGZhbHNlO1xyXG5cdFx0dmFyIGlnbm9yZUxhc3QgPSBmYWxzZTtcclxuXHRcdHZhciBwcmV2UGN0ID0gMDtcclxuXHJcblx0XHQvLyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBncm91cCwgc29ydCBpdCBhbmQgZmlsdGVyIGF3YXkgYWxsIGR1cGxpY2F0ZXMuXHJcblx0XHRncm91cCA9IHVuaXF1ZShncm91cC5zbGljZSgpLnNvcnQoZnVuY3Rpb24oYSwgYil7IHJldHVybiBhIC0gYjsgfSkpO1xyXG5cclxuXHRcdC8vIE1ha2Ugc3VyZSB0aGUgcmFuZ2Ugc3RhcnRzIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQuXHJcblx0XHRpZiAoIGdyb3VwWzBdICE9PSBmaXJzdEluUmFuZ2UgKSB7XHJcblx0XHRcdGdyb3VwLnVuc2hpZnQoZmlyc3RJblJhbmdlKTtcclxuXHRcdFx0aWdub3JlRmlyc3QgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIExpa2V3aXNlIGZvciB0aGUgbGFzdCBvbmUuXHJcblx0XHRpZiAoIGdyb3VwW2dyb3VwLmxlbmd0aCAtIDFdICE9PSBsYXN0SW5SYW5nZSApIHtcclxuXHRcdFx0Z3JvdXAucHVzaChsYXN0SW5SYW5nZSk7XHJcblx0XHRcdGlnbm9yZUxhc3QgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGdyb3VwLmZvckVhY2goZnVuY3Rpb24gKCBjdXJyZW50LCBpbmRleCApIHtcclxuXHJcblx0XHRcdC8vIEdldCB0aGUgY3VycmVudCBzdGVwIGFuZCB0aGUgbG93ZXIgKyB1cHBlciBwb3NpdGlvbnMuXHJcblx0XHRcdHZhciBzdGVwO1xyXG5cdFx0XHR2YXIgaTtcclxuXHRcdFx0dmFyIHE7XHJcblx0XHRcdHZhciBsb3cgPSBjdXJyZW50O1xyXG5cdFx0XHR2YXIgaGlnaCA9IGdyb3VwW2luZGV4KzFdO1xyXG5cdFx0XHR2YXIgbmV3UGN0O1xyXG5cdFx0XHR2YXIgcGN0RGlmZmVyZW5jZTtcclxuXHRcdFx0dmFyIHBjdFBvcztcclxuXHRcdFx0dmFyIHR5cGU7XHJcblx0XHRcdHZhciBzdGVwcztcclxuXHRcdFx0dmFyIHJlYWxTdGVwcztcclxuXHRcdFx0dmFyIHN0ZXBzaXplO1xyXG5cclxuXHRcdFx0Ly8gV2hlbiB1c2luZyAnc3RlcHMnIG1vZGUsIHVzZSB0aGUgcHJvdmlkZWQgc3RlcHMuXHJcblx0XHRcdC8vIE90aGVyd2lzZSwgd2UnbGwgc3RlcCBvbiB0byB0aGUgbmV4dCBzdWJyYW5nZS5cclxuXHRcdFx0aWYgKCBtb2RlID09PSAnc3RlcHMnICkge1xyXG5cdFx0XHRcdHN0ZXAgPSBzY29wZV9TcGVjdHJ1bS54TnVtU3RlcHNbIGluZGV4IF07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIERlZmF1bHQgdG8gYSAnZnVsbCcgc3RlcC5cclxuXHRcdFx0aWYgKCAhc3RlcCApIHtcclxuXHRcdFx0XHRzdGVwID0gaGlnaC1sb3c7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIExvdyBjYW4gYmUgMCwgc28gdGVzdCBmb3IgZmFsc2UuIElmIGhpZ2ggaXMgdW5kZWZpbmVkLFxyXG5cdFx0XHQvLyB3ZSBhcmUgYXQgdGhlIGxhc3Qgc3VicmFuZ2UuIEluZGV4IDAgaXMgYWxyZWFkeSBoYW5kbGVkLlxyXG5cdFx0XHRpZiAoIGxvdyA9PT0gZmFsc2UgfHwgaGlnaCA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTWFrZSBzdXJlIHN0ZXAgaXNuJ3QgMCwgd2hpY2ggd291bGQgY2F1c2UgYW4gaW5maW5pdGUgbG9vcCAoIzY1NClcclxuXHRcdFx0c3RlcCA9IE1hdGgubWF4KHN0ZXAsIDAuMDAwMDAwMSk7XHJcblxyXG5cdFx0XHQvLyBGaW5kIGFsbCBzdGVwcyBpbiB0aGUgc3VicmFuZ2UuXHJcblx0XHRcdGZvciAoIGkgPSBsb3c7IGkgPD0gaGlnaDsgaSA9IHNhZmVJbmNyZW1lbnQoaSwgc3RlcCkgKSB7XHJcblxyXG5cdFx0XHRcdC8vIEdldCB0aGUgcGVyY2VudGFnZSB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgc3RlcCxcclxuXHRcdFx0XHQvLyBjYWxjdWxhdGUgdGhlIHNpemUgZm9yIHRoZSBzdWJyYW5nZS5cclxuXHRcdFx0XHRuZXdQY3QgPSBzY29wZV9TcGVjdHJ1bS50b1N0ZXBwaW5nKCBpICk7XHJcblx0XHRcdFx0cGN0RGlmZmVyZW5jZSA9IG5ld1BjdCAtIHByZXZQY3Q7XHJcblxyXG5cdFx0XHRcdHN0ZXBzID0gcGN0RGlmZmVyZW5jZSAvIGRlbnNpdHk7XHJcblx0XHRcdFx0cmVhbFN0ZXBzID0gTWF0aC5yb3VuZChzdGVwcyk7XHJcblxyXG5cdFx0XHRcdC8vIFRoaXMgcmF0aW8gcmVwcmVzZW50cyB0aGUgYW1vdW50IG9mIHBlcmNlbnRhZ2Utc3BhY2UgYSBwb2ludCBpbmRpY2F0ZXMuXHJcblx0XHRcdFx0Ly8gRm9yIGEgZGVuc2l0eSAxIHRoZSBwb2ludHMvcGVyY2VudGFnZSA9IDEuIEZvciBkZW5zaXR5IDIsIHRoYXQgcGVyY2VudGFnZSBuZWVkcyB0byBiZSByZS1kZXZpZGVkLlxyXG5cdFx0XHRcdC8vIFJvdW5kIHRoZSBwZXJjZW50YWdlIG9mZnNldCB0byBhbiBldmVuIG51bWJlciwgdGhlbiBkaXZpZGUgYnkgdHdvXHJcblx0XHRcdFx0Ly8gdG8gc3ByZWFkIHRoZSBvZmZzZXQgb24gYm90aCBzaWRlcyBvZiB0aGUgcmFuZ2UuXHJcblx0XHRcdFx0c3RlcHNpemUgPSBwY3REaWZmZXJlbmNlL3JlYWxTdGVwcztcclxuXHJcblx0XHRcdFx0Ly8gRGl2aWRlIGFsbCBwb2ludHMgZXZlbmx5LCBhZGRpbmcgdGhlIGNvcnJlY3QgbnVtYmVyIHRvIHRoaXMgc3VicmFuZ2UuXHJcblx0XHRcdFx0Ly8gUnVuIHVwIHRvIDw9IHNvIHRoYXQgMTAwJSBnZXRzIGEgcG9pbnQsIGV2ZW50IGlmIGlnbm9yZUxhc3QgaXMgc2V0LlxyXG5cdFx0XHRcdGZvciAoIHEgPSAxOyBxIDw9IHJlYWxTdGVwczsgcSArPSAxICkge1xyXG5cclxuXHRcdFx0XHRcdC8vIFRoZSByYXRpbyBiZXR3ZWVuIHRoZSByb3VuZGVkIHZhbHVlIGFuZCB0aGUgYWN0dWFsIHNpemUgbWlnaHQgYmUgfjElIG9mZi5cclxuXHRcdFx0XHRcdC8vIENvcnJlY3QgdGhlIHBlcmNlbnRhZ2Ugb2Zmc2V0IGJ5IHRoZSBudW1iZXIgb2YgcG9pbnRzXHJcblx0XHRcdFx0XHQvLyBwZXIgc3VicmFuZ2UuIGRlbnNpdHkgPSAxIHdpbGwgcmVzdWx0IGluIDEwMCBwb2ludHMgb24gdGhlXHJcblx0XHRcdFx0XHQvLyBmdWxsIHJhbmdlLCAyIGZvciA1MCwgNCBmb3IgMjUsIGV0Yy5cclxuXHRcdFx0XHRcdHBjdFBvcyA9IHByZXZQY3QgKyAoIHEgKiBzdGVwc2l6ZSApO1xyXG5cdFx0XHRcdFx0aW5kZXhlc1twY3RQb3MudG9GaXhlZCg1KV0gPSBbJ3gnLCAwXTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIERldGVybWluZSB0aGUgcG9pbnQgdHlwZS5cclxuXHRcdFx0XHR0eXBlID0gKGdyb3VwLmluZGV4T2YoaSkgPiAtMSkgPyAxIDogKCBtb2RlID09PSAnc3RlcHMnID8gMiA6IDAgKTtcclxuXHJcblx0XHRcdFx0Ly8gRW5mb3JjZSB0aGUgJ2lnbm9yZUZpcnN0JyBvcHRpb24gYnkgb3ZlcndyaXRpbmcgdGhlIHR5cGUgZm9yIDAuXHJcblx0XHRcdFx0aWYgKCAhaW5kZXggJiYgaWdub3JlRmlyc3QgKSB7XHJcblx0XHRcdFx0XHR0eXBlID0gMDtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICggIShpID09PSBoaWdoICYmIGlnbm9yZUxhc3QpKSB7XHJcblx0XHRcdFx0XHQvLyBNYXJrIHRoZSAndHlwZScgb2YgdGhpcyBwb2ludC4gMCA9IHBsYWluLCAxID0gcmVhbCB2YWx1ZSwgMiA9IHN0ZXAgdmFsdWUuXHJcblx0XHRcdFx0XHRpbmRleGVzW25ld1BjdC50b0ZpeGVkKDUpXSA9IFtpLCB0eXBlXTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdC8vIFVwZGF0ZSB0aGUgcGVyY2VudGFnZSBjb3VudC5cclxuXHRcdFx0XHRwcmV2UGN0ID0gbmV3UGN0O1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gaW5kZXhlcztcclxuXHR9XHJcblxyXG5cdGZ1bmN0aW9uIGFkZE1hcmtpbmcgKCBzcHJlYWQsIGZpbHRlckZ1bmMsIGZvcm1hdHRlciApIHtcclxuXHJcblx0XHR2YXIgZWxlbWVudCA9IHNjb3BlX0RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cclxuXHRcdHZhciB2YWx1ZVNpemVDbGFzc2VzID0gW1xyXG5cdFx0XHRvcHRpb25zLmNzc0NsYXNzZXMudmFsdWVOb3JtYWwsXHJcblx0XHRcdG9wdGlvbnMuY3NzQ2xhc3Nlcy52YWx1ZUxhcmdlLFxyXG5cdFx0XHRvcHRpb25zLmNzc0NsYXNzZXMudmFsdWVTdWJcclxuXHRcdF07XHJcblx0XHR2YXIgbWFya2VyU2l6ZUNsYXNzZXMgPSBbXHJcblx0XHRcdG9wdGlvbnMuY3NzQ2xhc3Nlcy5tYXJrZXJOb3JtYWwsXHJcblx0XHRcdG9wdGlvbnMuY3NzQ2xhc3Nlcy5tYXJrZXJMYXJnZSxcclxuXHRcdFx0b3B0aW9ucy5jc3NDbGFzc2VzLm1hcmtlclN1YlxyXG5cdFx0XTtcclxuXHRcdHZhciB2YWx1ZU9yaWVudGF0aW9uQ2xhc3NlcyA9IFtcclxuXHRcdFx0b3B0aW9ucy5jc3NDbGFzc2VzLnZhbHVlSG9yaXpvbnRhbCxcclxuXHRcdFx0b3B0aW9ucy5jc3NDbGFzc2VzLnZhbHVlVmVydGljYWxcclxuXHRcdF07XHJcblx0XHR2YXIgbWFya2VyT3JpZW50YXRpb25DbGFzc2VzID0gW1xyXG5cdFx0XHRvcHRpb25zLmNzc0NsYXNzZXMubWFya2VySG9yaXpvbnRhbCxcclxuXHRcdFx0b3B0aW9ucy5jc3NDbGFzc2VzLm1hcmtlclZlcnRpY2FsXHJcblx0XHRdO1xyXG5cclxuXHRcdGFkZENsYXNzKGVsZW1lbnQsIG9wdGlvbnMuY3NzQ2xhc3Nlcy5waXBzKTtcclxuXHRcdGFkZENsYXNzKGVsZW1lbnQsIG9wdGlvbnMub3J0ID09PSAwID8gb3B0aW9ucy5jc3NDbGFzc2VzLnBpcHNIb3Jpem9udGFsIDogb3B0aW9ucy5jc3NDbGFzc2VzLnBpcHNWZXJ0aWNhbCk7XHJcblxyXG5cdFx0ZnVuY3Rpb24gZ2V0Q2xhc3NlcyggdHlwZSwgc291cmNlICl7XHJcblx0XHRcdHZhciBhID0gc291cmNlID09PSBvcHRpb25zLmNzc0NsYXNzZXMudmFsdWU7XHJcblx0XHRcdHZhciBvcmllbnRhdGlvbkNsYXNzZXMgPSBhID8gdmFsdWVPcmllbnRhdGlvbkNsYXNzZXMgOiBtYXJrZXJPcmllbnRhdGlvbkNsYXNzZXM7XHJcblx0XHRcdHZhciBzaXplQ2xhc3NlcyA9IGEgPyB2YWx1ZVNpemVDbGFzc2VzIDogbWFya2VyU2l6ZUNsYXNzZXM7XHJcblxyXG5cdFx0XHRyZXR1cm4gc291cmNlICsgJyAnICsgb3JpZW50YXRpb25DbGFzc2VzW29wdGlvbnMub3J0XSArICcgJyArIHNpemVDbGFzc2VzW3R5cGVdO1xyXG5cdFx0fVxyXG5cclxuXHRcdGZ1bmN0aW9uIGFkZFNwcmVhZCAoIG9mZnNldCwgdmFsdWVzICl7XHJcblxyXG5cdFx0XHQvLyBBcHBseSB0aGUgZmlsdGVyIGZ1bmN0aW9uLCBpZiBpdCBpcyBzZXQuXHJcblx0XHRcdHZhbHVlc1sxXSA9ICh2YWx1ZXNbMV0gJiYgZmlsdGVyRnVuYykgPyBmaWx0ZXJGdW5jKHZhbHVlc1swXSwgdmFsdWVzWzFdKSA6IHZhbHVlc1sxXTtcclxuXHJcblx0XHRcdC8vIEFkZCBhIG1hcmtlciBmb3IgZXZlcnkgcG9pbnRcclxuXHRcdFx0dmFyIG5vZGUgPSBhZGROb2RlVG8oZWxlbWVudCwgZmFsc2UpO1xyXG5cdFx0XHRcdG5vZGUuY2xhc3NOYW1lID0gZ2V0Q2xhc3Nlcyh2YWx1ZXNbMV0sIG9wdGlvbnMuY3NzQ2xhc3Nlcy5tYXJrZXIpO1xyXG5cdFx0XHRcdG5vZGUuc3R5bGVbb3B0aW9ucy5zdHlsZV0gPSBvZmZzZXQgKyAnJSc7XHJcblxyXG5cdFx0XHQvLyBWYWx1ZXMgYXJlIG9ubHkgYXBwZW5kZWQgZm9yIHBvaW50cyBtYXJrZWQgJzEnIG9yICcyJy5cclxuXHRcdFx0aWYgKCB2YWx1ZXNbMV0gKSB7XHJcblx0XHRcdFx0bm9kZSA9IGFkZE5vZGVUbyhlbGVtZW50LCBmYWxzZSk7XHJcblx0XHRcdFx0bm9kZS5jbGFzc05hbWUgPSBnZXRDbGFzc2VzKHZhbHVlc1sxXSwgb3B0aW9ucy5jc3NDbGFzc2VzLnZhbHVlKTtcclxuXHRcdFx0XHRub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScsIHZhbHVlc1swXSk7XHJcblx0XHRcdFx0bm9kZS5zdHlsZVtvcHRpb25zLnN0eWxlXSA9IG9mZnNldCArICclJztcclxuXHRcdFx0XHRub2RlLmlubmVyVGV4dCA9IGZvcm1hdHRlci50byh2YWx1ZXNbMF0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQXBwZW5kIGFsbCBwb2ludHMuXHJcblx0XHRPYmplY3Qua2V5cyhzcHJlYWQpLmZvckVhY2goZnVuY3Rpb24oYSl7XHJcblx0XHRcdGFkZFNwcmVhZChhLCBzcHJlYWRbYV0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0cmV0dXJuIGVsZW1lbnQ7XHJcblx0fVxyXG5cclxuXHRmdW5jdGlvbiByZW1vdmVQaXBzICggKSB7XHJcblx0XHRpZiAoIHNjb3BlX1BpcHMgKSB7XHJcblx0XHRcdHJlbW92ZUVsZW1lbnQoc2NvcGVfUGlwcyk7XHJcblx0XHRcdHNjb3BlX1BpcHMgPSBudWxsO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZnVuY3Rpb24gcGlwcyAoIGdyaWQgKSB7XHJcblxyXG5cdFx0Ly8gRml4ICM2NjlcclxuXHRcdHJlbW92ZVBpcHMoKTtcclxuXHJcblx0XHR2YXIgbW9kZSA9IGdyaWQubW9kZTtcclxuXHRcdHZhciBkZW5zaXR5ID0gZ3JpZC5kZW5zaXR5IHx8IDE7XHJcblx0XHR2YXIgZmlsdGVyID0gZ3JpZC5maWx0ZXIgfHwgZmFsc2U7XHJcblx0XHR2YXIgdmFsdWVzID0gZ3JpZC52YWx1ZXMgfHwgZmFsc2U7XHJcblx0XHR2YXIgc3RlcHBlZCA9IGdyaWQuc3RlcHBlZCB8fCBmYWxzZTtcclxuXHRcdHZhciBncm91cCA9IGdldEdyb3VwKCBtb2RlLCB2YWx1ZXMsIHN0ZXBwZWQgKTtcclxuXHRcdHZhciBzcHJlYWQgPSBnZW5lcmF0ZVNwcmVhZCggZGVuc2l0eSwgbW9kZSwgZ3JvdXAgKTtcclxuXHRcdHZhciBmb3JtYXQgPSBncmlkLmZvcm1hdCB8fCB7XHJcblx0XHRcdHRvOiBNYXRoLnJvdW5kXHJcblx0XHR9O1xyXG5cclxuXHRcdHNjb3BlX1BpcHMgPSBzY29wZV9UYXJnZXQuYXBwZW5kQ2hpbGQoYWRkTWFya2luZyhcclxuXHRcdFx0c3ByZWFkLFxyXG5cdFx0XHRmaWx0ZXIsXHJcblx0XHRcdGZvcm1hdFxyXG5cdFx0KSk7XHJcblxyXG5cdFx0cmV0dXJuIHNjb3BlX1BpcHM7XHJcblx0fVxyXG5cclxuLyohIEluIHRoaXMgZmlsZTogQnJvd3NlciBldmVudHMgKG5vdCBzbGlkZXIgZXZlbnRzIGxpa2Ugc2xpZGUsIGNoYW5nZSk7ICovXHJcblxyXG5cdC8vIFNob3J0aGFuZCBmb3IgYmFzZSBkaW1lbnNpb25zLlxyXG5cdGZ1bmN0aW9uIGJhc2VTaXplICggKSB7XHJcblx0XHR2YXIgcmVjdCA9IHNjb3BlX0Jhc2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblx0XHR2YXIgYWx0ID0gJ29mZnNldCcgKyBbJ1dpZHRoJywgJ0hlaWdodCddW29wdGlvbnMub3J0XTtcclxuXHRcdHJldHVybiBvcHRpb25zLm9ydCA9PT0gMCA/IChyZWN0LndpZHRofHxzY29wZV9CYXNlW2FsdF0pIDogKHJlY3QuaGVpZ2h0fHxzY29wZV9CYXNlW2FsdF0pO1xyXG5cdH1cclxuXHJcblx0Ly8gSGFuZGxlciBmb3IgYXR0YWNoaW5nIGV2ZW50cyB0cm91Z2ggYSBwcm94eS5cclxuXHRmdW5jdGlvbiBhdHRhY2hFdmVudCAoIGV2ZW50cywgZWxlbWVudCwgY2FsbGJhY2ssIGRhdGEgKSB7XHJcblxyXG5cdFx0Ly8gVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byAnZmlsdGVyJyBldmVudHMgdG8gdGhlIHNsaWRlci5cclxuXHRcdC8vIGVsZW1lbnQgaXMgYSBub2RlLCBub3QgYSBub2RlTGlzdFxyXG5cclxuXHRcdHZhciBtZXRob2QgPSBmdW5jdGlvbiAoIGUgKXtcclxuXHJcblx0XHRcdGUgPSBmaXhFdmVudChlLCBkYXRhLnBhZ2VPZmZzZXQsIGRhdGEudGFyZ2V0IHx8IGVsZW1lbnQpO1xyXG5cclxuXHRcdFx0Ly8gZml4RXZlbnQgcmV0dXJucyBmYWxzZSBpZiB0aGlzIGV2ZW50IGhhcyBhIGRpZmZlcmVudCB0YXJnZXRcclxuXHRcdFx0Ly8gd2hlbiBoYW5kbGluZyAobXVsdGktKSB0b3VjaCBldmVudHM7XHJcblx0XHRcdGlmICggIWUgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBkb05vdFJlamVjdCBpcyBwYXNzZWQgYnkgYWxsIGVuZCBldmVudHMgdG8gbWFrZSBzdXJlIHJlbGVhc2VkIHRvdWNoZXNcclxuXHRcdFx0Ly8gYXJlIG5vdCByZWplY3RlZCwgbGVhdmluZyB0aGUgc2xpZGVyIFwic3R1Y2tcIiB0byB0aGUgY3Vyc29yO1xyXG5cdFx0XHRpZiAoIHNjb3BlX1RhcmdldC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgJiYgIWRhdGEuZG9Ob3RSZWplY3QgKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyBTdG9wIGlmIGFuIGFjdGl2ZSAndGFwJyB0cmFuc2l0aW9uIGlzIHRha2luZyBwbGFjZS5cclxuXHRcdFx0aWYgKCBoYXNDbGFzcyhzY29wZV9UYXJnZXQsIG9wdGlvbnMuY3NzQ2xhc3Nlcy50YXApICYmICFkYXRhLmRvTm90UmVqZWN0ICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gSWdub3JlIHJpZ2h0IG9yIG1pZGRsZSBjbGlja3Mgb24gc3RhcnQgIzQ1NFxyXG5cdFx0XHRpZiAoIGV2ZW50cyA9PT0gYWN0aW9ucy5zdGFydCAmJiBlLmJ1dHRvbnMgIT09IHVuZGVmaW5lZCAmJiBlLmJ1dHRvbnMgPiAxICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gSWdub3JlIHJpZ2h0IG9yIG1pZGRsZSBjbGlja3Mgb24gc3RhcnQgIzQ1NFxyXG5cdFx0XHRpZiAoIGRhdGEuaG92ZXIgJiYgZS5idXR0b25zICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gJ3N1cHBvcnRzUGFzc2l2ZScgaXMgb25seSB0cnVlIGlmIGEgYnJvd3NlciBhbHNvIHN1cHBvcnRzIHRvdWNoLWFjdGlvbjogbm9uZSBpbiBDU1MuXHJcblx0XHRcdC8vIGlPUyBzYWZhcmkgZG9lcyBub3QsIHNvIGl0IGRvZXNuJ3QgZ2V0IHRvIGJlbmVmaXQgZnJvbSBwYXNzaXZlIHNjcm9sbGluZy4gaU9TIGRvZXMgc3VwcG9ydFxyXG5cdFx0XHQvLyB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbiwgYnV0IHRoYXQgYWxsb3dzIHBhbm5pbmcsIHdoaWNoIGJyZWFrc1xyXG5cdFx0XHQvLyBzbGlkZXJzIGFmdGVyIHpvb21pbmcvb24gbm9uLXJlc3BvbnNpdmUgcGFnZXMuXHJcblx0XHRcdC8vIFNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzExMlxyXG5cdFx0XHRpZiAoICFzdXBwb3J0c1Bhc3NpdmUgKSB7XHJcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRlLmNhbGNQb2ludCA9IGUucG9pbnRzWyBvcHRpb25zLm9ydCBdO1xyXG5cclxuXHRcdFx0Ly8gQ2FsbCB0aGUgZXZlbnQgaGFuZGxlciB3aXRoIHRoZSBldmVudCBbIGFuZCBhZGRpdGlvbmFsIGRhdGEgXS5cclxuXHRcdFx0Y2FsbGJhY2sgKCBlLCBkYXRhICk7XHJcblx0XHR9O1xyXG5cclxuXHRcdHZhciBtZXRob2RzID0gW107XHJcblxyXG5cdFx0Ly8gQmluZCBhIGNsb3N1cmUgb24gdGhlIHRhcmdldCBmb3IgZXZlcnkgZXZlbnQgdHlwZS5cclxuXHRcdGV2ZW50cy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24oIGV2ZW50TmFtZSApe1xyXG5cdFx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBtZXRob2QsIHN1cHBvcnRzUGFzc2l2ZSA/IHsgcGFzc2l2ZTogdHJ1ZSB9IDogZmFsc2UpO1xyXG5cdFx0XHRtZXRob2RzLnB1c2goW2V2ZW50TmFtZSwgbWV0aG9kXSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRyZXR1cm4gbWV0aG9kcztcclxuXHR9XHJcblxyXG5cdC8vIFByb3ZpZGUgYSBjbGVhbiBldmVudCB3aXRoIHN0YW5kYXJkaXplZCBvZmZzZXQgdmFsdWVzLlxyXG5cdGZ1bmN0aW9uIGZpeEV2ZW50ICggZSwgcGFnZU9mZnNldCwgZXZlbnRUYXJnZXQgKSB7XHJcblxyXG5cdFx0Ly8gRmlsdGVyIHRoZSBldmVudCB0byByZWdpc3RlciB0aGUgdHlwZSwgd2hpY2ggY2FuIGJlXHJcblx0XHQvLyB0b3VjaCwgbW91c2Ugb3IgcG9pbnRlci4gT2Zmc2V0IGNoYW5nZXMgbmVlZCB0byBiZVxyXG5cdFx0Ly8gbWFkZSBvbiBhbiBldmVudCBzcGVjaWZpYyBiYXNpcy5cclxuXHRcdHZhciB0b3VjaCA9IGUudHlwZS5pbmRleE9mKCd0b3VjaCcpID09PSAwO1xyXG5cdFx0dmFyIG1vdXNlID0gZS50eXBlLmluZGV4T2YoJ21vdXNlJykgPT09IDA7XHJcblx0XHR2YXIgcG9pbnRlciA9IGUudHlwZS5pbmRleE9mKCdwb2ludGVyJykgPT09IDA7XHJcblxyXG5cdFx0dmFyIHg7XHJcblx0XHR2YXIgeTtcclxuXHJcblx0XHQvLyBJRTEwIGltcGxlbWVudGVkIHBvaW50ZXIgZXZlbnRzIHdpdGggYSBwcmVmaXg7XHJcblx0XHRpZiAoIGUudHlwZS5pbmRleE9mKCdNU1BvaW50ZXInKSA9PT0gMCApIHtcclxuXHRcdFx0cG9pbnRlciA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSW4gdGhlIGV2ZW50IHRoYXQgbXVsdGl0b3VjaCBpcyBhY3RpdmF0ZWQsIHRoZSBvbmx5IHRoaW5nIG9uZSBoYW5kbGUgc2hvdWxkIGJlIGNvbmNlcm5lZFxyXG5cdFx0Ly8gYWJvdXQgaXMgdGhlIHRvdWNoZXMgdGhhdCBvcmlnaW5hdGVkIG9uIHRvcCBvZiBpdC5cclxuXHRcdGlmICggdG91Y2ggKSB7XHJcblxyXG5cdFx0XHQvLyBSZXR1cm5zIHRydWUgaWYgYSB0b3VjaCBvcmlnaW5hdGVkIG9uIHRoZSB0YXJnZXQuXHJcblx0XHRcdHZhciBpc1RvdWNoT25UYXJnZXQgPSBmdW5jdGlvbiAoY2hlY2tUb3VjaCkge1xyXG5cdFx0XHRcdHJldHVybiBjaGVja1RvdWNoLnRhcmdldCA9PT0gZXZlbnRUYXJnZXQgfHwgZXZlbnRUYXJnZXQuY29udGFpbnMoY2hlY2tUb3VjaC50YXJnZXQpO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0Ly8gSW4gdGhlIGNhc2Ugb2YgdG91Y2hzdGFydCBldmVudHMsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGlzIHN0aWxsIG5vIG1vcmUgdGhhbiBvbmVcclxuXHRcdFx0Ly8gdG91Y2ggb24gdGhlIHRhcmdldCBzbyB3ZSBsb29rIGFtb25nc3QgYWxsIHRvdWNoZXMuXHJcblx0XHRcdGlmIChlLnR5cGUgPT09ICd0b3VjaHN0YXJ0Jykge1xyXG5cclxuXHRcdFx0XHR2YXIgdGFyZ2V0VG91Y2hlcyA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChlLnRvdWNoZXMsIGlzVG91Y2hPblRhcmdldCk7XHJcblxyXG5cdFx0XHRcdC8vIERvIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgdG91Y2ggcGVyIGhhbmRsZS5cclxuXHRcdFx0XHRpZiAoIHRhcmdldFRvdWNoZXMubGVuZ3RoID4gMSApIHtcclxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHggPSB0YXJnZXRUb3VjaGVzWzBdLnBhZ2VYO1xyXG5cdFx0XHRcdHkgPSB0YXJnZXRUb3VjaGVzWzBdLnBhZ2VZO1xyXG5cclxuXHRcdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdFx0Ly8gSW4gdGhlIG90aGVyIGNhc2VzLCBmaW5kIG9uIGNoYW5nZWRUb3VjaGVzIGlzIGVub3VnaC5cclxuXHRcdFx0XHR2YXIgdGFyZ2V0VG91Y2ggPSBBcnJheS5wcm90b3R5cGUuZmluZC5jYWxsKGUuY2hhbmdlZFRvdWNoZXMsIGlzVG91Y2hPblRhcmdldCk7XHJcblxyXG5cdFx0XHRcdC8vIENhbmNlbCBpZiB0aGUgdGFyZ2V0IHRvdWNoIGhhcyBub3QgbW92ZWQuXHJcblx0XHRcdFx0aWYgKCAhdGFyZ2V0VG91Y2ggKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHR4ID0gdGFyZ2V0VG91Y2gucGFnZVg7XHJcblx0XHRcdFx0eSA9IHRhcmdldFRvdWNoLnBhZ2VZO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cGFnZU9mZnNldCA9IHBhZ2VPZmZzZXQgfHwgZ2V0UGFnZU9mZnNldChzY29wZV9Eb2N1bWVudCk7XHJcblxyXG5cdFx0aWYgKCBtb3VzZSB8fCBwb2ludGVyICkge1xyXG5cdFx0XHR4ID0gZS5jbGllbnRYICsgcGFnZU9mZnNldC54O1xyXG5cdFx0XHR5ID0gZS5jbGllbnRZICsgcGFnZU9mZnNldC55O1xyXG5cdFx0fVxyXG5cclxuXHRcdGUucGFnZU9mZnNldCA9IHBhZ2VPZmZzZXQ7XHJcblx0XHRlLnBvaW50cyA9IFt4LCB5XTtcclxuXHRcdGUuY3Vyc29yID0gbW91c2UgfHwgcG9pbnRlcjsgLy8gRml4ICM0MzVcclxuXHJcblx0XHRyZXR1cm4gZTtcclxuXHR9XHJcblxyXG5cdC8vIFRyYW5zbGF0ZSBhIGNvb3JkaW5hdGUgaW4gdGhlIGRvY3VtZW50IHRvIGEgcGVyY2VudGFnZSBvbiB0aGUgc2xpZGVyXHJcblx0ZnVuY3Rpb24gY2FsY1BvaW50VG9QZXJjZW50YWdlICggY2FsY1BvaW50ICkge1xyXG5cdFx0dmFyIGxvY2F0aW9uID0gY2FsY1BvaW50IC0gb2Zmc2V0KHNjb3BlX0Jhc2UsIG9wdGlvbnMub3J0KTtcclxuXHRcdHZhciBwcm9wb3NhbCA9ICggbG9jYXRpb24gKiAxMDAgKSAvIGJhc2VTaXplKCk7XHJcblxyXG5cdFx0Ly8gQ2xhbXAgcHJvcG9zYWwgYmV0d2VlbiAwJSBhbmQgMTAwJVxyXG5cdFx0Ly8gT3V0LW9mLWJvdW5kIGNvb3JkaW5hdGVzIG1heSBvY2N1ciB3aGVuIC5ub1VpLWJhc2UgcHNldWRvLWVsZW1lbnRzXHJcblx0XHQvLyBhcmUgdXNlZCAoZS5nLiBjb250YWluZWQgaGFuZGxlcyBmZWF0dXJlKVxyXG5cdFx0cHJvcG9zYWwgPSBsaW1pdChwcm9wb3NhbCk7XHJcblxyXG5cdFx0cmV0dXJuIG9wdGlvbnMuZGlyID8gMTAwIC0gcHJvcG9zYWwgOiBwcm9wb3NhbDtcclxuXHR9XHJcblxyXG5cdC8vIEZpbmQgaGFuZGxlIGNsb3Nlc3QgdG8gYSBjZXJ0YWluIHBlcmNlbnRhZ2Ugb24gdGhlIHNsaWRlclxyXG5cdGZ1bmN0aW9uIGdldENsb3Nlc3RIYW5kbGUgKCBwcm9wb3NhbCApIHtcclxuXHJcblx0XHR2YXIgY2xvc2VzdCA9IDEwMDtcclxuXHRcdHZhciBoYW5kbGVOdW1iZXIgPSBmYWxzZTtcclxuXHJcblx0XHRzY29wZV9IYW5kbGVzLmZvckVhY2goZnVuY3Rpb24oaGFuZGxlLCBpbmRleCl7XHJcblxyXG5cdFx0XHQvLyBEaXNhYmxlZCBoYW5kbGVzIGFyZSBpZ25vcmVkXHJcblx0XHRcdGlmICggaGFuZGxlLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSApIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHZhciBwb3MgPSBNYXRoLmFicyhzY29wZV9Mb2NhdGlvbnNbaW5kZXhdIC0gcHJvcG9zYWwpO1xyXG5cclxuXHRcdFx0aWYgKCBwb3MgPCBjbG9zZXN0IHx8IChwb3MgPT09IDEwMCAmJiBjbG9zZXN0ID09PSAxMDApICkge1xyXG5cdFx0XHRcdGhhbmRsZU51bWJlciA9IGluZGV4O1xyXG5cdFx0XHRcdGNsb3Nlc3QgPSBwb3M7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiBoYW5kbGVOdW1iZXI7XHJcblx0fVxyXG5cclxuXHQvLyBGaXJlICdlbmQnIHdoZW4gYSBtb3VzZSBvciBwZW4gbGVhdmVzIHRoZSBkb2N1bWVudC5cclxuXHRmdW5jdGlvbiBkb2N1bWVudExlYXZlICggZXZlbnQsIGRhdGEgKSB7XHJcblx0XHRpZiAoIGV2ZW50LnR5cGUgPT09IFwibW91c2VvdXRcIiAmJiBldmVudC50YXJnZXQubm9kZU5hbWUgPT09IFwiSFRNTFwiICYmIGV2ZW50LnJlbGF0ZWRUYXJnZXQgPT09IG51bGwgKXtcclxuXHRcdFx0ZXZlbnRFbmQgKGV2ZW50LCBkYXRhKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIEhhbmRsZSBtb3ZlbWVudCBvbiBkb2N1bWVudCBmb3IgaGFuZGxlIGFuZCByYW5nZSBkcmFnLlxyXG5cdGZ1bmN0aW9uIGV2ZW50TW92ZSAoIGV2ZW50LCBkYXRhICkge1xyXG5cclxuXHRcdC8vIEZpeCAjNDk4XHJcblx0XHQvLyBDaGVjayB2YWx1ZSBvZiAuYnV0dG9ucyBpbiAnc3RhcnQnIHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIElFMTAgbW9iaWxlIChkYXRhLmJ1dHRvbnNQcm9wZXJ0eSkuXHJcblx0XHQvLyBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzkyNzAwNS9tb2JpbGUtaWUxMC13aW5kb3dzLXBob25lLWJ1dHRvbnMtcHJvcGVydHktb2YtcG9pbnRlcm1vdmUtZXZlbnQtYWx3YXlzLXplcm9cclxuXHRcdC8vIElFOSBoYXMgLmJ1dHRvbnMgYW5kIC53aGljaCB6ZXJvIG9uIG1vdXNlbW92ZS5cclxuXHRcdC8vIEZpcmVmb3ggYnJlYWtzIHRoZSBzcGVjIE1ETiBkZWZpbmVzLlxyXG5cdFx0aWYgKCBuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKFwiTVNJRSA5XCIpID09PSAtMSAmJiBldmVudC5idXR0b25zID09PSAwICYmIGRhdGEuYnV0dG9uc1Byb3BlcnR5ICE9PSAwICkge1xyXG5cdFx0XHRyZXR1cm4gZXZlbnRFbmQoZXZlbnQsIGRhdGEpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENoZWNrIGlmIHdlIGFyZSBtb3ZpbmcgdXAgb3IgZG93blxyXG5cdFx0dmFyIG1vdmVtZW50ID0gKG9wdGlvbnMuZGlyID8gLTEgOiAxKSAqIChldmVudC5jYWxjUG9pbnQgLSBkYXRhLnN0YXJ0Q2FsY1BvaW50KTtcclxuXHJcblx0XHQvLyBDb252ZXJ0IHRoZSBtb3ZlbWVudCBpbnRvIGEgcGVyY2VudGFnZSBvZiB0aGUgc2xpZGVyIHdpZHRoL2hlaWdodFxyXG5cdFx0dmFyIHByb3Bvc2FsID0gKG1vdmVtZW50ICogMTAwKSAvIGRhdGEuYmFzZVNpemU7XHJcblxyXG5cdFx0bW92ZUhhbmRsZXMobW92ZW1lbnQgPiAwLCBwcm9wb3NhbCwgZGF0YS5sb2NhdGlvbnMsIGRhdGEuaGFuZGxlTnVtYmVycyk7XHJcblx0fVxyXG5cclxuXHQvLyBVbmJpbmQgbW92ZSBldmVudHMgb24gZG9jdW1lbnQsIGNhbGwgY2FsbGJhY2tzLlxyXG5cdGZ1bmN0aW9uIGV2ZW50RW5kICggZXZlbnQsIGRhdGEgKSB7XHJcblxyXG5cdFx0Ly8gVGhlIGhhbmRsZSBpcyBubyBsb25nZXIgYWN0aXZlLCBzbyByZW1vdmUgdGhlIGNsYXNzLlxyXG5cdFx0aWYgKCBkYXRhLmhhbmRsZSApIHtcclxuXHRcdFx0cmVtb3ZlQ2xhc3MoZGF0YS5oYW5kbGUsIG9wdGlvbnMuY3NzQ2xhc3Nlcy5hY3RpdmUpO1xyXG5cdFx0XHRzY29wZV9BY3RpdmVIYW5kbGVzQ291bnQgLT0gMTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBVbmJpbmQgdGhlIG1vdmUgYW5kIGVuZCBldmVudHMsIHdoaWNoIGFyZSBhZGRlZCBvbiAnc3RhcnQnLlxyXG5cdFx0ZGF0YS5saXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiggYyApIHtcclxuXHRcdFx0c2NvcGVfRG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoY1swXSwgY1sxXSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRpZiAoIHNjb3BlX0FjdGl2ZUhhbmRsZXNDb3VudCA9PT0gMCApIHtcclxuXHRcdFx0Ly8gUmVtb3ZlIGRyYWdnaW5nIGNsYXNzLlxyXG5cdFx0XHRyZW1vdmVDbGFzcyhzY29wZV9UYXJnZXQsIG9wdGlvbnMuY3NzQ2xhc3Nlcy5kcmFnKTtcclxuXHRcdFx0c2V0WmluZGV4KCk7XHJcblxyXG5cdFx0XHQvLyBSZW1vdmUgY3Vyc29yIHN0eWxlcyBhbmQgdGV4dC1zZWxlY3Rpb24gZXZlbnRzIGJvdW5kIHRvIHRoZSBib2R5LlxyXG5cdFx0XHRpZiAoIGV2ZW50LmN1cnNvciApIHtcclxuXHRcdFx0XHRzY29wZV9Cb2R5LnN0eWxlLmN1cnNvciA9ICcnO1xyXG5cdFx0XHRcdHNjb3BlX0JvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2VsZWN0c3RhcnQnLCBwcmV2ZW50RGVmYXVsdCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRkYXRhLmhhbmRsZU51bWJlcnMuZm9yRWFjaChmdW5jdGlvbihoYW5kbGVOdW1iZXIpe1xyXG5cdFx0XHRmaXJlRXZlbnQoJ2NoYW5nZScsIGhhbmRsZU51bWJlcik7XHJcblx0XHRcdGZpcmVFdmVudCgnc2V0JywgaGFuZGxlTnVtYmVyKTtcclxuXHRcdFx0ZmlyZUV2ZW50KCdlbmQnLCBoYW5kbGVOdW1iZXIpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvLyBCaW5kIG1vdmUgZXZlbnRzIG9uIGRvY3VtZW50LlxyXG5cdGZ1bmN0aW9uIGV2ZW50U3RhcnQgKCBldmVudCwgZGF0YSApIHtcclxuXHJcblx0XHR2YXIgaGFuZGxlO1xyXG5cdFx0aWYgKCBkYXRhLmhhbmRsZU51bWJlcnMubGVuZ3RoID09PSAxICkge1xyXG5cclxuXHRcdFx0dmFyIGhhbmRsZU9yaWdpbiA9IHNjb3BlX0hhbmRsZXNbZGF0YS5oYW5kbGVOdW1iZXJzWzBdXTtcclxuXHJcblx0XHRcdC8vIElnbm9yZSAnZGlzYWJsZWQnIGhhbmRsZXNcclxuXHRcdFx0aWYgKCBoYW5kbGVPcmlnaW4uaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpICkge1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aGFuZGxlID0gaGFuZGxlT3JpZ2luLmNoaWxkcmVuWzBdO1xyXG5cdFx0XHRzY29wZV9BY3RpdmVIYW5kbGVzQ291bnQgKz0gMTtcclxuXHJcblx0XHRcdC8vIE1hcmsgdGhlIGhhbmRsZSBhcyAnYWN0aXZlJyBzbyBpdCBjYW4gYmUgc3R5bGVkLlxyXG5cdFx0XHRhZGRDbGFzcyhoYW5kbGUsIG9wdGlvbnMuY3NzQ2xhc3Nlcy5hY3RpdmUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEEgZHJhZyBzaG91bGQgbmV2ZXIgcHJvcGFnYXRlIHVwIHRvIHRoZSAndGFwJyBldmVudC5cclxuXHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuXHRcdC8vIFJlY29yZCB0aGUgZXZlbnQgbGlzdGVuZXJzLlxyXG5cdFx0dmFyIGxpc3RlbmVycyA9IFtdO1xyXG5cclxuXHRcdC8vIEF0dGFjaCB0aGUgbW92ZSBhbmQgZW5kIGV2ZW50cy5cclxuXHRcdHZhciBtb3ZlRXZlbnQgPSBhdHRhY2hFdmVudChhY3Rpb25zLm1vdmUsIHNjb3BlX0RvY3VtZW50RWxlbWVudCwgZXZlbnRNb3ZlLCB7XHJcblx0XHRcdC8vIFRoZSBldmVudCB0YXJnZXQgaGFzIGNoYW5nZWQgc28gd2UgbmVlZCB0byBwcm9wYWdhdGUgdGhlIG9yaWdpbmFsIG9uZSBzbyB0aGF0IHdlIGtlZXBcclxuXHRcdFx0Ly8gcmVseWluZyBvbiBpdCB0byBleHRyYWN0IHRhcmdldCB0b3VjaGVzLlxyXG5cdFx0XHR0YXJnZXQ6IGV2ZW50LnRhcmdldCxcclxuXHRcdFx0aGFuZGxlOiBoYW5kbGUsXHJcblx0XHRcdGxpc3RlbmVyczogbGlzdGVuZXJzLFxyXG5cdFx0XHRzdGFydENhbGNQb2ludDogZXZlbnQuY2FsY1BvaW50LFxyXG5cdFx0XHRiYXNlU2l6ZTogYmFzZVNpemUoKSxcclxuXHRcdFx0cGFnZU9mZnNldDogZXZlbnQucGFnZU9mZnNldCxcclxuXHRcdFx0aGFuZGxlTnVtYmVyczogZGF0YS5oYW5kbGVOdW1iZXJzLFxyXG5cdFx0XHRidXR0b25zUHJvcGVydHk6IGV2ZW50LmJ1dHRvbnMsXHJcblx0XHRcdGxvY2F0aW9uczogc2NvcGVfTG9jYXRpb25zLnNsaWNlKClcclxuXHRcdH0pO1xyXG5cclxuXHRcdHZhciBlbmRFdmVudCA9IGF0dGFjaEV2ZW50KGFjdGlvbnMuZW5kLCBzY29wZV9Eb2N1bWVudEVsZW1lbnQsIGV2ZW50RW5kLCB7XHJcblx0XHRcdHRhcmdldDogZXZlbnQudGFyZ2V0LFxyXG5cdFx0XHRoYW5kbGU6IGhhbmRsZSxcclxuXHRcdFx0bGlzdGVuZXJzOiBsaXN0ZW5lcnMsXHJcblx0XHRcdGRvTm90UmVqZWN0OiB0cnVlLFxyXG5cdFx0XHRoYW5kbGVOdW1iZXJzOiBkYXRhLmhhbmRsZU51bWJlcnNcclxuXHRcdH0pO1xyXG5cclxuXHRcdHZhciBvdXRFdmVudCA9IGF0dGFjaEV2ZW50KFwibW91c2VvdXRcIiwgc2NvcGVfRG9jdW1lbnRFbGVtZW50LCBkb2N1bWVudExlYXZlLCB7XHJcblx0XHRcdHRhcmdldDogZXZlbnQudGFyZ2V0LFxyXG5cdFx0XHRoYW5kbGU6IGhhbmRsZSxcclxuXHRcdFx0bGlzdGVuZXJzOiBsaXN0ZW5lcnMsXHJcblx0XHRcdGRvTm90UmVqZWN0OiB0cnVlLFxyXG5cdFx0XHRoYW5kbGVOdW1iZXJzOiBkYXRhLmhhbmRsZU51bWJlcnNcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIFdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIHB1c2hlZCB0aGUgbGlzdGVuZXJzIGluIHRoZSBsaXN0ZW5lciBsaXN0IHJhdGhlciB0aGFuIGNyZWF0aW5nXHJcblx0XHQvLyBhIG5ldyBvbmUgYXMgaXQgaGFzIGFscmVhZHkgYmVlbiBwYXNzZWQgdG8gdGhlIGV2ZW50IGhhbmRsZXJzLlxyXG5cdFx0bGlzdGVuZXJzLnB1c2guYXBwbHkobGlzdGVuZXJzLCBtb3ZlRXZlbnQuY29uY2F0KGVuZEV2ZW50LCBvdXRFdmVudCkpO1xyXG5cclxuXHRcdC8vIFRleHQgc2VsZWN0aW9uIGlzbid0IGFuIGlzc3VlIG9uIHRvdWNoIGRldmljZXMsXHJcblx0XHQvLyBzbyBhZGRpbmcgY3Vyc29yIHN0eWxlcyBjYW4gYmUgc2tpcHBlZC5cclxuXHRcdGlmICggZXZlbnQuY3Vyc29yICkge1xyXG5cclxuXHRcdFx0Ly8gUHJldmVudCB0aGUgJ0knIGN1cnNvciBhbmQgZXh0ZW5kIHRoZSByYW5nZS1kcmFnIGN1cnNvci5cclxuXHRcdFx0c2NvcGVfQm9keS5zdHlsZS5jdXJzb3IgPSBnZXRDb21wdXRlZFN0eWxlKGV2ZW50LnRhcmdldCkuY3Vyc29yO1xyXG5cclxuXHRcdFx0Ly8gTWFyayB0aGUgdGFyZ2V0IHdpdGggYSBkcmFnZ2luZyBzdGF0ZS5cclxuXHRcdFx0aWYgKCBzY29wZV9IYW5kbGVzLmxlbmd0aCA+IDEgKSB7XHJcblx0XHRcdFx0YWRkQ2xhc3Moc2NvcGVfVGFyZ2V0LCBvcHRpb25zLmNzc0NsYXNzZXMuZHJhZyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIFByZXZlbnQgdGV4dCBzZWxlY3Rpb24gd2hlbiBkcmFnZ2luZyB0aGUgaGFuZGxlcy5cclxuXHRcdFx0Ly8gSW4gbm9VaVNsaWRlciA8PSA5LjIuMCwgdGhpcyB3YXMgaGFuZGxlZCBieSBjYWxsaW5nIHByZXZlbnREZWZhdWx0IG9uIG1vdXNlL3RvdWNoIHN0YXJ0L21vdmUsXHJcblx0XHRcdC8vIHdoaWNoIGlzIHNjcm9sbCBibG9ja2luZy4gVGhlIHNlbGVjdHN0YXJ0IGV2ZW50IGlzIHN1cHBvcnRlZCBieSBGaXJlRm94IHN0YXJ0aW5nIGZyb20gdmVyc2lvbiA1MixcclxuXHRcdFx0Ly8gbWVhbmluZyB0aGUgb25seSBob2xkb3V0IGlzIGlPUyBTYWZhcmkuIFRoaXMgZG9lc24ndCBtYXR0ZXI6IHRleHQgc2VsZWN0aW9uIGlzbid0IHRyaWdnZXJlZCB0aGVyZS5cclxuXHRcdFx0Ly8gVGhlICdjdXJzb3InIGZsYWcgaXMgZmFsc2UuXHJcblx0XHRcdC8vIFNlZTogaHR0cDovL2Nhbml1c2UuY29tLyNzZWFyY2g9c2VsZWN0c3RhcnRcclxuXHRcdFx0c2NvcGVfQm9keS5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3RzdGFydCcsIHByZXZlbnREZWZhdWx0LCBmYWxzZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0ZGF0YS5oYW5kbGVOdW1iZXJzLmZvckVhY2goZnVuY3Rpb24oaGFuZGxlTnVtYmVyKXtcclxuXHRcdFx0ZmlyZUV2ZW50KCdzdGFydCcsIGhhbmRsZU51bWJlcik7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8vIE1vdmUgY2xvc2VzdCBoYW5kbGUgdG8gdGFwcGVkIGxvY2F0aW9uLlxyXG5cdGZ1bmN0aW9uIGV2ZW50VGFwICggZXZlbnQgKSB7XHJcblxyXG5cdFx0Ly8gVGhlIHRhcCBldmVudCBzaG91bGRuJ3QgcHJvcGFnYXRlIHVwXHJcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcblx0XHR2YXIgcHJvcG9zYWwgPSBjYWxjUG9pbnRUb1BlcmNlbnRhZ2UoZXZlbnQuY2FsY1BvaW50KTtcclxuXHRcdHZhciBoYW5kbGVOdW1iZXIgPSBnZXRDbG9zZXN0SGFuZGxlKHByb3Bvc2FsKTtcclxuXHJcblx0XHQvLyBUYWNrbGUgdGhlIGNhc2UgdGhhdCBhbGwgaGFuZGxlcyBhcmUgJ2Rpc2FibGVkJy5cclxuXHRcdGlmICggaGFuZGxlTnVtYmVyID09PSBmYWxzZSApIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEZsYWcgdGhlIHNsaWRlciBhcyBpdCBpcyBub3cgaW4gYSB0cmFuc2l0aW9uYWwgc3RhdGUuXHJcblx0XHQvLyBUcmFuc2l0aW9uIHRha2VzIGEgY29uZmlndXJhYmxlIGFtb3VudCBvZiBtcyAoZGVmYXVsdCAzMDApLiBSZS1lbmFibGUgdGhlIHNsaWRlciBhZnRlciB0aGF0LlxyXG5cdFx0aWYgKCAhb3B0aW9ucy5ldmVudHMuc25hcCApIHtcclxuXHRcdFx0YWRkQ2xhc3NGb3Ioc2NvcGVfVGFyZ2V0LCBvcHRpb25zLmNzc0NsYXNzZXMudGFwLCBvcHRpb25zLmFuaW1hdGlvbkR1cmF0aW9uKTtcclxuXHRcdH1cclxuXHJcblx0XHRzZXRIYW5kbGUoaGFuZGxlTnVtYmVyLCBwcm9wb3NhbCwgdHJ1ZSwgdHJ1ZSk7XHJcblxyXG5cdFx0c2V0WmluZGV4KCk7XHJcblxyXG5cdFx0ZmlyZUV2ZW50KCdzbGlkZScsIGhhbmRsZU51bWJlciwgdHJ1ZSk7XHJcblx0XHRmaXJlRXZlbnQoJ3VwZGF0ZScsIGhhbmRsZU51bWJlciwgdHJ1ZSk7XHJcblx0XHRmaXJlRXZlbnQoJ2NoYW5nZScsIGhhbmRsZU51bWJlciwgdHJ1ZSk7XHJcblx0XHRmaXJlRXZlbnQoJ3NldCcsIGhhbmRsZU51bWJlciwgdHJ1ZSk7XHJcblxyXG5cdFx0aWYgKCBvcHRpb25zLmV2ZW50cy5zbmFwICkge1xyXG5cdFx0XHRldmVudFN0YXJ0KGV2ZW50LCB7IGhhbmRsZU51bWJlcnM6IFtoYW5kbGVOdW1iZXJdIH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gRmlyZXMgYSAnaG92ZXInIGV2ZW50IGZvciBhIGhvdmVyZWQgbW91c2UvcGVuIHBvc2l0aW9uLlxyXG5cdGZ1bmN0aW9uIGV2ZW50SG92ZXIgKCBldmVudCApIHtcclxuXHJcblx0XHR2YXIgcHJvcG9zYWwgPSBjYWxjUG9pbnRUb1BlcmNlbnRhZ2UoZXZlbnQuY2FsY1BvaW50KTtcclxuXHJcblx0XHR2YXIgdG8gPSBzY29wZV9TcGVjdHJ1bS5nZXRTdGVwKHByb3Bvc2FsKTtcclxuXHRcdHZhciB2YWx1ZSA9IHNjb3BlX1NwZWN0cnVtLmZyb21TdGVwcGluZyh0byk7XHJcblxyXG5cdFx0T2JqZWN0LmtleXMoc2NvcGVfRXZlbnRzKS5mb3JFYWNoKGZ1bmN0aW9uKCB0YXJnZXRFdmVudCApIHtcclxuXHRcdFx0aWYgKCAnaG92ZXInID09PSB0YXJnZXRFdmVudC5zcGxpdCgnLicpWzBdICkge1xyXG5cdFx0XHRcdHNjb3BlX0V2ZW50c1t0YXJnZXRFdmVudF0uZm9yRWFjaChmdW5jdGlvbiggY2FsbGJhY2sgKSB7XHJcblx0XHRcdFx0XHRjYWxsYmFjay5jYWxsKCBzY29wZV9TZWxmLCB2YWx1ZSApO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8vIEF0dGFjaCBldmVudHMgdG8gc2V2ZXJhbCBzbGlkZXIgcGFydHMuXHJcblx0ZnVuY3Rpb24gYmluZFNsaWRlckV2ZW50cyAoIGJlaGF2aW91ciApIHtcclxuXHJcblx0XHQvLyBBdHRhY2ggdGhlIHN0YW5kYXJkIGRyYWcgZXZlbnQgdG8gdGhlIGhhbmRsZXMuXHJcblx0XHRpZiAoICFiZWhhdmlvdXIuZml4ZWQgKSB7XHJcblxyXG5cdFx0XHRzY29wZV9IYW5kbGVzLmZvckVhY2goZnVuY3Rpb24oIGhhbmRsZSwgaW5kZXggKXtcclxuXHJcblx0XHRcdFx0Ly8gVGhlc2UgZXZlbnRzIGFyZSBvbmx5IGJvdW5kIHRvIHRoZSB2aXN1YWwgaGFuZGxlXHJcblx0XHRcdFx0Ly8gZWxlbWVudCwgbm90IHRoZSAncmVhbCcgb3JpZ2luIGVsZW1lbnQuXHJcblx0XHRcdFx0YXR0YWNoRXZlbnQgKCBhY3Rpb25zLnN0YXJ0LCBoYW5kbGUuY2hpbGRyZW5bMF0sIGV2ZW50U3RhcnQsIHtcclxuXHRcdFx0XHRcdGhhbmRsZU51bWJlcnM6IFtpbmRleF1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQXR0YWNoIHRoZSB0YXAgZXZlbnQgdG8gdGhlIHNsaWRlciBiYXNlLlxyXG5cdFx0aWYgKCBiZWhhdmlvdXIudGFwICkge1xyXG5cdFx0XHRhdHRhY2hFdmVudCAoYWN0aW9ucy5zdGFydCwgc2NvcGVfQmFzZSwgZXZlbnRUYXAsIHt9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBGaXJlIGhvdmVyIGV2ZW50c1xyXG5cdFx0aWYgKCBiZWhhdmlvdXIuaG92ZXIgKSB7XHJcblx0XHRcdGF0dGFjaEV2ZW50IChhY3Rpb25zLm1vdmUsIHNjb3BlX0Jhc2UsIGV2ZW50SG92ZXIsIHsgaG92ZXI6IHRydWUgfSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gTWFrZSB0aGUgcmFuZ2UgZHJhZ2dhYmxlLlxyXG5cdFx0aWYgKCBiZWhhdmlvdXIuZHJhZyApe1xyXG5cclxuXHRcdFx0c2NvcGVfQ29ubmVjdHMuZm9yRWFjaChmdW5jdGlvbiggY29ubmVjdCwgaW5kZXggKXtcclxuXHJcblx0XHRcdFx0aWYgKCBjb25uZWN0ID09PSBmYWxzZSB8fCBpbmRleCA9PT0gMCB8fCBpbmRleCA9PT0gc2NvcGVfQ29ubmVjdHMubGVuZ3RoIC0gMSApIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdHZhciBoYW5kbGVCZWZvcmUgPSBzY29wZV9IYW5kbGVzW2luZGV4IC0gMV07XHJcblx0XHRcdFx0dmFyIGhhbmRsZUFmdGVyID0gc2NvcGVfSGFuZGxlc1tpbmRleF07XHJcblx0XHRcdFx0dmFyIGV2ZW50SG9sZGVycyA9IFtjb25uZWN0XTtcclxuXHJcblx0XHRcdFx0YWRkQ2xhc3MoY29ubmVjdCwgb3B0aW9ucy5jc3NDbGFzc2VzLmRyYWdnYWJsZSk7XHJcblxyXG5cdFx0XHRcdC8vIFdoZW4gdGhlIHJhbmdlIGlzIGZpeGVkLCB0aGUgZW50aXJlIHJhbmdlIGNhblxyXG5cdFx0XHRcdC8vIGJlIGRyYWdnZWQgYnkgdGhlIGhhbmRsZXMuIFRoZSBoYW5kbGUgaW4gdGhlIGZpcnN0XHJcblx0XHRcdFx0Ly8gb3JpZ2luIHdpbGwgcHJvcGFnYXRlIHRoZSBzdGFydCBldmVudCB1cHdhcmQsXHJcblx0XHRcdFx0Ly8gYnV0IGl0IG5lZWRzIHRvIGJlIGJvdW5kIG1hbnVhbGx5IG9uIHRoZSBvdGhlci5cclxuXHRcdFx0XHRpZiAoIGJlaGF2aW91ci5maXhlZCApIHtcclxuXHRcdFx0XHRcdGV2ZW50SG9sZGVycy5wdXNoKGhhbmRsZUJlZm9yZS5jaGlsZHJlblswXSk7XHJcblx0XHRcdFx0XHRldmVudEhvbGRlcnMucHVzaChoYW5kbGVBZnRlci5jaGlsZHJlblswXSk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRldmVudEhvbGRlcnMuZm9yRWFjaChmdW5jdGlvbiggZXZlbnRIb2xkZXIgKSB7XHJcblx0XHRcdFx0XHRhdHRhY2hFdmVudCAoIGFjdGlvbnMuc3RhcnQsIGV2ZW50SG9sZGVyLCBldmVudFN0YXJ0LCB7XHJcblx0XHRcdFx0XHRcdGhhbmRsZXM6IFtoYW5kbGVCZWZvcmUsIGhhbmRsZUFmdGVyXSxcclxuXHRcdFx0XHRcdFx0aGFuZGxlTnVtYmVyczogW2luZGV4IC0gMSwgaW5kZXhdXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuLyohIEluIHRoaXMgZmlsZTogU2xpZGVyIGV2ZW50cyAobm90IGJyb3dzZXIgZXZlbnRzKTsgKi9cclxuXHJcblx0Ly8gQXR0YWNoIGFuIGV2ZW50IHRvIHRoaXMgc2xpZGVyLCBwb3NzaWJseSBpbmNsdWRpbmcgYSBuYW1lc3BhY2VcclxuXHRmdW5jdGlvbiBiaW5kRXZlbnQgKCBuYW1lc3BhY2VkRXZlbnQsIGNhbGxiYWNrICkge1xyXG5cdFx0c2NvcGVfRXZlbnRzW25hbWVzcGFjZWRFdmVudF0gPSBzY29wZV9FdmVudHNbbmFtZXNwYWNlZEV2ZW50XSB8fCBbXTtcclxuXHRcdHNjb3BlX0V2ZW50c1tuYW1lc3BhY2VkRXZlbnRdLnB1c2goY2FsbGJhY2spO1xyXG5cclxuXHRcdC8vIElmIHRoZSBldmVudCBib3VuZCBpcyAndXBkYXRlLCcgZmlyZSBpdCBpbW1lZGlhdGVseSBmb3IgYWxsIGhhbmRsZXMuXHJcblx0XHRpZiAoIG5hbWVzcGFjZWRFdmVudC5zcGxpdCgnLicpWzBdID09PSAndXBkYXRlJyApIHtcclxuXHRcdFx0c2NvcGVfSGFuZGxlcy5mb3JFYWNoKGZ1bmN0aW9uKGEsIGluZGV4KXtcclxuXHRcdFx0XHRmaXJlRXZlbnQoJ3VwZGF0ZScsIGluZGV4KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBVbmRvIGF0dGFjaG1lbnQgb2YgZXZlbnRcclxuXHRmdW5jdGlvbiByZW1vdmVFdmVudCAoIG5hbWVzcGFjZWRFdmVudCApIHtcclxuXHJcblx0XHR2YXIgZXZlbnQgPSBuYW1lc3BhY2VkRXZlbnQgJiYgbmFtZXNwYWNlZEV2ZW50LnNwbGl0KCcuJylbMF07XHJcblx0XHR2YXIgbmFtZXNwYWNlID0gZXZlbnQgJiYgbmFtZXNwYWNlZEV2ZW50LnN1YnN0cmluZyhldmVudC5sZW5ndGgpO1xyXG5cclxuXHRcdE9iamVjdC5rZXlzKHNjb3BlX0V2ZW50cykuZm9yRWFjaChmdW5jdGlvbiggYmluZCApe1xyXG5cclxuXHRcdFx0dmFyIHRFdmVudCA9IGJpbmQuc3BsaXQoJy4nKVswXTtcclxuXHRcdFx0dmFyIHROYW1lc3BhY2UgPSBiaW5kLnN1YnN0cmluZyh0RXZlbnQubGVuZ3RoKTtcclxuXHJcblx0XHRcdGlmICggKCFldmVudCB8fCBldmVudCA9PT0gdEV2ZW50KSAmJiAoIW5hbWVzcGFjZSB8fCBuYW1lc3BhY2UgPT09IHROYW1lc3BhY2UpICkge1xyXG5cdFx0XHRcdGRlbGV0ZSBzY29wZV9FdmVudHNbYmluZF07XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Ly8gRXh0ZXJuYWwgZXZlbnQgaGFuZGxpbmdcclxuXHRmdW5jdGlvbiBmaXJlRXZlbnQgKCBldmVudE5hbWUsIGhhbmRsZU51bWJlciwgdGFwICkge1xyXG5cclxuXHRcdE9iamVjdC5rZXlzKHNjb3BlX0V2ZW50cykuZm9yRWFjaChmdW5jdGlvbiggdGFyZ2V0RXZlbnQgKSB7XHJcblxyXG5cdFx0XHR2YXIgZXZlbnRUeXBlID0gdGFyZ2V0RXZlbnQuc3BsaXQoJy4nKVswXTtcclxuXHJcblx0XHRcdGlmICggZXZlbnROYW1lID09PSBldmVudFR5cGUgKSB7XHJcblx0XHRcdFx0c2NvcGVfRXZlbnRzW3RhcmdldEV2ZW50XS5mb3JFYWNoKGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcclxuXHJcblx0XHRcdFx0XHRjYWxsYmFjay5jYWxsKFxyXG5cdFx0XHRcdFx0XHQvLyBVc2UgdGhlIHNsaWRlciBwdWJsaWMgQVBJIGFzIHRoZSBzY29wZSAoJ3RoaXMnKVxyXG5cdFx0XHRcdFx0XHRzY29wZV9TZWxmLFxyXG5cdFx0XHRcdFx0XHQvLyBSZXR1cm4gdmFsdWVzIGFzIGFycmF5LCBzbyBhcmdfMVthcmdfMl0gaXMgYWx3YXlzIHZhbGlkLlxyXG5cdFx0XHRcdFx0XHRzY29wZV9WYWx1ZXMubWFwKG9wdGlvbnMuZm9ybWF0LnRvKSxcclxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGluZGV4LCAwIG9yIDFcclxuXHRcdFx0XHRcdFx0aGFuZGxlTnVtYmVyLFxyXG5cdFx0XHRcdFx0XHQvLyBVbmZvcm1hdHRlZCBzbGlkZXIgdmFsdWVzXHJcblx0XHRcdFx0XHRcdHNjb3BlX1ZhbHVlcy5zbGljZSgpLFxyXG5cdFx0XHRcdFx0XHQvLyBFdmVudCBpcyBmaXJlZCBieSB0YXAsIHRydWUgb3IgZmFsc2VcclxuXHRcdFx0XHRcdFx0dGFwIHx8IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHQvLyBMZWZ0IG9mZnNldCBvZiB0aGUgaGFuZGxlLCBpbiByZWxhdGlvbiB0byB0aGUgc2xpZGVyXHJcblx0XHRcdFx0XHRcdHNjb3BlX0xvY2F0aW9ucy5zbGljZSgpXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG4vKiEgSW4gdGhpcyBmaWxlOiBNZWNoYW5pY3MgZm9yIHNsaWRlciBvcGVyYXRpb24gKi9cclxuXHJcblx0ZnVuY3Rpb24gdG9QY3QgKCBwY3QgKSB7XHJcblx0XHRyZXR1cm4gcGN0ICsgJyUnO1xyXG5cdH1cclxuXHJcblx0Ly8gU3BsaXQgb3V0IHRoZSBoYW5kbGUgcG9zaXRpb25pbmcgbG9naWMgc28gdGhlIE1vdmUgZXZlbnQgY2FuIHVzZSBpdCwgdG9vXHJcblx0ZnVuY3Rpb24gY2hlY2tIYW5kbGVQb3NpdGlvbiAoIHJlZmVyZW5jZSwgaGFuZGxlTnVtYmVyLCB0bywgbG9va0JhY2t3YXJkLCBsb29rRm9yd2FyZCwgZ2V0VmFsdWUgKSB7XHJcblxyXG5cdFx0Ly8gRm9yIHNsaWRlcnMgd2l0aCBtdWx0aXBsZSBoYW5kbGVzLCBsaW1pdCBtb3ZlbWVudCB0byB0aGUgb3RoZXIgaGFuZGxlLlxyXG5cdFx0Ly8gQXBwbHkgdGhlIG1hcmdpbiBvcHRpb24gYnkgYWRkaW5nIGl0IHRvIHRoZSBoYW5kbGUgcG9zaXRpb25zLlxyXG5cdFx0aWYgKCBzY29wZV9IYW5kbGVzLmxlbmd0aCA+IDEgKSB7XHJcblxyXG5cdFx0XHRpZiAoIGxvb2tCYWNrd2FyZCAmJiBoYW5kbGVOdW1iZXIgPiAwICkge1xyXG5cdFx0XHRcdHRvID0gTWF0aC5tYXgodG8sIHJlZmVyZW5jZVtoYW5kbGVOdW1iZXIgLSAxXSArIG9wdGlvbnMubWFyZ2luKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBsb29rRm9yd2FyZCAmJiBoYW5kbGVOdW1iZXIgPCBzY29wZV9IYW5kbGVzLmxlbmd0aCAtIDEgKSB7XHJcblx0XHRcdFx0dG8gPSBNYXRoLm1pbih0bywgcmVmZXJlbmNlW2hhbmRsZU51bWJlciArIDFdIC0gb3B0aW9ucy5tYXJnaW4pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gVGhlIGxpbWl0IG9wdGlvbiBoYXMgdGhlIG9wcG9zaXRlIGVmZmVjdCwgbGltaXRpbmcgaGFuZGxlcyB0byBhXHJcblx0XHQvLyBtYXhpbXVtIGRpc3RhbmNlIGZyb20gYW5vdGhlci4gTGltaXQgbXVzdCBiZSA+IDAsIGFzIG90aGVyd2lzZVxyXG5cdFx0Ly8gaGFuZGxlcyB3b3VsZCBiZSB1bm1vdmVhYmxlLlxyXG5cdFx0aWYgKCBzY29wZV9IYW5kbGVzLmxlbmd0aCA+IDEgJiYgb3B0aW9ucy5saW1pdCApIHtcclxuXHJcblx0XHRcdGlmICggbG9va0JhY2t3YXJkICYmIGhhbmRsZU51bWJlciA+IDAgKSB7XHJcblx0XHRcdFx0dG8gPSBNYXRoLm1pbih0bywgcmVmZXJlbmNlW2hhbmRsZU51bWJlciAtIDFdICsgb3B0aW9ucy5saW1pdCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggbG9va0ZvcndhcmQgJiYgaGFuZGxlTnVtYmVyIDwgc2NvcGVfSGFuZGxlcy5sZW5ndGggLSAxICkge1xyXG5cdFx0XHRcdHRvID0gTWF0aC5tYXgodG8sIHJlZmVyZW5jZVtoYW5kbGVOdW1iZXIgKyAxXSAtIG9wdGlvbnMubGltaXQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gVGhlIHBhZGRpbmcgb3B0aW9uIGtlZXBzIHRoZSBoYW5kbGVzIGEgY2VydGFpbiBkaXN0YW5jZSBmcm9tIHRoZVxyXG5cdFx0Ly8gZWRnZXMgb2YgdGhlIHNsaWRlci4gUGFkZGluZyBtdXN0IGJlID4gMC5cclxuXHRcdGlmICggb3B0aW9ucy5wYWRkaW5nICkge1xyXG5cclxuXHRcdFx0aWYgKCBoYW5kbGVOdW1iZXIgPT09IDAgKSB7XHJcblx0XHRcdFx0dG8gPSBNYXRoLm1heCh0bywgb3B0aW9ucy5wYWRkaW5nWzBdKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKCBoYW5kbGVOdW1iZXIgPT09IHNjb3BlX0hhbmRsZXMubGVuZ3RoIC0gMSApIHtcclxuXHRcdFx0XHR0byA9IE1hdGgubWluKHRvLCAxMDAgLSBvcHRpb25zLnBhZGRpbmdbMV0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0dG8gPSBzY29wZV9TcGVjdHJ1bS5nZXRTdGVwKHRvKTtcclxuXHJcblx0XHQvLyBMaW1pdCBwZXJjZW50YWdlIHRvIHRoZSAwIC0gMTAwIHJhbmdlXHJcblx0XHR0byA9IGxpbWl0KHRvKTtcclxuXHJcblx0XHQvLyBSZXR1cm4gZmFsc2UgaWYgaGFuZGxlIGNhbid0IG1vdmVcclxuXHRcdGlmICggdG8gPT09IHJlZmVyZW5jZVtoYW5kbGVOdW1iZXJdICYmICFnZXRWYWx1ZSApIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0bztcclxuXHR9XHJcblxyXG5cdC8vIFVzZXMgc2xpZGVyIG9yaWVudGF0aW9uIHRvIGNyZWF0ZSBDU1MgcnVsZXMuIGEgPSBiYXNlIHZhbHVlO1xyXG5cdGZ1bmN0aW9uIGluUnVsZU9yZGVyICggdiwgYSApIHtcclxuXHRcdHZhciBvID0gb3B0aW9ucy5vcnQ7XHJcblx0XHRyZXR1cm4gKG8/YTp2KSArICcsICcgKyAobz92OmEpO1xyXG5cdH1cclxuXHJcblx0Ly8gTW92ZXMgaGFuZGxlKHMpIGJ5IGEgcGVyY2VudGFnZVxyXG5cdC8vIChib29sLCAlIHRvIG1vdmUsIFslIHdoZXJlIGhhbmRsZSBzdGFydGVkLCAuLi5dLCBbaW5kZXggaW4gc2NvcGVfSGFuZGxlcywgLi4uXSlcclxuXHRmdW5jdGlvbiBtb3ZlSGFuZGxlcyAoIHVwd2FyZCwgcHJvcG9zYWwsIGxvY2F0aW9ucywgaGFuZGxlTnVtYmVycyApIHtcclxuXHJcblx0XHR2YXIgcHJvcG9zYWxzID0gbG9jYXRpb25zLnNsaWNlKCk7XHJcblxyXG5cdFx0dmFyIGIgPSBbIXVwd2FyZCwgdXB3YXJkXTtcclxuXHRcdHZhciBmID0gW3Vwd2FyZCwgIXVwd2FyZF07XHJcblxyXG5cdFx0Ly8gQ29weSBoYW5kbGVOdW1iZXJzIHNvIHdlIGRvbid0IGNoYW5nZSB0aGUgZGF0YXNldFxyXG5cdFx0aGFuZGxlTnVtYmVycyA9IGhhbmRsZU51bWJlcnMuc2xpY2UoKTtcclxuXHJcblx0XHQvLyBDaGVjayB0byBzZWUgd2hpY2ggaGFuZGxlIGlzICdsZWFkaW5nJy5cclxuXHRcdC8vIElmIHRoYXQgb25lIGNhbid0IG1vdmUgdGhlIHNlY29uZCBjYW4ndCBlaXRoZXIuXHJcblx0XHRpZiAoIHVwd2FyZCApIHtcclxuXHRcdFx0aGFuZGxlTnVtYmVycy5yZXZlcnNlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU3RlcCAxOiBnZXQgdGhlIG1heGltdW0gcGVyY2VudGFnZSB0aGF0IGFueSBvZiB0aGUgaGFuZGxlcyBjYW4gbW92ZVxyXG5cdFx0aWYgKCBoYW5kbGVOdW1iZXJzLmxlbmd0aCA+IDEgKSB7XHJcblxyXG5cdFx0XHRoYW5kbGVOdW1iZXJzLmZvckVhY2goZnVuY3Rpb24oaGFuZGxlTnVtYmVyLCBvKSB7XHJcblxyXG5cdFx0XHRcdHZhciB0byA9IGNoZWNrSGFuZGxlUG9zaXRpb24ocHJvcG9zYWxzLCBoYW5kbGVOdW1iZXIsIHByb3Bvc2Fsc1toYW5kbGVOdW1iZXJdICsgcHJvcG9zYWwsIGJbb10sIGZbb10sIGZhbHNlKTtcclxuXHJcblx0XHRcdFx0Ly8gU3RvcCBpZiBvbmUgb2YgdGhlIGhhbmRsZXMgY2FuJ3QgbW92ZS5cclxuXHRcdFx0XHRpZiAoIHRvID09PSBmYWxzZSApIHtcclxuXHRcdFx0XHRcdHByb3Bvc2FsID0gMDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0cHJvcG9zYWwgPSB0byAtIHByb3Bvc2Fsc1toYW5kbGVOdW1iZXJdO1xyXG5cdFx0XHRcdFx0cHJvcG9zYWxzW2hhbmRsZU51bWJlcl0gPSB0bztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIElmIHVzaW5nIG9uZSBoYW5kbGUsIGNoZWNrIGJhY2t3YXJkIEFORCBmb3J3YXJkXHJcblx0XHRlbHNlIHtcclxuXHRcdFx0YiA9IGYgPSBbdHJ1ZV07XHJcblx0XHR9XHJcblxyXG5cdFx0dmFyIHN0YXRlID0gZmFsc2U7XHJcblxyXG5cdFx0Ly8gU3RlcCAyOiBUcnkgdG8gc2V0IHRoZSBoYW5kbGVzIHdpdGggdGhlIGZvdW5kIHBlcmNlbnRhZ2VcclxuXHRcdGhhbmRsZU51bWJlcnMuZm9yRWFjaChmdW5jdGlvbihoYW5kbGVOdW1iZXIsIG8pIHtcclxuXHRcdFx0c3RhdGUgPSBzZXRIYW5kbGUoaGFuZGxlTnVtYmVyLCBsb2NhdGlvbnNbaGFuZGxlTnVtYmVyXSArIHByb3Bvc2FsLCBiW29dLCBmW29dKSB8fCBzdGF0ZTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIFN0ZXAgMzogSWYgYSBoYW5kbGUgbW92ZWQsIGZpcmUgZXZlbnRzXHJcblx0XHRpZiAoIHN0YXRlICkge1xyXG5cdFx0XHRoYW5kbGVOdW1iZXJzLmZvckVhY2goZnVuY3Rpb24oaGFuZGxlTnVtYmVyKXtcclxuXHRcdFx0XHRmaXJlRXZlbnQoJ3VwZGF0ZScsIGhhbmRsZU51bWJlcik7XHJcblx0XHRcdFx0ZmlyZUV2ZW50KCdzbGlkZScsIGhhbmRsZU51bWJlcik7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gVGFrZXMgYSBiYXNlIHZhbHVlIGFuZCBhbiBvZmZzZXQuIFRoaXMgb2Zmc2V0IGlzIHVzZWQgZm9yIHRoZSBjb25uZWN0IGJhciBzaXplLlxyXG5cdC8vIEluIHRoZSBpbml0aWFsIGRlc2lnbiBmb3IgdGhpcyBmZWF0dXJlLCB0aGUgb3JpZ2luIGVsZW1lbnQgd2FzIDElIHdpZGUuXHJcblx0Ly8gVW5mb3J0dW5hdGVseSwgYSByb3VuZGluZyBidWcgaW4gQ2hyb21lIG1ha2VzIGl0IGltcG9zc2libGUgdG8gaW1wbGVtZW50IHRoaXMgZmVhdHVyZVxyXG5cdC8vIGluIHRoaXMgbWFubmVyOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD03OTgyMjNcclxuXHRmdW5jdGlvbiB0cmFuc2Zvcm1EaXJlY3Rpb24gKCBhLCBiICkge1xyXG5cdFx0cmV0dXJuIG9wdGlvbnMuZGlyID8gMTAwIC0gYSAtIGIgOiBhO1xyXG5cdH1cclxuXHJcblx0Ly8gVXBkYXRlcyBzY29wZV9Mb2NhdGlvbnMgYW5kIHNjb3BlX1ZhbHVlcywgdXBkYXRlcyB2aXN1YWwgc3RhdGVcclxuXHRmdW5jdGlvbiB1cGRhdGVIYW5kbGVQb3NpdGlvbiAoIGhhbmRsZU51bWJlciwgdG8gKSB7XHJcblxyXG5cdFx0Ly8gVXBkYXRlIGxvY2F0aW9ucy5cclxuXHRcdHNjb3BlX0xvY2F0aW9uc1toYW5kbGVOdW1iZXJdID0gdG87XHJcblxyXG5cdFx0Ly8gQ29udmVydCB0aGUgdmFsdWUgdG8gdGhlIHNsaWRlciBzdGVwcGluZy9yYW5nZS5cclxuXHRcdHNjb3BlX1ZhbHVlc1toYW5kbGVOdW1iZXJdID0gc2NvcGVfU3BlY3RydW0uZnJvbVN0ZXBwaW5nKHRvKTtcclxuXHJcblx0XHR2YXIgcnVsZSA9ICd0cmFuc2xhdGUoJyArIGluUnVsZU9yZGVyKHRvUGN0KHRyYW5zZm9ybURpcmVjdGlvbih0bywgMCkgLSBzY29wZV9EaXJPZmZzZXQpLCAnMCcpICsgJyknO1xyXG5cdFx0c2NvcGVfSGFuZGxlc1toYW5kbGVOdW1iZXJdLnN0eWxlW29wdGlvbnMudHJhbnNmb3JtUnVsZV0gPSBydWxlO1xyXG5cclxuXHRcdHVwZGF0ZUNvbm5lY3QoaGFuZGxlTnVtYmVyKTtcclxuXHRcdHVwZGF0ZUNvbm5lY3QoaGFuZGxlTnVtYmVyICsgMSk7XHJcblx0fVxyXG5cclxuXHQvLyBIYW5kbGVzIGJlZm9yZSB0aGUgc2xpZGVyIG1pZGRsZSBhcmUgc3RhY2tlZCBsYXRlciA9IGhpZ2hlcixcclxuXHQvLyBIYW5kbGVzIGFmdGVyIHRoZSBtaWRkbGUgbGF0ZXIgaXMgbG93ZXJcclxuXHQvLyBbWzddIFs4XSAuLi4uLi4uLi4uIHwgLi4uLi4uLi4uLiBbNV0gWzRdXHJcblx0ZnVuY3Rpb24gc2V0WmluZGV4ICggKSB7XHJcblxyXG5cdFx0c2NvcGVfSGFuZGxlTnVtYmVycy5mb3JFYWNoKGZ1bmN0aW9uKGhhbmRsZU51bWJlcil7XHJcblx0XHRcdHZhciBkaXIgPSAoc2NvcGVfTG9jYXRpb25zW2hhbmRsZU51bWJlcl0gPiA1MCA/IC0xIDogMSk7XHJcblx0XHRcdHZhciB6SW5kZXggPSAzICsgKHNjb3BlX0hhbmRsZXMubGVuZ3RoICsgKGRpciAqIGhhbmRsZU51bWJlcikpO1xyXG5cdFx0XHRzY29wZV9IYW5kbGVzW2hhbmRsZU51bWJlcl0uc3R5bGUuekluZGV4ID0gekluZGV4O1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvLyBUZXN0IHN1Z2dlc3RlZCB2YWx1ZXMgYW5kIGFwcGx5IG1hcmdpbiwgc3RlcC5cclxuXHRmdW5jdGlvbiBzZXRIYW5kbGUgKCBoYW5kbGVOdW1iZXIsIHRvLCBsb29rQmFja3dhcmQsIGxvb2tGb3J3YXJkICkge1xyXG5cclxuXHRcdHRvID0gY2hlY2tIYW5kbGVQb3NpdGlvbihzY29wZV9Mb2NhdGlvbnMsIGhhbmRsZU51bWJlciwgdG8sIGxvb2tCYWNrd2FyZCwgbG9va0ZvcndhcmQsIGZhbHNlKTtcclxuXHJcblx0XHRpZiAoIHRvID09PSBmYWxzZSApIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHVwZGF0ZUhhbmRsZVBvc2l0aW9uKGhhbmRsZU51bWJlciwgdG8pO1xyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0Ly8gVXBkYXRlcyBzdHlsZSBhdHRyaWJ1dGUgZm9yIGNvbm5lY3Qgbm9kZXNcclxuXHRmdW5jdGlvbiB1cGRhdGVDb25uZWN0ICggaW5kZXggKSB7XHJcblxyXG5cdFx0Ly8gU2tpcCBjb25uZWN0cyBzZXQgdG8gZmFsc2VcclxuXHRcdGlmICggIXNjb3BlX0Nvbm5lY3RzW2luZGV4XSApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHZhciBsID0gMDtcclxuXHRcdHZhciBoID0gMTAwO1xyXG5cclxuXHRcdGlmICggaW5kZXggIT09IDAgKSB7XHJcblx0XHRcdGwgPSBzY29wZV9Mb2NhdGlvbnNbaW5kZXggLSAxXTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIGluZGV4ICE9PSBzY29wZV9Db25uZWN0cy5sZW5ndGggLSAxICkge1xyXG5cdFx0XHRoID0gc2NvcGVfTG9jYXRpb25zW2luZGV4XTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBXZSB1c2UgdHdvIHJ1bGVzOlxyXG5cdFx0Ly8gJ3RyYW5zbGF0ZScgdG8gY2hhbmdlIHRoZSBsZWZ0L3RvcCBvZmZzZXQ7XHJcblx0XHQvLyAnc2NhbGUnIHRvIGNoYW5nZSB0aGUgd2lkdGggb2YgdGhlIGVsZW1lbnQ7XHJcblx0XHQvLyBBcyB0aGUgZWxlbWVudCBoYXMgYSB3aWR0aCBvZiAxMDAlLCBhIHRyYW5zbGF0aW9uIG9mIDEwMCUgaXMgZXF1YWwgdG8gMTAwJSBvZiB0aGUgcGFyZW50ICgubm9VaS1iYXNlKVxyXG5cdFx0dmFyIGNvbm5lY3RXaWR0aCA9IGggLSBsO1xyXG5cdFx0dmFyIHRyYW5zbGF0ZVJ1bGUgPSAndHJhbnNsYXRlKCcgKyBpblJ1bGVPcmRlcih0b1BjdCh0cmFuc2Zvcm1EaXJlY3Rpb24obCwgY29ubmVjdFdpZHRoKSksICcwJykgKyAnKSc7XHJcblx0XHR2YXIgc2NhbGVSdWxlID0gJ3NjYWxlKCcgKyBpblJ1bGVPcmRlcihjb25uZWN0V2lkdGggLyAxMDAsICcxJykgKyAnKSc7XHJcblxyXG5cdFx0c2NvcGVfQ29ubmVjdHNbaW5kZXhdLnN0eWxlW29wdGlvbnMudHJhbnNmb3JtUnVsZV0gPSB0cmFuc2xhdGVSdWxlICsgJyAnICsgc2NhbGVSdWxlO1xyXG5cdH1cclxuXHJcbi8qISBJbiB0aGlzIGZpbGU6IEFsbCBtZXRob2RzIGV2ZW50dWFsbHkgZXhwb3NlZCBpbiBzbGlkZXIubm9VaVNsaWRlci4uLiAqL1xyXG5cclxuXHQvLyBQYXJzZXMgdmFsdWUgcGFzc2VkIHRvIC5zZXQgbWV0aG9kLiBSZXR1cm5zIGN1cnJlbnQgdmFsdWUgaWYgbm90IHBhcnNlLWFibGUuXHJcblx0ZnVuY3Rpb24gcmVzb2x2ZVRvVmFsdWUgKCB0bywgaGFuZGxlTnVtYmVyICkge1xyXG5cclxuXHRcdC8vIFNldHRpbmcgd2l0aCBudWxsIGluZGljYXRlcyBhbiAnaWdub3JlJy5cclxuXHRcdC8vIElucHV0dGluZyAnZmFsc2UnIGlzIGludmFsaWQuXHJcblx0XHRpZiAoIHRvID09PSBudWxsIHx8IHRvID09PSBmYWxzZSB8fCB0byA9PT0gdW5kZWZpbmVkICkge1xyXG5cdFx0XHRyZXR1cm4gc2NvcGVfTG9jYXRpb25zW2hhbmRsZU51bWJlcl07XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSWYgYSBmb3JtYXR0ZWQgbnVtYmVyIHdhcyBwYXNzZWQsIGF0dGVtcHQgdG8gZGVjb2RlIGl0LlxyXG5cdFx0aWYgKCB0eXBlb2YgdG8gPT09ICdudW1iZXInICkge1xyXG5cdFx0XHR0byA9IFN0cmluZyh0byk7XHJcblx0XHR9XHJcblxyXG5cdFx0dG8gPSBvcHRpb25zLmZvcm1hdC5mcm9tKHRvKTtcclxuXHRcdHRvID0gc2NvcGVfU3BlY3RydW0udG9TdGVwcGluZyh0byk7XHJcblxyXG5cdFx0Ly8gSWYgcGFyc2luZyB0aGUgbnVtYmVyIGZhaWxlZCwgdXNlIHRoZSBjdXJyZW50IHZhbHVlLlxyXG5cdFx0aWYgKCB0byA9PT0gZmFsc2UgfHwgaXNOYU4odG8pICkge1xyXG5cdFx0XHRyZXR1cm4gc2NvcGVfTG9jYXRpb25zW2hhbmRsZU51bWJlcl07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRvO1xyXG5cdH1cclxuXHJcblx0Ly8gU2V0IHRoZSBzbGlkZXIgdmFsdWUuXHJcblx0ZnVuY3Rpb24gdmFsdWVTZXQgKCBpbnB1dCwgZmlyZVNldEV2ZW50ICkge1xyXG5cclxuXHRcdHZhciB2YWx1ZXMgPSBhc0FycmF5KGlucHV0KTtcclxuXHRcdHZhciBpc0luaXQgPSBzY29wZV9Mb2NhdGlvbnNbMF0gPT09IHVuZGVmaW5lZDtcclxuXHJcblx0XHQvLyBFdmVudCBmaXJlcyBieSBkZWZhdWx0XHJcblx0XHRmaXJlU2V0RXZlbnQgPSAoZmlyZVNldEV2ZW50ID09PSB1bmRlZmluZWQgPyB0cnVlIDogISFmaXJlU2V0RXZlbnQpO1xyXG5cclxuXHRcdC8vIEFuaW1hdGlvbiBpcyBvcHRpb25hbC5cclxuXHRcdC8vIE1ha2Ugc3VyZSB0aGUgaW5pdGlhbCB2YWx1ZXMgd2VyZSBzZXQgYmVmb3JlIHVzaW5nIGFuaW1hdGVkIHBsYWNlbWVudC5cclxuXHRcdGlmICggb3B0aW9ucy5hbmltYXRlICYmICFpc0luaXQgKSB7XHJcblx0XHRcdGFkZENsYXNzRm9yKHNjb3BlX1RhcmdldCwgb3B0aW9ucy5jc3NDbGFzc2VzLnRhcCwgb3B0aW9ucy5hbmltYXRpb25EdXJhdGlvbik7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gRmlyc3QgcGFzcywgd2l0aG91dCBsb29rQWhlYWQgYnV0IHdpdGggbG9va0JhY2t3YXJkLiBWYWx1ZXMgYXJlIHNldCBmcm9tIGxlZnQgdG8gcmlnaHQuXHJcblx0XHRzY29wZV9IYW5kbGVOdW1iZXJzLmZvckVhY2goZnVuY3Rpb24oaGFuZGxlTnVtYmVyKXtcclxuXHRcdFx0c2V0SGFuZGxlKGhhbmRsZU51bWJlciwgcmVzb2x2ZVRvVmFsdWUodmFsdWVzW2hhbmRsZU51bWJlcl0sIGhhbmRsZU51bWJlciksIHRydWUsIGZhbHNlKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIFNlY29uZCBwYXNzLiBOb3cgdGhhdCBhbGwgYmFzZSB2YWx1ZXMgYXJlIHNldCwgYXBwbHkgY29uc3RyYWludHNcclxuXHRcdHNjb3BlX0hhbmRsZU51bWJlcnMuZm9yRWFjaChmdW5jdGlvbihoYW5kbGVOdW1iZXIpe1xyXG5cdFx0XHRzZXRIYW5kbGUoaGFuZGxlTnVtYmVyLCBzY29wZV9Mb2NhdGlvbnNbaGFuZGxlTnVtYmVyXSwgdHJ1ZSwgdHJ1ZSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRzZXRaaW5kZXgoKTtcclxuXHJcblx0XHRzY29wZV9IYW5kbGVOdW1iZXJzLmZvckVhY2goZnVuY3Rpb24oaGFuZGxlTnVtYmVyKXtcclxuXHJcblx0XHRcdGZpcmVFdmVudCgndXBkYXRlJywgaGFuZGxlTnVtYmVyKTtcclxuXHJcblx0XHRcdC8vIEZpcmUgdGhlIGV2ZW50IG9ubHkgZm9yIGhhbmRsZXMgdGhhdCByZWNlaXZlZCBhIG5ldyB2YWx1ZSwgYXMgcGVyICM1NzlcclxuXHRcdFx0aWYgKCB2YWx1ZXNbaGFuZGxlTnVtYmVyXSAhPT0gbnVsbCAmJiBmaXJlU2V0RXZlbnQgKSB7XHJcblx0XHRcdFx0ZmlyZUV2ZW50KCdzZXQnLCBoYW5kbGVOdW1iZXIpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8vIFJlc2V0IHNsaWRlciB0byBpbml0aWFsIHZhbHVlc1xyXG5cdGZ1bmN0aW9uIHZhbHVlUmVzZXQgKCBmaXJlU2V0RXZlbnQgKSB7XHJcblx0XHR2YWx1ZVNldChvcHRpb25zLnN0YXJ0LCBmaXJlU2V0RXZlbnQpO1xyXG5cdH1cclxuXHJcblx0Ly8gR2V0IHRoZSBzbGlkZXIgdmFsdWUuXHJcblx0ZnVuY3Rpb24gdmFsdWVHZXQgKCApIHtcclxuXHJcblx0XHR2YXIgdmFsdWVzID0gc2NvcGVfVmFsdWVzLm1hcChvcHRpb25zLmZvcm1hdC50byk7XHJcblxyXG5cdFx0Ly8gSWYgb25seSBvbmUgaGFuZGxlIGlzIHVzZWQsIHJldHVybiBhIHNpbmdsZSB2YWx1ZS5cclxuXHRcdGlmICggdmFsdWVzLmxlbmd0aCA9PT0gMSApe1xyXG5cdFx0XHRyZXR1cm4gdmFsdWVzWzBdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB2YWx1ZXM7XHJcblx0fVxyXG5cclxuXHQvLyBSZW1vdmVzIGNsYXNzZXMgZnJvbSB0aGUgcm9vdCBhbmQgZW1wdGllcyBpdC5cclxuXHRmdW5jdGlvbiBkZXN0cm95ICggKSB7XHJcblxyXG5cdFx0Zm9yICggdmFyIGtleSBpbiBvcHRpb25zLmNzc0NsYXNzZXMgKSB7XHJcblx0XHRcdGlmICggIW9wdGlvbnMuY3NzQ2xhc3Nlcy5oYXNPd25Qcm9wZXJ0eShrZXkpICkgeyBjb250aW51ZTsgfVxyXG5cdFx0XHRyZW1vdmVDbGFzcyhzY29wZV9UYXJnZXQsIG9wdGlvbnMuY3NzQ2xhc3Nlc1trZXldKTtcclxuXHRcdH1cclxuXHJcblx0XHR3aGlsZSAoc2NvcGVfVGFyZ2V0LmZpcnN0Q2hpbGQpIHtcclxuXHRcdFx0c2NvcGVfVGFyZ2V0LnJlbW92ZUNoaWxkKHNjb3BlX1RhcmdldC5maXJzdENoaWxkKTtcclxuXHRcdH1cclxuXHJcblx0XHRkZWxldGUgc2NvcGVfVGFyZ2V0Lm5vVWlTbGlkZXI7XHJcblx0fVxyXG5cclxuXHQvLyBHZXQgdGhlIGN1cnJlbnQgc3RlcCBzaXplIGZvciB0aGUgc2xpZGVyLlxyXG5cdGZ1bmN0aW9uIGdldEN1cnJlbnRTdGVwICggKSB7XHJcblxyXG5cdFx0Ly8gQ2hlY2sgYWxsIGxvY2F0aW9ucywgbWFwIHRoZW0gdG8gdGhlaXIgc3RlcHBpbmcgcG9pbnQuXHJcblx0XHQvLyBHZXQgdGhlIHN0ZXAgcG9pbnQsIHRoZW4gZmluZCBpdCBpbiB0aGUgaW5wdXQgbGlzdC5cclxuXHRcdHJldHVybiBzY29wZV9Mb2NhdGlvbnMubWFwKGZ1bmN0aW9uKCBsb2NhdGlvbiwgaW5kZXggKXtcclxuXHJcblx0XHRcdHZhciBuZWFyYnlTdGVwcyA9IHNjb3BlX1NwZWN0cnVtLmdldE5lYXJieVN0ZXBzKCBsb2NhdGlvbiApO1xyXG5cdFx0XHR2YXIgdmFsdWUgPSBzY29wZV9WYWx1ZXNbaW5kZXhdO1xyXG5cdFx0XHR2YXIgaW5jcmVtZW50ID0gbmVhcmJ5U3RlcHMudGhpc1N0ZXAuc3RlcDtcclxuXHRcdFx0dmFyIGRlY3JlbWVudCA9IG51bGw7XHJcblxyXG5cdFx0XHQvLyBJZiB0aGUgbmV4dCB2YWx1ZSBpbiB0aGlzIHN0ZXAgbW92ZXMgaW50byB0aGUgbmV4dCBzdGVwLFxyXG5cdFx0XHQvLyB0aGUgaW5jcmVtZW50IGlzIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBzdGVwIC0gdGhlIGN1cnJlbnQgdmFsdWVcclxuXHRcdFx0aWYgKCBpbmNyZW1lbnQgIT09IGZhbHNlICkge1xyXG5cdFx0XHRcdGlmICggdmFsdWUgKyBpbmNyZW1lbnQgPiBuZWFyYnlTdGVwcy5zdGVwQWZ0ZXIuc3RhcnRWYWx1ZSApIHtcclxuXHRcdFx0XHRcdGluY3JlbWVudCA9IG5lYXJieVN0ZXBzLnN0ZXBBZnRlci5zdGFydFZhbHVlIC0gdmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0Ly8gSWYgdGhlIHZhbHVlIGlzIGJleW9uZCB0aGUgc3RhcnRpbmcgcG9pbnRcclxuXHRcdFx0aWYgKCB2YWx1ZSA+IG5lYXJieVN0ZXBzLnRoaXNTdGVwLnN0YXJ0VmFsdWUgKSB7XHJcblx0XHRcdFx0ZGVjcmVtZW50ID0gbmVhcmJ5U3RlcHMudGhpc1N0ZXAuc3RlcDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZWxzZSBpZiAoIG5lYXJieVN0ZXBzLnN0ZXBCZWZvcmUuc3RlcCA9PT0gZmFsc2UgKSB7XHJcblx0XHRcdFx0ZGVjcmVtZW50ID0gZmFsc2U7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIElmIGEgaGFuZGxlIGlzIGF0IHRoZSBzdGFydCBvZiBhIHN0ZXAsIGl0IGFsd2F5cyBzdGVwcyBiYWNrIGludG8gdGhlIHByZXZpb3VzIHN0ZXAgZmlyc3RcclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0ZGVjcmVtZW50ID0gdmFsdWUgLSBuZWFyYnlTdGVwcy5zdGVwQmVmb3JlLmhpZ2hlc3RTdGVwO1xyXG5cdFx0XHR9XHJcblxyXG5cclxuXHRcdFx0Ly8gTm93LCBpZiBhdCB0aGUgc2xpZGVyIGVkZ2VzLCB0aGVyZSBpcyBub3QgaW4vZGVjcmVtZW50XHJcblx0XHRcdGlmICggbG9jYXRpb24gPT09IDEwMCApIHtcclxuXHRcdFx0XHRpbmNyZW1lbnQgPSBudWxsO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRlbHNlIGlmICggbG9jYXRpb24gPT09IDAgKSB7XHJcblx0XHRcdFx0ZGVjcmVtZW50ID0gbnVsbDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gQXMgcGVyICMzOTEsIHRoZSBjb21wYXJpc29uIGZvciB0aGUgZGVjcmVtZW50IHN0ZXAgY2FuIGhhdmUgc29tZSByb3VuZGluZyBpc3N1ZXMuXHJcblx0XHRcdHZhciBzdGVwRGVjaW1hbHMgPSBzY29wZV9TcGVjdHJ1bS5jb3VudFN0ZXBEZWNpbWFscygpO1xyXG5cclxuXHRcdFx0Ly8gUm91bmQgcGVyICMzOTFcclxuXHRcdFx0aWYgKCBpbmNyZW1lbnQgIT09IG51bGwgJiYgaW5jcmVtZW50ICE9PSBmYWxzZSApIHtcclxuXHRcdFx0XHRpbmNyZW1lbnQgPSBOdW1iZXIoaW5jcmVtZW50LnRvRml4ZWQoc3RlcERlY2ltYWxzKSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICggZGVjcmVtZW50ICE9PSBudWxsICYmIGRlY3JlbWVudCAhPT0gZmFsc2UgKSB7XHJcblx0XHRcdFx0ZGVjcmVtZW50ID0gTnVtYmVyKGRlY3JlbWVudC50b0ZpeGVkKHN0ZXBEZWNpbWFscykpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gW2RlY3JlbWVudCwgaW5jcmVtZW50XTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Ly8gVXBkYXRlYWJsZTogbWFyZ2luLCBsaW1pdCwgcGFkZGluZywgc3RlcCwgcmFuZ2UsIGFuaW1hdGUsIHNuYXBcclxuXHRmdW5jdGlvbiB1cGRhdGVPcHRpb25zICggb3B0aW9uc1RvVXBkYXRlLCBmaXJlU2V0RXZlbnQgKSB7XHJcblxyXG5cdFx0Ly8gU3BlY3RydW0gaXMgY3JlYXRlZCB1c2luZyB0aGUgcmFuZ2UsIHNuYXAsIGRpcmVjdGlvbiBhbmQgc3RlcCBvcHRpb25zLlxyXG5cdFx0Ly8gJ3NuYXAnIGFuZCAnc3RlcCcgY2FuIGJlIHVwZGF0ZWQuXHJcblx0XHQvLyBJZiAnc25hcCcgYW5kICdzdGVwJyBhcmUgbm90IHBhc3NlZCwgdGhleSBzaG91bGQgcmVtYWluIHVuY2hhbmdlZC5cclxuXHRcdHZhciB2ID0gdmFsdWVHZXQoKTtcclxuXHJcblx0XHR2YXIgdXBkYXRlQWJsZSA9IFsnbWFyZ2luJywgJ2xpbWl0JywgJ3BhZGRpbmcnLCAncmFuZ2UnLCAnYW5pbWF0ZScsICdzbmFwJywgJ3N0ZXAnLCAnZm9ybWF0J107XHJcblxyXG5cdFx0Ly8gT25seSBjaGFuZ2Ugb3B0aW9ucyB0aGF0IHdlJ3JlIGFjdHVhbGx5IHBhc3NlZCB0byB1cGRhdGUuXHJcblx0XHR1cGRhdGVBYmxlLmZvckVhY2goZnVuY3Rpb24obmFtZSl7XHJcblx0XHRcdGlmICggb3B0aW9uc1RvVXBkYXRlW25hbWVdICE9PSB1bmRlZmluZWQgKSB7XHJcblx0XHRcdFx0b3JpZ2luYWxPcHRpb25zW25hbWVdID0gb3B0aW9uc1RvVXBkYXRlW25hbWVdO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHR2YXIgbmV3T3B0aW9ucyA9IHRlc3RPcHRpb25zKG9yaWdpbmFsT3B0aW9ucyk7XHJcblxyXG5cdFx0Ly8gTG9hZCBuZXcgb3B0aW9ucyBpbnRvIHRoZSBzbGlkZXIgc3RhdGVcclxuXHRcdHVwZGF0ZUFibGUuZm9yRWFjaChmdW5jdGlvbihuYW1lKXtcclxuXHRcdFx0aWYgKCBvcHRpb25zVG9VcGRhdGVbbmFtZV0gIT09IHVuZGVmaW5lZCApIHtcclxuXHRcdFx0XHRvcHRpb25zW25hbWVdID0gbmV3T3B0aW9uc1tuYW1lXTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0c2NvcGVfU3BlY3RydW0gPSBuZXdPcHRpb25zLnNwZWN0cnVtO1xyXG5cclxuXHRcdC8vIExpbWl0LCBtYXJnaW4gYW5kIHBhZGRpbmcgZGVwZW5kIG9uIHRoZSBzcGVjdHJ1bSBidXQgYXJlIHN0b3JlZCBvdXRzaWRlIG9mIGl0LiAoIzY3NylcclxuXHRcdG9wdGlvbnMubWFyZ2luID0gbmV3T3B0aW9ucy5tYXJnaW47XHJcblx0XHRvcHRpb25zLmxpbWl0ID0gbmV3T3B0aW9ucy5saW1pdDtcclxuXHRcdG9wdGlvbnMucGFkZGluZyA9IG5ld09wdGlvbnMucGFkZGluZztcclxuXHJcblx0XHQvLyBVcGRhdGUgcGlwcywgcmVtb3ZlcyBleGlzdGluZy5cclxuXHRcdGlmICggb3B0aW9ucy5waXBzICkge1xyXG5cdFx0XHRwaXBzKG9wdGlvbnMucGlwcyk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSW52YWxpZGF0ZSB0aGUgY3VycmVudCBwb3NpdGlvbmluZyBzbyB2YWx1ZVNldCBmb3JjZXMgYW4gdXBkYXRlLlxyXG5cdFx0c2NvcGVfTG9jYXRpb25zID0gW107XHJcblx0XHR2YWx1ZVNldChvcHRpb25zVG9VcGRhdGUuc3RhcnQgfHwgdiwgZmlyZVNldEV2ZW50KTtcclxuXHR9XHJcblxyXG4vKiEgSW4gdGhpcyBmaWxlOiBDYWxscyB0byBmdW5jdGlvbnMuIEFsbCBvdGhlciBzY29wZV8gZmlsZXMgZGVmaW5lIGZ1bmN0aW9ucyBvbmx5OyAqL1xyXG5cclxuXHQvLyBDcmVhdGUgdGhlIGJhc2UgZWxlbWVudCwgaW5pdGlhbGl6ZSBIVE1MIGFuZCBzZXQgY2xhc3Nlcy5cclxuXHQvLyBBZGQgaGFuZGxlcyBhbmQgY29ubmVjdCBlbGVtZW50cy5cclxuXHRhZGRTbGlkZXIoc2NvcGVfVGFyZ2V0KTtcclxuXHRhZGRFbGVtZW50cyhvcHRpb25zLmNvbm5lY3QsIHNjb3BlX0Jhc2UpO1xyXG5cclxuXHQvLyBBdHRhY2ggdXNlciBldmVudHMuXHJcblx0YmluZFNsaWRlckV2ZW50cyhvcHRpb25zLmV2ZW50cyk7XHJcblxyXG5cdC8vIFVzZSB0aGUgcHVibGljIHZhbHVlIG1ldGhvZCB0byBzZXQgdGhlIHN0YXJ0IHZhbHVlcy5cclxuXHR2YWx1ZVNldChvcHRpb25zLnN0YXJ0KTtcclxuXHJcblx0c2NvcGVfU2VsZiA9IHtcclxuXHRcdGRlc3Ryb3k6IGRlc3Ryb3ksXHJcblx0XHRzdGVwczogZ2V0Q3VycmVudFN0ZXAsXHJcblx0XHRvbjogYmluZEV2ZW50LFxyXG5cdFx0b2ZmOiByZW1vdmVFdmVudCxcclxuXHRcdGdldDogdmFsdWVHZXQsXHJcblx0XHRzZXQ6IHZhbHVlU2V0LFxyXG5cdFx0cmVzZXQ6IHZhbHVlUmVzZXQsXHJcblx0XHQvLyBFeHBvc2VkIGZvciB1bml0IHRlc3RpbmcsIGRvbid0IHVzZSB0aGlzIGluIHlvdXIgYXBwbGljYXRpb24uXHJcblx0XHRfX21vdmVIYW5kbGVzOiBmdW5jdGlvbihhLCBiLCBjKSB7IG1vdmVIYW5kbGVzKGEsIGIsIHNjb3BlX0xvY2F0aW9ucywgYyk7IH0sXHJcblx0XHRvcHRpb25zOiBvcmlnaW5hbE9wdGlvbnMsIC8vIElzc3VlICM2MDAsICM2NzhcclxuXHRcdHVwZGF0ZU9wdGlvbnM6IHVwZGF0ZU9wdGlvbnMsXHJcblx0XHR0YXJnZXQ6IHNjb3BlX1RhcmdldCwgLy8gSXNzdWUgIzU5N1xyXG5cdFx0cmVtb3ZlUGlwczogcmVtb3ZlUGlwcyxcclxuXHRcdHBpcHM6IHBpcHMgLy8gSXNzdWUgIzU5NFxyXG5cdH07XHJcblxyXG5cdGlmICggb3B0aW9ucy5waXBzICkge1xyXG5cdFx0cGlwcyhvcHRpb25zLnBpcHMpO1xyXG5cdH1cclxuXHJcblx0aWYgKCBvcHRpb25zLnRvb2x0aXBzICkge1xyXG5cdFx0dG9vbHRpcHMoKTtcclxuXHR9XHJcblxyXG5cdGFyaWEoKTtcclxuXHJcblx0cmV0dXJuIHNjb3BlX1NlbGY7XHJcblxyXG59XHJcblxyXG5cclxuXHQvLyBSdW4gdGhlIHN0YW5kYXJkIGluaXRpYWxpemVyXHJcblx0ZnVuY3Rpb24gaW5pdGlhbGl6ZSAoIHRhcmdldCwgb3JpZ2luYWxPcHRpb25zICkge1xyXG5cclxuXHRcdGlmICggIXRhcmdldCB8fCAhdGFyZ2V0Lm5vZGVOYW1lICkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub1VpU2xpZGVyIChcIiArIFZFUlNJT04gKyBcIik6IGNyZWF0ZSByZXF1aXJlcyBhIHNpbmdsZSBlbGVtZW50LCBnb3Q6IFwiICsgdGFyZ2V0KTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBUaHJvdyBhbiBlcnJvciBpZiB0aGUgc2xpZGVyIHdhcyBhbHJlYWR5IGluaXRpYWxpemVkLlxyXG5cdFx0aWYgKCB0YXJnZXQubm9VaVNsaWRlciApIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm9VaVNsaWRlciAoXCIgKyBWRVJTSU9OICsgXCIpOiBTbGlkZXIgd2FzIGFscmVhZHkgaW5pdGlhbGl6ZWQuXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFRlc3QgdGhlIG9wdGlvbnMgYW5kIGNyZWF0ZSB0aGUgc2xpZGVyIGVudmlyb25tZW50O1xyXG5cdFx0dmFyIG9wdGlvbnMgPSB0ZXN0T3B0aW9ucyggb3JpZ2luYWxPcHRpb25zLCB0YXJnZXQgKTtcclxuXHRcdHZhciBhcGkgPSBzY29wZSggdGFyZ2V0LCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMgKTtcclxuXHJcblx0XHR0YXJnZXQubm9VaVNsaWRlciA9IGFwaTtcclxuXHJcblx0XHRyZXR1cm4gYXBpO1xyXG5cdH1cclxuXHJcblx0Ly8gVXNlIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGEgZnVuY3Rpb24gZm9yIGZ1dHVyZSBleHBhbmRhYmlsaXR5O1xyXG5cdHJldHVybiB7XHJcblx0XHR2ZXJzaW9uOiBWRVJTSU9OLFxyXG5cdFx0Y3JlYXRlOiBpbml0aWFsaXplXHJcblx0fTtcclxuXHJcbn0pKTsiLCIoZnVuY3Rpb24gKGdsb2JhbCl7XG5cbnZhciAkIFx0XHRcdFx0PSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snalF1ZXJ5J10gOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsWydqUXVlcnknXSA6IG51bGwpO1xudmFyIHN0YXRlIFx0XHRcdD0gcmVxdWlyZSgnLi9zdGF0ZScpO1xudmFyIHByb2Nlc3NfZm9ybSBcdD0gcmVxdWlyZSgnLi9wcm9jZXNzX2Zvcm0nKTtcbnZhciBub1VpU2xpZGVyXHRcdD0gcmVxdWlyZSgnbm91aXNsaWRlcicpO1xuLy92YXIgY29va2llcyAgICAgICAgID0gcmVxdWlyZSgnanMtY29va2llJyk7XG52YXIgdGhpcmRQYXJ0eSAgICAgID0gcmVxdWlyZSgnLi90aGlyZHBhcnR5Jyk7XG5cbndpbmRvdy5zZWFyY2hBbmRGaWx0ZXIgPSB7XG4gICAgZXh0ZW5zaW9uczogW10sXG4gICAgcmVnaXN0ZXJFeHRlbnNpb246IGZ1bmN0aW9uKCBleHRlbnNpb25OYW1lICkge1xuICAgICAgICB0aGlzLmV4dGVuc2lvbnMucHVzaCggZXh0ZW5zaW9uTmFtZSApO1xuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3B0aW9ucylcbntcbiAgICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgICAgIHN0YXJ0T3BlbmVkOiBmYWxzZSxcbiAgICAgICAgaXNJbml0OiB0cnVlLFxuICAgICAgICBhY3Rpb246IFwiXCJcbiAgICB9O1xuXG4gICAgdmFyIG9wdHMgPSBqUXVlcnkuZXh0ZW5kKGRlZmF1bHRzLCBvcHRpb25zKTtcbiAgICBcbiAgICB0aGlyZFBhcnR5LmluaXQoKTtcbiAgICBcbiAgICAvL2xvb3AgdGhyb3VnaCBlYWNoIGl0ZW0gbWF0Y2hlZFxuICAgIHRoaXMuZWFjaChmdW5jdGlvbigpXG4gICAge1xuXG4gICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgdGhpcy5zZmlkID0gJHRoaXMuYXR0cihcImRhdGEtc2YtZm9ybS1pZFwiKTtcblxuICAgICAgICBzdGF0ZS5hZGRTZWFyY2hGb3JtKHRoaXMuc2ZpZCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy4kZmllbGRzID0gJHRoaXMuZmluZChcIj4gdWwgPiBsaVwiKTsgLy9hIHJlZmVyZW5jZSB0byBlYWNoIGZpZWxkcyBwYXJlbnQgTElcblxuICAgICAgICB0aGlzLmVuYWJsZV90YXhvbm9teV9hcmNoaXZlcyA9ICR0aGlzLmF0dHIoJ2RhdGEtdGF4b25vbXktYXJjaGl2ZXMnKTtcbiAgICAgICAgdGhpcy5jdXJyZW50X3RheG9ub215X2FyY2hpdmUgPSAkdGhpcy5hdHRyKCdkYXRhLWN1cnJlbnQtdGF4b25vbXktYXJjaGl2ZScpO1xuXG4gICAgICAgIGlmKHR5cGVvZih0aGlzLmVuYWJsZV90YXhvbm9teV9hcmNoaXZlcyk9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlX3RheG9ub215X2FyY2hpdmVzID0gXCIwXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYodHlwZW9mKHRoaXMuY3VycmVudF90YXhvbm9teV9hcmNoaXZlKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50X3RheG9ub215X2FyY2hpdmUgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvY2Vzc19mb3JtLmluaXQoc2VsZi5lbmFibGVfdGF4b25vbXlfYXJjaGl2ZXMsIHNlbGYuY3VycmVudF90YXhvbm9teV9hcmNoaXZlKTtcbiAgICAgICAgLy9wcm9jZXNzX2Zvcm0uc2V0VGF4QXJjaGl2ZVJlc3VsdHNVcmwoc2VsZik7XG4gICAgICAgIHByb2Nlc3NfZm9ybS5lbmFibGVJbnB1dHMoc2VsZik7XG5cbiAgICAgICAgaWYodHlwZW9mKHRoaXMuZXh0cmFfcXVlcnlfcGFyYW1zKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5leHRyYV9xdWVyeV9wYXJhbXMgPSB7YWxsOiB7fSwgcmVzdWx0czoge30sIGFqYXg6IHt9fTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgdGhpcy50ZW1wbGF0ZV9pc19sb2FkZWQgPSAkdGhpcy5hdHRyKFwiZGF0YS10ZW1wbGF0ZS1sb2FkZWRcIik7XG4gICAgICAgIHRoaXMuaXNfYWpheCA9ICR0aGlzLmF0dHIoXCJkYXRhLWFqYXhcIik7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VfbnVtYmVyID0gJHRoaXMuYXR0cignZGF0YS1pbnN0YW5jZS1jb3VudCcpO1xuICAgICAgICB0aGlzLiRhamF4X3Jlc3VsdHNfY29udGFpbmVyID0galF1ZXJ5KCR0aGlzLmF0dHIoXCJkYXRhLWFqYXgtdGFyZ2V0XCIpKTtcblxuICAgICAgICB0aGlzLmFqYXhfdXBkYXRlX3NlY3Rpb25zID0gJHRoaXMuYXR0cihcImRhdGEtYWpheC11cGRhdGUtc2VjdGlvbnNcIikgPyBKU09OLnBhcnNlKCAkdGhpcy5hdHRyKFwiZGF0YS1hamF4LXVwZGF0ZS1zZWN0aW9uc1wiKSApIDogW107XG4gICAgICAgIHRoaXMucmVwbGFjZV9yZXN1bHRzID0gJHRoaXMuYXR0cihcImRhdGEtcmVwbGFjZS1yZXN1bHRzXCIpID09PSBcIjBcIiA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMucmVzdWx0c191cmwgPSAkdGhpcy5hdHRyKFwiZGF0YS1yZXN1bHRzLXVybFwiKTtcbiAgICAgICAgdGhpcy5kZWJ1Z19tb2RlID0gJHRoaXMuYXR0cihcImRhdGEtZGVidWctbW9kZVwiKTtcbiAgICAgICAgdGhpcy51cGRhdGVfYWpheF91cmwgPSAkdGhpcy5hdHRyKFwiZGF0YS11cGRhdGUtYWpheC11cmxcIik7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbl90eXBlID0gJHRoaXMuYXR0cihcImRhdGEtYWpheC1wYWdpbmF0aW9uLXR5cGVcIik7XG4gICAgICAgIHRoaXMuYXV0b19jb3VudCA9ICR0aGlzLmF0dHIoXCJkYXRhLWF1dG8tY291bnRcIik7XG4gICAgICAgIHRoaXMuYXV0b19jb3VudF9yZWZyZXNoX21vZGUgPSAkdGhpcy5hdHRyKFwiZGF0YS1hdXRvLWNvdW50LXJlZnJlc2gtbW9kZVwiKTtcbiAgICAgICAgdGhpcy5vbmx5X3Jlc3VsdHNfYWpheCA9ICR0aGlzLmF0dHIoXCJkYXRhLW9ubHktcmVzdWx0cy1hamF4XCIpOyAvL2lmIHdlIGFyZSBub3Qgb24gdGhlIHJlc3VsdHMgcGFnZSwgcmVkaXJlY3QgcmF0aGVyIHRoYW4gdHJ5IHRvIGxvYWQgdmlhIGFqYXhcbiAgICAgICAgdGhpcy5zY3JvbGxfdG9fcG9zID0gJHRoaXMuYXR0cihcImRhdGEtc2Nyb2xsLXRvLXBvc1wiKTtcbiAgICAgICAgdGhpcy5jdXN0b21fc2Nyb2xsX3RvID0gJHRoaXMuYXR0cihcImRhdGEtY3VzdG9tLXNjcm9sbC10b1wiKTtcbiAgICAgICAgdGhpcy5zY3JvbGxfb25fYWN0aW9uID0gJHRoaXMuYXR0cihcImRhdGEtc2Nyb2xsLW9uLWFjdGlvblwiKTtcbiAgICAgICAgdGhpcy5sYW5nX2NvZGUgPSAkdGhpcy5hdHRyKFwiZGF0YS1sYW5nLWNvZGVcIik7XG4gICAgICAgIHRoaXMuYWpheF91cmwgPSAkdGhpcy5hdHRyKCdkYXRhLWFqYXgtdXJsJyk7XG4gICAgICAgIHRoaXMuYWpheF9mb3JtX3VybCA9ICR0aGlzLmF0dHIoJ2RhdGEtYWpheC1mb3JtLXVybCcpO1xuICAgICAgICB0aGlzLmlzX3J0bCA9ICR0aGlzLmF0dHIoJ2RhdGEtaXMtcnRsJyk7XG5cbiAgICAgICAgdGhpcy5kaXNwbGF5X3Jlc3VsdF9tZXRob2QgPSAkdGhpcy5hdHRyKCdkYXRhLWRpc3BsYXktcmVzdWx0LW1ldGhvZCcpO1xuICAgICAgICB0aGlzLm1haW50YWluX3N0YXRlID0gJHRoaXMuYXR0cignZGF0YS1tYWludGFpbi1zdGF0ZScpO1xuICAgICAgICB0aGlzLmFqYXhfYWN0aW9uID0gXCJcIjtcbiAgICAgICAgdGhpcy5sYXN0X3N1Ym1pdF9xdWVyeV9wYXJhbXMgPSBcIlwiO1xuXG4gICAgICAgIHRoaXMuY3VycmVudF9wYWdlZCA9IHBhcnNlSW50KCR0aGlzLmF0dHIoJ2RhdGEtaW5pdC1wYWdlZCcpKTtcbiAgICAgICAgdGhpcy5sYXN0X2xvYWRfbW9yZV9odG1sID0gXCJcIjtcbiAgICAgICAgdGhpcy5sb2FkX21vcmVfaHRtbCA9IFwiXCI7XG4gICAgICAgIHRoaXMuYWpheF9kYXRhX3R5cGUgPSAkdGhpcy5hdHRyKCdkYXRhLWFqYXgtZGF0YS10eXBlJyk7XG4gICAgICAgIHRoaXMuYWpheF90YXJnZXRfYXR0ciA9ICR0aGlzLmF0dHIoXCJkYXRhLWFqYXgtdGFyZ2V0XCIpO1xuICAgICAgICB0aGlzLnVzZV9oaXN0b3J5X2FwaSA9ICR0aGlzLmF0dHIoXCJkYXRhLXVzZS1oaXN0b3J5LWFwaVwiKTtcbiAgICAgICAgdGhpcy5pc19zdWJtaXR0aW5nID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5sYXN0X2FqYXhfcmVxdWVzdCA9IG51bGw7XG5cbiAgICAgICAgaWYodHlwZW9mKHRoaXMucmVzdWx0c19odG1sKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5yZXN1bHRzX2h0bWwgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mKHRoaXMudXNlX2hpc3RvcnlfYXBpKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51c2VfaGlzdG9yeV9hcGkgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mKHRoaXMucGFnaW5hdGlvbl90eXBlKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uX3R5cGUgPSBcIm5vcm1hbFwiO1xuICAgICAgICB9XG4gICAgICAgIGlmKHR5cGVvZih0aGlzLmN1cnJlbnRfcGFnZWQpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRfcGFnZWQgPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mKHRoaXMuYWpheF90YXJnZXRfYXR0cik9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWpheF90YXJnZXRfYXR0ciA9IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YodGhpcy5hamF4X3VybCk9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWpheF91cmwgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mKHRoaXMuYWpheF9mb3JtX3VybCk9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuYWpheF9mb3JtX3VybCA9IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YodGhpcy5yZXN1bHRzX3VybCk9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0c191cmwgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mKHRoaXMuc2Nyb2xsX3RvX3Bvcyk9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsX3RvX3BvcyA9IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YodGhpcy5zY3JvbGxfb25fYWN0aW9uKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxfb25fYWN0aW9uID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBpZih0eXBlb2YodGhpcy5jdXN0b21fc2Nyb2xsX3RvKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jdXN0b21fc2Nyb2xsX3RvID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRjdXN0b21fc2Nyb2xsX3RvID0galF1ZXJ5KHRoaXMuY3VzdG9tX3Njcm9sbF90byk7XG5cbiAgICAgICAgaWYodHlwZW9mKHRoaXMudXBkYXRlX2FqYXhfdXJsKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfYWpheF91cmwgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mKHRoaXMuZGVidWdfbW9kZSk9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWdfbW9kZSA9IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YodGhpcy5hamF4X3RhcmdldF9vYmplY3QpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmFqYXhfdGFyZ2V0X29iamVjdCA9IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YodGhpcy50ZW1wbGF0ZV9pc19sb2FkZWQpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlX2lzX2xvYWRlZCA9IFwiMFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mKHRoaXMuYXV0b19jb3VudF9yZWZyZXNoX21vZGUpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLmF1dG9fY291bnRfcmVmcmVzaF9tb2RlID0gXCIwXCI7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFqYXhfbGlua3Nfc2VsZWN0b3IgPSAkdGhpcy5hdHRyKFwiZGF0YS1hamF4LWxpbmtzLXNlbGVjdG9yXCIpO1xuXG5cbiAgICAgICAgdGhpcy5hdXRvX3VwZGF0ZSA9ICR0aGlzLmF0dHIoXCJkYXRhLWF1dG8tdXBkYXRlXCIpO1xuICAgICAgICB0aGlzLmlucHV0VGltZXIgPSAwO1xuXG4gICAgICAgIHRoaXMuc2V0SW5maW5pdGVTY3JvbGxDb250YWluZXIgPSBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgbmF2aWdhdGUgYXdheSBmcm9tIHNlYXJjaCByZXN1bHRzLCBhbmQgdGhlbiBwcmVzcyBiYWNrLFxuICAgICAgICAgICAgLy8gaXNfbWF4X3BhZ2VkIGlzIHJldGFpbmVkLCBzbyB3ZSBvbmx5IHdhbnQgdG8gc2V0IGl0IHRvIGZhbHNlIGlmXG4gICAgICAgICAgICAvLyB3ZSBhcmUgaW5pdGFsaXppbmcgdGhlIHJlc3VsdHMgcGFnZSB0aGUgZmlyc3QgdGltZSAtIHNvIGp1c3QgXG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIHZhciBpcyB1bmRlZmluZWQgKGFzIGl0IHNob3VsZCBiZSBvbiBmaXJzdCB1c2UpO1xuICAgICAgICAgICAgaWYgKCB0eXBlb2YgKCB0aGlzLmlzX21heF9wYWdlZCApID09PSAndW5kZWZpbmVkJyApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzX21heF9wYWdlZCA9IGZhbHNlOyAvL2ZvciBsb2FkIG1vcmUgb25seSwgb25jZSB3ZSBkZXRlY3Qgd2UncmUgYXQgdGhlIGVuZCBzZXQgdGhpcyB0byB0cnVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXNlX3Njcm9sbF9sb2FkZXIgPSAkdGhpcy5hdHRyKCdkYXRhLXNob3ctc2Nyb2xsLWxvYWRlcicpO1xuICAgICAgICAgICAgdGhpcy5pbmZpbml0ZV9zY3JvbGxfY29udGFpbmVyID0gJHRoaXMuYXR0cignZGF0YS1pbmZpbml0ZS1zY3JvbGwtY29udGFpbmVyJyk7XG4gICAgICAgICAgICB0aGlzLmluZmluaXRlX3Njcm9sbF90cmlnZ2VyX2Ftb3VudCA9ICR0aGlzLmF0dHIoJ2RhdGEtaW5maW5pdGUtc2Nyb2xsLXRyaWdnZXInKTtcbiAgICAgICAgICAgIHRoaXMuaW5maW5pdGVfc2Nyb2xsX3Jlc3VsdF9jbGFzcyA9ICR0aGlzLmF0dHIoJ2RhdGEtaW5maW5pdGUtc2Nyb2xsLXJlc3VsdC1jbGFzcycpO1xuICAgICAgICAgICAgdGhpcy4kaW5maW5pdGVfc2Nyb2xsX2NvbnRhaW5lciA9IHRoaXMuJGFqYXhfcmVzdWx0c19jb250YWluZXI7XG5cbiAgICAgICAgICAgIGlmKHR5cGVvZih0aGlzLmluZmluaXRlX3Njcm9sbF9jb250YWluZXIpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5maW5pdGVfc2Nyb2xsX2NvbnRhaW5lciA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy4kaW5maW5pdGVfc2Nyb2xsX2NvbnRhaW5lciA9IGpRdWVyeSh0aGlzLmFqYXhfdGFyZ2V0X2F0dHIgKyAnICcgKyB0aGlzLmluZmluaXRlX3Njcm9sbF9jb250YWluZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZih0eXBlb2YodGhpcy5pbmZpbml0ZV9zY3JvbGxfcmVzdWx0X2NsYXNzKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZmluaXRlX3Njcm9sbF9yZXN1bHRfY2xhc3MgPSBcIlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZih0eXBlb2YodGhpcy51c2Vfc2Nyb2xsX2xvYWRlcik9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2Vfc2Nyb2xsX2xvYWRlciA9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zZXRJbmZpbml0ZVNjcm9sbENvbnRhaW5lcigpO1xuXG4gICAgICAgIC8qIGZ1bmN0aW9ucyAqL1xuXG4gICAgICAgIHRoaXMucmVzZXQgPSBmdW5jdGlvbihzdWJtaXRfZm9ybSlcbiAgICAgICAge1xuXG4gICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybShzdWJtaXRfZm9ybSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5wdXRVcGRhdGUgPSBmdW5jdGlvbihkZWxheUR1cmF0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih0eXBlb2YoZGVsYXlEdXJhdGlvbik9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIGRlbGF5RHVyYXRpb24gPSAzMDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlbGYucmVzZXRUaW1lcihkZWxheUR1cmF0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Qb3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgdmFyIGNhblNjcm9sbCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmKHNlbGYuaXNfYWpheD09MSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZihzZWxmLnNjcm9sbF90b19wb3M9PVwid2luZG93XCIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwO1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYoc2VsZi5zY3JvbGxfdG9fcG9zPT1cImZvcm1cIilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9ICR0aGlzLm9mZnNldCgpLnRvcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZihzZWxmLnNjcm9sbF90b19wb3M9PVwicmVzdWx0c1wiKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoc2VsZi4kYWpheF9yZXN1bHRzX2NvbnRhaW5lci5sZW5ndGg+MClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2VsZi4kYWpheF9yZXN1bHRzX2NvbnRhaW5lci5vZmZzZXQoKS50b3A7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZihzZWxmLnNjcm9sbF90b19wb3M9PVwiY3VzdG9tXCIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAvL2N1c3RvbV9zY3JvbGxfdG9cbiAgICAgICAgICAgICAgICAgICAgaWYoc2VsZi4kY3VzdG9tX3Njcm9sbF90by5sZW5ndGg+MClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2VsZi4kY3VzdG9tX3Njcm9sbF90by5vZmZzZXQoKS50b3A7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuU2Nyb2xsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYoY2FuU2Nyb2xsKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJChcImh0bWwsIGJvZHlcIikuc3RvcCgpLmFuaW1hdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wOiBvZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgfSwgXCJub3JtYWxcIiwgXCJlYXNlT3V0UXVhZFwiICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5hdHRhY2hBY3RpdmVDbGFzcyA9IGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgICAgIC8vY2hlY2sgdG8gc2VlIGlmIHdlIGFyZSB1c2luZyBhamF4ICYgYXV0byBjb3VudFxuICAgICAgICAgICAgLy9pZiBub3QsIHRoZSBzZWFyY2ggZm9ybSBkb2VzIG5vdCBnZXQgcmVsb2FkZWQsIHNvIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzZi1vcHRpb24tYWN0aXZlIGNsYXNzIG9uIGFsbCBmaWVsZHNcblxuICAgICAgICAgICAgJHRoaXMub24oJ2NoYW5nZScsICdpbnB1dFt0eXBlPVwicmFkaW9cIl0sIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSwgc2VsZWN0JywgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgJGN0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICB2YXIgJGN0aGlzX3BhcmVudCA9ICRjdGhpcy5jbG9zZXN0KFwibGlbZGF0YS1zZi1maWVsZC1uYW1lXVwiKTtcbiAgICAgICAgICAgICAgICB2YXIgdGhpc190YWcgPSAkY3RoaXMucHJvcChcInRhZ05hbWVcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB2YXIgaW5wdXRfdHlwZSA9ICRjdGhpcy5hdHRyKFwidHlwZVwiKTtcbiAgICAgICAgICAgICAgICB2YXIgcGFyZW50X3RhZyA9ICRjdGhpc19wYXJlbnQucHJvcChcInRhZ05hbWVcIikudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgICAgIGlmKCh0aGlzX3RhZz09XCJpbnB1dFwiKSYmKChpbnB1dF90eXBlPT1cInJhZGlvXCIpfHwoaW5wdXRfdHlwZT09XCJjaGVja2JveFwiKSkgJiYgKHBhcmVudF90YWc9PVwibGlcIikpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGFsbF9vcHRpb25zID0gJGN0aGlzX3BhcmVudC5wYXJlbnQoKS5maW5kKCdsaScpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGFsbF9vcHRpb25zX2ZpZWxkcyA9ICRjdGhpc19wYXJlbnQucGFyZW50KCkuZmluZCgnaW5wdXQ6Y2hlY2tlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICRhbGxfb3B0aW9ucy5yZW1vdmVDbGFzcyhcInNmLW9wdGlvbi1hY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgICAgICRhbGxfb3B0aW9uc19maWVsZHMuZWFjaChmdW5jdGlvbigpe1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJHBhcmVudCA9ICQodGhpcykuY2xvc2VzdChcImxpXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmVudC5hZGRDbGFzcyhcInNmLW9wdGlvbi1hY3RpdmVcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZih0aGlzX3RhZz09XCJzZWxlY3RcIilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkYWxsX29wdGlvbnMgPSAkY3RoaXMuY2hpbGRyZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgJGFsbF9vcHRpb25zLnJlbW92ZUNsYXNzKFwic2Ytb3B0aW9uLWFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRoaXNfdmFsID0gJGN0aGlzLnZhbCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aGlzX2Fycl92YWwgPSAodHlwZW9mIHRoaXNfdmFsID09ICdzdHJpbmcnIHx8IHRoaXNfdmFsIGluc3RhbmNlb2YgU3RyaW5nKSA/IFt0aGlzX3ZhbF0gOiB0aGlzX3ZhbDtcblxuICAgICAgICAgICAgICAgICAgICAkKHRoaXNfYXJyX3ZhbCkuZWFjaChmdW5jdGlvbihpLCB2YWx1ZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY3RoaXMuZmluZChcIm9wdGlvblt2YWx1ZT0nXCIrdmFsdWUrXCInXVwiKS5hZGRDbGFzcyhcInNmLW9wdGlvbi1hY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmluaXRBdXRvVXBkYXRlRXZlbnRzID0gZnVuY3Rpb24oKXtcblxuICAgICAgICAgICAgLyogYXV0byB1cGRhdGUgKi9cbiAgICAgICAgICAgIGlmKChzZWxmLmF1dG9fdXBkYXRlPT0xKXx8KHNlbGYuYXV0b19jb3VudF9yZWZyZXNoX21vZGU9PTEpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICR0aGlzLm9uKCdjaGFuZ2UnLCAnaW5wdXRbdHlwZT1cInJhZGlvXCJdLCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sIHNlbGVjdCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dFVwZGF0ZSgyMDApO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgJHRoaXMub24oJ2lucHV0JywgJ2lucHV0W3R5cGU9XCJudW1iZXJcIl0nLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXRVcGRhdGUoODAwKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHZhciAkdGV4dElucHV0ID0gJHRoaXMuZmluZCgnaW5wdXRbdHlwZT1cInRleHRcIl06bm90KC5zZi1kYXRlcGlja2VyKScpO1xuICAgICAgICAgICAgICAgIHZhciBsYXN0VmFsdWUgPSAkdGV4dElucHV0LnZhbCgpO1xuXG4gICAgICAgICAgICAgICAgJHRoaXMub24oJ2lucHV0JywgJ2lucHV0W3R5cGU9XCJ0ZXh0XCJdOm5vdCguc2YtZGF0ZXBpY2tlciknLCBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZihsYXN0VmFsdWUhPSR0ZXh0SW5wdXQudmFsKCkpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXRVcGRhdGUoMTIwMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSAkdGV4dElucHV0LnZhbCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgICAgICAkdGhpcy5vbigna2V5cHJlc3MnLCAnaW5wdXRbdHlwZT1cInRleHRcIl06bm90KC5zZi1kYXRlcGlja2VyKScsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS53aGljaCA9PSAxMyl7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3VibWl0Rm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vJHRoaXMub24oJ2lucHV0JywgJ2lucHV0LnNmLWRhdGVwaWNrZXInLCBzZWxmLmRhdGVJbnB1dFR5cGUpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy90aGlzLmluaXRBdXRvVXBkYXRlRXZlbnRzKCk7XG5cblxuICAgICAgICB0aGlzLmNsZWFyVGltZXIgPSBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChzZWxmLmlucHV0VGltZXIpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJlc2V0VGltZXIgPSBmdW5jdGlvbihkZWxheUR1cmF0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoc2VsZi5pbnB1dFRpbWVyKTtcbiAgICAgICAgICAgIHNlbGYuaW5wdXRUaW1lciA9IHNldFRpbWVvdXQoc2VsZi5mb3JtVXBkYXRlZCwgZGVsYXlEdXJhdGlvbik7XG5cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFkZERhdGVQaWNrZXJzID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgJGRhdGVfcGlja2VyID0gJHRoaXMuZmluZChcIi5zZi1kYXRlcGlja2VyXCIpO1xuXG4gICAgICAgICAgICBpZigkZGF0ZV9waWNrZXIubGVuZ3RoPjApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgJGRhdGVfcGlja2VyLmVhY2goZnVuY3Rpb24oKXtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZUZvcm1hdCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRlRHJvcGRvd25ZZWFyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRlRHJvcGRvd25Nb250aCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciAkY2xvc2VzdF9kYXRlX3dyYXAgPSAkdGhpcy5jbG9zZXN0KFwiLnNmX2RhdGVfZmllbGRcIik7XG4gICAgICAgICAgICAgICAgICAgIGlmKCRjbG9zZXN0X2RhdGVfd3JhcC5sZW5ndGg+MClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdCA9ICRjbG9zZXN0X2RhdGVfd3JhcC5hdHRyKFwiZGF0YS1kYXRlLWZvcm1hdFwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGNsb3Nlc3RfZGF0ZV93cmFwLmF0dHIoXCJkYXRhLWRhdGUtdXNlLXllYXItZHJvcGRvd25cIik9PTEpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZURyb3Bkb3duWWVhciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZigkY2xvc2VzdF9kYXRlX3dyYXAuYXR0cihcImRhdGEtZGF0ZS11c2UtbW9udGgtZHJvcGRvd25cIik9PTEpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZURyb3Bkb3duTW9udGggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGVQaWNrZXJPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd090aGVyTW9udGhzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uKGUsIGZyb21fZmllbGQpeyBzZWxmLmRhdGVTZWxlY3QoZSwgZnJvbV9maWVsZCwgJCh0aGlzKSk7IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0OiBkYXRlRm9ybWF0LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VNb250aDogZGF0ZURyb3Bkb3duTW9udGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VZZWFyOiBkYXRlRHJvcGRvd25ZZWFyXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYoc2VsZi5pc19ydGw9PTEpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVQaWNrZXJPcHRpb25zLmRpcmVjdGlvbiA9IFwicnRsXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAkdGhpcy5kYXRlcGlja2VyKGRhdGVQaWNrZXJPcHRpb25zKTtcblxuICAgICAgICAgICAgICAgICAgICBpZihzZWxmLmxhbmdfY29kZSE9XCJcIilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJC5kYXRlcGlja2VyLnNldERlZmF1bHRzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZXh0ZW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2RhdGVGb3JtYXQnOmRhdGVGb3JtYXR9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmRhdGVwaWNrZXIucmVnaW9uYWxbIHNlbGYubGFuZ19jb2RlXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQuZGF0ZXBpY2tlci5zZXREZWZhdWx0cyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmV4dGVuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydkYXRlRm9ybWF0JzpkYXRlRm9ybWF0fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5kYXRlcGlja2VyLnJlZ2lvbmFsW1wiZW5cIl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYoJCgnLmxsLXNraW4tbWVsb24nKS5sZW5ndGg9PTApe1xuXG4gICAgICAgICAgICAgICAgICAgICRkYXRlX3BpY2tlci5kYXRlcGlja2VyKCd3aWRnZXQnKS53cmFwKCc8ZGl2IGNsYXNzPVwibGwtc2tpbi1tZWxvbiBzZWFyY2hhbmRmaWx0ZXItZGF0ZS1waWNrZXJcIi8+Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5kYXRlU2VsZWN0ID0gZnVuY3Rpb24oZSwgZnJvbV9maWVsZCwgJHRoaXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciAkaW5wdXRfZmllbGQgPSAkKGZyb21fZmllbGQuaW5wdXQuZ2V0KDApKTtcbiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7XG5cbiAgICAgICAgICAgIHZhciAkZGF0ZV9maWVsZHMgPSAkaW5wdXRfZmllbGQuY2xvc2VzdCgnW2RhdGEtc2YtZmllbGQtaW5wdXQtdHlwZT1cImRhdGVyYW5nZVwiXSwgW2RhdGEtc2YtZmllbGQtaW5wdXQtdHlwZT1cImRhdGVcIl0nKTtcbiAgICAgICAgICAgICRkYXRlX2ZpZWxkcy5lYWNoKGZ1bmN0aW9uKGUsIGluZGV4KXtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB2YXIgJHRmX2RhdGVfcGlja2VycyA9ICQodGhpcykuZmluZChcIi5zZi1kYXRlcGlja2VyXCIpO1xuICAgICAgICAgICAgICAgIHZhciBub19kYXRlX3BpY2tlcnMgPSAkdGZfZGF0ZV9waWNrZXJzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZihub19kYXRlX3BpY2tlcnM+MSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlbiBpdCBpcyBhIGRhdGUgcmFuZ2UsIHNvIG1ha2Ugc3VyZSBib3RoIGZpZWxkcyBhcmUgZmlsbGVkIGJlZm9yZSB1cGRhdGluZ1xuICAgICAgICAgICAgICAgICAgICB2YXIgZHBfY291bnRlciA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkcF9lbXB0eV9maWVsZF9jb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICR0Zl9kYXRlX3BpY2tlcnMuZWFjaChmdW5jdGlvbigpe1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZigkKHRoaXMpLnZhbCgpPT1cIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwX2VtcHR5X2ZpZWxkX2NvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRwX2NvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYoZHBfZW1wdHlfZmllbGRfY291bnQ9PTApXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXRVcGRhdGUoMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dFVwZGF0ZSgxKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYWRkUmFuZ2VTbGlkZXJzID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgJG1ldGFfcmFuZ2UgPSAkdGhpcy5maW5kKFwiLnNmLW1ldGEtcmFuZ2Utc2xpZGVyXCIpO1xuXG4gICAgICAgICAgICBpZigkbWV0YV9yYW5nZS5sZW5ndGg+MClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAkbWV0YV9yYW5nZS5lYWNoKGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1pbiA9ICR0aGlzLmF0dHIoXCJkYXRhLW1pblwiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heCA9ICR0aGlzLmF0dHIoXCJkYXRhLW1heFwiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNtaW4gPSAkdGhpcy5hdHRyKFwiZGF0YS1zdGFydC1taW5cIik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzbWF4ID0gJHRoaXMuYXR0cihcImRhdGEtc3RhcnQtbWF4XCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGlzcGxheV92YWx1ZV9hcyA9ICR0aGlzLmF0dHIoXCJkYXRhLWRpc3BsYXktdmFsdWVzLWFzXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RlcCA9ICR0aGlzLmF0dHIoXCJkYXRhLXN0ZXBcIik7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkc3RhcnRfdmFsID0gJHRoaXMuZmluZCgnLnNmLXJhbmdlLW1pbicpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGVuZF92YWwgPSAkdGhpcy5maW5kKCcuc2YtcmFuZ2UtbWF4Jyk7XG5cblxuICAgICAgICAgICAgICAgICAgICB2YXIgZGVjaW1hbF9wbGFjZXMgPSAkdGhpcy5hdHRyKFwiZGF0YS1kZWNpbWFsLXBsYWNlc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRob3VzYW5kX3NlcGVyYXRvciA9ICR0aGlzLmF0dHIoXCJkYXRhLXRob3VzYW5kLXNlcGVyYXRvclwiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlY2ltYWxfc2VwZXJhdG9yID0gJHRoaXMuYXR0cihcImRhdGEtZGVjaW1hbC1zZXBlcmF0b3JcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkX2Zvcm1hdCA9IHdOdW1iKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcms6IGRlY2ltYWxfc2VwZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbHM6IHBhcnNlRmxvYXQoZGVjaW1hbF9wbGFjZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhvdXNhbmQ6IHRob3VzYW5kX3NlcGVyYXRvclxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuXG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIG1pbl91bmZvcm1hdHRlZCA9IHBhcnNlRmxvYXQoc21pbik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtaW5fZm9ybWF0dGVkID0gZmllbGRfZm9ybWF0LnRvKHBhcnNlRmxvYXQoc21pbikpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4X2Zvcm1hdHRlZCA9IGZpZWxkX2Zvcm1hdC50byhwYXJzZUZsb2F0KHNtYXgpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heF91bmZvcm1hdHRlZCA9IHBhcnNlRmxvYXQoc21heCk7XG4gICAgICAgICAgICAgICAgICAgIC8vYWxlcnQobWluX2Zvcm1hdHRlZCk7XG4gICAgICAgICAgICAgICAgICAgIC8vYWxlcnQobWF4X2Zvcm1hdHRlZCk7XG4gICAgICAgICAgICAgICAgICAgIC8vYWxlcnQoZGlzcGxheV92YWx1ZV9hcyk7XG5cblxuICAgICAgICAgICAgICAgICAgICBpZihkaXNwbGF5X3ZhbHVlX2FzPT1cInRleHRpbnB1dFwiKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkc3RhcnRfdmFsLnZhbChtaW5fZm9ybWF0dGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRlbmRfdmFsLnZhbChtYXhfZm9ybWF0dGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGRpc3BsYXlfdmFsdWVfYXM9PVwidGV4dFwiKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkc3RhcnRfdmFsLmh0bWwobWluX2Zvcm1hdHRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZW5kX3ZhbC5odG1sKG1heF9mb3JtYXR0ZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICB2YXIgbm9VSU9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByYW5nZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtaW4nOiBbIHBhcnNlRmxvYXQobWluKSBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXgnOiBbIHBhcnNlRmxvYXQobWF4KSBdXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IFttaW5fZm9ybWF0dGVkLCBtYXhfZm9ybWF0dGVkXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXM6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDogcGFyc2VGbG9hdChzdGVwKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3VyOiAnZXh0ZW5kLXRhcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IGZpZWxkX2Zvcm1hdFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG5cblxuICAgICAgICAgICAgICAgICAgICBpZihzZWxmLmlzX3J0bD09MSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9VSU9wdGlvbnMuZGlyZWN0aW9uID0gXCJydGxcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBzbGlkZXJfb2JqZWN0ID0gJCh0aGlzKS5maW5kKFwiLm1ldGEtc2xpZGVyXCIpWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmKCBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YoIHNsaWRlcl9vYmplY3Qubm9VaVNsaWRlciApICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9kZXN0cm95IGlmIGl0IGV4aXN0cy4uIHRoaXMgbWVhbnMgc29tZWhvdyBhbm90aGVyIGluc3RhbmNlIGhhZCBpbml0aWFsaXNlZCBpdC4uXG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXJfb2JqZWN0Lm5vVWlTbGlkZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbm9VaVNsaWRlci5jcmVhdGUoc2xpZGVyX29iamVjdCwgbm9VSU9wdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICRzdGFydF92YWwub2ZmKCk7XG4gICAgICAgICAgICAgICAgICAgICRzdGFydF92YWwub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXJfb2JqZWN0Lm5vVWlTbGlkZXIuc2V0KFskKHRoaXMpLnZhbCgpLCBudWxsXSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICRlbmRfdmFsLm9mZigpO1xuICAgICAgICAgICAgICAgICAgICAkZW5kX3ZhbC5vbignY2hhbmdlJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlcl9vYmplY3Qubm9VaVNsaWRlci5zZXQoW251bGwsICQodGhpcykudmFsKCldKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8kc3RhcnRfdmFsLmh0bWwobWluX2Zvcm1hdHRlZCk7XG4gICAgICAgICAgICAgICAgICAgIC8vJGVuZF92YWwuaHRtbChtYXhfZm9ybWF0dGVkKTtcblxuICAgICAgICAgICAgICAgICAgICBzbGlkZXJfb2JqZWN0Lm5vVWlTbGlkZXIub2ZmKCd1cGRhdGUnKTtcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyX29iamVjdC5ub1VpU2xpZGVyLm9uKCd1cGRhdGUnLCBmdW5jdGlvbiggdmFsdWVzLCBoYW5kbGUgKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzbGlkZXJfc3RhcnRfdmFsICA9IG1pbl9mb3JtYXR0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2xpZGVyX2VuZF92YWwgID0gbWF4X2Zvcm1hdHRlZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW2hhbmRsZV07XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBoYW5kbGUgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2Zvcm1hdHRlZCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fZm9ybWF0dGVkID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRpc3BsYXlfdmFsdWVfYXM9PVwidGV4dGlucHV0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXJ0X3ZhbC52YWwobWluX2Zvcm1hdHRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVuZF92YWwudmFsKG1heF9mb3JtYXR0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihkaXNwbGF5X3ZhbHVlX2FzPT1cInRleHRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RhcnRfdmFsLmh0bWwobWluX2Zvcm1hdHRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVuZF92YWwuaHRtbChtYXhfZm9ybWF0dGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2kgdGhpbmsgdGhlIGZ1bmN0aW9uIHRoYXQgYnVpbGRzIHRoZSBVUkwgbmVlZHMgdG8gZGVjb2RlIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIGJlZm9yZSBhZGRpbmcgdG8gdGhlIHVybFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHNlbGYuYXV0b191cGRhdGU9PTEpfHwoc2VsZi5hdXRvX2NvdW50X3JlZnJlc2hfbW9kZT09MSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9vbmx5IHRyeSB0byB1cGRhdGUgaWYgdGhlIHZhbHVlcyBoYXZlIGFjdHVhbGx5IGNoYW5nZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigoc2xpZGVyX3N0YXJ0X3ZhbCE9bWluX2Zvcm1hdHRlZCl8fChzbGlkZXJfZW5kX3ZhbCE9bWF4X2Zvcm1hdHRlZCkpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0VXBkYXRlKDgwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgc2VsZi5jbGVhclRpbWVyKCk7IC8vaWdub3JlIGFueSBjaGFuZ2VzIHJlY2VudGx5IG1hZGUgYnkgdGhlIHNsaWRlciAodGhpcyB3YXMganVzdCBpbml0IHNob3VsZG4ndCBjb3VudCBhcyBhbiB1cGRhdGUgZXZlbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5pbml0ID0gZnVuY3Rpb24oa2VlcF9wYWdpbmF0aW9uKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih0eXBlb2Yoa2VlcF9wYWdpbmF0aW9uKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIga2VlcF9wYWdpbmF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaW5pdEF1dG9VcGRhdGVFdmVudHMoKTtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNoQWN0aXZlQ2xhc3MoKTtcblxuICAgICAgICAgICAgdGhpcy5hZGREYXRlUGlja2VycygpO1xuICAgICAgICAgICAgdGhpcy5hZGRSYW5nZVNsaWRlcnMoKTtcblxuICAgICAgICAgICAgLy9pbml0IGNvbWJvIGJveGVzXG4gICAgICAgICAgICB2YXIgJGNvbWJvYm94ID0gJHRoaXMuZmluZChcInNlbGVjdFtkYXRhLWNvbWJvYm94PScxJ11cIik7XG5cbiAgICAgICAgICAgIGlmKCRjb21ib2JveC5sZW5ndGg+MClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAkY29tYm9ib3guZWFjaChmdW5jdGlvbihpbmRleCApe1xuICAgICAgICAgICAgICAgICAgICB2YXIgJHRoaXNjYiA9ICQoIHRoaXMgKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5ybSA9ICR0aGlzY2IuYXR0cihcImRhdGEtY29tYm9ib3gtbnJtXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgJHRoaXNjYi5jaG9zZW4gIT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNob3Nlbm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoX2NvbnRhaW5zOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZigodHlwZW9mKG5ybSkhPT1cInVuZGVmaW5lZFwiKSYmKG5ybSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nlbm9wdGlvbnMubm9fcmVzdWx0c190ZXh0ID0gbnJtO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2FmZSB0byB1c2UgdGhlIGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3NlYXJjaF9jb250YWluc1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2VsZi5pc19ydGw9PTEpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXNjYi5hZGRDbGFzcyhcImNob3Nlbi1ydGxcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzY2IuY2hvc2VuKGNob3Nlbm9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0Mm9wdGlvbnMgPSB7fTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2VsZi5pc19ydGw9PTEpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Mm9wdGlvbnMuZGlyID0gXCJydGxcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCh0eXBlb2YobnJtKSE9PVwidW5kZWZpbmVkXCIpJiYobnJtKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Mm9wdGlvbnMubGFuZ3VhZ2U9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJub1Jlc3VsdHNcIjogZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBucm07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAkdGhpc2NiLnNlbGVjdDIoc2VsZWN0Mm9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlbGYuaXNTdWJtaXR0aW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vaWYgYWpheCBpcyBlbmFibGVkIGluaXQgdGhlIHBhZ2luYXRpb25cbiAgICAgICAgICAgIGlmKHNlbGYuaXNfYWpheD09MSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNldHVwQWpheFBhZ2luYXRpb24oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJHRoaXMub24oXCJzdWJtaXRcIiwgdGhpcy5zdWJtaXRGb3JtKTtcblxuICAgICAgICAgICAgc2VsZi5pbml0V29vQ29tbWVyY2VDb250cm9scygpOyAvL3dvb2NvbW1lcmNlIG9yZGVyYnlcblxuICAgICAgICAgICAgaWYoa2VlcF9wYWdpbmF0aW9uPT1mYWxzZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxmLmxhc3Rfc3VibWl0X3F1ZXJ5X3BhcmFtcyA9IHNlbGYuZ2V0VXJsUGFyYW1zKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25XaW5kb3dTY3JvbGwgPSBmdW5jdGlvbihldmVudClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoKCFzZWxmLmlzX2xvYWRpbmdfbW9yZSkgJiYgKCFzZWxmLmlzX21heF9wYWdlZCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHdpbmRvd19zY3JvbGwgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCk7XG4gICAgICAgICAgICAgICAgdmFyIHdpbmRvd19zY3JvbGxfYm90dG9tID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpICsgJCh3aW5kb3cpLmhlaWdodCgpO1xuICAgICAgICAgICAgICAgIHZhciBzY3JvbGxfb2Zmc2V0ID0gcGFyc2VJbnQoc2VsZi5pbmZpbml0ZV9zY3JvbGxfdHJpZ2dlcl9hbW91bnQpO1xuXG4gICAgICAgICAgICAgICAgaWYoc2VsZi4kaW5maW5pdGVfc2Nyb2xsX2NvbnRhaW5lci5sZW5ndGg9PTEpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0c19zY3JvbGxfYm90dG9tID0gc2VsZi4kaW5maW5pdGVfc2Nyb2xsX2NvbnRhaW5lci5vZmZzZXQoKS50b3AgKyBzZWxmLiRpbmZpbml0ZV9zY3JvbGxfY29udGFpbmVyLmhlaWdodCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAoc2VsZi4kaW5maW5pdGVfc2Nyb2xsX2NvbnRhaW5lci5vZmZzZXQoKS50b3AgKyBzZWxmLiRpbmZpbml0ZV9zY3JvbGxfY29udGFpbmVyLmhlaWdodCgpKSAtIHdpbmRvd19zY3JvbGw7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYod2luZG93X3Njcm9sbF9ib3R0b20gPiByZXN1bHRzX3Njcm9sbF9ib3R0b20gKyBzY3JvbGxfb2Zmc2V0KVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRNb3JlUmVzdWx0cygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgey8vZG9udCBsb2FkIG1vcmVcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdHJpcFF1ZXJ5U3RyaW5nQW5kSGFzaEZyb21QYXRoID0gZnVuY3Rpb24odXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gdXJsLnNwbGl0KFwiP1wiKVswXS5zcGxpdChcIiNcIilbMF07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmd1cCA9IGZ1bmN0aW9uKCBuYW1lLCB1cmwgKSB7XG4gICAgICAgICAgICBpZiAoIXVybCkgdXJsID0gbG9jYXRpb24uaHJlZlxuICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvW1xcW10vLFwiXFxcXFxcW1wiKS5yZXBsYWNlKC9bXFxdXS8sXCJcXFxcXFxdXCIpO1xuICAgICAgICAgICAgdmFyIHJlZ2V4UyA9IFwiW1xcXFw/Jl1cIituYW1lK1wiPShbXiYjXSopXCI7XG4gICAgICAgICAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKCByZWdleFMgKTtcbiAgICAgICAgICAgIHZhciByZXN1bHRzID0gcmVnZXguZXhlYyggdXJsICk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cyA9PSBudWxsID8gbnVsbCA6IHJlc3VsdHNbMV07XG4gICAgICAgIH07XG5cblxuICAgICAgICB0aGlzLmdldFVybFBhcmFtcyA9IGZ1bmN0aW9uKGtlZXBfcGFnaW5hdGlvbiwgdHlwZSwgZXhjbHVkZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodHlwZW9mKGtlZXBfcGFnaW5hdGlvbik9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIGtlZXBfcGFnaW5hdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKHR5cGVvZih0eXBlKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IFwiXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciB1cmxfcGFyYW1zX3N0ciA9IFwiXCI7XG5cbiAgICAgICAgICAgIC8vIGdldCBhbGwgcGFyYW1zIGZyb20gZmllbGRzXG4gICAgICAgICAgICB2YXIgdXJsX3BhcmFtc19hcnJheSA9IHByb2Nlc3NfZm9ybS5nZXRVcmxQYXJhbXMoc2VsZik7XG5cbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBPYmplY3Qua2V5cyh1cmxfcGFyYW1zX2FycmF5KS5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgY291bnQgPSAwO1xuXG4gICAgICAgICAgICBpZih0eXBlb2YoZXhjbHVkZSkhPVwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsX3BhcmFtc19hcnJheS5oYXNPd25Qcm9wZXJ0eShleGNsdWRlKSkge1xuICAgICAgICAgICAgICAgICAgICBsZW5ndGgtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGxlbmd0aD4wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGsgaW4gdXJsX3BhcmFtc19hcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodXJsX3BhcmFtc19hcnJheS5oYXNPd25Qcm9wZXJ0eShrKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuX2FkZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YoZXhjbHVkZSkhPVwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaz09ZXhjbHVkZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5fYWRkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYW5fYWRkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsX3BhcmFtc19zdHIgKz0gayArIFwiPVwiICsgdXJsX3BhcmFtc19hcnJheVtrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA8IGxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsX3BhcmFtc19zdHIgKz0gXCImXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHF1ZXJ5X3BhcmFtcyA9IFwiXCI7XG5cbiAgICAgICAgICAgIC8vZm9ybSBwYXJhbXMgYXMgdXJsIHF1ZXJ5IHN0cmluZ1xuICAgICAgICAgICAgdmFyIGZvcm1fcGFyYW1zID0gdXJsX3BhcmFtc19zdHI7XG5cbiAgICAgICAgICAgIC8vZ2V0IHVybCBwYXJhbXMgZnJvbSB0aGUgZm9ybSBpdHNlbGYgKHdoYXQgdGhlIHVzZXIgaGFzIHNlbGVjdGVkKVxuICAgICAgICAgICAgcXVlcnlfcGFyYW1zID0gc2VsZi5qb2luVXJsUGFyYW0ocXVlcnlfcGFyYW1zLCBmb3JtX3BhcmFtcyk7XG5cbiAgICAgICAgICAgIC8vYWRkIHBhZ2luYXRpb25cbiAgICAgICAgICAgIGlmKGtlZXBfcGFnaW5hdGlvbj09dHJ1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFnZU51bWJlciA9IHNlbGYuJGFqYXhfcmVzdWx0c19jb250YWluZXIuYXR0cihcImRhdGEtcGFnZWRcIik7XG5cbiAgICAgICAgICAgICAgICBpZih0eXBlb2YocGFnZU51bWJlcik9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwYWdlTnVtYmVyID0gMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZihwYWdlTnVtYmVyPjEpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeV9wYXJhbXMgPSBzZWxmLmpvaW5VcmxQYXJhbShxdWVyeV9wYXJhbXMsIFwic2ZfcGFnZWQ9XCIrcGFnZU51bWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvL2FkZCBzZmlkXG4gICAgICAgICAgICAvL3F1ZXJ5X3BhcmFtcyA9IHNlbGYuam9pblVybFBhcmFtKHF1ZXJ5X3BhcmFtcywgXCJzZmlkPVwiK3NlbGYuc2ZpZCk7XG5cbiAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCBhbnkgZXh0cmEgcGFyYW1zIChmcm9tIGV4dCBwbHVnaW5zKSBhbmQgYWRkIHRvIHRoZSB1cmwgKGllIHdvb2NvbW1lcmNlIGBvcmRlcmJ5YClcbiAgICAgICAgICAgIC8qdmFyIGV4dHJhX3F1ZXJ5X3BhcmFtID0gXCJcIjtcbiAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gT2JqZWN0LmtleXMoc2VsZi5leHRyYV9xdWVyeV9wYXJhbXMpLmxlbmd0aDtcbiAgICAgICAgICAgICB2YXIgY291bnQgPSAwO1xuXG4gICAgICAgICAgICAgaWYobGVuZ3RoPjApXG4gICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgZm9yICh2YXIgayBpbiBzZWxmLmV4dHJhX3F1ZXJ5X3BhcmFtcykge1xuICAgICAgICAgICAgIGlmIChzZWxmLmV4dHJhX3F1ZXJ5X3BhcmFtcy5oYXNPd25Qcm9wZXJ0eShrKSkge1xuXG4gICAgICAgICAgICAgaWYoc2VsZi5leHRyYV9xdWVyeV9wYXJhbXNba10hPVwiXCIpXG4gICAgICAgICAgICAge1xuICAgICAgICAgICAgIGV4dHJhX3F1ZXJ5X3BhcmFtID0gaytcIj1cIitzZWxmLmV4dHJhX3F1ZXJ5X3BhcmFtc1trXTtcbiAgICAgICAgICAgICBxdWVyeV9wYXJhbXMgPSBzZWxmLmpvaW5VcmxQYXJhbShxdWVyeV9wYXJhbXMsIGV4dHJhX3F1ZXJ5X3BhcmFtKTtcbiAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHF1ZXJ5X3BhcmFtcyA9IHNlbGYuYWRkUXVlcnlQYXJhbXMocXVlcnlfcGFyYW1zLCBzZWxmLmV4dHJhX3F1ZXJ5X3BhcmFtcy5hbGwpO1xuXG4gICAgICAgICAgICBpZih0eXBlIT1cIlwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vcXVlcnlfcGFyYW1zID0gc2VsZi5hZGRRdWVyeVBhcmFtcyhxdWVyeV9wYXJhbXMsIHNlbGYuZXh0cmFfcXVlcnlfcGFyYW1zW3R5cGVdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5X3BhcmFtcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZFF1ZXJ5UGFyYW1zID0gZnVuY3Rpb24ocXVlcnlfcGFyYW1zLCBuZXdfcGFyYW1zKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZXh0cmFfcXVlcnlfcGFyYW0gPSBcIlwiO1xuICAgICAgICAgICAgdmFyIGxlbmd0aCA9IE9iamVjdC5rZXlzKG5ld19wYXJhbXMpLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBjb3VudCA9IDA7XG5cbiAgICAgICAgICAgIGlmKGxlbmd0aD4wKVxuICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayBpbiBuZXdfcGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdfcGFyYW1zLmhhc093blByb3BlcnR5KGspKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5ld19wYXJhbXNba10hPVwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfcXVlcnlfcGFyYW0gPSBrK1wiPVwiK25ld19wYXJhbXNba107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfcGFyYW1zID0gc2VsZi5qb2luVXJsUGFyYW0ocXVlcnlfcGFyYW1zLCBleHRyYV9xdWVyeV9wYXJhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBxdWVyeV9wYXJhbXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRVcmxQYXJhbSA9IGZ1bmN0aW9uKHVybCwgc3RyaW5nKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgYWRkX3BhcmFtcyA9IFwiXCI7XG5cbiAgICAgICAgICAgIGlmKHVybCE9XCJcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZih1cmwuaW5kZXhPZihcIj9cIikgIT0gLTEpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhZGRfcGFyYW1zICs9IFwiJlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAvL3VybCA9IHRoaXMudHJhaWxpbmdTbGFzaEl0KHVybCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZF9wYXJhbXMgKz0gXCI/XCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihzdHJpbmchPVwiXCIpXG4gICAgICAgICAgICB7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsICsgYWRkX3BhcmFtcyArIHN0cmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuam9pblVybFBhcmFtID0gZnVuY3Rpb24ocGFyYW1zLCBzdHJpbmcpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBhZGRfcGFyYW1zID0gXCJcIjtcblxuICAgICAgICAgICAgaWYocGFyYW1zIT1cIlwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZF9wYXJhbXMgKz0gXCImXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKHN0cmluZyE9XCJcIilcbiAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbXMgKyBhZGRfcGFyYW1zICsgc3RyaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zZXRBamF4UmVzdWx0c1VSTHMgPSBmdW5jdGlvbihxdWVyeV9wYXJhbXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHR5cGVvZihzZWxmLmFqYXhfcmVzdWx0c19jb25mKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxmLmFqYXhfcmVzdWx0c19jb25mID0gbmV3IEFycmF5KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlbGYuYWpheF9yZXN1bHRzX2NvbmZbJ3Byb2Nlc3NpbmdfdXJsJ10gPSBcIlwiO1xuICAgICAgICAgICAgc2VsZi5hamF4X3Jlc3VsdHNfY29uZlsncmVzdWx0c191cmwnXSA9IFwiXCI7XG4gICAgICAgICAgICBzZWxmLmFqYXhfcmVzdWx0c19jb25mWydkYXRhX3R5cGUnXSA9IFwiXCI7XG5cbiAgICAgICAgICAgIC8vaWYoc2VsZi5hamF4X3VybCE9XCJcIilcbiAgICAgICAgICAgIGlmKHNlbGYuZGlzcGxheV9yZXN1bHRfbWV0aG9kPT1cInNob3J0Y29kZVwiKVxuICAgICAgICAgICAgey8vdGhlbiB3ZSB3YW50IHRvIGRvIGEgcmVxdWVzdCB0byB0aGUgYWpheCBlbmRwb2ludFxuICAgICAgICAgICAgICAgIHNlbGYuYWpheF9yZXN1bHRzX2NvbmZbJ3Jlc3VsdHNfdXJsJ10gPSBzZWxmLmFkZFVybFBhcmFtKHNlbGYucmVzdWx0c191cmwsIHF1ZXJ5X3BhcmFtcyk7XG5cbiAgICAgICAgICAgICAgICAvL2FkZCBsYW5nIGNvZGUgdG8gYWpheCBhcGkgcmVxdWVzdCwgbGFuZyBjb2RlIHNob3VsZCBhbHJlYWR5IGJlIGluIHRoZXJlIGZvciBvdGhlciByZXF1ZXN0cyAoaWUsIHN1cHBsaWVkIGluIHRoZSBSZXN1bHRzIFVSTClcblxuICAgICAgICAgICAgICAgIGlmKHNlbGYubGFuZ19jb2RlIT1cIlwiKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLy9zbyBhZGQgaXRcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlfcGFyYW1zID0gc2VsZi5qb2luVXJsUGFyYW0ocXVlcnlfcGFyYW1zLCBcImxhbmc9XCIrc2VsZi5sYW5nX2NvZGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNlbGYuYWpheF9yZXN1bHRzX2NvbmZbJ3Byb2Nlc3NpbmdfdXJsJ10gPSBzZWxmLmFkZFVybFBhcmFtKHNlbGYuYWpheF91cmwsIHF1ZXJ5X3BhcmFtcyk7XG4gICAgICAgICAgICAgICAgLy9zZWxmLmFqYXhfcmVzdWx0c19jb25mWydkYXRhX3R5cGUnXSA9ICdqc29uJztcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihzZWxmLmRpc3BsYXlfcmVzdWx0X21ldGhvZD09XCJwb3N0X3R5cGVfYXJjaGl2ZVwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NfZm9ybS5zZXRUYXhBcmNoaXZlUmVzdWx0c1VybChzZWxmLCBzZWxmLnJlc3VsdHNfdXJsKTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0c191cmwgPSBwcm9jZXNzX2Zvcm0uZ2V0UmVzdWx0c1VybChzZWxmLCBzZWxmLnJlc3VsdHNfdXJsKTtcblxuICAgICAgICAgICAgICAgIHNlbGYuYWpheF9yZXN1bHRzX2NvbmZbJ3Jlc3VsdHNfdXJsJ10gPSBzZWxmLmFkZFVybFBhcmFtKHJlc3VsdHNfdXJsLCBxdWVyeV9wYXJhbXMpO1xuICAgICAgICAgICAgICAgIHNlbGYuYWpheF9yZXN1bHRzX2NvbmZbJ3Byb2Nlc3NpbmdfdXJsJ10gPSBzZWxmLmFkZFVybFBhcmFtKHJlc3VsdHNfdXJsLCBxdWVyeV9wYXJhbXMpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKHNlbGYuZGlzcGxheV9yZXN1bHRfbWV0aG9kPT1cImN1c3RvbV93b29jb21tZXJjZV9zdG9yZVwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NfZm9ybS5zZXRUYXhBcmNoaXZlUmVzdWx0c1VybChzZWxmLCBzZWxmLnJlc3VsdHNfdXJsKTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0c191cmwgPSBwcm9jZXNzX2Zvcm0uZ2V0UmVzdWx0c1VybChzZWxmLCBzZWxmLnJlc3VsdHNfdXJsKTtcblxuICAgICAgICAgICAgICAgIHNlbGYuYWpheF9yZXN1bHRzX2NvbmZbJ3Jlc3VsdHNfdXJsJ10gPSBzZWxmLmFkZFVybFBhcmFtKHJlc3VsdHNfdXJsLCBxdWVyeV9wYXJhbXMpO1xuICAgICAgICAgICAgICAgIHNlbGYuYWpheF9yZXN1bHRzX2NvbmZbJ3Byb2Nlc3NpbmdfdXJsJ10gPSBzZWxmLmFkZFVybFBhcmFtKHJlc3VsdHNfdXJsLCBxdWVyeV9wYXJhbXMpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7Ly9vdGhlcndpc2Ugd2Ugd2FudCB0byBwdWxsIHRoZSByZXN1bHRzIGRpcmVjdGx5IGZyb20gdGhlIHJlc3VsdHMgcGFnZVxuICAgICAgICAgICAgICAgIHNlbGYuYWpheF9yZXN1bHRzX2NvbmZbJ3Jlc3VsdHNfdXJsJ10gPSBzZWxmLmFkZFVybFBhcmFtKHNlbGYucmVzdWx0c191cmwsIHF1ZXJ5X3BhcmFtcyk7XG4gICAgICAgICAgICAgICAgc2VsZi5hamF4X3Jlc3VsdHNfY29uZlsncHJvY2Vzc2luZ191cmwnXSA9IHNlbGYuYWRkVXJsUGFyYW0oc2VsZi5hamF4X3VybCwgcXVlcnlfcGFyYW1zKTtcbiAgICAgICAgICAgICAgICAvL3NlbGYuYWpheF9yZXN1bHRzX2NvbmZbJ2RhdGFfdHlwZSddID0gJ2h0bWwnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWxmLmFqYXhfcmVzdWx0c19jb25mWydwcm9jZXNzaW5nX3VybCddID0gc2VsZi5hZGRRdWVyeVBhcmFtcyhzZWxmLmFqYXhfcmVzdWx0c19jb25mWydwcm9jZXNzaW5nX3VybCddLCBzZWxmLmV4dHJhX3F1ZXJ5X3BhcmFtc1snYWpheCddKTtcblxuICAgICAgICAgICAgc2VsZi5hamF4X3Jlc3VsdHNfY29uZlsnZGF0YV90eXBlJ10gPSBzZWxmLmFqYXhfZGF0YV90eXBlO1xuICAgICAgICB9O1xuXG5cblxuICAgICAgICB0aGlzLnVwZGF0ZUxvYWRlclRhZyA9IGZ1bmN0aW9uKCRvYmplY3QpIHtcblxuICAgICAgICAgICAgdmFyICRwYXJlbnQ7XG5cbiAgICAgICAgICAgIGlmKHNlbGYuaW5maW5pdGVfc2Nyb2xsX3Jlc3VsdF9jbGFzcyE9XCJcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAkcGFyZW50ID0gc2VsZi4kaW5maW5pdGVfc2Nyb2xsX2NvbnRhaW5lci5maW5kKHNlbGYuaW5maW5pdGVfc2Nyb2xsX3Jlc3VsdF9jbGFzcykubGFzdCgpLnBhcmVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICRwYXJlbnQgPSBzZWxmLiRpbmZpbml0ZV9zY3JvbGxfY29udGFpbmVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgdGFnTmFtZSA9ICRwYXJlbnQucHJvcChcInRhZ05hbWVcIik7XG5cbiAgICAgICAgICAgIHZhciB0YWdUeXBlID0gJ2Rpdic7XG4gICAgICAgICAgICBpZiggKCB0YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ29sJyApIHx8ICggdGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICd1bCcgKSApe1xuICAgICAgICAgICAgICAgIHRhZ1R5cGUgPSAnbGknO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgJG5ldyA9ICQoJzwnK3RhZ1R5cGUrJyAvPicpLmh0bWwoJG9iamVjdC5odG1sKCkpO1xuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSAkb2JqZWN0LnByb3AoXCJhdHRyaWJ1dGVzXCIpO1xuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggPHNlbGVjdD4gYXR0cmlidXRlcyBhbmQgYXBwbHkgdGhlbSBvbiA8ZGl2PlxuICAgICAgICAgICAgJC5lYWNoKGF0dHJpYnV0ZXMsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICRuZXcuYXR0cih0aGlzLm5hbWUsIHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiAkbmV3O1xuXG4gICAgICAgIH1cblxuXG4gICAgICAgIHRoaXMubG9hZE1vcmVSZXN1bHRzID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIHRoaXMuaXNfbWF4X3BhZ2VkID09PSB0cnVlICkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuaXNfbG9hZGluZ19tb3JlID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy90cmlnZ2VyIHN0YXJ0IGV2ZW50XG4gICAgICAgICAgICB2YXIgZXZlbnRfZGF0YSA9IHtcbiAgICAgICAgICAgICAgICBzZmlkOiBzZWxmLnNmaWQsXG4gICAgICAgICAgICAgICAgdGFyZ2V0U2VsZWN0b3I6IHNlbGYuYWpheF90YXJnZXRfYXR0cixcbiAgICAgICAgICAgICAgICB0eXBlOiBcImxvYWRfbW9yZVwiLFxuICAgICAgICAgICAgICAgIG9iamVjdDogc2VsZlxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgc2VsZi50cmlnZ2VyRXZlbnQoXCJzZjphamF4c3RhcnRcIiwgZXZlbnRfZGF0YSk7XG4gICAgICAgICAgICBwcm9jZXNzX2Zvcm0uc2V0VGF4QXJjaGl2ZVJlc3VsdHNVcmwoc2VsZiwgc2VsZi5yZXN1bHRzX3VybCk7XG4gICAgICAgICAgICB2YXIgcXVlcnlfcGFyYW1zID0gc2VsZi5nZXRVcmxQYXJhbXModHJ1ZSk7XG4gICAgICAgICAgICBzZWxmLmxhc3Rfc3VibWl0X3F1ZXJ5X3BhcmFtcyA9IHNlbGYuZ2V0VXJsUGFyYW1zKGZhbHNlKTsgLy9ncmFiIGEgY29weSBvZiBodGUgVVJMIHBhcmFtcyB3aXRob3V0IHBhZ2luYXRpb24gYWxyZWFkeSBhZGRlZFxuXG4gICAgICAgICAgICB2YXIgYWpheF9wcm9jZXNzaW5nX3VybCA9IFwiXCI7XG4gICAgICAgICAgICB2YXIgYWpheF9yZXN1bHRzX3VybCA9IFwiXCI7XG4gICAgICAgICAgICB2YXIgZGF0YV90eXBlID0gXCJcIjtcblxuXG4gICAgICAgICAgICAvL25vdyBhZGQgdGhlIG5ldyBwYWdpbmF0aW9uXG4gICAgICAgICAgICB2YXIgbmV4dF9wYWdlZF9udW1iZXIgPSB0aGlzLmN1cnJlbnRfcGFnZWQgKyAxO1xuICAgICAgICAgICAgcXVlcnlfcGFyYW1zID0gc2VsZi5qb2luVXJsUGFyYW0ocXVlcnlfcGFyYW1zLCBcInNmX3BhZ2VkPVwiK25leHRfcGFnZWRfbnVtYmVyKTtcblxuICAgICAgICAgICAgc2VsZi5zZXRBamF4UmVzdWx0c1VSTHMocXVlcnlfcGFyYW1zKTtcbiAgICAgICAgICAgIGFqYXhfcHJvY2Vzc2luZ191cmwgPSBzZWxmLmFqYXhfcmVzdWx0c19jb25mWydwcm9jZXNzaW5nX3VybCddO1xuICAgICAgICAgICAgYWpheF9yZXN1bHRzX3VybCA9IHNlbGYuYWpheF9yZXN1bHRzX2NvbmZbJ3Jlc3VsdHNfdXJsJ107XG4gICAgICAgICAgICBkYXRhX3R5cGUgPSBzZWxmLmFqYXhfcmVzdWx0c19jb25mWydkYXRhX3R5cGUnXTtcblxuICAgICAgICAgICAgLy9hYm9ydCBhbnkgcHJldmlvdXMgYWpheCByZXF1ZXN0c1xuICAgICAgICAgICAgaWYoc2VsZi5sYXN0X2FqYXhfcmVxdWVzdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxmLmxhc3RfYWpheF9yZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKHNlbGYudXNlX3Njcm9sbF9sb2FkZXI9PTEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyICRsb2FkZXIgPSAkKCc8ZGl2Lz4nLHtcbiAgICAgICAgICAgICAgICAgICAgJ2NsYXNzJzogJ3NlYXJjaC1maWx0ZXItc2Nyb2xsLWxvYWRpbmcnXG4gICAgICAgICAgICAgICAgfSk7Ly8uYXBwZW5kVG8oc2VsZi4kYWpheF9yZXN1bHRzX2NvbnRhaW5lcik7XG5cbiAgICAgICAgICAgICAgICAkbG9hZGVyID0gc2VsZi51cGRhdGVMb2FkZXJUYWcoJGxvYWRlcik7XG5cbiAgICAgICAgICAgICAgICBzZWxmLmluZmluaXRlU2Nyb2xsQXBwZW5kKCRsb2FkZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5sYXN0X2FqYXhfcmVxdWVzdCA9ICQuZ2V0KGFqYXhfcHJvY2Vzc2luZ191cmwsIGZ1bmN0aW9uKGRhdGEsIHN0YXR1cywgcmVxdWVzdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfcGFnZWQrKztcbiAgICAgICAgICAgICAgICBzZWxmLmxhc3RfYWpheF9yZXF1ZXN0ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIC8vICoqKioqKioqKioqKioqXG4gICAgICAgICAgICAgICAgLy8gVE9ETyAtIFBBU1RFIFRISVMgQU5EIFdBVENIIFRIRSBSRURJUkVDVCAtIE9OTFkgSEFQUEVOUyBXSVRIIFdDIChDUFQgQU5EIFRBWCBET0VTIE5PVClcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL3NlYXJjaC1maWx0ZXIudGVzdC9wcm9kdWN0LWNhdGVnb3J5L2Nsb3RoaW5nL3RzaGlydHMvcGFnZS8zLz9zZl9wYWdlZD0zXG5cbiAgICAgICAgICAgICAgICAvL3VwZGF0ZXMgdGhlIHJlc3V0bHMgJiBmb3JtIGh0bWxcbiAgICAgICAgICAgICAgICBzZWxmLmFkZFJlc3VsdHMoZGF0YSwgZGF0YV90eXBlKTtcblxuICAgICAgICAgICAgfSwgZGF0YV90eXBlKS5mYWlsKGZ1bmN0aW9uKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGRhdGEuc2ZpZCA9IHNlbGYuc2ZpZDtcbiAgICAgICAgICAgICAgICBkYXRhLm9iamVjdCA9IHNlbGY7XG4gICAgICAgICAgICAgICAgZGF0YS50YXJnZXRTZWxlY3RvciA9IHNlbGYuYWpheF90YXJnZXRfYXR0cjtcbiAgICAgICAgICAgICAgICBkYXRhLmFqYXhVUkwgPSBhamF4X3Byb2Nlc3NpbmdfdXJsO1xuICAgICAgICAgICAgICAgIGRhdGEuanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgICAgICBkYXRhLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgICAgICAgICAgIGRhdGEuZXJyb3JUaHJvd24gPSBlcnJvclRocm93bjtcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJFdmVudChcInNmOmFqYXhlcnJvclwiLCBkYXRhKTtcblxuICAgICAgICAgICAgfSkuYWx3YXlzKGZ1bmN0aW9uKClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGRhdGEuc2ZpZCA9IHNlbGYuc2ZpZDtcbiAgICAgICAgICAgICAgICBkYXRhLnRhcmdldFNlbGVjdG9yID0gc2VsZi5hamF4X3RhcmdldF9hdHRyO1xuICAgICAgICAgICAgICAgIGRhdGEub2JqZWN0ID0gc2VsZjtcblxuICAgICAgICAgICAgICAgIGlmKHNlbGYudXNlX3Njcm9sbF9sb2FkZXI9PTEpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLmRldGFjaCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNlbGYuaXNfbG9hZGluZ19tb3JlID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJFdmVudChcInNmOmFqYXhmaW5pc2hcIiwgZGF0YSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmV0Y2hBamF4UmVzdWx0cyA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgLy90cmlnZ2VyIHN0YXJ0IGV2ZW50XG4gICAgICAgICAgICB2YXIgZXZlbnRfZGF0YSA9IHtcbiAgICAgICAgICAgICAgICBzZmlkOiBzZWxmLnNmaWQsXG4gICAgICAgICAgICAgICAgdGFyZ2V0U2VsZWN0b3I6IHNlbGYuYWpheF90YXJnZXRfYXR0cixcbiAgICAgICAgICAgICAgICB0eXBlOiBcImxvYWRfcmVzdWx0c1wiLFxuICAgICAgICAgICAgICAgIG9iamVjdDogc2VsZlxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgc2VsZi50cmlnZ2VyRXZlbnQoXCJzZjphamF4c3RhcnRcIiwgZXZlbnRfZGF0YSk7XG5cbiAgICAgICAgICAgIC8vcmVmb2N1cyBhbnkgaW5wdXQgZmllbGRzIGFmdGVyIHRoZSBmb3JtIGhhcyBiZWVuIHVwZGF0ZWRcbiAgICAgICAgICAgIHZhciAkbGFzdF9hY3RpdmVfaW5wdXRfdGV4dCA9ICR0aGlzLmZpbmQoJ2lucHV0W3R5cGU9XCJ0ZXh0XCJdOmZvY3VzJykubm90KFwiLnNmLWRhdGVwaWNrZXJcIik7XG4gICAgICAgICAgICBpZigkbGFzdF9hY3RpdmVfaW5wdXRfdGV4dC5sZW5ndGg9PTEpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RfYWN0aXZlX2lucHV0X3RleHQgPSAkbGFzdF9hY3RpdmVfaW5wdXRfdGV4dC5hdHRyKFwibmFtZVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJHRoaXMuYWRkQ2xhc3MoXCJzZWFyY2gtZmlsdGVyLWRpc2FibGVkXCIpO1xuICAgICAgICAgICAgcHJvY2Vzc19mb3JtLmRpc2FibGVJbnB1dHMoc2VsZik7XG5cbiAgICAgICAgICAgIC8vZmFkZSBvdXQgcmVzdWx0c1xuICAgICAgICAgICAgc2VsZi4kYWpheF9yZXN1bHRzX2NvbnRhaW5lci5hbmltYXRlKHsgb3BhY2l0eTogMC41IH0sIFwiZmFzdFwiKTsgLy9sb2FkaW5nXG4gICAgICAgICAgICBzZWxmLmZhZGVDb250ZW50QXJlYXMoIFwib3V0XCIgKTtcblxuICAgICAgICAgICAgaWYoc2VsZi5hamF4X2FjdGlvbj09XCJwYWdpbmF0aW9uXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy9uZWVkIHRvIHJlbW92ZSBhY3RpdmUgZmlsdGVyIGZyb20gVVJMXG5cbiAgICAgICAgICAgICAgICAvL3F1ZXJ5X3BhcmFtcyA9IHNlbGYubGFzdF9zdWJtaXRfcXVlcnlfcGFyYW1zO1xuXG4gICAgICAgICAgICAgICAgLy9ub3cgYWRkIHRoZSBuZXcgcGFnaW5hdGlvblxuICAgICAgICAgICAgICAgIHZhciBwYWdlTnVtYmVyID0gc2VsZi4kYWpheF9yZXN1bHRzX2NvbnRhaW5lci5hdHRyKFwiZGF0YS1wYWdlZFwiKTtcblxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZihwYWdlTnVtYmVyKT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2VOdW1iZXIgPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9jZXNzX2Zvcm0uc2V0VGF4QXJjaGl2ZVJlc3VsdHNVcmwoc2VsZiwgc2VsZi5yZXN1bHRzX3VybCk7XG4gICAgICAgICAgICAgICAgcXVlcnlfcGFyYW1zID0gc2VsZi5nZXRVcmxQYXJhbXMoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgaWYocGFnZU51bWJlcj4xKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlfcGFyYW1zID0gc2VsZi5qb2luVXJsUGFyYW0ocXVlcnlfcGFyYW1zLCBcInNmX3BhZ2VkPVwiK3BhZ2VOdW1iZXIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihzZWxmLmFqYXhfYWN0aW9uPT1cInN1Ym1pdFwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBxdWVyeV9wYXJhbXMgPSBzZWxmLmdldFVybFBhcmFtcyh0cnVlKTtcbiAgICAgICAgICAgICAgICBzZWxmLmxhc3Rfc3VibWl0X3F1ZXJ5X3BhcmFtcyA9IHNlbGYuZ2V0VXJsUGFyYW1zKGZhbHNlKTsgLy9ncmFiIGEgY29weSBvZiBodGUgVVJMIHBhcmFtcyB3aXRob3V0IHBhZ2luYXRpb24gYWxyZWFkeSBhZGRlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgYWpheF9wcm9jZXNzaW5nX3VybCA9IFwiXCI7XG4gICAgICAgICAgICB2YXIgYWpheF9yZXN1bHRzX3VybCA9IFwiXCI7XG4gICAgICAgICAgICB2YXIgZGF0YV90eXBlID0gXCJcIjtcblxuICAgICAgICAgICAgc2VsZi5zZXRBamF4UmVzdWx0c1VSTHMocXVlcnlfcGFyYW1zKTtcbiAgICAgICAgICAgIGFqYXhfcHJvY2Vzc2luZ191cmwgPSBzZWxmLmFqYXhfcmVzdWx0c19jb25mWydwcm9jZXNzaW5nX3VybCddO1xuICAgICAgICAgICAgYWpheF9yZXN1bHRzX3VybCA9IHNlbGYuYWpheF9yZXN1bHRzX2NvbmZbJ3Jlc3VsdHNfdXJsJ107XG4gICAgICAgICAgICBkYXRhX3R5cGUgPSBzZWxmLmFqYXhfcmVzdWx0c19jb25mWydkYXRhX3R5cGUnXTtcblxuXG4gICAgICAgICAgICAvL2Fib3J0IGFueSBwcmV2aW91cyBhamF4IHJlcXVlc3RzXG4gICAgICAgICAgICBpZihzZWxmLmxhc3RfYWpheF9yZXF1ZXN0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNlbGYubGFzdF9hamF4X3JlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhamF4X2FjdGlvbiA9IHNlbGYuYWpheF9hY3Rpb247XG4gICAgICAgICAgICBzZWxmLmxhc3RfYWpheF9yZXF1ZXN0ID0gJC5nZXQoYWpheF9wcm9jZXNzaW5nX3VybCwgZnVuY3Rpb24oZGF0YSwgc3RhdHVzLCByZXF1ZXN0KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNlbGYubGFzdF9hamF4X3JlcXVlc3QgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgLy91cGRhdGVzIHRoZSByZXN1dGxzICYgZm9ybSBodG1sXG4gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVSZXN1bHRzKGRhdGEsIGRhdGFfdHlwZSk7XG5cbiAgICAgICAgICAgICAgICAvLyBzY3JvbGwgXG4gICAgICAgICAgICAgICAgLy8gc2V0IHRoZSB2YXIgYmFjayB0byB3aGF0IGl0IHdhcyBiZWZvcmUgdGhlIGFqYXggcmVxdWVzdCBuYWQgdGhlIGZvcm0gcmUtaW5pdFxuICAgICAgICAgICAgICAgIHNlbGYuYWpheF9hY3Rpb24gPSBhamF4X2FjdGlvbjtcbiAgICAgICAgICAgICAgICBzZWxmLnNjcm9sbFJlc3VsdHMoIHNlbGYuYWpheF9hY3Rpb24gKTtcblxuICAgICAgICAgICAgICAgIC8qIHVwZGF0ZSBVUkwgKi9cbiAgICAgICAgICAgICAgICAvL3VwZGF0ZSB1cmwgYmVmb3JlIHBhZ2luYXRpb24sIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBzb21lIGNoZWNrcyBhZ2FpbnMgdGhlIFVSTCBmb3IgaW5maW5pdGUgc2Nyb2xsXG4gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVVcmxIaXN0b3J5KGFqYXhfcmVzdWx0c191cmwpO1xuXG4gICAgICAgICAgICAgICAgLy9zZXR1cCBwYWdpbmF0aW9uXG4gICAgICAgICAgICAgICAgc2VsZi5zZXR1cEFqYXhQYWdpbmF0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICBzZWxmLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLyogdXNlciBkZWYgKi9cbiAgICAgICAgICAgICAgICBzZWxmLmluaXRXb29Db21tZXJjZUNvbnRyb2xzKCk7IC8vd29vY29tbWVyY2Ugb3JkZXJieVxuXG5cbiAgICAgICAgICAgIH0sIGRhdGFfdHlwZSkuZmFpbChmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICBkYXRhLnNmaWQgPSBzZWxmLnNmaWQ7XG4gICAgICAgICAgICAgICAgZGF0YS50YXJnZXRTZWxlY3RvciA9IHNlbGYuYWpheF90YXJnZXRfYXR0cjtcbiAgICAgICAgICAgICAgICBkYXRhLm9iamVjdCA9IHNlbGY7XG4gICAgICAgICAgICAgICAgZGF0YS5hamF4VVJMID0gYWpheF9wcm9jZXNzaW5nX3VybDtcbiAgICAgICAgICAgICAgICBkYXRhLmpxWEhSID0ganFYSFI7XG4gICAgICAgICAgICAgICAgZGF0YS50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcbiAgICAgICAgICAgICAgICBkYXRhLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICAgICAgICAgICAgc2VsZi5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJFdmVudChcInNmOmFqYXhlcnJvclwiLCBkYXRhKTtcblxuICAgICAgICAgICAgfSkuYWx3YXlzKGZ1bmN0aW9uKClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxmLiRhamF4X3Jlc3VsdHNfY29udGFpbmVyLnN0b3AodHJ1ZSx0cnVlKS5hbmltYXRlKHsgb3BhY2l0eTogMX0sIFwiZmFzdFwiKTsgLy9maW5pc2hlZCBsb2FkaW5nXG4gICAgICAgICAgICAgICAgc2VsZi5mYWRlQ29udGVudEFyZWFzKCBcImluXCIgKTtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGRhdGEuc2ZpZCA9IHNlbGYuc2ZpZDtcbiAgICAgICAgICAgICAgICBkYXRhLnRhcmdldFNlbGVjdG9yID0gc2VsZi5hamF4X3RhcmdldF9hdHRyO1xuICAgICAgICAgICAgICAgIGRhdGEub2JqZWN0ID0gc2VsZjtcbiAgICAgICAgICAgICAgICAkdGhpcy5yZW1vdmVDbGFzcyhcInNlYXJjaC1maWx0ZXItZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc19mb3JtLmVuYWJsZUlucHV0cyhzZWxmKTtcblxuICAgICAgICAgICAgICAgIC8vcmVmb2N1cyB0aGUgbGFzdCBhY3RpdmUgdGV4dCBmaWVsZFxuICAgICAgICAgICAgICAgIGlmKGxhc3RfYWN0aXZlX2lucHV0X3RleHQhPVwiXCIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGlucHV0ID0gW107XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuJGZpZWxkcy5lYWNoKGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkYWN0aXZlX2lucHV0ID0gJCh0aGlzKS5maW5kKFwiaW5wdXRbbmFtZT0nXCIrbGFzdF9hY3RpdmVfaW5wdXRfdGV4dCtcIiddXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGFjdGl2ZV9pbnB1dC5sZW5ndGg9PTEpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlucHV0ID0gJGFjdGl2ZV9pbnB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYoJGlucHV0Lmxlbmd0aD09MSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkaW5wdXQuZm9jdXMoKS52YWwoJGlucHV0LnZhbCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm9jdXNDYW1wbygkaW5wdXRbMF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJHRoaXMuZmluZChcImlucHV0W25hbWU9J19zZl9zZWFyY2gnXVwiKS50cmlnZ2VyKCdmb2N1cycpO1xuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlckV2ZW50KFwic2Y6YWpheGZpbmlzaFwiLCAgZGF0YSApO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvY3VzQ2FtcG8gPSBmdW5jdGlvbihpbnB1dEZpZWxkKXtcbiAgICAgICAgICAgIC8vdmFyIGlucHV0RmllbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICAgICAgICBpZiAoaW5wdXRGaWVsZCAhPSBudWxsICYmIGlucHV0RmllbGQudmFsdWUubGVuZ3RoICE9IDApe1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dEZpZWxkLmNyZWF0ZVRleHRSYW5nZSl7XG4gICAgICAgICAgICAgICAgICAgIHZhciBGaWVsZFJhbmdlID0gaW5wdXRGaWVsZC5jcmVhdGVUZXh0UmFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgRmllbGRSYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsaW5wdXRGaWVsZC52YWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICBGaWVsZFJhbmdlLmNvbGxhcHNlKCk7XG4gICAgICAgICAgICAgICAgICAgIEZpZWxkUmFuZ2Uuc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgfWVsc2UgaWYgKGlucHV0RmllbGQuc2VsZWN0aW9uU3RhcnQgfHwgaW5wdXRGaWVsZC5zZWxlY3Rpb25TdGFydCA9PSAnMCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1MZW4gPSBpbnB1dEZpZWxkLnZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRGaWVsZC5zZWxlY3Rpb25TdGFydCA9IGVsZW1MZW47XG4gICAgICAgICAgICAgICAgICAgIGlucHV0RmllbGQuc2VsZWN0aW9uRW5kID0gZWxlbUxlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5wdXRGaWVsZC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgaW5wdXRGaWVsZC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNle1xuICAgICAgICAgICAgICAgIGlmICggaW5wdXRGaWVsZCApIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRGaWVsZC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJpZ2dlckV2ZW50ID0gZnVuY3Rpb24oZXZlbnRuYW1lLCBkYXRhKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgJGV2ZW50X2NvbnRhaW5lciA9ICQoXCIuc2VhcmNoYW5kZmlsdGVyW2RhdGEtc2YtZm9ybS1pZD0nXCIrc2VsZi5zZmlkK1wiJ11cIik7XG4gICAgICAgICAgICAkZXZlbnRfY29udGFpbmVyLnRyaWdnZXIoZXZlbnRuYW1lLCBbIGRhdGEgXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZldGNoQWpheEZvcm0gPSBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdHJpZ2dlciBzdGFydCBldmVudFxuICAgICAgICAgICAgdmFyIGV2ZW50X2RhdGEgPSB7XG4gICAgICAgICAgICAgICAgc2ZpZDogc2VsZi5zZmlkLFxuICAgICAgICAgICAgICAgIHRhcmdldFNlbGVjdG9yOiBzZWxmLmFqYXhfdGFyZ2V0X2F0dHIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJmb3JtXCIsXG4gICAgICAgICAgICAgICAgb2JqZWN0OiBzZWxmXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBzZWxmLnRyaWdnZXJFdmVudChcInNmOmFqYXhmb3Jtc3RhcnRcIiwgWyBldmVudF9kYXRhIF0pO1xuXG4gICAgICAgICAgICAkdGhpcy5hZGRDbGFzcyhcInNlYXJjaC1maWx0ZXItZGlzYWJsZWRcIik7XG4gICAgICAgICAgICBwcm9jZXNzX2Zvcm0uZGlzYWJsZUlucHV0cyhzZWxmKTtcblxuICAgICAgICAgICAgdmFyIHF1ZXJ5X3BhcmFtcyA9IHNlbGYuZ2V0VXJsUGFyYW1zKCk7XG5cbiAgICAgICAgICAgIGlmKHNlbGYubGFuZ19jb2RlIT1cIlwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vc28gYWRkIGl0XG4gICAgICAgICAgICAgICAgcXVlcnlfcGFyYW1zID0gc2VsZi5qb2luVXJsUGFyYW0ocXVlcnlfcGFyYW1zLCBcImxhbmc9XCIrc2VsZi5sYW5nX2NvZGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgYWpheF9wcm9jZXNzaW5nX3VybCA9IHNlbGYuYWRkVXJsUGFyYW0oc2VsZi5hamF4X2Zvcm1fdXJsLCBxdWVyeV9wYXJhbXMpO1xuICAgICAgICAgICAgdmFyIGRhdGFfdHlwZSA9IFwianNvblwiO1xuXG5cbiAgICAgICAgICAgIC8vYWJvcnQgYW55IHByZXZpb3VzIGFqYXggcmVxdWVzdHNcbiAgICAgICAgICAgIC8qaWYoc2VsZi5sYXN0X2FqYXhfcmVxdWVzdClcbiAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgc2VsZi5sYXN0X2FqYXhfcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICAgICAgIH0qL1xuXG5cbiAgICAgICAgICAgIC8vc2VsZi5sYXN0X2FqYXhfcmVxdWVzdCA9XG5cbiAgICAgICAgICAgICQuZ2V0KGFqYXhfcHJvY2Vzc2luZ191cmwsIGZ1bmN0aW9uKGRhdGEsIHN0YXR1cywgcmVxdWVzdClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvL3NlbGYubGFzdF9hamF4X3JlcXVlc3QgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgLy91cGRhdGVzIHRoZSByZXN1dGxzICYgZm9ybSBodG1sXG4gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVGb3JtKGRhdGEsIGRhdGFfdHlwZSk7XG5cblxuICAgICAgICAgICAgfSwgZGF0YV90eXBlKS5mYWlsKGZ1bmN0aW9uKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHt9O1xuICAgICAgICAgICAgICAgIGRhdGEuc2ZpZCA9IHNlbGYuc2ZpZDtcbiAgICAgICAgICAgICAgICBkYXRhLnRhcmdldFNlbGVjdG9yID0gc2VsZi5hamF4X3RhcmdldF9hdHRyO1xuICAgICAgICAgICAgICAgIGRhdGEub2JqZWN0ID0gc2VsZjtcbiAgICAgICAgICAgICAgICBkYXRhLmFqYXhVUkwgPSBhamF4X3Byb2Nlc3NpbmdfdXJsO1xuICAgICAgICAgICAgICAgIGRhdGEuanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgICAgICBkYXRhLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgICAgICAgICAgIGRhdGEuZXJyb3JUaHJvd24gPSBlcnJvclRocm93bjtcbiAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJFdmVudChcInNmOmFqYXhlcnJvclwiLCBbIGRhdGEgXSk7XG5cbiAgICAgICAgICAgIH0pLmFsd2F5cyhmdW5jdGlvbigpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB7fTtcbiAgICAgICAgICAgICAgICBkYXRhLnNmaWQgPSBzZWxmLnNmaWQ7XG4gICAgICAgICAgICAgICAgZGF0YS50YXJnZXRTZWxlY3RvciA9IHNlbGYuYWpheF90YXJnZXRfYXR0cjtcbiAgICAgICAgICAgICAgICBkYXRhLm9iamVjdCA9IHNlbGY7XG5cbiAgICAgICAgICAgICAgICAkdGhpcy5yZW1vdmVDbGFzcyhcInNlYXJjaC1maWx0ZXItZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc19mb3JtLmVuYWJsZUlucHV0cyhzZWxmKTtcblxuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlckV2ZW50KFwic2Y6YWpheGZvcm1maW5pc2hcIiwgWyBkYXRhIF0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jb3B5TGlzdEl0ZW1zQ29udGVudHMgPSBmdW5jdGlvbigkbGlzdF9mcm9tLCAkbGlzdF90bylcbiAgICAgICAge1xuICAgICAgICAgICAgLy9jb3B5IG92ZXIgY2hpbGQgbGlzdCBpdGVtc1xuICAgICAgICAgICAgdmFyIGxpX2NvbnRlbnRzX2FycmF5ID0gbmV3IEFycmF5KCk7XG4gICAgICAgICAgICB2YXIgZnJvbV9hdHRyaWJ1dGVzID0gbmV3IEFycmF5KCk7XG5cbiAgICAgICAgICAgIHZhciAkZnJvbV9maWVsZHMgPSAkbGlzdF9mcm9tLmZpbmQoXCI+IHVsID4gbGlcIik7XG5cbiAgICAgICAgICAgICRmcm9tX2ZpZWxkcy5lYWNoKGZ1bmN0aW9uKGkpe1xuXG4gICAgICAgICAgICAgICAgbGlfY29udGVudHNfYXJyYXkucHVzaCgkKHRoaXMpLmh0bWwoKSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9ICQodGhpcykucHJvcChcImF0dHJpYnV0ZXNcIik7XG4gICAgICAgICAgICAgICAgZnJvbV9hdHRyaWJ1dGVzLnB1c2goYXR0cmlidXRlcyk7XG5cbiAgICAgICAgICAgICAgICAvL3ZhciBmaWVsZF9uYW1lID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1zZi1maWVsZC1uYW1lXCIpO1xuICAgICAgICAgICAgICAgIC8vdmFyIHRvX2ZpZWxkID0gJGxpc3RfdG8uZmluZChcIj4gdWwgPiBsaVtkYXRhLXNmLWZpZWxkLW5hbWU9J1wiK2ZpZWxkX25hbWUrXCInXVwiKTtcblxuICAgICAgICAgICAgICAgIC8vc2VsZi5jb3B5QXR0cmlidXRlcygkKHRoaXMpLCAkbGlzdF90bywgXCJkYXRhLXNmLVwiKTtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHZhciBsaV9pdCA9IDA7XG4gICAgICAgICAgICB2YXIgJHRvX2ZpZWxkcyA9ICRsaXN0X3RvLmZpbmQoXCI+IHVsID4gbGlcIik7XG4gICAgICAgICAgICAkdG9fZmllbGRzLmVhY2goZnVuY3Rpb24oaSl7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5odG1sKGxpX2NvbnRlbnRzX2FycmF5W2xpX2l0XSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgJGZyb21fZmllbGQgPSAkKCRmcm9tX2ZpZWxkcy5nZXQobGlfaXQpKTtcblxuICAgICAgICAgICAgICAgIHZhciAkdG9fZmllbGQgPSAkKHRoaXMpO1xuICAgICAgICAgICAgICAgICR0b19maWVsZC5yZW1vdmVBdHRyKFwiZGF0YS1zZi10YXhvbm9teS1hcmNoaXZlXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuY29weUF0dHJpYnV0ZXMoJGZyb21fZmllbGQsICR0b19maWVsZCk7XG5cbiAgICAgICAgICAgICAgICBsaV9pdCsrO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8qdmFyICRmcm9tX2ZpZWxkcyA9ICRsaXN0X2Zyb20uZmluZChcIiB1bCA+IGxpXCIpO1xuICAgICAgICAgICAgIHZhciAkdG9fZmllbGRzID0gJGxpc3RfdG8uZmluZChcIiA+IGxpXCIpO1xuICAgICAgICAgICAgICRmcm9tX2ZpZWxkcy5lYWNoKGZ1bmN0aW9uKGluZGV4LCB2YWwpe1xuICAgICAgICAgICAgIGlmKCQodGhpcykuaGFzQXR0cmlidXRlKFwiZGF0YS1zZi10YXhvbm9teS1hcmNoaXZlXCIpKVxuICAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgIHRoaXMuY29weUF0dHJpYnV0ZXMoJGxpc3RfZnJvbSwgJGxpc3RfdG8pOyovXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1BdHRyaWJ1dGVzID0gZnVuY3Rpb24oJGxpc3RfZnJvbSwgJGxpc3RfdG8pXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmcm9tX2F0dHJpYnV0ZXMgPSAkbGlzdF9mcm9tLnByb3AoXCJhdHRyaWJ1dGVzXCIpO1xuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIDxzZWxlY3Q+IGF0dHJpYnV0ZXMgYW5kIGFwcGx5IHRoZW0gb24gPGRpdj5cblxuICAgICAgICAgICAgdmFyIHRvX2F0dHJpYnV0ZXMgPSAkbGlzdF90by5wcm9wKFwiYXR0cmlidXRlc1wiKTtcbiAgICAgICAgICAgICQuZWFjaCh0b19hdHRyaWJ1dGVzLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkbGlzdF90by5yZW1vdmVBdHRyKHRoaXMubmFtZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgJC5lYWNoKGZyb21fYXR0cmlidXRlcywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgJGxpc3RfdG8uYXR0cih0aGlzLm5hbWUsIHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29weUF0dHJpYnV0ZXMgPSBmdW5jdGlvbigkZnJvbSwgJHRvLCBwcmVmaXgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKHR5cGVvZihwcmVmaXgpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBwcmVmaXggPSBcIlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgZnJvbV9hdHRyaWJ1dGVzID0gJGZyb20ucHJvcChcImF0dHJpYnV0ZXNcIik7XG5cbiAgICAgICAgICAgIHZhciB0b19hdHRyaWJ1dGVzID0gJHRvLnByb3AoXCJhdHRyaWJ1dGVzXCIpO1xuICAgICAgICAgICAgJC5lYWNoKHRvX2F0dHJpYnV0ZXMsIGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgaWYocHJlZml4IT1cIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hbWUuaW5kZXhPZihwcmVmaXgpID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0by5yZW1vdmVBdHRyKHRoaXMubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLy8kdG8ucmVtb3ZlQXR0cih0aGlzLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAkLmVhY2goZnJvbV9hdHRyaWJ1dGVzLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkdG8uYXR0cih0aGlzLm5hbWUsIHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvcHlGb3JtQXR0cmlidXRlcyA9IGZ1bmN0aW9uKCRmcm9tLCAkdG8pXG4gICAgICAgIHtcbiAgICAgICAgICAgICR0by5yZW1vdmVBdHRyKFwiZGF0YS1jdXJyZW50LXRheG9ub215LWFyY2hpdmVcIik7XG4gICAgICAgICAgICB0aGlzLmNvcHlBdHRyaWJ1dGVzKCRmcm9tLCAkdG8pO1xuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUZvcm0gPSBmdW5jdGlvbihkYXRhLCBkYXRhX3R5cGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKGRhdGFfdHlwZT09XCJqc29uXCIpXG4gICAgICAgICAgICB7Ly90aGVuIHdlIGRpZCBhIHJlcXVlc3QgdG8gdGhlIGFqYXggZW5kcG9pbnQsIHNvIGV4cGVjdCBhbiBvYmplY3QgYmFja1xuXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mKGRhdGFbJ2Zvcm0nXSkhPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLy9yZW1vdmUgYWxsIGV2ZW50cyBmcm9tIFMmRiBmb3JtXG4gICAgICAgICAgICAgICAgICAgICR0aGlzLm9mZigpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vcmVmcmVzaCB0aGUgZm9ybSAoYXV0byBjb3VudClcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3B5TGlzdEl0ZW1zQ29udGVudHMoJChkYXRhWydmb3JtJ10pLCAkdGhpcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy9yZSBpbml0IFMmRiBjbGFzcyBvbiB0aGUgZm9ybVxuICAgICAgICAgICAgICAgICAgICAvLyR0aGlzLnNlYXJjaEFuZEZpbHRlcigpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vaWYgYWpheCBpcyBlbmFibGVkIGluaXQgdGhlIHBhZ2luYXRpb25cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQodHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYoc2VsZi5pc19hamF4PT0xKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldHVwQWpheFBhZ2luYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRSZXN1bHRzID0gZnVuY3Rpb24oZGF0YSwgZGF0YV90eXBlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZihkYXRhX3R5cGU9PVwianNvblwiKVxuICAgICAgICAgICAgey8vdGhlbiB3ZSBkaWQgYSByZXF1ZXN0IHRvIHRoZSBhamF4IGVuZHBvaW50LCBzbyBleHBlY3QgYW4gb2JqZWN0IGJhY2tcbiAgICAgICAgICAgICAgICAvL2dyYWIgdGhlIHJlc3VsdHMgYW5kIGxvYWQgaW5cbiAgICAgICAgICAgICAgICAvL3NlbGYuJGFqYXhfcmVzdWx0c19jb250YWluZXIuYXBwZW5kKGRhdGFbJ3Jlc3VsdHMnXSk7XG4gICAgICAgICAgICAgICAgc2VsZi5sb2FkX21vcmVfaHRtbCA9IGRhdGFbJ3Jlc3VsdHMnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoZGF0YV90eXBlPT1cImh0bWxcIilcbiAgICAgICAgICAgIHsvL3dlIGFyZSBleHBlY3RpbmcgdGhlIGh0bWwgb2YgdGhlIHJlc3VsdHMgcGFnZSBiYWNrLCBzbyBleHRyYWN0IHRoZSBodG1sIHdlIG5lZWRcbiAgICAgICAgICAgICAgICB2YXIgJGRhdGFfb2JqID0gJChkYXRhKTtcbiAgICAgICAgICAgICAgICBzZWxmLmxvYWRfbW9yZV9odG1sID0gJGRhdGFfb2JqLmZpbmQoc2VsZi5hamF4X3RhcmdldF9hdHRyKS5odG1sKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTkVXIEhUTUxcIiwgc2VsZi5sb2FkX21vcmVfaHRtbCk7XG5cbiAgICAgICAgICAgIHZhciBpbmZpbml0ZV9zY3JvbGxfZW5kID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmKCQoXCI8ZGl2PlwiK3NlbGYubG9hZF9tb3JlX2h0bWwrXCI8L2Rpdj5cIikuZmluZChcIltkYXRhLXNlYXJjaC1maWx0ZXItYWN0aW9uPSdpbmZpbml0ZS1zY3JvbGwtZW5kJ11cIikubGVuZ3RoPjApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaW5maW5pdGVfc2Nyb2xsX2VuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vaWYgdGhlcmUgaXMgYW5vdGhlciBzZWxlY3RvciBmb3IgaW5maW5pdGUgc2Nyb2xsLCBmaW5kIHRoZSBjb250ZW50cyBvZiB0aGF0IGluc3RlYWRcbiAgICAgICAgICAgIGlmKHNlbGYuaW5maW5pdGVfc2Nyb2xsX2NvbnRhaW5lciE9XCJcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxmLmxvYWRfbW9yZV9odG1sID0gJChcIjxkaXY+XCIrc2VsZi5sb2FkX21vcmVfaHRtbCtcIjwvZGl2PlwiKS5maW5kKHNlbGYuaW5maW5pdGVfc2Nyb2xsX2NvbnRhaW5lcikuaHRtbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoc2VsZi5pbmZpbml0ZV9zY3JvbGxfcmVzdWx0X2NsYXNzIT1cIlwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciAkcmVzdWx0X2l0ZW1zID0gJChcIjxkaXY+XCIrc2VsZi5sb2FkX21vcmVfaHRtbCtcIjwvZGl2PlwiKS5maW5kKHNlbGYuaW5maW5pdGVfc2Nyb2xsX3Jlc3VsdF9jbGFzcyk7XG4gICAgICAgICAgICAgICAgdmFyICRyZXN1bHRfaXRlbXNfY29udGFpbmVyID0gJCgnPGRpdi8+Jywge30pO1xuICAgICAgICAgICAgICAgICRyZXN1bHRfaXRlbXNfY29udGFpbmVyLmFwcGVuZCgkcmVzdWx0X2l0ZW1zKTtcblxuICAgICAgICAgICAgICAgIHNlbGYubG9hZF9tb3JlX2h0bWwgPSAkcmVzdWx0X2l0ZW1zX2NvbnRhaW5lci5odG1sKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGluZmluaXRlX3Njcm9sbF9lbmQpXG4gICAgICAgICAgICB7Ly93ZSBmb3VuZCBhIGRhdGEgYXR0cmlidXRlIHNpZ25hbGxpbmcgdGhlIGxhc3QgcGFnZSBzbyBmaW5pc2ggaGVyZVxuXG4gICAgICAgICAgICAgICAgc2VsZi5pc19tYXhfcGFnZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNlbGYubGFzdF9sb2FkX21vcmVfaHRtbCA9IHNlbGYubG9hZF9tb3JlX2h0bWw7XG5cbiAgICAgICAgICAgICAgICBzZWxmLmluZmluaXRlU2Nyb2xsQXBwZW5kKHNlbGYubG9hZF9tb3JlX2h0bWwpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKHNlbGYubGFzdF9sb2FkX21vcmVfaHRtbCE9PXNlbGYubG9hZF9tb3JlX2h0bWwpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy9jaGVjayB0byBtYWtlIHN1cmUgdGhlIG5ldyBodG1sIGZldGNoZWQgaXMgZGlmZmVyZW50XG4gICAgICAgICAgICAgICAgc2VsZi5sYXN0X2xvYWRfbW9yZV9odG1sID0gc2VsZi5sb2FkX21vcmVfaHRtbDtcbiAgICAgICAgICAgICAgICBzZWxmLmluZmluaXRlU2Nyb2xsQXBwZW5kKHNlbGYubG9hZF9tb3JlX2h0bWwpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7Ly93ZSByZWNlaXZlZCB0aGUgc2FtZSBtZXNzYWdlIGFnYWluIHNvIGRvbid0IGFkZCwgYW5kIHRlbGwgUyZGIHRoYXQgd2UncmUgYXQgdGhlIGVuZC4uXG4gICAgICAgICAgICAgICAgc2VsZi5pc19tYXhfcGFnZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICB0aGlzLmluZmluaXRlU2Nyb2xsQXBwZW5kID0gZnVuY3Rpb24oJG9iamVjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoc2VsZi5pbmZpbml0ZV9zY3JvbGxfcmVzdWx0X2NsYXNzIT1cIlwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNlbGYuJGluZmluaXRlX3Njcm9sbF9jb250YWluZXIuZmluZChzZWxmLmluZmluaXRlX3Njcm9sbF9yZXN1bHRfY2xhc3MpLmxhc3QoKS5hZnRlcigkb2JqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgIHNlbGYuJGluZmluaXRlX3Njcm9sbF9jb250YWluZXIuYXBwZW5kKCRvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICB0aGlzLnVwZGF0ZVJlc3VsdHMgPSBmdW5jdGlvbihkYXRhLCBkYXRhX3R5cGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKGRhdGFfdHlwZT09XCJqc29uXCIpXG4gICAgICAgICAgICB7Ly90aGVuIHdlIGRpZCBhIHJlcXVlc3QgdG8gdGhlIGFqYXggZW5kcG9pbnQsIHNvIGV4cGVjdCBhbiBvYmplY3QgYmFja1xuICAgICAgICAgICAgICAgIC8vZ3JhYiB0aGUgcmVzdWx0cyBhbmQgbG9hZCBpblxuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0c19odG1sID0gZGF0YVsncmVzdWx0cyddO1xuXG4gICAgICAgICAgICAgICAgaWYgKCB0aGlzLnJlcGxhY2VfcmVzdWx0cyApIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi4kYWpheF9yZXN1bHRzX2NvbnRhaW5lci5odG1sKHRoaXMucmVzdWx0c19odG1sKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZih0eXBlb2YoZGF0YVsnZm9ybSddKSE9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAvL3JlbW92ZSBhbGwgZXZlbnRzIGZyb20gUyZGIGZvcm1cbiAgICAgICAgICAgICAgICAgICAgJHRoaXMub2ZmKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy9yZW1vdmUgcGFnaW5hdGlvblxuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZUFqYXhQYWdpbmF0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy9yZWZyZXNoIHRoZSBmb3JtIChhdXRvIGNvdW50KVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvcHlMaXN0SXRlbXNDb250ZW50cygkKGRhdGFbJ2Zvcm0nXSksICR0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICAvL3VwZGF0ZSBhdHRyaWJ1dGVzIG9uIGZvcm1cbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3B5Rm9ybUF0dHJpYnV0ZXMoJChkYXRhWydmb3JtJ10pLCAkdGhpcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy9yZSBpbml0IFMmRiBjbGFzcyBvbiB0aGUgZm9ybVxuICAgICAgICAgICAgICAgICAgICAkdGhpcy5zZWFyY2hBbmRGaWx0ZXIoeydpc0luaXQnOiBmYWxzZX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAvLyR0aGlzLmZpbmQoXCJpbnB1dFwiKS5yZW1vdmVBdHRyKFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihkYXRhX3R5cGU9PVwiaHRtbFwiKSB7Ly93ZSBhcmUgZXhwZWN0aW5nIHRoZSBodG1sIG9mIHRoZSByZXN1bHRzIHBhZ2UgYmFjaywgc28gZXh0cmFjdCB0aGUgaHRtbCB3ZSBuZWVkXG5cbiAgICAgICAgICAgICAgICB2YXIgJGRhdGFfb2JqID0gJChkYXRhKTtcblxuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0c19odG1sID0gJGRhdGFfb2JqLmZpbmQoIHRoaXMuYWpheF90YXJnZXRfYXR0ciApLmh0bWwoKTtcblxuICAgICAgICAgICAgICAgIGlmICggdGhpcy5yZXBsYWNlX3Jlc3VsdHMgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuJGFqYXhfcmVzdWx0c19jb250YWluZXIuaHRtbCh0aGlzLnJlc3VsdHNfaHRtbCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2VsZi51cGRhdGVDb250ZW50QXJlYXMoICRkYXRhX29iaiApO1xuXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuJGFqYXhfcmVzdWx0c19jb250YWluZXIuZmluZChcIi5zZWFyY2hhbmRmaWx0ZXJcIikubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICB7Ly90aGVuIHRoZXJlIGFyZSBzZWFyY2ggZm9ybShzKSBpbnNpZGUgdGhlIHJlc3VsdHMgY29udGFpbmVyLCBzbyByZS1pbml0IHRoZW1cblxuICAgICAgICAgICAgICAgICAgICBzZWxmLiRhamF4X3Jlc3VsdHNfY29udGFpbmVyLmZpbmQoXCIuc2VhcmNoYW5kZmlsdGVyXCIpLnNlYXJjaEFuZEZpbHRlcigpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vaWYgdGhlIGN1cnJlbnQgc2VhcmNoIGZvcm0gaXMgbm90IGluc2lkZSB0aGUgcmVzdWx0cyBjb250YWluZXIsIHRoZW4gcHJvY2VlZCBhcyBub3JtYWwgYW5kIHVwZGF0ZSB0aGUgZm9ybVxuICAgICAgICAgICAgICAgIGlmKHNlbGYuJGFqYXhfcmVzdWx0c19jb250YWluZXIuZmluZChcIi5zZWFyY2hhbmRmaWx0ZXJbZGF0YS1zZi1mb3JtLWlkPSdcIiArIHNlbGYuc2ZpZCArIFwiJ11cIikubGVuZ3RoPT0wKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyICRuZXdfc2VhcmNoX2Zvcm0gPSAkZGF0YV9vYmouZmluZChcIi5zZWFyY2hhbmRmaWx0ZXJbZGF0YS1zZi1mb3JtLWlkPSdcIiArIHNlbGYuc2ZpZCArIFwiJ11cIik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCRuZXdfc2VhcmNoX2Zvcm0ubGVuZ3RoID09IDEpIHsvL3RoZW4gcmVwbGFjZSB0aGUgc2VhcmNoIGZvcm0gd2l0aCB0aGUgbmV3IG9uZVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3JlbW92ZSBhbGwgZXZlbnRzIGZyb20gUyZGIGZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLm9mZigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3JlbW92ZSBwYWdpbmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZUFqYXhQYWdpbmF0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVmcmVzaCB0aGUgZm9ybSAoYXV0byBjb3VudClcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29weUxpc3RJdGVtc0NvbnRlbnRzKCRuZXdfc2VhcmNoX2Zvcm0sICR0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy91cGRhdGUgYXR0cmlidXRlcyBvbiBmb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvcHlGb3JtQXR0cmlidXRlcygkbmV3X3NlYXJjaF9mb3JtLCAkdGhpcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmUgaW5pdCBTJkYgY2xhc3Mgb24gdGhlIGZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLnNlYXJjaEFuZEZpbHRlcih7J2lzSW5pdCc6IGZhbHNlfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8kdGhpcy5maW5kKFwiaW5wdXRcIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWxmLmlzX21heF9wYWdlZCA9IGZhbHNlOyAvL2ZvciBpbmZpbml0ZSBzY3JvbGxcbiAgICAgICAgICAgIHNlbGYuY3VycmVudF9wYWdlZCA9IDE7IC8vZm9yIGluZmluaXRlIHNjcm9sbFxuICAgICAgICAgICAgc2VsZi5zZXRJbmZpbml0ZVNjcm9sbENvbnRhaW5lcigpO1xuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbnRlbnRBcmVhcyA9IGZ1bmN0aW9uKCAkaHRtbF9kYXRhICkge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBhZGQgYWRkaXRpb25hbCBjb250ZW50IGFyZWFzXG4gICAgICAgICAgICBpZiAoIHRoaXMuYWpheF91cGRhdGVfc2VjdGlvbnMgJiYgdGhpcy5hamF4X3VwZGF0ZV9zZWN0aW9ucy5sZW5ndGggKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5hamF4X3VwZGF0ZV9zZWN0aW9ucy5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gdGhpcy5hamF4X3VwZGF0ZV9zZWN0aW9uc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICQoIHNlbGVjdG9yICkuaHRtbCggJGh0bWxfZGF0YS5maW5kKCBzZWxlY3RvciApLmh0bWwoKSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZhZGVDb250ZW50QXJlYXMgPSBmdW5jdGlvbiggZGlyZWN0aW9uICkge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgb3BhY2l0eSA9IDAuNTtcbiAgICAgICAgICAgIGlmICggZGlyZWN0aW9uID09PSBcImluXCIgKSB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eSA9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICggdGhpcy5hamF4X3VwZGF0ZV9zZWN0aW9ucyAmJiB0aGlzLmFqYXhfdXBkYXRlX3NlY3Rpb25zLmxlbmd0aCApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmFqYXhfdXBkYXRlX3NlY3Rpb25zLmxlbmd0aDsgKytpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSB0aGlzLmFqYXhfdXBkYXRlX3NlY3Rpb25zW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgJCggc2VsZWN0b3IgKS5zdG9wKHRydWUsdHJ1ZSkuYW5pbWF0ZSggeyBvcGFjaXR5OiBvcGFjaXR5fSwgXCJmYXN0XCIgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbW92ZVdvb0NvbW1lcmNlQ29udHJvbHMgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgdmFyICR3b29fb3JkZXJieSA9ICQoJy53b29jb21tZXJjZS1vcmRlcmluZyAub3JkZXJieScpO1xuICAgICAgICAgICAgdmFyICR3b29fb3JkZXJieV9mb3JtID0gJCgnLndvb2NvbW1lcmNlLW9yZGVyaW5nJyk7XG5cbiAgICAgICAgICAgICR3b29fb3JkZXJieV9mb3JtLm9mZigpO1xuICAgICAgICAgICAgJHdvb19vcmRlcmJ5Lm9mZigpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYWRkUXVlcnlQYXJhbSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCB1cmxfdHlwZSl7XG5cbiAgICAgICAgICAgIGlmKHR5cGVvZih1cmxfdHlwZSk9PVwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHVybF90eXBlID0gXCJhbGxcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuZXh0cmFfcXVlcnlfcGFyYW1zW3VybF90eXBlXVtuYW1lXSA9IHZhbHVlO1xuXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5pbml0V29vQ29tbWVyY2VDb250cm9scyA9IGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgICAgIHNlbGYucmVtb3ZlV29vQ29tbWVyY2VDb250cm9scygpO1xuXG4gICAgICAgICAgICB2YXIgJHdvb19vcmRlcmJ5ID0gJCgnLndvb2NvbW1lcmNlLW9yZGVyaW5nIC5vcmRlcmJ5Jyk7XG4gICAgICAgICAgICB2YXIgJHdvb19vcmRlcmJ5X2Zvcm0gPSAkKCcud29vY29tbWVyY2Utb3JkZXJpbmcnKTtcblxuICAgICAgICAgICAgdmFyIG9yZGVyX3ZhbCA9IFwiXCI7XG4gICAgICAgICAgICBpZigkd29vX29yZGVyYnkubGVuZ3RoPjApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3JkZXJfdmFsID0gJHdvb19vcmRlcmJ5LnZhbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9yZGVyX3ZhbCA9IHNlbGYuZ2V0UXVlcnlQYXJhbUZyb21VUkwoXCJvcmRlcmJ5XCIsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYob3JkZXJfdmFsPT1cIm1lbnVfb3JkZXJcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcmRlcl92YWwgPSBcIlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZigob3JkZXJfdmFsIT1cIlwiKSYmKCEhb3JkZXJfdmFsKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxmLmV4dHJhX3F1ZXJ5X3BhcmFtcy5hbGwub3JkZXJieSA9IG9yZGVyX3ZhbDtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAkd29vX29yZGVyYnlfZm9ybS5vbignc3VibWl0JywgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgLy92YXIgZm9ybSA9IGUudGFyZ2V0O1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAkd29vX29yZGVyYnkub24oXCJjaGFuZ2VcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdmFsID0gJCh0aGlzKS52YWwoKTtcbiAgICAgICAgICAgICAgICBpZih2YWw9PVwibWVudV9vcmRlclwiKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gXCJcIjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZWxmLmV4dHJhX3F1ZXJ5X3BhcmFtcy5hbGwub3JkZXJieSA9IHZhbDtcblxuICAgICAgICAgICAgICAgICR0aGlzLnRyaWdnZXIoXCJzdWJtaXRcIilcblxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNjcm9sbFJlc3VsdHMgPSBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKChzZWxmLnNjcm9sbF9vbl9hY3Rpb249PXNlbGYuYWpheF9hY3Rpb24pfHwoc2VsZi5zY3JvbGxfb25fYWN0aW9uPT1cImFsbFwiKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNjcm9sbFRvUG9zKCk7IC8vc2Nyb2xsIHRoZSB3aW5kb3cgaWYgaXQgaGFzIGJlZW4gc2V0XG4gICAgICAgICAgICAgICAgLy9zZWxmLmFqYXhfYWN0aW9uID0gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlVXJsSGlzdG9yeSA9IGZ1bmN0aW9uKGFqYXhfcmVzdWx0c191cmwpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciB1c2VfaGlzdG9yeV9hcGkgPSAwO1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5oaXN0b3J5ICYmIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1c2VfaGlzdG9yeV9hcGkgPSAkdGhpcy5hdHRyKFwiZGF0YS11c2UtaGlzdG9yeS1hcGlcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKChzZWxmLnVwZGF0ZV9hamF4X3VybD09MSkmJih1c2VfaGlzdG9yeV9hcGk9PTEpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vbm93IGNoZWNrIGlmIHRoZSBicm93c2VyIHN1cHBvcnRzIGhpc3Rvcnkgc3RhdGUgcHVzaCA6KVxuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuaGlzdG9yeSAmJiB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBudWxsLCBhamF4X3Jlc3VsdHNfdXJsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBamF4UGFnaW5hdGlvbiA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodHlwZW9mKHNlbGYuYWpheF9saW5rc19zZWxlY3RvcikhPVwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyICRhamF4X2xpbmtzX29iamVjdCA9IGpRdWVyeShzZWxmLmFqYXhfbGlua3Nfc2VsZWN0b3IpO1xuXG4gICAgICAgICAgICAgICAgaWYoJGFqYXhfbGlua3Nfb2JqZWN0Lmxlbmd0aD4wKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJGFqYXhfbGlua3Nfb2JqZWN0Lm9mZigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ2V0QmFzZVVybCA9IGZ1bmN0aW9uKCB1cmwgKSB7XG4gICAgICAgICAgICAvL25vdyBzZWUgaWYgd2UgYXJlIG9uIHRoZSBVUkwgd2UgdGhpbmsuLi5cbiAgICAgICAgICAgIHZhciB1cmxfcGFydHMgPSB1cmwuc3BsaXQoXCI/XCIpO1xuICAgICAgICAgICAgdmFyIHVybF9iYXNlID0gXCJcIjtcblxuICAgICAgICAgICAgaWYodXJsX3BhcnRzLmxlbmd0aD4wKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVybF9iYXNlID0gdXJsX3BhcnRzWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdXJsX2Jhc2UgPSB1cmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdXJsX2Jhc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYW5GZXRjaEFqYXhSZXN1bHRzID0gZnVuY3Rpb24oZmV0Y2hfdHlwZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodHlwZW9mKGZldGNoX3R5cGUpPT1cInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBmZXRjaF90eXBlID0gXCJcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGZldGNoX2FqYXhfcmVzdWx0cyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZihzZWxmLmlzX2FqYXg9PTEpXG4gICAgICAgICAgICB7Ly90aGVuIHdlIHdpbGwgYWpheCBzdWJtaXQgdGhlIGZvcm1cblxuICAgICAgICAgICAgICAgIC8vYW5kIGlmIHdlIGNhbiBmaW5kIHRoZSByZXN1bHRzIGNvbnRhaW5lclxuICAgICAgICAgICAgICAgIGlmKHNlbGYuJGFqYXhfcmVzdWx0c19jb250YWluZXIubGVuZ3RoPT0xKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hfYWpheF9yZXN1bHRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0c191cmwgPSBzZWxmLnJlc3VsdHNfdXJsOyAgLy9cbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0c191cmxfZW5jb2RlZCA9ICcnOyAgLy9cbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudF91cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcblxuICAgICAgICAgICAgICAgIC8vaWdub3JlICMgYW5kIGV2ZXJ5dGhpbmcgYWZ0ZXJcbiAgICAgICAgICAgICAgICB2YXIgaGFzaF9wb3MgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKCcjJyk7XG4gICAgICAgICAgICAgICAgaWYoaGFzaF9wb3MhPT0tMSl7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3Vic3RyKDAsIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJyMnKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYoICggKCBzZWxmLmRpc3BsYXlfcmVzdWx0X21ldGhvZD09XCJjdXN0b21fd29vY29tbWVyY2Vfc3RvcmVcIiApIHx8ICggc2VsZi5kaXNwbGF5X3Jlc3VsdF9tZXRob2Q9PVwicG9zdF90eXBlX2FyY2hpdmVcIiApICkgJiYgKCBzZWxmLmVuYWJsZV90YXhvbm9teV9hcmNoaXZlcyA9PSAxICkgKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoIHNlbGYuY3VycmVudF90YXhvbm9teV9hcmNoaXZlICE9PVwiXCIgKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZXRjaF9hamF4X3Jlc3VsdHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoX2FqYXhfcmVzdWx0cztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8qdmFyIHJlc3VsdHNfdXJsID0gcHJvY2Vzc19mb3JtLmdldFJlc3VsdHNVcmwoc2VsZiwgc2VsZi5yZXN1bHRzX3VybCk7XG4gICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aXZlX3RheCA9IHByb2Nlc3NfZm9ybS5nZXRBY3RpdmVUYXgoKTtcbiAgICAgICAgICAgICAgICAgICAgIHZhciBxdWVyeV9wYXJhbXMgPSBzZWxmLmdldFVybFBhcmFtcyh0cnVlLCAnJywgYWN0aXZlX3RheCk7Ki9cbiAgICAgICAgICAgICAgICB9XG5cblxuXG5cbiAgICAgICAgICAgICAgICAvL25vdyBzZWUgaWYgd2UgYXJlIG9uIHRoZSBVUkwgd2UgdGhpbmsuLi5cbiAgICAgICAgICAgICAgICB2YXIgdXJsX2Jhc2UgPSB0aGlzLmdldEJhc2VVcmwoIGN1cnJlbnRfdXJsICk7XG4gICAgICAgICAgICAgICAgLy92YXIgcmVzdWx0c191cmxfYmFzZSA9IHRoaXMuZ2V0QmFzZVVybCggY3VycmVudF91cmwgKTtcblxuICAgICAgICAgICAgICAgIHZhciBsYW5nID0gc2VsZi5nZXRRdWVyeVBhcmFtRnJvbVVSTChcImxhbmdcIiwgd2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgICAgICAgICAgICAgIGlmKCh0eXBlb2YobGFuZykhPT1cInVuZGVmaW5lZFwiKSYmKGxhbmchPT1udWxsKSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHVybF9iYXNlID0gc2VsZi5hZGRVcmxQYXJhbSh1cmxfYmFzZSwgXCJsYW5nPVwiK2xhbmcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBzZmlkID0gc2VsZi5nZXRRdWVyeVBhcmFtRnJvbVVSTChcInNmaWRcIiwgd2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgICAgICAgICAgICAgLy9pZiBzZmlkIGlzIGEgbnVtYmVyXG4gICAgICAgICAgICAgICAgaWYoTnVtYmVyKHBhcnNlRmxvYXQoc2ZpZCkpID09IHNmaWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB1cmxfYmFzZSA9IHNlbGYuYWRkVXJsUGFyYW0odXJsX2Jhc2UsIFwic2ZpZD1cIitzZmlkKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL2lmIGFueSBvZiB0aGUgMyBjb25kaXRpb25zIGFyZSB0cnVlLCB0aGVuIGl0cyBnb29kIHRvIGdvXG4gICAgICAgICAgICAgICAgLy8gLSAxIHwgaWYgdGhlIHVybCBiYXNlID09IHJlc3VsdHNfdXJsXG4gICAgICAgICAgICAgICAgLy8gLSAyIHwgaWYgdXJsIGJhc2UrIFwiL1wiICA9PSByZXN1bHRzX3VybCAtIGluIGNhc2Ugb2YgdXNlciBlcnJvciBpbiB0aGUgcmVzdWx0cyBVUkxcbiAgICAgICAgICAgICAgICAvLyAtIDMgfCBpZiB0aGUgcmVzdWx0cyBVUkwgaGFzIHVybCBwYXJhbXMsIGFuZCB0aGUgY3VycmVudCB1cmwgc3RhcnRzIHdpdGggdGhlIHJlc3VsdHMgVVJMIFxuXG4gICAgICAgICAgICAgICAgLy90cmltIGFueSB0cmFpbGluZyBzbGFzaCBmb3IgZWFzaWVyIGNvbXBhcmlzb246XG4gICAgICAgICAgICAgICAgdXJsX2Jhc2UgPSB1cmxfYmFzZS5yZXBsYWNlKC9cXC8kLywgJycpO1xuICAgICAgICAgICAgICAgIHJlc3VsdHNfdXJsID0gcmVzdWx0c191cmwucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgICAgICAgICAgICAgICByZXN1bHRzX3VybF9lbmNvZGVkID0gZW5jb2RlVVJJKHJlc3VsdHNfdXJsKTtcbiAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50X3VybF9jb250YWluc19yZXN1bHRzX3VybCA9IC0xO1xuICAgICAgICAgICAgICAgIGlmKCh1cmxfYmFzZT09cmVzdWx0c191cmwpfHwodXJsX2Jhc2UudG9Mb3dlckNhc2UoKT09cmVzdWx0c191cmxfZW5jb2RlZC50b0xvd2VyQ2FzZSgpKSAgKXtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudF91cmxfY29udGFpbnNfcmVzdWx0c191cmwgPSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggcmVzdWx0c191cmwuaW5kZXhPZiggJz8nICkgIT09IC0xICYmIGN1cnJlbnRfdXJsLmxhc3RJbmRleE9mKHJlc3VsdHNfdXJsLCAwKSA9PT0gMCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdXJsX2NvbnRhaW5zX3Jlc3VsdHNfdXJsID0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKHNlbGYub25seV9yZXN1bHRzX2FqYXg9PTEpXG4gICAgICAgICAgICAgICAgey8vaWYgYSB1c2VyIGhhcyBjaG9zZW4gdG8gb25seSBhbGxvdyBhamF4IG9uIHJlc3VsdHMgcGFnZXMgKGRlZmF1bHQgYmVoYXZpb3VyKVxuXG4gICAgICAgICAgICAgICAgICAgIGlmKCBjdXJyZW50X3VybF9jb250YWluc19yZXN1bHRzX3VybCA+IC0xKVxuICAgICAgICAgICAgICAgICAgICB7Ly90aGlzIG1lYW5zIHRoZSBjdXJyZW50IFVSTCBjb250YWlucyB0aGUgcmVzdWx0cyB1cmwsIHdoaWNoIG1lYW5zIHdlIGNhbiBkbyBhamF4XG4gICAgICAgICAgICAgICAgICAgICAgICBmZXRjaF9hamF4X3Jlc3VsdHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hfYWpheF9yZXN1bHRzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoZmV0Y2hfdHlwZT09XCJwYWdpbmF0aW9uXCIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBjdXJyZW50X3VybF9jb250YWluc19yZXN1bHRzX3VybCA+IC0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgey8vdGhpcyBtZWFucyB0aGUgY3VycmVudCBVUkwgY29udGFpbnMgdGhlIHJlc3VsdHMgdXJsLCB3aGljaCBtZWFucyB3ZSBjYW4gZG8gYWpheFxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9kb24ndCBhamF4IHBhZ2luYXRpb24gd2hlbiBub3Qgb24gYSBTJkYgcGFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoX2FqYXhfcmVzdWx0cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmV0Y2hfYWpheF9yZXN1bHRzO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXR1cEFqYXhQYWdpbmF0aW9uID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICAvL2luZmluaXRlIHNjcm9sbFxuICAgICAgICAgICAgaWYodGhpcy5wYWdpbmF0aW9uX3R5cGU9PT1cImluZmluaXRlX3Njcm9sbFwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBpbmZpbml0ZV9zY3JvbGxfZW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYoc2VsZi4kYWpheF9yZXN1bHRzX2NvbnRhaW5lci5maW5kKFwiW2RhdGEtc2VhcmNoLWZpbHRlci1hY3Rpb249J2luZmluaXRlLXNjcm9sbC1lbmQnXVwiKS5sZW5ndGg+MClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGluZmluaXRlX3Njcm9sbF9lbmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmlzX21heF9wYWdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYocGFyc2VJbnQodGhpcy5pbnN0YW5jZV9udW1iZXIpPT09MSkge1xuICAgICAgICAgICAgICAgICAgICAkKHdpbmRvdykub2ZmKFwic2Nyb2xsXCIsIHNlbGYub25XaW5kb3dTY3JvbGwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmNhbkZldGNoQWpheFJlc3VsdHMoXCJwYWdpbmF0aW9uXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKHdpbmRvdykub24oXCJzY3JvbGxcIiwgc2VsZi5vbldpbmRvd1Njcm9sbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKHR5cGVvZihzZWxmLmFqYXhfbGlua3Nfc2VsZWN0b3IpPT1cInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKCdjbGljaycsIHNlbGYuYWpheF9saW5rc19zZWxlY3Rvcik7XG4gICAgICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKHNlbGYuYWpheF9saW5rc19zZWxlY3Rvcik7XG4gICAgICAgICAgICAgICAgJChzZWxmLmFqYXhfbGlua3Nfc2VsZWN0b3IpLm9mZigpO1xuXG4gICAgICAgICAgICAgICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgc2VsZi5hamF4X2xpbmtzX3NlbGVjdG9yLCBmdW5jdGlvbihlKXtcblxuICAgICAgICAgICAgICAgICAgICBpZihzZWxmLmNhbkZldGNoQWpheFJlc3VsdHMoXCJwYWdpbmF0aW9uXCIpKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5rID0galF1ZXJ5KHRoaXMpLmF0dHIoJ2hyZWYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWpheF9hY3Rpb24gPSBcInBhZ2luYXRpb25cIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2VOdW1iZXIgPSBzZWxmLmdldFBhZ2VkRnJvbVVSTChsaW5rKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi4kYWpheF9yZXN1bHRzX2NvbnRhaW5lci5hdHRyKFwiZGF0YS1wYWdlZFwiLCBwYWdlTnVtYmVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mZXRjaEFqYXhSZXN1bHRzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZ2V0UGFnZWRGcm9tVVJMID0gZnVuY3Rpb24oVVJMKXtcblxuICAgICAgICAgICAgdmFyIHBhZ2VkVmFsID0gMTtcbiAgICAgICAgICAgIC8vZmlyc3QgdGVzdCB0byBzZWUgaWYgd2UgaGF2ZSBcIi9wYWdlLzQvXCIgaW4gdGhlIFVSTFxuICAgICAgICAgICAgdmFyIHRwVmFsID0gc2VsZi5nZXRRdWVyeVBhcmFtRnJvbVVSTChcInNmX3BhZ2VkXCIsIFVSTCk7XG4gICAgICAgICAgICBpZigodHlwZW9mKHRwVmFsKT09XCJzdHJpbmdcIil8fCh0eXBlb2YodHBWYWwpPT1cIm51bWJlclwiKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYWdlZFZhbCA9IHRwVmFsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGFnZWRWYWw7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5nZXRRdWVyeVBhcmFtRnJvbVVSTCA9IGZ1bmN0aW9uKG5hbWUsIFVSTCl7XG5cbiAgICAgICAgICAgIHZhciBxc3RyaW5nID0gXCI/XCIrVVJMLnNwbGl0KCc/JylbMV07XG4gICAgICAgICAgICBpZih0eXBlb2YocXN0cmluZykhPVwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IGRlY29kZVVSSUNvbXBvbmVudCgobmV3IFJlZ0V4cCgnWz98Jl0nICsgbmFtZSArICc9JyArICcoW14mO10rPykoJnwjfDt8JCknKS5leGVjKHFzdHJpbmcpfHxbLFwiXCJdKVsxXS5yZXBsYWNlKC9cXCsvZywgJyUyMCcpKXx8bnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH07XG5cblxuXG4gICAgICAgIHRoaXMuZm9ybVVwZGF0ZWQgPSBmdW5jdGlvbihlKXtcblxuICAgICAgICAgICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZihzZWxmLmF1dG9fdXBkYXRlPT0xKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5zdWJtaXRGb3JtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKChzZWxmLmF1dG9fdXBkYXRlPT0wKSYmKHNlbGYuYXV0b19jb3VudF9yZWZyZXNoX21vZGU9PTEpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNlbGYuZm9ybVVwZGF0ZWRGZXRjaEFqYXgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZm9ybVVwZGF0ZWRGZXRjaEFqYXggPSBmdW5jdGlvbigpe1xuXG4gICAgICAgICAgICAvL2xvb3AgdGhyb3VnaCBhbGwgdGhlIGZpZWxkcyBhbmQgYnVpbGQgdGhlIFVSTFxuICAgICAgICAgICAgc2VsZi5mZXRjaEFqYXhGb3JtKCk7XG5cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vbWFrZSBhbnkgY29ycmVjdGlvbnMvdXBkYXRlcyB0byBmaWVsZHMgYmVmb3JlIHRoZSBzdWJtaXQgY29tcGxldGVzXG4gICAgICAgIHRoaXMuc2V0RmllbGRzID0gZnVuY3Rpb24oZSl7XG5cbiAgICAgICAgICAgIC8vaWYoc2VsZi5pc19hamF4PT0wKSB7XG5cbiAgICAgICAgICAgICAgICAvL3NvbWV0aW1lcyB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2l0aG91dCB0aGUgc2xpZGVyIHlldCBoYXZpbmcgdXBkYXRlZCwgYW5kIGFzIHdlIGdldCBvdXIgdmFsdWVzIGZyb21cbiAgICAgICAgICAgICAgICAvL3RoZSBzbGlkZXIgYW5kIG5vdCBpbnB1dHMsIHdlIG5lZWQgdG8gY2hlY2sgaXQgaWYgbmVlZHMgdG8gYmUgc2V0XG4gICAgICAgICAgICAgICAgLy9vbmx5IG9jY3VycyBpZiBhamF4IGlzIG9mZiwgYW5kIGF1dG9zdWJtaXQgb25cbiAgICAgICAgICAgICAgICBzZWxmLiRmaWVsZHMuZWFjaChmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgJGZpZWxkID0gJCh0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2VfZGlzcGxheV92YWx1ZXMgPSAkZmllbGQuZmluZCgnLnNmLW1ldGEtcmFuZ2Utc2xpZGVyJykuYXR0cihcImRhdGEtZGlzcGxheS12YWx1ZXMtYXNcIik7Ly9kYXRhLWRpc3BsYXktdmFsdWVzLWFzPVwidGV4dFwiXG5cbiAgICAgICAgICAgICAgICAgICAgaWYocmFuZ2VfZGlzcGxheV92YWx1ZXM9PT1cInRleHRpbnB1dFwiKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmaWVsZC5maW5kKFwiLm1ldGEtc2xpZGVyXCIpLmxlbmd0aD4wKXtcblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJGZpZWxkLmZpbmQoXCIubWV0YS1zbGlkZXJcIikuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzbGlkZXJfb2JqZWN0ID0gJCh0aGlzKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJHNsaWRlcl9lbCA9ICQodGhpcykuY2xvc2VzdChcIi5zZi1tZXRhLXJhbmdlLXNsaWRlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciBtaW5WYWwgPSAkc2xpZGVyX2VsLmF0dHIoXCJkYXRhLW1pblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ZhciBtYXhWYWwgPSAkc2xpZGVyX2VsLmF0dHIoXCJkYXRhLW1heFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWluVmFsID0gJHNsaWRlcl9lbC5maW5kKFwiLnNmLXJhbmdlLW1pblwiKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4VmFsID0gJHNsaWRlcl9lbC5maW5kKFwiLnNmLXJhbmdlLW1heFwiKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXJfb2JqZWN0Lm5vVWlTbGlkZXIuc2V0KFttaW5WYWwsIG1heFZhbF0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy99XG5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vc3VibWl0XG4gICAgICAgIHRoaXMuc3VibWl0Rm9ybSA9IGZ1bmN0aW9uKGUpe1xuXG4gICAgICAgICAgICAvL2xvb3AgdGhyb3VnaCBhbGwgdGhlIGZpZWxkcyBhbmQgYnVpbGQgdGhlIFVSTFxuICAgICAgICAgICAgaWYoc2VsZi5pc1N1Ym1pdHRpbmcgPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VsZi5zZXRGaWVsZHMoKTtcbiAgICAgICAgICAgIHNlbGYuY2xlYXJUaW1lcigpO1xuXG4gICAgICAgICAgICBzZWxmLmlzU3VibWl0dGluZyA9IHRydWU7XG5cbiAgICAgICAgICAgIHByb2Nlc3NfZm9ybS5zZXRUYXhBcmNoaXZlUmVzdWx0c1VybChzZWxmLCBzZWxmLnJlc3VsdHNfdXJsKTtcblxuICAgICAgICAgICAgc2VsZi4kYWpheF9yZXN1bHRzX2NvbnRhaW5lci5hdHRyKFwiZGF0YS1wYWdlZFwiLCAxKTsgLy9pbml0IHBhZ2VkXG5cbiAgICAgICAgICAgIGlmKHNlbGYuY2FuRmV0Y2hBamF4UmVzdWx0cygpKVxuICAgICAgICAgICAgey8vdGhlbiB3ZSB3aWxsIGFqYXggc3VibWl0IHRoZSBmb3JtXG5cbiAgICAgICAgICAgICAgICBzZWxmLmFqYXhfYWN0aW9uID0gXCJzdWJtaXRcIjsgLy9zbyB3ZSBrbm93IGl0IHdhc24ndCBwYWdpbmF0aW9uXG4gICAgICAgICAgICAgICAgc2VsZi5mZXRjaEFqYXhSZXN1bHRzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7Ly90aGVuIHdlIHdpbGwgc2ltcGx5IHJlZGlyZWN0IHRvIHRoZSBSZXN1bHRzIFVSTFxuXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdHNfdXJsID0gcHJvY2Vzc19mb3JtLmdldFJlc3VsdHNVcmwoc2VsZiwgc2VsZi5yZXN1bHRzX3VybCk7XG4gICAgICAgICAgICAgICAgdmFyIHF1ZXJ5X3BhcmFtcyA9IHNlbGYuZ2V0VXJsUGFyYW1zKHRydWUsICcnKTtcbiAgICAgICAgICAgICAgICByZXN1bHRzX3VybCA9IHNlbGYuYWRkVXJsUGFyYW0ocmVzdWx0c191cmwsIHF1ZXJ5X3BhcmFtcyk7XG5cbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlc3VsdHNfdXJsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucmVzZXRGb3JtID0gZnVuY3Rpb24oc3VibWl0X2Zvcm0pXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vdW5zZXQgYWxsIGZpZWxkc1xuICAgICAgICAgICAgc2VsZi4kZmllbGRzLmVhY2goZnVuY3Rpb24oKXtcblxuICAgICAgICAgICAgICAgIHZhciAkZmllbGQgPSAkKHRoaXMpO1xuXHRcdFx0XHRcblx0XHRcdFx0JGZpZWxkLnJlbW92ZUF0dHIoXCJkYXRhLXNmLXRheG9ub215LWFyY2hpdmVcIik7XG5cdFx0XHRcdFxuICAgICAgICAgICAgICAgIC8vc3RhbmRhcmQgZmllbGQgdHlwZXNcbiAgICAgICAgICAgICAgICAkZmllbGQuZmluZChcInNlbGVjdDpub3QoW211bHRpcGxlPSdtdWx0aXBsZSddKSA+IG9wdGlvbjpmaXJzdC1jaGlsZFwiKS5wcm9wKFwic2VsZWN0ZWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgJGZpZWxkLmZpbmQoXCJzZWxlY3RbbXVsdGlwbGU9J211bHRpcGxlJ10gPiBvcHRpb25cIikucHJvcChcInNlbGVjdGVkXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAkZmllbGQuZmluZChcImlucHV0W3R5cGU9J2NoZWNrYm94J11cIikucHJvcChcImNoZWNrZWRcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICRmaWVsZC5maW5kKFwiPiB1bCA+IGxpOmZpcnN0LWNoaWxkIGlucHV0W3R5cGU9J3JhZGlvJ11cIikucHJvcChcImNoZWNrZWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgJGZpZWxkLmZpbmQoXCJpbnB1dFt0eXBlPSd0ZXh0J11cIikudmFsKFwiXCIpO1xuICAgICAgICAgICAgICAgICRmaWVsZC5maW5kKFwiLnNmLW9wdGlvbi1hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJzZi1vcHRpb24tYWN0aXZlXCIpO1xuICAgICAgICAgICAgICAgICRmaWVsZC5maW5kKFwiPiB1bCA+IGxpOmZpcnN0LWNoaWxkIGlucHV0W3R5cGU9J3JhZGlvJ11cIikucGFyZW50KCkuYWRkQ2xhc3MoXCJzZi1vcHRpb24tYWN0aXZlXCIpOyAvL3JlIGFkZCBhY3RpdmUgY2xhc3MgdG8gZmlyc3QgXCJkZWZhdWx0XCIgb3B0aW9uXG5cbiAgICAgICAgICAgICAgICAvL251bWJlciByYW5nZSAtIDIgbnVtYmVyIGlucHV0IGZpZWxkc1xuICAgICAgICAgICAgICAgICRmaWVsZC5maW5kKFwiaW5wdXRbdHlwZT0nbnVtYmVyJ11cIikuZWFjaChmdW5jdGlvbihpbmRleCl7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyICR0aGlzSW5wdXQgPSAkKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmKCR0aGlzSW5wdXQucGFyZW50KCkucGFyZW50KCkuaGFzQ2xhc3MoXCJzZi1tZXRhLXJhbmdlXCIpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGluZGV4PT0wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXNJbnB1dC52YWwoJHRoaXNJbnB1dC5hdHRyKFwibWluXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoaW5kZXg9PTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpc0lucHV0LnZhbCgkdGhpc0lucHV0LmF0dHIoXCJtYXhcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vbWV0YSAvIG51bWJlcnMgd2l0aCAyIGlucHV0cyAoZnJvbSAvIHRvIGZpZWxkcykgLSBzZWNvbmQgaW5wdXQgbXVzdCBiZSByZXNldCB0byBtYXggdmFsdWVcbiAgICAgICAgICAgICAgICB2YXIgJG1ldGFfc2VsZWN0X2Zyb21fdG8gPSAkZmllbGQuZmluZChcIi5zZi1tZXRhLXJhbmdlLXNlbGVjdC1mcm9tdG9cIik7XG5cbiAgICAgICAgICAgICAgICBpZigkbWV0YV9zZWxlY3RfZnJvbV90by5sZW5ndGg+MCkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGFydF9taW4gPSAkbWV0YV9zZWxlY3RfZnJvbV90by5hdHRyKFwiZGF0YS1taW5cIik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGFydF9tYXggPSAkbWV0YV9zZWxlY3RfZnJvbV90by5hdHRyKFwiZGF0YS1tYXhcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgJG1ldGFfc2VsZWN0X2Zyb21fdG8uZmluZChcInNlbGVjdFwiKS5lYWNoKGZ1bmN0aW9uKGluZGV4KXtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICR0aGlzSW5wdXQgPSAkKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpbmRleD09MCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXNJbnB1dC52YWwoc3RhcnRfbWluKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoaW5kZXg9PTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpc0lucHV0LnZhbChzdGFydF9tYXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciAkbWV0YV9yYWRpb19mcm9tX3RvID0gJGZpZWxkLmZpbmQoXCIuc2YtbWV0YS1yYW5nZS1yYWRpby1mcm9tdG9cIik7XG5cbiAgICAgICAgICAgICAgICBpZigkbWV0YV9yYWRpb19mcm9tX3RvLmxlbmd0aD4wKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0X21pbiA9ICRtZXRhX3JhZGlvX2Zyb21fdG8uYXR0cihcImRhdGEtbWluXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRfbWF4ID0gJG1ldGFfcmFkaW9fZnJvbV90by5hdHRyKFwiZGF0YS1tYXhcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyICRyYWRpb19ncm91cHMgPSAkbWV0YV9yYWRpb19mcm9tX3RvLmZpbmQoJy5zZi1pbnB1dC1yYW5nZS1yYWRpbycpO1xuXG4gICAgICAgICAgICAgICAgICAgICRyYWRpb19ncm91cHMuZWFjaChmdW5jdGlvbihpbmRleCl7XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRyYWRpb3MgPSAkKHRoaXMpLmZpbmQoXCIuc2YtaW5wdXQtcmFkaW9cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAkcmFkaW9zLnByb3AoXCJjaGVja2VkXCIsIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaW5kZXg9PTApXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJhZGlvcy5maWx0ZXIoJ1t2YWx1ZT1cIicrc3RhcnRfbWluKydcIl0nKS5wcm9wKFwiY2hlY2tlZFwiLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoaW5kZXg9PTEpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJhZGlvcy5maWx0ZXIoJ1t2YWx1ZT1cIicrc3RhcnRfbWF4KydcIl0nKS5wcm9wKFwiY2hlY2tlZFwiLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vbnVtYmVyIHNsaWRlciAtIG5vVWlTbGlkZXJcbiAgICAgICAgICAgICAgICAkZmllbGQuZmluZChcIi5tZXRhLXNsaWRlclwiKS5lYWNoKGZ1bmN0aW9uKGluZGV4KXtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgc2xpZGVyX29iamVjdCA9ICQodGhpcylbMF07XG4gICAgICAgICAgICAgICAgICAgIC8qdmFyIHNsaWRlcl9vYmplY3QgPSAkY29udGFpbmVyLmZpbmQoXCIubWV0YS1zbGlkZXJcIilbMF07XG4gICAgICAgICAgICAgICAgICAgICB2YXIgc2xpZGVyX3ZhbCA9IHNsaWRlcl9vYmplY3Qubm9VaVNsaWRlci5nZXQoKTsqL1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciAkc2xpZGVyX2VsID0gJCh0aGlzKS5jbG9zZXN0KFwiLnNmLW1ldGEtcmFuZ2Utc2xpZGVyXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWluVmFsID0gJHNsaWRlcl9lbC5hdHRyKFwiZGF0YS1taW5cIik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXhWYWwgPSAkc2xpZGVyX2VsLmF0dHIoXCJkYXRhLW1heFwiKTtcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyX29iamVjdC5ub1VpU2xpZGVyLnNldChbbWluVmFsLCBtYXhWYWxdKTtcblxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy9uZWVkIHRvIHNlZSBpZiBhbnkgYXJlIGNvbWJvYm94IGFuZCBhY3QgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgICAgICB2YXIgJGNvbWJvYm94ID0gJGZpZWxkLmZpbmQoXCJzZWxlY3RbZGF0YS1jb21ib2JveD0nMSddXCIpO1xuICAgICAgICAgICAgICAgIGlmKCRjb21ib2JveC5sZW5ndGg+MClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgJGNvbWJvYm94LmNob3NlbiAhPSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29tYm9ib3gudHJpZ2dlcihcImNob3Nlbjp1cGRhdGVkXCIpOyAvL2ZvciBjaG9zZW4gb25seVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGNvbWJvYm94LnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29tYm9ib3gudHJpZ2dlcignY2hhbmdlLnNlbGVjdDInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNlbGYuY2xlYXJUaW1lcigpO1xuXG5cblxuICAgICAgICAgICAgaWYoc3VibWl0X2Zvcm09PVwiYWx3YXlzXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZi5zdWJtaXRGb3JtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKHN1Ym1pdF9mb3JtPT1cIm5ldmVyXCIpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5hdXRvX2NvdW50X3JlZnJlc2hfbW9kZT09MSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZm9ybVVwZGF0ZWRGZXRjaEFqYXgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKHN1Ym1pdF9mb3JtPT1cImF1dG9cIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmF1dG9fdXBkYXRlPT10cnVlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5zdWJtaXRGb3JtKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuYXV0b19jb3VudF9yZWZyZXNoX21vZGU9PTEpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm9ybVVwZGF0ZWRGZXRjaEFqYXgoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuaW5pdCgpO1xuXG4gICAgICAgIHZhciBldmVudF9kYXRhID0ge307XG4gICAgICAgIGV2ZW50X2RhdGEuc2ZpZCA9IHNlbGYuc2ZpZDtcbiAgICAgICAgZXZlbnRfZGF0YS50YXJnZXRTZWxlY3RvciA9IHNlbGYuYWpheF90YXJnZXRfYXR0cjtcbiAgICAgICAgZXZlbnRfZGF0YS5vYmplY3QgPSB0aGlzO1xuICAgICAgICBpZihvcHRzLmlzSW5pdClcbiAgICAgICAge1xuICAgICAgICAgICAgc2VsZi50cmlnZ2VyRXZlbnQoXCJzZjppbml0XCIsIGV2ZW50X2RhdGEpO1xuICAgICAgICB9XG5cbiAgICB9KTtcbn07XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW5OeVl5OXdkV0pzYVdNdllYTnpaWFJ6TDJwekwybHVZMngxWkdWekwzQnNkV2RwYmk1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU8wRkJRVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVNJc0ltWnBiR1VpT2lKblpXNWxjbUYwWldRdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lYRzUyWVhJZ0pDQmNkRngwWEhSY2REMGdLSFI1Y0dWdlppQjNhVzVrYjNjZ0lUMDlJRndpZFc1a1pXWnBibVZrWENJZ1B5QjNhVzVrYjNkYkoycFJkV1Z5ZVNkZElEb2dkSGx3Wlc5bUlHZHNiMkpoYkNBaFBUMGdYQ0oxYm1SbFptbHVaV1JjSWlBL0lHZHNiMkpoYkZzbmFsRjFaWEo1SjEwZ09pQnVkV3hzS1R0Y2JuWmhjaUJ6ZEdGMFpTQmNkRngwWEhROUlISmxjWFZwY21Vb0p5NHZjM1JoZEdVbktUdGNiblpoY2lCd2NtOWpaWE56WDJadmNtMGdYSFE5SUhKbGNYVnBjbVVvSnk0dmNISnZZMlZ6YzE5bWIzSnRKeWs3WEc1MllYSWdibTlWYVZOc2FXUmxjbHgwWEhROUlISmxjWFZwY21Vb0oyNXZkV2x6Ykdsa1pYSW5LVHRjYmk4dmRtRnlJR052YjJ0cFpYTWdJQ0FnSUNBZ0lDQTlJSEpsY1hWcGNtVW9KMnB6TFdOdmIydHBaU2NwTzF4dWRtRnlJSFJvYVhKa1VHRnlkSGtnSUNBZ0lDQTlJSEpsY1hWcGNtVW9KeTR2ZEdocGNtUndZWEowZVNjcE8xeHVYRzUzYVc1a2IzY3VjMlZoY21Ob1FXNWtSbWxzZEdWeUlEMGdlMXh1SUNBZ0lHVjRkR1Z1YzJsdmJuTTZJRnRkTEZ4dUlDQWdJSEpsWjJsemRHVnlSWGgwWlc1emFXOXVPaUJtZFc1amRHbHZiaWdnWlhoMFpXNXphVzl1VG1GdFpTQXBJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWxlSFJsYm5OcGIyNXpMbkIxYzJnb0lHVjRkR1Z1YzJsdmJrNWhiV1VnS1R0Y2JpQWdJQ0I5WEc1OU8xeHVYRzV0YjJSMWJHVXVaWGh3YjNKMGN5QTlJR1oxYm1OMGFXOXVLRzl3ZEdsdmJuTXBYRzU3WEc0Z0lDQWdkbUZ5SUdSbFptRjFiSFJ6SUQwZ2UxeHVJQ0FnSUNBZ0lDQnpkR0Z5ZEU5d1pXNWxaRG9nWm1Gc2MyVXNYRzRnSUNBZ0lDQWdJR2x6U1c1cGREb2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ1lXTjBhVzl1T2lCY0lsd2lYRzRnSUNBZ2ZUdGNibHh1SUNBZ0lIWmhjaUJ2Y0hSeklEMGdhbEYxWlhKNUxtVjRkR1Z1WkNoa1pXWmhkV3gwY3l3Z2IzQjBhVzl1Y3lrN1hHNGdJQ0FnWEc0Z0lDQWdkR2hwY21SUVlYSjBlUzVwYm1sMEtDazdYRzRnSUNBZ1hHNGdJQ0FnTHk5c2IyOXdJSFJvY205MVoyZ2daV0ZqYUNCcGRHVnRJRzFoZEdOb1pXUmNiaUFnSUNCMGFHbHpMbVZoWTJnb1puVnVZM1JwYjI0b0tWeHVJQ0FnSUh0Y2JseHVJQ0FnSUNBZ0lDQjJZWElnSkhSb2FYTWdQU0FrS0hSb2FYTXBPMXh1SUNBZ0lDQWdJQ0IyWVhJZ2MyVnNaaUE5SUhSb2FYTTdYRzRnSUNBZ0lDQWdJSFJvYVhNdWMyWnBaQ0E5SUNSMGFHbHpMbUYwZEhJb1hDSmtZWFJoTFhObUxXWnZjbTB0YVdSY0lpazdYRzVjYmlBZ0lDQWdJQ0FnYzNSaGRHVXVZV1JrVTJWaGNtTm9SbTl5YlNoMGFHbHpMbk5tYVdRc0lIUm9hWE1wTzF4dVhHNGdJQ0FnSUNBZ0lIUm9hWE11SkdacFpXeGtjeUE5SUNSMGFHbHpMbVpwYm1Rb1hDSStJSFZzSUQ0Z2JHbGNJaWs3SUM4dllTQnlaV1psY21WdVkyVWdkRzhnWldGamFDQm1hV1ZzWkhNZ2NHRnlaVzUwSUV4SlhHNWNiaUFnSUNBZ0lDQWdkR2hwY3k1bGJtRmliR1ZmZEdGNGIyNXZiWGxmWVhKamFHbDJaWE1nUFNBa2RHaHBjeTVoZEhSeUtDZGtZWFJoTFhSaGVHOXViMjE1TFdGeVkyaHBkbVZ6SnlrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WTNWeWNtVnVkRjkwWVhodmJtOXRlVjloY21Ob2FYWmxJRDBnSkhSb2FYTXVZWFIwY2lnblpHRjBZUzFqZFhKeVpXNTBMWFJoZUc5dWIyMTVMV0Z5WTJocGRtVW5LVHRjYmx4dUlDQWdJQ0FnSUNCcFppaDBlWEJsYjJZb2RHaHBjeTVsYm1GaWJHVmZkR0Y0YjI1dmJYbGZZWEpqYUdsMlpYTXBQVDFjSW5WdVpHVm1hVzVsWkZ3aUtWeHVJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbVZ1WVdKc1pWOTBZWGh2Ym05dGVWOWhjbU5vYVhabGN5QTlJRndpTUZ3aU8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR2xtS0hSNWNHVnZaaWgwYUdsekxtTjFjbkpsYm5SZmRHRjRiMjV2YlhsZllYSmphR2wyWlNrOVBWd2lkVzVrWldacGJtVmtYQ0lwWEc0Z0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVkzVnljbVZ1ZEY5MFlYaHZibTl0ZVY5aGNtTm9hWFpsSUQwZ1hDSmNJanRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lIQnliMk5sYzNOZlptOXliUzVwYm1sMEtITmxiR1l1Wlc1aFlteGxYM1JoZUc5dWIyMTVYMkZ5WTJocGRtVnpMQ0J6Wld4bUxtTjFjbkpsYm5SZmRHRjRiMjV2YlhsZllYSmphR2wyWlNrN1hHNGdJQ0FnSUNBZ0lDOHZjSEp2WTJWemMxOW1iM0p0TG5ObGRGUmhlRUZ5WTJocGRtVlNaWE4xYkhSelZYSnNLSE5sYkdZcE8xeHVJQ0FnSUNBZ0lDQndjbTlqWlhOelgyWnZjbTB1Wlc1aFlteGxTVzV3ZFhSektITmxiR1lwTzF4dVhHNGdJQ0FnSUNBZ0lHbG1LSFI1Y0dWdlppaDBhR2x6TG1WNGRISmhYM0YxWlhKNVgzQmhjbUZ0Y3lrOVBWd2lkVzVrWldacGJtVmtYQ0lwWEc0Z0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVpYaDBjbUZmY1hWbGNubGZjR0Z5WVcxeklEMGdlMkZzYkRvZ2UzMHNJSEpsYzNWc2RITTZJSHQ5TENCaGFtRjRPaUI3ZlgwN1hHNGdJQ0FnSUNBZ0lIMWNibHh1WEc0Z0lDQWdJQ0FnSUhSb2FYTXVkR1Z0Y0d4aGRHVmZhWE5mYkc5aFpHVmtJRDBnSkhSb2FYTXVZWFIwY2loY0ltUmhkR0V0ZEdWdGNHeGhkR1V0Ykc5aFpHVmtYQ0lwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbWx6WDJGcVlYZ2dQU0FrZEdocGN5NWhkSFJ5S0Z3aVpHRjBZUzFoYW1GNFhDSXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtbHVjM1JoYm1ObFgyNTFiV0psY2lBOUlDUjBhR2x6TG1GMGRISW9KMlJoZEdFdGFXNXpkR0Z1WTJVdFkyOTFiblFuS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTRrWVdwaGVGOXlaWE4xYkhSelgyTnZiblJoYVc1bGNpQTlJR3BSZFdWeWVTZ2tkR2hwY3k1aGRIUnlLRndpWkdGMFlTMWhhbUY0TFhSaGNtZGxkRndpS1NrN1hHNWNiaUFnSUNBZ0lDQWdkR2hwY3k1aGFtRjRYM1Z3WkdGMFpWOXpaV04wYVc5dWN5QTlJQ1IwYUdsekxtRjBkSElvWENKa1lYUmhMV0ZxWVhndGRYQmtZWFJsTFhObFkzUnBiMjV6WENJcElEOGdTbE5QVGk1d1lYSnpaU2dnSkhSb2FYTXVZWFIwY2loY0ltUmhkR0V0WVdwaGVDMTFjR1JoZEdVdGMyVmpkR2x2Ym5OY0lpa2dLU0E2SUZ0ZE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5KbGNHeGhZMlZmY21WemRXeDBjeUE5SUNSMGFHbHpMbUYwZEhJb1hDSmtZWFJoTFhKbGNHeGhZMlV0Y21WemRXeDBjMXdpS1NBOVBUMGdYQ0l3WENJZ1B5Qm1ZV3h6WlNBNklIUnlkV1U3WEc0Z0lDQWdJQ0FnSUZ4dUlDQWdJQ0FnSUNCMGFHbHpMbkpsYzNWc2RITmZkWEpzSUQwZ0pIUm9hWE11WVhSMGNpaGNJbVJoZEdFdGNtVnpkV3gwY3kxMWNteGNJaWs3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVaR1ZpZFdkZmJXOWtaU0E5SUNSMGFHbHpMbUYwZEhJb1hDSmtZWFJoTFdSbFluVm5MVzF2WkdWY0lpazdYRzRnSUNBZ0lDQWdJSFJvYVhNdWRYQmtZWFJsWDJGcVlYaGZkWEpzSUQwZ0pIUm9hWE11WVhSMGNpaGNJbVJoZEdFdGRYQmtZWFJsTFdGcVlYZ3RkWEpzWENJcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CaFoybHVZWFJwYjI1ZmRIbHdaU0E5SUNSMGFHbHpMbUYwZEhJb1hDSmtZWFJoTFdGcVlYZ3RjR0ZuYVc1aGRHbHZiaTEwZVhCbFhDSXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtRjFkRzlmWTI5MWJuUWdQU0FrZEdocGN5NWhkSFJ5S0Z3aVpHRjBZUzFoZFhSdkxXTnZkVzUwWENJcE8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG1GMWRHOWZZMjkxYm5SZmNtVm1jbVZ6YUY5dGIyUmxJRDBnSkhSb2FYTXVZWFIwY2loY0ltUmhkR0V0WVhWMGJ5MWpiM1Z1ZEMxeVpXWnlaWE5vTFcxdlpHVmNJaWs3WEc0Z0lDQWdJQ0FnSUhSb2FYTXViMjVzZVY5eVpYTjFiSFJ6WDJGcVlYZ2dQU0FrZEdocGN5NWhkSFJ5S0Z3aVpHRjBZUzF2Ym14NUxYSmxjM1ZzZEhNdFlXcGhlRndpS1RzZ0x5OXBaaUIzWlNCaGNtVWdibTkwSUc5dUlIUm9aU0J5WlhOMWJIUnpJSEJoWjJVc0lISmxaR2x5WldOMElISmhkR2hsY2lCMGFHRnVJSFJ5ZVNCMGJ5QnNiMkZrSUhacFlTQmhhbUY0WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjMk55YjJ4c1gzUnZYM0J2Y3lBOUlDUjBhR2x6TG1GMGRISW9YQ0prWVhSaExYTmpjbTlzYkMxMGJ5MXdiM05jSWlrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WTNWemRHOXRYM05qY205c2JGOTBieUE5SUNSMGFHbHpMbUYwZEhJb1hDSmtZWFJoTFdOMWMzUnZiUzF6WTNKdmJHd3RkRzljSWlrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YzJOeWIyeHNYMjl1WDJGamRHbHZiaUE5SUNSMGFHbHpMbUYwZEhJb1hDSmtZWFJoTFhOamNtOXNiQzF2YmkxaFkzUnBiMjVjSWlrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YkdGdVoxOWpiMlJsSUQwZ0pIUm9hWE11WVhSMGNpaGNJbVJoZEdFdGJHRnVaeTFqYjJSbFhDSXBPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtRnFZWGhmZFhKc0lEMGdKSFJvYVhNdVlYUjBjaWduWkdGMFlTMWhhbUY0TFhWeWJDY3BPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtRnFZWGhmWm05eWJWOTFjbXdnUFNBa2RHaHBjeTVoZEhSeUtDZGtZWFJoTFdGcVlYZ3RabTl5YlMxMWNtd25LVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXBjMTl5ZEd3Z1BTQWtkR2hwY3k1aGRIUnlLQ2RrWVhSaExXbHpMWEowYkNjcE8xeHVYRzRnSUNBZ0lDQWdJSFJvYVhNdVpHbHpjR3hoZVY5eVpYTjFiSFJmYldWMGFHOWtJRDBnSkhSb2FYTXVZWFIwY2lnblpHRjBZUzFrYVhOd2JHRjVMWEpsYzNWc2RDMXRaWFJvYjJRbktUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1dFlXbHVkR0ZwYmw5emRHRjBaU0E5SUNSMGFHbHpMbUYwZEhJb0oyUmhkR0V0YldGcGJuUmhhVzR0YzNSaGRHVW5LVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWhhbUY0WDJGamRHbHZiaUE5SUZ3aVhDSTdYRzRnSUNBZ0lDQWdJSFJvYVhNdWJHRnpkRjl6ZFdKdGFYUmZjWFZsY25sZmNHRnlZVzF6SUQwZ1hDSmNJanRjYmx4dUlDQWdJQ0FnSUNCMGFHbHpMbU4xY25KbGJuUmZjR0ZuWldRZ1BTQndZWEp6WlVsdWRDZ2tkR2hwY3k1aGRIUnlLQ2RrWVhSaExXbHVhWFF0Y0dGblpXUW5LU2s3WEc0Z0lDQWdJQ0FnSUhSb2FYTXViR0Z6ZEY5c2IyRmtYMjF2Y21WZmFIUnRiQ0E5SUZ3aVhDSTdYRzRnSUNBZ0lDQWdJSFJvYVhNdWJHOWhaRjl0YjNKbFgyaDBiV3dnUFNCY0lsd2lPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtRnFZWGhmWkdGMFlWOTBlWEJsSUQwZ0pIUm9hWE11WVhSMGNpZ25aR0YwWVMxaGFtRjRMV1JoZEdFdGRIbHdaU2NwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbUZxWVhoZmRHRnlaMlYwWDJGMGRISWdQU0FrZEdocGN5NWhkSFJ5S0Z3aVpHRjBZUzFoYW1GNExYUmhjbWRsZEZ3aUtUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1MWMyVmZhR2x6ZEc5eWVWOWhjR2tnUFNBa2RHaHBjeTVoZEhSeUtGd2laR0YwWVMxMWMyVXRhR2x6ZEc5eWVTMWhjR2xjSWlrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YVhOZmMzVmliV2wwZEdsdVp5QTlJR1poYkhObE8xeHVYRzRnSUNBZ0lDQWdJSFJvYVhNdWJHRnpkRjloYW1GNFgzSmxjWFZsYzNRZ1BTQnVkV3hzTzF4dVhHNGdJQ0FnSUNBZ0lHbG1LSFI1Y0dWdlppaDBhR2x6TG5KbGMzVnNkSE5mYUhSdGJDazlQVndpZFc1a1pXWnBibVZrWENJcFhHNGdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVjbVZ6ZFd4MGMxOW9kRzFzSUQwZ1hDSmNJanRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lHbG1LSFI1Y0dWdlppaDBhR2x6TG5WelpWOW9hWE4wYjNKNVgyRndhU2s5UFZ3aWRXNWtaV1pwYm1Wa1hDSXBYRzRnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11ZFhObFgyaHBjM1J2Y25sZllYQnBJRDBnWENKY0lqdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUdsbUtIUjVjR1Z2WmloMGFHbHpMbkJoWjJsdVlYUnBiMjVmZEhsd1pTazlQVndpZFc1a1pXWnBibVZrWENJcFhHNGdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVjR0ZuYVc1aGRHbHZibDkwZVhCbElEMGdYQ0p1YjNKdFlXeGNJanRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCcFppaDBlWEJsYjJZb2RHaHBjeTVqZFhKeVpXNTBYM0JoWjJWa0tUMDlYQ0oxYm1SbFptbHVaV1JjSWlsY2JpQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWpkWEp5Wlc1MFgzQmhaMlZrSUQwZ01UdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUdsbUtIUjVjR1Z2WmloMGFHbHpMbUZxWVhoZmRHRnlaMlYwWDJGMGRISXBQVDFjSW5WdVpHVm1hVzVsWkZ3aUtWeHVJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbUZxWVhoZmRHRnlaMlYwWDJGMGRISWdQU0JjSWx3aU8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYVdZb2RIbHdaVzltS0hSb2FYTXVZV3BoZUY5MWNtd3BQVDFjSW5WdVpHVm1hVzVsWkZ3aUtWeHVJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbUZxWVhoZmRYSnNJRDBnWENKY0lqdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUdsbUtIUjVjR1Z2WmloMGFHbHpMbUZxWVhoZlptOXliVjkxY213cFBUMWNJblZ1WkdWbWFXNWxaRndpS1Z4dUlDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtRnFZWGhmWm05eWJWOTFjbXdnUFNCY0lsd2lPMXh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ2FXWW9kSGx3Wlc5bUtIUm9hWE11Y21WemRXeDBjMTkxY213cFBUMWNJblZ1WkdWbWFXNWxaRndpS1Z4dUlDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuSmxjM1ZzZEhOZmRYSnNJRDBnWENKY0lqdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUdsbUtIUjVjR1Z2WmloMGFHbHpMbk5qY205c2JGOTBiMTl3YjNNcFBUMWNJblZ1WkdWbWFXNWxaRndpS1Z4dUlDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuTmpjbTlzYkY5MGIxOXdiM01nUFNCY0lsd2lPMXh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ2FXWW9kSGx3Wlc5bUtIUm9hWE11YzJOeWIyeHNYMjl1WDJGamRHbHZiaWs5UFZ3aWRXNWtaV1pwYm1Wa1hDSXBYRzRnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11YzJOeWIyeHNYMjl1WDJGamRHbHZiaUE5SUZ3aVhDSTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYVdZb2RIbHdaVzltS0hSb2FYTXVZM1Z6ZEc5dFgzTmpjbTlzYkY5MGJ5azlQVndpZFc1a1pXWnBibVZrWENJcFhHNGdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVZM1Z6ZEc5dFgzTmpjbTlzYkY5MGJ5QTlJRndpWENJN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdkR2hwY3k0a1kzVnpkRzl0WDNOamNtOXNiRjkwYnlBOUlHcFJkV1Z5ZVNoMGFHbHpMbU4xYzNSdmJWOXpZM0p2Ykd4ZmRHOHBPMXh1WEc0Z0lDQWdJQ0FnSUdsbUtIUjVjR1Z2WmloMGFHbHpMblZ3WkdGMFpWOWhhbUY0WDNWeWJDazlQVndpZFc1a1pXWnBibVZrWENJcFhHNGdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVkWEJrWVhSbFgyRnFZWGhmZFhKc0lEMGdYQ0pjSWp0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJR2xtS0hSNWNHVnZaaWgwYUdsekxtUmxZblZuWDIxdlpHVXBQVDFjSW5WdVpHVm1hVzVsWkZ3aUtWeHVJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbVJsWW5WblgyMXZaR1VnUFNCY0lsd2lPMXh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ2FXWW9kSGx3Wlc5bUtIUm9hWE11WVdwaGVGOTBZWEpuWlhSZmIySnFaV04wS1QwOVhDSjFibVJsWm1sdVpXUmNJaWxjYmlBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1aGFtRjRYM1JoY21kbGRGOXZZbXBsWTNRZ1BTQmNJbHdpTzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdhV1lvZEhsd1pXOW1LSFJvYVhNdWRHVnRjR3hoZEdWZmFYTmZiRzloWkdWa0tUMDlYQ0oxYm1SbFptbHVaV1JjSWlsY2JpQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NTBaVzF3YkdGMFpWOXBjMTlzYjJGa1pXUWdQU0JjSWpCY0lqdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUdsbUtIUjVjR1Z2WmloMGFHbHpMbUYxZEc5ZlkyOTFiblJmY21WbWNtVnphRjl0YjJSbEtUMDlYQ0oxYm1SbFptbHVaV1JjSWlsY2JpQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWhkWFJ2WDJOdmRXNTBYM0psWm5KbGMyaGZiVzlrWlNBOUlGd2lNRndpTzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdkR2hwY3k1aGFtRjRYMnhwYm10elgzTmxiR1ZqZEc5eUlEMGdKSFJvYVhNdVlYUjBjaWhjSW1SaGRHRXRZV3BoZUMxc2FXNXJjeTF6Wld4bFkzUnZjbHdpS1R0Y2JseHVYRzRnSUNBZ0lDQWdJSFJvYVhNdVlYVjBiMTkxY0dSaGRHVWdQU0FrZEdocGN5NWhkSFJ5S0Z3aVpHRjBZUzFoZFhSdkxYVndaR0YwWlZ3aUtUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1cGJuQjFkRlJwYldWeUlEMGdNRHRjYmx4dUlDQWdJQ0FnSUNCMGFHbHpMbk5sZEVsdVptbHVhWFJsVTJOeWIyeHNRMjl1ZEdGcGJtVnlJRDBnWm5WdVkzUnBiMjRvS1Z4dUlDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2THlCWGFHVnVJSGRsSUc1aGRtbG5ZWFJsSUdGM1lYa2dabkp2YlNCelpXRnlZMmdnY21WemRXeDBjeXdnWVc1a0lIUm9aVzRnY0hKbGMzTWdZbUZqYXl4Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2SUdselgyMWhlRjl3WVdkbFpDQnBjeUJ5WlhSaGFXNWxaQ3dnYzI4Z2QyVWdiMjVzZVNCM1lXNTBJSFJ2SUhObGRDQnBkQ0IwYnlCbVlXeHpaU0JwWmx4dUlDQWdJQ0FnSUNBZ0lDQWdMeThnZDJVZ1lYSmxJR2x1YVhSaGJHbDZhVzVuSUhSb1pTQnlaWE4xYkhSeklIQmhaMlVnZEdobElHWnBjbk4wSUhScGJXVWdMU0J6YnlCcWRYTjBJRnh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OGdZMmhsWTJzZ2FXWWdkR2hwY3lCMllYSWdhWE1nZFc1a1pXWnBibVZrSUNoaGN5QnBkQ0J6YUc5MWJHUWdZbVVnYjI0Z1ptbHljM1FnZFhObEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDZ2dkSGx3Wlc5bUlDZ2dkR2hwY3k1cGMxOXRZWGhmY0dGblpXUWdLU0E5UFQwZ0ozVnVaR1ZtYVc1bFpDY2dLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXBjMTl0WVhoZmNHRm5aV1FnUFNCbVlXeHpaVHNnTHk5bWIzSWdiRzloWkNCdGIzSmxJRzl1Ykhrc0lHOXVZMlVnZDJVZ1pHVjBaV04wSUhkbEozSmxJR0YwSUhSb1pTQmxibVFnYzJWMElIUm9hWE1nZEc4Z2RISjFaVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMblZ6WlY5elkzSnZiR3hmYkc5aFpHVnlJRDBnSkhSb2FYTXVZWFIwY2lnblpHRjBZUzF6YUc5M0xYTmpjbTlzYkMxc2IyRmtaWEluS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWFXNW1hVzVwZEdWZmMyTnliMnhzWDJOdmJuUmhhVzVsY2lBOUlDUjBhR2x6TG1GMGRISW9KMlJoZEdFdGFXNW1hVzVwZEdVdGMyTnliMnhzTFdOdmJuUmhhVzVsY2ljcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXBibVpwYm1sMFpWOXpZM0p2Ykd4ZmRISnBaMmRsY2w5aGJXOTFiblFnUFNBa2RHaHBjeTVoZEhSeUtDZGtZWFJoTFdsdVptbHVhWFJsTFhOamNtOXNiQzEwY21sbloyVnlKeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1sdVptbHVhWFJsWDNOamNtOXNiRjl5WlhOMWJIUmZZMnhoYzNNZ1BTQWtkR2hwY3k1aGRIUnlLQ2RrWVhSaExXbHVabWx1YVhSbExYTmpjbTlzYkMxeVpYTjFiSFF0WTJ4aGMzTW5LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11SkdsdVptbHVhWFJsWDNOamNtOXNiRjlqYjI1MFlXbHVaWElnUFNCMGFHbHpMaVJoYW1GNFgzSmxjM1ZzZEhOZlkyOXVkR0ZwYm1WeU8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppaDBlWEJsYjJZb2RHaHBjeTVwYm1acGJtbDBaVjl6WTNKdmJHeGZZMjl1ZEdGcGJtVnlLVDA5WENKMWJtUmxabWx1WldSY0lpbGNiaUFnSUNBZ0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbWx1Wm1sdWFYUmxYM05qY205c2JGOWpiMjUwWVdsdVpYSWdQU0JjSWx3aU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlZ4dUlDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdUpHbHVabWx1YVhSbFgzTmpjbTlzYkY5amIyNTBZV2x1WlhJZ1BTQnFVWFZsY25rb2RHaHBjeTVoYW1GNFgzUmhjbWRsZEY5aGRIUnlJQ3NnSnlBbklDc2dkR2hwY3k1cGJtWnBibWwwWlY5elkzSnZiR3hmWTI5dWRHRnBibVZ5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lvZEhsd1pXOW1LSFJvYVhNdWFXNW1hVzVwZEdWZmMyTnliMnhzWDNKbGMzVnNkRjlqYkdGemN5azlQVndpZFc1a1pXWnBibVZrWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXBibVpwYm1sMFpWOXpZM0p2Ykd4ZmNtVnpkV3gwWDJOc1lYTnpJRDBnWENKY0lqdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZb2RIbHdaVzltS0hSb2FYTXVkWE5sWDNOamNtOXNiRjlzYjJGa1pYSXBQVDFjSW5WdVpHVm1hVzVsWkZ3aUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVkWE5sWDNOamNtOXNiRjlzYjJGa1pYSWdQU0F4TzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUgwN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YzJWMFNXNW1hVzVwZEdWVFkzSnZiR3hEYjI1MFlXbHVaWElvS1R0Y2JseHVJQ0FnSUNBZ0lDQXZLaUJtZFc1amRHbHZibk1nS2k5Y2JseHVJQ0FnSUNBZ0lDQjBhR2x6TG5KbGMyVjBJRDBnWm5WdVkzUnBiMjRvYzNWaWJXbDBYMlp2Y20wcFhHNGdJQ0FnSUNBZ0lIdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV5WlhObGRFWnZjbTBvYzNWaWJXbDBYMlp2Y20wcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0IwYUdsekxtbHVjSFYwVlhCa1lYUmxJRDBnWm5WdVkzUnBiMjRvWkdWc1lYbEVkWEpoZEdsdmJpbGNiaUFnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWW9kSGx3Wlc5bUtHUmxiR0Y1UkhWeVlYUnBiMjRwUFQxY0luVnVaR1ZtYVc1bFpGd2lLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJrWld4aGVVUjFjbUYwYVc5dUlEMGdNekF3TzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpaV3htTG5KbGMyVjBWR2x0WlhJb1pHVnNZWGxFZFhKaGRHbHZiaWs3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQjBhR2x6TG5OamNtOXNiRlJ2VUc5eklEMGdablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnYjJabWMyVjBJRDBnTUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCallXNVRZM0p2Ykd3Z1BTQjBjblZsTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmloelpXeG1MbWx6WDJGcVlYZzlQVEVwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lvYzJWc1ppNXpZM0p2Ykd4ZmRHOWZjRzl6UFQxY0luZHBibVJ2ZDF3aUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjJabWMyVjBJRDBnTUR0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUdsbUtITmxiR1l1YzJOeWIyeHNYM1J2WDNCdmN6MDlYQ0ptYjNKdFhDSXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdlptWnpaWFFnUFNBa2RHaHBjeTV2Wm1aelpYUW9LUzUwYjNBN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlVnYVdZb2MyVnNaaTV6WTNKdmJHeGZkRzlmY0c5elBUMWNJbkpsYzNWc2RITmNJaWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1LSE5sYkdZdUpHRnFZWGhmY21WemRXeDBjMTlqYjI1MFlXbHVaWEl1YkdWdVozUm9QakFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOW1abk5sZENBOUlITmxiR1l1SkdGcVlYaGZjbVZ6ZFd4MGMxOWpiMjUwWVdsdVpYSXViMlptYzJWMEtDa3VkRzl3TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2FXWW9jMlZzWmk1elkzSnZiR3hmZEc5ZmNHOXpQVDFjSW1OMWMzUnZiVndpS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeTlqZFhOMGIyMWZjMk55YjJ4c1gzUnZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUtITmxiR1l1SkdOMWMzUnZiVjl6WTNKdmJHeGZkRzh1YkdWdVozUm9QakFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOW1abk5sZENBOUlITmxiR1l1SkdOMWMzUnZiVjl6WTNKdmJHeGZkRzh1YjJabWMyVjBLQ2t1ZEc5d08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOaGJsTmpjbTlzYkNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1LR05oYmxOamNtOXNiQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDUW9YQ0pvZEcxc0xDQmliMlI1WENJcExuTjBiM0FvS1M1aGJtbHRZWFJsS0h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhOamNtOXNiRlJ2Y0RvZ2IyWm1jMlYwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMHNJRndpYm05eWJXRnNYQ0lzSUZ3aVpXRnpaVTkxZEZGMVlXUmNJaUFwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCOU8xeHVYRzRnSUNBZ0lDQWdJSFJvYVhNdVlYUjBZV05vUVdOMGFYWmxRMnhoYzNNZ1BTQm1kVzVqZEdsdmJpZ3BlMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMMk5vWldOcklIUnZJSE5sWlNCcFppQjNaU0JoY21VZ2RYTnBibWNnWVdwaGVDQW1JR0YxZEc4Z1kyOTFiblJjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZhV1lnYm05MExDQjBhR1VnYzJWaGNtTm9JR1p2Y20wZ1pHOWxjeUJ1YjNRZ1oyVjBJSEpsYkc5aFpHVmtMQ0J6YnlCM1pTQnVaV1ZrSUhSdklIVndaR0YwWlNCMGFHVWdjMll0YjNCMGFXOXVMV0ZqZEdsMlpTQmpiR0Z6Y3lCdmJpQmhiR3dnWm1sbGJHUnpYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDUjBhR2x6TG05dUtDZGphR0Z1WjJVbkxDQW5hVzV3ZFhSYmRIbHdaVDFjSW5KaFpHbHZYQ0pkTENCcGJuQjFkRnQwZVhCbFBWd2lZMmhsWTJ0aWIzaGNJbDBzSUhObGJHVmpkQ2NzSUdaMWJtTjBhVzl1S0dVcFhHNGdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlDUmpkR2hwY3lBOUlDUW9kR2hwY3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJQ1JqZEdocGMxOXdZWEpsYm5RZ1BTQWtZM1JvYVhNdVkyeHZjMlZ6ZENoY0lteHBXMlJoZEdFdGMyWXRabWxsYkdRdGJtRnRaVjFjSWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSFJvYVhOZmRHRm5JRDBnSkdOMGFHbHpMbkJ5YjNBb1hDSjBZV2RPWVcxbFhDSXBMblJ2VEc5M1pYSkRZWE5sS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR2x1Y0hWMFgzUjVjR1VnUFNBa1kzUm9hWE11WVhSMGNpaGNJblI1Y0dWY0lpazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUhCaGNtVnVkRjkwWVdjZ1BTQWtZM1JvYVhOZmNHRnlaVzUwTG5CeWIzQW9YQ0owWVdkT1lXMWxYQ0lwTG5SdlRHOTNaWEpEWVhObEtDazdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlnb2RHaHBjMTkwWVdjOVBWd2lhVzV3ZFhSY0lpa21KaWdvYVc1d2RYUmZkSGx3WlQwOVhDSnlZV1JwYjF3aUtYeDhLR2x1Y0hWMFgzUjVjR1U5UFZ3aVkyaGxZMnRpYjNoY0lpa3BJQ1ltSUNod1lYSmxiblJmZEdGblBUMWNJbXhwWENJcEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlDUmhiR3hmYjNCMGFXOXVjeUE5SUNSamRHaHBjMTl3WVhKbGJuUXVjR0Z5Wlc1MEtDa3VabWx1WkNnbmJHa25LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJQ1JoYkd4ZmIzQjBhVzl1YzE5bWFXVnNaSE1nUFNBa1kzUm9hWE5mY0dGeVpXNTBMbkJoY21WdWRDZ3BMbVpwYm1Rb0oybHVjSFYwT21Ob1pXTnJaV1FuS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FrWVd4c1gyOXdkR2x2Ym5NdWNtVnRiM1psUTJ4aGMzTW9YQ0p6WmkxdmNIUnBiMjR0WVdOMGFYWmxYQ0lwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWtZV3hzWDI5d2RHbHZibk5mWm1sbGJHUnpMbVZoWTJnb1puVnVZM1JwYjI0b0tYdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUNSd1lYSmxiblFnUFNBa0tIUm9hWE1wTG1Oc2IzTmxjM1FvWENKc2FWd2lLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1J3WVhKbGJuUXVZV1JrUTJ4aGMzTW9YQ0p6WmkxdmNIUnBiMjR0WVdOMGFYWmxYQ0lwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlVnYVdZb2RHaHBjMTkwWVdjOVBWd2ljMlZzWldOMFhDSXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdKR0ZzYkY5dmNIUnBiMjV6SUQwZ0pHTjBhR2x6TG1Ob2FXeGtjbVZ1S0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1JoYkd4ZmIzQjBhVzl1Y3k1eVpXMXZkbVZEYkdGemN5aGNJbk5tTFc5d2RHbHZiaTFoWTNScGRtVmNJaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUIwYUdselgzWmhiQ0E5SUNSamRHaHBjeTUyWVd3b0tUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdkR2hwYzE5aGNuSmZkbUZzSUQwZ0tIUjVjR1Z2WmlCMGFHbHpYM1poYkNBOVBTQW5jM1J5YVc1bkp5QjhmQ0IwYUdselgzWmhiQ0JwYm5OMFlXNWpaVzltSUZOMGNtbHVaeWtnUHlCYmRHaHBjMTkyWVd4ZElEb2dkR2hwYzE5MllXdzdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0pDaDBhR2x6WDJGeWNsOTJZV3dwTG1WaFkyZ29ablZ1WTNScGIyNG9hU3dnZG1Gc2RXVXBlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKR04wYUdsekxtWnBibVFvWENKdmNIUnBiMjViZG1Gc2RXVTlKMXdpSzNaaGJIVmxLMXdpSjExY0lpa3VZV1JrUTJ4aGMzTW9YQ0p6WmkxdmNIUnBiMjR0WVdOMGFYWmxYQ0lwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLVHRjYmx4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNrN1hHNWNiaUFnSUNBZ0lDQWdmVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXBibWwwUVhWMGIxVndaR0YwWlVWMlpXNTBjeUE5SUdaMWJtTjBhVzl1S0NsN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUM4cUlHRjFkRzhnZFhCa1lYUmxJQ292WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaWdvYzJWc1ppNWhkWFJ2WDNWd1pHRjBaVDA5TVNsOGZDaHpaV3htTG1GMWRHOWZZMjkxYm5SZmNtVm1jbVZ6YUY5dGIyUmxQVDB4S1NsY2JpQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FrZEdocGN5NXZiaWduWTJoaGJtZGxKeXdnSjJsdWNIVjBXM1I1Y0dVOVhDSnlZV1JwYjF3aVhTd2dhVzV3ZFhSYmRIbHdaVDFjSW1Ob1pXTnJZbTk0WENKZExDQnpaV3hsWTNRbkxDQm1kVzVqZEdsdmJpaGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1YVc1d2RYUlZjR1JoZEdVb01qQXdLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5S1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDUjBhR2x6TG05dUtDZHBibkIxZENjc0lDZHBibkIxZEZ0MGVYQmxQVndpYm5WdFltVnlYQ0pkSnl3Z1puVnVZM1JwYjI0b1pTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCelpXeG1MbWx1Y0hWMFZYQmtZWFJsS0Rnd01DazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdKSFJsZUhSSmJuQjFkQ0E5SUNSMGFHbHpMbVpwYm1Rb0oybHVjSFYwVzNSNWNHVTlYQ0owWlhoMFhDSmRPbTV2ZENndWMyWXRaR0YwWlhCcFkydGxjaWtuS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdiR0Z6ZEZaaGJIVmxJRDBnSkhSbGVIUkpibkIxZEM1MllXd29LVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNSMGFHbHpMbTl1S0NkcGJuQjFkQ2NzSUNkcGJuQjFkRnQwZVhCbFBWd2lkR1Y0ZEZ3aVhUcHViM1FvTG5ObUxXUmhkR1Z3YVdOclpYSXBKeXdnWm5WdVkzUnBiMjRvS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lvYkdGemRGWmhiSFZsSVQwa2RHVjRkRWx1Y0hWMExuWmhiQ2dwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpaV3htTG1sdWNIVjBWWEJrWVhSbEtERXlNREFwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHRnpkRlpoYkhWbElEMGdKSFJsZUhSSmJuQjFkQzUyWVd3b0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLVHRjYmx4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0pIUm9hWE11YjI0b0oydGxlWEJ5WlhOekp5d2dKMmx1Y0hWMFczUjVjR1U5WENKMFpYaDBYQ0pkT201dmRDZ3VjMll0WkdGMFpYQnBZMnRsY2lrbkxDQm1kVzVqZEdsdmJpaGxLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR1V1ZDJocFkyZ2dQVDBnTVRNcGUxeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxMbkJ5WlhabGJuUkVaV1poZFd4MEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpaV3htTG5OMVltMXBkRVp2Y20wb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkx5UjBhR2x6TG05dUtDZHBibkIxZENjc0lDZHBibkIxZEM1elppMWtZWFJsY0dsamEyVnlKeXdnYzJWc1ppNWtZWFJsU1c1d2RYUlVlWEJsS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOU8xeHVYRzRnSUNBZ0lDQWdJQzh2ZEdocGN5NXBibWwwUVhWMGIxVndaR0YwWlVWMlpXNTBjeWdwTzF4dVhHNWNiaUFnSUNBZ0lDQWdkR2hwY3k1amJHVmhjbFJwYldWeUlEMGdablZ1WTNScGIyNG9LVnh1SUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiR1ZoY2xScGJXVnZkWFFvYzJWc1ppNXBibkIxZEZScGJXVnlLVHRjYmlBZ0lDQWdJQ0FnZlR0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV5WlhObGRGUnBiV1Z5SUQwZ1puVnVZM1JwYjI0b1pHVnNZWGxFZFhKaGRHbHZiaWxjYmlBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMnhsWVhKVWFXMWxiM1YwS0hObGJHWXVhVzV3ZFhSVWFXMWxjaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpaV3htTG1sdWNIVjBWR2x0WlhJZ1BTQnpaWFJVYVcxbGIzVjBLSE5sYkdZdVptOXliVlZ3WkdGMFpXUXNJR1JsYkdGNVJIVnlZWFJwYjI0cE8xeHVYRzRnSUNBZ0lDQWdJSDA3WEc1Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVoWkdSRVlYUmxVR2xqYTJWeWN5QTlJR1oxYm1OMGFXOXVLQ2xjYmlBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUNSa1lYUmxYM0JwWTJ0bGNpQTlJQ1IwYUdsekxtWnBibVFvWENJdWMyWXRaR0YwWlhCcFkydGxjbHdpS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZb0pHUmhkR1ZmY0dsamEyVnlMbXhsYm1kMGFENHdLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDUmtZWFJsWDNCcFkydGxjaTVsWVdOb0tHWjFibU4wYVc5dUtDbDdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJQ1IwYUdseklEMGdKQ2gwYUdsektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlHUmhkR1ZHYjNKdFlYUWdQU0JjSWx3aU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ1pHRjBaVVJ5YjNCa2IzZHVXV1ZoY2lBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnWkdGMFpVUnliM0JrYjNkdVRXOXVkR2dnUFNCbVlXeHpaVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnSkdOc2IzTmxjM1JmWkdGMFpWOTNjbUZ3SUQwZ0pIUm9hWE11WTJ4dmMyVnpkQ2hjSWk1elpsOWtZWFJsWDJacFpXeGtYQ0lwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaWdrWTJ4dmMyVnpkRjlrWVhSbFgzZHlZWEF1YkdWdVozUm9QakFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUmhkR1ZHYjNKdFlYUWdQU0FrWTJ4dmMyVnpkRjlrWVhSbFgzZHlZWEF1WVhSMGNpaGNJbVJoZEdFdFpHRjBaUzFtYjNKdFlYUmNJaWs3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUtDUmpiRzl6WlhOMFgyUmhkR1ZmZDNKaGNDNWhkSFJ5S0Z3aVpHRjBZUzFrWVhSbExYVnpaUzE1WldGeUxXUnliM0JrYjNkdVhDSXBQVDB4S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUmhkR1ZFY205d1pHOTNibGxsWVhJZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZb0pHTnNiM05sYzNSZlpHRjBaVjkzY21Gd0xtRjBkSElvWENKa1lYUmhMV1JoZEdVdGRYTmxMVzF2Ym5Sb0xXUnliM0JrYjNkdVhDSXBQVDB4S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUmhkR1ZFY205d1pHOTNiazF2Ym5Sb0lEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJrWVhSbFVHbGphMlZ5VDNCMGFXOXVjeUE5SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsdWJHbHVaVG9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITm9iM2RQZEdobGNrMXZiblJvY3pvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzl1VTJWc1pXTjBPaUJtZFc1amRHbHZiaWhsTENCbWNtOXRYMlpwWld4a0tYc2djMlZzWmk1a1lYUmxVMlZzWldOMEtHVXNJR1p5YjIxZlptbGxiR1FzSUNRb2RHaHBjeWtwT3lCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHRjBaVVp2Y20xaGREb2daR0YwWlVadmNtMWhkQ3hjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJoaGJtZGxUVzl1ZEdnNklHUmhkR1ZFY205d1pHOTNiazF2Ym5Sb0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1kyaGhibWRsV1dWaGNqb2daR0YwWlVSeWIzQmtiM2R1V1dWaGNseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5TzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0hObGJHWXVhWE5mY25Sc1BUMHhLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1lYUmxVR2xqYTJWeVQzQjBhVzl1Y3k1a2FYSmxZM1JwYjI0Z1BTQmNJbkowYkZ3aU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKSFJvYVhNdVpHRjBaWEJwWTJ0bGNpaGtZWFJsVUdsamEyVnlUM0IwYVc5dWN5azdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWW9jMlZzWmk1c1lXNW5YMk52WkdVaFBWd2lYQ0lwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDUXVaR0YwWlhCcFkydGxjaTV6WlhSRVpXWmhkV3gwY3loY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWtMbVY0ZEdWdVpDaGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2V5ZGtZWFJsUm05eWJXRjBKenBrWVhSbFJtOXliV0YwZlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkM1a1lYUmxjR2xqYTJWeUxuSmxaMmx2Ym1Gc1d5QnpaV3htTG14aGJtZGZZMjlrWlYxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FrTG1SaGRHVndhV05yWlhJdWMyVjBSR1ZtWVhWc2RITW9YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkM1bGVIUmxibVFvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHNuWkdGMFpVWnZjbTFoZENjNlpHRjBaVVp2Y20xaGRIMHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDUXVaR0YwWlhCcFkydGxjaTV5WldkcGIyNWhiRnRjSW1WdVhDSmRYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUtUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0NRb0p5NXNiQzF6YTJsdUxXMWxiRzl1SnlrdWJHVnVaM1JvUFQwd0tYdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBa1pHRjBaVjl3YVdOclpYSXVaR0YwWlhCcFkydGxjaWduZDJsa1oyVjBKeWt1ZDNKaGNDZ25QR1JwZGlCamJHRnpjejFjSW14c0xYTnJhVzR0YldWc2IyNGdjMlZoY21Ob1lXNWtabWxzZEdWeUxXUmhkR1V0Y0dsamEyVnlYQ0l2UGljcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlPMXh1WEc0Z0lDQWdJQ0FnSUhSb2FYTXVaR0YwWlZObGJHVmpkQ0E5SUdaMWJtTjBhVzl1S0dVc0lHWnliMjFmWm1sbGJHUXNJQ1IwYUdsektWeHVJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMllYSWdKR2x1Y0hWMFgyWnBaV3hrSUQwZ0pDaG1jbTl0WDJacFpXeGtMbWx1Y0hWMExtZGxkQ2d3S1NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ0pIUm9hWE1nUFNBa0tIUm9hWE1wTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ0pHUmhkR1ZmWm1sbGJHUnpJRDBnSkdsdWNIVjBYMlpwWld4a0xtTnNiM05sYzNRb0oxdGtZWFJoTFhObUxXWnBaV3hrTFdsdWNIVjBMWFI1Y0dVOVhDSmtZWFJsY21GdVoyVmNJbDBzSUZ0a1lYUmhMWE5tTFdacFpXeGtMV2x1Y0hWMExYUjVjR1U5WENKa1lYUmxYQ0pkSnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FrWkdGMFpWOW1hV1ZzWkhNdVpXRmphQ2htZFc1amRHbHZiaWhsTENCcGJtUmxlQ2w3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlDUjBabDlrWVhSbFgzQnBZMnRsY25NZ1BTQWtLSFJvYVhNcExtWnBibVFvWENJdWMyWXRaR0YwWlhCcFkydGxjbHdpS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdibTlmWkdGMFpWOXdhV05yWlhKeklEMGdKSFJtWDJSaGRHVmZjR2xqYTJWeWN5NXNaVzVuZEdnN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWW9ibTlmWkdGMFpWOXdhV05yWlhKelBqRXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkwzUm9aVzRnYVhRZ2FYTWdZU0JrWVhSbElISmhibWRsTENCemJ5QnRZV3RsSUhOMWNtVWdZbTkwYUNCbWFXVnNaSE1nWVhKbElHWnBiR3hsWkNCaVpXWnZjbVVnZFhCa1lYUnBibWRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR1J3WDJOdmRXNTBaWElnUFNBd08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ1pIQmZaVzF3ZEhsZlptbGxiR1JmWTI5MWJuUWdQU0F3TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWtkR1pmWkdGMFpWOXdhV05yWlhKekxtVmhZMmdvWm5WdVkzUnBiMjRvS1h0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWW9KQ2gwYUdsektTNTJZV3dvS1QwOVhDSmNJaWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa2NGOWxiWEIwZVY5bWFXVnNaRjlqYjNWdWRDc3JPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrY0Y5amIzVnVkR1Z5S3lzN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0dSd1gyVnRjSFI1WDJacFpXeGtYMk52ZFc1MFBUMHdLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCelpXeG1MbWx1Y0hWMFZYQmtZWFJsS0RFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhObGJHWXVhVzV3ZFhSVmNHUmhkR1VvTVNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdmVHRjYmx4dUlDQWdJQ0FnSUNCMGFHbHpMbUZrWkZKaGJtZGxVMnhwWkdWeWN5QTlJR1oxYm1OMGFXOXVLQ2xjYmlBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUNSdFpYUmhYM0poYm1kbElEMGdKSFJvYVhNdVptbHVaQ2hjSWk1elppMXRaWFJoTFhKaGJtZGxMWE5zYVdSbGNsd2lLVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lvSkcxbGRHRmZjbUZ1WjJVdWJHVnVaM1JvUGpBcFhHNGdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkcxbGRHRmZjbUZ1WjJVdVpXRmphQ2htZFc1amRHbHZiaWdwZTF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lBa2RHaHBjeUE5SUNRb2RHaHBjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJ0YVc0Z1BTQWtkR2hwY3k1aGRIUnlLRndpWkdGMFlTMXRhVzVjSWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCdFlYZ2dQU0FrZEdocGN5NWhkSFJ5S0Z3aVpHRjBZUzF0WVhoY0lpazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQnpiV2x1SUQwZ0pIUm9hWE11WVhSMGNpaGNJbVJoZEdFdGMzUmhjblF0YldsdVhDSXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdjMjFoZUNBOUlDUjBhR2x6TG1GMGRISW9YQ0prWVhSaExYTjBZWEowTFcxaGVGd2lLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR1JwYzNCc1lYbGZkbUZzZFdWZllYTWdQU0FrZEdocGN5NWhkSFJ5S0Z3aVpHRjBZUzFrYVhOd2JHRjVMWFpoYkhWbGN5MWhjMXdpS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUhOMFpYQWdQU0FrZEdocGN5NWhkSFJ5S0Z3aVpHRjBZUzF6ZEdWd1hDSXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdKSE4wWVhKMFgzWmhiQ0E5SUNSMGFHbHpMbVpwYm1Rb0p5NXpaaTF5WVc1blpTMXRhVzRuS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUNSbGJtUmZkbUZzSUQwZ0pIUm9hWE11Wm1sdVpDZ25Mbk5tTFhKaGJtZGxMVzFoZUNjcE8xeHVYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR1JsWTJsdFlXeGZjR3hoWTJWeklEMGdKSFJvYVhNdVlYUjBjaWhjSW1SaGRHRXRaR1ZqYVcxaGJDMXdiR0ZqWlhOY0lpazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQjBhRzkxYzJGdVpGOXpaWEJsY21GMGIzSWdQU0FrZEdocGN5NWhkSFJ5S0Z3aVpHRjBZUzEwYUc5MWMyRnVaQzF6WlhCbGNtRjBiM0pjSWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCa1pXTnBiV0ZzWDNObGNHVnlZWFJ2Y2lBOUlDUjBhR2x6TG1GMGRISW9YQ0prWVhSaExXUmxZMmx0WVd3dGMyVndaWEpoZEc5eVhDSXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJtYVdWc1pGOW1iM0p0WVhRZ1BTQjNUblZ0WWloN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdFlYSnJPaUJrWldOcGJXRnNYM05sY0dWeVlYUnZjaXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1JsWTJsdFlXeHpPaUJ3WVhKelpVWnNiMkYwS0dSbFkybHRZV3hmY0d4aFkyVnpLU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYjNWellXNWtPaUIwYUc5MWMyRnVaRjl6WlhCbGNtRjBiM0pjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTazdYRzVjYmx4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCdGFXNWZkVzVtYjNKdFlYUjBaV1FnUFNCd1lYSnpaVVpzYjJGMEtITnRhVzRwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnYldsdVgyWnZjbTFoZEhSbFpDQTlJR1pwWld4a1gyWnZjbTFoZEM1MGJ5aHdZWEp6WlVac2IyRjBLSE50YVc0cEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlHMWhlRjltYjNKdFlYUjBaV1FnUFNCbWFXVnNaRjltYjNKdFlYUXVkRzhvY0dGeWMyVkdiRzloZENoemJXRjRLU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJ0WVhoZmRXNW1iM0p0WVhSMFpXUWdQU0J3WVhKelpVWnNiMkYwS0hOdFlYZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkwyRnNaWEowS0cxcGJsOW1iM0p0WVhSMFpXUXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkwyRnNaWEowS0cxaGVGOW1iM0p0WVhSMFpXUXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkwyRnNaWEowS0dScGMzQnNZWGxmZG1Gc2RXVmZZWE1wTzF4dVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZb1pHbHpjR3hoZVY5MllXeDFaVjloY3owOVhDSjBaWGgwYVc1d2RYUmNJaWxjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0pITjBZWEowWDNaaGJDNTJZV3dvYldsdVgyWnZjbTFoZEhSbFpDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWtaVzVrWDNaaGJDNTJZV3dvYldGNFgyWnZjbTFoZEhSbFpDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCcFppaGthWE53YkdGNVgzWmhiSFZsWDJGelBUMWNJblJsZUhSY0lpbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkhOMFlYSjBYM1poYkM1b2RHMXNLRzFwYmw5bWIzSnRZWFIwWldRcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0pHVnVaRjkyWVd3dWFIUnRiQ2h0WVhoZlptOXliV0YwZEdWa0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlHNXZWVWxQY0hScGIyNXpJRDBnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21GdVoyVTZJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBbmJXbHVKem9nV3lCd1lYSnpaVVpzYjJGMEtHMXBiaWtnWFN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQW5iV0Y0SnpvZ1d5QndZWEp6WlVac2IyRjBLRzFoZUNrZ1hWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBZWEowT2lCYmJXbHVYMlp2Y20xaGRIUmxaQ3dnYldGNFgyWnZjbTFoZEhSbFpGMHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQm9ZVzVrYkdWek9pQXlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZMjl1Ym1WamREb2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhOMFpYQTZJSEJoY25ObFJteHZZWFFvYzNSbGNDa3NYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR0psYUdGMmFXOTFjam9nSjJWNGRHVnVaQzEwWVhBbkxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptOXliV0YwT2lCbWFXVnNaRjltYjNKdFlYUmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlR0Y2JseHVYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWW9jMlZzWmk1cGMxOXlkR3c5UFRFcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzV2VlVsUGNIUnBiMjV6TG1ScGNtVmpkR2x2YmlBOUlGd2ljblJzWENJN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnYzJ4cFpHVnlYMjlpYW1WamRDQTlJQ1FvZEdocGN5a3VabWx1WkNoY0lpNXRaWFJoTFhOc2FXUmxjbHdpS1Zzd1hUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppZ2dYQ0oxYm1SbFptbHVaV1JjSWlBaFBUMGdkSGx3Wlc5bUtDQnpiR2xrWlhKZmIySnFaV04wTG01dlZXbFRiR2xrWlhJZ0tTQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2WkdWemRISnZlU0JwWmlCcGRDQmxlR2x6ZEhNdUxpQjBhR2x6SUcxbFlXNXpJSE52YldWb2IzY2dZVzV2ZEdobGNpQnBibk4wWVc1alpTQm9ZV1FnYVc1cGRHbGhiR2x6WldRZ2FYUXVMbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMnhwWkdWeVgyOWlhbVZqZEM1dWIxVnBVMnhwWkdWeUxtUmxjM1J5YjNrb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzV2VldsVGJHbGtaWEl1WTNKbFlYUmxLSE5zYVdSbGNsOXZZbXBsWTNRc0lHNXZWVWxQY0hScGIyNXpLVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWtjM1JoY25SZmRtRnNMbTltWmlncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FrYzNSaGNuUmZkbUZzTG05dUtDZGphR0Z1WjJVbkxDQm1kVzVqZEdsdmJpZ3BlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMnhwWkdWeVgyOWlhbVZqZEM1dWIxVnBVMnhwWkdWeUxuTmxkQ2hiSkNoMGFHbHpLUzUyWVd3b0tTd2diblZzYkYwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5S1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FrWlc1a1gzWmhiQzV2Wm1Zb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkdWdVpGOTJZV3d1YjI0b0oyTm9ZVzVuWlNjc0lHWjFibU4wYVc5dUtDbDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpiR2xrWlhKZmIySnFaV04wTG01dlZXbFRiR2xrWlhJdWMyVjBLRnR1ZFd4c0xDQWtLSFJvYVhNcExuWmhiQ2dwWFNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SkhOMFlYSjBYM1poYkM1b2RHMXNLRzFwYmw5bWIzSnRZWFIwWldRcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlSbGJtUmZkbUZzTG1oMGJXd29iV0Y0WDJadmNtMWhkSFJsWkNrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJ4cFpHVnlYMjlpYW1WamRDNXViMVZwVTJ4cFpHVnlMbTltWmlnbmRYQmtZWFJsSnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE5zYVdSbGNsOXZZbXBsWTNRdWJtOVZhVk5zYVdSbGNpNXZiaWduZFhCa1lYUmxKeXdnWm5WdVkzUnBiMjRvSUhaaGJIVmxjeXdnYUdGdVpHeGxJQ2tnZTF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdjMnhwWkdWeVgzTjBZWEowWDNaaGJDQWdQU0J0YVc1ZlptOXliV0YwZEdWa08xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSE5zYVdSbGNsOWxibVJmZG1Gc0lDQTlJRzFoZUY5bWIzSnRZWFIwWldRN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUIyWVd4MVpTQTlJSFpoYkhWbGMxdG9ZVzVrYkdWZE8xeHVYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnZ2FHRnVaR3hsSUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzFoZUY5bWIzSnRZWFIwWldRZ1BTQjJZV3gxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JXbHVYMlp2Y20xaGRIUmxaQ0E5SUhaaGJIVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmloa2FYTndiR0Y1WDNaaGJIVmxYMkZ6UFQxY0luUmxlSFJwYm5CMWRGd2lLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNSemRHRnlkRjkyWVd3dWRtRnNLRzFwYmw5bWIzSnRZWFIwWldRcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1JsYm1SZmRtRnNMblpoYkNodFlYaGZabTl5YldGMGRHVmtLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2FXWW9aR2x6Y0d4aGVWOTJZV3gxWlY5aGN6MDlYQ0owWlhoMFhDSXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkhOMFlYSjBYM1poYkM1b2RHMXNLRzFwYmw5bWIzSnRZWFIwWldRcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1JsYm1SZmRtRnNMbWgwYld3b2JXRjRYMlp2Y20xaGRIUmxaQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc1Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OXBJSFJvYVc1cklIUm9aU0JtZFc1amRHbHZiaUIwYUdGMElHSjFhV3hrY3lCMGFHVWdWVkpNSUc1bFpXUnpJSFJ2SUdSbFkyOWtaU0IwYUdVZ1ptOXliV0YwZEdWa0lITjBjbWx1WnlCaVpXWnZjbVVnWVdSa2FXNW5JSFJ2SUhSb1pTQjFjbXhjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0NoelpXeG1MbUYxZEc5ZmRYQmtZWFJsUFQweEtYeDhLSE5sYkdZdVlYVjBiMTlqYjNWdWRGOXlaV1p5WlhOb1gyMXZaR1U5UFRFcEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2YjI1c2VTQjBjbmtnZEc4Z2RYQmtZWFJsSUdsbUlIUm9aU0IyWVd4MVpYTWdhR0YyWlNCaFkzUjFZV3hzZVNCamFHRnVaMlZrWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWW9LSE5zYVdSbGNsOXpkR0Z5ZEY5MllXd2hQVzFwYmw5bWIzSnRZWFIwWldRcGZId29jMnhwWkdWeVgyVnVaRjkyWVd3aFBXMWhlRjltYjNKdFlYUjBaV1FwS1NCN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyVnNaaTVwYm5CMWRGVndaR0YwWlNnNE1EQXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JseHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTazdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5S1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1WTJ4bFlYSlVhVzFsY2lncE95QXZMMmxuYm05eVpTQmhibmtnWTJoaGJtZGxjeUJ5WldObGJuUnNlU0J0WVdSbElHSjVJSFJvWlNCemJHbGtaWElnS0hSb2FYTWdkMkZ6SUdwMWMzUWdhVzVwZENCemFHOTFiR1J1SjNRZ1kyOTFiblFnWVhNZ1lXNGdkWEJrWVhSbElHVjJaVzUwS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5TzF4dVhHNGdJQ0FnSUNBZ0lIUm9hWE11YVc1cGRDQTlJR1oxYm1OMGFXOXVLR3RsWlhCZmNHRm5hVzVoZEdsdmJpbGNiaUFnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWW9kSGx3Wlc5bUtHdGxaWEJmY0dGbmFXNWhkR2x2YmlrOVBWd2lkVzVrWldacGJtVmtYQ0lwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUd0bFpYQmZjR0ZuYVc1aGRHbHZiaUE5SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbWx1YVhSQmRYUnZWWEJrWVhSbFJYWmxiblJ6S0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtRjBkR0ZqYUVGamRHbDJaVU5zWVhOektDazdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WVdSa1JHRjBaVkJwWTJ0bGNuTW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WVdSa1VtRnVaMlZUYkdsa1pYSnpLQ2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2YVc1cGRDQmpiMjFpYnlCaWIzaGxjMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJQ1JqYjIxaWIySnZlQ0E5SUNSMGFHbHpMbVpwYm1Rb1hDSnpaV3hsWTNSYlpHRjBZUzFqYjIxaWIySnZlRDBuTVNkZFhDSXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaWdrWTI5dFltOWliM2d1YkdWdVozUm9QakFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKR052YldKdlltOTRMbVZoWTJnb1puVnVZM1JwYjI0b2FXNWtaWGdnS1h0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUNSMGFHbHpZMklnUFNBa0tDQjBhR2x6SUNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCdWNtMGdQU0FrZEdocGMyTmlMbUYwZEhJb1hDSmtZWFJoTFdOdmJXSnZZbTk0TFc1eWJWd2lLVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JQ1IwYUdselkySXVZMmh2YzJWdUlDRTlJRndpZFc1a1pXWnBibVZrWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCamFHOXpaVzV2Y0hScGIyNXpJRDBnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxZWEpqYUY5amIyNTBZV2x1Y3pvZ2RISjFaVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZb0tIUjVjR1Z2WmlodWNtMHBJVDA5WENKMWJtUmxabWx1WldSY0lpa21KaWh1Y20wcEtYdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYUc5elpXNXZjSFJwYjI1ekxtNXZYM0psYzNWc2RITmZkR1Y0ZENBOUlHNXliVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUhOaFptVWdkRzhnZFhObElIUm9aU0JtZFc1amRHbHZibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeTl6WldGeVkyaGZZMjl1ZEdGcGJuTmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1LSE5sYkdZdWFYTmZjblJzUFQweEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1IwYUdselkySXVZV1JrUTJ4aGMzTW9YQ0pqYUc5elpXNHRjblJzWENJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWtkR2hwYzJOaUxtTm9iM05sYmloamFHOXpaVzV2Y0hScGIyNXpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlITmxiR1ZqZERKdmNIUnBiMjV6SUQwZ2UzMDdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0hObGJHWXVhWE5mY25Sc1BUMHhLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhObGJHVmpkREp2Y0hScGIyNXpMbVJwY2lBOUlGd2ljblJzWENJN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppZ29kSGx3Wlc5bUtHNXliU2toUFQxY0luVnVaR1ZtYVc1bFpGd2lLU1ltS0c1eWJTa3BlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhObGJHVmpkREp2Y0hScGIyNXpMbXhoYm1kMVlXZGxQU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRndpYm05U1pYTjFiSFJ6WENJNklHWjFibU4wYVc5dUtDbDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdibkp0TzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKSFJvYVhOallpNXpaV3hsWTNReUtITmxiR1ZqZERKdmNIUnBiMjV6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNrN1hHNWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCelpXeG1MbWx6VTNWaWJXbDBkR2x1WnlBOUlHWmhiSE5sTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2TDJsbUlHRnFZWGdnYVhNZ1pXNWhZbXhsWkNCcGJtbDBJSFJvWlNCd1lXZHBibUYwYVc5dVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmloelpXeG1MbWx6WDJGcVlYZzlQVEVwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMlZzWmk1elpYUjFjRUZxWVhoUVlXZHBibUYwYVc5dUtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNSMGFHbHpMbTl1S0Z3aWMzVmliV2wwWENJc0lIUm9hWE11YzNWaWJXbDBSbTl5YlNrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUhObGJHWXVhVzVwZEZkdmIwTnZiVzFsY21ObFEyOXVkSEp2YkhNb0tUc2dMeTkzYjI5amIyMXRaWEpqWlNCdmNtUmxjbUo1WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtS0d0bFpYQmZjR0ZuYVc1aGRHbHZiajA5Wm1Gc2MyVXBYRzRnSUNBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyVnNaaTVzWVhOMFgzTjFZbTFwZEY5eGRXVnllVjl3WVhKaGJYTWdQU0J6Wld4bUxtZGxkRlZ5YkZCaGNtRnRjeWhtWVd4elpTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0IwYUdsekxtOXVWMmx1Wkc5M1UyTnliMnhzSUQwZ1puVnVZM1JwYjI0b1pYWmxiblFwWEc0Z0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtS0NnaGMyVnNaaTVwYzE5c2IyRmthVzVuWDIxdmNtVXBJQ1ltSUNnaGMyVnNaaTVwYzE5dFlYaGZjR0ZuWldRcEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQjNhVzVrYjNkZmMyTnliMnhzSUQwZ0pDaDNhVzVrYjNjcExuTmpjbTlzYkZSdmNDZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCM2FXNWtiM2RmYzJOeWIyeHNYMkp2ZEhSdmJTQTlJQ1FvZDJsdVpHOTNLUzV6WTNKdmJHeFViM0FvS1NBcklDUW9kMmx1Wkc5M0tTNW9aV2xuYUhRb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnYzJOeWIyeHNYMjltWm5ObGRDQTlJSEJoY25ObFNXNTBLSE5sYkdZdWFXNW1hVzVwZEdWZmMyTnliMnhzWDNSeWFXZG5aWEpmWVcxdmRXNTBLVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUtITmxiR1l1SkdsdVptbHVhWFJsWDNOamNtOXNiRjlqYjI1MFlXbHVaWEl1YkdWdVozUm9QVDB4S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUhKbGMzVnNkSE5mYzJOeWIyeHNYMkp2ZEhSdmJTQTlJSE5sYkdZdUpHbHVabWx1YVhSbFgzTmpjbTlzYkY5amIyNTBZV2x1WlhJdWIyWm1jMlYwS0NrdWRHOXdJQ3NnYzJWc1ppNGthVzVtYVc1cGRHVmZjMk55YjJ4c1gyTnZiblJoYVc1bGNpNW9aV2xuYUhRb0tUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdiMlptYzJWMElEMGdLSE5sYkdZdUpHbHVabWx1YVhSbFgzTmpjbTlzYkY5amIyNTBZV2x1WlhJdWIyWm1jMlYwS0NrdWRHOXdJQ3NnYzJWc1ppNGthVzVtYVc1cGRHVmZjMk55YjJ4c1gyTnZiblJoYVc1bGNpNW9aV2xuYUhRb0tTa2dMU0IzYVc1a2IzZGZjMk55YjJ4c08xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUtIZHBibVJ2ZDE5elkzSnZiR3hmWW05MGRHOXRJRDRnY21WemRXeDBjMTl6WTNKdmJHeGZZbTkwZEc5dElDc2djMk55YjJ4c1gyOW1abk5sZENsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMlZzWmk1c2IyRmtUVzl5WlZKbGMzVnNkSE1vS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhzdkwyUnZiblFnYkc5aFpDQnRiM0psWEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjM1J5YVhCUmRXVnllVk4wY21sdVowRnVaRWhoYzJoR2NtOXRVR0YwYUNBOUlHWjFibU4wYVc5dUtIVnliQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIVnliQzV6Y0d4cGRDaGNJajljSWlsYk1GMHVjM0JzYVhRb1hDSWpYQ0lwV3pCZE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnZEdocGN5NW5kWEFnUFNCbWRXNWpkR2x2YmlnZ2JtRnRaU3dnZFhKc0lDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLQ0YxY213cElIVnliQ0E5SUd4dlkyRjBhVzl1TG1oeVpXWmNiaUFnSUNBZ0lDQWdJQ0FnSUc1aGJXVWdQU0J1WVcxbExuSmxjR3hoWTJVb0wxdGNYRnRkTHl4Y0lseGNYRnhjWEZ0Y0lpa3VjbVZ3YkdGalpTZ3ZXMXhjWFYwdkxGd2lYRnhjWEZ4Y1hWd2lLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJ5WldkbGVGTWdQU0JjSWx0Y1hGeGNQeVpkWENJcmJtRnRaU3RjSWowb1cxNG1JMTBxS1Z3aU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlISmxaMlY0SUQwZ2JtVjNJRkpsWjBWNGNDZ2djbVZuWlhoVElDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCMllYSWdjbVZ6ZFd4MGN5QTlJSEpsWjJWNExtVjRaV01vSUhWeWJDQXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkSE1nUFQwZ2JuVnNiQ0EvSUc1MWJHd2dPaUJ5WlhOMWJIUnpXekZkTzF4dUlDQWdJQ0FnSUNCOU8xeHVYRzVjYmlBZ0lDQWdJQ0FnZEdocGN5NW5aWFJWY214UVlYSmhiWE1nUFNCbWRXNWpkR2x2YmloclpXVndYM0JoWjJsdVlYUnBiMjRzSUhSNWNHVXNJR1Y0WTJ4MVpHVXBYRzRnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1LSFI1Y0dWdlppaHJaV1Z3WDNCaFoybHVZWFJwYjI0cFBUMWNJblZ1WkdWbWFXNWxaRndpS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCclpXVndYM0JoWjJsdVlYUnBiMjRnUFNCMGNuVmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppaDBlWEJsYjJZb2RIbHdaU2s5UFZ3aWRXNWtaV1pwYm1Wa1hDSXBYRzRnSUNBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSFI1Y0dVZ1BTQmNJbHdpTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnZFhKc1gzQmhjbUZ0YzE5emRISWdQU0JjSWx3aU8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5Qm5aWFFnWVd4c0lIQmhjbUZ0Y3lCbWNtOXRJR1pwWld4a2MxeHVJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlIVnliRjl3WVhKaGJYTmZZWEp5WVhrZ1BTQndjbTlqWlhOelgyWnZjbTB1WjJWMFZYSnNVR0Z5WVcxektITmxiR1lwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2JHVnVaM1JvSUQwZ1QySnFaV04wTG10bGVYTW9kWEpzWDNCaGNtRnRjMTloY25KaGVTa3ViR1Z1WjNSb08xeHVJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlHTnZkVzUwSUQwZ01EdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWW9kSGx3Wlc5bUtHVjRZMngxWkdVcElUMWNJblZ1WkdWbWFXNWxaRndpS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLSFZ5YkY5d1lYSmhiWE5mWVhKeVlYa3VhR0Z6VDNkdVVISnZjR1Z5ZEhrb1pYaGpiSFZrWlNrcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYkdWdVozUm9MUzA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaWhzWlc1bmRHZytNQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQm1iM0lnS0haaGNpQnJJR2x1SUhWeWJGOXdZWEpoYlhOZllYSnlZWGtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hWeWJGOXdZWEpoYlhOZllYSnlZWGt1YUdGelQzZHVVSEp2Y0dWeWRIa29heWtwSUh0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR05oYmw5aFpHUWdQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWW9kSGx3Wlc5bUtHVjRZMngxWkdVcElUMWNJblZ1WkdWbWFXNWxaRndpS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1LR3M5UFdWNFkyeDFaR1VwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWTJGdVgyRmtaQ0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWW9ZMkZ1WDJGa1pDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhWeWJGOXdZWEpoYlhOZmMzUnlJQ3M5SUdzZ0t5QmNJajFjSWlBcklIVnliRjl3WVhKaGJYTmZZWEp5WVhsYmExMDdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ZMjkxYm5RZ1BDQnNaVzVuZEdnZ0xTQXhLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFZ5YkY5d1lYSmhiWE5mYzNSeUlDczlJRndpSmx3aU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHTnZkVzUwS3lzN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJ4ZFdWeWVWOXdZWEpoYlhNZ1BTQmNJbHdpTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2TDJadmNtMGdjR0Z5WVcxeklHRnpJSFZ5YkNCeGRXVnllU0J6ZEhKcGJtZGNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQm1iM0p0WDNCaGNtRnRjeUE5SUhWeWJGOXdZWEpoYlhOZmMzUnlPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMMmRsZENCMWNtd2djR0Z5WVcxeklHWnliMjBnZEdobElHWnZjbTBnYVhSelpXeG1JQ2gzYUdGMElIUm9aU0IxYzJWeUlHaGhjeUJ6Wld4bFkzUmxaQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lIRjFaWEo1WDNCaGNtRnRjeUE5SUhObGJHWXVhbTlwYmxWeWJGQmhjbUZ0S0hGMVpYSjVYM0JoY21GdGN5d2dabTl5YlY5d1lYSmhiWE1wTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2TDJGa1pDQndZV2RwYm1GMGFXOXVYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppaHJaV1Z3WDNCaFoybHVZWFJwYjI0OVBYUnlkV1VwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUhCaFoyVk9kVzFpWlhJZ1BTQnpaV3htTGlSaGFtRjRYM0psYzNWc2RITmZZMjl1ZEdGcGJtVnlMbUYwZEhJb1hDSmtZWFJoTFhCaFoyVmtYQ0lwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWW9kSGx3Wlc5bUtIQmhaMlZPZFcxaVpYSXBQVDFjSW5WdVpHVm1hVzVsWkZ3aUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY0dGblpVNTFiV0psY2lBOUlERTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZb2NHRm5aVTUxYldKbGNqNHhLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NYVmxjbmxmY0dGeVlXMXpJRDBnYzJWc1ppNXFiMmx1VlhKc1VHRnlZVzBvY1hWbGNubGZjR0Z5WVcxekxDQmNJbk5tWDNCaFoyVmtQVndpSzNCaFoyVk9kVzFpWlhJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQWdJQ0FnTHk5aFpHUWdjMlpwWkZ4dUlDQWdJQ0FnSUNBZ0lDQWdMeTl4ZFdWeWVWOXdZWEpoYlhNZ1BTQnpaV3htTG1wdmFXNVZjbXhRWVhKaGJTaHhkV1Z5ZVY5d1lYSmhiWE1zSUZ3aWMyWnBaRDFjSWl0elpXeG1Mbk5tYVdRcE8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBdkx5QnNiMjl3SUhSb2NtOTFaMmdnWVc1NUlHVjRkSEpoSUhCaGNtRnRjeUFvWm5KdmJTQmxlSFFnY0d4MVoybHVjeWtnWVc1a0lHRmtaQ0IwYnlCMGFHVWdkWEpzSUNocFpTQjNiMjlqYjIxdFpYSmpaU0JnYjNKa1pYSmllV0FwWEc0Z0lDQWdJQ0FnSUNBZ0lDQXZLblpoY2lCbGVIUnlZVjl4ZFdWeWVWOXdZWEpoYlNBOUlGd2lYQ0k3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUd4bGJtZDBhQ0E5SUU5aWFtVmpkQzVyWlhsektITmxiR1l1WlhoMGNtRmZjWFZsY25sZmNHRnlZVzF6S1M1c1pXNW5kR2c3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUdOdmRXNTBJRDBnTUR0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUtHeGxibWQwYUQ0d0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUh0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUdadmNpQW9kbUZ5SUdzZ2FXNGdjMlZzWmk1bGVIUnlZVjl4ZFdWeWVWOXdZWEpoYlhNcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jMlZzWmk1bGVIUnlZVjl4ZFdWeWVWOXdZWEpoYlhNdWFHRnpUM2R1VUhKdmNHVnlkSGtvYXlrcElIdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lHbG1LSE5sYkdZdVpYaDBjbUZmY1hWbGNubGZjR0Z5WVcxelcydGRJVDFjSWx3aUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0JsZUhSeVlWOXhkV1Z5ZVY5d1lYSmhiU0E5SUdzclhDSTlYQ0lyYzJWc1ppNWxlSFJ5WVY5eGRXVnllVjl3WVhKaGJYTmJhMTA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdjWFZsY25sZmNHRnlZVzF6SUQwZ2MyVnNaaTVxYjJsdVZYSnNVR0Z5WVcwb2NYVmxjbmxmY0dGeVlXMXpMQ0JsZUhSeVlWOXhkV1Z5ZVY5d1lYSmhiU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDb3ZYRzRnSUNBZ0lDQWdJQ0FnSUNCeGRXVnllVjl3WVhKaGJYTWdQU0J6Wld4bUxtRmtaRkYxWlhKNVVHRnlZVzF6S0hGMVpYSjVYM0JoY21GdGN5d2djMlZzWmk1bGVIUnlZVjl4ZFdWeWVWOXdZWEpoYlhNdVlXeHNLVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lvZEhsd1pTRTlYQ0pjSWlsY2JpQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2TDNGMVpYSjVYM0JoY21GdGN5QTlJSE5sYkdZdVlXUmtVWFZsY25sUVlYSmhiWE1vY1hWbGNubGZjR0Z5WVcxekxDQnpaV3htTG1WNGRISmhYM0YxWlhKNVgzQmhjbUZ0YzF0MGVYQmxYU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCeGRXVnllVjl3WVhKaGJYTTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZEdocGN5NWhaR1JSZFdWeWVWQmhjbUZ0Y3lBOUlHWjFibU4wYVc5dUtIRjFaWEo1WDNCaGNtRnRjeXdnYm1WM1gzQmhjbUZ0Y3lsY2JpQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlHVjRkSEpoWDNGMVpYSjVYM0JoY21GdElEMGdYQ0pjSWp0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCc1pXNW5kR2dnUFNCUFltcGxZM1F1YTJWNWN5aHVaWGRmY0dGeVlXMXpLUzVzWlc1bmRHZzdYRzRnSUNBZ0lDQWdJQ0FnSUNCMllYSWdZMjkxYm5RZ1BTQXdPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaWhzWlc1bmRHZytNQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lIdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1p2Y2lBb2RtRnlJR3NnYVc0Z2JtVjNYM0JoY21GdGN5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9ibVYzWDNCaGNtRnRjeTVvWVhOUGQyNVFjbTl3WlhKMGVTaHJLU2tnZTF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppaHVaWGRmY0dGeVlXMXpXMnRkSVQxY0lsd2lLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWNGRISmhYM0YxWlhKNVgzQmhjbUZ0SUQwZ2F5dGNJajFjSWl0dVpYZGZjR0Z5WVcxelcydGRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhGMVpYSjVYM0JoY21GdGN5QTlJSE5sYkdZdWFtOXBibFZ5YkZCaGNtRnRLSEYxWlhKNVgzQmhjbUZ0Y3l3Z1pYaDBjbUZmY1hWbGNubGZjR0Z5WVcwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NYVmxjbmxmY0dGeVlXMXpPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhSb2FYTXVZV1JrVlhKc1VHRnlZVzBnUFNCbWRXNWpkR2x2YmloMWNtd3NJSE4wY21sdVp5bGNiaUFnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR0ZrWkY5d1lYSmhiWE1nUFNCY0lsd2lPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaWgxY213aFBWd2lYQ0lwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lvZFhKc0xtbHVaR1Y0VDJZb1hDSS9YQ0lwSUNFOUlDMHhLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1lXUmtYM0JoY21GdGN5QXJQU0JjSWlaY0lqdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaV3h6WlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeTkxY213Z1BTQjBhR2x6TG5SeVlXbHNhVzVuVTJ4aGMyaEpkQ2gxY213cE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JoWkdSZmNHRnlZVzF6SUNzOUlGd2lQMXdpTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lvYzNSeWFXNW5JVDFjSWx3aUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnZTF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWeWJDQXJJR0ZrWkY5d1lYSmhiWE1nS3lCemRISnBibWM3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWeWJEdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZUdGNibHh1SUNBZ0lDQWdJQ0IwYUdsekxtcHZhVzVWY214UVlYSmhiU0E5SUdaMWJtTjBhVzl1S0hCaGNtRnRjeXdnYzNSeWFXNW5LVnh1SUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnWVdSa1gzQmhjbUZ0Y3lBOUlGd2lYQ0k3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtS0hCaGNtRnRjeUU5WENKY0lpbGNiaUFnSUNBZ0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaFpHUmZjR0Z5WVcxeklDczlJRndpSmx3aU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmloemRISnBibWNoUFZ3aVhDSXBYRzRnSUNBZ0lDQWdJQ0FnSUNCN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NHRnlZVzF6SUNzZ1lXUmtYM0JoY21GdGN5QXJJSE4wY21sdVp6dGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJWY2JpQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjR0Z5WVcxek8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOU8xeHVYRzRnSUNBZ0lDQWdJSFJvYVhNdWMyVjBRV3BoZUZKbGMzVnNkSE5WVWt4eklEMGdablZ1WTNScGIyNG9jWFZsY25sZmNHRnlZVzF6S1Z4dUlDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmloMGVYQmxiMllvYzJWc1ppNWhhbUY0WDNKbGMzVnNkSE5mWTI5dVppazlQVndpZFc1a1pXWnBibVZrWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNWhhbUY0WDNKbGMzVnNkSE5mWTI5dVppQTlJRzVsZHlCQmNuSmhlU2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpaV3htTG1GcVlYaGZjbVZ6ZFd4MGMxOWpiMjVtV3lkd2NtOWpaWE56YVc1blgzVnliQ2RkSUQwZ1hDSmNJanRjYmlBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1WVdwaGVGOXlaWE4xYkhSelgyTnZibVpiSjNKbGMzVnNkSE5mZFhKc0oxMGdQU0JjSWx3aU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNWhhbUY0WDNKbGMzVnNkSE5mWTI5dVpsc25aR0YwWVY5MGVYQmxKMTBnUFNCY0lsd2lPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMMmxtS0hObGJHWXVZV3BoZUY5MWNtd2hQVndpWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmloelpXeG1MbVJwYzNCc1lYbGZjbVZ6ZFd4MFgyMWxkR2h2WkQwOVhDSnphRzl5ZEdOdlpHVmNJaWxjYmlBZ0lDQWdJQ0FnSUNBZ0lIc3ZMM1JvWlc0Z2QyVWdkMkZ1ZENCMGJ5QmtieUJoSUhKbGNYVmxjM1FnZEc4Z2RHaGxJR0ZxWVhnZ1pXNWtjRzlwYm5SY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCelpXeG1MbUZxWVhoZmNtVnpkV3gwYzE5amIyNW1XeWR5WlhOMWJIUnpYM1Z5YkNkZElEMGdjMlZzWmk1aFpHUlZjbXhRWVhKaGJTaHpaV3htTG5KbGMzVnNkSE5mZFhKc0xDQnhkV1Z5ZVY5d1lYSmhiWE1wTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OWhaR1FnYkdGdVp5QmpiMlJsSUhSdklHRnFZWGdnWVhCcElISmxjWFZsYzNRc0lHeGhibWNnWTI5a1pTQnphRzkxYkdRZ1lXeHlaV0ZrZVNCaVpTQnBiaUIwYUdWeVpTQm1iM0lnYjNSb1pYSWdjbVZ4ZFdWemRITWdLR2xsTENCemRYQndiR2xsWkNCcGJpQjBhR1VnVW1WemRXeDBjeUJWVWt3cFhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaWh6Wld4bUxteGhibWRmWTI5a1pTRTlYQ0pjSWlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2YzI4Z1lXUmtJR2wwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIRjFaWEo1WDNCaGNtRnRjeUE5SUhObGJHWXVhbTlwYmxWeWJGQmhjbUZ0S0hGMVpYSjVYM0JoY21GdGN5d2dYQ0pzWVc1blBWd2lLM05sYkdZdWJHRnVaMTlqYjJSbEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6Wld4bUxtRnFZWGhmY21WemRXeDBjMTlqYjI1bVd5ZHdjbTlqWlhOemFXNW5YM1Z5YkNkZElEMGdjMlZzWmk1aFpHUlZjbXhRWVhKaGJTaHpaV3htTG1GcVlYaGZkWEpzTENCeGRXVnllVjl3WVhKaGJYTXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2YzJWc1ppNWhhbUY0WDNKbGMzVnNkSE5mWTI5dVpsc25aR0YwWVY5MGVYQmxKMTBnUFNBbmFuTnZiaWM3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlVnYVdZb2MyVnNaaTVrYVhOd2JHRjVYM0psYzNWc2RGOXRaWFJvYjJROVBWd2ljRzl6ZEY5MGVYQmxYMkZ5WTJocGRtVmNJaWxjYmlBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQndjbTlqWlhOelgyWnZjbTB1YzJWMFZHRjRRWEpqYUdsMlpWSmxjM1ZzZEhOVmNtd29jMlZzWml3Z2MyVnNaaTV5WlhOMWJIUnpYM1Z5YkNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSEpsYzNWc2RITmZkWEpzSUQwZ2NISnZZMlZ6YzE5bWIzSnRMbWRsZEZKbGMzVnNkSE5WY213b2MyVnNaaXdnYzJWc1ppNXlaWE4xYkhSelgzVnliQ2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCelpXeG1MbUZxWVhoZmNtVnpkV3gwYzE5amIyNW1XeWR5WlhOMWJIUnpYM1Z5YkNkZElEMGdjMlZzWmk1aFpHUlZjbXhRWVhKaGJTaHlaWE4xYkhSelgzVnliQ3dnY1hWbGNubGZjR0Z5WVcxektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpaV3htTG1GcVlYaGZjbVZ6ZFd4MGMxOWpiMjVtV3lkd2NtOWpaWE56YVc1blgzVnliQ2RkSUQwZ2MyVnNaaTVoWkdSVmNteFFZWEpoYlNoeVpYTjFiSFJ6WDNWeWJDd2djWFZsY25sZmNHRnlZVzF6S1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCcFppaHpaV3htTG1ScGMzQnNZWGxmY21WemRXeDBYMjFsZEdodlpEMDlYQ0pqZFhOMGIyMWZkMjl2WTI5dGJXVnlZMlZmYzNSdmNtVmNJaWxjYmlBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQndjbTlqWlhOelgyWnZjbTB1YzJWMFZHRjRRWEpqYUdsMlpWSmxjM1ZzZEhOVmNtd29jMlZzWml3Z2MyVnNaaTV5WlhOMWJIUnpYM1Z5YkNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSEpsYzNWc2RITmZkWEpzSUQwZ2NISnZZMlZ6YzE5bWIzSnRMbWRsZEZKbGMzVnNkSE5WY213b2MyVnNaaXdnYzJWc1ppNXlaWE4xYkhSelgzVnliQ2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCelpXeG1MbUZxWVhoZmNtVnpkV3gwYzE5amIyNW1XeWR5WlhOMWJIUnpYM1Z5YkNkZElEMGdjMlZzWmk1aFpHUlZjbXhRWVhKaGJTaHlaWE4xYkhSelgzVnliQ3dnY1hWbGNubGZjR0Z5WVcxektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpaV3htTG1GcVlYaGZjbVZ6ZFd4MGMxOWpiMjVtV3lkd2NtOWpaWE56YVc1blgzVnliQ2RkSUQwZ2MyVnNaaTVoWkdSVmNteFFZWEpoYlNoeVpYTjFiSFJ6WDNWeWJDd2djWFZsY25sZmNHRnlZVzF6S1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlZ4dUlDQWdJQ0FnSUNBZ0lDQWdleTh2YjNSb1pYSjNhWE5sSUhkbElIZGhiblFnZEc4Z2NIVnNiQ0IwYUdVZ2NtVnpkV3gwY3lCa2FYSmxZM1JzZVNCbWNtOXRJSFJvWlNCeVpYTjFiSFJ6SUhCaFoyVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpaV3htTG1GcVlYaGZjbVZ6ZFd4MGMxOWpiMjVtV3lkeVpYTjFiSFJ6WDNWeWJDZGRJRDBnYzJWc1ppNWhaR1JWY214UVlYSmhiU2h6Wld4bUxuSmxjM1ZzZEhOZmRYSnNMQ0J4ZFdWeWVWOXdZWEpoYlhNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1WVdwaGVGOXlaWE4xYkhSelgyTnZibVpiSjNCeWIyTmxjM05wYm1kZmRYSnNKMTBnUFNCelpXeG1MbUZrWkZWeWJGQmhjbUZ0S0hObGJHWXVZV3BoZUY5MWNtd3NJSEYxWlhKNVgzQmhjbUZ0Y3lrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OXpaV3htTG1GcVlYaGZjbVZ6ZFd4MGMxOWpiMjVtV3lka1lYUmhYM1I1Y0dVblhTQTlJQ2RvZEcxc0p6dGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNWhhbUY0WDNKbGMzVnNkSE5mWTI5dVpsc25jSEp2WTJWemMybHVaMTkxY213blhTQTlJSE5sYkdZdVlXUmtVWFZsY25sUVlYSmhiWE1vYzJWc1ppNWhhbUY0WDNKbGMzVnNkSE5mWTI5dVpsc25jSEp2WTJWemMybHVaMTkxY213blhTd2djMlZzWmk1bGVIUnlZVjl4ZFdWeWVWOXdZWEpoYlhOYkoyRnFZWGduWFNrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUhObGJHWXVZV3BoZUY5eVpYTjFiSFJ6WDJOdmJtWmJKMlJoZEdGZmRIbHdaU2RkSUQwZ2MyVnNaaTVoYW1GNFgyUmhkR0ZmZEhsd1pUdGNiaUFnSUNBZ0lDQWdmVHRjYmx4dVhHNWNiaUFnSUNBZ0lDQWdkR2hwY3k1MWNHUmhkR1ZNYjJGa1pYSlVZV2NnUFNCbWRXNWpkR2x2Ymlna2IySnFaV04wS1NCN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQWtjR0Z5Wlc1ME8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppaHpaV3htTG1sdVptbHVhWFJsWDNOamNtOXNiRjl5WlhOMWJIUmZZMnhoYzNNaFBWd2lYQ0lwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKSEJoY21WdWRDQTlJSE5sYkdZdUpHbHVabWx1YVhSbFgzTmpjbTlzYkY5amIyNTBZV2x1WlhJdVptbHVaQ2h6Wld4bUxtbHVabWx1YVhSbFgzTmpjbTlzYkY5eVpYTjFiSFJmWTJ4aGMzTXBMbXhoYzNRb0tTNXdZWEpsYm5Rb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJWY2JpQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FrY0dGeVpXNTBJRDBnYzJWc1ppNGthVzVtYVc1cGRHVmZjMk55YjJ4c1gyTnZiblJoYVc1bGNqdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlIUmhaMDVoYldVZ1BTQWtjR0Z5Wlc1MExuQnliM0FvWENKMFlXZE9ZVzFsWENJcE8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCMllYSWdkR0ZuVkhsd1pTQTlJQ2RrYVhZbk8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZb0lDZ2dkR0ZuVG1GdFpTNTBiMHh2ZDJWeVEyRnpaU2dwSUQwOUlDZHZiQ2NnS1NCOGZDQW9JSFJoWjA1aGJXVXVkRzlNYjNkbGNrTmhjMlVvS1NBOVBTQW5kV3duSUNrZ0tYdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBZV2RVZVhCbElEMGdKMnhwSnp0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUNSdVpYY2dQU0FrS0NjOEp5dDBZV2RVZVhCbEt5Y2dMejRuS1M1b2RHMXNLQ1J2WW1wbFkzUXVhSFJ0YkNncEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQmhkSFJ5YVdKMWRHVnpJRDBnSkc5aWFtVmpkQzV3Y205d0tGd2lZWFIwY21saWRYUmxjMXdpS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2JHOXZjQ0IwYUhKdmRXZG9JRHh6Wld4bFkzUStJR0YwZEhKcFluVjBaWE1nWVc1a0lHRndjR3g1SUhSb1pXMGdiMjRnUEdScGRqNWNiaUFnSUNBZ0lDQWdJQ0FnSUNRdVpXRmphQ2hoZEhSeWFXSjFkR1Z6TENCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWtibVYzTG1GMGRISW9kR2hwY3k1dVlXMWxMQ0IwYUdsekxuWmhiSFZsS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdKRzVsZHp0Y2JseHVJQ0FnSUNBZ0lDQjlYRzVjYmx4dUlDQWdJQ0FnSUNCMGFHbHpMbXh2WVdSTmIzSmxVbVZ6ZFd4MGN5QTlJR1oxYm1OMGFXOXVLQ2xjYmlBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0NCMGFHbHpMbWx6WDIxaGVGOXdZV2RsWkNBOVBUMGdkSEoxWlNBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200N1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpaV3htTG1selgyeHZZV1JwYm1kZmJXOXlaU0E5SUhSeWRXVTdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZkSEpwWjJkbGNpQnpkR0Z5ZENCbGRtVnVkRnh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR1YyWlc1MFgyUmhkR0VnUFNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyWnBaRG9nYzJWc1ppNXpabWxrTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSaGNtZGxkRk5sYkdWamRHOXlPaUJ6Wld4bUxtRnFZWGhmZEdGeVoyVjBYMkYwZEhJc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RIbHdaVG9nWENKc2IyRmtYMjF2Y21WY0lpeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZZbXBsWTNRNklITmxiR1pjYmlBZ0lDQWdJQ0FnSUNBZ0lIMDdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1ZEhKcFoyZGxja1YyWlc1MEtGd2ljMlk2WVdwaGVITjBZWEowWENJc0lHVjJaVzUwWDJSaGRHRXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2NISnZZMlZ6YzE5bWIzSnRMbk5sZEZSaGVFRnlZMmhwZG1WU1pYTjFiSFJ6VlhKc0tITmxiR1lzSUhObGJHWXVjbVZ6ZFd4MGMxOTFjbXdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUhGMVpYSjVYM0JoY21GdGN5QTlJSE5sYkdZdVoyVjBWWEpzVUdGeVlXMXpLSFJ5ZFdVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNXNZWE4wWDNOMVltMXBkRjl4ZFdWeWVWOXdZWEpoYlhNZ1BTQnpaV3htTG1kbGRGVnliRkJoY21GdGN5aG1ZV3h6WlNrN0lDOHZaM0poWWlCaElHTnZjSGtnYjJZZ2FIUmxJRlZTVENCd1lYSmhiWE1nZDJsMGFHOTFkQ0J3WVdkcGJtRjBhVzl1SUdGc2NtVmhaSGtnWVdSa1pXUmNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR0ZxWVhoZmNISnZZMlZ6YzJsdVoxOTFjbXdnUFNCY0lsd2lPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR0ZxWVhoZmNtVnpkV3gwYzE5MWNtd2dQU0JjSWx3aU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlHUmhkR0ZmZEhsd1pTQTlJRndpWENJN1hHNWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OXViM2NnWVdSa0lIUm9aU0J1WlhjZ2NHRm5hVzVoZEdsdmJseHVJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlHNWxlSFJmY0dGblpXUmZiblZ0WW1WeUlEMGdkR2hwY3k1amRYSnlaVzUwWDNCaFoyVmtJQ3NnTVR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEYxWlhKNVgzQmhjbUZ0Y3lBOUlITmxiR1l1YW05cGJsVnliRkJoY21GdEtIRjFaWEo1WDNCaGNtRnRjeXdnWENKelpsOXdZV2RsWkQxY0lpdHVaWGgwWDNCaFoyVmtYMjUxYldKbGNpazdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1YzJWMFFXcGhlRkpsYzNWc2RITlZVa3h6S0hGMVpYSjVYM0JoY21GdGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCaGFtRjRYM0J5YjJObGMzTnBibWRmZFhKc0lEMGdjMlZzWmk1aGFtRjRYM0psYzNWc2RITmZZMjl1WmxzbmNISnZZMlZ6YzJsdVoxOTFjbXduWFR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0ZxWVhoZmNtVnpkV3gwYzE5MWNtd2dQU0J6Wld4bUxtRnFZWGhmY21WemRXeDBjMTlqYjI1bVd5ZHlaWE4xYkhSelgzVnliQ2RkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdaR0YwWVY5MGVYQmxJRDBnYzJWc1ppNWhhbUY0WDNKbGMzVnNkSE5mWTI5dVpsc25aR0YwWVY5MGVYQmxKMTA3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2WVdKdmNuUWdZVzU1SUhCeVpYWnBiM1Z6SUdGcVlYZ2djbVZ4ZFdWemRITmNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUtITmxiR1l1YkdGemRGOWhhbUY0WDNKbGNYVmxjM1FwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMlZzWmk1c1lYTjBYMkZxWVhoZmNtVnhkV1Z6ZEM1aFltOXlkQ2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaWh6Wld4bUxuVnpaVjl6WTNKdmJHeGZiRzloWkdWeVBUMHhLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUFrYkc5aFpHVnlJRDBnSkNnblBHUnBkaTgrSnl4N1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ2RqYkdGemN5YzZJQ2R6WldGeVkyZ3RabWxzZEdWeUxYTmpjbTlzYkMxc2IyRmthVzVuSjF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwcE95OHZMbUZ3Y0dWdVpGUnZLSE5sYkdZdUpHRnFZWGhmY21WemRXeDBjMTlqYjI1MFlXbHVaWElwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0pHeHZZV1JsY2lBOUlITmxiR1l1ZFhCa1lYUmxURzloWkdWeVZHRm5LQ1JzYjJGa1pYSXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNXBibVpwYm1sMFpWTmpjbTlzYkVGd2NHVnVaQ2drYkc5aFpHVnlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUhObGJHWXViR0Z6ZEY5aGFtRjRYM0psY1hWbGMzUWdQU0FrTG1kbGRDaGhhbUY0WDNCeWIyTmxjM05wYm1kZmRYSnNMQ0JtZFc1amRHbHZiaWhrWVhSaExDQnpkR0YwZFhNc0lISmxjWFZsYzNRcFhHNGdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNWpkWEp5Wlc1MFgzQmhaMlZrS3lzN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyVnNaaTVzWVhOMFgyRnFZWGhmY21WeGRXVnpkQ0E5SUc1MWJHdzdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2THlBcUtpb3FLaW9xS2lvcUtpb3FLbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUZSUFJFOGdMU0JRUVZOVVJTQlVTRWxUSUVGT1JDQlhRVlJEU0NCVVNFVWdVa1ZFU1ZKRlExUWdMU0JQVGt4WklFaEJVRkJGVGxNZ1YwbFVTQ0JYUXlBb1ExQlVJRUZPUkNCVVFWZ2dSRTlGVXlCT1QxUXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnYUhSMGNITTZMeTl6WldGeVkyZ3RabWxzZEdWeUxuUmxjM1F2Y0hKdlpIVmpkQzFqWVhSbFoyOXllUzlqYkc5MGFHbHVaeTkwYzJocGNuUnpMM0JoWjJVdk15OC9jMlpmY0dGblpXUTlNMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk5MWNHUmhkR1Z6SUhSb1pTQnlaWE4xZEd4eklDWWdabTl5YlNCb2RHMXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMlZzWmk1aFpHUlNaWE4xYkhSektHUmhkR0VzSUdSaGRHRmZkSGx3WlNrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUgwc0lHUmhkR0ZmZEhsd1pTa3VabUZwYkNobWRXNWpkR2x2YmlocWNWaElVaXdnZEdWNGRGTjBZWFIxY3l3Z1pYSnliM0pVYUhKdmQyNHBYRzRnSUNBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR1JoZEdFZ1BTQjdmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrWVhSaExuTm1hV1FnUFNCelpXeG1Mbk5tYVdRN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZUzV2WW1wbFkzUWdQU0J6Wld4bU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUmhkR0V1ZEdGeVoyVjBVMlZzWldOMGIzSWdQU0J6Wld4bUxtRnFZWGhmZEdGeVoyVjBYMkYwZEhJN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZUzVoYW1GNFZWSk1JRDBnWVdwaGVGOXdjbTlqWlhOemFXNW5YM1Z5YkR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1lYUmhMbXB4V0VoU0lEMGdhbkZZU0ZJN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZUzUwWlhoMFUzUmhkSFZ6SUQwZ2RHVjRkRk4wWVhSMWN6dGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmtZWFJoTG1WeWNtOXlWR2h5YjNkdUlEMGdaWEp5YjNKVWFISnZkMjQ3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNTBjbWxuWjJWeVJYWmxiblFvWENKelpqcGhhbUY0WlhKeWIzSmNJaXdnWkdGMFlTazdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHBMbUZzZDJGNWN5aG1kVzVqZEdsdmJpZ3BYRzRnSUNBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR1JoZEdFZ1BTQjdmVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrWVhSaExuTm1hV1FnUFNCelpXeG1Mbk5tYVdRN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZUzUwWVhKblpYUlRaV3hsWTNSdmNpQTlJSE5sYkdZdVlXcGhlRjkwWVhKblpYUmZZWFIwY2p0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1lYUmhMbTlpYW1WamRDQTlJSE5sYkdZN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaWh6Wld4bUxuVnpaVjl6WTNKdmJHeGZiRzloWkdWeVBUMHhLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0pHeHZZV1JsY2k1a1pYUmhZMmdvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpaV3htTG1selgyeHZZV1JwYm1kZmJXOXlaU0E5SUdaaGJITmxPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNTBjbWxuWjJWeVJYWmxiblFvWENKelpqcGhhbUY0Wm1sdWFYTm9YQ0lzSUdSaGRHRXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTazdYRzVjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCMGFHbHpMbVpsZEdOb1FXcGhlRkpsYzNWc2RITWdQU0JtZFc1amRHbHZiaWdwWEc0Z0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2ZEhKcFoyZGxjaUJ6ZEdGeWRDQmxkbVZ1ZEZ4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUdWMlpXNTBYMlJoZEdFZ1BTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMlpwWkRvZ2MyVnNaaTV6Wm1sa0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUmhjbWRsZEZObGJHVmpkRzl5T2lCelpXeG1MbUZxWVhoZmRHRnlaMlYwWDJGMGRISXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkSGx3WlRvZ1hDSnNiMkZrWDNKbGMzVnNkSE5jSWl4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdlltcGxZM1E2SUhObGJHWmNiaUFnSUNBZ0lDQWdJQ0FnSUgwN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUhObGJHWXVkSEpwWjJkbGNrVjJaVzUwS0Z3aWMyWTZZV3BoZUhOMFlYSjBYQ0lzSUdWMlpXNTBYMlJoZEdFcE8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBdkwzSmxabTlqZFhNZ1lXNTVJR2x1Y0hWMElHWnBaV3hrY3lCaFpuUmxjaUIwYUdVZ1ptOXliU0JvWVhNZ1ltVmxiaUIxY0dSaGRHVmtYRzRnSUNBZ0lDQWdJQ0FnSUNCMllYSWdKR3hoYzNSZllXTjBhWFpsWDJsdWNIVjBYM1JsZUhRZ1BTQWtkR2hwY3k1bWFXNWtLQ2RwYm5CMWRGdDBlWEJsUFZ3aWRHVjRkRndpWFRwbWIyTjFjeWNwTG01dmRDaGNJaTV6Wmkxa1lYUmxjR2xqYTJWeVhDSXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWW9KR3hoYzNSZllXTjBhWFpsWDJsdWNIVjBYM1JsZUhRdWJHVnVaM1JvUFQweEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQnNZWE4wWDJGamRHbDJaVjlwYm5CMWRGOTBaWGgwSUQwZ0pHeGhjM1JmWVdOMGFYWmxYMmx1Y0hWMFgzUmxlSFF1WVhSMGNpaGNJbTVoYldWY0lpazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNSMGFHbHpMbUZrWkVOc1lYTnpLRndpYzJWaGNtTm9MV1pwYkhSbGNpMWthWE5oWW14bFpGd2lLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIQnliMk5sYzNOZlptOXliUzVrYVhOaFlteGxTVzV3ZFhSektITmxiR1lwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2TDJaaFpHVWdiM1YwSUhKbGMzVnNkSE5jYmlBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1SkdGcVlYaGZjbVZ6ZFd4MGMxOWpiMjUwWVdsdVpYSXVZVzVwYldGMFpTaDdJRzl3WVdOcGRIazZJREF1TlNCOUxDQmNJbVpoYzNSY0lpazdJQzh2Ykc5aFpHbHVaMXh1SUNBZ0lDQWdJQ0FnSUNBZ2MyVnNaaTVtWVdSbFEyOXVkR1Z1ZEVGeVpXRnpLQ0JjSW05MWRGd2lJQ2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtS0hObGJHWXVZV3BoZUY5aFkzUnBiMjQ5UFZ3aWNHRm5hVzVoZEdsdmJsd2lLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZibVZsWkNCMGJ5QnlaVzF2ZG1VZ1lXTjBhWFpsSUdacGJIUmxjaUJtY205dElGVlNURnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk5eGRXVnllVjl3WVhKaGJYTWdQU0J6Wld4bUxteGhjM1JmYzNWaWJXbDBYM0YxWlhKNVgzQmhjbUZ0Y3p0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZibTkzSUdGa1pDQjBhR1VnYm1WM0lIQmhaMmx1WVhScGIyNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnY0dGblpVNTFiV0psY2lBOUlITmxiR1l1SkdGcVlYaGZjbVZ6ZFd4MGMxOWpiMjUwWVdsdVpYSXVZWFIwY2loY0ltUmhkR0V0Y0dGblpXUmNJaWs3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppaDBlWEJsYjJZb2NHRm5aVTUxYldKbGNpazlQVndpZFc1a1pXWnBibVZrWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J3WVdkbFRuVnRZbVZ5SUQwZ01UdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjSEp2WTJWemMxOW1iM0p0TG5ObGRGUmhlRUZ5WTJocGRtVlNaWE4xYkhSelZYSnNLSE5sYkdZc0lITmxiR1l1Y21WemRXeDBjMTkxY213cE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIRjFaWEo1WDNCaGNtRnRjeUE5SUhObGJHWXVaMlYwVlhKc1VHRnlZVzF6S0daaGJITmxLVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUtIQmhaMlZPZFcxaVpYSStNU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIRjFaWEo1WDNCaGNtRnRjeUE5SUhObGJHWXVhbTlwYmxWeWJGQmhjbUZ0S0hGMVpYSjVYM0JoY21GdGN5d2dYQ0p6Wmw5d1lXZGxaRDFjSWl0d1lXZGxUblZ0WW1WeUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUdWc2MyVWdhV1lvYzJWc1ppNWhhbUY0WDJGamRHbHZiajA5WENKemRXSnRhWFJjSWlsY2JpQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2NYVmxjbmxmY0dGeVlXMXpJRDBnYzJWc1ppNW5aWFJWY214UVlYSmhiWE1vZEhKMVpTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMlZzWmk1c1lYTjBYM04xWW0xcGRGOXhkV1Z5ZVY5d1lYSmhiWE1nUFNCelpXeG1MbWRsZEZWeWJGQmhjbUZ0Y3lobVlXeHpaU2s3SUM4dlozSmhZaUJoSUdOdmNIa2diMllnYUhSbElGVlNUQ0J3WVhKaGJYTWdkMmwwYUc5MWRDQndZV2RwYm1GMGFXOXVJR0ZzY21WaFpIa2dZV1JrWldSY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUdGcVlYaGZjSEp2WTJWemMybHVaMTkxY213Z1BTQmNJbHdpTzF4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUdGcVlYaGZjbVZ6ZFd4MGMxOTFjbXdnUFNCY0lsd2lPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR1JoZEdGZmRIbHdaU0E5SUZ3aVhDSTdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1YzJWMFFXcGhlRkpsYzNWc2RITlZVa3h6S0hGMVpYSjVYM0JoY21GdGN5azdYRzRnSUNBZ0lDQWdJQ0FnSUNCaGFtRjRYM0J5YjJObGMzTnBibWRmZFhKc0lEMGdjMlZzWmk1aGFtRjRYM0psYzNWc2RITmZZMjl1WmxzbmNISnZZMlZ6YzJsdVoxOTFjbXduWFR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR0ZxWVhoZmNtVnpkV3gwYzE5MWNtd2dQU0J6Wld4bUxtRnFZWGhmY21WemRXeDBjMTlqYjI1bVd5ZHlaWE4xYkhSelgzVnliQ2RkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdaR0YwWVY5MGVYQmxJRDBnYzJWc1ppNWhhbUY0WDNKbGMzVnNkSE5mWTI5dVpsc25aR0YwWVY5MGVYQmxKMTA3WEc1Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnTHk5aFltOXlkQ0JoYm5rZ2NISmxkbWx2ZFhNZ1lXcGhlQ0J5WlhGMVpYTjBjMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWW9jMlZzWmk1c1lYTjBYMkZxWVhoZmNtVnhkV1Z6ZENsY2JpQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6Wld4bUxteGhjM1JmWVdwaGVGOXlaWEYxWlhOMExtRmliM0owS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnWVdwaGVGOWhZM1JwYjI0Z1BTQnpaV3htTG1GcVlYaGZZV04wYVc5dU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNXNZWE4wWDJGcVlYaGZjbVZ4ZFdWemRDQTlJQ1F1WjJWMEtHRnFZWGhmY0hKdlkyVnpjMmx1WjE5MWNtd3NJR1oxYm1OMGFXOXVLR1JoZEdFc0lITjBZWFIxY3l3Z2NtVnhkV1Z6ZENsY2JpQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6Wld4bUxteGhjM1JmWVdwaGVGOXlaWEYxWlhOMElEMGdiblZzYkR0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZkWEJrWVhSbGN5QjBhR1VnY21WemRYUnNjeUFtSUdadmNtMGdhSFJ0YkZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhObGJHWXVkWEJrWVhSbFVtVnpkV3gwY3loa1lYUmhMQ0JrWVhSaFgzUjVjR1VwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdjMk55YjJ4c0lGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJSE5sZENCMGFHVWdkbUZ5SUdKaFkyc2dkRzhnZDJoaGRDQnBkQ0IzWVhNZ1ltVm1iM0psSUhSb1pTQmhhbUY0SUhKbGNYVmxjM1FnYm1Ga0lIUm9aU0JtYjNKdElISmxMV2x1YVhSY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCelpXeG1MbUZxWVhoZllXTjBhVzl1SUQwZ1lXcGhlRjloWTNScGIyNDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMlZzWmk1elkzSnZiR3hTWlhOMWJIUnpLQ0J6Wld4bUxtRnFZWGhmWVdOMGFXOXVJQ2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdktpQjFjR1JoZEdVZ1ZWSk1JQ292WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk5MWNHUmhkR1VnZFhKc0lHSmxabTl5WlNCd1lXZHBibUYwYVc5dUxDQmlaV05oZFhObElIZGxJRzVsWldRZ2RHOGdaRzhnYzI5dFpTQmphR1ZqYTNNZ1lXZGhhVzV6SUhSb1pTQlZVa3dnWm05eUlHbHVabWx1YVhSbElITmpjbTlzYkZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhObGJHWXVkWEJrWVhSbFZYSnNTR2x6ZEc5eWVTaGhhbUY0WDNKbGMzVnNkSE5mZFhKc0tUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2YzJWMGRYQWdjR0ZuYVc1aGRHbHZibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE5sYkdZdWMyVjBkWEJCYW1GNFVHRm5hVzVoZEdsdmJpZ3BPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNXBjMU4xWW0xcGRIUnBibWNnUFNCbVlXeHpaVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4cUlIVnpaWElnWkdWbUlDb3ZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMlZzWmk1cGJtbDBWMjl2UTI5dGJXVnlZMlZEYjI1MGNtOXNjeWdwT3lBdkwzZHZiMk52YlcxbGNtTmxJRzl5WkdWeVlubGNibHh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMQ0JrWVhSaFgzUjVjR1VwTG1aaGFXd29ablZ1WTNScGIyNG9hbkZZU0ZJc0lIUmxlSFJUZEdGMGRYTXNJR1Z5Y205eVZHaHliM2R1S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCa1lYUmhJRDBnZTMwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pHRjBZUzV6Wm1sa0lEMGdjMlZzWmk1elptbGtPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1JoZEdFdWRHRnlaMlYwVTJWc1pXTjBiM0lnUFNCelpXeG1MbUZxWVhoZmRHRnlaMlYwWDJGMGRISTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR0YwWVM1dlltcGxZM1FnUFNCelpXeG1PMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1JoZEdFdVlXcGhlRlZTVENBOUlHRnFZWGhmY0hKdlkyVnpjMmx1WjE5MWNtdzdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR0YwWVM1cWNWaElVaUE5SUdweFdFaFNPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1JoZEdFdWRHVjRkRk4wWVhSMWN5QTlJSFJsZUhSVGRHRjBkWE03WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlTNWxjbkp2Y2xSb2NtOTNiaUE5SUdWeWNtOXlWR2h5YjNkdU8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1YVhOVGRXSnRhWFIwYVc1bklEMGdabUZzYzJVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyVnNaaTUwY21sbloyVnlSWFpsYm5Rb1hDSnpaanBoYW1GNFpYSnliM0pjSWl3Z1pHRjBZU2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBwTG1Gc2QyRjVjeWhtZFc1amRHbHZiaWdwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMlZzWmk0a1lXcGhlRjl5WlhOMWJIUnpYMk52Ym5SaGFXNWxjaTV6ZEc5d0tIUnlkV1VzZEhKMVpTa3VZVzVwYldGMFpTaDdJRzl3WVdOcGRIazZJREY5TENCY0ltWmhjM1JjSWlrN0lDOHZabWx1YVhOb1pXUWdiRzloWkdsdVoxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1Wm1Ga1pVTnZiblJsYm5SQmNtVmhjeWdnWENKcGJsd2lJQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlHUmhkR0VnUFNCN2ZUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmtZWFJoTG5ObWFXUWdQU0J6Wld4bUxuTm1hV1E3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlTNTBZWEpuWlhSVFpXeGxZM1J2Y2lBOUlITmxiR1l1WVdwaGVGOTBZWEpuWlhSZllYUjBjanRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrWVhSaExtOWlhbVZqZENBOUlITmxiR1k3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkhSb2FYTXVjbVZ0YjNabFEyeGhjM01vWENKelpXRnlZMmd0Wm1sc2RHVnlMV1JwYzJGaWJHVmtYQ0lwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCeWIyTmxjM05mWm05eWJTNWxibUZpYkdWSmJuQjFkSE1vYzJWc1ppazdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2TDNKbFptOWpkWE1nZEdobElHeGhjM1FnWVdOMGFYWmxJSFJsZUhRZ1ptbGxiR1JjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmloc1lYTjBYMkZqZEdsMlpWOXBibkIxZEY5MFpYaDBJVDFjSWx3aUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlDUnBibkIxZENBOUlGdGRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCelpXeG1MaVJtYVdWc1pITXVaV0ZqYUNobWRXNWpkR2x2YmlncGUxeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnSkdGamRHbDJaVjlwYm5CMWRDQTlJQ1FvZEdocGN5a3VabWx1WkNoY0ltbHVjSFYwVzI1aGJXVTlKMXdpSzJ4aGMzUmZZV04wYVhabFgybHVjSFYwWDNSbGVIUXJYQ0luWFZ3aUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1LQ1JoWTNScGRtVmZhVzV3ZFhRdWJHVnVaM1JvUFQweEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1JwYm5CMWRDQTlJQ1JoWTNScGRtVmZhVzV3ZFhRN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0NScGJuQjFkQzVzWlc1bmRHZzlQVEVwSUh0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0pHbHVjSFYwTG1adlkzVnpLQ2t1ZG1Gc0tDUnBibkIxZEM1MllXd29LU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6Wld4bUxtWnZZM1Z6UTJGdGNHOG9KR2x1Y0hWMFd6QmRLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1IwYUdsekxtWnBibVFvWENKcGJuQjFkRnR1WVcxbFBTZGZjMlpmYzJWaGNtTm9KMTFjSWlrdWRISnBaMmRsY2lnblptOWpkWE1uS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCelpXeG1MblJ5YVdkblpYSkZkbVZ1ZENoY0luTm1PbUZxWVhobWFXNXBjMmhjSWl3Z0lHUmhkR0VnS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lIMDdYRzVjYmlBZ0lDQWdJQ0FnZEdocGN5NW1iMk4xYzBOaGJYQnZJRDBnWm5WdVkzUnBiMjRvYVc1d2RYUkdhV1ZzWkNsN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2TDNaaGNpQnBibkIxZEVacFpXeGtJRDBnWkc5amRXMWxiblF1WjJWMFJXeGxiV1Z1ZEVKNVNXUW9hV1FwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dsdWNIVjBSbWxsYkdRZ0lUMGdiblZzYkNBbUppQnBibkIxZEVacFpXeGtMblpoYkhWbExteGxibWQwYUNBaFBTQXdLWHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2FXNXdkWFJHYVdWc1pDNWpjbVZoZEdWVVpYaDBVbUZ1WjJVcGUxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ1JtbGxiR1JTWVc1blpTQTlJR2x1Y0hWMFJtbGxiR1F1WTNKbFlYUmxWR1Y0ZEZKaGJtZGxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lFWnBaV3hrVW1GdVoyVXViVzkyWlZOMFlYSjBLQ2RqYUdGeVlXTjBaWEluTEdsdWNIVjBSbWxsYkdRdWRtRnNkV1V1YkdWdVozUm9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1JtbGxiR1JTWVc1blpTNWpiMnhzWVhCelpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCR2FXVnNaRkpoYm1kbExuTmxiR1ZqZENncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWxiSE5sSUdsbUlDaHBibkIxZEVacFpXeGtMbk5sYkdWamRHbHZibE4wWVhKMElIeDhJR2x1Y0hWMFJtbGxiR1F1YzJWc1pXTjBhVzl1VTNSaGNuUWdQVDBnSnpBbktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQmxiR1Z0VEdWdUlEMGdhVzV3ZFhSR2FXVnNaQzUyWVd4MVpTNXNaVzVuZEdnN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2x1Y0hWMFJtbGxiR1F1YzJWc1pXTjBhVzl1VTNSaGNuUWdQU0JsYkdWdFRHVnVPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGJuQjFkRVpwWld4a0xuTmxiR1ZqZEdsdmJrVnVaQ0E5SUdWc1pXMU1aVzQ3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsdWNIVjBSbWxsYkdRdVlteDFjaWdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsdWNIVjBSbWxsYkdRdVptOWpkWE1vS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpYdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvSUdsdWNIVjBSbWxsYkdRZ0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsdWNIVjBSbWxsYkdRdVptOWpkWE1vS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQjBhR2x6TG5SeWFXZG5aWEpGZG1WdWRDQTlJR1oxYm1OMGFXOXVLR1YyWlc1MGJtRnRaU3dnWkdGMFlTbGNiaUFnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJQ1JsZG1WdWRGOWpiMjUwWVdsdVpYSWdQU0FrS0Z3aUxuTmxZWEpqYUdGdVpHWnBiSFJsY2x0a1lYUmhMWE5tTFdadmNtMHRhV1E5SjF3aUszTmxiR1l1YzJacFpDdGNJaWRkWENJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSkdWMlpXNTBYMk52Ym5SaGFXNWxjaTUwY21sbloyVnlLR1YyWlc1MGJtRnRaU3dnV3lCa1lYUmhJRjBwTzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdkR2hwY3k1bVpYUmphRUZxWVhoR2IzSnRJRDBnWm5WdVkzUnBiMjRvS1Z4dUlDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2TDNSeWFXZG5aWElnYzNSaGNuUWdaWFpsYm5SY2JpQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCbGRtVnVkRjlrWVhSaElEMGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE5tYVdRNklITmxiR1l1YzJacFpDeGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBZWEpuWlhSVFpXeGxZM1J2Y2pvZ2MyVnNaaTVoYW1GNFgzUmhjbWRsZEY5aGRIUnlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFI1Y0dVNklGd2labTl5YlZ3aUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHOWlhbVZqZERvZ2MyVnNabHh1SUNBZ0lDQWdJQ0FnSUNBZ2ZUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2MyVnNaaTUwY21sbloyVnlSWFpsYm5Rb1hDSnpaanBoYW1GNFptOXliWE4wWVhKMFhDSXNJRnNnWlhabGJuUmZaR0YwWVNCZEtUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0pIUm9hWE11WVdSa1EyeGhjM01vWENKelpXRnlZMmd0Wm1sc2RHVnlMV1JwYzJGaWJHVmtYQ0lwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjSEp2WTJWemMxOW1iM0p0TG1ScGMyRmliR1ZKYm5CMWRITW9jMlZzWmlrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQnhkV1Z5ZVY5d1lYSmhiWE1nUFNCelpXeG1MbWRsZEZWeWJGQmhjbUZ0Y3lncE8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppaHpaV3htTG14aGJtZGZZMjlrWlNFOVhDSmNJaWxjYmlBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMM052SUdGa1pDQnBkRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEYxWlhKNVgzQmhjbUZ0Y3lBOUlITmxiR1l1YW05cGJsVnliRkJoY21GdEtIRjFaWEo1WDNCaGNtRnRjeXdnWENKc1lXNW5QVndpSzNObGJHWXViR0Z1WjE5amIyUmxLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR0ZxWVhoZmNISnZZMlZ6YzJsdVoxOTFjbXdnUFNCelpXeG1MbUZrWkZWeWJGQmhjbUZ0S0hObGJHWXVZV3BoZUY5bWIzSnRYM1Z5YkN3Z2NYVmxjbmxmY0dGeVlXMXpLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJrWVhSaFgzUjVjR1VnUFNCY0ltcHpiMjVjSWp0Y2JseHVYRzRnSUNBZ0lDQWdJQ0FnSUNBdkwyRmliM0owSUdGdWVTQndjbVYyYVc5MWN5QmhhbUY0SUhKbGNYVmxjM1J6WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZLbWxtS0hObGJHWXViR0Z6ZEY5aGFtRjRYM0psY1hWbGMzUXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUhObGJHWXViR0Z6ZEY5aGFtRjRYM0psY1hWbGMzUXVZV0p2Y25Rb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNCOUtpOWNibHh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZMM05sYkdZdWJHRnpkRjloYW1GNFgzSmxjWFZsYzNRZ1BWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBa0xtZGxkQ2hoYW1GNFgzQnliMk5sYzNOcGJtZGZkWEpzTENCbWRXNWpkR2x2Ymloa1lYUmhMQ0J6ZEdGMGRYTXNJSEpsY1hWbGMzUXBYRzRnSUNBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OXpaV3htTG14aGMzUmZZV3BoZUY5eVpYRjFaWE4wSUQwZ2JuVnNiRHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dmRYQmtZWFJsY3lCMGFHVWdjbVZ6ZFhSc2N5QW1JR1p2Y20wZ2FIUnRiRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE5sYkdZdWRYQmtZWFJsUm05eWJTaGtZWFJoTENCa1lYUmhYM1I1Y0dVcE8xeHVYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHNJR1JoZEdGZmRIbHdaU2t1Wm1GcGJDaG1kVzVqZEdsdmJpaHFjVmhJVWl3Z2RHVjRkRk4wWVhSMWN5d2daWEp5YjNKVWFISnZkMjRwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUdSaGRHRWdQU0I3ZlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1lYUmhMbk5tYVdRZ1BTQnpaV3htTG5ObWFXUTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR0YwWVM1MFlYSm5aWFJUWld4bFkzUnZjaUE5SUhObGJHWXVZV3BoZUY5MFlYSm5aWFJmWVhSMGNqdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmtZWFJoTG05aWFtVmpkQ0E5SUhObGJHWTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR0YwWVM1aGFtRjRWVkpNSUQwZ1lXcGhlRjl3Y205alpYTnphVzVuWDNWeWJEdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmtZWFJoTG1weFdFaFNJRDBnYW5GWVNGSTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR0YwWVM1MFpYaDBVM1JoZEhWeklEMGdkR1Y0ZEZOMFlYUjFjenRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrWVhSaExtVnljbTl5VkdoeWIzZHVJRDBnWlhKeWIzSlVhSEp2ZDI0N1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyVnNaaTUwY21sbloyVnlSWFpsYm5Rb1hDSnpaanBoYW1GNFpYSnliM0pjSWl3Z1d5QmtZWFJoSUYwcE8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCOUtTNWhiSGRoZVhNb1puVnVZM1JwYjI0b0tWeHVJQ0FnSUNBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQmtZWFJoSUQwZ2UzMDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR0YwWVM1elptbGtJRDBnYzJWc1ppNXpabWxrTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdSaGRHRXVkR0Z5WjJWMFUyVnNaV04wYjNJZ1BTQnpaV3htTG1GcVlYaGZkR0Z5WjJWMFgyRjBkSEk3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlTNXZZbXBsWTNRZ1BTQnpaV3htTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0pIUm9hWE11Y21WdGIzWmxRMnhoYzNNb1hDSnpaV0Z5WTJndFptbHNkR1Z5TFdScGMyRmliR1ZrWENJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIQnliMk5sYzNOZlptOXliUzVsYm1GaWJHVkpibkIxZEhNb2MyVnNaaWs3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCelpXeG1MblJ5YVdkblpYSkZkbVZ1ZENoY0luTm1PbUZxWVhobWIzSnRabWx1YVhOb1hDSXNJRnNnWkdGMFlTQmRLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdJQ0I5TzF4dVhHNGdJQ0FnSUNBZ0lIUm9hWE11WTI5d2VVeHBjM1JKZEdWdGMwTnZiblJsYm5SeklEMGdablZ1WTNScGIyNG9KR3hwYzNSZlpuSnZiU3dnSkd4cGMzUmZkRzhwWEc0Z0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2WTI5d2VTQnZkbVZ5SUdOb2FXeGtJR3hwYzNRZ2FYUmxiWE5jYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJzYVY5amIyNTBaVzUwYzE5aGNuSmhlU0E5SUc1bGR5QkJjbkpoZVNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlHWnliMjFmWVhSMGNtbGlkWFJsY3lBOUlHNWxkeUJCY25KaGVTZ3BPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnSkdaeWIyMWZabWxsYkdSeklEMGdKR3hwYzNSZlpuSnZiUzVtYVc1a0tGd2lQaUIxYkNBK0lHeHBYQ0lwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FrWm5KdmJWOW1hV1ZzWkhNdVpXRmphQ2htZFc1amRHbHZiaWhwS1h0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHeHBYMk52Ym5SbGJuUnpYMkZ5Y21GNUxuQjFjMmdvSkNoMGFHbHpLUzVvZEcxc0tDa3BPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlHRjBkSEpwWW5WMFpYTWdQU0FrS0hSb2FYTXBMbkJ5YjNBb1hDSmhkSFJ5YVdKMWRHVnpYQ0lwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdaeWIyMWZZWFIwY21saWRYUmxjeTV3ZFhOb0tHRjBkSEpwWW5WMFpYTXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk5MllYSWdabWxsYkdSZmJtRnRaU0E5SUNRb2RHaHBjeWt1WVhSMGNpaGNJbVJoZEdFdGMyWXRabWxsYkdRdGJtRnRaVndpS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkwzWmhjaUIwYjE5bWFXVnNaQ0E5SUNSc2FYTjBYM1J2TG1acGJtUW9YQ0krSUhWc0lENGdiR2xiWkdGMFlTMXpaaTFtYVdWc1pDMXVZVzFsUFNkY0lpdG1hV1ZzWkY5dVlXMWxLMXdpSjExY0lpazdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2TDNObGJHWXVZMjl3ZVVGMGRISnBZblYwWlhNb0pDaDBhR2x6S1N3Z0pHeHBjM1JmZEc4c0lGd2laR0YwWVMxelppMWNJaWs3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2JHbGZhWFFnUFNBd08xeHVJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlDUjBiMTltYVdWc1pITWdQU0FrYkdsemRGOTBieTVtYVc1a0tGd2lQaUIxYkNBK0lHeHBYQ0lwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdKSFJ2WDJacFpXeGtjeTVsWVdOb0tHWjFibU4wYVc5dUtHa3BlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1FvZEdocGN5a3VhSFJ0YkNoc2FWOWpiMjUwWlc1MGMxOWhjbkpoZVZ0c2FWOXBkRjBwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJQ1JtY205dFgyWnBaV3hrSUQwZ0pDZ2tabkp2YlY5bWFXVnNaSE11WjJWMEtHeHBYMmwwS1NrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnSkhSdlgyWnBaV3hrSUQwZ0pDaDBhR2x6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBa2RHOWZabWxsYkdRdWNtVnRiM1psUVhSMGNpaGNJbVJoZEdFdGMyWXRkR0Y0YjI1dmJYa3RZWEpqYUdsMlpWd2lLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6Wld4bUxtTnZjSGxCZEhSeWFXSjFkR1Z6S0NSbWNtOXRYMlpwWld4a0xDQWtkRzlmWm1sbGJHUXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYkdsZmFYUXJLenRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMHBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQXZLblpoY2lBa1puSnZiVjltYVdWc1pITWdQU0FrYkdsemRGOW1jbTl0TG1acGJtUW9YQ0lnZFd3Z1BpQnNhVndpS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ0pIUnZYMlpwWld4a2N5QTlJQ1JzYVhOMFgzUnZMbVpwYm1Rb1hDSWdQaUJzYVZ3aUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBa1puSnZiVjltYVdWc1pITXVaV0ZqYUNobWRXNWpkR2x2YmlocGJtUmxlQ3dnZG1Gc0tYdGNiaUFnSUNBZ0lDQWdJQ0FnSUNCcFppZ2tLSFJvYVhNcExtaGhjMEYwZEhKcFluVjBaU2hjSW1SaGRHRXRjMll0ZEdGNGIyNXZiWGt0WVhKamFHbDJaVndpS1NsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0I3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdmU2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtTnZjSGxCZEhSeWFXSjFkR1Z6S0NSc2FYTjBYMlp5YjIwc0lDUnNhWE4wWDNSdktUc3FMMXh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUxY0dSaGRHVkdiM0p0UVhSMGNtbGlkWFJsY3lBOUlHWjFibU4wYVc5dUtDUnNhWE4wWDJaeWIyMHNJQ1JzYVhOMFgzUnZLVnh1SUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnWm5KdmJWOWhkSFJ5YVdKMWRHVnpJRDBnSkd4cGMzUmZabkp2YlM1d2NtOXdLRndpWVhSMGNtbGlkWFJsYzF3aUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUM4dklHeHZiM0FnZEdoeWIzVm5hQ0E4YzJWc1pXTjBQaUJoZEhSeWFXSjFkR1Z6SUdGdVpDQmhjSEJzZVNCMGFHVnRJRzl1SUR4a2FYWStYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUIwYjE5aGRIUnlhV0oxZEdWeklEMGdKR3hwYzNSZmRHOHVjSEp2Y0NoY0ltRjBkSEpwWW5WMFpYTmNJaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWtMbVZoWTJnb2RHOWZZWFIwY21saWRYUmxjeXdnWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0pHeHBjM1JmZEc4dWNtVnRiM1psUVhSMGNpaDBhR2x6TG01aGJXVXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTazdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDUXVaV0ZqYUNobWNtOXRYMkYwZEhKcFluVjBaWE1zSUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDUnNhWE4wWDNSdkxtRjBkSElvZEdocGN5NXVZVzFsTENCMGFHbHpMblpoYkhWbEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwcE8xeHVYRzRnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNCMGFHbHpMbU52Y0hsQmRIUnlhV0oxZEdWeklEMGdablZ1WTNScGIyNG9KR1p5YjIwc0lDUjBieXdnY0hKbFptbDRLVnh1SUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaWgwZVhCbGIyWW9jSEpsWm1sNEtUMDlYQ0oxYm1SbFptbHVaV1JjSWlsY2JpQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2NISmxabWw0SUQwZ1hDSmNJanRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR1p5YjIxZllYUjBjbWxpZFhSbGN5QTlJQ1JtY205dExuQnliM0FvWENKaGRIUnlhV0oxZEdWelhDSXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnZEc5ZllYUjBjbWxpZFhSbGN5QTlJQ1IwYnk1d2NtOXdLRndpWVhSMGNtbGlkWFJsYzF3aUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNRdVpXRmphQ2gwYjE5aGRIUnlhV0oxZEdWekxDQm1kVzVqZEdsdmJpZ3BJSHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUtIQnlaV1pwZUNFOVhDSmNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NXVZVzFsTG1sdVpHVjRUMllvY0hKbFptbDRLU0E5UFNBd0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWtkRzh1Y21WdGIzWmxRWFIwY2loMGFHbHpMbTVoYldVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dkpIUnZMbkpsYlc5MlpVRjBkSElvZEdocGN5NXVZVzFsS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5S1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSkM1bFlXTm9LR1p5YjIxZllYUjBjbWxpZFhSbGN5d2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkhSdkxtRjBkSElvZEdocGN5NXVZVzFsTENCMGFHbHpMblpoYkhWbEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnZEdocGN5NWpiM0I1Um05eWJVRjBkSEpwWW5WMFpYTWdQU0JtZFc1amRHbHZiaWdrWm5KdmJTd2dKSFJ2S1Z4dUlDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FrZEc4dWNtVnRiM1psUVhSMGNpaGNJbVJoZEdFdFkzVnljbVZ1ZEMxMFlYaHZibTl0ZVMxaGNtTm9hWFpsWENJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWpiM0I1UVhSMGNtbGlkWFJsY3lna1puSnZiU3dnSkhSdktUdGNibHh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUxY0dSaGRHVkdiM0p0SUQwZ1puVnVZM1JwYjI0b1pHRjBZU3dnWkdGMFlWOTBlWEJsS1Z4dUlDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmloa1lYUmhYM1I1Y0dVOVBWd2lhbk52Ymx3aUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnZXk4dmRHaGxiaUIzWlNCa2FXUWdZU0J5WlhGMVpYTjBJSFJ2SUhSb1pTQmhhbUY0SUdWdVpIQnZhVzUwTENCemJ5QmxlSEJsWTNRZ1lXNGdiMkpxWldOMElHSmhZMnRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUtIUjVjR1Z2Wmloa1lYUmhXeWRtYjNKdEoxMHBJVDA5WENKMWJtUmxabWx1WldSY0lpbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dmNtVnRiM1psSUdGc2JDQmxkbVZ1ZEhNZ1puSnZiU0JUSmtZZ1ptOXliVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBa2RHaHBjeTV2Wm1Zb0tUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkwzSmxabkpsYzJnZ2RHaGxJR1p2Y20wZ0tHRjFkRzhnWTI5MWJuUXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhObGJHWXVZMjl3ZVV4cGMzUkpkR1Z0YzBOdmJuUmxiblJ6S0NRb1pHRjBZVnNuWm05eWJTZGRLU3dnSkhSb2FYTXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZjbVVnYVc1cGRDQlRKa1lnWTJ4aGMzTWdiMjRnZEdobElHWnZjbTFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGtkR2hwY3k1elpXRnlZMmhCYm1SR2FXeDBaWElvS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2TDJsbUlHRnFZWGdnYVhNZ1pXNWhZbXhsWkNCcGJtbDBJSFJvWlNCd1lXZHBibUYwYVc5dVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXBibWwwS0hSeWRXVXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1LSE5sYkdZdWFYTmZZV3BoZUQwOU1TbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNXpaWFIxY0VGcVlYaFFZV2RwYm1GMGFXOXVLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNibHh1WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc1Y2JseHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSFJvYVhNdVlXUmtVbVZ6ZFd4MGN5QTlJR1oxYm1OMGFXOXVLR1JoZEdFc0lHUmhkR0ZmZEhsd1pTbGNiaUFnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWW9aR0YwWVY5MGVYQmxQVDFjSW1wemIyNWNJaWxjYmlBZ0lDQWdJQ0FnSUNBZ0lIc3ZMM1JvWlc0Z2QyVWdaR2xrSUdFZ2NtVnhkV1Z6ZENCMGJ5QjBhR1VnWVdwaGVDQmxibVJ3YjJsdWRDd2djMjhnWlhod1pXTjBJR0Z1SUc5aWFtVmpkQ0JpWVdOclhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OW5jbUZpSUhSb1pTQnlaWE4xYkhSeklHRnVaQ0JzYjJGa0lHbHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeTl6Wld4bUxpUmhhbUY0WDNKbGMzVnNkSE5mWTI5dWRHRnBibVZ5TG1Gd2NHVnVaQ2hrWVhSaFd5ZHlaWE4xYkhSekoxMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE5sYkdZdWJHOWhaRjl0YjNKbFgyaDBiV3dnUFNCa1lYUmhXeWR5WlhOMWJIUnpKMTA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCbGJITmxJR2xtS0dSaGRHRmZkSGx3WlQwOVhDSm9kRzFzWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0I3THk5M1pTQmhjbVVnWlhod1pXTjBhVzVuSUhSb1pTQm9kRzFzSUc5bUlIUm9aU0J5WlhOMWJIUnpJSEJoWjJVZ1ltRmpheXdnYzI4Z1pYaDBjbUZqZENCMGFHVWdhSFJ0YkNCM1pTQnVaV1ZrWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlDUmtZWFJoWDI5aWFpQTlJQ1FvWkdGMFlTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMlZzWmk1c2IyRmtYMjF2Y21WZmFIUnRiQ0E5SUNSa1lYUmhYMjlpYWk1bWFXNWtLSE5sYkdZdVlXcGhlRjkwWVhKblpYUmZZWFIwY2lrdWFIUnRiQ2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6YjJ4bExteHZaeWhjSWs1RlZ5QklWRTFNWENJc0lITmxiR1l1Ykc5aFpGOXRiM0psWDJoMGJXd3BPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnYVc1bWFXNXBkR1ZmYzJOeWIyeHNYMlZ1WkNBOUlHWmhiSE5sTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlna0tGd2lQR1JwZGo1Y0lpdHpaV3htTG14dllXUmZiVzl5WlY5b2RHMXNLMXdpUEM5a2FYWStYQ0lwTG1acGJtUW9YQ0piWkdGMFlTMXpaV0Z5WTJndFptbHNkR1Z5TFdGamRHbHZiajBuYVc1bWFXNXBkR1V0YzJOeWIyeHNMV1Z1WkNkZFhDSXBMbXhsYm1kMGFENHdLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbHVabWx1YVhSbFgzTmpjbTlzYkY5bGJtUWdQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0F2TDJsbUlIUm9aWEpsSUdseklHRnViM1JvWlhJZ2MyVnNaV04wYjNJZ1ptOXlJR2x1Wm1sdWFYUmxJSE5qY205c2JDd2dabWx1WkNCMGFHVWdZMjl1ZEdWdWRITWdiMllnZEdoaGRDQnBibk4wWldGa1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmloelpXeG1MbWx1Wm1sdWFYUmxYM05qY205c2JGOWpiMjUwWVdsdVpYSWhQVndpWENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNXNiMkZrWDIxdmNtVmZhSFJ0YkNBOUlDUW9YQ0k4WkdsMlBsd2lLM05sYkdZdWJHOWhaRjl0YjNKbFgyaDBiV3dyWENJOEwyUnBkajVjSWlrdVptbHVaQ2h6Wld4bUxtbHVabWx1YVhSbFgzTmpjbTlzYkY5amIyNTBZV2x1WlhJcExtaDBiV3dvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1LSE5sYkdZdWFXNW1hVzVwZEdWZmMyTnliMnhzWDNKbGMzVnNkRjlqYkdGemN5RTlYQ0pjSWlsY2JpQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ0pISmxjM1ZzZEY5cGRHVnRjeUE5SUNRb1hDSThaR2wyUGx3aUszTmxiR1l1Ykc5aFpGOXRiM0psWDJoMGJXd3JYQ0k4TDJScGRqNWNJaWt1Wm1sdVpDaHpaV3htTG1sdVptbHVhWFJsWDNOamNtOXNiRjl5WlhOMWJIUmZZMnhoYzNNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUFrY21WemRXeDBYMmwwWlcxelgyTnZiblJoYVc1bGNpQTlJQ1FvSnp4a2FYWXZQaWNzSUh0OUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWtjbVZ6ZFd4MFgybDBaVzF6WDJOdmJuUmhhVzVsY2k1aGNIQmxibVFvSkhKbGMzVnNkRjlwZEdWdGN5azdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6Wld4bUxteHZZV1JmYlc5eVpWOW9kRzFzSUQwZ0pISmxjM1ZzZEY5cGRHVnRjMTlqYjI1MFlXbHVaWEl1YUhSdGJDZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppaHBibVpwYm1sMFpWOXpZM0p2Ykd4ZlpXNWtLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2V5OHZkMlVnWm05MWJtUWdZU0JrWVhSaElHRjBkSEpwWW5WMFpTQnphV2R1WVd4c2FXNW5JSFJvWlNCc1lYTjBJSEJoWjJVZ2MyOGdabWx1YVhOb0lHaGxjbVZjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhObGJHWXVhWE5mYldGNFgzQmhaMlZrSUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6Wld4bUxteGhjM1JmYkc5aFpGOXRiM0psWDJoMGJXd2dQU0J6Wld4bUxteHZZV1JmYlc5eVpWOW9kRzFzTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyVnNaaTVwYm1acGJtbDBaVk5qY205c2JFRndjR1Z1WkNoelpXeG1MbXh2WVdSZmJXOXlaVjlvZEcxc0tUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnWld4elpTQnBaaWh6Wld4bUxteGhjM1JmYkc5aFpGOXRiM0psWDJoMGJXd2hQVDF6Wld4bUxteHZZV1JmYlc5eVpWOW9kRzFzS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2WTJobFkyc2dkRzhnYldGclpTQnpkWEpsSUhSb1pTQnVaWGNnYUhSdGJDQm1aWFJqYUdWa0lHbHpJR1JwWm1abGNtVnVkRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE5sYkdZdWJHRnpkRjlzYjJGa1gyMXZjbVZmYUhSdGJDQTlJSE5sYkdZdWJHOWhaRjl0YjNKbFgyaDBiV3c3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNXBibVpwYm1sMFpWTmpjbTlzYkVGd2NHVnVaQ2h6Wld4bUxteHZZV1JmYlc5eVpWOW9kRzFzS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlZ4dUlDQWdJQ0FnSUNBZ0lDQWdleTh2ZDJVZ2NtVmpaV2wyWldRZ2RHaGxJSE5oYldVZ2JXVnpjMkZuWlNCaFoyRnBiaUJ6YnlCa2IyNG5kQ0JoWkdRc0lHRnVaQ0IwWld4c0lGTW1SaUIwYUdGMElIZGxKM0psSUdGMElIUm9aU0JsYm1RdUxseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1YVhOZmJXRjRYM0JoWjJWa0lEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dVhHNWNiaUFnSUNBZ0lDQWdkR2hwY3k1cGJtWnBibWwwWlZOamNtOXNiRUZ3Y0dWdVpDQTlJR1oxYm1OMGFXOXVLQ1J2WW1wbFkzUXBYRzRnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1LSE5sYkdZdWFXNW1hVzVwZEdWZmMyTnliMnhzWDNKbGMzVnNkRjlqYkdGemN5RTlYQ0pjSWlsY2JpQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6Wld4bUxpUnBibVpwYm1sMFpWOXpZM0p2Ykd4ZlkyOXVkR0ZwYm1WeUxtWnBibVFvYzJWc1ppNXBibVpwYm1sMFpWOXpZM0p2Ykd4ZmNtVnpkV3gwWDJOc1lYTnpLUzVzWVhOMEtDa3VZV1owWlhJb0pHOWlhbVZqZENrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpaV3htTGlScGJtWnBibWwwWlY5elkzSnZiR3hmWTI5dWRHRnBibVZ5TG1Gd2NHVnVaQ2drYjJKcVpXTjBLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1WEc1Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUxY0dSaGRHVlNaWE4xYkhSeklEMGdablZ1WTNScGIyNG9aR0YwWVN3Z1pHRjBZVjkwZVhCbEtWeHVJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppaGtZWFJoWDNSNWNHVTlQVndpYW5OdmJsd2lLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2V5OHZkR2hsYmlCM1pTQmthV1FnWVNCeVpYRjFaWE4wSUhSdklIUm9aU0JoYW1GNElHVnVaSEJ2YVc1MExDQnpieUJsZUhCbFkzUWdZVzRnYjJKcVpXTjBJR0poWTJ0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkwyZHlZV0lnZEdobElISmxjM1ZzZEhNZ1lXNWtJR3h2WVdRZ2FXNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG5KbGMzVnNkSE5mYUhSdGJDQTlJR1JoZEdGYkozSmxjM1ZzZEhNblhUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnZ2RHaHBjeTV5WlhCc1lXTmxYM0psYzNWc2RITWdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1SkdGcVlYaGZjbVZ6ZFd4MGMxOWpiMjUwWVdsdVpYSXVhSFJ0YkNoMGFHbHpMbkpsYzNWc2RITmZhSFJ0YkNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lvZEhsd1pXOW1LR1JoZEdGYkoyWnZjbTBuWFNraFBUMWNJblZ1WkdWbWFXNWxaRndpS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeTl5WlcxdmRtVWdZV3hzSUdWMlpXNTBjeUJtY205dElGTW1SaUJtYjNKdFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1IwYUdsekxtOW1aaWdwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2Y21WdGIzWmxJSEJoWjJsdVlYUnBiMjVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyVnNaaTV5WlcxdmRtVkJhbUY0VUdGbmFXNWhkR2x2YmlncE8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dmNtVm1jbVZ6YUNCMGFHVWdabTl5YlNBb1lYVjBieUJqYjNWdWRDbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNWpiM0I1VEdsemRFbDBaVzF6UTI5dWRHVnVkSE1vSkNoa1lYUmhXeWRtYjNKdEoxMHBMQ0FrZEdocGN5azdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OTFjR1JoZEdVZ1lYUjBjbWxpZFhSbGN5QnZiaUJtYjNKdFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSE5sYkdZdVkyOXdlVVp2Y20xQmRIUnlhV0oxZEdWektDUW9aR0YwWVZzblptOXliU2RkS1N3Z0pIUm9hWE1wTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2Y21VZ2FXNXBkQ0JUSmtZZ1kyeGhjM01nYjI0Z2RHaGxJR1p2Y20xY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKSFJvYVhNdWMyVmhjbU5vUVc1a1JtbHNkR1Z5S0hzbmFYTkpibWwwSnpvZ1ptRnNjMlY5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGtkR2hwY3k1bWFXNWtLRndpYVc1d2RYUmNJaWt1Y21WdGIzWmxRWFIwY2loY0ltUnBjMkZpYkdWa1hDSXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUdWc2MyVWdhV1lvWkdGMFlWOTBlWEJsUFQxY0ltaDBiV3hjSWlrZ2V5OHZkMlVnWVhKbElHVjRjR1ZqZEdsdVp5QjBhR1VnYUhSdGJDQnZaaUIwYUdVZ2NtVnpkV3gwY3lCd1lXZGxJR0poWTJzc0lITnZJR1Y0ZEhKaFkzUWdkR2hsSUdoMGJXd2dkMlVnYm1WbFpGeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUNSa1lYUmhYMjlpYWlBOUlDUW9aR0YwWVNrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG5KbGMzVnNkSE5mYUhSdGJDQTlJQ1JrWVhSaFgyOWlhaTVtYVc1a0tDQjBhR2x6TG1GcVlYaGZkR0Z5WjJWMFgyRjBkSElnS1M1b2RHMXNLQ2s3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9JSFJvYVhNdWNtVndiR0ZqWlY5eVpYTjFiSFJ6SUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J6Wld4bUxpUmhhbUY0WDNKbGMzVnNkSE5mWTI5dWRHRnBibVZ5TG1oMGJXd29kR2hwY3k1eVpYTjFiSFJ6WDJoMGJXd3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhObGJHWXVkWEJrWVhSbFEyOXVkR1Z1ZEVGeVpXRnpLQ0FrWkdGMFlWOXZZbW9nS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2h6Wld4bUxpUmhhbUY0WDNKbGMzVnNkSE5mWTI5dWRHRnBibVZ5TG1acGJtUW9YQ0l1YzJWaGNtTm9ZVzVrWm1sc2RHVnlYQ0lwTG14bGJtZDBhQ0ErSURBcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2V5OHZkR2hsYmlCMGFHVnlaU0JoY21VZ2MyVmhjbU5vSUdadmNtMG9jeWtnYVc1emFXUmxJSFJvWlNCeVpYTjFiSFJ6SUdOdmJuUmhhVzVsY2l3Z2MyOGdjbVV0YVc1cGRDQjBhR1Z0WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMlZzWmk0a1lXcGhlRjl5WlhOMWJIUnpYMk52Ym5SaGFXNWxjaTVtYVc1a0tGd2lMbk5sWVhKamFHRnVaR1pwYkhSbGNsd2lLUzV6WldGeVkyaEJibVJHYVd4MFpYSW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkwybG1JSFJvWlNCamRYSnlaVzUwSUhObFlYSmphQ0JtYjNKdElHbHpJRzV2ZENCcGJuTnBaR1VnZEdobElISmxjM1ZzZEhNZ1kyOXVkR0ZwYm1WeUxDQjBhR1Z1SUhCeWIyTmxaV1FnWVhNZ2JtOXliV0ZzSUdGdVpDQjFjR1JoZEdVZ2RHaGxJR1p2Y20xY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppaHpaV3htTGlSaGFtRjRYM0psYzNWc2RITmZZMjl1ZEdGcGJtVnlMbVpwYm1Rb1hDSXVjMlZoY21Ob1lXNWtabWxzZEdWeVcyUmhkR0V0YzJZdFptOXliUzFwWkQwblhDSWdLeUJ6Wld4bUxuTm1hV1FnS3lCY0lpZGRYQ0lwTG14bGJtZDBhRDA5TUNrZ2UxeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQWtibVYzWDNObFlYSmphRjltYjNKdElEMGdKR1JoZEdGZmIySnFMbVpwYm1Rb1hDSXVjMlZoY21Ob1lXNWtabWxzZEdWeVcyUmhkR0V0YzJZdFptOXliUzFwWkQwblhDSWdLeUJ6Wld4bUxuTm1hV1FnS3lCY0lpZGRYQ0lwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNna2JtVjNYM05sWVhKamFGOW1iM0p0TG14bGJtZDBhQ0E5UFNBeEtTQjdMeTkwYUdWdUlISmxjR3hoWTJVZ2RHaGxJSE5sWVhKamFDQm1iM0p0SUhkcGRHZ2dkR2hsSUc1bGR5QnZibVZjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk5eVpXMXZkbVVnWVd4c0lHVjJaVzUwY3lCbWNtOXRJRk1tUmlCbWIzSnRYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWtkR2hwY3k1dlptWW9LVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk5eVpXMXZkbVVnY0dGbmFXNWhkR2x2Ymx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNXlaVzF2ZG1WQmFtRjRVR0ZuYVc1aGRHbHZiaWdwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkwzSmxabkpsYzJnZ2RHaGxJR1p2Y20wZ0tHRjFkRzhnWTI5MWJuUXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpaV3htTG1OdmNIbE1hWE4wU1hSbGJYTkRiMjUwWlc1MGN5Z2tibVYzWDNObFlYSmphRjltYjNKdExDQWtkR2hwY3lrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZkWEJrWVhSbElHRjBkSEpwWW5WMFpYTWdiMjRnWm05eWJWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyVnNaaTVqYjNCNVJtOXliVUYwZEhKcFluVjBaWE1vSkc1bGQxOXpaV0Z5WTJoZlptOXliU3dnSkhSb2FYTXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2TDNKbElHbHVhWFFnVXlaR0lHTnNZWE56SUc5dUlIUm9aU0JtYjNKdFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBa2RHaHBjeTV6WldGeVkyaEJibVJHYVd4MFpYSW9leWRwYzBsdWFYUW5PaUJtWVd4elpYMHBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWld4elpTQjdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SkhSb2FYTXVabWx1WkNoY0ltbHVjSFYwWENJcExuSmxiVzkyWlVGMGRISW9YQ0prYVhOaFlteGxaRndpS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2MyVnNaaTVwYzE5dFlYaGZjR0ZuWldRZ1BTQm1ZV3h6WlRzZ0x5OW1iM0lnYVc1bWFXNXBkR1VnYzJOeWIyeHNYRzRnSUNBZ0lDQWdJQ0FnSUNCelpXeG1MbU4xY25KbGJuUmZjR0ZuWldRZ1BTQXhPeUF2TDJadmNpQnBibVpwYm1sMFpTQnpZM0p2Ykd4Y2JpQWdJQ0FnSUNBZ0lDQWdJSE5sYkdZdWMyVjBTVzVtYVc1cGRHVlRZM0p2Ykd4RGIyNTBZV2x1WlhJb0tUdGNibHh1SUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUxY0dSaGRHVkRiMjUwWlc1MFFYSmxZWE1nUFNCbWRXNWpkR2x2YmlnZ0pHaDBiV3hmWkdGMFlTQXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lGeHVJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1lXUmtJR0ZrWkdsMGFXOXVZV3dnWTI5dWRHVnVkQ0JoY21WaGMxeHVJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tDQjBhR2x6TG1GcVlYaGZkWEJrWVhSbFgzTmxZM1JwYjI1eklDWW1JSFJvYVhNdVlXcGhlRjkxY0dSaGRHVmZjMlZqZEdsdmJuTXViR1Z1WjNSb0lDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1p2Y2lBb2FXNWtaWGdnUFNBd095QnBibVJsZUNBOElIUm9hWE11WVdwaGVGOTFjR1JoZEdWZmMyVmpkR2x2Ym5NdWJHVnVaM1JvT3lBcksybHVaR1Y0S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCelpXeGxZM1J2Y2lBOUlIUm9hWE11WVdwaGVGOTFjR1JoZEdWZmMyVmpkR2x2Ym5OYmFXNWtaWGhkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWtLQ0J6Wld4bFkzUnZjaUFwTG1oMGJXd29JQ1JvZEcxc1gyUmhkR0V1Wm1sdVpDZ2djMlZzWldOMGIzSWdLUzVvZEcxc0tDa2dLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZEdocGN5NW1ZV1JsUTI5dWRHVnVkRUZ5WldGeklEMGdablZ1WTNScGIyNG9JR1JwY21WamRHbHZiaUFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRnh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJRzl3WVdOcGRIa2dQU0F3TGpVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lHUnBjbVZqZEdsdmJpQTlQVDBnWENKcGJsd2lJQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUc5d1lXTnBkSGtnUFNBeE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lIUm9hWE11WVdwaGVGOTFjR1JoZEdWZmMyVmpkR2x2Ym5NZ0ppWWdkR2hwY3k1aGFtRjRYM1Z3WkdGMFpWOXpaV04wYVc5dWN5NXNaVzVuZEdnZ0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabTl5SUNocGJtUmxlQ0E5SURBN0lHbHVaR1Y0SUR3Z2RHaHBjeTVoYW1GNFgzVndaR0YwWlY5elpXTjBhVzl1Y3k1c1pXNW5kR2c3SUNzcmFXNWtaWGdwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUhObGJHVmpkRzl5SUQwZ2RHaHBjeTVoYW1GNFgzVndaR0YwWlY5elpXTjBhVzl1YzF0cGJtUmxlRjA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDUW9JSE5sYkdWamRHOXlJQ2t1YzNSdmNDaDBjblZsTEhSeWRXVXBMbUZ1YVcxaGRHVW9JSHNnYjNCaFkybDBlVG9nYjNCaFkybDBlWDBzSUZ3aVptRnpkRndpSUNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQmNiaUFnSUNBZ0lDQWdJQ0FnSUZ4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdkR2hwY3k1eVpXMXZkbVZYYjI5RGIyMXRaWEpqWlVOdmJuUnliMnh6SUQwZ1puVnVZM1JwYjI0b0tYdGNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQWtkMjl2WDI5eVpHVnlZbmtnUFNBa0tDY3VkMjl2WTI5dGJXVnlZMlV0YjNKa1pYSnBibWNnTG05eVpHVnlZbmtuS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoY2lBa2QyOXZYMjl5WkdWeVlubGZabTl5YlNBOUlDUW9KeTUzYjI5amIyMXRaWEpqWlMxdmNtUmxjbWx1WnljcE8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBa2QyOXZYMjl5WkdWeVlubGZabTl5YlM1dlptWW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDUjNiMjlmYjNKa1pYSmllUzV2Wm1Zb0tUdGNiaUFnSUNBZ0lDQWdmVHRjYmx4dUlDQWdJQ0FnSUNCMGFHbHpMbUZrWkZGMVpYSjVVR0Z5WVcwZ1BTQm1kVzVqZEdsdmJpaHVZVzFsTENCMllXeDFaU3dnZFhKc1gzUjVjR1VwZTF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmloMGVYQmxiMllvZFhKc1gzUjVjR1VwUFQxY0luVnVaR1ZtYVc1bFpGd2lLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUIxY214ZmRIbHdaU0E5SUZ3aVlXeHNYQ0k3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCelpXeG1MbVY0ZEhKaFgzRjFaWEo1WDNCaGNtRnRjMXQxY214ZmRIbHdaVjFiYm1GdFpWMGdQU0IyWVd4MVpUdGNibHh1SUNBZ0lDQWdJQ0I5TzF4dVhHNGdJQ0FnSUNBZ0lIUm9hWE11YVc1cGRGZHZiME52YlcxbGNtTmxRMjl1ZEhKdmJITWdQU0JtZFc1amRHbHZiaWdwZTF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0J6Wld4bUxuSmxiVzkyWlZkdmIwTnZiVzFsY21ObFEyOXVkSEp2YkhNb0tUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJQ1IzYjI5ZmIzSmtaWEppZVNBOUlDUW9KeTUzYjI5amIyMXRaWEpqWlMxdmNtUmxjbWx1WnlBdWIzSmtaWEppZVNjcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlDUjNiMjlmYjNKa1pYSmllVjltYjNKdElEMGdKQ2duTG5kdmIyTnZiVzFsY21ObExXOXlaR1Z5YVc1bkp5azdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJ2Y21SbGNsOTJZV3dnUFNCY0lsd2lPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWW9KSGR2YjE5dmNtUmxjbUo1TG14bGJtZDBhRDR3S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRzl5WkdWeVgzWmhiQ0E5SUNSM2IyOWZiM0prWlhKaWVTNTJZV3dvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHVnNjMlZjYmlBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnZjbVJsY2w5MllXd2dQU0J6Wld4bUxtZGxkRkYxWlhKNVVHRnlZVzFHY205dFZWSk1LRndpYjNKa1pYSmllVndpTENCM2FXNWtiM2N1Ykc5allYUnBiMjR1YUhKbFppazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUtHOXlaR1Z5WDNaaGJEMDlYQ0p0Wlc1MVgyOXlaR1Z5WENJcFhHNGdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYjNKa1pYSmZkbUZzSUQwZ1hDSmNJanRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWW9LRzl5WkdWeVgzWmhiQ0U5WENKY0lpa21KaWdoSVc5eVpHVnlYM1poYkNrcFhHNGdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNWxlSFJ5WVY5eGRXVnllVjl3WVhKaGJYTXVZV3hzTG05eVpHVnlZbmtnUFNCdmNtUmxjbDkyWVd3N1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc1Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSkhkdmIxOXZjbVJsY21KNVgyWnZjbTB1YjI0b0ozTjFZbTFwZENjc0lHWjFibU4wYVc5dUtHVXBYRzRnSUNBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pTNXdjbVYyWlc1MFJHVm1ZWFZzZENncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZkbUZ5SUdadmNtMGdQU0JsTG5SaGNtZGxkRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5S1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSkhkdmIxOXZjbVJsY21KNUxtOXVLRndpWTJoaGJtZGxYQ0lzSUdaMWJtTjBhVzl1S0dVcFhHNGdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWlM1d2NtVjJaVzUwUkdWbVlYVnNkQ2dwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSFpoYkNBOUlDUW9kR2hwY3lrdWRtRnNLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZb2RtRnNQVDFjSW0xbGJuVmZiM0prWlhKY0lpbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGJDQTlJRndpWENJN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMlZzWmk1bGVIUnlZVjl4ZFdWeWVWOXdZWEpoYlhNdVlXeHNMbTl5WkdWeVlua2dQU0IyWVd3N1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWtkR2hwY3k1MGNtbG5aMlZ5S0Z3aWMzVmliV2wwWENJcFhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLVHRjYmx4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdkR2hwY3k1elkzSnZiR3hTWlhOMWJIUnpJRDBnWm5WdVkzUnBiMjRvS1Z4dUlDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlnb2MyVnNaaTV6WTNKdmJHeGZiMjVmWVdOMGFXOXVQVDF6Wld4bUxtRnFZWGhmWVdOMGFXOXVLWHg4S0hObGJHWXVjMk55YjJ4c1gyOXVYMkZqZEdsdmJqMDlYQ0poYkd4Y0lpa3BYRzRnSUNBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyVnNaaTV6WTNKdmJHeFViMUJ2Y3lncE95QXZMM05qY205c2JDQjBhR1VnZDJsdVpHOTNJR2xtSUdsMElHaGhjeUJpWldWdUlITmxkRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2YzJWc1ppNWhhbUY0WDJGamRHbHZiaUE5SUZ3aVhDSTdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0IwYUdsekxuVndaR0YwWlZWeWJFaHBjM1J2Y25rZ1BTQm1kVzVqZEdsdmJpaGhhbUY0WDNKbGMzVnNkSE5mZFhKc0tWeHVJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMllYSWdkWE5sWDJocGMzUnZjbmxmWVhCcElEMGdNRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2gzYVc1a2IzY3VhR2x6ZEc5eWVTQW1KaUIzYVc1a2IzY3VhR2x6ZEc5eWVTNXdkWE5vVTNSaGRHVXBYRzRnSUNBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RYTmxYMmhwYzNSdmNubGZZWEJwSUQwZ0pIUm9hWE11WVhSMGNpaGNJbVJoZEdFdGRYTmxMV2hwYzNSdmNua3RZWEJwWENJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlnb2MyVnNaaTUxY0dSaGRHVmZZV3BoZUY5MWNtdzlQVEVwSmlZb2RYTmxYMmhwYzNSdmNubGZZWEJwUFQweEtTbGNiaUFnSUNBZ0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkwyNXZkeUJqYUdWamF5QnBaaUIwYUdVZ1luSnZkM05sY2lCemRYQndiM0owY3lCb2FYTjBiM0o1SUhOMFlYUmxJSEIxYzJnZ09pbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZDJsdVpHOTNMbWhwYzNSdmNua2dKaVlnZDJsdVpHOTNMbWhwYzNSdmNua3VjSFZ6YUZOMFlYUmxLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FHbHpkRzl5ZVM1d2RYTm9VM1JoZEdVb2JuVnNiQ3dnYm5Wc2JDd2dZV3BoZUY5eVpYTjFiSFJ6WDNWeWJDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSFJvYVhNdWNtVnRiM1psUVdwaGVGQmhaMmx1WVhScGIyNGdQU0JtZFc1amRHbHZiaWdwWEc0Z0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtS0hSNWNHVnZaaWh6Wld4bUxtRnFZWGhmYkdsdWEzTmZjMlZzWldOMGIzSXBJVDFjSW5WdVpHVm1hVzVsWkZ3aUtWeHVJQ0FnSUNBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQWtZV3BoZUY5c2FXNXJjMTl2WW1wbFkzUWdQU0JxVVhWbGNua29jMlZzWmk1aGFtRjRYMnhwYm10elgzTmxiR1ZqZEc5eUtUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0NSaGFtRjRYMnhwYm10elgyOWlhbVZqZEM1c1pXNW5kR2crTUNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1JoYW1GNFgyeHBibXR6WDI5aWFtVmpkQzV2Wm1Zb0tUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0IwYUdsekxtZGxkRUpoYzJWVmNtd2dQU0JtZFc1amRHbHZiaWdnZFhKc0lDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OXViM2NnYzJWbElHbG1JSGRsSUdGeVpTQnZiaUIwYUdVZ1ZWSk1JSGRsSUhSb2FXNXJMaTR1WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnZFhKc1gzQmhjblJ6SUQwZ2RYSnNMbk53YkdsMEtGd2lQMXdpS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCMWNteGZZbUZ6WlNBOUlGd2lYQ0k3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtS0hWeWJGOXdZWEowY3k1c1pXNW5kR2crTUNsY2JpQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IxY214ZlltRnpaU0E5SUhWeWJGOXdZWEowYzFzd1hUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIVnliRjlpWVhObElEMGdkWEpzTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhWeWJGOWlZWE5sTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIUm9hWE11WTJGdVJtVjBZMmhCYW1GNFVtVnpkV3gwY3lBOUlHWjFibU4wYVc5dUtHWmxkR05vWDNSNWNHVXBYRzRnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1LSFI1Y0dWdlppaG1aWFJqYUY5MGVYQmxLVDA5WENKMWJtUmxabWx1WldSY0lpbGNiaUFnSUNBZ0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdabVYwWTJoZmRIbHdaU0E5SUZ3aVhDSTdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQm1aWFJqYUY5aGFtRjRYM0psYzNWc2RITWdQU0JtWVd4elpUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWW9jMlZzWmk1cGMxOWhhbUY0UFQweEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnZXk4dmRHaGxiaUIzWlNCM2FXeHNJR0ZxWVhnZ2MzVmliV2wwSUhSb1pTQm1iM0p0WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkwyRnVaQ0JwWmlCM1pTQmpZVzRnWm1sdVpDQjBhR1VnY21WemRXeDBjeUJqYjI1MFlXbHVaWEpjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmloelpXeG1MaVJoYW1GNFgzSmxjM1ZzZEhOZlkyOXVkR0ZwYm1WeUxteGxibWQwYUQwOU1TbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdabGRHTm9YMkZxWVhoZmNtVnpkV3gwY3lBOUlIUnlkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSEpsYzNWc2RITmZkWEpzSUQwZ2MyVnNaaTV5WlhOMWJIUnpYM1Z5YkRzZ0lDOHZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUhKbGMzVnNkSE5mZFhKc1gyVnVZMjlrWldRZ1BTQW5KenNnSUM4dlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR04xY25KbGJuUmZkWEpzSUQwZ2QybHVaRzkzTG14dlkyRjBhVzl1TG1oeVpXWTdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2TDJsbmJtOXlaU0FqSUdGdVpDQmxkbVZ5ZVhSb2FXNW5JR0ZtZEdWeVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR2hoYzJoZmNHOXpJRDBnZDJsdVpHOTNMbXh2WTJGMGFXOXVMbWh5WldZdWFXNWtaWGhQWmlnbkl5Y3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0doaGMyaGZjRzl6SVQwOUxURXBlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamRYSnlaVzUwWDNWeWJDQTlJSGRwYm1SdmR5NXNiMk5oZEdsdmJpNW9jbVZtTG5OMVluTjBjaWd3TENCM2FXNWtiM2N1Ykc5allYUnBiMjR1YUhKbFppNXBibVJsZUU5bUtDY2pKeWtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1LQ0FvSUNnZ2MyVnNaaTVrYVhOd2JHRjVYM0psYzNWc2RGOXRaWFJvYjJROVBWd2lZM1Z6ZEc5dFgzZHZiMk52YlcxbGNtTmxYM04wYjNKbFhDSWdLU0I4ZkNBb0lITmxiR1l1WkdsemNHeGhlVjl5WlhOMWJIUmZiV1YwYUc5a1BUMWNJbkJ2YzNSZmRIbHdaVjloY21Ob2FYWmxYQ0lnS1NBcElDWW1JQ2dnYzJWc1ppNWxibUZpYkdWZmRHRjRiMjV2YlhsZllYSmphR2wyWlhNZ1BUMGdNU0FwSUNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0NCelpXeG1MbU4xY25KbGJuUmZkR0Y0YjI1dmJYbGZZWEpqYUdsMlpTQWhQVDFjSWx3aUlDbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm1WMFkyaGZZV3BoZUY5eVpYTjFiSFJ6SUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQm1aWFJqYUY5aGFtRjRYM0psYzNWc2RITTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2S25aaGNpQnlaWE4xYkhSelgzVnliQ0E5SUhCeWIyTmxjM05mWm05eWJTNW5aWFJTWlhOMWJIUnpWWEpzS0hObGJHWXNJSE5sYkdZdWNtVnpkV3gwYzE5MWNtd3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR0ZqZEdsMlpWOTBZWGdnUFNCd2NtOWpaWE56WDJadmNtMHVaMlYwUVdOMGFYWmxWR0Y0S0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2NYVmxjbmxmY0dGeVlXMXpJRDBnYzJWc1ppNW5aWFJWY214UVlYSmhiWE1vZEhKMVpTd2dKeWNzSUdGamRHbDJaVjkwWVhncE95b3ZYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc1Y2JseHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeTl1YjNjZ2MyVmxJR2xtSUhkbElHRnlaU0J2YmlCMGFHVWdWVkpNSUhkbElIUm9hVzVyTGk0dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSFZ5YkY5aVlYTmxJRDBnZEdocGN5NW5aWFJDWVhObFZYSnNLQ0JqZFhKeVpXNTBYM1Z5YkNBcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZkbUZ5SUhKbGMzVnNkSE5mZFhKc1gySmhjMlVnUFNCMGFHbHpMbWRsZEVKaGMyVlZjbXdvSUdOMWNuSmxiblJmZFhKc0lDazdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2JHRnVaeUE5SUhObGJHWXVaMlYwVVhWbGNubFFZWEpoYlVaeWIyMVZVa3dvWENKc1lXNW5YQ0lzSUhkcGJtUnZkeTVzYjJOaGRHbHZiaTVvY21WbUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaWdvZEhsd1pXOW1LR3hoYm1jcElUMDlYQ0oxYm1SbFptbHVaV1JjSWlrbUppaHNZVzVuSVQwOWJuVnNiQ2twWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjFjbXhmWW1GelpTQTlJSE5sYkdZdVlXUmtWWEpzVUdGeVlXMG9kWEpzWDJKaGMyVXNJRndpYkdGdVp6MWNJaXRzWVc1bktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2MyWnBaQ0E5SUhObGJHWXVaMlYwVVhWbGNubFFZWEpoYlVaeWIyMVZVa3dvWENKelptbGtYQ0lzSUhkcGJtUnZkeTVzYjJOaGRHbHZiaTVvY21WbUtUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2YVdZZ2MyWnBaQ0JwY3lCaElHNTFiV0psY2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUtFNTFiV0psY2lod1lYSnpaVVpzYjJGMEtITm1hV1FwS1NBOVBTQnpabWxrS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkWEpzWDJKaGMyVWdQU0J6Wld4bUxtRmtaRlZ5YkZCaGNtRnRLSFZ5YkY5aVlYTmxMQ0JjSW5ObWFXUTlYQ0lyYzJacFpDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk5cFppQmhibmtnYjJZZ2RHaGxJRE1nWTI5dVpHbDBhVzl1Y3lCaGNtVWdkSEoxWlN3Z2RHaGxiaUJwZEhNZ1oyOXZaQ0IwYnlCbmIxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZJQzBnTVNCOElHbG1JSFJvWlNCMWNtd2dZbUZ6WlNBOVBTQnlaWE4xYkhSelgzVnliRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUMwZ01pQjhJR2xtSUhWeWJDQmlZWE5sS3lCY0lpOWNJaUFnUFQwZ2NtVnpkV3gwYzE5MWNtd2dMU0JwYmlCallYTmxJRzltSUhWelpYSWdaWEp5YjNJZ2FXNGdkR2hsSUhKbGMzVnNkSE1nVlZKTVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdMU0F6SUh3Z2FXWWdkR2hsSUhKbGMzVnNkSE1nVlZKTUlHaGhjeUIxY213Z2NHRnlZVzF6TENCaGJtUWdkR2hsSUdOMWNuSmxiblFnZFhKc0lITjBZWEowY3lCM2FYUm9JSFJvWlNCeVpYTjFiSFJ6SUZWU1RDQmNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2ZEhKcGJTQmhibmtnZEhKaGFXeHBibWNnYzJ4aGMyZ2dabTl5SUdWaGMybGxjaUJqYjIxd1lYSnBjMjl1T2x4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhWeWJGOWlZWE5sSUQwZ2RYSnNYMkpoYzJVdWNtVndiR0ZqWlNndlhGd3ZKQzhzSUNjbktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWE4xYkhSelgzVnliQ0E5SUhKbGMzVnNkSE5mZFhKc0xuSmxjR3hoWTJVb0wxeGNMeVF2TENBbkp5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVZ6ZFd4MGMxOTFjbXhmWlc1amIyUmxaQ0E5SUdWdVkyOWtaVlZTU1NoeVpYTjFiSFJ6WDNWeWJDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ1kzVnljbVZ1ZEY5MWNteGZZMjl1ZEdGcGJuTmZjbVZ6ZFd4MGMxOTFjbXdnUFNBdE1UdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaWdvZFhKc1gySmhjMlU5UFhKbGMzVnNkSE5mZFhKc0tYeDhLSFZ5YkY5aVlYTmxMblJ2VEc5M1pYSkRZWE5sS0NrOVBYSmxjM1ZzZEhOZmRYSnNYMlZ1WTI5a1pXUXVkRzlNYjNkbGNrTmhjMlVvS1NrZ0lDbDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdOMWNuSmxiblJmZFhKc1gyTnZiblJoYVc1elgzSmxjM1ZzZEhOZmRYSnNJRDBnTVR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvSUhKbGMzVnNkSE5mZFhKc0xtbHVaR1Y0VDJZb0lDYy9KeUFwSUNFOVBTQXRNU0FtSmlCamRYSnlaVzUwWDNWeWJDNXNZWE4wU1c1a1pYaFBaaWh5WlhOMWJIUnpYM1Z5YkN3Z01Da2dQVDA5SURBZ0tTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpkWEp5Wlc1MFgzVnliRjlqYjI1MFlXbHVjMTl5WlhOMWJIUnpYM1Z5YkNBOUlERTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaWh6Wld4bUxtOXViSGxmY21WemRXeDBjMTloYW1GNFBUMHhLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHN2TDJsbUlHRWdkWE5sY2lCb1lYTWdZMmh2YzJWdUlIUnZJRzl1YkhrZ1lXeHNiM2NnWVdwaGVDQnZiaUJ5WlhOMWJIUnpJSEJoWjJWeklDaGtaV1poZFd4MElHSmxhR0YyYVc5MWNpbGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppZ2dZM1Z5Y21WdWRGOTFjbXhmWTI5dWRHRnBibk5mY21WemRXeDBjMTkxY213Z1BpQXRNU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2V5OHZkR2hwY3lCdFpXRnVjeUIwYUdVZ1kzVnljbVZ1ZENCVlVrd2dZMjl1ZEdGcGJuTWdkR2hsSUhKbGMzVnNkSE1nZFhKc0xDQjNhR2xqYUNCdFpXRnVjeUIzWlNCallXNGdaRzhnWVdwaGVGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptVjBZMmhmWVdwaGVGOXlaWE4xYkhSeklEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdabGRHTm9YMkZxWVhoZmNtVnpkV3gwY3lBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJWY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0dabGRHTm9YM1I1Y0dVOVBWd2ljR0ZuYVc1aGRHbHZibHdpS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaWdnWTNWeWNtVnVkRjkxY214ZlkyOXVkR0ZwYm5OZmNtVnpkV3gwYzE5MWNtd2dQaUF0TVNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhzdkwzUm9hWE1nYldWaGJuTWdkR2hsSUdOMWNuSmxiblFnVlZKTUlHTnZiblJoYVc1eklIUm9aU0J5WlhOMWJIUnpJSFZ5YkN3Z2QyaHBZMmdnYldWaGJuTWdkMlVnWTJGdUlHUnZJR0ZxWVhoY2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dlpHOXVKM1FnWVdwaGVDQndZV2RwYm1GMGFXOXVJSGRvWlc0Z2JtOTBJRzl1SUdFZ1V5WkdJSEJoWjJWY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQm1aWFJqYUY5aGFtRjRYM0psYzNWc2RITWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNibHh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdabGRHTm9YMkZxWVhoZmNtVnpkV3gwY3p0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJSFJvYVhNdWMyVjBkWEJCYW1GNFVHRm5hVzVoZEdsdmJpQTlJR1oxYm1OMGFXOXVLQ2xjYmlBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdMeTlwYm1acGJtbDBaU0J6WTNKdmJHeGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUtIUm9hWE11Y0dGbmFXNWhkR2x2Ymw5MGVYQmxQVDA5WENKcGJtWnBibWwwWlY5elkzSnZiR3hjSWlsY2JpQWdJQ0FnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2FXNW1hVzVwZEdWZmMyTnliMnhzWDJWdVpDQTlJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1LSE5sYkdZdUpHRnFZWGhmY21WemRXeDBjMTlqYjI1MFlXbHVaWEl1Wm1sdVpDaGNJbHRrWVhSaExYTmxZWEpqYUMxbWFXeDBaWEl0WVdOMGFXOXVQU2RwYm1acGJtbDBaUzF6WTNKdmJHd3RaVzVrSjExY0lpa3ViR1Z1WjNSb1BqQXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGJtWnBibWwwWlY5elkzSnZiR3hmWlc1a0lEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMlZzWmk1cGMxOXRZWGhmY0dGblpXUWdQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0hCaGNuTmxTVzUwS0hSb2FYTXVhVzV6ZEdGdVkyVmZiblZ0WW1WeUtUMDlQVEVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKQ2gzYVc1a2IzY3BMbTltWmloY0luTmpjbTlzYkZ3aUxDQnpaV3htTG05dVYybHVaRzkzVTJOeWIyeHNLVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvYzJWc1ppNWpZVzVHWlhSamFFRnFZWGhTWlhOMWJIUnpLRndpY0dGbmFXNWhkR2x2Ymx3aUtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKQ2gzYVc1a2IzY3BMbTl1S0Z3aWMyTnliMnhzWENJc0lITmxiR1l1YjI1WGFXNWtiM2RUWTNKdmJHd3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCcFppaDBlWEJsYjJZb2MyVnNaaTVoYW1GNFgyeHBibXR6WDNObGJHVmpkRzl5S1QwOVhDSjFibVJsWm1sdVpXUmNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1FvWkc5amRXMWxiblFwTG05bVppZ25ZMnhwWTJzbkxDQnpaV3htTG1GcVlYaGZiR2x1YTNOZmMyVnNaV04wYjNJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDUW9aRzlqZFcxbGJuUXBMbTltWmloelpXeG1MbUZxWVhoZmJHbHVhM05mYzJWc1pXTjBiM0lwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNRb2MyVnNaaTVoYW1GNFgyeHBibXR6WDNObGJHVmpkRzl5S1M1dlptWW9LVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNRb1pHOWpkVzFsYm5RcExtOXVLQ2RqYkdsamF5Y3NJSE5sYkdZdVlXcGhlRjlzYVc1cmMxOXpaV3hsWTNSdmNpd2dablZ1WTNScGIyNG9aU2w3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lvYzJWc1ppNWpZVzVHWlhSamFFRnFZWGhTWlhOMWJIUnpLRndpY0dGbmFXNWhkR2x2Ymx3aUtTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWlM1d2NtVjJaVzUwUkdWbVlYVnNkQ2dwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdiR2x1YXlBOUlHcFJkV1Z5ZVNoMGFHbHpLUzVoZEhSeUtDZG9jbVZtSnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCelpXeG1MbUZxWVhoZllXTjBhVzl1SUQwZ1hDSndZV2RwYm1GMGFXOXVYQ0k3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQndZV2RsVG5WdFltVnlJRDBnYzJWc1ppNW5aWFJRWVdkbFpFWnliMjFWVWt3b2JHbHVheWs3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhObGJHWXVKR0ZxWVhoZmNtVnpkV3gwYzE5amIyNTBZV2x1WlhJdVlYUjBjaWhjSW1SaGRHRXRjR0ZuWldSY0lpd2djR0ZuWlU1MWJXSmxjaWs3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhObGJHWXVabVYwWTJoQmFtRjRVbVZ6ZFd4MGN5Z3BPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlR0Y2JseHVJQ0FnSUNBZ0lDQjBhR2x6TG1kbGRGQmhaMlZrUm5KdmJWVlNUQ0E5SUdaMWJtTjBhVzl1S0ZWU1RDbDdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJ3WVdkbFpGWmhiQ0E5SURFN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2TDJacGNuTjBJSFJsYzNRZ2RHOGdjMlZsSUdsbUlIZGxJR2hoZG1VZ1hDSXZjR0ZuWlM4MEwxd2lJR2x1SUhSb1pTQlZVa3hjYmlBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUIwY0ZaaGJDQTlJSE5sYkdZdVoyVjBVWFZsY25sUVlYSmhiVVp5YjIxVlVrd29YQ0p6Wmw5d1lXZGxaRndpTENCVlVrd3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWW9LSFI1Y0dWdlppaDBjRlpoYkNrOVBWd2ljM1J5YVc1blhDSXBmSHdvZEhsd1pXOW1LSFJ3Vm1Gc0tUMDlYQ0p1ZFcxaVpYSmNJaWtwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjR0ZuWldSV1lXd2dQU0IwY0ZaaGJEdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSEJoWjJWa1ZtRnNPMXh1SUNBZ0lDQWdJQ0I5TzF4dVhHNGdJQ0FnSUNBZ0lIUm9hWE11WjJWMFVYVmxjbmxRWVhKaGJVWnliMjFWVWt3Z1BTQm1kVzVqZEdsdmJpaHVZVzFsTENCVlVrd3BlMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQjJZWElnY1hOMGNtbHVaeUE5SUZ3aVAxd2lLMVZTVEM1emNHeHBkQ2duUHljcFd6RmRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWW9kSGx3Wlc5bUtIRnpkSEpwYm1jcElUMWNJblZ1WkdWbWFXNWxaRndpS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCMllXd2dQU0JrWldOdlpHVlZVa2xEYjIxd2IyNWxiblFvS0c1bGR5QlNaV2RGZUhBb0oxcy9mQ1pkSnlBcklHNWhiV1VnS3lBblBTY2dLeUFuS0Z0ZUpqdGRLejhwS0NaOEkzdzdmQ1FwSnlrdVpYaGxZeWh4YzNSeWFXNW5LWHg4V3l4Y0lsd2lYU2xiTVYwdWNtVndiR0ZqWlNndlhGd3JMMmNzSUNjbE1qQW5LU2w4Zkc1MWJHdzdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlIWmhiRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJjSWx3aU8xeHVJQ0FnSUNBZ0lDQjlPMXh1WEc1Y2JseHVJQ0FnSUNBZ0lDQjBhR2x6TG1admNtMVZjR1JoZEdWa0lEMGdablZ1WTNScGIyNG9aU2w3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQzh2WlM1d2NtVjJaVzUwUkdWbVlYVnNkQ2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lvYzJWc1ppNWhkWFJ2WDNWd1pHRjBaVDA5TVNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1YzNWaWJXbDBSbTl5YlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCcFppZ29jMlZzWmk1aGRYUnZYM1Z3WkdGMFpUMDlNQ2ttSmloelpXeG1MbUYxZEc5ZlkyOTFiblJmY21WbWNtVnphRjl0YjJSbFBUMHhLU2xjYmlBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpaV3htTG1admNtMVZjR1JoZEdWa1JtVjBZMmhCYW1GNEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpUdGNiaUFnSUNBZ0lDQWdmVHRjYmx4dUlDQWdJQ0FnSUNCMGFHbHpMbVp2Y20xVmNHUmhkR1ZrUm1WMFkyaEJhbUY0SUQwZ1puVnVZM1JwYjI0b0tYdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0x5OXNiMjl3SUhSb2NtOTFaMmdnWVd4c0lIUm9aU0JtYVdWc1pITWdZVzVrSUdKMWFXeGtJSFJvWlNCVlVreGNiaUFnSUNBZ0lDQWdJQ0FnSUhObGJHWXVabVYwWTJoQmFtRjRSbTl5YlNncE8xeHVYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnZlR0Y2JseHVJQ0FnSUNBZ0lDQXZMMjFoYTJVZ1lXNTVJR052Y25KbFkzUnBiMjV6TDNWd1pHRjBaWE1nZEc4Z1ptbGxiR1J6SUdKbFptOXlaU0IwYUdVZ2MzVmliV2wwSUdOdmJYQnNaWFJsYzF4dUlDQWdJQ0FnSUNCMGFHbHpMbk5sZEVacFpXeGtjeUE5SUdaMWJtTjBhVzl1S0dVcGUxeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBdkwybG1LSE5sYkdZdWFYTmZZV3BoZUQwOU1Da2dlMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk5emIyMWxkR2x0WlhNZ2RHaGxJR1p2Y20wZ2FYTWdjM1ZpYldsMGRHVmtJSGRwZEdodmRYUWdkR2hsSUhOc2FXUmxjaUI1WlhRZ2FHRjJhVzVuSUhWd1pHRjBaV1FzSUdGdVpDQmhjeUIzWlNCblpYUWdiM1Z5SUhaaGJIVmxjeUJtY205dFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OTBhR1VnYzJ4cFpHVnlJR0Z1WkNCdWIzUWdhVzV3ZFhSekxDQjNaU0J1WldWa0lIUnZJR05vWldOcklHbDBJR2xtSUc1bFpXUnpJSFJ2SUdKbElITmxkRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2YjI1c2VTQnZZMk4xY25NZ2FXWWdZV3BoZUNCcGN5QnZabVlzSUdGdVpDQmhkWFJ2YzNWaWJXbDBJRzl1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNGtabWxsYkdSekxtVmhZMmdvWm5WdVkzUnBiMjRvS1NCN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlDUm1hV1ZzWkNBOUlDUW9kR2hwY3lrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlISmhibWRsWDJScGMzQnNZWGxmZG1Gc2RXVnpJRDBnSkdacFpXeGtMbVpwYm1Rb0p5NXpaaTF0WlhSaExYSmhibWRsTFhOc2FXUmxjaWNwTG1GMGRISW9YQ0prWVhSaExXUnBjM0JzWVhrdGRtRnNkV1Z6TFdGelhDSXBPeTh2WkdGMFlTMWthWE53YkdGNUxYWmhiSFZsY3kxaGN6MWNJblJsZUhSY0lseHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUtISmhibWRsWDJScGMzQnNZWGxmZG1Gc2RXVnpQVDA5WENKMFpYaDBhVzV3ZFhSY0lpa2dlMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlna1ptbGxiR1F1Wm1sdVpDaGNJaTV0WlhSaExYTnNhV1JsY2x3aUtTNXNaVzVuZEdnK01DbDdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1JtYVdWc1pDNW1hVzVrS0Z3aUxtMWxkR0V0YzJ4cFpHVnlYQ0lwTG1WaFkyZ29ablZ1WTNScGIyNGdLR2x1WkdWNEtTQjdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdjMnhwWkdWeVgyOWlhbVZqZENBOUlDUW9kR2hwY3lsYk1GMDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlDUnpiR2xrWlhKZlpXd2dQU0FrS0hSb2FYTXBMbU5zYjNObGMzUW9YQ0l1YzJZdGJXVjBZUzF5WVc1blpTMXpiR2xrWlhKY0lpazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk5MllYSWdiV2x1Vm1Gc0lEMGdKSE5zYVdSbGNsOWxiQzVoZEhSeUtGd2laR0YwWVMxdGFXNWNJaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OTJZWElnYldGNFZtRnNJRDBnSkhOc2FXUmxjbDlsYkM1aGRIUnlLRndpWkdGMFlTMXRZWGhjSWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUcxcGJsWmhiQ0E5SUNSemJHbGtaWEpmWld3dVptbHVaQ2hjSWk1elppMXlZVzVuWlMxdGFXNWNJaWt1ZG1Gc0tDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlHMWhlRlpoYkNBOUlDUnpiR2xrWlhKZlpXd3VabWx1WkNoY0lpNXpaaTF5WVc1blpTMXRZWGhjSWlrdWRtRnNLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyeHBaR1Z5WDI5aWFtVmpkQzV1YjFWcFUyeHBaR1Z5TG5ObGRDaGJiV2x1Vm1Gc0xDQnRZWGhXWVd4ZEtUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDOHZmVnh1WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQXZMM04xWW0xcGRGeHVJQ0FnSUNBZ0lDQjBhR2x6TG5OMVltMXBkRVp2Y20wZ1BTQm1kVzVqZEdsdmJpaGxLWHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdMeTlzYjI5d0lIUm9jbTkxWjJnZ1lXeHNJSFJvWlNCbWFXVnNaSE1nWVc1a0lHSjFhV3hrSUhSb1pTQlZVa3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1LSE5sYkdZdWFYTlRkV0p0YVhSMGFXNW5JRDA5SUhSeWRXVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJSE5sYkdZdWMyVjBSbWxsYkdSektDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCelpXeG1MbU5zWldGeVZHbHRaWElvS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnYzJWc1ppNXBjMU4xWW0xcGRIUnBibWNnUFNCMGNuVmxPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQndjbTlqWlhOelgyWnZjbTB1YzJWMFZHRjRRWEpqYUdsMlpWSmxjM1ZzZEhOVmNtd29jMlZzWml3Z2MyVnNaaTV5WlhOMWJIUnpYM1Z5YkNrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUhObGJHWXVKR0ZxWVhoZmNtVnpkV3gwYzE5amIyNTBZV2x1WlhJdVlYUjBjaWhjSW1SaGRHRXRjR0ZuWldSY0lpd2dNU2s3SUM4dmFXNXBkQ0J3WVdkbFpGeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppaHpaV3htTG1OaGJrWmxkR05vUVdwaGVGSmxjM1ZzZEhNb0tTbGNiaUFnSUNBZ0lDQWdJQ0FnSUhzdkwzUm9aVzRnZDJVZ2QybHNiQ0JoYW1GNElITjFZbTFwZENCMGFHVWdabTl5YlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2MyVnNaaTVoYW1GNFgyRmpkR2x2YmlBOUlGd2ljM1ZpYldsMFhDSTdJQzh2YzI4Z2QyVWdhMjV2ZHlCcGRDQjNZWE51SjNRZ2NHRm5hVzVoZEdsdmJseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1Wm1WMFkyaEJhbUY0VW1WemRXeDBjeWdwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0FnSUNBZ2V5OHZkR2hsYmlCM1pTQjNhV3hzSUhOcGJYQnNlU0J5WldScGNtVmpkQ0IwYnlCMGFHVWdVbVZ6ZFd4MGN5QlZVa3hjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQnlaWE4xYkhSelgzVnliQ0E5SUhCeWIyTmxjM05mWm05eWJTNW5aWFJTWlhOMWJIUnpWWEpzS0hObGJHWXNJSE5sYkdZdWNtVnpkV3gwYzE5MWNtd3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCeGRXVnllVjl3WVhKaGJYTWdQU0J6Wld4bUxtZGxkRlZ5YkZCaGNtRnRjeWgwY25WbExDQW5KeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WemRXeDBjMTkxY213Z1BTQnpaV3htTG1Ga1pGVnliRkJoY21GdEtISmxjM1ZzZEhOZmRYSnNMQ0J4ZFdWeWVWOXdZWEpoYlhNcE8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkMmx1Wkc5M0xteHZZMkYwYVc5dUxtaHlaV1lnUFNCeVpYTjFiSFJ6WDNWeWJEdGNiaUFnSUNBZ0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQjlPMXh1SUNBZ0lDQWdJQ0IwYUdsekxuSmxjMlYwUm05eWJTQTlJR1oxYm1OMGFXOXVLSE4xWW0xcGRGOW1iM0p0S1Z4dUlDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2TDNWdWMyVjBJR0ZzYkNCbWFXVnNaSE5jYmlBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1SkdacFpXeGtjeTVsWVdOb0tHWjFibU4wYVc5dUtDbDdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ0pHWnBaV3hrSUQwZ0pDaDBhR2x6S1R0Y2JseDBYSFJjZEZ4MFhHNWNkRngwWEhSY2RDUm1hV1ZzWkM1eVpXMXZkbVZCZEhSeUtGd2laR0YwWVMxelppMTBZWGh2Ym05dGVTMWhjbU5vYVhabFhDSXBPMXh1WEhSY2RGeDBYSFJjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2TDNOMFlXNWtZWEprSUdacFpXeGtJSFI1Y0dWelhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0pHWnBaV3hrTG1acGJtUW9YQ0p6Wld4bFkzUTZibTkwS0Z0dGRXeDBhWEJzWlQwbmJYVnNkR2x3YkdVblhTa2dQaUJ2Y0hScGIyNDZabWx5YzNRdFkyaHBiR1JjSWlrdWNISnZjQ2hjSW5ObGJHVmpkR1ZrWENJc0lIUnlkV1VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNSbWFXVnNaQzVtYVc1a0tGd2ljMlZzWldOMFcyMTFiSFJwY0d4bFBTZHRkV3gwYVhCc1pTZGRJRDRnYjNCMGFXOXVYQ0lwTG5CeWIzQW9YQ0p6Wld4bFkzUmxaRndpTENCbVlXeHpaU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkdacFpXeGtMbVpwYm1Rb1hDSnBibkIxZEZ0MGVYQmxQU2RqYUdWamEySnZlQ2RkWENJcExuQnliM0FvWENKamFHVmphMlZrWENJc0lHWmhiSE5sS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBa1ptbGxiR1F1Wm1sdVpDaGNJajRnZFd3Z1BpQnNhVHBtYVhKemRDMWphR2xzWkNCcGJuQjFkRnQwZVhCbFBTZHlZV1JwYnlkZFhDSXBMbkJ5YjNBb1hDSmphR1ZqYTJWa1hDSXNJSFJ5ZFdVcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDUm1hV1ZzWkM1bWFXNWtLRndpYVc1d2RYUmJkSGx3WlQwbmRHVjRkQ2RkWENJcExuWmhiQ2hjSWx3aUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWtabWxsYkdRdVptbHVaQ2hjSWk1elppMXZjSFJwYjI0dFlXTjBhWFpsWENJcExuSmxiVzkyWlVOc1lYTnpLRndpYzJZdGIzQjBhVzl1TFdGamRHbDJaVndpS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBa1ptbGxiR1F1Wm1sdVpDaGNJajRnZFd3Z1BpQnNhVHBtYVhKemRDMWphR2xzWkNCcGJuQjFkRnQwZVhCbFBTZHlZV1JwYnlkZFhDSXBMbkJoY21WdWRDZ3BMbUZrWkVOc1lYTnpLRndpYzJZdGIzQjBhVzl1TFdGamRHbDJaVndpS1RzZ0x5OXlaU0JoWkdRZ1lXTjBhWFpsSUdOc1lYTnpJSFJ2SUdacGNuTjBJRndpWkdWbVlYVnNkRndpSUc5d2RHbHZibHh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk5dWRXMWlaWElnY21GdVoyVWdMU0F5SUc1MWJXSmxjaUJwYm5CMWRDQm1hV1ZzWkhOY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBa1ptbGxiR1F1Wm1sdVpDaGNJbWx1Y0hWMFczUjVjR1U5SjI1MWJXSmxjaWRkWENJcExtVmhZMmdvWm5WdVkzUnBiMjRvYVc1a1pYZ3BlMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUFrZEdocGMwbHVjSFYwSUQwZ0pDaDBhR2x6S1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlna2RHaHBjMGx1Y0hWMExuQmhjbVZ1ZENncExuQmhjbVZ1ZENncExtaGhjME5zWVhOektGd2ljMll0YldWMFlTMXlZVzVuWlZ3aUtTa2dlMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlocGJtUmxlRDA5TUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1IwYUdselNXNXdkWFF1ZG1Gc0tDUjBhR2x6U1c1d2RYUXVZWFIwY2loY0ltMXBibHdpS1NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJITmxJR2xtS0dsdVpHVjRQVDB4S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKSFJvYVhOSmJuQjFkQzUyWVd3b0pIUm9hWE5KYm5CMWRDNWhkSFJ5S0Z3aWJXRjRYQ0lwS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMMjFsZEdFZ0x5QnVkVzFpWlhKeklIZHBkR2dnTWlCcGJuQjFkSE1nS0daeWIyMGdMeUIwYnlCbWFXVnNaSE1wSUMwZ2MyVmpiMjVrSUdsdWNIVjBJRzExYzNRZ1ltVWdjbVZ6WlhRZ2RHOGdiV0Y0SUhaaGJIVmxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUNSdFpYUmhYM05sYkdWamRGOW1jbTl0WDNSdklEMGdKR1pwWld4a0xtWnBibVFvWENJdWMyWXRiV1YwWVMxeVlXNW5aUzF6Wld4bFkzUXRabkp2YlhSdlhDSXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZb0pHMWxkR0ZmYzJWc1pXTjBYMlp5YjIxZmRHOHViR1Z1WjNSb1BqQXBJSHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnYzNSaGNuUmZiV2x1SUQwZ0pHMWxkR0ZmYzJWc1pXTjBYMlp5YjIxZmRHOHVZWFIwY2loY0ltUmhkR0V0YldsdVhDSXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdjM1JoY25SZmJXRjRJRDBnSkcxbGRHRmZjMlZzWldOMFgyWnliMjFmZEc4dVlYUjBjaWhjSW1SaGRHRXRiV0Y0WENJcE8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNSdFpYUmhYM05sYkdWamRGOW1jbTl0WDNSdkxtWnBibVFvWENKelpXeGxZM1JjSWlrdVpXRmphQ2htZFc1amRHbHZiaWhwYm1SbGVDbDdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lBa2RHaHBjMGx1Y0hWMElEMGdKQ2gwYUdsektUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lvYVc1a1pYZzlQVEFwSUh0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1IwYUdselNXNXdkWFF1ZG1Gc0tITjBZWEowWDIxcGJpazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUdsbUtHbHVaR1Y0UFQweEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkhSb2FYTkpibkIxZEM1MllXd29jM1JoY25SZmJXRjRLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCMllYSWdKRzFsZEdGZmNtRmthVzlmWm5KdmJWOTBieUE5SUNSbWFXVnNaQzVtYVc1a0tGd2lMbk5tTFcxbGRHRXRjbUZ1WjJVdGNtRmthVzh0Wm5KdmJYUnZYQ0lwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWW9KRzFsZEdGZmNtRmthVzlmWm5KdmJWOTBieTVzWlc1bmRHZytNQ2xjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJ6ZEdGeWRGOXRhVzRnUFNBa2JXVjBZVjl5WVdScGIxOW1jbTl0WDNSdkxtRjBkSElvWENKa1lYUmhMVzFwYmx3aUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlITjBZWEowWDIxaGVDQTlJQ1J0WlhSaFgzSmhaR2x2WDJaeWIyMWZkRzh1WVhSMGNpaGNJbVJoZEdFdGJXRjRYQ0lwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lBa2NtRmthVzlmWjNKdmRYQnpJRDBnSkcxbGRHRmZjbUZrYVc5ZlpuSnZiVjkwYnk1bWFXNWtLQ2N1YzJZdGFXNXdkWFF0Y21GdVoyVXRjbUZrYVc4bktUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBa2NtRmthVzlmWjNKdmRYQnpMbVZoWTJnb1puVnVZM1JwYjI0b2FXNWtaWGdwZTF4dVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUFrY21Ga2FXOXpJRDBnSkNoMGFHbHpLUzVtYVc1a0tGd2lMbk5tTFdsdWNIVjBMWEpoWkdsdlhDSXBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKSEpoWkdsdmN5NXdjbTl3S0Z3aVkyaGxZMnRsWkZ3aUxDQm1ZV3h6WlNrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1LR2x1WkdWNFBUMHdLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNSeVlXUnBiM011Wm1sc2RHVnlLQ2RiZG1Gc2RXVTlYQ0luSzNOMFlYSjBYMjFwYmlzblhDSmRKeWt1Y0hKdmNDaGNJbU5vWldOclpXUmNJaXdnZEhKMVpTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmxiSE5sSUdsbUtHbHVaR1Y0UFQweEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1J5WVdScGIzTXVabWxzZEdWeUtDZGJkbUZzZFdVOVhDSW5LM04wWVhKMFgyMWhlQ3NuWENKZEp5a3VjSEp2Y0NoY0ltTm9aV05yWldSY0lpd2dkSEoxWlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2TDI1MWJXSmxjaUJ6Ykdsa1pYSWdMU0J1YjFWcFUyeHBaR1Z5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkdacFpXeGtMbVpwYm1Rb1hDSXViV1YwWVMxemJHbGtaWEpjSWlrdVpXRmphQ2htZFc1amRHbHZiaWhwYm1SbGVDbDdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSE5zYVdSbGNsOXZZbXBsWTNRZ1BTQWtLSFJvYVhNcFd6QmRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdktuWmhjaUJ6Ykdsa1pYSmZiMkpxWldOMElEMGdKR052Ym5SaGFXNWxjaTVtYVc1a0tGd2lMbTFsZEdFdGMyeHBaR1Z5WENJcFd6QmRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSE5zYVdSbGNsOTJZV3dnUFNCemJHbGtaWEpmYjJKcVpXTjBMbTV2VldsVGJHbGtaWEl1WjJWMEtDazdLaTljYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnSkhOc2FXUmxjbDlsYkNBOUlDUW9kR2hwY3lrdVkyeHZjMlZ6ZENoY0lpNXpaaTF0WlhSaExYSmhibWRsTFhOc2FXUmxjbHdpS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUcxcGJsWmhiQ0E5SUNSemJHbGtaWEpmWld3dVlYUjBjaWhjSW1SaGRHRXRiV2x1WENJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2JXRjRWbUZzSUQwZ0pITnNhV1JsY2w5bGJDNWhkSFJ5S0Z3aVpHRjBZUzF0WVhoY0lpazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhOc2FXUmxjbDl2WW1wbFkzUXVibTlWYVZOc2FXUmxjaTV6WlhRb1cyMXBibFpoYkN3Z2JXRjRWbUZzWFNrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLVHRjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dmJtVmxaQ0IwYnlCelpXVWdhV1lnWVc1NUlHRnlaU0JqYjIxaWIySnZlQ0JoYm1RZ1lXTjBJR0ZqWTI5eVpHbHVaMng1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlDUmpiMjFpYjJKdmVDQTlJQ1JtYVdWc1pDNW1hVzVrS0Z3aWMyVnNaV04wVzJSaGRHRXRZMjl0WW05aWIzZzlKekVuWFZ3aUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaWdrWTI5dFltOWliM2d1YkdWdVozUm9QakFwWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JQ1JqYjIxaWIySnZlQzVqYUc5elpXNGdJVDBnWENKMWJtUmxabWx1WldSY0lpbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkdOdmJXSnZZbTk0TG5SeWFXZG5aWElvWENKamFHOXpaVzQ2ZFhCa1lYUmxaRndpS1RzZ0x5OW1iM0lnWTJodmMyVnVJRzl1YkhsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNSamIyMWliMkp2ZUM1MllXd29KeWNwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSkdOdmJXSnZZbTk0TG5SeWFXZG5aWElvSjJOb1lXNW5aUzV6Wld4bFkzUXlKeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzVjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpaV3htTG1Oc1pXRnlWR2x0WlhJb0tUdGNibHh1WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtS0hOMVltMXBkRjltYjNKdFBUMWNJbUZzZDJGNWMxd2lLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1YzNWaWJXbDBSbTl5YlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCcFppaHpkV0p0YVhSZlptOXliVDA5WENKdVpYWmxjbHdpS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtS0hSb2FYTXVZWFYwYjE5amIzVnVkRjl5WldaeVpYTm9YMjF2WkdVOVBURXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCelpXeG1MbVp2Y20xVmNHUmhkR1ZrUm1WMFkyaEJhbUY0S0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdaV3h6WlNCcFppaHpkV0p0YVhSZlptOXliVDA5WENKaGRYUnZYQ0lwWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lvZEdocGN5NWhkWFJ2WDNWd1pHRjBaVDA5ZEhKMVpTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhObGJHWXVjM1ZpYldsMFJtOXliU2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppaDBhR2x6TG1GMWRHOWZZMjkxYm5SZmNtVm1jbVZ6YUY5dGIyUmxQVDB4S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpaV3htTG1admNtMVZjR1JoZEdWa1JtVjBZMmhCYW1GNEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUNBZ2ZUdGNibHh1SUNBZ0lDQWdJQ0IwYUdsekxtbHVhWFFvS1R0Y2JseHVJQ0FnSUNBZ0lDQjJZWElnWlhabGJuUmZaR0YwWVNBOUlIdDlPMXh1SUNBZ0lDQWdJQ0JsZG1WdWRGOWtZWFJoTG5ObWFXUWdQU0J6Wld4bUxuTm1hV1E3WEc0Z0lDQWdJQ0FnSUdWMlpXNTBYMlJoZEdFdWRHRnlaMlYwVTJWc1pXTjBiM0lnUFNCelpXeG1MbUZxWVhoZmRHRnlaMlYwWDJGMGRISTdYRzRnSUNBZ0lDQWdJR1YyWlc1MFgyUmhkR0V1YjJKcVpXTjBJRDBnZEdocGN6dGNiaUFnSUNBZ0lDQWdhV1lvYjNCMGN5NXBjMGx1YVhRcFhHNGdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhObGJHWXVkSEpwWjJkbGNrVjJaVzUwS0Z3aWMyWTZhVzVwZEZ3aUxDQmxkbVZ1ZEY5a1lYUmhLVHRjYmlBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnZlNrN1hHNTlPMXh1SWwxOSIsIihmdW5jdGlvbiAoZ2xvYmFsKXtcblxudmFyICQgPSAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvd1snalF1ZXJ5J10gOiB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsWydqUXVlcnknXSA6IG51bGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblxuXHR0YXhvbm9teV9hcmNoaXZlczogMCxcbiAgICB1cmxfcGFyYW1zOiB7fSxcbiAgICB0YXhfYXJjaGl2ZV9yZXN1bHRzX3VybDogXCJcIixcbiAgICBhY3RpdmVfdGF4OiBcIlwiLFxuICAgIGZpZWxkczoge30sXG5cdGluaXQ6IGZ1bmN0aW9uKHRheG9ub215X2FyY2hpdmVzLCBjdXJyZW50X3RheG9ub215X2FyY2hpdmUpe1xuXG4gICAgICAgIHRoaXMudGF4b25vbXlfYXJjaGl2ZXMgPSAwO1xuICAgICAgICB0aGlzLnVybF9wYXJhbXMgPSB7fTtcbiAgICAgICAgdGhpcy50YXhfYXJjaGl2ZV9yZXN1bHRzX3VybCA9IFwiXCI7XG4gICAgICAgIHRoaXMuYWN0aXZlX3RheCA9IFwiXCI7XG5cblx0XHQvL3RoaXMuJGZpZWxkcyA9ICRmaWVsZHM7XG4gICAgICAgIHRoaXMudGF4b25vbXlfYXJjaGl2ZXMgPSB0YXhvbm9teV9hcmNoaXZlcztcbiAgICAgICAgdGhpcy5jdXJyZW50X3RheG9ub215X2FyY2hpdmUgPSBjdXJyZW50X3RheG9ub215X2FyY2hpdmU7XG5cblx0XHR0aGlzLmNsZWFyVXJsQ29tcG9uZW50cygpO1xuXG5cdH0sXG4gICAgc2V0VGF4QXJjaGl2ZVJlc3VsdHNVcmw6IGZ1bmN0aW9uKCRmb3JtLCBjdXJyZW50X3Jlc3VsdHNfdXJsLCBnZXRfYWN0aXZlKSB7XG5cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXHRcdHRoaXMuY2xlYXJUYXhBcmNoaXZlUmVzdWx0c1VybCgpO1xuICAgICAgICAvL3ZhciBjdXJyZW50X3Jlc3VsdHNfdXJsID0gXCJcIjtcbiAgICAgICAgaWYodGhpcy50YXhvbm9teV9hcmNoaXZlcyE9MSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mKGdldF9hY3RpdmUpPT1cInVuZGVmaW5lZFwiKVxuXHRcdHtcblx0XHRcdHZhciBnZXRfYWN0aXZlID0gZmFsc2U7XG5cdFx0fVxuXG4gICAgICAgIC8vY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYW55IHRheG9ub21pZXMgc2VsZWN0ZWRcbiAgICAgICAgLy9pZiBzbywgY2hlY2sgdGhlaXIgcmV3cml0ZXMgYW5kIHVzZSB0aG9zZSBhcyB0aGUgcmVzdWx0cyB1cmxcbiAgICAgICAgdmFyICRmaWVsZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZmllbGRfbmFtZSA9IFwiXCI7XG4gICAgICAgIHZhciBmaWVsZF92YWx1ZSA9IFwiXCI7XG5cbiAgICAgICAgdmFyICRhY3RpdmVfdGF4b25vbXkgPSAkZm9ybS4kZmllbGRzLnBhcmVudCgpLmZpbmQoXCJbZGF0YS1zZi10YXhvbm9teS1hcmNoaXZlPScxJ11cIik7XG4gICAgICAgIGlmKCRhY3RpdmVfdGF4b25vbXkubGVuZ3RoPT0xKVxuICAgICAgICB7XG4gICAgICAgICAgICAkZmllbGQgPSAkYWN0aXZlX3RheG9ub215O1xuXG4gICAgICAgICAgICB2YXIgZmllbGRUeXBlID0gJGZpZWxkLmF0dHIoXCJkYXRhLXNmLWZpZWxkLXR5cGVcIik7XG5cbiAgICAgICAgICAgIGlmICgoZmllbGRUeXBlID09IFwidGFnXCIpIHx8IChmaWVsZFR5cGUgPT0gXCJjYXRlZ29yeVwiKSB8fCAoZmllbGRUeXBlID09IFwidGF4b25vbXlcIikpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGF4b25vbXlfdmFsdWUgPSBzZWxmLnByb2Nlc3NUYXhvbm9teSgkZmllbGQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGZpZWxkX25hbWUgPSAkZmllbGQuYXR0cihcImRhdGEtc2YtZmllbGQtbmFtZVwiKTtcbiAgICAgICAgICAgICAgICB2YXIgdGF4b25vbXlfbmFtZSA9IGZpZWxkX25hbWUucmVwbGFjZShcIl9zZnRfXCIsIFwiXCIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRheG9ub215X3ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkX3ZhbHVlID0gdGF4b25vbXlfdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihmaWVsZF92YWx1ZT09XCJcIilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAkZmllbGQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKChzZWxmLmN1cnJlbnRfdGF4b25vbXlfYXJjaGl2ZSE9XCJcIikmJihzZWxmLmN1cnJlbnRfdGF4b25vbXlfYXJjaGl2ZSE9dGF4b25vbXlfbmFtZSkpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgdGhpcy50YXhfYXJjaGl2ZV9yZXN1bHRzX3VybCA9IGN1cnJlbnRfcmVzdWx0c191cmw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZigoKGZpZWxkX3ZhbHVlPT1cIlwiKXx8KCEkZmllbGQpICkpXG4gICAgICAgIHtcbiAgICAgICAgICAgICRmb3JtLiRmaWVsZHMuZWFjaChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoISRmaWVsZCkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZFR5cGUgPSAkKHRoaXMpLmF0dHIoXCJkYXRhLXNmLWZpZWxkLXR5cGVcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKChmaWVsZFR5cGUgPT0gXCJ0YWdcIikgfHwgKGZpZWxkVHlwZSA9PSBcImNhdGVnb3J5XCIpIHx8IChmaWVsZFR5cGUgPT0gXCJ0YXhvbm9teVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRheG9ub215X3ZhbHVlID0gc2VsZi5wcm9jZXNzVGF4b25vbXkoJCh0aGlzKSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1zZi1maWVsZC1uYW1lXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGF4b25vbXlfdmFsdWUpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX3ZhbHVlID0gdGF4b25vbXlfdmFsdWUudmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRfdmFsdWUgIT0gXCJcIikge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWVsZCA9ICQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCAoJGZpZWxkKSAmJiAoZmllbGRfdmFsdWUgIT0gXCJcIiApKSB7XG4gICAgICAgICAgICAvL2lmIHdlIGZvdW5kIGEgZmllbGRcblx0XHRcdHZhciByZXdyaXRlX2F0dHIgPSAoJGZpZWxkLmF0dHIoXCJkYXRhLXNmLXRlcm0tcmV3cml0ZVwiKSk7XG5cbiAgICAgICAgICAgIGlmKHJld3JpdGVfYXR0ciE9XCJcIikge1xuXG4gICAgICAgICAgICAgICAgdmFyIHJld3JpdGUgPSBKU09OLnBhcnNlKHJld3JpdGVfYXR0cik7XG4gICAgICAgICAgICAgICAgdmFyIGlucHV0X3R5cGUgPSAkZmllbGQuYXR0cihcImRhdGEtc2YtZmllbGQtaW5wdXQtdHlwZVwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLmFjdGl2ZV90YXggPSBmaWVsZF9uYW1lO1xuXG4gICAgICAgICAgICAgICAgLy9maW5kIHRoZSBhY3RpdmUgZWxlbWVudFxuICAgICAgICAgICAgICAgIGlmICgoaW5wdXRfdHlwZSA9PSBcInJhZGlvXCIpIHx8IChpbnB1dF90eXBlID09IFwiY2hlY2tib3hcIikpIHtcblxuICAgICAgICAgICAgICAgICAgICAvL3ZhciAkYWN0aXZlID0gJGZpZWxkLmZpbmQoXCIuc2Ytb3B0aW9uLWFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgLy9leHBsb2RlIHRoZSB2YWx1ZXMgaWYgdGhlcmUgaXMgYSBkZWxpbVxuICAgICAgICAgICAgICAgICAgICAvL2ZpZWxkX3ZhbHVlXG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzX3NpbmdsZV92YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZF92YWx1ZXMgPSBmaWVsZF92YWx1ZS5zcGxpdChcIixcIikuam9pbihcIitcIikuc3BsaXQoXCIrXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRfdmFsdWVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzX3NpbmdsZV92YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3NpbmdsZV92YWx1ZSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGlucHV0ID0gJGZpZWxkLmZpbmQoXCJpbnB1dFt2YWx1ZT0nXCIgKyBmaWVsZF92YWx1ZSArIFwiJ11cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGFjdGl2ZSA9ICRpbnB1dC5wYXJlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXB0aCA9ICRhY3RpdmUuYXR0cihcImRhdGEtc2YtZGVwdGhcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vbm93IGxvb3AgdGhyb3VnaCBwYXJlbnRzIHRvIGdyYWIgdGhlaXIgbmFtZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGZpZWxkX3ZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IGRlcHRoOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFjdGl2ZSA9ICRhY3RpdmUucGFyZW50KCkucGFyZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goJGFjdGl2ZS5maW5kKFwiaW5wdXRcIikudmFsKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucmV2ZXJzZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2dyYWIgdGhlIHJld3JpdGUgZm9yIHRoaXMgZGVwdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY3RpdmVfcmV3cml0ZSA9IHJld3JpdGVbZGVwdGhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IGFjdGl2ZV9yZXdyaXRlO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlbiBtYXAgZnJvbSB0aGUgcGFyZW50cyB0byB0aGUgZGVwdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICQodmFsdWVzKS5lYWNoKGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKFwiW1wiICsgaW5kZXggKyBcIl1cIiwgdmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGF4X2FyY2hpdmVfcmVzdWx0c191cmwgPSB1cmw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgdGhlcmUgYXJlIG11bHRpcGxlIHZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlbiB3ZSBuZWVkIHRvIGNoZWNrIGZvciAzIHRoaW5nczpcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiB0aGUgdmFsdWVzIHNlbGVjdGVkIGFyZSBhbGwgaW4gdGhlIHNhbWUgdHJlZSB0aGVuIHdlIGNhbiBkbyBzb21lIGNsZXZlciByZXdyaXRlIHN0dWZmXG4gICAgICAgICAgICAgICAgICAgICAgICAvL21lcmdlIGFsbCB2YWx1ZXMgaW4gc2FtZSBsZXZlbCwgdGhlbiBjb21iaW5lIHRoZSBsZXZlbHNcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiB0aGV5IGFyZSBmcm9tIGRpZmZlcmVudCB0cmVlcyB0aGVuIGp1c3QgY29tYmluZSB0aGVtIG9yIGp1c3QgdXNlIGBmaWVsZF92YWx1ZWBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVwdGhzID0gbmV3IEFycmF5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgJChmaWVsZF92YWx1ZXMpLmVhY2goZnVuY3Rpb24gKGluZGV4LCB2YWwpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkaW5wdXQgPSAkZmllbGQuZmluZChcImlucHV0W3ZhbHVlPSdcIiArIGZpZWxkX3ZhbHVlICsgXCInXVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGFjdGl2ZSA9ICRpbnB1dC5wYXJlbnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXB0aCA9ICRhY3RpdmUuYXR0cihcImRhdGEtc2YtZGVwdGhcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgLy9kZXB0aHMucHVzaChkZXB0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICB9KTsqL1xuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoKGlucHV0X3R5cGUgPT0gXCJzZWxlY3RcIikgfHwgKGlucHV0X3R5cGUgPT0gXCJtdWx0aXNlbGVjdFwiKSkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBpc19zaW5nbGVfdmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmllbGRfdmFsdWVzID0gZmllbGRfdmFsdWUuc3BsaXQoXCIsXCIpLmpvaW4oXCIrXCIpLnNwbGl0KFwiK1wiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkX3ZhbHVlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc19zaW5nbGVfdmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc19zaW5nbGVfdmFsdWUpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRhY3RpdmUgPSAkZmllbGQuZmluZChcIm9wdGlvblt2YWx1ZT0nXCIgKyBmaWVsZF92YWx1ZSArIFwiJ11cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVwdGggPSAkYWN0aXZlLmF0dHIoXCJkYXRhLXNmLWRlcHRoXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChmaWVsZF92YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBkZXB0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhY3RpdmUgPSAkYWN0aXZlLnByZXZBbGwoXCJvcHRpb25bZGF0YS1zZi1kZXB0aD0nXCIgKyAoaSAtIDEpICsgXCInXVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCgkYWN0aXZlLnZhbCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY3RpdmVfcmV3cml0ZSA9IHJld3JpdGVbZGVwdGhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IGFjdGl2ZV9yZXdyaXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh2YWx1ZXMpLmVhY2goZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoXCJbXCIgKyBpbmRleCArIFwiXVwiLCB2YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YXhfYXJjaGl2ZV9yZXN1bHRzX3VybCA9IHVybDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgLy90aGlzLnRheF9hcmNoaXZlX3Jlc3VsdHNfdXJsID0gY3VycmVudF9yZXN1bHRzX3VybDtcbiAgICB9LFxuICAgIGdldFJlc3VsdHNVcmw6IGZ1bmN0aW9uKCRmb3JtLCBjdXJyZW50X3Jlc3VsdHNfdXJsKSB7XG5cbiAgICAgICAgLy90aGlzLnNldFRheEFyY2hpdmVSZXN1bHRzVXJsKCRmb3JtLCBjdXJyZW50X3Jlc3VsdHNfdXJsKTtcblxuICAgICAgICBpZih0aGlzLnRheF9hcmNoaXZlX3Jlc3VsdHNfdXJsPT1cIlwiKVxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudF9yZXN1bHRzX3VybDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnRheF9hcmNoaXZlX3Jlc3VsdHNfdXJsO1xuICAgIH0sXG5cdGdldFVybFBhcmFtczogZnVuY3Rpb24oJGZvcm0pe1xuXG5cdFx0dGhpcy5idWlsZFVybENvbXBvbmVudHMoJGZvcm0sIHRydWUpO1xuXG4gICAgICAgIGlmKHRoaXMudGF4X2FyY2hpdmVfcmVzdWx0c191cmwhPVwiXCIpXG4gICAgICAgIHtcblxuICAgICAgICAgICAgaWYodGhpcy5hY3RpdmVfdGF4IT1cIlwiKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBmaWVsZF9uYW1lID0gdGhpcy5hY3RpdmVfdGF4O1xuXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mKHRoaXMudXJsX3BhcmFtc1tmaWVsZF9uYW1lXSkhPVwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy51cmxfcGFyYW1zW2ZpZWxkX25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cdFx0cmV0dXJuIHRoaXMudXJsX3BhcmFtcztcblx0fSxcblx0Y2xlYXJVcmxDb21wb25lbnRzOiBmdW5jdGlvbigpe1xuXHRcdC8vdGhpcy51cmxfY29tcG9uZW50cyA9IFwiXCI7XG5cdFx0dGhpcy51cmxfcGFyYW1zID0ge307XG5cdH0sXG5cdGNsZWFyVGF4QXJjaGl2ZVJlc3VsdHNVcmw6IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMudGF4X2FyY2hpdmVfcmVzdWx0c191cmwgPSAnJztcblx0fSxcblx0ZGlzYWJsZUlucHV0czogZnVuY3Rpb24oJGZvcm0pe1xuXHRcdHZhciBzZWxmID0gdGhpcztcblx0XHRcblx0XHQkZm9ybS4kZmllbGRzLmVhY2goZnVuY3Rpb24oKXtcblx0XHRcdFxuXHRcdFx0dmFyICRpbnB1dHMgPSAkKHRoaXMpLmZpbmQoXCJpbnB1dCwgc2VsZWN0LCAubWV0YS1zbGlkZXJcIik7XG5cdFx0XHQkaW5wdXRzLmF0dHIoXCJkaXNhYmxlZFwiLCBcImRpc2FibGVkXCIpO1xuXHRcdFx0JGlucHV0cy5hdHRyKFwiZGlzYWJsZWRcIiwgdHJ1ZSk7XG5cdFx0XHQkaW5wdXRzLnByb3AoXCJkaXNhYmxlZFwiLCB0cnVlKTtcblx0XHRcdCRpbnB1dHMudHJpZ2dlcihcImNob3Nlbjp1cGRhdGVkXCIpO1xuXHRcdFx0XG5cdFx0fSk7XG5cdFx0XG5cdFx0XG5cdH0sXG5cdGVuYWJsZUlucHV0czogZnVuY3Rpb24oJGZvcm0pe1xuXHRcdHZhciBzZWxmID0gdGhpcztcblx0XHQkZm9ybS4kZmllbGRzLmVhY2goZnVuY3Rpb24oKXtcblx0XHRcdHZhciAkaW5wdXRzID0gJCh0aGlzKS5maW5kKFwiaW5wdXQsIHNlbGVjdCwgLm1ldGEtc2xpZGVyXCIpO1xuXHRcdFx0JGlucHV0cy5wcm9wKFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xuXHRcdFx0JGlucHV0cy5hdHRyKFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xuXHRcdFx0JGlucHV0cy50cmlnZ2VyKFwiY2hvc2VuOnVwZGF0ZWRcIik7XHRcdFx0XG5cdFx0fSk7XG5cdFx0XG5cdFx0XG5cdH0sXG5cdGJ1aWxkVXJsQ29tcG9uZW50czogZnVuY3Rpb24oJGZvcm0sIGNsZWFyX2NvbXBvbmVudHMpe1xuXHRcdFxuXHRcdHZhciBzZWxmID0gdGhpcztcblx0XHRcblx0XHRpZih0eXBlb2YoY2xlYXJfY29tcG9uZW50cykhPVwidW5kZWZpbmVkXCIpXG5cdFx0e1xuXHRcdFx0aWYoY2xlYXJfY29tcG9uZW50cz09dHJ1ZSlcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5jbGVhclVybENvbXBvbmVudHMoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0JGZvcm0uJGZpZWxkcy5lYWNoKGZ1bmN0aW9uKCl7XG5cdFx0XHRcblx0XHRcdHZhciBmaWVsZE5hbWUgPSAkKHRoaXMpLmF0dHIoXCJkYXRhLXNmLWZpZWxkLW5hbWVcIik7XG5cdFx0XHR2YXIgZmllbGRUeXBlID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1zZi1maWVsZC10eXBlXCIpO1xuXHRcdFx0XG5cdFx0XHRpZihmaWVsZFR5cGU9PVwic2VhcmNoXCIpXG5cdFx0XHR7XG5cdFx0XHRcdHNlbGYucHJvY2Vzc1NlYXJjaEZpZWxkKCQodGhpcykpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZigoZmllbGRUeXBlPT1cInRhZ1wiKXx8KGZpZWxkVHlwZT09XCJjYXRlZ29yeVwiKXx8KGZpZWxkVHlwZT09XCJ0YXhvbm9teVwiKSlcblx0XHRcdHtcblx0XHRcdFx0c2VsZi5wcm9jZXNzVGF4b25vbXkoJCh0aGlzKSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKGZpZWxkVHlwZT09XCJzb3J0X29yZGVyXCIpXG5cdFx0XHR7XG5cdFx0XHRcdHNlbGYucHJvY2Vzc1NvcnRPcmRlckZpZWxkKCQodGhpcykpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZihmaWVsZFR5cGU9PVwicG9zdHNfcGVyX3BhZ2VcIilcblx0XHRcdHtcblx0XHRcdFx0c2VsZi5wcm9jZXNzUmVzdWx0c1BlclBhZ2VGaWVsZCgkKHRoaXMpKTtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYoZmllbGRUeXBlPT1cImF1dGhvclwiKVxuXHRcdFx0e1xuXHRcdFx0XHRzZWxmLnByb2Nlc3NBdXRob3IoJCh0aGlzKSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKGZpZWxkVHlwZT09XCJwb3N0X3R5cGVcIilcblx0XHRcdHtcblx0XHRcdFx0c2VsZi5wcm9jZXNzUG9zdFR5cGUoJCh0aGlzKSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKGZpZWxkVHlwZT09XCJwb3N0X2RhdGVcIilcblx0XHRcdHtcblx0XHRcdFx0c2VsZi5wcm9jZXNzUG9zdERhdGUoJCh0aGlzKSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKGZpZWxkVHlwZT09XCJwb3N0X21ldGFcIilcblx0XHRcdHtcblx0XHRcdFx0c2VsZi5wcm9jZXNzUG9zdE1ldGEoJCh0aGlzKSk7XG5cdFx0XHRcdFxuXHRcdFx0fVxuXHRcdFx0ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHRcblx0XHRcdH1cblx0XHRcdFxuXHRcdH0pO1xuXHRcdFxuXHR9LFxuXHRwcm9jZXNzU2VhcmNoRmllbGQ6IGZ1bmN0aW9uKCRjb250YWluZXIpXG5cdHtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0XG5cdFx0dmFyICRmaWVsZCA9ICRjb250YWluZXIuZmluZChcImlucHV0W25hbWVePSdfc2Zfc2VhcmNoJ11cIik7XG5cdFx0XG5cdFx0aWYoJGZpZWxkLmxlbmd0aD4wKVxuXHRcdHtcblx0XHRcdHZhciBmaWVsZE5hbWUgPSAkZmllbGQuYXR0cihcIm5hbWVcIikucmVwbGFjZSgnW10nLCAnJyk7XG5cdFx0XHR2YXIgZmllbGRWYWwgPSAkZmllbGQudmFsKCk7XG5cdFx0XHRcblx0XHRcdGlmKGZpZWxkVmFsIT1cIlwiKVxuXHRcdFx0e1xuXHRcdFx0XHQvL3NlbGYudXJsX2NvbXBvbmVudHMgKz0gXCImX3NmX3M9XCIrZW5jb2RlVVJJQ29tcG9uZW50KGZpZWxkVmFsKTtcblx0XHRcdFx0c2VsZi51cmxfcGFyYW1zWydfc2ZfcyddID0gZW5jb2RlVVJJQ29tcG9uZW50KGZpZWxkVmFsKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdHByb2Nlc3NTb3J0T3JkZXJGaWVsZDogZnVuY3Rpb24oJGNvbnRhaW5lcilcblx0e1xuXHRcdHRoaXMucHJvY2Vzc0F1dGhvcigkY29udGFpbmVyKTtcblx0XHRcblx0fSxcblx0cHJvY2Vzc1Jlc3VsdHNQZXJQYWdlRmllbGQ6IGZ1bmN0aW9uKCRjb250YWluZXIpXG5cdHtcblx0XHR0aGlzLnByb2Nlc3NBdXRob3IoJGNvbnRhaW5lcik7XG5cdFx0XG5cdH0sXG5cdGdldEFjdGl2ZVRheDogZnVuY3Rpb24oJGZpZWxkKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWN0aXZlX3RheDtcblx0fSxcblx0Z2V0U2VsZWN0VmFsOiBmdW5jdGlvbigkZmllbGQpe1xuXG5cdFx0dmFyIGZpZWxkVmFsID0gXCJcIjtcblx0XHRcblx0XHRpZigkZmllbGQudmFsKCkhPTApXG5cdFx0e1xuXHRcdFx0ZmllbGRWYWwgPSAkZmllbGQudmFsKCk7XG5cdFx0fVxuXHRcdFxuXHRcdGlmKGZpZWxkVmFsPT1udWxsKVxuXHRcdHtcblx0XHRcdGZpZWxkVmFsID0gXCJcIjtcblx0XHR9XG5cdFx0XG5cdFx0cmV0dXJuIGZpZWxkVmFsO1xuXHR9LFxuXHRnZXRNZXRhU2VsZWN0VmFsOiBmdW5jdGlvbigkZmllbGQpe1xuXHRcdFxuXHRcdHZhciBmaWVsZFZhbCA9IFwiXCI7XG5cdFx0XG5cdFx0ZmllbGRWYWwgPSAkZmllbGQudmFsKCk7XG5cdFx0XHRcdFx0XHRcblx0XHRpZihmaWVsZFZhbD09bnVsbClcblx0XHR7XG5cdFx0XHRmaWVsZFZhbCA9IFwiXCI7XG5cdFx0fVxuXHRcdFxuXHRcdHJldHVybiBmaWVsZFZhbDtcblx0fSxcblx0Z2V0TXVsdGlTZWxlY3RWYWw6IGZ1bmN0aW9uKCRmaWVsZCwgb3BlcmF0b3Ipe1xuXHRcdFxuXHRcdHZhciBkZWxpbSA9IFwiK1wiO1xuXHRcdGlmKG9wZXJhdG9yPT1cIm9yXCIpXG5cdFx0e1xuXHRcdFx0ZGVsaW0gPSBcIixcIjtcblx0XHR9XG5cdFx0XG5cdFx0aWYodHlwZW9mKCRmaWVsZC52YWwoKSk9PVwib2JqZWN0XCIpXG5cdFx0e1xuXHRcdFx0aWYoJGZpZWxkLnZhbCgpIT1udWxsKVxuXHRcdFx0e1xuXHRcdFx0XHRyZXR1cm4gJGZpZWxkLnZhbCgpLmpvaW4oZGVsaW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRcblx0fSxcblx0Z2V0TWV0YU11bHRpU2VsZWN0VmFsOiBmdW5jdGlvbigkZmllbGQsIG9wZXJhdG9yKXtcblx0XHRcblx0XHR2YXIgZGVsaW0gPSBcIi0rLVwiO1xuXHRcdGlmKG9wZXJhdG9yPT1cIm9yXCIpXG5cdFx0e1xuXHRcdFx0ZGVsaW0gPSBcIi0sLVwiO1xuXHRcdH1cblx0XHRcdFx0XG5cdFx0aWYodHlwZW9mKCRmaWVsZC52YWwoKSk9PVwib2JqZWN0XCIpXG5cdFx0e1xuXHRcdFx0aWYoJGZpZWxkLnZhbCgpIT1udWxsKVxuXHRcdFx0e1xuXHRcdFx0XHRcblx0XHRcdFx0dmFyIGZpZWxkdmFsID0gW107XG5cdFx0XHRcdFxuXHRcdFx0XHQkKCRmaWVsZC52YWwoKSkuZWFjaChmdW5jdGlvbihpbmRleCx2YWx1ZSl7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0ZmllbGR2YWwucHVzaCgodmFsdWUpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdFxuXHRcdFx0XHRyZXR1cm4gZmllbGR2YWwuam9pbihkZWxpbSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdFxuXHRcdHJldHVybiBcIlwiO1xuXHRcdFxuXHR9LFxuXHRnZXRDaGVja2JveFZhbDogZnVuY3Rpb24oJGZpZWxkLCBvcGVyYXRvcil7XG5cdFx0XG5cdFx0XG5cdFx0dmFyIGZpZWxkVmFsID0gJGZpZWxkLm1hcChmdW5jdGlvbigpe1xuXHRcdFx0aWYoJCh0aGlzKS5wcm9wKFwiY2hlY2tlZFwiKT09dHJ1ZSlcblx0XHRcdHtcblx0XHRcdFx0cmV0dXJuICQodGhpcykudmFsKCk7XG5cdFx0XHR9XG5cdFx0fSkuZ2V0KCk7XG5cdFx0XG5cdFx0dmFyIGRlbGltID0gXCIrXCI7XG5cdFx0aWYob3BlcmF0b3I9PVwib3JcIilcblx0XHR7XG5cdFx0XHRkZWxpbSA9IFwiLFwiO1xuXHRcdH1cblx0XHRcblx0XHRyZXR1cm4gZmllbGRWYWwuam9pbihkZWxpbSk7XG5cdH0sXG5cdGdldE1ldGFDaGVja2JveFZhbDogZnVuY3Rpb24oJGZpZWxkLCBvcGVyYXRvcil7XG5cdFx0XG5cdFx0XG5cdFx0dmFyIGZpZWxkVmFsID0gJGZpZWxkLm1hcChmdW5jdGlvbigpe1xuXHRcdFx0aWYoJCh0aGlzKS5wcm9wKFwiY2hlY2tlZFwiKT09dHJ1ZSlcblx0XHRcdHtcblx0XHRcdFx0cmV0dXJuICgkKHRoaXMpLnZhbCgpKTtcblx0XHRcdH1cblx0XHR9KS5nZXQoKTtcblx0XHRcblx0XHR2YXIgZGVsaW0gPSBcIi0rLVwiO1xuXHRcdGlmKG9wZXJhdG9yPT1cIm9yXCIpXG5cdFx0e1xuXHRcdFx0ZGVsaW0gPSBcIi0sLVwiO1xuXHRcdH1cblx0XHRcblx0XHRyZXR1cm4gZmllbGRWYWwuam9pbihkZWxpbSk7XG5cdH0sXG5cdGdldFJhZGlvVmFsOiBmdW5jdGlvbigkZmllbGQpe1xuXHRcdFx0XHRcdFx0XHRcblx0XHR2YXIgZmllbGRWYWwgPSAkZmllbGQubWFwKGZ1bmN0aW9uKClcblx0XHR7XG5cdFx0XHRpZigkKHRoaXMpLnByb3AoXCJjaGVja2VkXCIpPT10cnVlKVxuXHRcdFx0e1xuXHRcdFx0XHRyZXR1cm4gJCh0aGlzKS52YWwoKTtcblx0XHRcdH1cblx0XHRcdFxuXHRcdH0pLmdldCgpO1xuXHRcdFxuXHRcdFxuXHRcdGlmKGZpZWxkVmFsWzBdIT0wKVxuXHRcdHtcblx0XHRcdHJldHVybiBmaWVsZFZhbFswXTtcblx0XHR9XG5cdH0sXG5cdGdldE1ldGFSYWRpb1ZhbDogZnVuY3Rpb24oJGZpZWxkKXtcblx0XHRcdFx0XHRcdFx0XG5cdFx0dmFyIGZpZWxkVmFsID0gJGZpZWxkLm1hcChmdW5jdGlvbigpXG5cdFx0e1xuXHRcdFx0aWYoJCh0aGlzKS5wcm9wKFwiY2hlY2tlZFwiKT09dHJ1ZSlcblx0XHRcdHtcblx0XHRcdFx0cmV0dXJuICQodGhpcykudmFsKCk7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHR9KS5nZXQoKTtcblx0XHRcblx0XHRyZXR1cm4gZmllbGRWYWxbMF07XG5cdH0sXG5cdHByb2Nlc3NBdXRob3I6IGZ1bmN0aW9uKCRjb250YWluZXIpXG5cdHtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0XG5cdFx0XG5cdFx0dmFyIGZpZWxkVHlwZSA9ICRjb250YWluZXIuYXR0cihcImRhdGEtc2YtZmllbGQtdHlwZVwiKTtcblx0XHR2YXIgaW5wdXRUeXBlID0gJGNvbnRhaW5lci5hdHRyKFwiZGF0YS1zZi1maWVsZC1pbnB1dC10eXBlXCIpO1xuXHRcdFxuXHRcdHZhciAkZmllbGQ7XG5cdFx0dmFyIGZpZWxkTmFtZSA9IFwiXCI7XG5cdFx0dmFyIGZpZWxkVmFsID0gXCJcIjtcblx0XHRcblx0XHRpZihpbnB1dFR5cGU9PVwic2VsZWN0XCIpXG5cdFx0e1xuXHRcdFx0JGZpZWxkID0gJGNvbnRhaW5lci5maW5kKFwic2VsZWN0XCIpO1xuXHRcdFx0ZmllbGROYW1lID0gJGZpZWxkLmF0dHIoXCJuYW1lXCIpLnJlcGxhY2UoJ1tdJywgJycpO1xuXHRcdFx0XG5cdFx0XHRmaWVsZFZhbCA9IHNlbGYuZ2V0U2VsZWN0VmFsKCRmaWVsZCk7IFxuXHRcdH1cblx0XHRlbHNlIGlmKGlucHV0VHlwZT09XCJtdWx0aXNlbGVjdFwiKVxuXHRcdHtcblx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInNlbGVjdFwiKTtcblx0XHRcdGZpZWxkTmFtZSA9ICRmaWVsZC5hdHRyKFwibmFtZVwiKS5yZXBsYWNlKCdbXScsICcnKTtcblx0XHRcdHZhciBvcGVyYXRvciA9ICRmaWVsZC5hdHRyKFwiZGF0YS1vcGVyYXRvclwiKTtcblx0XHRcdFxuXHRcdFx0ZmllbGRWYWwgPSBzZWxmLmdldE11bHRpU2VsZWN0VmFsKCRmaWVsZCwgXCJvclwiKTtcblx0XHRcdFxuXHRcdH1cblx0XHRlbHNlIGlmKGlucHV0VHlwZT09XCJjaGVja2JveFwiKVxuXHRcdHtcblx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInVsID4gbGkgaW5wdXQ6Y2hlY2tib3hcIik7XG5cdFx0XHRcblx0XHRcdGlmKCRmaWVsZC5sZW5ndGg+MClcblx0XHRcdHtcblx0XHRcdFx0ZmllbGROYW1lID0gJGZpZWxkLmF0dHIoXCJuYW1lXCIpLnJlcGxhY2UoJ1tdJywgJycpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0dmFyIG9wZXJhdG9yID0gJGNvbnRhaW5lci5maW5kKFwiPiB1bFwiKS5hdHRyKFwiZGF0YS1vcGVyYXRvclwiKTtcblx0XHRcdFx0ZmllbGRWYWwgPSBzZWxmLmdldENoZWNrYm94VmFsKCRmaWVsZCwgXCJvclwiKTtcblx0XHRcdH1cblx0XHRcdFxuXHRcdH1cblx0XHRlbHNlIGlmKGlucHV0VHlwZT09XCJyYWRpb1wiKVxuXHRcdHtcblx0XHRcdFxuXHRcdFx0JGZpZWxkID0gJGNvbnRhaW5lci5maW5kKFwidWwgPiBsaSBpbnB1dDpyYWRpb1wiKTtcblx0XHRcdFx0XHRcdFxuXHRcdFx0aWYoJGZpZWxkLmxlbmd0aD4wKVxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZE5hbWUgPSAkZmllbGQuYXR0cihcIm5hbWVcIikucmVwbGFjZSgnW10nLCAnJyk7XG5cdFx0XHRcdFxuXHRcdFx0XHRmaWVsZFZhbCA9IHNlbGYuZ2V0UmFkaW9WYWwoJGZpZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0aWYodHlwZW9mKGZpZWxkVmFsKSE9XCJ1bmRlZmluZWRcIilcblx0XHR7XG5cdFx0XHRpZihmaWVsZFZhbCE9XCJcIilcblx0XHRcdHtcblx0XHRcdFx0dmFyIGZpZWxkU2x1ZyA9IFwiXCI7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZihmaWVsZE5hbWU9PVwiX3NmX2F1dGhvclwiKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0ZmllbGRTbHVnID0gXCJhdXRob3JzXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZihmaWVsZE5hbWU9PVwiX3NmX3NvcnRfb3JkZXJcIilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGZpZWxkU2x1ZyA9IFwic29ydF9vcmRlclwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYoZmllbGROYW1lPT1cIl9zZl9wcHBcIilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGZpZWxkU2x1ZyA9IFwiX3NmX3BwcFwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYoZmllbGROYW1lPT1cIl9zZl9wb3N0X3R5cGVcIilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGZpZWxkU2x1ZyA9IFwicG9zdF90eXBlc1wiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0e1xuXHRcdFx0XHRcblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0aWYoZmllbGRTbHVnIT1cIlwiKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Ly9zZWxmLnVybF9jb21wb25lbnRzICs9IFwiJlwiK2ZpZWxkU2x1ZytcIj1cIitmaWVsZFZhbDtcblx0XHRcdFx0XHRzZWxmLnVybF9wYXJhbXNbZmllbGRTbHVnXSA9IGZpZWxkVmFsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdFxuXHR9LFxuXHRwcm9jZXNzUG9zdFR5cGUgOiBmdW5jdGlvbigkdGhpcyl7XG5cdFx0XG5cdFx0dGhpcy5wcm9jZXNzQXV0aG9yKCR0aGlzKTtcblx0XHRcblx0fSxcblx0cHJvY2Vzc1Bvc3RNZXRhOiBmdW5jdGlvbigkY29udGFpbmVyKVxuXHR7XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdFxuXHRcdHZhciBmaWVsZFR5cGUgPSAkY29udGFpbmVyLmF0dHIoXCJkYXRhLXNmLWZpZWxkLXR5cGVcIik7XG5cdFx0dmFyIGlucHV0VHlwZSA9ICRjb250YWluZXIuYXR0cihcImRhdGEtc2YtZmllbGQtaW5wdXQtdHlwZVwiKTtcblx0XHR2YXIgbWV0YVR5cGUgPSAkY29udGFpbmVyLmF0dHIoXCJkYXRhLXNmLW1ldGEtdHlwZVwiKTtcblxuXHRcdHZhciBmaWVsZFZhbCA9IFwiXCI7XG5cdFx0dmFyICRmaWVsZDtcblx0XHR2YXIgZmllbGROYW1lID0gXCJcIjtcblx0XHRcblx0XHRpZihtZXRhVHlwZT09XCJudW1iZXJcIilcblx0XHR7XG5cdFx0XHRpZihpbnB1dFR5cGU9PVwicmFuZ2UtbnVtYmVyXCIpXG5cdFx0XHR7XG5cdFx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcIi5zZi1tZXRhLXJhbmdlLW51bWJlciBpbnB1dFwiKTtcblx0XHRcdFx0XG5cdFx0XHRcdHZhciB2YWx1ZXMgPSBbXTtcblx0XHRcdFx0JGZpZWxkLmVhY2goZnVuY3Rpb24oKXtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHR2YWx1ZXMucHVzaCgkKHRoaXMpLnZhbCgpKTtcblx0XHRcdFx0XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRcblx0XHRcdFx0ZmllbGRWYWwgPSB2YWx1ZXMuam9pbihcIitcIik7XG5cdFx0XHRcdFxuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZihpbnB1dFR5cGU9PVwicmFuZ2Utc2xpZGVyXCIpXG5cdFx0XHR7XG5cdFx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcIi5zZi1tZXRhLXJhbmdlLXNsaWRlciBpbnB1dFwiKTtcblx0XHRcdFx0XG5cdFx0XHRcdC8vZ2V0IGFueSBudW1iZXIgZm9ybWF0dGluZyBzdHVmZlxuXHRcdFx0XHR2YXIgJG1ldGFfcmFuZ2UgPSAkY29udGFpbmVyLmZpbmQoXCIuc2YtbWV0YS1yYW5nZS1zbGlkZXJcIik7XG5cdFx0XHRcdFxuXHRcdFx0XHR2YXIgZGVjaW1hbF9wbGFjZXMgPSAkbWV0YV9yYW5nZS5hdHRyKFwiZGF0YS1kZWNpbWFsLXBsYWNlc1wiKTtcblx0XHRcdFx0dmFyIHRob3VzYW5kX3NlcGVyYXRvciA9ICRtZXRhX3JhbmdlLmF0dHIoXCJkYXRhLXRob3VzYW5kLXNlcGVyYXRvclwiKTtcblx0XHRcdFx0dmFyIGRlY2ltYWxfc2VwZXJhdG9yID0gJG1ldGFfcmFuZ2UuYXR0cihcImRhdGEtZGVjaW1hbC1zZXBlcmF0b3JcIik7XG5cblx0XHRcdFx0dmFyIGZpZWxkX2Zvcm1hdCA9IHdOdW1iKHtcblx0XHRcdFx0XHRtYXJrOiBkZWNpbWFsX3NlcGVyYXRvcixcblx0XHRcdFx0XHRkZWNpbWFsczogcGFyc2VGbG9hdChkZWNpbWFsX3BsYWNlcyksXG5cdFx0XHRcdFx0dGhvdXNhbmQ6IHRob3VzYW5kX3NlcGVyYXRvclxuXHRcdFx0XHR9KTtcblx0XHRcdFx0XG5cdFx0XHRcdHZhciB2YWx1ZXMgPSBbXTtcblxuXG5cdFx0XHRcdHZhciBzbGlkZXJfb2JqZWN0ID0gJGNvbnRhaW5lci5maW5kKFwiLm1ldGEtc2xpZGVyXCIpWzBdO1xuXHRcdFx0XHQvL3ZhbCBmcm9tIHNsaWRlciBvYmplY3Rcblx0XHRcdFx0dmFyIHNsaWRlcl92YWwgPSBzbGlkZXJfb2JqZWN0Lm5vVWlTbGlkZXIuZ2V0KCk7XG5cblx0XHRcdFx0dmFsdWVzLnB1c2goZmllbGRfZm9ybWF0LmZyb20oc2xpZGVyX3ZhbFswXSkpO1xuXHRcdFx0XHR2YWx1ZXMucHVzaChmaWVsZF9mb3JtYXQuZnJvbShzbGlkZXJfdmFsWzFdKSk7XG5cdFx0XHRcdFxuXHRcdFx0XHRmaWVsZFZhbCA9IHZhbHVlcy5qb2luKFwiK1wiKTtcblx0XHRcdFx0XG5cdFx0XHRcdGZpZWxkTmFtZSA9ICRtZXRhX3JhbmdlLmF0dHIoXCJkYXRhLXNmLWZpZWxkLW5hbWVcIik7XG5cdFx0XHRcdFxuXHRcdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYoaW5wdXRUeXBlPT1cInJhbmdlLXJhZGlvXCIpXG5cdFx0XHR7XG5cdFx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcIi5zZi1pbnB1dC1yYW5nZS1yYWRpb1wiKTtcblx0XHRcdFx0XG5cdFx0XHRcdGlmKCRmaWVsZC5sZW5ndGg9PTApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQvL3RoZW4gdHJ5IGFnYWluLCB3ZSBtdXN0IGJlIHVzaW5nIGEgc2luZ2xlIGZpZWxkXG5cdFx0XHRcdFx0JGZpZWxkID0gJGNvbnRhaW5lci5maW5kKFwiPiB1bFwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciAkbWV0YV9yYW5nZSA9ICRjb250YWluZXIuZmluZChcIi5zZi1tZXRhLXJhbmdlXCIpO1xuXHRcdFx0XHRcblx0XHRcdFx0Ly90aGVyZSBpcyBhbiBlbGVtZW50IHdpdGggYSBmcm9tL3RvIGNsYXNzIC0gc28gd2UgbmVlZCB0byBnZXQgdGhlIHZhbHVlcyBvZiB0aGUgZnJvbSAmIHRvIGlucHV0IGZpZWxkcyBzZXBlcmF0ZWx5XG5cdFx0XHRcdGlmKCRmaWVsZC5sZW5ndGg+MClcblx0XHRcdFx0e1x0XG5cdFx0XHRcdFx0dmFyIGZpZWxkX3ZhbHMgPSBbXTtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHQkZmllbGQuZWFjaChmdW5jdGlvbigpe1xuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHR2YXIgJHJhZGlvcyA9ICQodGhpcykuZmluZChcIi5zZi1pbnB1dC1yYWRpb1wiKTtcblx0XHRcdFx0XHRcdGZpZWxkX3ZhbHMucHVzaChzZWxmLmdldE1ldGFSYWRpb1ZhbCgkcmFkaW9zKSk7XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcblx0XHRcdFx0XHQvL3ByZXZlbnQgc2Vjb25kIG51bWJlciBmcm9tIGJlaW5nIGxvd2VyIHRoYW4gdGhlIGZpcnN0XG5cdFx0XHRcdFx0aWYoZmllbGRfdmFscy5sZW5ndGg9PTIpXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aWYoTnVtYmVyKGZpZWxkX3ZhbHNbMV0pPE51bWJlcihmaWVsZF92YWxzWzBdKSlcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0ZmllbGRfdmFsc1sxXSA9IGZpZWxkX3ZhbHNbMF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGZpZWxkVmFsID0gZmllbGRfdmFscy5qb2luKFwiK1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRpZigkZmllbGQubGVuZ3RoPT0xKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0ZmllbGROYW1lID0gJGZpZWxkLmZpbmQoXCIuc2YtaW5wdXQtcmFkaW9cIikuYXR0cihcIm5hbWVcIikucmVwbGFjZSgnW10nLCAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0ZmllbGROYW1lID0gJG1ldGFfcmFuZ2UuYXR0cihcImRhdGEtc2YtZmllbGQtbmFtZVwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKGlucHV0VHlwZT09XCJyYW5nZS1zZWxlY3RcIilcblx0XHRcdHtcblx0XHRcdFx0JGZpZWxkID0gJGNvbnRhaW5lci5maW5kKFwiLnNmLWlucHV0LXNlbGVjdFwiKTtcblx0XHRcdFx0dmFyICRtZXRhX3JhbmdlID0gJGNvbnRhaW5lci5maW5kKFwiLnNmLW1ldGEtcmFuZ2VcIik7XG5cdFx0XHRcdFxuXHRcdFx0XHQvL3RoZXJlIGlzIGFuIGVsZW1lbnQgd2l0aCBhIGZyb20vdG8gY2xhc3MgLSBzbyB3ZSBuZWVkIHRvIGdldCB0aGUgdmFsdWVzIG9mIHRoZSBmcm9tICYgdG8gaW5wdXQgZmllbGRzIHNlcGVyYXRlbHlcblx0XHRcdFx0XG5cdFx0XHRcdGlmKCRmaWVsZC5sZW5ndGg+MClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHZhciBmaWVsZF92YWxzID0gW107XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0JGZpZWxkLmVhY2goZnVuY3Rpb24oKXtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0dmFyICR0aGlzID0gJCh0aGlzKTtcblx0XHRcdFx0XHRcdGZpZWxkX3ZhbHMucHVzaChzZWxmLmdldE1ldGFTZWxlY3RWYWwoJHRoaXMpKTtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdC8vcHJldmVudCBzZWNvbmQgbnVtYmVyIGZyb20gYmVpbmcgbG93ZXIgdGhhbiB0aGUgZmlyc3Rcblx0XHRcdFx0XHRpZihmaWVsZF92YWxzLmxlbmd0aD09Milcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpZihOdW1iZXIoZmllbGRfdmFsc1sxXSk8TnVtYmVyKGZpZWxkX3ZhbHNbMF0pKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRmaWVsZF92YWxzWzFdID0gZmllbGRfdmFsc1swXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0ZmllbGRWYWwgPSBmaWVsZF92YWxzLmpvaW4oXCIrXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdGlmKCRmaWVsZC5sZW5ndGg9PTEpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRmaWVsZE5hbWUgPSAkZmllbGQuYXR0cihcIm5hbWVcIikucmVwbGFjZSgnW10nLCAnJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0ZmllbGROYW1lID0gJG1ldGFfcmFuZ2UuYXR0cihcImRhdGEtc2YtZmllbGQtbmFtZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYoaW5wdXRUeXBlPT1cInJhbmdlLWNoZWNrYm94XCIpXG5cdFx0XHR7XG5cdFx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInVsID4gbGkgaW5wdXQ6Y2hlY2tib3hcIik7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZigkZmllbGQubGVuZ3RoPjApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRmaWVsZFZhbCA9IHNlbGYuZ2V0Q2hlY2tib3hWYWwoJGZpZWxkLCBcImFuZFwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRpZihmaWVsZE5hbWU9PVwiXCIpXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkTmFtZSA9ICRmaWVsZC5hdHRyKFwibmFtZVwiKS5yZXBsYWNlKCdbXScsICcnKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZSBpZihtZXRhVHlwZT09XCJjaG9pY2VcIilcblx0XHR7XG5cdFx0XHRpZihpbnB1dFR5cGU9PVwic2VsZWN0XCIpXG5cdFx0XHR7XG5cdFx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInNlbGVjdFwiKTtcblx0XHRcdFx0XG5cdFx0XHRcdGZpZWxkVmFsID0gc2VsZi5nZXRNZXRhU2VsZWN0VmFsKCRmaWVsZCk7IFxuXHRcdFx0XHRcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYoaW5wdXRUeXBlPT1cIm11bHRpc2VsZWN0XCIpXG5cdFx0XHR7XG5cdFx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInNlbGVjdFwiKTtcblx0XHRcdFx0dmFyIG9wZXJhdG9yID0gJGZpZWxkLmF0dHIoXCJkYXRhLW9wZXJhdG9yXCIpO1xuXHRcdFx0XHRcblx0XHRcdFx0ZmllbGRWYWwgPSBzZWxmLmdldE1ldGFNdWx0aVNlbGVjdFZhbCgkZmllbGQsIG9wZXJhdG9yKTtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYoaW5wdXRUeXBlPT1cImNoZWNrYm94XCIpXG5cdFx0XHR7XG5cdFx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInVsID4gbGkgaW5wdXQ6Y2hlY2tib3hcIik7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZigkZmllbGQubGVuZ3RoPjApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR2YXIgb3BlcmF0b3IgPSAkY29udGFpbmVyLmZpbmQoXCI+IHVsXCIpLmF0dHIoXCJkYXRhLW9wZXJhdG9yXCIpO1xuXHRcdFx0XHRcdGZpZWxkVmFsID0gc2VsZi5nZXRNZXRhQ2hlY2tib3hWYWwoJGZpZWxkLCBvcGVyYXRvcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2UgaWYoaW5wdXRUeXBlPT1cInJhZGlvXCIpXG5cdFx0XHR7XG5cdFx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInVsID4gbGkgaW5wdXQ6cmFkaW9cIik7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZigkZmllbGQubGVuZ3RoPjApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRmaWVsZFZhbCA9IHNlbGYuZ2V0TWV0YVJhZGlvVmFsKCRmaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0ZmllbGRWYWwgPSBlbmNvZGVVUklDb21wb25lbnQoZmllbGRWYWwpO1xuXHRcdFx0aWYodHlwZW9mKCRmaWVsZCkhPT1cInVuZGVmaW5lZFwiKVxuXHRcdFx0e1xuXHRcdFx0XHRpZigkZmllbGQubGVuZ3RoPjApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRmaWVsZE5hbWUgPSAkZmllbGQuYXR0cihcIm5hbWVcIikucmVwbGFjZSgnW10nLCAnJyk7XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0Ly9mb3IgdGhvc2Ugd2hvIGluc2lzdCBvbiB1c2luZyAmIGFtcGVyc2FuZHMgaW4gdGhlIG5hbWUgb2YgdGhlIGN1c3RvbSBmaWVsZCAoISlcblx0XHRcdFx0XHRmaWVsZE5hbWUgPSAoZmllbGROYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0XG5cdFx0fVxuXHRcdGVsc2UgaWYobWV0YVR5cGU9PVwiZGF0ZVwiKVxuXHRcdHtcblx0XHRcdHNlbGYucHJvY2Vzc1Bvc3REYXRlKCRjb250YWluZXIpO1xuXHRcdH1cblx0XHRcblx0XHRpZih0eXBlb2YoZmllbGRWYWwpIT1cInVuZGVmaW5lZFwiKVxuXHRcdHtcblx0XHRcdGlmKGZpZWxkVmFsIT1cIlwiKVxuXHRcdFx0e1xuXHRcdFx0XHQvL3NlbGYudXJsX2NvbXBvbmVudHMgKz0gXCImXCIrZW5jb2RlVVJJQ29tcG9uZW50KGZpZWxkTmFtZSkrXCI9XCIrKGZpZWxkVmFsKTtcblx0XHRcdFx0c2VsZi51cmxfcGFyYW1zW2VuY29kZVVSSUNvbXBvbmVudChmaWVsZE5hbWUpXSA9IChmaWVsZFZhbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRwcm9jZXNzUG9zdERhdGU6IGZ1bmN0aW9uKCRjb250YWluZXIpXG5cdHtcblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0XG5cdFx0dmFyIGZpZWxkVHlwZSA9ICRjb250YWluZXIuYXR0cihcImRhdGEtc2YtZmllbGQtdHlwZVwiKTtcblx0XHR2YXIgaW5wdXRUeXBlID0gJGNvbnRhaW5lci5hdHRyKFwiZGF0YS1zZi1maWVsZC1pbnB1dC10eXBlXCIpO1xuXHRcdFxuXHRcdHZhciAkZmllbGQ7XG5cdFx0dmFyIGZpZWxkTmFtZSA9IFwiXCI7XG5cdFx0dmFyIGZpZWxkVmFsID0gXCJcIjtcblx0XHRcblx0XHQkZmllbGQgPSAkY29udGFpbmVyLmZpbmQoXCJ1bCA+IGxpIGlucHV0OnRleHRcIik7XG5cdFx0ZmllbGROYW1lID0gJGZpZWxkLmF0dHIoXCJuYW1lXCIpLnJlcGxhY2UoJ1tdJywgJycpO1xuXHRcdFxuXHRcdHZhciBkYXRlcyA9IFtdO1xuXHRcdCRmaWVsZC5lYWNoKGZ1bmN0aW9uKCl7XG5cdFx0XHRcblx0XHRcdGRhdGVzLnB1c2goJCh0aGlzKS52YWwoKSk7XG5cdFx0XG5cdFx0fSk7XG5cdFx0XG5cdFx0aWYoJGZpZWxkLmxlbmd0aD09Milcblx0XHR7XG5cdFx0XHRpZigoZGF0ZXNbMF0hPVwiXCIpfHwoZGF0ZXNbMV0hPVwiXCIpKVxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZFZhbCA9IGRhdGVzLmpvaW4oXCIrXCIpO1xuXHRcdFx0XHRmaWVsZFZhbCA9IGZpZWxkVmFsLnJlcGxhY2UoL1xcLy9nLCcnKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZSBpZigkZmllbGQubGVuZ3RoPT0xKVxuXHRcdHtcblx0XHRcdGlmKGRhdGVzWzBdIT1cIlwiKVxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZFZhbCA9IGRhdGVzLmpvaW4oXCIrXCIpO1xuXHRcdFx0XHRmaWVsZFZhbCA9IGZpZWxkVmFsLnJlcGxhY2UoL1xcLy9nLCcnKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0aWYodHlwZW9mKGZpZWxkVmFsKSE9XCJ1bmRlZmluZWRcIilcblx0XHR7XG5cdFx0XHRpZihmaWVsZFZhbCE9XCJcIilcblx0XHRcdHtcblx0XHRcdFx0dmFyIGZpZWxkU2x1ZyA9IFwiXCI7XG5cdFx0XHRcdFxuXHRcdFx0XHRpZihmaWVsZE5hbWU9PVwiX3NmX3Bvc3RfZGF0ZVwiKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0ZmllbGRTbHVnID0gXCJwb3N0X2RhdGVcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRmaWVsZFNsdWcgPSBmaWVsZE5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdGlmKGZpZWxkU2x1ZyE9XCJcIilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vc2VsZi51cmxfY29tcG9uZW50cyArPSBcIiZcIitmaWVsZFNsdWcrXCI9XCIrZmllbGRWYWw7XG5cdFx0XHRcdFx0c2VsZi51cmxfcGFyYW1zW2ZpZWxkU2x1Z10gPSBmaWVsZFZhbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRcblx0fSxcblx0cHJvY2Vzc1RheG9ub215OiBmdW5jdGlvbigkY29udGFpbmVyLCByZXR1cm5fb2JqZWN0KVxuXHR7XG4gICAgICAgIGlmKHR5cGVvZihyZXR1cm5fb2JqZWN0KT09XCJ1bmRlZmluZWRcIilcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuX29iamVjdCA9IGZhbHNlO1xuICAgICAgICB9XG5cblx0XHQvL2lmKClcdFx0XHRcdFx0XG5cdFx0Ly92YXIgZmllbGROYW1lID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1zZi1maWVsZC1uYW1lXCIpO1xuXHRcdHZhciBzZWxmID0gdGhpcztcblx0XG5cdFx0dmFyIGZpZWxkVHlwZSA9ICRjb250YWluZXIuYXR0cihcImRhdGEtc2YtZmllbGQtdHlwZVwiKTtcblx0XHR2YXIgaW5wdXRUeXBlID0gJGNvbnRhaW5lci5hdHRyKFwiZGF0YS1zZi1maWVsZC1pbnB1dC10eXBlXCIpO1xuXHRcdFxuXHRcdHZhciAkZmllbGQ7XG5cdFx0dmFyIGZpZWxkTmFtZSA9IFwiXCI7XG5cdFx0dmFyIGZpZWxkVmFsID0gXCJcIjtcblx0XHRcblx0XHRpZihpbnB1dFR5cGU9PVwic2VsZWN0XCIpXG5cdFx0e1xuXHRcdFx0JGZpZWxkID0gJGNvbnRhaW5lci5maW5kKFwic2VsZWN0XCIpO1xuXHRcdFx0ZmllbGROYW1lID0gJGZpZWxkLmF0dHIoXCJuYW1lXCIpLnJlcGxhY2UoJ1tdJywgJycpO1xuXHRcdFx0XG5cdFx0XHRmaWVsZFZhbCA9IHNlbGYuZ2V0U2VsZWN0VmFsKCRmaWVsZCk7IFxuXHRcdH1cblx0XHRlbHNlIGlmKGlucHV0VHlwZT09XCJtdWx0aXNlbGVjdFwiKVxuXHRcdHtcblx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInNlbGVjdFwiKTtcblx0XHRcdGZpZWxkTmFtZSA9ICRmaWVsZC5hdHRyKFwibmFtZVwiKS5yZXBsYWNlKCdbXScsICcnKTtcblx0XHRcdHZhciBvcGVyYXRvciA9ICRmaWVsZC5hdHRyKFwiZGF0YS1vcGVyYXRvclwiKTtcblx0XHRcdFxuXHRcdFx0ZmllbGRWYWwgPSBzZWxmLmdldE11bHRpU2VsZWN0VmFsKCRmaWVsZCwgb3BlcmF0b3IpO1xuXHRcdH1cblx0XHRlbHNlIGlmKGlucHV0VHlwZT09XCJjaGVja2JveFwiKVxuXHRcdHtcblx0XHRcdCRmaWVsZCA9ICRjb250YWluZXIuZmluZChcInVsID4gbGkgaW5wdXQ6Y2hlY2tib3hcIik7XG5cdFx0XHRpZigkZmllbGQubGVuZ3RoPjApXG5cdFx0XHR7XG5cdFx0XHRcdGZpZWxkTmFtZSA9ICRmaWVsZC5hdHRyKFwibmFtZVwiKS5yZXBsYWNlKCdbXScsICcnKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdHZhciBvcGVyYXRvciA9ICRjb250YWluZXIuZmluZChcIj4gdWxcIikuYXR0cihcImRhdGEtb3BlcmF0b3JcIik7XG5cdFx0XHRcdGZpZWxkVmFsID0gc2VsZi5nZXRDaGVja2JveFZhbCgkZmllbGQsIG9wZXJhdG9yKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZSBpZihpbnB1dFR5cGU9PVwicmFkaW9cIilcblx0XHR7XG5cdFx0XHQkZmllbGQgPSAkY29udGFpbmVyLmZpbmQoXCJ1bCA+IGxpIGlucHV0OnJhZGlvXCIpO1xuXHRcdFx0aWYoJGZpZWxkLmxlbmd0aD4wKVxuXHRcdFx0e1xuXHRcdFx0XHRmaWVsZE5hbWUgPSAkZmllbGQuYXR0cihcIm5hbWVcIikucmVwbGFjZSgnW10nLCAnJyk7XG5cdFx0XHRcdFxuXHRcdFx0XHRmaWVsZFZhbCA9IHNlbGYuZ2V0UmFkaW9WYWwoJGZpZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0XG5cdFx0aWYodHlwZW9mKGZpZWxkVmFsKSE9XCJ1bmRlZmluZWRcIilcblx0XHR7XG5cdFx0XHRpZihmaWVsZFZhbCE9XCJcIilcblx0XHRcdHtcbiAgICAgICAgICAgICAgICBpZihyZXR1cm5fb2JqZWN0PT10cnVlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtuYW1lOiBmaWVsZE5hbWUsIHZhbHVlOiBmaWVsZFZhbH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC8vc2VsZi51cmxfY29tcG9uZW50cyArPSBcIiZcIitmaWVsZE5hbWUrXCI9XCIrZmllbGRWYWw7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYudXJsX3BhcmFtc1tmaWVsZE5hbWVdID0gZmllbGRWYWw7XG4gICAgICAgICAgICAgICAgfVxuXG5cdFx0XHR9XG5cdFx0fVxuXG4gICAgICAgIGlmKHJldHVybl9vYmplY3Q9PXRydWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXHR9XG59O1xufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldDp1dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbk55WXk5d2RXSnNhV012WVhOelpYUnpMMnB6TDJsdVkyeDFaR1Z6TDNCeWIyTmxjM05mWm05eWJTNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPMEZCUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWx4dWRtRnlJQ1FnUFNBb2RIbHdaVzltSUhkcGJtUnZkeUFoUFQwZ1hDSjFibVJsWm1sdVpXUmNJaUEvSUhkcGJtUnZkMXNuYWxGMVpYSjVKMTBnT2lCMGVYQmxiMllnWjJ4dlltRnNJQ0U5UFNCY0luVnVaR1ZtYVc1bFpGd2lJRDhnWjJ4dlltRnNXeWRxVVhWbGNua25YU0E2SUc1MWJHd3BPMXh1WEc1dGIyUjFiR1V1Wlhod2IzSjBjeUE5SUh0Y2JseHVYSFIwWVhodmJtOXRlVjloY21Ob2FYWmxjem9nTUN4Y2JpQWdJQ0IxY214ZmNHRnlZVzF6T2lCN2ZTeGNiaUFnSUNCMFlYaGZZWEpqYUdsMlpWOXlaWE4xYkhSelgzVnliRG9nWENKY0lpeGNiaUFnSUNCaFkzUnBkbVZmZEdGNE9pQmNJbHdpTEZ4dUlDQWdJR1pwWld4a2N6b2dlMzBzWEc1Y2RHbHVhWFE2SUdaMWJtTjBhVzl1S0hSaGVHOXViMjE1WDJGeVkyaHBkbVZ6TENCamRYSnlaVzUwWDNSaGVHOXViMjE1WDJGeVkyaHBkbVVwZTF4dVhHNGdJQ0FnSUNBZ0lIUm9hWE11ZEdGNGIyNXZiWGxmWVhKamFHbDJaWE1nUFNBd08xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5WeWJGOXdZWEpoYlhNZ1BTQjdmVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTBZWGhmWVhKamFHbDJaVjl5WlhOMWJIUnpYM1Z5YkNBOUlGd2lYQ0k3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVZV04wYVhabFgzUmhlQ0E5SUZ3aVhDSTdYRzVjYmx4MFhIUXZMM1JvYVhNdUpHWnBaV3hrY3lBOUlDUm1hV1ZzWkhNN1hHNGdJQ0FnSUNBZ0lIUm9hWE11ZEdGNGIyNXZiWGxmWVhKamFHbDJaWE1nUFNCMFlYaHZibTl0ZVY5aGNtTm9hWFpsY3p0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVqZFhKeVpXNTBYM1JoZUc5dWIyMTVYMkZ5WTJocGRtVWdQU0JqZFhKeVpXNTBYM1JoZUc5dWIyMTVYMkZ5WTJocGRtVTdYRzVjYmx4MFhIUjBhR2x6TG1Oc1pXRnlWWEpzUTI5dGNHOXVaVzUwY3lncE8xeHVYRzVjZEgwc1hHNGdJQ0FnYzJWMFZHRjRRWEpqYUdsMlpWSmxjM1ZzZEhOVmNtdzZJR1oxYm1OMGFXOXVLQ1JtYjNKdExDQmpkWEp5Wlc1MFgzSmxjM1ZzZEhOZmRYSnNMQ0JuWlhSZllXTjBhWFpsS1NCN1hHNWNiaUFnSUNBZ0lDQWdkbUZ5SUhObGJHWWdQU0IwYUdsek8xeHVYSFJjZEhSb2FYTXVZMnhsWVhKVVlYaEJjbU5vYVhabFVtVnpkV3gwYzFWeWJDZ3BPMXh1SUNBZ0lDQWdJQ0F2TDNaaGNpQmpkWEp5Wlc1MFgzSmxjM1ZzZEhOZmRYSnNJRDBnWENKY0lqdGNiaUFnSUNBZ0lDQWdhV1lvZEdocGN5NTBZWGh2Ym05dGVWOWhjbU5vYVhabGN5RTlNU2xjYmlBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYVdZb2RIbHdaVzltS0dkbGRGOWhZM1JwZG1VcFBUMWNJblZ1WkdWbWFXNWxaRndpS1Z4dVhIUmNkSHRjYmx4MFhIUmNkSFpoY2lCblpYUmZZV04wYVhabElEMGdabUZzYzJVN1hHNWNkRngwZlZ4dVhHNGdJQ0FnSUNBZ0lDOHZZMmhsWTJzZ2RHOGdjMlZsSUdsbUlIZGxJR2hoZG1VZ1lXNTVJSFJoZUc5dWIyMXBaWE1nYzJWc1pXTjBaV1JjYmlBZ0lDQWdJQ0FnTHk5cFppQnpieXdnWTJobFkyc2dkR2hsYVhJZ2NtVjNjbWwwWlhNZ1lXNWtJSFZ6WlNCMGFHOXpaU0JoY3lCMGFHVWdjbVZ6ZFd4MGN5QjFjbXhjYmlBZ0lDQWdJQ0FnZG1GeUlDUm1hV1ZzWkNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNCMllYSWdabWxsYkdSZmJtRnRaU0E5SUZ3aVhDSTdYRzRnSUNBZ0lDQWdJSFpoY2lCbWFXVnNaRjkyWVd4MVpTQTlJRndpWENJN1hHNWNiaUFnSUNBZ0lDQWdkbUZ5SUNSaFkzUnBkbVZmZEdGNGIyNXZiWGtnUFNBa1ptOXliUzRrWm1sbGJHUnpMbkJoY21WdWRDZ3BMbVpwYm1Rb1hDSmJaR0YwWVMxelppMTBZWGh2Ym05dGVTMWhjbU5vYVhabFBTY3hKMTFjSWlrN1hHNGdJQ0FnSUNBZ0lHbG1LQ1JoWTNScGRtVmZkR0Y0YjI1dmJYa3ViR1Z1WjNSb1BUMHhLVnh1SUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWtabWxsYkdRZ1BTQWtZV04wYVhabFgzUmhlRzl1YjIxNU8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCMllYSWdabWxsYkdSVWVYQmxJRDBnSkdacFpXeGtMbUYwZEhJb1hDSmtZWFJoTFhObUxXWnBaV3hrTFhSNWNHVmNJaWs3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnb1ptbGxiR1JVZVhCbElEMDlJRndpZEdGblhDSXBJSHg4SUNobWFXVnNaRlI1Y0dVZ1BUMGdYQ0pqWVhSbFoyOXllVndpS1NCOGZDQW9abWxsYkdSVWVYQmxJRDA5SUZ3aWRHRjRiMjV2YlhsY0lpa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2RHRjRiMjV2YlhsZmRtRnNkV1VnUFNCelpXeG1MbkJ5YjJObGMzTlVZWGh2Ym05dGVTZ2tabWxsYkdRc0lIUnlkV1VwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdacFpXeGtYMjVoYldVZ1BTQWtabWxsYkdRdVlYUjBjaWhjSW1SaGRHRXRjMll0Wm1sbGJHUXRibUZ0WlZ3aUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnZEdGNGIyNXZiWGxmYm1GdFpTQTlJR1pwWld4a1gyNWhiV1V1Y21Wd2JHRmpaU2hjSWw5elpuUmZYQ0lzSUZ3aVhDSXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUmhlRzl1YjIxNVgzWmhiSFZsS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1pwWld4a1gzWmhiSFZsSUQwZ2RHRjRiMjV2YlhsZmRtRnNkV1V1ZG1Gc2RXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppaG1hV1ZzWkY5MllXeDFaVDA5WENKY0lpbGNiaUFnSUNBZ0lDQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBa1ptbGxiR1FnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUdsbUtDaHpaV3htTG1OMWNuSmxiblJmZEdGNGIyNXZiWGxmWVhKamFHbDJaU0U5WENKY0lpa21KaWh6Wld4bUxtTjFjbkpsYm5SZmRHRjRiMjV2YlhsZllYSmphR2wyWlNFOWRHRjRiMjV2YlhsZmJtRnRaU2twWEc0Z0lDQWdJQ0FnSUh0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NTBZWGhmWVhKamFHbDJaVjl5WlhOMWJIUnpYM1Z5YkNBOUlHTjFjbkpsYm5SZmNtVnpkV3gwYzE5MWNtdzdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnBaaWdvS0dacFpXeGtYM1poYkhWbFBUMWNJbHdpS1h4OEtDRWtabWxsYkdRcElDa3BYRzRnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDUm1iM0p0TGlSbWFXVnNaSE11WldGamFDaG1kVzVqZEdsdmJpQW9LU0I3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9JU1JtYVdWc1pDa2dlMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJtYVdWc1pGUjVjR1VnUFNBa0tIUm9hWE1wTG1GMGRISW9YQ0prWVhSaExYTm1MV1pwWld4a0xYUjVjR1ZjSWlrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tDaG1hV1ZzWkZSNWNHVWdQVDBnWENKMFlXZGNJaWtnZkh3Z0tHWnBaV3hrVkhsd1pTQTlQU0JjSW1OaGRHVm5iM0o1WENJcElIeDhJQ2htYVdWc1pGUjVjR1VnUFQwZ1hDSjBZWGh2Ym05dGVWd2lLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1GeUlIUmhlRzl1YjIxNVgzWmhiSFZsSUQwZ2MyVnNaaTV3Y205alpYTnpWR0Y0YjI1dmJYa29KQ2gwYUdsektTd2dkSEoxWlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbWFXVnNaRjl1WVcxbElEMGdKQ2gwYUdsektTNWhkSFJ5S0Z3aVpHRjBZUzF6WmkxbWFXVnNaQzF1WVcxbFhDSXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb2RHRjRiMjV2YlhsZmRtRnNkV1VwSUh0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1pwWld4a1gzWmhiSFZsSUQwZ2RHRjRiMjV2YlhsZmRtRnNkV1V1ZG1Gc2RXVTdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9abWxsYkdSZmRtRnNkV1VnSVQwZ1hDSmNJaWtnZTF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNSbWFXVnNaQ0E5SUNRb2RHaHBjeWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJR2xtS0NBb0pHWnBaV3hrS1NBbUppQW9abWxsYkdSZmRtRnNkV1VnSVQwZ1hDSmNJaUFwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0F2TDJsbUlIZGxJR1p2ZFc1a0lHRWdabWxsYkdSY2JseDBYSFJjZEhaaGNpQnlaWGR5YVhSbFgyRjBkSElnUFNBb0pHWnBaV3hrTG1GMGRISW9YQ0prWVhSaExYTm1MWFJsY20wdGNtVjNjbWwwWlZ3aUtTazdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1LSEpsZDNKcGRHVmZZWFIwY2lFOVhDSmNJaWtnZTF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSEpsZDNKcGRHVWdQU0JLVTA5T0xuQmhjbk5sS0hKbGQzSnBkR1ZmWVhSMGNpazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUdsdWNIVjBYM1I1Y0dVZ1BTQWtabWxsYkdRdVlYUjBjaWhjSW1SaGRHRXRjMll0Wm1sbGJHUXRhVzV3ZFhRdGRIbHdaVndpS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCelpXeG1MbUZqZEdsMlpWOTBZWGdnUFNCbWFXVnNaRjl1WVcxbE8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeTltYVc1a0lIUm9aU0JoWTNScGRtVWdaV3hsYldWdWRGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2dvYVc1d2RYUmZkSGx3WlNBOVBTQmNJbkpoWkdsdlhDSXBJSHg4SUNocGJuQjFkRjkwZVhCbElEMDlJRndpWTJobFkydGliM2hjSWlrcElIdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkwzWmhjaUFrWVdOMGFYWmxJRDBnSkdacFpXeGtMbVpwYm1Rb1hDSXVjMll0YjNCMGFXOXVMV0ZqZEdsMlpWd2lLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OWxlSEJzYjJSbElIUm9aU0IyWVd4MVpYTWdhV1lnZEdobGNtVWdhWE1nWVNCa1pXeHBiVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBdkwyWnBaV3hrWDNaaGJIVmxYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJR2x6WDNOcGJtZHNaVjkyWVd4MVpTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCbWFXVnNaRjkyWVd4MVpYTWdQU0JtYVdWc1pGOTJZV3gxWlM1emNHeHBkQ2hjSWl4Y0lpa3VhbTlwYmloY0lpdGNJaWt1YzNCc2FYUW9YQ0lyWENJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1ptbGxiR1JmZG1Gc2RXVnpMbXhsYm1kMGFDQStJREVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdselgzTnBibWRzWlY5MllXeDFaU0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHbHpYM05wYm1kc1pWOTJZV3gxWlNrZ2UxeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnSkdsdWNIVjBJRDBnSkdacFpXeGtMbVpwYm1Rb1hDSnBibkIxZEZ0MllXeDFaVDBuWENJZ0t5Qm1hV1ZzWkY5MllXeDFaU0FySUZ3aUoxMWNJaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ0pHRmpkR2wyWlNBOUlDUnBibkIxZEM1d1lYSmxiblFvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQmtaWEIwYUNBOUlDUmhZM1JwZG1VdVlYUjBjaWhjSW1SaGRHRXRjMll0WkdWd2RHaGNJaWs3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dmJtOTNJR3h2YjNBZ2RHaHliM1ZuYUNCd1lYSmxiblJ6SUhSdklHZHlZV0lnZEdobGFYSWdibUZ0WlhOY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQjJZV3gxWlhNZ1BTQnVaWGNnUVhKeVlYa29LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoYkhWbGN5NXdkWE5vS0dacFpXeGtYM1poYkhWbEtUdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SUdSbGNIUm9PeUJwSUQ0Z01Ec2dhUzB0S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdKR0ZqZEdsMlpTQTlJQ1JoWTNScGRtVXVjR0Z5Wlc1MEtDa3VjR0Z5Wlc1MEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1Gc2RXVnpMbkIxYzJnb0pHRmpkR2wyWlM1bWFXNWtLRndpYVc1d2RYUmNJaWt1ZG1Gc0tDa3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVd4MVpYTXVjbVYyWlhKelpTZ3BPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F2TDJkeVlXSWdkR2hsSUhKbGQzSnBkR1VnWm05eUlIUm9hWE1nWkdWd2RHaGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJoWTNScGRtVmZjbVYzY21sMFpTQTlJSEpsZDNKcGRHVmJaR1Z3ZEdoZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJSFZ5YkNBOUlHRmpkR2wyWlY5eVpYZHlhWFJsTzF4dVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZkR2hsYmlCdFlYQWdabkp2YlNCMGFHVWdjR0Z5Wlc1MGN5QjBieUIwYUdVZ1pHVndkR2hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ1FvZG1Gc2RXVnpLUzVsWVdOb0tHWjFibU4wYVc5dUlDaHBibVJsZUN3Z2RtRnNkV1VwSUh0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFZ5YkNBOUlIVnliQzV5WlhCc1lXTmxLRndpVzF3aUlDc2dhVzVrWlhnZ0t5QmNJbDFjSWl3Z2RtRnNkV1VwTzF4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11ZEdGNFgyRnlZMmhwZG1WZmNtVnpkV3gwYzE5MWNtd2dQU0IxY213N1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaU0I3WEc1Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4dmFXWWdkR2hsY21VZ1lYSmxJRzExYkhScGNHeGxJSFpoYkhWbGN5eGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDOHZkR2hsYmlCM1pTQnVaV1ZrSUhSdklHTm9aV05ySUdadmNpQXpJSFJvYVc1bmN6cGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeTlwWmlCMGFHVWdkbUZzZFdWeklITmxiR1ZqZEdWa0lHRnlaU0JoYkd3Z2FXNGdkR2hsSUhOaGJXVWdkSEpsWlNCMGFHVnVJSGRsSUdOaGJpQmtieUJ6YjIxbElHTnNaWFpsY2lCeVpYZHlhWFJsSUhOMGRXWm1YRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQXZMMjFsY21kbElHRnNiQ0IyWVd4MVpYTWdhVzRnYzJGdFpTQnNaWFpsYkN3Z2RHaGxiaUJqYjIxaWFXNWxJSFJvWlNCc1pYWmxiSE5jYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk5cFppQjBhR1Y1SUdGeVpTQm1jbTl0SUdScFptWmxjbVZ1ZENCMGNtVmxjeUIwYUdWdUlHcDFjM1FnWTI5dFltbHVaU0IwYUdWdElHOXlJR3AxYzNRZ2RYTmxJR0JtYVdWc1pGOTJZV3gxWldCY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUM4cVhHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnWkdWd2RHaHpJRDBnYm1WM0lFRnljbUY1S0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0pDaG1hV1ZzWkY5MllXeDFaWE1wTG1WaFkyZ29ablZ1WTNScGIyNGdLR2x1WkdWNExDQjJZV3dwSUh0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUFrYVc1d2RYUWdQU0FrWm1sbGJHUXVabWx1WkNoY0ltbHVjSFYwVzNaaGJIVmxQU2RjSWlBcklHWnBaV3hrWDNaaGJIVmxJQ3NnWENJblhWd2lLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ0pHRmpkR2wyWlNBOUlDUnBibkIxZEM1d1lYSmxiblFvS1R0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJrWlhCMGFDQTlJQ1JoWTNScGRtVXVZWFIwY2loY0ltUmhkR0V0YzJZdFpHVndkR2hjSWlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OWtaWEIwYUhNdWNIVnphQ2hrWlhCMGFDazdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5S1RzcUwxeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaU0JwWmlBb0tHbHVjSFYwWDNSNWNHVWdQVDBnWENKelpXeGxZM1JjSWlrZ2ZId2dLR2x1Y0hWMFgzUjVjR1VnUFQwZ1hDSnRkV3gwYVhObGJHVmpkRndpS1NrZ2UxeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGNpQnBjMTl6YVc1bmJHVmZkbUZzZFdVZ1BTQjBjblZsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZWElnWm1sbGJHUmZkbUZzZFdWeklEMGdabWxsYkdSZmRtRnNkV1V1YzNCc2FYUW9YQ0lzWENJcExtcHZhVzRvWENJclhDSXBMbk53YkdsMEtGd2lLMXdpS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dacFpXeGtYM1poYkhWbGN5NXNaVzVuZEdnZ1BpQXhLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwYzE5emFXNW5iR1ZmZG1Gc2RXVWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUNocGMxOXphVzVuYkdWZmRtRnNkV1VwSUh0Y2JseHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RtRnlJQ1JoWTNScGRtVWdQU0FrWm1sbGJHUXVabWx1WkNoY0ltOXdkR2x2Ymx0MllXeDFaVDBuWENJZ0t5Qm1hV1ZzWkY5MllXeDFaU0FySUZ3aUoxMWNJaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ1pHVndkR2dnUFNBa1lXTjBhWFpsTG1GMGRISW9YQ0prWVhSaExYTm1MV1JsY0hSb1hDSXBPMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVhJZ2RtRnNkV1Z6SUQwZ2JtVjNJRUZ5Y21GNUtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZV3gxWlhNdWNIVnphQ2htYVdWc1pGOTJZV3gxWlNrN1hHNWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHWnZjaUFvZG1GeUlHa2dQU0JrWlhCMGFEc2dhU0ErSURBN0lHa3RMU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDUmhZM1JwZG1VZ1BTQWtZV04wYVhabExuQnlaWFpCYkd3b1hDSnZjSFJwYjI1YlpHRjBZUzF6Wmkxa1pYQjBhRDBuWENJZ0t5QW9hU0F0SURFcElDc2dYQ0luWFZ3aUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IyWVd4MVpYTXVjSFZ6YUNna1lXTjBhWFpsTG5aaGJDZ3BLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1Gc2RXVnpMbkpsZG1WeWMyVW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCaFkzUnBkbVZmY21WM2NtbDBaU0E5SUhKbGQzSnBkR1ZiWkdWd2RHaGRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZ5SUhWeWJDQTlJR0ZqZEdsMlpWOXlaWGR5YVhSbE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0pDaDJZV3gxWlhNcExtVmhZMmdvWm5WdVkzUnBiMjRnS0dsdVpHVjRMQ0IyWVd4MVpTa2dlMXh1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RYSnNJRDBnZFhKc0xuSmxjR3hoWTJVb1hDSmJYQ0lnS3lCcGJtUmxlQ0FySUZ3aVhWd2lMQ0IyWVd4MVpTazdYRzVjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NTBZWGhmWVhKamFHbDJaVjl5WlhOMWJIUnpYM1Z5YkNBOUlIVnliRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnTHk5MGFHbHpMblJoZUY5aGNtTm9hWFpsWDNKbGMzVnNkSE5mZFhKc0lEMGdZM1Z5Y21WdWRGOXlaWE4xYkhSelgzVnliRHRjYmlBZ0lDQjlMRnh1SUNBZ0lHZGxkRkpsYzNWc2RITlZjbXc2SUdaMWJtTjBhVzl1S0NSbWIzSnRMQ0JqZFhKeVpXNTBYM0psYzNWc2RITmZkWEpzS1NCN1hHNWNiaUFnSUNBZ0lDQWdMeTkwYUdsekxuTmxkRlJoZUVGeVkyaHBkbVZTWlhOMWJIUnpWWEpzS0NSbWIzSnRMQ0JqZFhKeVpXNTBYM0psYzNWc2RITmZkWEpzS1R0Y2JseHVJQ0FnSUNBZ0lDQnBaaWgwYUdsekxuUmhlRjloY21Ob2FYWmxYM0psYzNWc2RITmZkWEpzUFQxY0lsd2lLVnh1SUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1kzVnljbVZ1ZEY5eVpYTjFiSFJ6WDNWeWJEdGNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxuUmhlRjloY21Ob2FYWmxYM0psYzNWc2RITmZkWEpzTzF4dUlDQWdJSDBzWEc1Y2RHZGxkRlZ5YkZCaGNtRnRjem9nWm5WdVkzUnBiMjRvSkdadmNtMHBlMXh1WEc1Y2RGeDBkR2hwY3k1aWRXbHNaRlZ5YkVOdmJYQnZibVZ1ZEhNb0pHWnZjbTBzSUhSeWRXVXBPMXh1WEc0Z0lDQWdJQ0FnSUdsbUtIUm9hWE11ZEdGNFgyRnlZMmhwZG1WZmNtVnpkV3gwYzE5MWNtd2hQVndpWENJcFhHNGdJQ0FnSUNBZ0lIdGNibHh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWW9kR2hwY3k1aFkzUnBkbVZmZEdGNElUMWNJbHdpS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCbWFXVnNaRjl1WVcxbElEMGdkR2hwY3k1aFkzUnBkbVZmZEdGNE8xeHVYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lvZEhsd1pXOW1LSFJvYVhNdWRYSnNYM0JoY21GdGMxdG1hV1ZzWkY5dVlXMWxYU2toUFZ3aWRXNWtaV1pwYm1Wa1hDSXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa1pXeGxkR1VnZEdocGN5NTFjbXhmY0dGeVlXMXpXMlpwWld4a1gyNWhiV1ZkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnZlZ4dVhHNWNkRngwY21WMGRYSnVJSFJvYVhNdWRYSnNYM0JoY21GdGN6dGNibHgwZlN4Y2JseDBZMnhsWVhKVmNteERiMjF3YjI1bGJuUnpPaUJtZFc1amRHbHZiaWdwZTF4dVhIUmNkQzh2ZEdocGN5NTFjbXhmWTI5dGNHOXVaVzUwY3lBOUlGd2lYQ0k3WEc1Y2RGeDBkR2hwY3k1MWNteGZjR0Z5WVcxeklEMGdlMzA3WEc1Y2RIMHNYRzVjZEdOc1pXRnlWR0Y0UVhKamFHbDJaVkpsYzNWc2RITlZjbXc2SUdaMWJtTjBhVzl1S0NrZ2UxeHVYSFJjZEhSb2FYTXVkR0Y0WDJGeVkyaHBkbVZmY21WemRXeDBjMTkxY213Z1BTQW5KenRjYmx4MGZTeGNibHgwWkdsellXSnNaVWx1Y0hWMGN6b2dablZ1WTNScGIyNG9KR1p2Y20wcGUxeHVYSFJjZEhaaGNpQnpaV3htSUQwZ2RHaHBjenRjYmx4MFhIUmNibHgwWEhRa1ptOXliUzRrWm1sbGJHUnpMbVZoWTJnb1puVnVZM1JwYjI0b0tYdGNibHgwWEhSY2RGeHVYSFJjZEZ4MGRtRnlJQ1JwYm5CMWRITWdQU0FrS0hSb2FYTXBMbVpwYm1Rb1hDSnBibkIxZEN3Z2MyVnNaV04wTENBdWJXVjBZUzF6Ykdsa1pYSmNJaWs3WEc1Y2RGeDBYSFFrYVc1d2RYUnpMbUYwZEhJb1hDSmthWE5oWW14bFpGd2lMQ0JjSW1ScGMyRmliR1ZrWENJcE8xeHVYSFJjZEZ4MEpHbHVjSFYwY3k1aGRIUnlLRndpWkdsellXSnNaV1JjSWl3Z2RISjFaU2s3WEc1Y2RGeDBYSFFrYVc1d2RYUnpMbkJ5YjNBb1hDSmthWE5oWW14bFpGd2lMQ0IwY25WbEtUdGNibHgwWEhSY2RDUnBibkIxZEhNdWRISnBaMmRsY2loY0ltTm9iM05sYmpwMWNHUmhkR1ZrWENJcE8xeHVYSFJjZEZ4MFhHNWNkRngwZlNrN1hHNWNkRngwWEc1Y2RGeDBYRzVjZEgwc1hHNWNkR1Z1WVdKc1pVbHVjSFYwY3pvZ1puVnVZM1JwYjI0b0pHWnZjbTBwZTF4dVhIUmNkSFpoY2lCelpXeG1JRDBnZEdocGN6dGNibHgwWEhRa1ptOXliUzRrWm1sbGJHUnpMbVZoWTJnb1puVnVZM1JwYjI0b0tYdGNibHgwWEhSY2RIWmhjaUFrYVc1d2RYUnpJRDBnSkNoMGFHbHpLUzVtYVc1a0tGd2lhVzV3ZFhRc0lITmxiR1ZqZEN3Z0xtMWxkR0V0YzJ4cFpHVnlYQ0lwTzF4dVhIUmNkRngwSkdsdWNIVjBjeTV3Y205d0tGd2laR2x6WVdKc1pXUmNJaXdnWm1Gc2MyVXBPMXh1WEhSY2RGeDBKR2x1Y0hWMGN5NWhkSFJ5S0Z3aVpHbHpZV0pzWldSY0lpd2dabUZzYzJVcE8xeHVYSFJjZEZ4MEpHbHVjSFYwY3k1MGNtbG5aMlZ5S0Z3aVkyaHZjMlZ1T25Wd1pHRjBaV1JjSWlrN1hIUmNkRngwWEc1Y2RGeDBmU2s3WEc1Y2RGeDBYRzVjZEZ4MFhHNWNkSDBzWEc1Y2RHSjFhV3hrVlhKc1EyOXRjRzl1Wlc1MGN6b2dablZ1WTNScGIyNG9KR1p2Y20wc0lHTnNaV0Z5WDJOdmJYQnZibVZ1ZEhNcGUxeHVYSFJjZEZ4dVhIUmNkSFpoY2lCelpXeG1JRDBnZEdocGN6dGNibHgwWEhSY2JseDBYSFJwWmloMGVYQmxiMllvWTJ4bFlYSmZZMjl0Y0c5dVpXNTBjeWtoUFZ3aWRXNWtaV1pwYm1Wa1hDSXBYRzVjZEZ4MGUxeHVYSFJjZEZ4MGFXWW9ZMnhsWVhKZlkyOXRjRzl1Wlc1MGN6MDlkSEoxWlNsY2JseDBYSFJjZEh0Y2JseDBYSFJjZEZ4MGRHaHBjeTVqYkdWaGNsVnliRU52YlhCdmJtVnVkSE1vS1R0Y2JseDBYSFJjZEgxY2JseDBYSFI5WEc1Y2RGeDBYRzVjZEZ4MEpHWnZjbTB1SkdacFpXeGtjeTVsWVdOb0tHWjFibU4wYVc5dUtDbDdYRzVjZEZ4MFhIUmNibHgwWEhSY2RIWmhjaUJtYVdWc1pFNWhiV1VnUFNBa0tIUm9hWE1wTG1GMGRISW9YQ0prWVhSaExYTm1MV1pwWld4a0xXNWhiV1ZjSWlrN1hHNWNkRngwWEhSMllYSWdabWxsYkdSVWVYQmxJRDBnSkNoMGFHbHpLUzVoZEhSeUtGd2laR0YwWVMxelppMW1hV1ZzWkMxMGVYQmxYQ0lwTzF4dVhIUmNkRngwWEc1Y2RGeDBYSFJwWmlobWFXVnNaRlI1Y0dVOVBWd2ljMlZoY21Ob1hDSXBYRzVjZEZ4MFhIUjdYRzVjZEZ4MFhIUmNkSE5sYkdZdWNISnZZMlZ6YzFObFlYSmphRVpwWld4a0tDUW9kR2hwY3lrcE8xeHVYSFJjZEZ4MGZWeHVYSFJjZEZ4MFpXeHpaU0JwWmlnb1ptbGxiR1JVZVhCbFBUMWNJblJoWjF3aUtYeDhLR1pwWld4a1ZIbHdaVDA5WENKallYUmxaMjl5ZVZ3aUtYeDhLR1pwWld4a1ZIbHdaVDA5WENKMFlYaHZibTl0ZVZ3aUtTbGNibHgwWEhSY2RIdGNibHgwWEhSY2RGeDBjMlZzWmk1d2NtOWpaWE56VkdGNGIyNXZiWGtvSkNoMGFHbHpLU2s3WEc1Y2RGeDBYSFI5WEc1Y2RGeDBYSFJsYkhObElHbG1LR1pwWld4a1ZIbHdaVDA5WENKemIzSjBYMjl5WkdWeVhDSXBYRzVjZEZ4MFhIUjdYRzVjZEZ4MFhIUmNkSE5sYkdZdWNISnZZMlZ6YzFOdmNuUlBjbVJsY2tacFpXeGtLQ1FvZEdocGN5a3BPMXh1WEhSY2RGeDBmVnh1WEhSY2RGeDBaV3h6WlNCcFppaG1hV1ZzWkZSNWNHVTlQVndpY0c5emRITmZjR1Z5WDNCaFoyVmNJaWxjYmx4MFhIUmNkSHRjYmx4MFhIUmNkRngwYzJWc1ppNXdjbTlqWlhOelVtVnpkV3gwYzFCbGNsQmhaMlZHYVdWc1pDZ2tLSFJvYVhNcEtUdGNibHgwWEhSY2RIMWNibHgwWEhSY2RHVnNjMlVnYVdZb1ptbGxiR1JVZVhCbFBUMWNJbUYxZEdodmNsd2lLVnh1WEhSY2RGeDBlMXh1WEhSY2RGeDBYSFJ6Wld4bUxuQnliMk5sYzNOQmRYUm9iM0lvSkNoMGFHbHpLU2s3WEc1Y2RGeDBYSFI5WEc1Y2RGeDBYSFJsYkhObElHbG1LR1pwWld4a1ZIbHdaVDA5WENKd2IzTjBYM1I1Y0dWY0lpbGNibHgwWEhSY2RIdGNibHgwWEhSY2RGeDBjMlZzWmk1d2NtOWpaWE56VUc5emRGUjVjR1VvSkNoMGFHbHpLU2s3WEc1Y2RGeDBYSFI5WEc1Y2RGeDBYSFJsYkhObElHbG1LR1pwWld4a1ZIbHdaVDA5WENKd2IzTjBYMlJoZEdWY0lpbGNibHgwWEhSY2RIdGNibHgwWEhSY2RGeDBjMlZzWmk1d2NtOWpaWE56VUc5emRFUmhkR1VvSkNoMGFHbHpLU2s3WEc1Y2RGeDBYSFI5WEc1Y2RGeDBYSFJsYkhObElHbG1LR1pwWld4a1ZIbHdaVDA5WENKd2IzTjBYMjFsZEdGY0lpbGNibHgwWEhSY2RIdGNibHgwWEhSY2RGeDBjMlZzWmk1d2NtOWpaWE56VUc5emRFMWxkR0VvSkNoMGFHbHpLU2s3WEc1Y2RGeDBYSFJjZEZ4dVhIUmNkRngwZlZ4dVhIUmNkRngwWld4elpWeHVYSFJjZEZ4MGUxeHVYSFJjZEZ4MFhIUmNibHgwWEhSY2RIMWNibHgwWEhSY2RGeHVYSFJjZEgwcE8xeHVYSFJjZEZ4dVhIUjlMRnh1WEhSd2NtOWpaWE56VTJWaGNtTm9SbWxsYkdRNklHWjFibU4wYVc5dUtDUmpiMjUwWVdsdVpYSXBYRzVjZEh0Y2JseDBYSFIyWVhJZ2MyVnNaaUE5SUhSb2FYTTdYRzVjZEZ4MFhHNWNkRngwZG1GeUlDUm1hV1ZzWkNBOUlDUmpiMjUwWVdsdVpYSXVabWx1WkNoY0ltbHVjSFYwVzI1aGJXVmVQU2RmYzJaZmMyVmhjbU5vSjExY0lpazdYRzVjZEZ4MFhHNWNkRngwYVdZb0pHWnBaV3hrTG14bGJtZDBhRDR3S1Z4dVhIUmNkSHRjYmx4MFhIUmNkSFpoY2lCbWFXVnNaRTVoYldVZ1BTQWtabWxsYkdRdVlYUjBjaWhjSW01aGJXVmNJaWt1Y21Wd2JHRmpaU2duVzEwbkxDQW5KeWs3WEc1Y2RGeDBYSFIyWVhJZ1ptbGxiR1JXWVd3Z1BTQWtabWxsYkdRdWRtRnNLQ2s3WEc1Y2RGeDBYSFJjYmx4MFhIUmNkR2xtS0dacFpXeGtWbUZzSVQxY0lsd2lLVnh1WEhSY2RGeDBlMXh1WEhSY2RGeDBYSFF2TDNObGJHWXVkWEpzWDJOdmJYQnZibVZ1ZEhNZ0t6MGdYQ0ltWDNObVgzTTlYQ0lyWlc1amIyUmxWVkpKUTI5dGNHOXVaVzUwS0dacFpXeGtWbUZzS1R0Y2JseDBYSFJjZEZ4MGMyVnNaaTUxY214ZmNHRnlZVzF6V3lkZmMyWmZjeWRkSUQwZ1pXNWpiMlJsVlZKSlEyOXRjRzl1Wlc1MEtHWnBaV3hrVm1Gc0tUdGNibHgwWEhSY2RIMWNibHgwWEhSOVhHNWNkSDBzWEc1Y2RIQnliMk5sYzNOVGIzSjBUM0prWlhKR2FXVnNaRG9nWm5WdVkzUnBiMjRvSkdOdmJuUmhhVzVsY2lsY2JseDBlMXh1WEhSY2RIUm9hWE11Y0hKdlkyVnpjMEYxZEdodmNpZ2tZMjl1ZEdGcGJtVnlLVHRjYmx4MFhIUmNibHgwZlN4Y2JseDBjSEp2WTJWemMxSmxjM1ZzZEhOUVpYSlFZV2RsUm1sbGJHUTZJR1oxYm1OMGFXOXVLQ1JqYjI1MFlXbHVaWElwWEc1Y2RIdGNibHgwWEhSMGFHbHpMbkJ5YjJObGMzTkJkWFJvYjNJb0pHTnZiblJoYVc1bGNpazdYRzVjZEZ4MFhHNWNkSDBzWEc1Y2RHZGxkRUZqZEdsMlpWUmhlRG9nWm5WdVkzUnBiMjRvSkdacFpXeGtLU0I3WEc1Y2RGeDBjbVYwZFhKdUlIUm9hWE11WVdOMGFYWmxYM1JoZUR0Y2JseDBmU3hjYmx4MFoyVjBVMlZzWldOMFZtRnNPaUJtZFc1amRHbHZiaWdrWm1sbGJHUXBlMXh1WEc1Y2RGeDBkbUZ5SUdacFpXeGtWbUZzSUQwZ1hDSmNJanRjYmx4MFhIUmNibHgwWEhScFppZ2tabWxsYkdRdWRtRnNLQ2toUFRBcFhHNWNkRngwZTF4dVhIUmNkRngwWm1sbGJHUldZV3dnUFNBa1ptbGxiR1F1ZG1Gc0tDazdYRzVjZEZ4MGZWeHVYSFJjZEZ4dVhIUmNkR2xtS0dacFpXeGtWbUZzUFQxdWRXeHNLVnh1WEhSY2RIdGNibHgwWEhSY2RHWnBaV3hrVm1Gc0lEMGdYQ0pjSWp0Y2JseDBYSFI5WEc1Y2RGeDBYRzVjZEZ4MGNtVjBkWEp1SUdacFpXeGtWbUZzTzF4dVhIUjlMRnh1WEhSblpYUk5aWFJoVTJWc1pXTjBWbUZzT2lCbWRXNWpkR2x2Ymlna1ptbGxiR1FwZTF4dVhIUmNkRnh1WEhSY2RIWmhjaUJtYVdWc1pGWmhiQ0E5SUZ3aVhDSTdYRzVjZEZ4MFhHNWNkRngwWm1sbGJHUldZV3dnUFNBa1ptbGxiR1F1ZG1Gc0tDazdYRzVjZEZ4MFhIUmNkRngwWEhSY2JseDBYSFJwWmlobWFXVnNaRlpoYkQwOWJuVnNiQ2xjYmx4MFhIUjdYRzVjZEZ4MFhIUm1hV1ZzWkZaaGJDQTlJRndpWENJN1hHNWNkRngwZlZ4dVhIUmNkRnh1WEhSY2RISmxkSFZ5YmlCbWFXVnNaRlpoYkR0Y2JseDBmU3hjYmx4MFoyVjBUWFZzZEdsVFpXeGxZM1JXWVd3NklHWjFibU4wYVc5dUtDUm1hV1ZzWkN3Z2IzQmxjbUYwYjNJcGUxeHVYSFJjZEZ4dVhIUmNkSFpoY2lCa1pXeHBiU0E5SUZ3aUsxd2lPMXh1WEhSY2RHbG1LRzl3WlhKaGRHOXlQVDFjSW05eVhDSXBYRzVjZEZ4MGUxeHVYSFJjZEZ4MFpHVnNhVzBnUFNCY0lpeGNJanRjYmx4MFhIUjlYRzVjZEZ4MFhHNWNkRngwYVdZb2RIbHdaVzltS0NSbWFXVnNaQzUyWVd3b0tTazlQVndpYjJKcVpXTjBYQ0lwWEc1Y2RGeDBlMXh1WEhSY2RGeDBhV1lvSkdacFpXeGtMblpoYkNncElUMXVkV3hzS1Z4dVhIUmNkRngwZTF4dVhIUmNkRngwWEhSeVpYUjFjbTRnSkdacFpXeGtMblpoYkNncExtcHZhVzRvWkdWc2FXMHBPMXh1WEhSY2RGeDBmVnh1WEhSY2RIMWNibHgwWEhSY2JseDBmU3hjYmx4MFoyVjBUV1YwWVUxMWJIUnBVMlZzWldOMFZtRnNPaUJtZFc1amRHbHZiaWdrWm1sbGJHUXNJRzl3WlhKaGRHOXlLWHRjYmx4MFhIUmNibHgwWEhSMllYSWdaR1ZzYVcwZ1BTQmNJaTByTFZ3aU8xeHVYSFJjZEdsbUtHOXdaWEpoZEc5eVBUMWNJbTl5WENJcFhHNWNkRngwZTF4dVhIUmNkRngwWkdWc2FXMGdQU0JjSWkwc0xWd2lPMXh1WEhSY2RIMWNibHgwWEhSY2RGeDBYRzVjZEZ4MGFXWW9kSGx3Wlc5bUtDUm1hV1ZzWkM1MllXd29LU2s5UFZ3aWIySnFaV04wWENJcFhHNWNkRngwZTF4dVhIUmNkRngwYVdZb0pHWnBaV3hrTG5aaGJDZ3BJVDF1ZFd4c0tWeHVYSFJjZEZ4MGUxeHVYSFJjZEZ4MFhIUmNibHgwWEhSY2RGeDBkbUZ5SUdacFpXeGtkbUZzSUQwZ1cxMDdYRzVjZEZ4MFhIUmNkRnh1WEhSY2RGeDBYSFFrS0NSbWFXVnNaQzUyWVd3b0tTa3VaV0ZqYUNobWRXNWpkR2x2YmlocGJtUmxlQ3gyWVd4MVpTbDdYRzVjZEZ4MFhIUmNkRngwWEc1Y2RGeDBYSFJjZEZ4MFptbGxiR1IyWVd3dWNIVnphQ2dvZG1Gc2RXVXBLVHRjYmx4MFhIUmNkRngwZlNrN1hHNWNkRngwWEhSY2RGeHVYSFJjZEZ4MFhIUnlaWFIxY200Z1ptbGxiR1IyWVd3dWFtOXBiaWhrWld4cGJTazdYRzVjZEZ4MFhIUjlYRzVjZEZ4MGZWeHVYSFJjZEZ4dVhIUmNkSEpsZEhWeWJpQmNJbHdpTzF4dVhIUmNkRnh1WEhSOUxGeHVYSFJuWlhSRGFHVmphMkp2ZUZaaGJEb2dablZ1WTNScGIyNG9KR1pwWld4a0xDQnZjR1Z5WVhSdmNpbDdYRzVjZEZ4MFhHNWNkRngwWEc1Y2RGeDBkbUZ5SUdacFpXeGtWbUZzSUQwZ0pHWnBaV3hrTG0xaGNDaG1kVzVqZEdsdmJpZ3BlMXh1WEhSY2RGeDBhV1lvSkNoMGFHbHpLUzV3Y205d0tGd2lZMmhsWTJ0bFpGd2lLVDA5ZEhKMVpTbGNibHgwWEhSY2RIdGNibHgwWEhSY2RGeDBjbVYwZFhKdUlDUW9kR2hwY3lrdWRtRnNLQ2s3WEc1Y2RGeDBYSFI5WEc1Y2RGeDBmU2t1WjJWMEtDazdYRzVjZEZ4MFhHNWNkRngwZG1GeUlHUmxiR2x0SUQwZ1hDSXJYQ0k3WEc1Y2RGeDBhV1lvYjNCbGNtRjBiM0k5UFZ3aWIzSmNJaWxjYmx4MFhIUjdYRzVjZEZ4MFhIUmtaV3hwYlNBOUlGd2lMRndpTzF4dVhIUmNkSDFjYmx4MFhIUmNibHgwWEhSeVpYUjFjbTRnWm1sbGJHUldZV3d1YW05cGJpaGtaV3hwYlNrN1hHNWNkSDBzWEc1Y2RHZGxkRTFsZEdGRGFHVmphMkp2ZUZaaGJEb2dablZ1WTNScGIyNG9KR1pwWld4a0xDQnZjR1Z5WVhSdmNpbDdYRzVjZEZ4MFhHNWNkRngwWEc1Y2RGeDBkbUZ5SUdacFpXeGtWbUZzSUQwZ0pHWnBaV3hrTG0xaGNDaG1kVzVqZEdsdmJpZ3BlMXh1WEhSY2RGeDBhV1lvSkNoMGFHbHpLUzV3Y205d0tGd2lZMmhsWTJ0bFpGd2lLVDA5ZEhKMVpTbGNibHgwWEhSY2RIdGNibHgwWEhSY2RGeDBjbVYwZFhKdUlDZ2tLSFJvYVhNcExuWmhiQ2dwS1R0Y2JseDBYSFJjZEgxY2JseDBYSFI5S1M1blpYUW9LVHRjYmx4MFhIUmNibHgwWEhSMllYSWdaR1ZzYVcwZ1BTQmNJaTByTFZ3aU8xeHVYSFJjZEdsbUtHOXdaWEpoZEc5eVBUMWNJbTl5WENJcFhHNWNkRngwZTF4dVhIUmNkRngwWkdWc2FXMGdQU0JjSWkwc0xWd2lPMXh1WEhSY2RIMWNibHgwWEhSY2JseDBYSFJ5WlhSMWNtNGdabWxsYkdSV1lXd3VhbTlwYmloa1pXeHBiU2s3WEc1Y2RIMHNYRzVjZEdkbGRGSmhaR2x2Vm1Gc09pQm1kVzVqZEdsdmJpZ2tabWxsYkdRcGUxeHVYSFJjZEZ4MFhIUmNkRngwWEhSY2JseDBYSFIyWVhJZ1ptbGxiR1JXWVd3Z1BTQWtabWxsYkdRdWJXRndLR1oxYm1OMGFXOXVLQ2xjYmx4MFhIUjdYRzVjZEZ4MFhIUnBaaWdrS0hSb2FYTXBMbkJ5YjNBb1hDSmphR1ZqYTJWa1hDSXBQVDEwY25WbEtWeHVYSFJjZEZ4MGUxeHVYSFJjZEZ4MFhIUnlaWFIxY200Z0pDaDBhR2x6S1M1MllXd29LVHRjYmx4MFhIUmNkSDFjYmx4MFhIUmNkRnh1WEhSY2RIMHBMbWRsZENncE8xeHVYSFJjZEZ4dVhIUmNkRnh1WEhSY2RHbG1LR1pwWld4a1ZtRnNXekJkSVQwd0tWeHVYSFJjZEh0Y2JseDBYSFJjZEhKbGRIVnliaUJtYVdWc1pGWmhiRnN3WFR0Y2JseDBYSFI5WEc1Y2RIMHNYRzVjZEdkbGRFMWxkR0ZTWVdScGIxWmhiRG9nWm5WdVkzUnBiMjRvSkdacFpXeGtLWHRjYmx4MFhIUmNkRngwWEhSY2RGeDBYRzVjZEZ4MGRtRnlJR1pwWld4a1ZtRnNJRDBnSkdacFpXeGtMbTFoY0NobWRXNWpkR2x2YmlncFhHNWNkRngwZTF4dVhIUmNkRngwYVdZb0pDaDBhR2x6S1M1d2NtOXdLRndpWTJobFkydGxaRndpS1QwOWRISjFaU2xjYmx4MFhIUmNkSHRjYmx4MFhIUmNkRngwY21WMGRYSnVJQ1FvZEdocGN5a3VkbUZzS0NrN1hHNWNkRngwWEhSOVhHNWNkRngwWEhSY2JseDBYSFI5S1M1blpYUW9LVHRjYmx4MFhIUmNibHgwWEhSeVpYUjFjbTRnWm1sbGJHUldZV3hiTUYwN1hHNWNkSDBzWEc1Y2RIQnliMk5sYzNOQmRYUm9iM0k2SUdaMWJtTjBhVzl1S0NSamIyNTBZV2x1WlhJcFhHNWNkSHRjYmx4MFhIUjJZWElnYzJWc1ppQTlJSFJvYVhNN1hHNWNkRngwWEc1Y2RGeDBYRzVjZEZ4MGRtRnlJR1pwWld4a1ZIbHdaU0E5SUNSamIyNTBZV2x1WlhJdVlYUjBjaWhjSW1SaGRHRXRjMll0Wm1sbGJHUXRkSGx3WlZ3aUtUdGNibHgwWEhSMllYSWdhVzV3ZFhSVWVYQmxJRDBnSkdOdmJuUmhhVzVsY2k1aGRIUnlLRndpWkdGMFlTMXpaaTFtYVdWc1pDMXBibkIxZEMxMGVYQmxYQ0lwTzF4dVhIUmNkRnh1WEhSY2RIWmhjaUFrWm1sbGJHUTdYRzVjZEZ4MGRtRnlJR1pwWld4a1RtRnRaU0E5SUZ3aVhDSTdYRzVjZEZ4MGRtRnlJR1pwWld4a1ZtRnNJRDBnWENKY0lqdGNibHgwWEhSY2JseDBYSFJwWmlocGJuQjFkRlI1Y0dVOVBWd2ljMlZzWldOMFhDSXBYRzVjZEZ4MGUxeHVYSFJjZEZ4MEpHWnBaV3hrSUQwZ0pHTnZiblJoYVc1bGNpNW1hVzVrS0Z3aWMyVnNaV04wWENJcE8xeHVYSFJjZEZ4MFptbGxiR1JPWVcxbElEMGdKR1pwWld4a0xtRjBkSElvWENKdVlXMWxYQ0lwTG5KbGNHeGhZMlVvSjF0ZEp5d2dKeWNwTzF4dVhIUmNkRngwWEc1Y2RGeDBYSFJtYVdWc1pGWmhiQ0E5SUhObGJHWXVaMlYwVTJWc1pXTjBWbUZzS0NSbWFXVnNaQ2s3SUZ4dVhIUmNkSDFjYmx4MFhIUmxiSE5sSUdsbUtHbHVjSFYwVkhsd1pUMDlYQ0p0ZFd4MGFYTmxiR1ZqZEZ3aUtWeHVYSFJjZEh0Y2JseDBYSFJjZENSbWFXVnNaQ0E5SUNSamIyNTBZV2x1WlhJdVptbHVaQ2hjSW5ObGJHVmpkRndpS1R0Y2JseDBYSFJjZEdacFpXeGtUbUZ0WlNBOUlDUm1hV1ZzWkM1aGRIUnlLRndpYm1GdFpWd2lLUzV5WlhCc1lXTmxLQ2RiWFNjc0lDY25LVHRjYmx4MFhIUmNkSFpoY2lCdmNHVnlZWFJ2Y2lBOUlDUm1hV1ZzWkM1aGRIUnlLRndpWkdGMFlTMXZjR1Z5WVhSdmNsd2lLVHRjYmx4MFhIUmNkRnh1WEhSY2RGeDBabWxsYkdSV1lXd2dQU0J6Wld4bUxtZGxkRTExYkhScFUyVnNaV04wVm1Gc0tDUm1hV1ZzWkN3Z1hDSnZjbHdpS1R0Y2JseDBYSFJjZEZ4dVhIUmNkSDFjYmx4MFhIUmxiSE5sSUdsbUtHbHVjSFYwVkhsd1pUMDlYQ0pqYUdWamEySnZlRndpS1Z4dVhIUmNkSHRjYmx4MFhIUmNkQ1JtYVdWc1pDQTlJQ1JqYjI1MFlXbHVaWEl1Wm1sdVpDaGNJblZzSUQ0Z2JHa2dhVzV3ZFhRNlkyaGxZMnRpYjNoY0lpazdYRzVjZEZ4MFhIUmNibHgwWEhSY2RHbG1LQ1JtYVdWc1pDNXNaVzVuZEdnK01DbGNibHgwWEhSY2RIdGNibHgwWEhSY2RGeDBabWxsYkdST1lXMWxJRDBnSkdacFpXeGtMbUYwZEhJb1hDSnVZVzFsWENJcExuSmxjR3hoWTJVb0oxdGRKeXdnSnljcE8xeHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjYmx4MFhIUmNkRngwZG1GeUlHOXdaWEpoZEc5eUlEMGdKR052Ym5SaGFXNWxjaTVtYVc1a0tGd2lQaUIxYkZ3aUtTNWhkSFJ5S0Z3aVpHRjBZUzF2Y0dWeVlYUnZjbHdpS1R0Y2JseDBYSFJjZEZ4MFptbGxiR1JXWVd3Z1BTQnpaV3htTG1kbGRFTm9aV05yWW05NFZtRnNLQ1JtYVdWc1pDd2dYQ0p2Y2x3aUtUdGNibHgwWEhSY2RIMWNibHgwWEhSY2RGeHVYSFJjZEgxY2JseDBYSFJsYkhObElHbG1LR2x1Y0hWMFZIbHdaVDA5WENKeVlXUnBiMXdpS1Z4dVhIUmNkSHRjYmx4MFhIUmNkRnh1WEhSY2RGeDBKR1pwWld4a0lEMGdKR052Ym5SaGFXNWxjaTVtYVc1a0tGd2lkV3dnUGlCc2FTQnBibkIxZERweVlXUnBiMXdpS1R0Y2JseDBYSFJjZEZ4MFhIUmNkRnh1WEhSY2RGeDBhV1lvSkdacFpXeGtMbXhsYm1kMGFENHdLVnh1WEhSY2RGeDBlMXh1WEhSY2RGeDBYSFJtYVdWc1pFNWhiV1VnUFNBa1ptbGxiR1F1WVhSMGNpaGNJbTVoYldWY0lpa3VjbVZ3YkdGalpTZ25XMTBuTENBbkp5azdYRzVjZEZ4MFhIUmNkRnh1WEhSY2RGeDBYSFJtYVdWc1pGWmhiQ0E5SUhObGJHWXVaMlYwVW1Ga2FXOVdZV3dvSkdacFpXeGtLVHRjYmx4MFhIUmNkSDFjYmx4MFhIUjlYRzVjZEZ4MFhHNWNkRngwYVdZb2RIbHdaVzltS0dacFpXeGtWbUZzS1NFOVhDSjFibVJsWm1sdVpXUmNJaWxjYmx4MFhIUjdYRzVjZEZ4MFhIUnBaaWhtYVdWc1pGWmhiQ0U5WENKY0lpbGNibHgwWEhSY2RIdGNibHgwWEhSY2RGeDBkbUZ5SUdacFpXeGtVMngxWnlBOUlGd2lYQ0k3WEc1Y2RGeDBYSFJjZEZ4dVhIUmNkRngwWEhScFppaG1hV1ZzWkU1aGJXVTlQVndpWDNObVgyRjFkR2h2Y2x3aUtWeHVYSFJjZEZ4MFhIUjdYRzVjZEZ4MFhIUmNkRngwWm1sbGJHUlRiSFZuSUQwZ1hDSmhkWFJvYjNKelhDSTdYRzVjZEZ4MFhIUmNkSDFjYmx4MFhIUmNkRngwWld4elpTQnBaaWhtYVdWc1pFNWhiV1U5UFZ3aVgzTm1YM052Y25SZmIzSmtaWEpjSWlsY2JseDBYSFJjZEZ4MGUxeHVYSFJjZEZ4MFhIUmNkR1pwWld4a1UyeDFaeUE5SUZ3aWMyOXlkRjl2Y21SbGNsd2lPMXh1WEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFJjZEdWc2MyVWdhV1lvWm1sbGJHUk9ZVzFsUFQxY0lsOXpabDl3Y0hCY0lpbGNibHgwWEhSY2RGeDBlMXh1WEhSY2RGeDBYSFJjZEdacFpXeGtVMngxWnlBOUlGd2lYM05tWDNCd2NGd2lPMXh1WEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFJjZEdWc2MyVWdhV1lvWm1sbGJHUk9ZVzFsUFQxY0lsOXpabDl3YjNOMFgzUjVjR1ZjSWlsY2JseDBYSFJjZEZ4MGUxeHVYSFJjZEZ4MFhIUmNkR1pwWld4a1UyeDFaeUE5SUZ3aWNHOXpkRjkwZVhCbGMxd2lPMXh1WEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFJjZEdWc2MyVmNibHgwWEhSY2RGeDBlMXh1WEhSY2RGeDBYSFJjYmx4MFhIUmNkRngwZlZ4dVhIUmNkRngwWEhSY2JseDBYSFJjZEZ4MGFXWW9abWxsYkdSVGJIVm5JVDFjSWx3aUtWeHVYSFJjZEZ4MFhIUjdYRzVjZEZ4MFhIUmNkRngwTHk5elpXeG1MblZ5YkY5amIyMXdiMjVsYm5SeklDczlJRndpSmx3aUsyWnBaV3hrVTJ4MVp5dGNJajFjSWl0bWFXVnNaRlpoYkR0Y2JseDBYSFJjZEZ4MFhIUnpaV3htTG5WeWJGOXdZWEpoYlhOYlptbGxiR1JUYkhWblhTQTlJR1pwWld4a1ZtRnNPMXh1WEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFI5WEc1Y2RGeDBmVnh1WEhSY2RGeHVYSFI5TEZ4dVhIUndjbTlqWlhOelVHOXpkRlI1Y0dVZ09pQm1kVzVqZEdsdmJpZ2tkR2hwY3lsN1hHNWNkRngwWEc1Y2RGeDBkR2hwY3k1d2NtOWpaWE56UVhWMGFHOXlLQ1IwYUdsektUdGNibHgwWEhSY2JseDBmU3hjYmx4MGNISnZZMlZ6YzFCdmMzUk5aWFJoT2lCbWRXNWpkR2x2Ymlna1kyOXVkR0ZwYm1WeUtWeHVYSFI3WEc1Y2RGeDBkbUZ5SUhObGJHWWdQU0IwYUdsek8xeHVYSFJjZEZ4dVhIUmNkSFpoY2lCbWFXVnNaRlI1Y0dVZ1BTQWtZMjl1ZEdGcGJtVnlMbUYwZEhJb1hDSmtZWFJoTFhObUxXWnBaV3hrTFhSNWNHVmNJaWs3WEc1Y2RGeDBkbUZ5SUdsdWNIVjBWSGx3WlNBOUlDUmpiMjUwWVdsdVpYSXVZWFIwY2loY0ltUmhkR0V0YzJZdFptbGxiR1F0YVc1d2RYUXRkSGx3WlZ3aUtUdGNibHgwWEhSMllYSWdiV1YwWVZSNWNHVWdQU0FrWTI5dWRHRnBibVZ5TG1GMGRISW9YQ0prWVhSaExYTm1MVzFsZEdFdGRIbHdaVndpS1R0Y2JseHVYSFJjZEhaaGNpQm1hV1ZzWkZaaGJDQTlJRndpWENJN1hHNWNkRngwZG1GeUlDUm1hV1ZzWkR0Y2JseDBYSFIyWVhJZ1ptbGxiR1JPWVcxbElEMGdYQ0pjSWp0Y2JseDBYSFJjYmx4MFhIUnBaaWh0WlhSaFZIbHdaVDA5WENKdWRXMWlaWEpjSWlsY2JseDBYSFI3WEc1Y2RGeDBYSFJwWmlocGJuQjFkRlI1Y0dVOVBWd2ljbUZ1WjJVdGJuVnRZbVZ5WENJcFhHNWNkRngwWEhSN1hHNWNkRngwWEhSY2RDUm1hV1ZzWkNBOUlDUmpiMjUwWVdsdVpYSXVabWx1WkNoY0lpNXpaaTF0WlhSaExYSmhibWRsTFc1MWJXSmxjaUJwYm5CMWRGd2lLVHRjYmx4MFhIUmNkRngwWEc1Y2RGeDBYSFJjZEhaaGNpQjJZV3gxWlhNZ1BTQmJYVHRjYmx4MFhIUmNkRngwSkdacFpXeGtMbVZoWTJnb1puVnVZM1JwYjI0b0tYdGNibHgwWEhSY2RGeDBYSFJjYmx4MFhIUmNkRngwWEhSMllXeDFaWE11Y0hWemFDZ2tLSFJvYVhNcExuWmhiQ2dwS1R0Y2JseDBYSFJjZEZ4MFhHNWNkRngwWEhSY2RIMHBPMXh1WEhSY2RGeDBYSFJjYmx4MFhIUmNkRngwWm1sbGJHUldZV3dnUFNCMllXeDFaWE11YW05cGJpaGNJaXRjSWlrN1hHNWNkRngwWEhSY2RGeHVYSFJjZEZ4MGZWeHVYSFJjZEZ4MFpXeHpaU0JwWmlocGJuQjFkRlI1Y0dVOVBWd2ljbUZ1WjJVdGMyeHBaR1Z5WENJcFhHNWNkRngwWEhSN1hHNWNkRngwWEhSY2RDUm1hV1ZzWkNBOUlDUmpiMjUwWVdsdVpYSXVabWx1WkNoY0lpNXpaaTF0WlhSaExYSmhibWRsTFhOc2FXUmxjaUJwYm5CMWRGd2lLVHRjYmx4MFhIUmNkRngwWEc1Y2RGeDBYSFJjZEM4dloyVjBJR0Z1ZVNCdWRXMWlaWElnWm05eWJXRjBkR2x1WnlCemRIVm1abHh1WEhSY2RGeDBYSFIyWVhJZ0pHMWxkR0ZmY21GdVoyVWdQU0FrWTI5dWRHRnBibVZ5TG1acGJtUW9YQ0l1YzJZdGJXVjBZUzF5WVc1blpTMXpiR2xrWlhKY0lpazdYRzVjZEZ4MFhIUmNkRnh1WEhSY2RGeDBYSFIyWVhJZ1pHVmphVzFoYkY5d2JHRmpaWE1nUFNBa2JXVjBZVjl5WVc1blpTNWhkSFJ5S0Z3aVpHRjBZUzFrWldOcGJXRnNMWEJzWVdObGMxd2lLVHRjYmx4MFhIUmNkRngwZG1GeUlIUm9iM1Z6WVc1a1gzTmxjR1Z5WVhSdmNpQTlJQ1J0WlhSaFgzSmhibWRsTG1GMGRISW9YQ0prWVhSaExYUm9iM1Z6WVc1a0xYTmxjR1Z5WVhSdmNsd2lLVHRjYmx4MFhIUmNkRngwZG1GeUlHUmxZMmx0WVd4ZmMyVndaWEpoZEc5eUlEMGdKRzFsZEdGZmNtRnVaMlV1WVhSMGNpaGNJbVJoZEdFdFpHVmphVzFoYkMxelpYQmxjbUYwYjNKY0lpazdYRzVjYmx4MFhIUmNkRngwZG1GeUlHWnBaV3hrWDJadmNtMWhkQ0E5SUhkT2RXMWlLSHRjYmx4MFhIUmNkRngwWEhSdFlYSnJPaUJrWldOcGJXRnNYM05sY0dWeVlYUnZjaXhjYmx4MFhIUmNkRngwWEhSa1pXTnBiV0ZzY3pvZ2NHRnljMlZHYkc5aGRDaGtaV05wYldGc1gzQnNZV05sY3lrc1hHNWNkRngwWEhSY2RGeDBkR2h2ZFhOaGJtUTZJSFJvYjNWellXNWtYM05sY0dWeVlYUnZjbHh1WEhSY2RGeDBYSFI5S1R0Y2JseDBYSFJjZEZ4MFhHNWNkRngwWEhSY2RIWmhjaUIyWVd4MVpYTWdQU0JiWFR0Y2JseHVYRzVjZEZ4MFhIUmNkSFpoY2lCemJHbGtaWEpmYjJKcVpXTjBJRDBnSkdOdmJuUmhhVzVsY2k1bWFXNWtLRndpTG0xbGRHRXRjMnhwWkdWeVhDSXBXekJkTzF4dVhIUmNkRngwWEhRdkwzWmhiQ0JtY205dElITnNhV1JsY2lCdlltcGxZM1JjYmx4MFhIUmNkRngwZG1GeUlITnNhV1JsY2w5MllXd2dQU0J6Ykdsa1pYSmZiMkpxWldOMExtNXZWV2xUYkdsa1pYSXVaMlYwS0NrN1hHNWNibHgwWEhSY2RGeDBkbUZzZFdWekxuQjFjMmdvWm1sbGJHUmZabTl5YldGMExtWnliMjBvYzJ4cFpHVnlYM1poYkZzd1hTa3BPMXh1WEhSY2RGeDBYSFIyWVd4MVpYTXVjSFZ6YUNobWFXVnNaRjltYjNKdFlYUXVabkp2YlNoemJHbGtaWEpmZG1Gc1d6RmRLU2s3WEc1Y2RGeDBYSFJjZEZ4dVhIUmNkRngwWEhSbWFXVnNaRlpoYkNBOUlIWmhiSFZsY3k1cWIybHVLRndpSzF3aUtUdGNibHgwWEhSY2RGeDBYRzVjZEZ4MFhIUmNkR1pwWld4a1RtRnRaU0E5SUNSdFpYUmhYM0poYm1kbExtRjBkSElvWENKa1lYUmhMWE5tTFdacFpXeGtMVzVoYldWY0lpazdYRzVjZEZ4MFhIUmNkRnh1WEhSY2RGeDBYSFJjYmx4MFhIUmNkSDFjYmx4MFhIUmNkR1ZzYzJVZ2FXWW9hVzV3ZFhSVWVYQmxQVDFjSW5KaGJtZGxMWEpoWkdsdlhDSXBYRzVjZEZ4MFhIUjdYRzVjZEZ4MFhIUmNkQ1JtYVdWc1pDQTlJQ1JqYjI1MFlXbHVaWEl1Wm1sdVpDaGNJaTV6WmkxcGJuQjFkQzF5WVc1blpTMXlZV1JwYjF3aUtUdGNibHgwWEhSY2RGeDBYRzVjZEZ4MFhIUmNkR2xtS0NSbWFXVnNaQzVzWlc1bmRHZzlQVEFwWEc1Y2RGeDBYSFJjZEh0Y2JseDBYSFJjZEZ4MFhIUXZMM1JvWlc0Z2RISjVJR0ZuWVdsdUxDQjNaU0J0ZFhOMElHSmxJSFZ6YVc1bklHRWdjMmx1WjJ4bElHWnBaV3hrWEc1Y2RGeDBYSFJjZEZ4MEpHWnBaV3hrSUQwZ0pHTnZiblJoYVc1bGNpNW1hVzVrS0Z3aVBpQjFiRndpS1R0Y2JseDBYSFJjZEZ4MGZWeHVYRzVjZEZ4MFhIUmNkSFpoY2lBa2JXVjBZVjl5WVc1blpTQTlJQ1JqYjI1MFlXbHVaWEl1Wm1sdVpDaGNJaTV6WmkxdFpYUmhMWEpoYm1kbFhDSXBPMXh1WEhSY2RGeDBYSFJjYmx4MFhIUmNkRngwTHk5MGFHVnlaU0JwY3lCaGJpQmxiR1Z0Wlc1MElIZHBkR2dnWVNCbWNtOXRMM1J2SUdOc1lYTnpJQzBnYzI4Z2QyVWdibVZsWkNCMGJ5Qm5aWFFnZEdobElIWmhiSFZsY3lCdlppQjBhR1VnWm5KdmJTQW1JSFJ2SUdsdWNIVjBJR1pwWld4a2N5QnpaWEJsY21GMFpXeDVYRzVjZEZ4MFhIUmNkR2xtS0NSbWFXVnNaQzVzWlc1bmRHZytNQ2xjYmx4MFhIUmNkRngwZTF4MFhHNWNkRngwWEhSY2RGeDBkbUZ5SUdacFpXeGtYM1poYkhNZ1BTQmJYVHRjYmx4MFhIUmNkRngwWEhSY2JseDBYSFJjZEZ4MFhIUWtabWxsYkdRdVpXRmphQ2htZFc1amRHbHZiaWdwZTF4dVhIUmNkRngwWEhSY2RGeDBYRzVjZEZ4MFhIUmNkRngwWEhSMllYSWdKSEpoWkdsdmN5QTlJQ1FvZEdocGN5a3VabWx1WkNoY0lpNXpaaTFwYm5CMWRDMXlZV1JwYjF3aUtUdGNibHgwWEhSY2RGeDBYSFJjZEdacFpXeGtYM1poYkhNdWNIVnphQ2h6Wld4bUxtZGxkRTFsZEdGU1lXUnBiMVpoYkNna2NtRmthVzl6S1NrN1hHNWNkRngwWEhSY2RGeDBYSFJjYmx4MFhIUmNkRngwWEhSOUtUdGNibHgwWEhSY2RGeDBYSFJjYmx4MFhIUmNkRngwWEhRdkwzQnlaWFpsYm5RZ2MyVmpiMjVrSUc1MWJXSmxjaUJtY205dElHSmxhVzVuSUd4dmQyVnlJSFJvWVc0Z2RHaGxJR1pwY25OMFhHNWNkRngwWEhSY2RGeDBhV1lvWm1sbGJHUmZkbUZzY3k1c1pXNW5kR2c5UFRJcFhHNWNkRngwWEhSY2RGeDBlMXh1WEhSY2RGeDBYSFJjZEZ4MGFXWW9UblZ0WW1WeUtHWnBaV3hrWDNaaGJITmJNVjBwUEU1MWJXSmxjaWhtYVdWc1pGOTJZV3h6V3pCZEtTbGNibHgwWEhSY2RGeDBYSFJjZEh0Y2JseDBYSFJjZEZ4MFhIUmNkRngwWm1sbGJHUmZkbUZzYzFzeFhTQTlJR1pwWld4a1gzWmhiSE5iTUYwN1hHNWNkRngwWEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFJjZEZ4MGZWeHVYSFJjZEZ4MFhIUmNkRnh1WEhSY2RGeDBYSFJjZEdacFpXeGtWbUZzSUQwZ1ptbGxiR1JmZG1Gc2N5NXFiMmx1S0Z3aUsxd2lLVHRjYmx4MFhIUmNkRngwZlZ4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4dVhIUmNkRngwWEhScFppZ2tabWxsYkdRdWJHVnVaM1JvUFQweEtWeHVYSFJjZEZ4MFhIUjdYRzVjZEZ4MFhIUmNkRngwWm1sbGJHUk9ZVzFsSUQwZ0pHWnBaV3hrTG1acGJtUW9YQ0l1YzJZdGFXNXdkWFF0Y21Ga2FXOWNJaWt1WVhSMGNpaGNJbTVoYldWY0lpa3VjbVZ3YkdGalpTZ25XMTBuTENBbkp5azdYRzVjZEZ4MFhIUmNkSDFjYmx4MFhIUmNkRngwWld4elpWeHVYSFJjZEZ4MFhIUjdYRzVjZEZ4MFhIUmNkRngwWm1sbGJHUk9ZVzFsSUQwZ0pHMWxkR0ZmY21GdVoyVXVZWFIwY2loY0ltUmhkR0V0YzJZdFptbGxiR1F0Ym1GdFpWd2lLVHRjYmx4MFhIUmNkRngwZlZ4dVhHNWNkRngwWEhSOVhHNWNkRngwWEhSbGJITmxJR2xtS0dsdWNIVjBWSGx3WlQwOVhDSnlZVzVuWlMxelpXeGxZM1JjSWlsY2JseDBYSFJjZEh0Y2JseDBYSFJjZEZ4MEpHWnBaV3hrSUQwZ0pHTnZiblJoYVc1bGNpNW1hVzVrS0Z3aUxuTm1MV2x1Y0hWMExYTmxiR1ZqZEZ3aUtUdGNibHgwWEhSY2RGeDBkbUZ5SUNSdFpYUmhYM0poYm1kbElEMGdKR052Ym5SaGFXNWxjaTVtYVc1a0tGd2lMbk5tTFcxbGRHRXRjbUZ1WjJWY0lpazdYRzVjZEZ4MFhIUmNkRnh1WEhSY2RGeDBYSFF2TDNSb1pYSmxJR2x6SUdGdUlHVnNaVzFsYm5RZ2QybDBhQ0JoSUdaeWIyMHZkRzhnWTJ4aGMzTWdMU0J6YnlCM1pTQnVaV1ZrSUhSdklHZGxkQ0IwYUdVZ2RtRnNkV1Z6SUc5bUlIUm9aU0JtY205dElDWWdkRzhnYVc1d2RYUWdabWxsYkdSeklITmxjR1Z5WVhSbGJIbGNibHgwWEhSY2RGeDBYRzVjZEZ4MFhIUmNkR2xtS0NSbWFXVnNaQzVzWlc1bmRHZytNQ2xjYmx4MFhIUmNkRngwZTF4dVhIUmNkRngwWEhSY2RIWmhjaUJtYVdWc1pGOTJZV3h6SUQwZ1cxMDdYRzVjZEZ4MFhIUmNkRngwWEc1Y2RGeDBYSFJjZEZ4MEpHWnBaV3hrTG1WaFkyZ29ablZ1WTNScGIyNG9LWHRjYmx4MFhIUmNkRngwWEhSY2RGeHVYSFJjZEZ4MFhIUmNkRngwZG1GeUlDUjBhR2x6SUQwZ0pDaDBhR2x6S1R0Y2JseDBYSFJjZEZ4MFhIUmNkR1pwWld4a1gzWmhiSE11Y0hWemFDaHpaV3htTG1kbGRFMWxkR0ZUWld4bFkzUldZV3dvSkhSb2FYTXBLVHRjYmx4MFhIUmNkRngwWEhSY2RGeHVYSFJjZEZ4MFhIUmNkSDBwTzF4dVhIUmNkRngwWEhSY2RGeHVYSFJjZEZ4MFhIUmNkQzh2Y0hKbGRtVnVkQ0J6WldOdmJtUWdiblZ0WW1WeUlHWnliMjBnWW1WcGJtY2diRzkzWlhJZ2RHaGhiaUIwYUdVZ1ptbHljM1JjYmx4MFhIUmNkRngwWEhScFppaG1hV1ZzWkY5MllXeHpMbXhsYm1kMGFEMDlNaWxjYmx4MFhIUmNkRngwWEhSN1hHNWNkRngwWEhSY2RGeDBYSFJwWmloT2RXMWlaWElvWm1sbGJHUmZkbUZzYzFzeFhTazhUblZ0WW1WeUtHWnBaV3hrWDNaaGJITmJNRjBwS1Z4dVhIUmNkRngwWEhSY2RGeDBlMXh1WEhSY2RGeDBYSFJjZEZ4MFhIUm1hV1ZzWkY5MllXeHpXekZkSUQwZ1ptbGxiR1JmZG1Gc2Mxc3dYVHRjYmx4MFhIUmNkRngwWEhSY2RIMWNibHgwWEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFJjZEZ4MFhHNWNkRngwWEhSY2RGeDBYRzVjZEZ4MFhIUmNkRngwWm1sbGJHUldZV3dnUFNCbWFXVnNaRjkyWVd4ekxtcHZhVzRvWENJclhDSXBPMXh1WEhSY2RGeDBYSFI5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEc1Y2RGeDBYSFJjZEdsbUtDUm1hV1ZzWkM1c1pXNW5kR2c5UFRFcFhHNWNkRngwWEhSY2RIdGNibHgwWEhSY2RGeDBYSFJtYVdWc1pFNWhiV1VnUFNBa1ptbGxiR1F1WVhSMGNpaGNJbTVoYldWY0lpa3VjbVZ3YkdGalpTZ25XMTBuTENBbkp5azdYRzVjZEZ4MFhIUmNkSDFjYmx4MFhIUmNkRngwWld4elpWeHVYSFJjZEZ4MFhIUjdYRzVjZEZ4MFhIUmNkRngwWm1sbGJHUk9ZVzFsSUQwZ0pHMWxkR0ZmY21GdVoyVXVZWFIwY2loY0ltUmhkR0V0YzJZdFptbGxiR1F0Ym1GdFpWd2lLVHRjYmx4MFhIUmNkRngwZlZ4dVhIUmNkRngwWEhSY2JseDBYSFJjZEgxY2JseDBYSFJjZEdWc2MyVWdhV1lvYVc1d2RYUlVlWEJsUFQxY0luSmhibWRsTFdOb1pXTnJZbTk0WENJcFhHNWNkRngwWEhSN1hHNWNkRngwWEhSY2RDUm1hV1ZzWkNBOUlDUmpiMjUwWVdsdVpYSXVabWx1WkNoY0luVnNJRDRnYkdrZ2FXNXdkWFE2WTJobFkydGliM2hjSWlrN1hHNWNkRngwWEhSY2RGeHVYSFJjZEZ4MFhIUnBaaWdrWm1sbGJHUXViR1Z1WjNSb1BqQXBYRzVjZEZ4MFhIUmNkSHRjYmx4MFhIUmNkRngwWEhSbWFXVnNaRlpoYkNBOUlITmxiR1l1WjJWMFEyaGxZMnRpYjNoV1lXd29KR1pwWld4a0xDQmNJbUZ1WkZ3aUtUdGNibHgwWEhSY2RGeDBmVnh1WEhSY2RGeDBmVnh1WEhSY2RGeDBYRzVjZEZ4MFhIUnBaaWhtYVdWc1pFNWhiV1U5UFZ3aVhDSXBYRzVjZEZ4MFhIUjdYRzVjZEZ4MFhIUmNkR1pwWld4a1RtRnRaU0E5SUNSbWFXVnNaQzVoZEhSeUtGd2libUZ0WlZ3aUtTNXlaWEJzWVdObEtDZGJYU2NzSUNjbktUdGNibHgwWEhSY2RIMWNibHgwWEhSOVhHNWNkRngwWld4elpTQnBaaWh0WlhSaFZIbHdaVDA5WENKamFHOXBZMlZjSWlsY2JseDBYSFI3WEc1Y2RGeDBYSFJwWmlocGJuQjFkRlI1Y0dVOVBWd2ljMlZzWldOMFhDSXBYRzVjZEZ4MFhIUjdYRzVjZEZ4MFhIUmNkQ1JtYVdWc1pDQTlJQ1JqYjI1MFlXbHVaWEl1Wm1sdVpDaGNJbk5sYkdWamRGd2lLVHRjYmx4MFhIUmNkRngwWEc1Y2RGeDBYSFJjZEdacFpXeGtWbUZzSUQwZ2MyVnNaaTVuWlhSTlpYUmhVMlZzWldOMFZtRnNLQ1JtYVdWc1pDazdJRnh1WEhSY2RGeDBYSFJjYmx4MFhIUmNkSDFjYmx4MFhIUmNkR1ZzYzJVZ2FXWW9hVzV3ZFhSVWVYQmxQVDFjSW0xMWJIUnBjMlZzWldOMFhDSXBYRzVjZEZ4MFhIUjdYRzVjZEZ4MFhIUmNkQ1JtYVdWc1pDQTlJQ1JqYjI1MFlXbHVaWEl1Wm1sdVpDaGNJbk5sYkdWamRGd2lLVHRjYmx4MFhIUmNkRngwZG1GeUlHOXdaWEpoZEc5eUlEMGdKR1pwWld4a0xtRjBkSElvWENKa1lYUmhMVzl3WlhKaGRHOXlYQ0lwTzF4dVhIUmNkRngwWEhSY2JseDBYSFJjZEZ4MFptbGxiR1JXWVd3Z1BTQnpaV3htTG1kbGRFMWxkR0ZOZFd4MGFWTmxiR1ZqZEZaaGJDZ2tabWxsYkdRc0lHOXdaWEpoZEc5eUtUdGNibHgwWEhSY2RIMWNibHgwWEhSY2RHVnNjMlVnYVdZb2FXNXdkWFJVZVhCbFBUMWNJbU5vWldOclltOTRYQ0lwWEc1Y2RGeDBYSFI3WEc1Y2RGeDBYSFJjZENSbWFXVnNaQ0E5SUNSamIyNTBZV2x1WlhJdVptbHVaQ2hjSW5Wc0lENGdiR2tnYVc1d2RYUTZZMmhsWTJ0aWIzaGNJaWs3WEc1Y2RGeDBYSFJjZEZ4dVhIUmNkRngwWEhScFppZ2tabWxsYkdRdWJHVnVaM1JvUGpBcFhHNWNkRngwWEhSY2RIdGNibHgwWEhSY2RGeDBYSFIyWVhJZ2IzQmxjbUYwYjNJZ1BTQWtZMjl1ZEdGcGJtVnlMbVpwYm1Rb1hDSStJSFZzWENJcExtRjBkSElvWENKa1lYUmhMVzl3WlhKaGRHOXlYQ0lwTzF4dVhIUmNkRngwWEhSY2RHWnBaV3hrVm1Gc0lEMGdjMlZzWmk1blpYUk5aWFJoUTJobFkydGliM2hXWVd3b0pHWnBaV3hrTENCdmNHVnlZWFJ2Y2lrN1hHNWNkRngwWEhSY2RIMWNibHgwWEhSY2RIMWNibHgwWEhSY2RHVnNjMlVnYVdZb2FXNXdkWFJVZVhCbFBUMWNJbkpoWkdsdlhDSXBYRzVjZEZ4MFhIUjdYRzVjZEZ4MFhIUmNkQ1JtYVdWc1pDQTlJQ1JqYjI1MFlXbHVaWEl1Wm1sdVpDaGNJblZzSUQ0Z2JHa2dhVzV3ZFhRNmNtRmthVzljSWlrN1hHNWNkRngwWEhSY2RGeHVYSFJjZEZ4MFhIUnBaaWdrWm1sbGJHUXViR1Z1WjNSb1BqQXBYRzVjZEZ4MFhIUmNkSHRjYmx4MFhIUmNkRngwWEhSbWFXVnNaRlpoYkNBOUlITmxiR1l1WjJWMFRXVjBZVkpoWkdsdlZtRnNLQ1JtYVdWc1pDazdYRzVjZEZ4MFhIUmNkSDFjYmx4MFhIUmNkSDFjYmx4MFhIUmNkRnh1WEhSY2RGeDBabWxsYkdSV1lXd2dQU0JsYm1OdlpHVlZVa2xEYjIxd2IyNWxiblFvWm1sbGJHUldZV3dwTzF4dVhIUmNkRngwYVdZb2RIbHdaVzltS0NSbWFXVnNaQ2toUFQxY0luVnVaR1ZtYVc1bFpGd2lLVnh1WEhSY2RGeDBlMXh1WEhSY2RGeDBYSFJwWmlna1ptbGxiR1F1YkdWdVozUm9QakFwWEc1Y2RGeDBYSFJjZEh0Y2JseDBYSFJjZEZ4MFhIUm1hV1ZzWkU1aGJXVWdQU0FrWm1sbGJHUXVZWFIwY2loY0ltNWhiV1ZjSWlrdWNtVndiR0ZqWlNnblcxMG5MQ0FuSnlrN1hHNWNkRngwWEhSY2RGeDBYRzVjZEZ4MFhIUmNkRngwTHk5bWIzSWdkR2h2YzJVZ2QyaHZJR2x1YzJsemRDQnZiaUIxYzJsdVp5QW1JR0Z0Y0dWeWMyRnVaSE1nYVc0Z2RHaGxJRzVoYldVZ2IyWWdkR2hsSUdOMWMzUnZiU0JtYVdWc1pDQW9JU2xjYmx4MFhIUmNkRngwWEhSbWFXVnNaRTVoYldVZ1BTQW9abWxsYkdST1lXMWxLVHRjYmx4MFhIUmNkRngwZlZ4dVhIUmNkRngwZlZ4dVhIUmNkRngwWEc1Y2RGeDBmVnh1WEhSY2RHVnNjMlVnYVdZb2JXVjBZVlI1Y0dVOVBWd2laR0YwWlZ3aUtWeHVYSFJjZEh0Y2JseDBYSFJjZEhObGJHWXVjSEp2WTJWemMxQnZjM1JFWVhSbEtDUmpiMjUwWVdsdVpYSXBPMXh1WEhSY2RIMWNibHgwWEhSY2JseDBYSFJwWmloMGVYQmxiMllvWm1sbGJHUldZV3dwSVQxY0luVnVaR1ZtYVc1bFpGd2lLVnh1WEhSY2RIdGNibHgwWEhSY2RHbG1LR1pwWld4a1ZtRnNJVDFjSWx3aUtWeHVYSFJjZEZ4MGUxeHVYSFJjZEZ4MFhIUXZMM05sYkdZdWRYSnNYMk52YlhCdmJtVnVkSE1nS3owZ1hDSW1YQ0lyWlc1amIyUmxWVkpKUTI5dGNHOXVaVzUwS0dacFpXeGtUbUZ0WlNrclhDSTlYQ0lyS0dacFpXeGtWbUZzS1R0Y2JseDBYSFJjZEZ4MGMyVnNaaTUxY214ZmNHRnlZVzF6VzJWdVkyOWtaVlZTU1VOdmJYQnZibVZ1ZENobWFXVnNaRTVoYldVcFhTQTlJQ2htYVdWc1pGWmhiQ2s3WEc1Y2RGeDBYSFI5WEc1Y2RGeDBmVnh1WEhSOUxGeHVYSFJ3Y205alpYTnpVRzl6ZEVSaGRHVTZJR1oxYm1OMGFXOXVLQ1JqYjI1MFlXbHVaWElwWEc1Y2RIdGNibHgwWEhSMllYSWdjMlZzWmlBOUlIUm9hWE03WEc1Y2RGeDBYRzVjZEZ4MGRtRnlJR1pwWld4a1ZIbHdaU0E5SUNSamIyNTBZV2x1WlhJdVlYUjBjaWhjSW1SaGRHRXRjMll0Wm1sbGJHUXRkSGx3WlZ3aUtUdGNibHgwWEhSMllYSWdhVzV3ZFhSVWVYQmxJRDBnSkdOdmJuUmhhVzVsY2k1aGRIUnlLRndpWkdGMFlTMXpaaTFtYVdWc1pDMXBibkIxZEMxMGVYQmxYQ0lwTzF4dVhIUmNkRnh1WEhSY2RIWmhjaUFrWm1sbGJHUTdYRzVjZEZ4MGRtRnlJR1pwWld4a1RtRnRaU0E5SUZ3aVhDSTdYRzVjZEZ4MGRtRnlJR1pwWld4a1ZtRnNJRDBnWENKY0lqdGNibHgwWEhSY2JseDBYSFFrWm1sbGJHUWdQU0FrWTI5dWRHRnBibVZ5TG1acGJtUW9YQ0oxYkNBK0lHeHBJR2x1Y0hWME9uUmxlSFJjSWlrN1hHNWNkRngwWm1sbGJHUk9ZVzFsSUQwZ0pHWnBaV3hrTG1GMGRISW9YQ0p1WVcxbFhDSXBMbkpsY0d4aFkyVW9KMXRkSnl3Z0p5Y3BPMXh1WEhSY2RGeHVYSFJjZEhaaGNpQmtZWFJsY3lBOUlGdGRPMXh1WEhSY2RDUm1hV1ZzWkM1bFlXTm9LR1oxYm1OMGFXOXVLQ2w3WEc1Y2RGeDBYSFJjYmx4MFhIUmNkR1JoZEdWekxuQjFjMmdvSkNoMGFHbHpLUzUyWVd3b0tTazdYRzVjZEZ4MFhHNWNkRngwZlNrN1hHNWNkRngwWEc1Y2RGeDBhV1lvSkdacFpXeGtMbXhsYm1kMGFEMDlNaWxjYmx4MFhIUjdYRzVjZEZ4MFhIUnBaaWdvWkdGMFpYTmJNRjBoUFZ3aVhDSXBmSHdvWkdGMFpYTmJNVjBoUFZ3aVhDSXBLVnh1WEhSY2RGeDBlMXh1WEhSY2RGeDBYSFJtYVdWc1pGWmhiQ0E5SUdSaGRHVnpMbXB2YVc0b1hDSXJYQ0lwTzF4dVhIUmNkRngwWEhSbWFXVnNaRlpoYkNBOUlHWnBaV3hrVm1Gc0xuSmxjR3hoWTJVb0wxeGNMeTluTENjbktUdGNibHgwWEhSY2RIMWNibHgwWEhSOVhHNWNkRngwWld4elpTQnBaaWdrWm1sbGJHUXViR1Z1WjNSb1BUMHhLVnh1WEhSY2RIdGNibHgwWEhSY2RHbG1LR1JoZEdWeld6QmRJVDFjSWx3aUtWeHVYSFJjZEZ4MGUxeHVYSFJjZEZ4MFhIUm1hV1ZzWkZaaGJDQTlJR1JoZEdWekxtcHZhVzRvWENJclhDSXBPMXh1WEhSY2RGeDBYSFJtYVdWc1pGWmhiQ0E5SUdacFpXeGtWbUZzTG5KbGNHeGhZMlVvTDF4Y0x5OW5MQ2NuS1R0Y2JseDBYSFJjZEgxY2JseDBYSFI5WEc1Y2RGeDBYRzVjZEZ4MGFXWW9kSGx3Wlc5bUtHWnBaV3hrVm1Gc0tTRTlYQ0oxYm1SbFptbHVaV1JjSWlsY2JseDBYSFI3WEc1Y2RGeDBYSFJwWmlobWFXVnNaRlpoYkNFOVhDSmNJaWxjYmx4MFhIUmNkSHRjYmx4MFhIUmNkRngwZG1GeUlHWnBaV3hrVTJ4MVp5QTlJRndpWENJN1hHNWNkRngwWEhSY2RGeHVYSFJjZEZ4MFhIUnBaaWhtYVdWc1pFNWhiV1U5UFZ3aVgzTm1YM0J2YzNSZlpHRjBaVndpS1Z4dVhIUmNkRngwWEhSN1hHNWNkRngwWEhSY2RGeDBabWxsYkdSVGJIVm5JRDBnWENKd2IzTjBYMlJoZEdWY0lqdGNibHgwWEhSY2RGeDBmVnh1WEhSY2RGeDBYSFJsYkhObFhHNWNkRngwWEhSY2RIdGNibHgwWEhSY2RGeDBYSFJtYVdWc1pGTnNkV2NnUFNCbWFXVnNaRTVoYldVN1hHNWNkRngwWEhSY2RIMWNibHgwWEhSY2RGeDBYRzVjZEZ4MFhIUmNkR2xtS0dacFpXeGtVMngxWnlFOVhDSmNJaWxjYmx4MFhIUmNkRngwZTF4dVhIUmNkRngwWEhSY2RDOHZjMlZzWmk1MWNteGZZMjl0Y0c5dVpXNTBjeUFyUFNCY0lpWmNJaXRtYVdWc1pGTnNkV2NyWENJOVhDSXJabWxsYkdSV1lXdzdYRzVjZEZ4MFhIUmNkRngwYzJWc1ppNTFjbXhmY0dGeVlXMXpXMlpwWld4a1UyeDFaMTBnUFNCbWFXVnNaRlpoYkR0Y2JseDBYSFJjZEZ4MGZWeHVYSFJjZEZ4MGZWeHVYSFJjZEgxY2JseDBYSFJjYmx4MGZTeGNibHgwY0hKdlkyVnpjMVJoZUc5dWIyMTVPaUJtZFc1amRHbHZiaWdrWTI5dWRHRnBibVZ5TENCeVpYUjFjbTVmYjJKcVpXTjBLVnh1WEhSN1hHNGdJQ0FnSUNBZ0lHbG1LSFI1Y0dWdlppaHlaWFIxY201ZmIySnFaV04wS1QwOVhDSjFibVJsWm1sdVpXUmNJaWxjYmlBZ0lDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdVgyOWlhbVZqZENBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnSUNCOVhHNWNibHgwWEhRdkwybG1LQ2xjZEZ4MFhIUmNkRngwWEc1Y2RGeDBMeTkyWVhJZ1ptbGxiR1JPWVcxbElEMGdKQ2gwYUdsektTNWhkSFJ5S0Z3aVpHRjBZUzF6WmkxbWFXVnNaQzF1WVcxbFhDSXBPMXh1WEhSY2RIWmhjaUJ6Wld4bUlEMGdkR2hwY3p0Y2JseDBYRzVjZEZ4MGRtRnlJR1pwWld4a1ZIbHdaU0E5SUNSamIyNTBZV2x1WlhJdVlYUjBjaWhjSW1SaGRHRXRjMll0Wm1sbGJHUXRkSGx3WlZ3aUtUdGNibHgwWEhSMllYSWdhVzV3ZFhSVWVYQmxJRDBnSkdOdmJuUmhhVzVsY2k1aGRIUnlLRndpWkdGMFlTMXpaaTFtYVdWc1pDMXBibkIxZEMxMGVYQmxYQ0lwTzF4dVhIUmNkRnh1WEhSY2RIWmhjaUFrWm1sbGJHUTdYRzVjZEZ4MGRtRnlJR1pwWld4a1RtRnRaU0E5SUZ3aVhDSTdYRzVjZEZ4MGRtRnlJR1pwWld4a1ZtRnNJRDBnWENKY0lqdGNibHgwWEhSY2JseDBYSFJwWmlocGJuQjFkRlI1Y0dVOVBWd2ljMlZzWldOMFhDSXBYRzVjZEZ4MGUxeHVYSFJjZEZ4MEpHWnBaV3hrSUQwZ0pHTnZiblJoYVc1bGNpNW1hVzVrS0Z3aWMyVnNaV04wWENJcE8xeHVYSFJjZEZ4MFptbGxiR1JPWVcxbElEMGdKR1pwWld4a0xtRjBkSElvWENKdVlXMWxYQ0lwTG5KbGNHeGhZMlVvSjF0ZEp5d2dKeWNwTzF4dVhIUmNkRngwWEc1Y2RGeDBYSFJtYVdWc1pGWmhiQ0E5SUhObGJHWXVaMlYwVTJWc1pXTjBWbUZzS0NSbWFXVnNaQ2s3SUZ4dVhIUmNkSDFjYmx4MFhIUmxiSE5sSUdsbUtHbHVjSFYwVkhsd1pUMDlYQ0p0ZFd4MGFYTmxiR1ZqZEZ3aUtWeHVYSFJjZEh0Y2JseDBYSFJjZENSbWFXVnNaQ0E5SUNSamIyNTBZV2x1WlhJdVptbHVaQ2hjSW5ObGJHVmpkRndpS1R0Y2JseDBYSFJjZEdacFpXeGtUbUZ0WlNBOUlDUm1hV1ZzWkM1aGRIUnlLRndpYm1GdFpWd2lLUzV5WlhCc1lXTmxLQ2RiWFNjc0lDY25LVHRjYmx4MFhIUmNkSFpoY2lCdmNHVnlZWFJ2Y2lBOUlDUm1hV1ZzWkM1aGRIUnlLRndpWkdGMFlTMXZjR1Z5WVhSdmNsd2lLVHRjYmx4MFhIUmNkRnh1WEhSY2RGeDBabWxsYkdSV1lXd2dQU0J6Wld4bUxtZGxkRTExYkhScFUyVnNaV04wVm1Gc0tDUm1hV1ZzWkN3Z2IzQmxjbUYwYjNJcE8xeHVYSFJjZEgxY2JseDBYSFJsYkhObElHbG1LR2x1Y0hWMFZIbHdaVDA5WENKamFHVmphMkp2ZUZ3aUtWeHVYSFJjZEh0Y2JseDBYSFJjZENSbWFXVnNaQ0E5SUNSamIyNTBZV2x1WlhJdVptbHVaQ2hjSW5Wc0lENGdiR2tnYVc1d2RYUTZZMmhsWTJ0aWIzaGNJaWs3WEc1Y2RGeDBYSFJwWmlna1ptbGxiR1F1YkdWdVozUm9QakFwWEc1Y2RGeDBYSFI3WEc1Y2RGeDBYSFJjZEdacFpXeGtUbUZ0WlNBOUlDUm1hV1ZzWkM1aGRIUnlLRndpYm1GdFpWd2lLUzV5WlhCc1lXTmxLQ2RiWFNjc0lDY25LVHRjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhHNWNkRngwWEhSY2RIWmhjaUJ2Y0dWeVlYUnZjaUE5SUNSamIyNTBZV2x1WlhJdVptbHVaQ2hjSWo0Z2RXeGNJaWt1WVhSMGNpaGNJbVJoZEdFdGIzQmxjbUYwYjNKY0lpazdYRzVjZEZ4MFhIUmNkR1pwWld4a1ZtRnNJRDBnYzJWc1ppNW5aWFJEYUdWamEySnZlRlpoYkNna1ptbGxiR1FzSUc5d1pYSmhkRzl5S1R0Y2JseDBYSFJjZEgxY2JseDBYSFI5WEc1Y2RGeDBaV3h6WlNCcFppaHBibkIxZEZSNWNHVTlQVndpY21Ga2FXOWNJaWxjYmx4MFhIUjdYRzVjZEZ4MFhIUWtabWxsYkdRZ1BTQWtZMjl1ZEdGcGJtVnlMbVpwYm1Rb1hDSjFiQ0ErSUd4cElHbHVjSFYwT25KaFpHbHZYQ0lwTzF4dVhIUmNkRngwYVdZb0pHWnBaV3hrTG14bGJtZDBhRDR3S1Z4dVhIUmNkRngwZTF4dVhIUmNkRngwWEhSbWFXVnNaRTVoYldVZ1BTQWtabWxsYkdRdVlYUjBjaWhjSW01aGJXVmNJaWt1Y21Wd2JHRmpaU2duVzEwbkxDQW5KeWs3WEc1Y2RGeDBYSFJjZEZ4dVhIUmNkRngwWEhSbWFXVnNaRlpoYkNBOUlITmxiR1l1WjJWMFVtRmthVzlXWVd3b0pHWnBaV3hrS1R0Y2JseDBYSFJjZEgxY2JseDBYSFI5WEc1Y2RGeDBYRzVjZEZ4MGFXWW9kSGx3Wlc5bUtHWnBaV3hrVm1Gc0tTRTlYQ0oxYm1SbFptbHVaV1JjSWlsY2JseDBYSFI3WEc1Y2RGeDBYSFJwWmlobWFXVnNaRlpoYkNFOVhDSmNJaWxjYmx4MFhIUmNkSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmloeVpYUjFjbTVmYjJKcVpXTjBQVDEwY25WbEtWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSHR1WVcxbE9pQm1hV1ZzWkU1aGJXVXNJSFpoYkhWbE9pQm1hV1ZzWkZaaGJIMDdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1ZzYzJWY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2YzJWc1ppNTFjbXhmWTI5dGNHOXVaVzUwY3lBclBTQmNJaVpjSWl0bWFXVnNaRTVoYldVclhDSTlYQ0lyWm1sbGJHUldZV3c3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxiR1l1ZFhKc1gzQmhjbUZ0YzF0bWFXVnNaRTVoYldWZElEMGdabWxsYkdSV1lXdzdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmVnh1WEc1Y2RGeDBYSFI5WEc1Y2RGeDBmVnh1WEc0Z0lDQWdJQ0FnSUdsbUtISmxkSFZ5Ymw5dlltcGxZM1E5UFhSeWRXVXBYRzRnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnZlZ4dVhIUjlYRzU5T3lKZGZRPT0iLCJcbm1vZHVsZS5leHBvcnRzID0ge1xuXHRcblx0c2VhcmNoRm9ybXM6IHt9LFxuXHRcblx0aW5pdDogZnVuY3Rpb24oKXtcblx0XHRcblx0XHRcblx0fSxcblx0YWRkU2VhcmNoRm9ybTogZnVuY3Rpb24oaWQsIG9iamVjdCl7XG5cdFx0XG5cdFx0dGhpcy5zZWFyY2hGb3Jtc1tpZF0gPSBvYmplY3Q7XG5cdH0sXG5cdGdldFNlYXJjaEZvcm06IGZ1bmN0aW9uKGlkKVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuc2VhcmNoRm9ybXNbaWRdO1x0XG5cdH1cblx0XG59OyIsIihmdW5jdGlvbiAoZ2xvYmFsKXtcblxudmFyICQgXHRcdFx0XHQ9ICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93WydqUXVlcnknXSA6IHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWxbJ2pRdWVyeSddIDogbnVsbCk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuXHRcblx0aW5pdDogZnVuY3Rpb24oKXtcblx0XHQkKGRvY3VtZW50KS5vbihcInNmOmFqYXhmaW5pc2hcIiwgXCIuc2VhcmNoYW5kZmlsdGVyXCIsIGZ1bmN0aW9uKCBlLCBkYXRhICkge1xuXHRcdFx0dmFyIGRpc3BsYXlfbWV0aG9kID0gZGF0YS5vYmplY3QuZGlzcGxheV9yZXN1bHRfbWV0aG9kO1xuXHRcdFx0aWYgKCBkaXNwbGF5X21ldGhvZCA9PT0gJ2N1c3RvbV9lZGRfc3RvcmUnICkge1xuXHRcdFx0XHQkKCdpbnB1dC5lZGQtYWRkLXRvLWNhcnQnKS5jc3MoJ2Rpc3BsYXknLCBcIm5vbmVcIik7XG5cdFx0XHRcdCQoJ2EuZWRkLWFkZC10by1jYXJ0JykuYWRkQ2xhc3MoJ2VkZC1oYXMtanMnKTtcblx0XHRcdH0gZWxzZSBpZiAoIGRpc3BsYXlfbWV0aG9kID09PSAnY3VzdG9tX2xheW91dHMnICkge1xuXHRcdFx0XHRpZiAoICQoJy5jbC1sYXlvdXQnKS5oYXNDbGFzcyggJ2NsLWxheW91dC0tbWFzb25yeScgKSApIHtcblx0XHRcdFx0XHQvL3RoZW4gcmUtaW5pdCBtYXNvbnJ5XG5cdFx0XHRcdFx0Y29uc3QgbWFzb25yeUNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoICcuY2wtbGF5b3V0LS1tYXNvbnJ5JyApO1xuXHRcdFx0XHRcdGlmICggbWFzb25yeUNvbnRhaW5lci5sZW5ndGggPiAwICkge1xuXHRcdFx0XHRcdFx0Y29uc3QgY3VzdG9tTGF5b3V0R3JpZCA9IG5ldyBNYXNvbnJ5KCAnLmNsLWxheW91dC0tbWFzb25yeScsIHtcblx0XHRcdFx0XHRcdFx0Ly8gb3B0aW9ucy4uLlxuXHRcdFx0XHRcdFx0XHRpdGVtU2VsZWN0b3I6ICcuY2wtbGF5b3V0X19pdGVtJyxcblx0XHRcdFx0XHRcdFx0Ly9jb2x1bW5XaWR0aDogMzE5XG5cdFx0XHRcdFx0XHRcdHBlcmNlbnRQb3NpdGlvbjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0Ly9ndXR0ZXI6IDEwLFxuXHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uRHVyYXRpb246IDAsXG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRpbWFnZXNMb2FkZWQoIG1hc29ucnlDb250YWluZXIgKS5vbiggJ3Byb2dyZXNzJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdGN1c3RvbUxheW91dEdyaWQubGF5b3V0KCk7XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cbn07XG59KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSlcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0OnV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYkluTnlZeTl3ZFdKc2FXTXZZWE56WlhSekwycHpMMmx1WTJ4MVpHVnpMM1JvYVhKa2NHRnlkSGt1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWp0QlFVRkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CSWl3aVptbHNaU0k2SW1kbGJtVnlZWFJsWkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmNiblpoY2lBa0lGeDBYSFJjZEZ4MFBTQW9kSGx3Wlc5bUlIZHBibVJ2ZHlBaFBUMGdYQ0oxYm1SbFptbHVaV1JjSWlBL0lIZHBibVJ2ZDFzbmFsRjFaWEo1SjEwZ09pQjBlWEJsYjJZZ1oyeHZZbUZzSUNFOVBTQmNJblZ1WkdWbWFXNWxaRndpSUQ4Z1oyeHZZbUZzV3lkcVVYVmxjbmtuWFNBNklHNTFiR3dwTzF4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlIdGNibHgwWEc1Y2RHbHVhWFE2SUdaMWJtTjBhVzl1S0NsN1hHNWNkRngwSkNoa2IyTjFiV1Z1ZENrdWIyNG9YQ0p6WmpwaGFtRjRabWx1YVhOb1hDSXNJRndpTG5ObFlYSmphR0Z1WkdacGJIUmxjbHdpTENCbWRXNWpkR2x2YmlnZ1pTd2daR0YwWVNBcElIdGNibHgwWEhSY2RIWmhjaUJrYVhOd2JHRjVYMjFsZEdodlpDQTlJR1JoZEdFdWIySnFaV04wTG1ScGMzQnNZWGxmY21WemRXeDBYMjFsZEdodlpEdGNibHgwWEhSY2RHbG1JQ2dnWkdsemNHeGhlVjl0WlhSb2IyUWdQVDA5SUNkamRYTjBiMjFmWldSa1gzTjBiM0psSnlBcElIdGNibHgwWEhSY2RGeDBKQ2duYVc1d2RYUXVaV1JrTFdGa1pDMTBieTFqWVhKMEp5a3VZM056S0Nka2FYTndiR0Y1Snl3Z1hDSnViMjVsWENJcE8xeHVYSFJjZEZ4MFhIUWtLQ2RoTG1Wa1pDMWhaR1F0ZEc4dFkyRnlkQ2NwTG1Ga1pFTnNZWE56S0NkbFpHUXRhR0Z6TFdwekp5azdYRzVjZEZ4MFhIUjlJR1ZzYzJVZ2FXWWdLQ0JrYVhOd2JHRjVYMjFsZEdodlpDQTlQVDBnSjJOMWMzUnZiVjlzWVhsdmRYUnpKeUFwSUh0Y2JseDBYSFJjZEZ4MGFXWWdLQ0FrS0NjdVkyd3RiR0Y1YjNWMEp5a3VhR0Z6UTJ4aGMzTW9JQ2RqYkMxc1lYbHZkWFF0TFcxaGMyOXVjbmtuSUNrZ0tTQjdYRzVjZEZ4MFhIUmNkRngwTHk5MGFHVnVJSEpsTFdsdWFYUWdiV0Z6YjI1eWVWeHVYSFJjZEZ4MFhIUmNkR052Ym5OMElHMWhjMjl1Y25sRGIyNTBZV2x1WlhJZ1BTQmtiMk4xYldWdWRDNXhkV1Z5ZVZObGJHVmpkRzl5UVd4c0tDQW5MbU5zTFd4aGVXOTFkQzB0YldGemIyNXllU2NnS1R0Y2JseDBYSFJjZEZ4MFhIUnBaaUFvSUcxaGMyOXVjbmxEYjI1MFlXbHVaWEl1YkdWdVozUm9JRDRnTUNBcElIdGNibHgwWEhSY2RGeDBYSFJjZEdOdmJuTjBJR04xYzNSdmJVeGhlVzkxZEVkeWFXUWdQU0J1WlhjZ1RXRnpiMjV5ZVNnZ0p5NWpiQzFzWVhsdmRYUXRMVzFoYzI5dWNua25MQ0I3WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkQzh2SUc5d2RHbHZibk11TGk1Y2JseDBYSFJjZEZ4MFhIUmNkRngwYVhSbGJWTmxiR1ZqZEc5eU9pQW5MbU5zTFd4aGVXOTFkRjlmYVhSbGJTY3NYRzVjZEZ4MFhIUmNkRngwWEhSY2RDOHZZMjlzZFcxdVYybGtkR2c2SURNeE9WeHVYSFJjZEZ4MFhIUmNkRngwWEhSd1pYSmpaVzUwVUc5emFYUnBiMjQ2SUhSeWRXVXNYRzVjZEZ4MFhIUmNkRngwWEhSY2RDOHZaM1YwZEdWeU9pQXhNQ3hjYmx4MFhIUmNkRngwWEhSY2RGeDBkSEpoYm5OcGRHbHZia1IxY21GMGFXOXVPaUF3TEZ4dVhIUmNkRngwWEhSY2RGeDBmU0FwTzF4dVhIUmNkRngwWEhSY2RGeDBhVzFoWjJWelRHOWhaR1ZrS0NCdFlYTnZibko1UTI5dWRHRnBibVZ5SUNrdWIyNG9JQ2R3Y205bmNtVnpjeWNzSUdaMWJtTjBhVzl1S0NrZ2UxeHVYSFJjZEZ4MFhIUmNkRngwWEhSamRYTjBiMjFNWVhsdmRYUkhjbWxrTG14aGVXOTFkQ2dwTzF4dVhIUmNkRngwWEhSY2RGeDBmU0FwTzF4dVhIUmNkRngwWEhSY2RIMWNibHgwWEhSY2RGeDBmVnh1WEhSY2RGeDBmVnh1WEhSY2RIMHBPMXh1WEhSOUxGeHVYRzU5T3lKZGZRPT0iXX0=
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/search-filter-build.min.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/search-filter-build.min.js
deleted file mode 100644
index 566f3604..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/search-filter-build.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-!function t(e,a,r){function n(s,o){if(!a[s]){if(!e[s]){var l="function"==typeof require&&require;if(!o&&l)return l(s,!0);if(i)return i(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var c=a[s]={exports:{}};e[s][0].call(c.exports,function(t){var a=e[s][1][t];return n(a?a:t)},c,c.exports,t,e,a,r)}return a[s].exports}for(var i="function"==typeof require&&require,s=0;sh&&(m=!0,h=Math.abs(h)),e!==!1&&(h=i(h,e)),h=h.toString(),-1!==h.indexOf(".")?(_=h.split("."),g=_[0],r&&(x=r+_[1])):g=h,a&&(g=t(g).match(/.{1,3}/g),g=t(g.join(t(a)))),m&&c&&(y+=c),s&&(y+=s),m&&f&&(y+=f),y+=g,y+=x,o&&(y+=o),d&&(y=d(y,v)),y)}function o(t,r,i,s,o,l,u,c,f,d,p,h){var m,_="";return p&&(h=p(h)),!(!h||"string"!=typeof h)&&(c&&e(h,c)&&(h=h.replace(c,""),m=!0),s&&e(h,s)&&(h=h.replace(s,"")),f&&e(h,f)&&(h=h.replace(f,""),m=!0),o&&a(h,o)&&(h=h.slice(0,-1*o.length)),r&&(h=h.split(r).join("")),i&&(h=h.replace(i,".")),m&&(_+="-"),_+=h,_=_.replace(/[^0-9\.\-.]/g,""),""!==_&&(_=Number(_),u&&(_=u(_)),!!n(_)&&_))}function l(t){var e,a,n,i={};for(e=0;e=0&&8>n))throw new Error(a);i[a]=n}else if("encoder"===a||"decoder"===a||"edit"===a||"undo"===a){if("function"!=typeof n)throw new Error(a);i[a]=n}else{if("string"!=typeof n)throw new Error(a);i[a]=n}return r(i,"mark","thousand"),r(i,"prefix","negative"),r(i,"prefix","negativeBefore"),i}function u(t,e,a){var r,n=[];for(r=0;r0&&(d(t,e),setTimeout(function(){p(t,e)},a))}function u(t){return Math.max(Math.min(t,100),0)}function c(t){return Array.isArray(t)?t:[t]}function f(t){t=String(t);var e=t.split(".");return e.length>1?e[1].length:0}function d(t,e){t.classList?t.classList.add(e):t.className+=" "+e}function p(t,e){t.classList?t.classList.remove(e):t.className=t.className.replace(new RegExp("(^|\\b)"+e.split(" ").join("|")+"(\\b|$)","gi")," ")}function h(t,e){return t.classList?t.classList.contains(e):new RegExp("\\b"+e+"\\b").test(t.className)}function m(t){var e=void 0!==window.pageXOffset,a="CSS1Compat"===(t.compatMode||""),r=e?window.pageXOffset:a?t.documentElement.scrollLeft:t.body.scrollLeft,n=e?window.pageYOffset:a?t.documentElement.scrollTop:t.body.scrollTop;return{x:r,y:n}}function _(){return window.navigator.pointerEnabled?{start:"pointerdown",move:"pointermove",end:"pointerup"}:window.navigator.msPointerEnabled?{start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}:{start:"mousedown touchstart",move:"mousemove touchmove",end:"mouseup touchend"}}function g(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("test",null,e)}catch(a){}return t}function v(){return window.CSS&&CSS.supports&&CSS.supports("touch-action","none")}function x(t,e){return 100/(e-t)}function y(t,e){return 100*e/(t[1]-t[0])}function b(t,e){return y(t,t[0]<0?e+Math.abs(t[0]):e-t[0])}function j(t,e){return e*(t[1]-t[0])/100+t[0]}function w(t,e){for(var a=1;t>=e[a];)a+=1;return a}function S(t,e,a){if(a>=t.slice(-1)[0])return 100;var r=w(a,t),n=t[r-1],i=t[r],s=e[r-1],o=e[r];return s+b([n,i],a)/x(s,o)}function U(t,e,a){if(a>=100)return t.slice(-1)[0];var r=w(a,e),n=t[r-1],i=t[r],s=e[r-1],o=e[r];return j([n,i],(a-s)*x(s,o))}function C(t,e,a,r){if(100===r)return r;var n=w(r,t),s=t[n-1],o=t[n];return a?r-s>(o-s)/2?o:s:e[n-1]?t[n-1]+i(r-t[n-1],e[n-1]):r}function E(t,e,a){var r;if("number"==typeof e&&(e=[e]),!Array.isArray(e))throw new Error("noUiSlider ("+K+"): 'range' contains invalid value.");if(r="min"===t?0:"max"===t?100:parseFloat(t),!o(r)||!o(e[0]))throw new Error("noUiSlider ("+K+"): 'range' value isn't numeric.");a.xPct.push(r),a.xVal.push(e[0]),r?a.xSteps.push(!isNaN(e[1])&&e[1]):isNaN(e[1])||(a.xSteps[0]=e[1]),a.xHighestCompleteStep.push(0)}function A(t,e,a){if(!e)return!0;a.xSteps[t]=y([a.xVal[t],a.xVal[t+1]],e)/x(a.xPct[t],a.xPct[t+1]);var r=(a.xVal[t+1]-a.xVal[t])/a.xNumSteps[t],n=Math.ceil(Number(r.toFixed(3))-1),i=a.xVal[t]+a.xNumSteps[t]*n;a.xHighestCompleteStep[t]=i}function P(t,e,a){this.xPct=[],this.xVal=[],this.xSteps=[a||!1],this.xNumSteps=[!1],this.xHighestCompleteStep=[],this.snap=e;var r,n=[];for(r in t)t.hasOwnProperty(r)&&n.push([t[r],r]);for(n.length&&"object"==typeof n[0][0]?n.sort(function(t,e){return t[0][0]-e[0][0]}):n.sort(function(t,e){return t[0]-e[0]}),r=0;r=100)throw new Error("noUiSlider ("+K+"): 'padding' option must not exceed 100% of the range.")}}function q(t,e){switch(e){case"ltr":t.dir=0;break;case"rtl":t.dir=1;break;default:throw new Error("noUiSlider ("+K+"): 'direction' option was not recognized.")}}function D(t,e){if("string"!=typeof e)throw new Error("noUiSlider ("+K+"): 'behaviour' must be a string containing options.");var a=e.indexOf("tap")>=0,r=e.indexOf("drag")>=0,n=e.indexOf("fixed")>=0,i=e.indexOf("snap")>=0,s=e.indexOf("hover")>=0;if(n){if(2!==t.handles)throw new Error("noUiSlider ("+K+"): 'fixed' behaviour must be used with 2 handles");L(t,t.start[1]-t.start[0])}t.events={tap:a||i,drag:r,fixed:n,snap:i,hover:s}}function H(t,e){if(e!==!1)if(e===!0){t.tooltips=[];for(var a=0;a= 2) required for mode 'count'.");var r=e-1,n=100/r;for(e=[];r--;)e[r]=r*n;e.push(100),t="positions"}return"positions"===t?e.map(function(t){return bt.fromStepping(a?bt.getStep(t):t)}):"values"===t?a?e.map(function(t){return bt.fromStepping(bt.getStep(bt.toStepping(t)))}):e:void 0}function C(t,e,a){function r(t,e){return(t+e).toFixed(7)/1}var i={},s=bt.xVal[0],o=bt.xVal[bt.xVal.length-1],l=!1,u=!1,c=0;return a=n(a.slice().sort(function(t,e){return t-e})),a[0]!==s&&(a.unshift(s),l=!0),a[a.length-1]!==o&&(a.push(o),u=!0),a.forEach(function(n,s){var o,f,d,p,h,m,_,g,v,x,y=n,b=a[s+1];if("steps"===e&&(o=bt.xNumSteps[s]),o||(o=b-y),y!==!1&&void 0!==b)for(o=Math.max(o,1e-7),f=y;f<=b;f=r(f,o)){for(p=bt.toStepping(f),h=p-c,g=h/t,v=Math.round(g),x=h/v,d=1;d<=v;d+=1)m=c+d*x,i[m.toFixed(5)]=["x",0];_=a.indexOf(f)>-1?1:"steps"===e?2:0,!s&&l&&(_=0),f===b&&u||(i[p.toFixed(5)]=[f,_]),c=p}}),i}function E(t,e,r){function n(t,e){var r=e===a.cssClasses.value,n=r?c:f,i=r?l:u;return e+" "+n[a.ort]+" "+i[t]}function i(t,i){i[1]=i[1]&&e?e(i[0],i[1]):i[1];var l=o(s,!1);l.className=n(i[1],a.cssClasses.marker),l.style[a.style]=t+"%",i[1]&&(l=o(s,!1),l.className=n(i[1],a.cssClasses.value),l.setAttribute("data-value",i[0]),l.style[a.style]=t+"%",l.innerText=r.to(i[0]))}var s=St.createElement("div"),l=[a.cssClasses.valueNormal,a.cssClasses.valueLarge,a.cssClasses.valueSub],u=[a.cssClasses.markerNormal,a.cssClasses.markerLarge,a.cssClasses.markerSub],c=[a.cssClasses.valueHorizontal,a.cssClasses.valueVertical],f=[a.cssClasses.markerHorizontal,a.cssClasses.markerVertical];return d(s,a.cssClasses.pips),d(s,0===a.ort?a.cssClasses.pipsHorizontal:a.cssClasses.pipsVertical),Object.keys(t).forEach(function(e){i(e,t[e])}),s}function A(){pt&&(e(pt),pt=null)}function P(t){A();var e=t.mode,a=t.density||1,r=t.filter||!1,n=t.values||!1,i=t.stepped||!1,s=U(e,n,i),o=C(a,e,s),l=t.format||{to:Math.round};return pt=gt.appendChild(E(o,r,l))}function k(){var t=ut.getBoundingClientRect(),e="offset"+["Width","Height"][a.ort];return 0===a.ort?t.width||ut[e]:t.height||ut[e]}function F(t,e,r,n){var i=function(i){return!!(i=O(i,n.pageOffset,n.target||e))&&(!(gt.hasAttribute("disabled")&&!n.doNotReject)&&(!(h(gt,a.cssClasses.tap)&&!n.doNotReject)&&(!(t===ht.start&&void 0!==i.buttons&&i.buttons>1)&&((!n.hover||!i.buttons)&&(_t||i.preventDefault(),i.calcPoint=i.points[a.ort],void r(i,n))))))},s=[];return t.split(" ").forEach(function(t){e.addEventListener(t,i,!!_t&&{passive:!0}),s.push([t,i])}),s}function O(t,e,a){var r,n,i=0===t.type.indexOf("touch"),s=0===t.type.indexOf("mouse"),o=0===t.type.indexOf("pointer");if(0===t.type.indexOf("MSPointer")&&(o=!0),i){var l=function(t){return t.target===a||a.contains(t.target)};if("touchstart"===t.type){var u=Array.prototype.filter.call(t.touches,l);if(u.length>1)return!1;r=u[0].pageX,n=u[0].pageY}else{var c=Array.prototype.find.call(t.changedTouches,l);if(!c)return!1;r=c.pageX,n=c.pageY}}return e=e||m(St),(s||o)&&(r=t.clientX+e.x,n=t.clientY+e.y),t.pageOffset=e,t.points=[r,n],t.cursor=s||o,t}function R(t){var e=t-s(ut,a.ort),r=100*e/k();return r=u(r),a.dir?100-r:r}function N(t){var e=100,a=!1;return ct.forEach(function(r,n){if(!r.hasAttribute("disabled")){var i=Math.abs(vt[n]-t);(i0,n,e.locations,e.handleNumbers)}function V(t,e){e.handle&&(p(e.handle,a.cssClasses.active),yt-=1),e.listeners.forEach(function(t){Ut.removeEventListener(t[0],t[1])}),0===yt&&(p(gt,a.cssClasses.drag),Z(),t.cursor&&(Ct.style.cursor="",Ct.removeEventListener("selectstart",r))),e.handleNumbers.forEach(function(t){H("change",t),H("set",t),H("end",t)})}function I(t,e){var n;if(1===e.handleNumbers.length){var i=ct[e.handleNumbers[0]];if(i.hasAttribute("disabled"))return!1;n=i.children[0],yt+=1,d(n,a.cssClasses.active)}t.stopPropagation();var s=[],o=F(ht.move,Ut,T,{target:t.target,handle:n,listeners:s,startCalcPoint:t.calcPoint,baseSize:k(),pageOffset:t.pageOffset,handleNumbers:e.handleNumbers,buttonsProperty:t.buttons,locations:vt.slice()}),l=F(ht.end,Ut,V,{target:t.target,handle:n,listeners:s,doNotReject:!0,handleNumbers:e.handleNumbers}),u=F("mouseout",Ut,M,{target:t.target,handle:n,listeners:s,doNotReject:!0,handleNumbers:e.handleNumbers});s.push.apply(s,o.concat(l,u)),t.cursor&&(Ct.style.cursor=getComputedStyle(t.target).cursor,ct.length>1&&d(gt,a.cssClasses.drag),Ct.addEventListener("selectstart",r,!1)),e.handleNumbers.forEach(function(t){H("start",t)})}function L(t){t.stopPropagation();var e=R(t.calcPoint),r=N(e);return r!==!1&&(a.events.snap||l(gt,a.cssClasses.tap,a.animationDuration),tt(r,e,!0,!0),Z(),H("slide",r,!0),H("update",r,!0),H("change",r,!0),H("set",r,!0),void(a.events.snap&&I(t,{handleNumbers:[r]})))}function $(t){var e=R(t.calcPoint),a=bt.getStep(e),r=bt.fromStepping(a);Object.keys(wt).forEach(function(t){"hover"===t.split(".")[0]&&wt[t].forEach(function(t){t.call(dt,r)})})}function Q(t){t.fixed||ct.forEach(function(t,e){F(ht.start,t.children[0],I,{handleNumbers:[e]})}),t.tap&&F(ht.start,ut,L,{}),t.hover&&F(ht.move,ut,$,{hover:!0}),t.drag&&ft.forEach(function(e,r){if(e!==!1&&0!==r&&r!==ft.length-1){var n=ct[r-1],i=ct[r],s=[e];d(e,a.cssClasses.draggable),t.fixed&&(s.push(n.children[0]),s.push(i.children[0])),s.forEach(function(t){F(ht.start,t,I,{handles:[n,i],handleNumbers:[r-1,r]})})}})}function q(t,e){wt[t]=wt[t]||[],wt[t].push(e),"update"===t.split(".")[0]&&ct.forEach(function(t,e){H("update",e)})}function D(t){var e=t&&t.split(".")[0],a=e&&t.substring(e.length);Object.keys(wt).forEach(function(t){var r=t.split(".")[0],n=t.substring(r.length);e&&e!==r||a&&a!==n||delete wt[t]})}function H(t,e,r){Object.keys(wt).forEach(function(n){var i=n.split(".")[0];t===i&&wt[n].forEach(function(t){t.call(dt,jt.map(a.format.to),e,jt.slice(),r||!1,vt.slice())})})}function z(t){return t+"%"}function B(t,e,r,n,i,s){return ct.length>1&&(n&&e>0&&(r=Math.max(r,t[e-1]+a.margin)),i&&e1&&a.limit&&(n&&e>0&&(r=Math.min(r,t[e-1]+a.limit)),i&&e1?r.forEach(function(t,a){var r=B(n,t,n[t]+e,i[a],s[a],!1);r===!1?e=0:(e=r-n[t],n[t]=r)}):i=s=[!0];var o=!1;r.forEach(function(t,r){o=tt(t,a[t]+e,i[r],s[r])||o}),o&&r.forEach(function(t){H("update",t),H("slide",t)})}function J(t,e){return a.dir?100-t-e:t}function G(t,e){vt[t]=e,jt[t]=bt.fromStepping(e);var r="translate("+W(z(J(e,0)-Et),"0")+")";ct[t].style[a.transformRule]=r,et(t),et(t+1)}function Z(){xt.forEach(function(t){var e=vt[t]>50?-1:1,a=3+(ct.length+e*t);ct[t].style.zIndex=a})}function tt(t,e,a,r){return e=B(vt,t,e,a,r,!1),e!==!1&&(G(t,e),!0)}function et(t){if(ft[t]){var e=0,r=100;0!==t&&(e=vt[t-1]),t!==ft.length-1&&(r=vt[t]);var n=r-e,i="translate("+W(z(J(e,n)),"0")+")",s="scale("+W(n/100,"1")+")";ft[t].style[a.transformRule]=i+" "+s}}function at(t,e){return null===t||t===!1||void 0===t?vt[e]:("number"==typeof t&&(t=String(t)),t=a.format.from(t),t=bt.toStepping(t),t===!1||isNaN(t)?vt[e]:t)}function rt(t,e){var r=c(t),n=void 0===vt[0];e=void 0===e||!!e,a.animate&&!n&&l(gt,a.cssClasses.tap,a.animationDuration),xt.forEach(function(t){tt(t,at(r[t],t),!0,!1)}),xt.forEach(function(t){tt(t,vt[t],!0,!0)}),Z(),xt.forEach(function(t){H("update",t),null!==r[t]&&e&&H("set",t)})}function nt(t){rt(a.start,t)}function it(){var t=jt.map(a.format.to);return 1===t.length?t[0]:t}function st(){for(var t in a.cssClasses)a.cssClasses.hasOwnProperty(t)&&p(gt,a.cssClasses[t]);for(;gt.firstChild;)gt.removeChild(gt.firstChild);delete gt.noUiSlider}function ot(){return vt.map(function(t,e){var a=bt.getNearbySteps(t),r=jt[e],n=a.thisStep.step,i=null;n!==!1&&r+n>a.stepAfter.startValue&&(n=a.stepAfter.startValue-r),i=r>a.thisStep.startValue?a.thisStep.step:a.stepBefore.step!==!1&&r-a.stepBefore.highestStep,100===t?n=null:0===t&&(i=null);var s=bt.countStepDecimals();return null!==n&&n!==!1&&(n=Number(n.toFixed(s))),null!==i&&i!==!1&&(i=Number(i.toFixed(s))),[i,n]})}function lt(t,e){var r=it(),n=["margin","limit","padding","range","animate","snap","step","format"];n.forEach(function(e){void 0!==t[e]&&(i[e]=t[e])});var s=Y(i);n.forEach(function(e){void 0!==t[e]&&(a[e]=s[e])}),bt=s.spectrum,a.margin=s.margin,a.limit=s.limit,a.padding=s.padding,a.pips&&P(a.pips),vt=[],rt(t.start||r,e)}var ut,ct,ft,dt,pt,ht=_(),mt=v(),_t=mt&&g(),gt=t,vt=[],xt=[],yt=0,bt=a.spectrum,jt=[],wt={},St=t.ownerDocument,Ut=St.documentElement,Ct=St.body,Et="rtl"===St.dir||1===a.ort?0:100;return b(gt),y(a.connect,ut),Q(a.events),rt(a.start),dt={destroy:st,steps:ot,on:q,off:D,get:it,set:rt,reset:nt,__moveHandles:function(t,e,a){X(t,e,vt,a)},options:i,updateOptions:lt,target:gt,removePips:A,pips:P},a.pips&&P(a.pips),a.tooltips&&w(),S(),dt}function G(t,e){if(!t||!t.nodeName)throw new Error("noUiSlider ("+K+"): create requires a single element, got: "+t);if(t.noUiSlider)throw new Error("noUiSlider ("+K+"): Slider was already initialized.");var a=Y(e,t),r=J(t,a,e);return t.noUiSlider=r,r}var K="11.1.0";P.prototype.getMargin=function(t){var e=this.xNumSteps[0];if(e&&t/e%1!==0)throw new Error("noUiSlider ("+K+"): 'limit', 'margin' and 'padding' must be divisible by step.");return 2===this.xPct.length&&y(this.xVal,t)},P.prototype.toStepping=function(t){return t=S(this.xVal,this.xPct,t)},P.prototype.fromStepping=function(t){return U(this.xVal,this.xPct,t)},P.prototype.getStep=function(t){return t=C(this.xPct,this.xSteps,this.snap,t)},P.prototype.getNearbySteps=function(t){var e=w(t,this.xPct);return{stepBefore:{startValue:this.xVal[e-2],step:this.xNumSteps[e-2],highestStep:this.xHighestCompleteStep[e-2]},thisStep:{startValue:this.xVal[e-1],step:this.xNumSteps[e-1],highestStep:this.xHighestCompleteStep[e-1]},stepAfter:{startValue:this.xVal[e-0],step:this.xNumSteps[e-0],highestStep:this.xHighestCompleteStep[e-0]}}},P.prototype.countStepDecimals=function(){var t=this.xNumSteps.map(f);return Math.max.apply(null,t)},P.prototype.convert=function(t){return this.getStep(this.toStepping(t))};var Z={to:function(t){return void 0!==t&&t.toFixed(2)},from:Number};return{version:K,create:G}})},{}],3:[function(t,e,a){(function(a){var r="undefined"!=typeof window?window.jQuery:"undefined"!=typeof a?a.jQuery:null,n=t("./state"),i=t("./process_form"),s=t("nouislider"),o=t("./thirdparty");window.searchAndFilter={extensions:[],registerExtension:function(t){this.extensions.push(t)}},e.exports=function(t){var e={startOpened:!1,isInit:!0,action:""},a=jQuery.extend(e,t);o.init(),this.each(function(){var t=r(this),e=this;this.sfid=t.attr("data-sf-form-id"),n.addSearchForm(this.sfid,this),this.$fields=t.find("> ul > li"),this.enable_taxonomy_archives=t.attr("data-taxonomy-archives"),this.current_taxonomy_archive=t.attr("data-current-taxonomy-archive"),"undefined"==typeof this.enable_taxonomy_archives&&(this.enable_taxonomy_archives="0"),"undefined"==typeof this.current_taxonomy_archive&&(this.current_taxonomy_archive=""),i.init(e.enable_taxonomy_archives,e.current_taxonomy_archive),i.enableInputs(e),"undefined"==typeof this.extra_query_params&&(this.extra_query_params={all:{},results:{},ajax:{}}),this.template_is_loaded=t.attr("data-template-loaded"),this.is_ajax=t.attr("data-ajax"),this.instance_number=t.attr("data-instance-count"),this.$ajax_results_container=jQuery(t.attr("data-ajax-target")),this.ajax_update_sections=t.attr("data-ajax-update-sections")?JSON.parse(t.attr("data-ajax-update-sections")):[],this.replace_results="0"!==t.attr("data-replace-results"),this.results_url=t.attr("data-results-url"),this.debug_mode=t.attr("data-debug-mode"),this.update_ajax_url=t.attr("data-update-ajax-url"),this.pagination_type=t.attr("data-ajax-pagination-type"),this.auto_count=t.attr("data-auto-count"),this.auto_count_refresh_mode=t.attr("data-auto-count-refresh-mode"),this.only_results_ajax=t.attr("data-only-results-ajax"),this.scroll_to_pos=t.attr("data-scroll-to-pos"),this.custom_scroll_to=t.attr("data-custom-scroll-to"),this.scroll_on_action=t.attr("data-scroll-on-action"),this.lang_code=t.attr("data-lang-code"),this.ajax_url=t.attr("data-ajax-url"),this.ajax_form_url=t.attr("data-ajax-form-url"),this.is_rtl=t.attr("data-is-rtl"),this.display_result_method=t.attr("data-display-result-method"),this.maintain_state=t.attr("data-maintain-state"),this.ajax_action="",this.last_submit_query_params="",this.current_paged=parseInt(t.attr("data-init-paged")),this.last_load_more_html="",this.load_more_html="",this.ajax_data_type=t.attr("data-ajax-data-type"),this.ajax_target_attr=t.attr("data-ajax-target"),this.use_history_api=t.attr("data-use-history-api"),this.is_submitting=!1,this.last_ajax_request=null,"undefined"==typeof this.results_html&&(this.results_html=""),"undefined"==typeof this.use_history_api&&(this.use_history_api=""),"undefined"==typeof this.pagination_type&&(this.pagination_type="normal"),"undefined"==typeof this.current_paged&&(this.current_paged=1),"undefined"==typeof this.ajax_target_attr&&(this.ajax_target_attr=""),"undefined"==typeof this.ajax_url&&(this.ajax_url=""),"undefined"==typeof this.ajax_form_url&&(this.ajax_form_url=""),"undefined"==typeof this.results_url&&(this.results_url=""),"undefined"==typeof this.scroll_to_pos&&(this.scroll_to_pos=""),"undefined"==typeof this.scroll_on_action&&(this.scroll_on_action=""),"undefined"==typeof this.custom_scroll_to&&(this.custom_scroll_to=""),this.$custom_scroll_to=jQuery(this.custom_scroll_to),"undefined"==typeof this.update_ajax_url&&(this.update_ajax_url=""),"undefined"==typeof this.debug_mode&&(this.debug_mode=""),"undefined"==typeof this.ajax_target_object&&(this.ajax_target_object=""),"undefined"==typeof this.template_is_loaded&&(this.template_is_loaded="0"),"undefined"==typeof this.auto_count_refresh_mode&&(this.auto_count_refresh_mode="0"),this.ajax_links_selector=t.attr("data-ajax-links-selector"),this.auto_update=t.attr("data-auto-update"),this.inputTimer=0,this.setInfiniteScrollContainer=function(){"undefined"==typeof this.is_max_paged&&(this.is_max_paged=!1),
-this.use_scroll_loader=t.attr("data-show-scroll-loader"),this.infinite_scroll_container=t.attr("data-infinite-scroll-container"),this.infinite_scroll_trigger_amount=t.attr("data-infinite-scroll-trigger"),this.infinite_scroll_result_class=t.attr("data-infinite-scroll-result-class"),this.$infinite_scroll_container=this.$ajax_results_container,"undefined"==typeof this.infinite_scroll_container?this.infinite_scroll_container="":this.$infinite_scroll_container=jQuery(this.ajax_target_attr+" "+this.infinite_scroll_container),"undefined"==typeof this.infinite_scroll_result_class&&(this.infinite_scroll_result_class=""),"undefined"==typeof this.use_scroll_loader&&(this.use_scroll_loader=1)},this.setInfiniteScrollContainer(),this.reset=function(t){return this.resetForm(t),!0},this.inputUpdate=function(t){if("undefined"==typeof t)var t=300;e.resetTimer(t)},this.scrollToPos=function(){var a=0,n=!0;1==e.is_ajax&&("window"==e.scroll_to_pos?a=0:"form"==e.scroll_to_pos?a=t.offset().top:"results"==e.scroll_to_pos?e.$ajax_results_container.length>0&&(a=e.$ajax_results_container.offset().top):"custom"==e.scroll_to_pos?e.$custom_scroll_to.length>0&&(a=e.$custom_scroll_to.offset().top):n=!1,n&&r("html, body").stop().animate({scrollTop:a},"normal","easeOutQuad"))},this.attachActiveClass=function(){t.on("change",'input[type="radio"], input[type="checkbox"], select',function(t){var e=r(this),a=e.closest("li[data-sf-field-name]"),n=e.prop("tagName").toLowerCase(),i=e.attr("type"),s=a.prop("tagName").toLowerCase();if("input"!=n||"radio"!=i&&"checkbox"!=i||"li"!=s){if("select"==n){var o=e.children();o.removeClass("sf-option-active");var l=e.val(),u="string"==typeof l||l instanceof String?[l]:l;r(u).each(function(t,a){e.find("option[value='"+a+"']").addClass("sf-option-active")})}}else{var o=a.parent().find("li"),c=a.parent().find("input:checked");o.removeClass("sf-option-active"),c.each(function(){var t=r(this).closest("li");t.addClass("sf-option-active")})}})},this.initAutoUpdateEvents=function(){if(1==e.auto_update||1==e.auto_count_refresh_mode){t.on("change",'input[type="radio"], input[type="checkbox"], select',function(t){e.inputUpdate(200)}),t.on("input",'input[type="number"]',function(t){e.inputUpdate(800)});var a=t.find('input[type="text"]:not(.sf-datepicker)'),r=a.val();t.on("input",'input[type="text"]:not(.sf-datepicker)',function(){r!=a.val()&&e.inputUpdate(1200),r=a.val()}),t.on("keypress",'input[type="text"]:not(.sf-datepicker)',function(t){if(13==t.which)return t.preventDefault(),e.submitForm(),!1})}},this.clearTimer=function(){clearTimeout(e.inputTimer)},this.resetTimer=function(t){clearTimeout(e.inputTimer),e.inputTimer=setTimeout(e.formUpdated,t)},this.addDatePickers=function(){var a=t.find(".sf-datepicker");a.length>0&&(a.each(function(){var t=r(this),a="",n=!1,i=!1,s=t.closest(".sf_date_field");s.length>0&&(a=s.attr("data-date-format"),1==s.attr("data-date-use-year-dropdown")&&(n=!0),1==s.attr("data-date-use-month-dropdown")&&(i=!0));var o={inline:!0,showOtherMonths:!0,onSelect:function(t,a){e.dateSelect(t,a,r(this))},dateFormat:a,changeMonth:i,changeYear:n};1==e.is_rtl&&(o.direction="rtl"),t.datepicker(o),""!=e.lang_code?r.datepicker.setDefaults(r.extend({dateFormat:a},r.datepicker.regional[e.lang_code])):r.datepicker.setDefaults(r.extend({dateFormat:a},r.datepicker.regional.en))}),0==r(".ll-skin-melon").length&&a.datepicker("widget").wrap('
'))},this.dateSelect=function(t,a,n){var i=r(a.input.get(0)),s=(r(this),i.closest('[data-sf-field-input-type="daterange"], [data-sf-field-input-type="date"]'));s.each(function(t,a){var n=r(this).find(".sf-datepicker"),i=n.length;if(i>1){var s=0,o=0;n.each(function(){""==r(this).val()&&o++,s++}),0==o&&e.inputUpdate(1)}else e.inputUpdate(1)})},this.addRangeSliders=function(){var a=t.find(".sf-meta-range-slider");a.length>0&&(a.each(function(){var t=r(this),a=t.attr("data-min"),n=t.attr("data-max"),i=t.attr("data-start-min"),o=t.attr("data-start-max"),l=t.attr("data-display-values-as"),u=t.attr("data-step"),c=t.find(".sf-range-min"),f=t.find(".sf-range-max"),d=t.attr("data-decimal-places"),p=t.attr("data-thousand-seperator"),h=t.attr("data-decimal-seperator"),m=wNumb({mark:h,decimals:parseFloat(d),thousand:p}),_=(parseFloat(i),m.to(parseFloat(i))),g=m.to(parseFloat(o));parseFloat(o);"textinput"==l?(c.val(_),f.val(g)):"text"==l&&(c.html(_),f.html(g));var v={range:{min:[parseFloat(a)],max:[parseFloat(n)]},start:[_,g],handles:2,connect:!0,step:parseFloat(u),behaviour:"extend-tap",format:m};1==e.is_rtl&&(v.direction="rtl");var x=r(this).find(".meta-slider")[0];"undefined"!=typeof x.noUiSlider&&x.noUiSlider.destroy(),s.create(x,v),c.off(),c.on("change",function(){x.noUiSlider.set([r(this).val(),null])}),f.off(),f.on("change",function(){x.noUiSlider.set([null,r(this).val()])}),x.noUiSlider.off("update"),x.noUiSlider.on("update",function(t,a){var r=_,n=g,i=t[a];a?g=i:_=i,"textinput"==l?(c.val(_),f.val(g)):"text"==l&&(c.html(_),f.html(g)),1!=e.auto_update&&1!=e.auto_count_refresh_mode||r==_&&n==g||e.inputUpdate(800)})}),e.clearTimer())},this.init=function(a){if("undefined"==typeof a)var a=!1;this.initAutoUpdateEvents(),this.attachActiveClass(),this.addDatePickers(),this.addRangeSliders();var n=t.find("select[data-combobox='1']");n.length>0&&n.each(function(t){var a=r(this),n=a.attr("data-combobox-nrm");if("undefined"!=typeof a.chosen){var i={search_contains:!0};"undefined"!=typeof n&&n&&(i.no_results_text=n),1==e.is_rtl&&a.addClass("chosen-rtl"),a.chosen(i)}else{var s={};1==e.is_rtl&&(s.dir="rtl"),"undefined"!=typeof n&&n&&(s.language={noResults:function(){return n}}),a.select2(s)}}),e.isSubmitting=!1,1==e.is_ajax&&e.setupAjaxPagination(),t.on("submit",this.submitForm),e.initWooCommerceControls(),0==a&&(e.last_submit_query_params=e.getUrlParams(!1))},this.onWindowScroll=function(t){if(!e.is_loading_more&&!e.is_max_paged){var a=r(window).scrollTop(),n=r(window).scrollTop()+r(window).height(),i=parseInt(e.infinite_scroll_trigger_amount);if(1==e.$infinite_scroll_container.length){var s=e.$infinite_scroll_container.offset().top+e.$infinite_scroll_container.height();e.$infinite_scroll_container.offset().top+e.$infinite_scroll_container.height()-a;n>s+i&&e.loadMoreResults()}}},this.stripQueryStringAndHashFromPath=function(t){return t.split("?")[0].split("#")[0]},this.gup=function(t,e){e||(e=location.href),t=t.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var a="[\\?&]"+t+"=([^]*)",r=new RegExp(a),n=r.exec(e);return null==n?null:n[1]},this.getUrlParams=function(t,a,r){if("undefined"==typeof t)var t=!0;if("undefined"==typeof a)var a="";var n="",s=i.getUrlParams(e),o=Object.keys(s).length,l=0;if("undefined"!=typeof r&&s.hasOwnProperty(r)&&o--,o>0)for(var u in s)if(s.hasOwnProperty(u)){var c=!0;"undefined"!=typeof r&&u==r&&(c=!1),c&&(n+=u+"="+s[u],l1&&(f=e.joinUrlParam(f,"sf_paged="+p))}return f=e.addQueryParams(f,e.extra_query_params.all)},this.addQueryParams=function(t,a){var r="",n=Object.keys(a).length;if(n>0)for(var i in a)a.hasOwnProperty(i)&&""!=a[i]&&(r=i+"="+a[i],t=e.joinUrlParam(t,r));return t},this.addUrlParam=function(t,e){var a="";return""!=t&&(a+=t.indexOf("?")!=-1?"&":"?"),""!=e?t+a+e:t},this.joinUrlParam=function(t,e){var a="";return""!=t&&(a+="&"),""!=e?t+a+e:t},this.setAjaxResultsURLs=function(t){if("undefined"==typeof e.ajax_results_conf&&(e.ajax_results_conf=new Array),e.ajax_results_conf.processing_url="",e.ajax_results_conf.results_url="",e.ajax_results_conf.data_type="","shortcode"==e.display_result_method)e.ajax_results_conf.results_url=e.addUrlParam(e.results_url,t),""!=e.lang_code&&(t=e.joinUrlParam(t,"lang="+e.lang_code)),e.ajax_results_conf.processing_url=e.addUrlParam(e.ajax_url,t);else if("post_type_archive"==e.display_result_method){i.setTaxArchiveResultsUrl(e,e.results_url);var a=i.getResultsUrl(e,e.results_url);e.ajax_results_conf.results_url=e.addUrlParam(a,t),e.ajax_results_conf.processing_url=e.addUrlParam(a,t)}else if("custom_woocommerce_store"==e.display_result_method){i.setTaxArchiveResultsUrl(e,e.results_url);var a=i.getResultsUrl(e,e.results_url);e.ajax_results_conf.results_url=e.addUrlParam(a,t),e.ajax_results_conf.processing_url=e.addUrlParam(a,t)}else e.ajax_results_conf.results_url=e.addUrlParam(e.results_url,t),e.ajax_results_conf.processing_url=e.addUrlParam(e.ajax_url,t);e.ajax_results_conf.processing_url=e.addQueryParams(e.ajax_results_conf.processing_url,e.extra_query_params.ajax),e.ajax_results_conf.data_type=e.ajax_data_type},this.updateLoaderTag=function(t){var a;a=""!=e.infinite_scroll_result_class?e.$infinite_scroll_container.find(e.infinite_scroll_result_class).last().parent():e.$infinite_scroll_container;var n=a.prop("tagName"),i="div";"ol"!=n.toLowerCase()&&"ul"!=n.toLowerCase()||(i="li");var s=r("<"+i+" />").html(t.html()),o=t.prop("attributes");return r.each(o,function(){s.attr(this.name,this.value)}),s},this.loadMoreResults=function(){if(this.is_max_paged!==!0){e.is_loading_more=!0;var t={sfid:e.sfid,targetSelector:e.ajax_target_attr,type:"load_more",object:e};e.triggerEvent("sf:ajaxstart",t),i.setTaxArchiveResultsUrl(e,e.results_url);var a=e.getUrlParams(!0);e.last_submit_query_params=e.getUrlParams(!1);var n="",s="",o="",l=this.current_paged+1;if(a=e.joinUrlParam(a,"sf_paged="+l),e.setAjaxResultsURLs(a),n=e.ajax_results_conf.processing_url,s=e.ajax_results_conf.results_url,o=e.ajax_results_conf.data_type,e.last_ajax_request&&e.last_ajax_request.abort(),1==e.use_scroll_loader){var u=r("
",{"class":"search-filter-scroll-loading"});u=e.updateLoaderTag(u),e.infiniteScrollAppend(u)}e.last_ajax_request=r.get(n,function(t,a,r){e.current_paged++,e.last_ajax_request=null,e.addResults(t,o)},o).fail(function(t,a,r){var i={};i.sfid=e.sfid,i.object=e,i.targetSelector=e.ajax_target_attr,i.ajaxURL=n,i.jqXHR=t,i.textStatus=a,i.errorThrown=r,e.triggerEvent("sf:ajaxerror",i)}).always(function(){var t={};t.sfid=e.sfid,t.targetSelector=e.ajax_target_attr,t.object=e,1==e.use_scroll_loader&&u.detach(),e.is_loading_more=!1,e.triggerEvent("sf:ajaxfinish",t)})}},this.fetchAjaxResults=function(){var a={sfid:e.sfid,targetSelector:e.ajax_target_attr,type:"load_results",object:e};e.triggerEvent("sf:ajaxstart",a);var n=t.find('input[type="text"]:focus').not(".sf-datepicker");if(1==n.length)var s=n.attr("name");if(t.addClass("search-filter-disabled"),i.disableInputs(e),e.$ajax_results_container.animate({opacity:.5},"fast"),e.fadeContentAreas("out"),"pagination"==e.ajax_action){var o=e.$ajax_results_container.attr("data-paged");"undefined"==typeof o&&(o=1),i.setTaxArchiveResultsUrl(e,e.results_url),l=e.getUrlParams(!1),o>1&&(l=e.joinUrlParam(l,"sf_paged="+o))}else if("submit"==e.ajax_action){var l=e.getUrlParams(!0);e.last_submit_query_params=e.getUrlParams(!1)}var u="",c="",f="";e.setAjaxResultsURLs(l),u=e.ajax_results_conf.processing_url,c=e.ajax_results_conf.results_url,f=e.ajax_results_conf.data_type,e.last_ajax_request&&e.last_ajax_request.abort();var d=e.ajax_action;e.last_ajax_request=r.get(u,function(t,a,r){e.last_ajax_request=null,e.updateResults(t,f),e.ajax_action=d,e.scrollResults(e.ajax_action),e.updateUrlHistory(c),e.setupAjaxPagination(),e.isSubmitting=!1,e.initWooCommerceControls()},f).fail(function(t,a,r){var n={};n.sfid=e.sfid,n.targetSelector=e.ajax_target_attr,n.object=e,n.ajaxURL=u,n.jqXHR=t,n.textStatus=a,n.errorThrown=r,e.isSubmitting=!1,e.triggerEvent("sf:ajaxerror",n)}).always(function(){e.$ajax_results_container.stop(!0,!0).animate({opacity:1},"fast"),e.fadeContentAreas("in");var a={};if(a.sfid=e.sfid,a.targetSelector=e.ajax_target_attr,a.object=e,t.removeClass("search-filter-disabled"),i.enableInputs(e),""!=s){var n=[];e.$fields.each(function(){var t=r(this).find("input[name='"+s+"']");1==t.length&&(n=t)}),1==n.length&&(n.focus().val(n.val()),e.focusCampo(n[0]))}t.find("input[name='_sf_search']").trigger("focus"),e.triggerEvent("sf:ajaxfinish",a)})},this.focusCampo=function(t){if(null!=t&&0!=t.value.length){if(t.createTextRange){var e=t.createTextRange();e.moveStart("character",t.value.length),e.collapse(),e.select()}else if(t.selectionStart||"0"==t.selectionStart){var a=t.value.length;t.selectionStart=a,t.selectionEnd=a}t.blur(),t.focus()}else t&&t.focus()},this.triggerEvent=function(t,a){var n=r(".searchandfilter[data-sf-form-id='"+e.sfid+"']");n.trigger(t,[a])},this.fetchAjaxForm=function(){var a={sfid:e.sfid,targetSelector:e.ajax_target_attr,type:"form",object:e};e.triggerEvent("sf:ajaxformstart",[a]),t.addClass("search-filter-disabled"),i.disableInputs(e);var n=e.getUrlParams();""!=e.lang_code&&(n=e.joinUrlParam(n,"lang="+e.lang_code));var s=e.addUrlParam(e.ajax_form_url,n),o="json";r.get(s,function(t,a,r){e.updateForm(t,o)},o).fail(function(t,a,r){var n={};n.sfid=e.sfid,n.targetSelector=e.ajax_target_attr,n.object=e,n.ajaxURL=s,n.jqXHR=t,n.textStatus=a,n.errorThrown=r,e.triggerEvent("sf:ajaxerror",[n])}).always(function(){var a={};a.sfid=e.sfid,a.targetSelector=e.ajax_target_attr,a.object=e,t.removeClass("search-filter-disabled"),i.enableInputs(e),e.triggerEvent("sf:ajaxformfinish",[a])})},this.copyListItemsContents=function(t,a){var n=new Array,i=new Array,s=t.find("> ul > li");s.each(function(t){n.push(r(this).html());var e=r(this).prop("attributes");i.push(e)});var o=0,l=a.find("> ul > li");l.each(function(t){r(this).html(n[o]);var a=r(s.get(o)),i=r(this);i.removeAttr("data-sf-taxonomy-archive"),e.copyAttributes(a,i),o++})},this.updateFormAttributes=function(t,e){var a=t.prop("attributes"),n=e.prop("attributes");r.each(n,function(){e.removeAttr(this.name)}),r.each(a,function(){e.attr(this.name,this.value)})},this.copyAttributes=function(t,e,a){if("undefined"==typeof a)var a="";var n=t.prop("attributes"),i=e.prop("attributes");r.each(i,function(){""!=a&&0==this.name.indexOf(a)&&e.removeAttr(this.name)}),r.each(n,function(){e.attr(this.name,this.value)})},this.copyFormAttributes=function(t,e){e.removeAttr("data-current-taxonomy-archive"),this.copyAttributes(t,e)},this.updateForm=function(a,n){"json"==n&&"undefined"!=typeof a.form&&(t.off(),e.copyListItemsContents(r(a.form),t),this.init(!0),1==e.is_ajax&&e.setupAjaxPagination())},this.addResults=function(t,a){if("json"==a)e.load_more_html=t.results;else if("html"==a){var n=r(t);e.load_more_html=n.find(e.ajax_target_attr).html()}var i=!1;if(r(""+e.load_more_html+"
").find("[data-search-filter-action='infinite-scroll-end']").length>0&&(i=!0),""!=e.infinite_scroll_container&&(e.load_more_html=r(""+e.load_more_html+"
").find(e.infinite_scroll_container).html()),""!=e.infinite_scroll_result_class){var s=r(""+e.load_more_html+"
").find(e.infinite_scroll_result_class),o=r("
",{});o.append(s),e.load_more_html=o.html()}i?(e.is_max_paged=!0,e.last_load_more_html=e.load_more_html,e.infiniteScrollAppend(e.load_more_html)):e.last_load_more_html!==e.load_more_html?(e.last_load_more_html=e.load_more_html,e.infiniteScrollAppend(e.load_more_html)):e.is_max_paged=!0},this.infiniteScrollAppend=function(t){""!=e.infinite_scroll_result_class?e.$infinite_scroll_container.find(e.infinite_scroll_result_class).last().after(t):e.$infinite_scroll_container.append(t)},this.updateResults=function(a,n){if("json"==n)this.results_html=a.results,this.replace_results&&e.$ajax_results_container.html(this.results_html),"undefined"!=typeof a.form&&(t.off(),e.removeAjaxPagination(),e.copyListItemsContents(r(a.form),t),e.copyFormAttributes(r(a.form),t),t.searchAndFilter({isInit:!1}));else if("html"==n){var i=r(a);if(this.results_html=i.find(this.ajax_target_attr).html(),this.replace_results&&e.$ajax_results_container.html(this.results_html),e.updateContentAreas(i),e.$ajax_results_container.find(".searchandfilter").length>0&&e.$ajax_results_container.find(".searchandfilter").searchAndFilter(),0==e.$ajax_results_container.find(".searchandfilter[data-sf-form-id='"+e.sfid+"']").length){var s=i.find(".searchandfilter[data-sf-form-id='"+e.sfid+"']");1==s.length&&(t.off(),e.removeAjaxPagination(),e.copyListItemsContents(s,t),e.copyFormAttributes(s,t),t.searchAndFilter({isInit:!1}))}}e.is_max_paged=!1,e.current_paged=1,e.setInfiniteScrollContainer()},this.updateContentAreas=function(t){if(this.ajax_update_sections&&this.ajax_update_sections.length)for(index=0;index0?a.val():e.getQueryParamFromURL("orderby",window.location.href),"menu_order"==i&&(i=""),""!=i&&i&&(e.extra_query_params.all.orderby=i),n.on("submit",function(t){return t.preventDefault(),!1}),a.on("change",function(a){a.preventDefault();var n=r(this).val();return"menu_order"==n&&(n=""),e.extra_query_params.all.orderby=n,t.trigger("submit"),!1})},this.scrollResults=function(){e.scroll_on_action!=e.ajax_action&&"all"!=e.scroll_on_action||e.scrollToPos()},this.updateUrlHistory=function(a){var r=0;window.history&&window.history.pushState&&(r=t.attr("data-use-history-api")),1==e.update_ajax_url&&1==r&&window.history&&window.history.pushState&&history.pushState(null,null,a)},this.removeAjaxPagination=function(){if("undefined"!=typeof e.ajax_links_selector){var t=jQuery(e.ajax_links_selector);t.length>0&&t.off()}},this.getBaseUrl=function(t){var e=t.split("?"),a="";return a=e.length>0?e[0]:t},this.canFetchAjaxResults=function(t){if("undefined"==typeof t)var t="";var a=!1;if(1==e.is_ajax){1==e.$ajax_results_container.length&&(a=!0);var r=e.results_url,n="",i=window.location.href,s=window.location.href.indexOf("#");if(s!==-1&&(i=window.location.href.substr(0,window.location.href.indexOf("#"))),("custom_woocommerce_store"==e.display_result_method||"post_type_archive"==e.display_result_method)&&1==e.enable_taxonomy_archives&&""!==e.current_taxonomy_archive)return a=!0;var o=this.getBaseUrl(i),l=e.getQueryParamFromURL("lang",window.location.href);"undefined"!=typeof l&&null!==l&&(o=e.addUrlParam(o,"lang="+l));var u=e.getQueryParamFromURL("sfid",window.location.href);Number(parseFloat(u))==u&&(o=e.addUrlParam(o,"sfid="+u)),o=o.replace(/\/$/,""),r=r.replace(/\/$/,""),n=encodeURI(r);var c=-1;o==r||o.toLowerCase()==n.toLowerCase()?c=1:r.indexOf("?")!==-1&&0===i.lastIndexOf(r,0)&&(c=1),1==e.only_results_ajax?a=c>-1:"pagination"==t&&(c>-1||(a=!1))}return a},this.setupAjaxPagination=function(){if("infinite_scroll"===this.pagination_type){var t=!1;e.$ajax_results_container.find("[data-search-filter-action='infinite-scroll-end']").length>0&&(t=!0,e.is_max_paged=!0),1===parseInt(this.instance_number)&&(r(window).off("scroll",e.onWindowScroll),e.canFetchAjaxResults("pagination")&&r(window).on("scroll",e.onWindowScroll))}else{if("undefined"==typeof e.ajax_links_selector)return;r(document).off("click",e.ajax_links_selector),r(document).off(e.ajax_links_selector),r(e.ajax_links_selector).off(),r(document).on("click",e.ajax_links_selector,function(t){if(e.canFetchAjaxResults("pagination")){t.preventDefault();var a=jQuery(this).attr("href");e.ajax_action="pagination";var r=e.getPagedFromURL(a);return e.$ajax_results_container.attr("data-paged",r),e.fetchAjaxResults(),!1}})}},this.getPagedFromURL=function(t){var a=1,r=e.getQueryParamFromURL("sf_paged",t);return"string"!=typeof r&&"number"!=typeof r||(a=r),a},this.getQueryParamFromURL=function(t,e){var a="?"+e.split("?")[1];if("undefined"!=typeof a){var r=decodeURIComponent((new RegExp("[?|&]"+t+"=([^&;]+?)(&|#|;|$)").exec(a)||[,""])[1].replace(/\+/g,"%20"))||null;return r}return""},this.formUpdated=function(t){return 1==e.auto_update?e.submitForm():0==e.auto_update&&1==e.auto_count_refresh_mode&&e.formUpdatedFetchAjax(),!1},this.formUpdatedFetchAjax=function(){return e.fetchAjaxForm(),!1},this.setFields=function(t){e.$fields.each(function(){var t=r(this),e=t.find(".sf-meta-range-slider").attr("data-display-values-as");"textinput"===e&&(t.find(".meta-slider").length>0,t.find(".meta-slider").each(function(t){var e=r(this)[0],a=r(this).closest(".sf-meta-range-slider"),n=a.find(".sf-range-min").val(),i=a.find(".sf-range-max").val();e.noUiSlider.set([n,i])}))})},this.submitForm=function(t){if(1==e.isSubmitting)return!1;if(e.setFields(),e.clearTimer(),e.isSubmitting=!0,i.setTaxArchiveResultsUrl(e,e.results_url),e.$ajax_results_container.attr("data-paged",1),e.canFetchAjaxResults())e.ajax_action="submit",e.fetchAjaxResults();else{var a=i.getResultsUrl(e,e.results_url),r=e.getUrlParams(!0,"");a=e.addUrlParam(a,r),window.location.href=a}return!1},this.resetForm=function(t){e.$fields.each(function(){var t=r(this);t.removeAttr("data-sf-taxonomy-archive"),t.find("select:not([multiple='multiple']) > option:first-child").prop("selected",!0),t.find("select[multiple='multiple'] > option").prop("selected",!1),t.find("input[type='checkbox']").prop("checked",!1),t.find("> ul > li:first-child input[type='radio']").prop("checked",!0),t.find("input[type='text']").val(""),t.find(".sf-option-active").removeClass("sf-option-active"),t.find("> ul > li:first-child input[type='radio']").parent().addClass("sf-option-active"),t.find("input[type='number']").each(function(t){var e=r(this);e.parent().parent().hasClass("sf-meta-range")&&(0==t?e.val(e.attr("min")):1==t&&e.val(e.attr("max")))});var e=t.find(".sf-meta-range-select-fromto");if(e.length>0){var a=e.attr("data-min"),n=e.attr("data-max");e.find("select").each(function(t){var e=r(this);0==t?e.val(a):1==t&&e.val(n)})}var i=t.find(".sf-meta-range-radio-fromto");if(i.length>0){var a=i.attr("data-min"),n=i.attr("data-max"),s=i.find(".sf-input-range-radio");s.each(function(t){var e=r(this).find(".sf-input-radio");e.prop("checked",!1),0==t?e.filter('[value="'+a+'"]').prop("checked",!0):1==t&&e.filter('[value="'+n+'"]').prop("checked",!0)})}t.find(".meta-slider").each(function(t){var e=r(this)[0],a=r(this).closest(".sf-meta-range-slider"),n=a.attr("data-min"),i=a.attr("data-max");e.noUiSlider.set([n,i])});var o=t.find("select[data-combobox='1']");o.length>0&&("undefined"!=typeof o.chosen?o.trigger("chosen:updated"):(o.val(""),o.trigger("change.select2")))}),e.clearTimer(),"always"==t?e.submitForm():"never"==t?1==this.auto_count_refresh_mode&&e.formUpdatedFetchAjax():"auto"==t&&(1==this.auto_update?e.submitForm():1==this.auto_count_refresh_mode&&e.formUpdatedFetchAjax())},this.init();var o={};o.sfid=e.sfid,o.targetSelector=e.ajax_target_attr,o.object=this,a.isInit&&e.triggerEvent("sf:init",o)})}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./process_form":4,"./state":5,"./thirdparty":6,nouislider:2}],4:[function(t,e,a){(function(t){var a="undefined"!=typeof window?window.jQuery:"undefined"!=typeof t?t.jQuery:null;e.exports={taxonomy_archives:0,url_params:{},tax_archive_results_url:"",active_tax:"",fields:{},init:function(t,e){this.taxonomy_archives=0,this.url_params={},this.tax_archive_results_url="",this.active_tax="",this.taxonomy_archives=t,this.current_taxonomy_archive=e,this.clearUrlComponents()},setTaxArchiveResultsUrl:function(t,e,r){var n=this;if(this.clearTaxArchiveResultsUrl(),1==this.taxonomy_archives){if("undefined"==typeof r)var r=!1;var i=!1,s="",o="",l=t.$fields.parent().find("[data-sf-taxonomy-archive='1']");if(1==l.length){i=l;var u=i.attr("data-sf-field-type");if("tag"==u||"category"==u||"taxonomy"==u){var c=n.processTaxonomy(i,!0);s=i.attr("data-sf-field-name");var f=s.replace("_sft_","");c&&(o=c.value)}""==o&&(i=!1)}if(""!=n.current_taxonomy_archive&&n.current_taxonomy_archive!=f)return void(this.tax_archive_results_url=e);if(""!=o&&i||t.$fields.each(function(){if(!i){var t=a(this).attr("data-sf-field-type");if("tag"==t||"category"==t||"taxonomy"==t){var e=n.processTaxonomy(a(this),!0);s=a(this).attr("data-sf-field-name"),e&&(o=e.value,""!=o&&(i=a(this)))}}}),i&&""!=o){var d=i.attr("data-sf-term-rewrite");if(""!=d){var p=JSON.parse(d),h=i.attr("data-sf-field-input-type");if(n.active_tax=s,"radio"==h||"checkbox"==h){var m=!0,_=o.split(",").join("+").split("+");if(_.length>1&&(m=!1),m){var g=i.find("input[value='"+o+"']"),v=g.parent(),x=v.attr("data-sf-depth"),y=new Array;y.push(o);for(var b=x;b>0;b--)v=v.parent().parent(),y.push(v.find("input").val());y.reverse();var j=p[x],w=j;a(y).each(function(t,e){w=w.replace("["+t+"]",e)}),this.tax_archive_results_url=w}}else if("select"==h||"multiselect"==h){var m=!0,_=o.split(",").join("+").split("+");if(_.length>1&&(m=!1),m){var v=i.find("option[value='"+o+"']"),x=v.attr("data-sf-depth"),y=new Array;y.push(o);for(var b=x;b>0;b--)v=v.prevAll("option[data-sf-depth='"+(b-1)+"']"),y.push(v.val());y.reverse();var j=p[x],w=j;a(y).each(function(t,e){w=w.replace("["+t+"]",e)}),this.tax_archive_results_url=w}}}}}},getResultsUrl:function(t,e){return""==this.tax_archive_results_url?e:this.tax_archive_results_url},getUrlParams:function(t){if(this.buildUrlComponents(t,!0),""!=this.tax_archive_results_url&&""!=this.active_tax){var e=this.active_tax;"undefined"!=typeof this.url_params[e]&&delete this.url_params[e]}return this.url_params},clearUrlComponents:function(){this.url_params={}},clearTaxArchiveResultsUrl:function(){this.tax_archive_results_url=""},disableInputs:function(t){t.$fields.each(function(){var t=a(this).find("input, select, .meta-slider");t.attr("disabled","disabled"),t.attr("disabled",!0),t.prop("disabled",!0),t.trigger("chosen:updated")})},enableInputs:function(t){t.$fields.each(function(){var t=a(this).find("input, select, .meta-slider");t.prop("disabled",!1),t.attr("disabled",!1),t.trigger("chosen:updated")})},buildUrlComponents:function(t,e){var r=this;"undefined"!=typeof e&&1==e&&this.clearUrlComponents(),t.$fields.each(function(){var t=(a(this).attr("data-sf-field-name"),a(this).attr("data-sf-field-type"));"search"==t?r.processSearchField(a(this)):"tag"==t||"category"==t||"taxonomy"==t?r.processTaxonomy(a(this)):"sort_order"==t?r.processSortOrderField(a(this)):"posts_per_page"==t?r.processResultsPerPageField(a(this)):"author"==t?r.processAuthor(a(this)):"post_type"==t?r.processPostType(a(this)):"post_date"==t?r.processPostDate(a(this)):"post_meta"==t&&r.processPostMeta(a(this))})},processSearchField:function(t){var e=this,a=t.find("input[name^='_sf_search']");if(a.length>0){var r=(a.attr("name").replace("[]",""),a.val());""!=r&&(e.url_params._sf_s=encodeURIComponent(r))}},processSortOrderField:function(t){this.processAuthor(t)},processResultsPerPageField:function(t){this.processAuthor(t)},getActiveTax:function(t){return this.active_tax},getSelectVal:function(t){var e="";return 0!=t.val()&&(e=t.val()),null==e&&(e=""),e},getMetaSelectVal:function(t){var e="";return e=t.val(),null==e&&(e=""),e},getMultiSelectVal:function(t,e){var a="+";if("or"==e&&(a=","),"object"==typeof t.val()&&null!=t.val())return t.val().join(a)},getMetaMultiSelectVal:function(t,e){var r="-+-";if("or"==e&&(r="-,-"),"object"==typeof t.val()&&null!=t.val()){var n=[];return a(t.val()).each(function(t,e){n.push(e)}),n.join(r)}return""},getCheckboxVal:function(t,e){var r=t.map(function(){if(1==a(this).prop("checked"))return a(this).val()}).get(),n="+";return"or"==e&&(n=","),r.join(n)},getMetaCheckboxVal:function(t,e){var r=t.map(function(){if(1==a(this).prop("checked"))return a(this).val()}).get(),n="-+-";return"or"==e&&(n="-,-"),r.join(n)},getRadioVal:function(t){var e=t.map(function(){if(1==a(this).prop("checked"))return a(this).val()}).get();if(0!=e[0])return e[0]},getMetaRadioVal:function(t){var e=t.map(function(){if(1==a(this).prop("checked"))return a(this).val()}).get();return e[0]},processAuthor:function(t){var e,a=this,r=(t.attr("data-sf-field-type"),t.attr("data-sf-field-input-type")),n="",i="";if("select"==r)e=t.find("select"),n=e.attr("name").replace("[]",""),i=a.getSelectVal(e);else if("multiselect"==r){e=t.find("select"),n=e.attr("name").replace("[]","");e.attr("data-operator");i=a.getMultiSelectVal(e,"or")}else if("checkbox"==r){if(e=t.find("ul > li input:checkbox"),e.length>0){n=e.attr("name").replace("[]","");t.find("> ul").attr("data-operator");i=a.getCheckboxVal(e,"or")}}else"radio"==r&&(e=t.find("ul > li input:radio"),e.length>0&&(n=e.attr("name").replace("[]",""),i=a.getRadioVal(e)));if("undefined"!=typeof i&&""!=i){var s="";"_sf_author"==n?s="authors":"_sf_sort_order"==n?s="sort_order":"_sf_ppp"==n?s="_sf_ppp":"_sf_post_type"==n&&(s="post_types"),""!=s&&(a.url_params[s]=i)}},processPostType:function(t){this.processAuthor(t)},processPostMeta:function(t){var e,r=this,n=(t.attr("data-sf-field-type"),t.attr("data-sf-field-input-type")),i=t.attr("data-sf-meta-type"),s="",o="";if("number"==i){if("range-number"==n){e=t.find(".sf-meta-range-number input");var l=[];e.each(function(){l.push(a(this).val())}),s=l.join("+")}else if("range-slider"==n){e=t.find(".sf-meta-range-slider input");var u=t.find(".sf-meta-range-slider"),c=u.attr("data-decimal-places"),f=u.attr("data-thousand-seperator"),d=u.attr("data-decimal-seperator"),p=wNumb({mark:d,decimals:parseFloat(c),thousand:f}),l=[],h=t.find(".meta-slider")[0],m=h.noUiSlider.get();l.push(p.from(m[0])),l.push(p.from(m[1])),s=l.join("+"),o=u.attr("data-sf-field-name")}else if("range-radio"==n){e=t.find(".sf-input-range-radio"),0==e.length&&(e=t.find("> ul"));var u=t.find(".sf-meta-range");if(e.length>0){var _=[];e.each(function(){var t=a(this).find(".sf-input-radio");_.push(r.getMetaRadioVal(t))}),2==_.length&&Number(_[1])0){var _=[];e.each(function(){var t=a(this);_.push(r.getMetaSelectVal(t))}),2==_.length&&Number(_[1]) li input:checkbox"),e.length>0&&(s=r.getCheckboxVal(e,"and")));""==o&&(o=e.attr("name").replace("[]",""))}else if("choice"==i){if("select"==n)e=t.find("select"),s=r.getMetaSelectVal(e);else if("multiselect"==n){e=t.find("select");var g=e.attr("data-operator");s=r.getMetaMultiSelectVal(e,g)}else if("checkbox"==n){if(e=t.find("ul > li input:checkbox"),e.length>0){var g=t.find("> ul").attr("data-operator");s=r.getMetaCheckboxVal(e,g)}}else"radio"==n&&(e=t.find("ul > li input:radio"),e.length>0&&(s=r.getMetaRadioVal(e)));s=encodeURIComponent(s),"undefined"!=typeof e&&e.length>0&&(o=e.attr("name").replace("[]",""),o=o)}else"date"==i&&r.processPostDate(t);"undefined"!=typeof s&&""!=s&&(r.url_params[encodeURIComponent(o)]=s)},processPostDate:function(t){var e,r=this,n=(t.attr("data-sf-field-type"),t.attr("data-sf-field-input-type"),""),i="";e=t.find("ul > li input:text"),n=e.attr("name").replace("[]","");var s=[];if(e.each(function(){s.push(a(this).val())}),2==e.length?""==s[0]&&""==s[1]||(i=s.join("+"),i=i.replace(/\//g,"")):1==e.length&&""!=s[0]&&(i=s.join("+"),i=i.replace(/\//g,"")),"undefined"!=typeof i&&""!=i){var o="";o="_sf_post_date"==n?"post_date":n,""!=o&&(r.url_params[o]=i)}},processTaxonomy:function(t,e){"undefined"==typeof e&&(e=!1);var a,r=this,n=(t.attr("data-sf-field-type"),t.attr("data-sf-field-input-type")),i="",s="";if("select"==n)a=t.find("select"),i=a.attr("name").replace("[]",""),s=r.getSelectVal(a);else if("multiselect"==n){a=t.find("select"),
-i=a.attr("name").replace("[]","");var o=a.attr("data-operator");s=r.getMultiSelectVal(a,o)}else if("checkbox"==n){if(a=t.find("ul > li input:checkbox"),a.length>0){i=a.attr("name").replace("[]","");var o=t.find("> ul").attr("data-operator");s=r.getCheckboxVal(a,o)}}else"radio"==n&&(a=t.find("ul > li input:radio"),a.length>0&&(i=a.attr("name").replace("[]",""),s=r.getRadioVal(a)));if("undefined"!=typeof s&&""!=s){if(1==e)return{name:i,value:s};r.url_params[i]=s}if(1==e)return!1}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],5:[function(t,e,a){e.exports={searchForms:{},init:function(){},addSearchForm:function(t,e){this.searchForms[t]=e},getSearchForm:function(t){return this.searchForms[t]}}},{}],6:[function(t,e,a){(function(t){var a="undefined"!=typeof window?window.jQuery:"undefined"!=typeof t?t.jQuery:null;e.exports={init:function(){a(document).on("sf:ajaxfinish",".searchandfilter",function(t,e){var r=e.object.display_result_method;if("custom_edd_store"===r)a("input.edd-add-to-cart").css("display","none"),a("a.edd-add-to-cart").addClass("edd-has-js");else if("custom_layouts"===r&&a(".cl-layout").hasClass("cl-layout--masonry")){const n=document.querySelectorAll(".cl-layout--masonry");if(n.length>0){const i=new Masonry(".cl-layout--masonry",{itemSelector:".cl-layout__item",percentPosition:!0,transitionDuration:0});imagesLoaded(n).on("progress",function(){i.layout()})}}})}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[1]);
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/select2.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/select2.js
deleted file mode 100644
index fcfb5ab4..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/select2.js
+++ /dev/null
@@ -1,6108 +0,0 @@
-/*!
- * Select2 4.0.13
- * https://select2.github.io
- *
- * Released under the MIT license
- * https://github.com/select2/select2/blob/master/LICENSE.md
- */
-;(function (factory) {
- if (typeof define === 'function' && define.amd) {
- // AMD. Register as an anonymous module.
- define(['jquery'], factory);
- } else if (typeof module === 'object' && module.exports) {
- // Node/CommonJS
- module.exports = function (root, jQuery) {
- if (jQuery === undefined) {
- // require('jQuery') returns a factory that requires window to
- // build a jQuery instance, we normalize how we use modules
- // that require this pattern but the window provided is a noop
- // if it's defined (how jquery works)
- if (typeof window !== 'undefined') {
- jQuery = require('jquery');
- }
- else {
- jQuery = require('jquery')(root);
- }
- }
- factory(jQuery);
- return jQuery;
- };
- } else {
- // Browser globals
- factory(jQuery);
- }
-} (function (jQuery) {
- // This is needed so we can catch the AMD loader configuration and use it
- // The inner file should be wrapped (by `banner.start.js`) in a function that
- // returns the AMD loader references.
- var S2 =(function () {
- // Restore the Select2 AMD loader so it can be used
- // Needed mostly in the language files, where the loader is not inserted
- if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {
- var S2 = jQuery.fn.select2.amd;
- }
-var S2;(function () { if (!S2 || !S2.requirejs) {
-if (!S2) { S2 = {}; } else { require = S2; }
-/**
- * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.
- * Released under MIT license, http://github.com/requirejs/almond/LICENSE
- */
-//Going sloppy to avoid 'use strict' string cost, but strict practices should
-//be followed.
-/*global setTimeout: false */
-
-var requirejs, require, define;
-(function (undef) {
- var main, req, makeMap, handlers,
- defined = {},
- waiting = {},
- config = {},
- defining = {},
- hasOwn = Object.prototype.hasOwnProperty,
- aps = [].slice,
- jsSuffixRegExp = /\.js$/;
-
- function hasProp(obj, prop) {
- return hasOwn.call(obj, prop);
- }
-
- /**
- * Given a relative module name, like ./something, normalize it to
- * a real name that can be mapped to a path.
- * @param {String} name the relative name
- * @param {String} baseName a real name that the name arg is relative
- * to.
- * @returns {String} normalized name
- */
- function normalize(name, baseName) {
- var nameParts, nameSegment, mapValue, foundMap, lastIndex,
- foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,
- baseParts = baseName && baseName.split("/"),
- map = config.map,
- starMap = (map && map['*']) || {};
-
- //Adjust any relative paths.
- if (name) {
- name = name.split('/');
- lastIndex = name.length - 1;
-
- // If wanting node ID compatibility, strip .js from end
- // of IDs. Have to do this here, and not in nameToUrl
- // because node allows either .js or non .js to map
- // to same file.
- if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
- name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');
- }
-
- // Starts with a '.' so need the baseName
- if (name[0].charAt(0) === '.' && baseParts) {
- //Convert baseName to array, and lop off the last part,
- //so that . matches that 'directory' and not name of the baseName's
- //module. For instance, baseName of 'one/two/three', maps to
- //'one/two/three.js', but we want the directory, 'one/two' for
- //this normalization.
- normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);
- name = normalizedBaseParts.concat(name);
- }
-
- //start trimDots
- for (i = 0; i < name.length; i++) {
- part = name[i];
- if (part === '.') {
- name.splice(i, 1);
- i -= 1;
- } else if (part === '..') {
- // If at the start, or previous value is still ..,
- // keep them so that when converted to a path it may
- // still work when converted to a path, even though
- // as an ID it is less than ideal. In larger point
- // releases, may be better to just kick out an error.
- if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {
- continue;
- } else if (i > 0) {
- name.splice(i - 1, 2);
- i -= 2;
- }
- }
- }
- //end trimDots
-
- name = name.join('/');
- }
-
- //Apply map config if available.
- if ((baseParts || starMap) && map) {
- nameParts = name.split('/');
-
- for (i = nameParts.length; i > 0; i -= 1) {
- nameSegment = nameParts.slice(0, i).join("/");
-
- if (baseParts) {
- //Find the longest baseName segment match in the config.
- //So, do joins on the biggest to smallest lengths of baseParts.
- for (j = baseParts.length; j > 0; j -= 1) {
- mapValue = map[baseParts.slice(0, j).join('/')];
-
- //baseName segment has config, find if it has one for
- //this name.
- if (mapValue) {
- mapValue = mapValue[nameSegment];
- if (mapValue) {
- //Match, update name to the new value.
- foundMap = mapValue;
- foundI = i;
- break;
- }
- }
- }
- }
-
- if (foundMap) {
- break;
- }
-
- //Check for a star map match, but just hold on to it,
- //if there is a shorter segment match later in a matching
- //config, then favor over this star map.
- if (!foundStarMap && starMap && starMap[nameSegment]) {
- foundStarMap = starMap[nameSegment];
- starI = i;
- }
- }
-
- if (!foundMap && foundStarMap) {
- foundMap = foundStarMap;
- foundI = starI;
- }
-
- if (foundMap) {
- nameParts.splice(0, foundI, foundMap);
- name = nameParts.join('/');
- }
- }
-
- return name;
- }
-
- function makeRequire(relName, forceSync) {
- return function () {
- //A version of a require function that passes a moduleName
- //value for items that may need to
- //look up paths relative to the moduleName
- var args = aps.call(arguments, 0);
-
- //If first arg is not require('string'), and there is only
- //one arg, it is the array form without a callback. Insert
- //a null so that the following concat is correct.
- if (typeof args[0] !== 'string' && args.length === 1) {
- args.push(null);
- }
- return req.apply(undef, args.concat([relName, forceSync]));
- };
- }
-
- function makeNormalize(relName) {
- return function (name) {
- return normalize(name, relName);
- };
- }
-
- function makeLoad(depName) {
- return function (value) {
- defined[depName] = value;
- };
- }
-
- function callDep(name) {
- if (hasProp(waiting, name)) {
- var args = waiting[name];
- delete waiting[name];
- defining[name] = true;
- main.apply(undef, args);
- }
-
- if (!hasProp(defined, name) && !hasProp(defining, name)) {
- throw new Error('No ' + name);
- }
- return defined[name];
- }
-
- //Turns a plugin!resource to [plugin, resource]
- //with the plugin being undefined if the name
- //did not have a plugin prefix.
- function splitPrefix(name) {
- var prefix,
- index = name ? name.indexOf('!') : -1;
- if (index > -1) {
- prefix = name.substring(0, index);
- name = name.substring(index + 1, name.length);
- }
- return [prefix, name];
- }
-
- //Creates a parts array for a relName where first part is plugin ID,
- //second part is resource ID. Assumes relName has already been normalized.
- function makeRelParts(relName) {
- return relName ? splitPrefix(relName) : [];
- }
-
- /**
- * Makes a name map, normalizing the name, and using a plugin
- * for normalization if necessary. Grabs a ref to plugin
- * too, as an optimization.
- */
- makeMap = function (name, relParts) {
- var plugin,
- parts = splitPrefix(name),
- prefix = parts[0],
- relResourceName = relParts[1];
-
- name = parts[1];
-
- if (prefix) {
- prefix = normalize(prefix, relResourceName);
- plugin = callDep(prefix);
- }
-
- //Normalize according
- if (prefix) {
- if (plugin && plugin.normalize) {
- name = plugin.normalize(name, makeNormalize(relResourceName));
- } else {
- name = normalize(name, relResourceName);
- }
- } else {
- name = normalize(name, relResourceName);
- parts = splitPrefix(name);
- prefix = parts[0];
- name = parts[1];
- if (prefix) {
- plugin = callDep(prefix);
- }
- }
-
- //Using ridiculous property names for space reasons
- return {
- f: prefix ? prefix + '!' + name : name, //fullName
- n: name,
- pr: prefix,
- p: plugin
- };
- };
-
- function makeConfig(name) {
- return function () {
- return (config && config.config && config.config[name]) || {};
- };
- }
-
- handlers = {
- require: function (name) {
- return makeRequire(name);
- },
- exports: function (name) {
- var e = defined[name];
- if (typeof e !== 'undefined') {
- return e;
- } else {
- return (defined[name] = {});
- }
- },
- module: function (name) {
- return {
- id: name,
- uri: '',
- exports: defined[name],
- config: makeConfig(name)
- };
- }
- };
-
- main = function (name, deps, callback, relName) {
- var cjsModule, depName, ret, map, i, relParts,
- args = [],
- callbackType = typeof callback,
- usingExports;
-
- //Use name if no relName
- relName = relName || name;
- relParts = makeRelParts(relName);
-
- //Call the callback to define the module, if necessary.
- if (callbackType === 'undefined' || callbackType === 'function') {
- //Pull out the defined dependencies and pass the ordered
- //values to the callback.
- //Default to [require, exports, module] if no deps
- deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;
- for (i = 0; i < deps.length; i += 1) {
- map = makeMap(deps[i], relParts);
- depName = map.f;
-
- //Fast path CommonJS standard dependencies.
- if (depName === "require") {
- args[i] = handlers.require(name);
- } else if (depName === "exports") {
- //CommonJS module spec 1.1
- args[i] = handlers.exports(name);
- usingExports = true;
- } else if (depName === "module") {
- //CommonJS module spec 1.1
- cjsModule = args[i] = handlers.module(name);
- } else if (hasProp(defined, depName) ||
- hasProp(waiting, depName) ||
- hasProp(defining, depName)) {
- args[i] = callDep(depName);
- } else if (map.p) {
- map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});
- args[i] = defined[depName];
- } else {
- throw new Error(name + ' missing ' + depName);
- }
- }
-
- ret = callback ? callback.apply(defined[name], args) : undefined;
-
- if (name) {
- //If setting exports via "module" is in play,
- //favor that over return value and exports. After that,
- //favor a non-undefined return value over exports use.
- if (cjsModule && cjsModule.exports !== undef &&
- cjsModule.exports !== defined[name]) {
- defined[name] = cjsModule.exports;
- } else if (ret !== undef || !usingExports) {
- //Use the return value from the function.
- defined[name] = ret;
- }
- }
- } else if (name) {
- //May just be an object definition for the module. Only
- //worry about defining if have a module name.
- defined[name] = callback;
- }
- };
-
- requirejs = require = req = function (deps, callback, relName, forceSync, alt) {
- if (typeof deps === "string") {
- if (handlers[deps]) {
- //callback in this case is really relName
- return handlers[deps](callback);
- }
- //Just return the module wanted. In this scenario, the
- //deps arg is the module name, and second arg (if passed)
- //is just the relName.
- //Normalize module name, if it contains . or ..
- return callDep(makeMap(deps, makeRelParts(callback)).f);
- } else if (!deps.splice) {
- //deps is a config object, not an array.
- config = deps;
- if (config.deps) {
- req(config.deps, config.callback);
- }
- if (!callback) {
- return;
- }
-
- if (callback.splice) {
- //callback is an array, which means it is a dependency list.
- //Adjust args if there are dependencies
- deps = callback;
- callback = relName;
- relName = null;
- } else {
- deps = undef;
- }
- }
-
- //Support require(['a'])
- callback = callback || function () {};
-
- //If relName is a function, it is an errback handler,
- //so remove it.
- if (typeof relName === 'function') {
- relName = forceSync;
- forceSync = alt;
- }
-
- //Simulate async callback;
- if (forceSync) {
- main(undef, deps, callback, relName);
- } else {
- //Using a non-zero value because of concern for what old browsers
- //do, and latest browsers "upgrade" to 4 if lower value is used:
- //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:
- //If want a value immediately, use require('id') instead -- something
- //that works in almond on the global level, but not guaranteed and
- //unlikely to work in other AMD implementations.
- setTimeout(function () {
- main(undef, deps, callback, relName);
- }, 4);
- }
-
- return req;
- };
-
- /**
- * Just drops the config on the floor, but returns req in case
- * the config return value is used.
- */
- req.config = function (cfg) {
- return req(cfg);
- };
-
- /**
- * Expose module registry for debugging and tooling
- */
- requirejs._defined = defined;
-
- define = function (name, deps, callback) {
- if (typeof name !== 'string') {
- throw new Error('See almond README: incorrect module build, no module name');
- }
-
- //This module may not have dependencies
- if (!deps.splice) {
- //deps is not an array, so probably means
- //an object literal or factory function for
- //the value. Adjust args.
- callback = deps;
- deps = [];
- }
-
- if (!hasProp(defined, name) && !hasProp(waiting, name)) {
- waiting[name] = [name, deps, callback];
- }
- };
-
- define.amd = {
- jQuery: true
- };
-}());
-
-S2.requirejs = requirejs;S2.require = require;S2.define = define;
-}
-}());
-S2.define("almond", function(){});
-
-/* global jQuery:false, $:false */
-S2.define('jquery',[],function () {
- var _$ = jQuery || $;
-
- if (_$ == null && console && console.error) {
- console.error(
- 'Select2: An instance of jQuery or a jQuery-compatible library was not ' +
- 'found. Make sure that you are including jQuery before Select2 on your ' +
- 'web page.'
- );
- }
-
- return _$;
-});
-
-S2.define('select2/utils',[
- 'jquery'
-], function ($) {
- var Utils = {};
-
- Utils.Extend = function (ChildClass, SuperClass) {
- var __hasProp = {}.hasOwnProperty;
-
- function BaseConstructor () {
- this.constructor = ChildClass;
- }
-
- for (var key in SuperClass) {
- if (__hasProp.call(SuperClass, key)) {
- ChildClass[key] = SuperClass[key];
- }
- }
-
- BaseConstructor.prototype = SuperClass.prototype;
- ChildClass.prototype = new BaseConstructor();
- ChildClass.__super__ = SuperClass.prototype;
-
- return ChildClass;
- };
-
- function getMethods (theClass) {
- var proto = theClass.prototype;
-
- var methods = [];
-
- for (var methodName in proto) {
- var m = proto[methodName];
-
- if (typeof m !== 'function') {
- continue;
- }
-
- if (methodName === 'constructor') {
- continue;
- }
-
- methods.push(methodName);
- }
-
- return methods;
- }
-
- Utils.Decorate = function (SuperClass, DecoratorClass) {
- var decoratedMethods = getMethods(DecoratorClass);
- var superMethods = getMethods(SuperClass);
-
- function DecoratedClass () {
- var unshift = Array.prototype.unshift;
-
- var argCount = DecoratorClass.prototype.constructor.length;
-
- var calledConstructor = SuperClass.prototype.constructor;
-
- if (argCount > 0) {
- unshift.call(arguments, SuperClass.prototype.constructor);
-
- calledConstructor = DecoratorClass.prototype.constructor;
- }
-
- calledConstructor.apply(this, arguments);
- }
-
- DecoratorClass.displayName = SuperClass.displayName;
-
- function ctr () {
- this.constructor = DecoratedClass;
- }
-
- DecoratedClass.prototype = new ctr();
-
- for (var m = 0; m < superMethods.length; m++) {
- var superMethod = superMethods[m];
-
- DecoratedClass.prototype[superMethod] =
- SuperClass.prototype[superMethod];
- }
-
- var calledMethod = function (methodName) {
- // Stub out the original method if it's not decorating an actual method
- var originalMethod = function () {};
-
- if (methodName in DecoratedClass.prototype) {
- originalMethod = DecoratedClass.prototype[methodName];
- }
-
- var decoratedMethod = DecoratorClass.prototype[methodName];
-
- return function () {
- var unshift = Array.prototype.unshift;
-
- unshift.call(arguments, originalMethod);
-
- return decoratedMethod.apply(this, arguments);
- };
- };
-
- for (var d = 0; d < decoratedMethods.length; d++) {
- var decoratedMethod = decoratedMethods[d];
-
- DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);
- }
-
- return DecoratedClass;
- };
-
- var Observable = function () {
- this.listeners = {};
- };
-
- Observable.prototype.on = function (event, callback) {
- this.listeners = this.listeners || {};
-
- if (event in this.listeners) {
- this.listeners[event].push(callback);
- } else {
- this.listeners[event] = [callback];
- }
- };
-
- Observable.prototype.trigger = function (event) {
- var slice = Array.prototype.slice;
- var params = slice.call(arguments, 1);
-
- this.listeners = this.listeners || {};
-
- // Params should always come in as an array
- if (params == null) {
- params = [];
- }
-
- // If there are no arguments to the event, use a temporary object
- if (params.length === 0) {
- params.push({});
- }
-
- // Set the `_type` of the first object to the event
- params[0]._type = event;
-
- if (event in this.listeners) {
- this.invoke(this.listeners[event], slice.call(arguments, 1));
- }
-
- if ('*' in this.listeners) {
- this.invoke(this.listeners['*'], arguments);
- }
- };
-
- Observable.prototype.invoke = function (listeners, params) {
- for (var i = 0, len = listeners.length; i < len; i++) {
- listeners[i].apply(this, params);
- }
- };
-
- Utils.Observable = Observable;
-
- Utils.generateChars = function (length) {
- var chars = '';
-
- for (var i = 0; i < length; i++) {
- var randomChar = Math.floor(Math.random() * 36);
- chars += randomChar.toString(36);
- }
-
- return chars;
- };
-
- Utils.bind = function (func, context) {
- return function () {
- func.apply(context, arguments);
- };
- };
-
- Utils._convertData = function (data) {
- for (var originalKey in data) {
- var keys = originalKey.split('-');
-
- var dataLevel = data;
-
- if (keys.length === 1) {
- continue;
- }
-
- for (var k = 0; k < keys.length; k++) {
- var key = keys[k];
-
- // Lowercase the first letter
- // By default, dash-separated becomes camelCase
- key = key.substring(0, 1).toLowerCase() + key.substring(1);
-
- if (!(key in dataLevel)) {
- dataLevel[key] = {};
- }
-
- if (k == keys.length - 1) {
- dataLevel[key] = data[originalKey];
- }
-
- dataLevel = dataLevel[key];
- }
-
- delete data[originalKey];
- }
-
- return data;
- };
-
- Utils.hasScroll = function (index, el) {
- // Adapted from the function created by @ShadowScripter
- // and adapted by @BillBarry on the Stack Exchange Code Review website.
- // The original code can be found at
- // http://codereview.stackexchange.com/q/13338
- // and was designed to be used with the Sizzle selector engine.
-
- var $el = $(el);
- var overflowX = el.style.overflowX;
- var overflowY = el.style.overflowY;
-
- //Check both x and y declarations
- if (overflowX === overflowY &&
- (overflowY === 'hidden' || overflowY === 'visible')) {
- return false;
- }
-
- if (overflowX === 'scroll' || overflowY === 'scroll') {
- return true;
- }
-
- return ($el.innerHeight() < el.scrollHeight ||
- $el.innerWidth() < el.scrollWidth);
- };
-
- Utils.escapeMarkup = function (markup) {
- var replaceMap = {
- '\\': '\',
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"',
- '\'': ''',
- '/': '/'
- };
-
- // Do not try to escape the markup if it's not a string
- if (typeof markup !== 'string') {
- return markup;
- }
-
- return String(markup).replace(/[&<>"'\/\\]/g, function (match) {
- return replaceMap[match];
- });
- };
-
- // Append an array of jQuery nodes to a given element.
- Utils.appendMany = function ($element, $nodes) {
- // jQuery 1.7.x does not support $.fn.append() with an array
- // Fall back to a jQuery object collection using $.fn.add()
- if ($.fn.jquery.substr(0, 3) === '1.7') {
- var $jqNodes = $();
-
- $.map($nodes, function (node) {
- $jqNodes = $jqNodes.add(node);
- });
-
- $nodes = $jqNodes;
- }
-
- $element.append($nodes);
- };
-
- // Cache objects in Utils.__cache instead of $.data (see #4346)
- Utils.__cache = {};
-
- var id = 0;
- Utils.GetUniqueElementId = function (element) {
- // Get a unique element Id. If element has no id,
- // creates a new unique number, stores it in the id
- // attribute and returns the new id.
- // If an id already exists, it simply returns it.
-
- var select2Id = element.getAttribute('data-select2-id');
- if (select2Id == null) {
- // If element has id, use it.
- if (element.id) {
- select2Id = element.id;
- element.setAttribute('data-select2-id', select2Id);
- } else {
- element.setAttribute('data-select2-id', ++id);
- select2Id = id.toString();
- }
- }
- return select2Id;
- };
-
- Utils.StoreData = function (element, name, value) {
- // Stores an item in the cache for a specified element.
- // name is the cache key.
- var id = Utils.GetUniqueElementId(element);
- if (!Utils.__cache[id]) {
- Utils.__cache[id] = {};
- }
-
- Utils.__cache[id][name] = value;
- };
-
- Utils.GetData = function (element, name) {
- // Retrieves a value from the cache by its key (name)
- // name is optional. If no name specified, return
- // all cache items for the specified element.
- // and for a specified element.
- var id = Utils.GetUniqueElementId(element);
- if (name) {
- if (Utils.__cache[id]) {
- if (Utils.__cache[id][name] != null) {
- return Utils.__cache[id][name];
- }
- return $(element).data(name); // Fallback to HTML5 data attribs.
- }
- return $(element).data(name); // Fallback to HTML5 data attribs.
- } else {
- return Utils.__cache[id];
- }
- };
-
- Utils.RemoveData = function (element) {
- // Removes all cached items for a specified element.
- var id = Utils.GetUniqueElementId(element);
- if (Utils.__cache[id] != null) {
- delete Utils.__cache[id];
- }
-
- element.removeAttribute('data-select2-id');
- };
-
- return Utils;
-});
-
-S2.define('select2/results',[
- 'jquery',
- './utils'
-], function ($, Utils) {
- function Results ($element, options, dataAdapter) {
- this.$element = $element;
- this.data = dataAdapter;
- this.options = options;
-
- Results.__super__.constructor.call(this);
- }
-
- Utils.Extend(Results, Utils.Observable);
-
- Results.prototype.render = function () {
- var $results = $(
- ''
- );
-
- if (this.options.get('multiple')) {
- $results.attr('aria-multiselectable', 'true');
- }
-
- this.$results = $results;
-
- return $results;
- };
-
- Results.prototype.clear = function () {
- this.$results.empty();
- };
-
- Results.prototype.displayMessage = function (params) {
- var escapeMarkup = this.options.get('escapeMarkup');
-
- this.clear();
- this.hideLoading();
-
- var $message = $(
- ' '
- );
-
- var message = this.options.get('translations').get(params.message);
-
- $message.append(
- escapeMarkup(
- message(params.args)
- )
- );
-
- $message[0].className += ' select2-results__message';
-
- this.$results.append($message);
- };
-
- Results.prototype.hideMessages = function () {
- this.$results.find('.select2-results__message').remove();
- };
-
- Results.prototype.append = function (data) {
- this.hideLoading();
-
- var $options = [];
-
- if (data.results == null || data.results.length === 0) {
- if (this.$results.children().length === 0) {
- this.trigger('results:message', {
- message: 'noResults'
- });
- }
-
- return;
- }
-
- data.results = this.sort(data.results);
-
- for (var d = 0; d < data.results.length; d++) {
- var item = data.results[d];
-
- var $option = this.option(item);
-
- $options.push($option);
- }
-
- this.$results.append($options);
- };
-
- Results.prototype.position = function ($results, $dropdown) {
- var $resultsContainer = $dropdown.find('.select2-results');
- $resultsContainer.append($results);
- };
-
- Results.prototype.sort = function (data) {
- var sorter = this.options.get('sorter');
-
- return sorter(data);
- };
-
- Results.prototype.highlightFirstItem = function () {
- var $options = this.$results
- .find('.select2-results__option[aria-selected]');
-
- var $selected = $options.filter('[aria-selected=true]');
-
- // Check if there are any selected options
- if ($selected.length > 0) {
- // If there are selected options, highlight the first
- $selected.first().trigger('mouseenter');
- } else {
- // If there are no selected options, highlight the first option
- // in the dropdown
- $options.first().trigger('mouseenter');
- }
-
- this.ensureHighlightVisible();
- };
-
- Results.prototype.setClasses = function () {
- var self = this;
-
- this.data.current(function (selected) {
- var selectedIds = $.map(selected, function (s) {
- return s.id.toString();
- });
-
- var $options = self.$results
- .find('.select2-results__option[aria-selected]');
-
- $options.each(function () {
- var $option = $(this);
-
- var item = Utils.GetData(this, 'data');
-
- // id needs to be converted to a string when comparing
- var id = '' + item.id;
-
- if ((item.element != null && item.element.selected) ||
- (item.element == null && $.inArray(id, selectedIds) > -1)) {
- $option.attr('aria-selected', 'true');
- } else {
- $option.attr('aria-selected', 'false');
- }
- });
-
- });
- };
-
- Results.prototype.showLoading = function (params) {
- this.hideLoading();
-
- var loadingMore = this.options.get('translations').get('searching');
-
- var loading = {
- disabled: true,
- loading: true,
- text: loadingMore(params)
- };
- var $loading = this.option(loading);
- $loading.className += ' loading-results';
-
- this.$results.prepend($loading);
- };
-
- Results.prototype.hideLoading = function () {
- this.$results.find('.loading-results').remove();
- };
-
- Results.prototype.option = function (data) {
- var option = document.createElement('li');
- option.className = 'select2-results__option';
-
- var attrs = {
- 'role': 'option',
- 'aria-selected': 'false'
- };
-
- var matches = window.Element.prototype.matches ||
- window.Element.prototype.msMatchesSelector ||
- window.Element.prototype.webkitMatchesSelector;
-
- if ((data.element != null && matches.call(data.element, ':disabled')) ||
- (data.element == null && data.disabled)) {
- delete attrs['aria-selected'];
- attrs['aria-disabled'] = 'true';
- }
-
- if (data.id == null) {
- delete attrs['aria-selected'];
- }
-
- if (data._resultId != null) {
- option.id = data._resultId;
- }
-
- if (data.title) {
- option.title = data.title;
- }
-
- if (data.children) {
- attrs.role = 'group';
- attrs['aria-label'] = data.text;
- delete attrs['aria-selected'];
- }
-
- for (var attr in attrs) {
- var val = attrs[attr];
-
- option.setAttribute(attr, val);
- }
-
- if (data.children) {
- var $option = $(option);
-
- var label = document.createElement('strong');
- label.className = 'select2-results__group';
-
- var $label = $(label);
- this.template(data, label);
-
- var $children = [];
-
- for (var c = 0; c < data.children.length; c++) {
- var child = data.children[c];
-
- var $child = this.option(child);
-
- $children.push($child);
- }
-
- var $childrenContainer = $('', {
- 'class': 'select2-results__options select2-results__options--nested'
- });
-
- $childrenContainer.append($children);
-
- $option.append(label);
- $option.append($childrenContainer);
- } else {
- this.template(data, option);
- }
-
- Utils.StoreData(option, 'data', data);
-
- return option;
- };
-
- Results.prototype.bind = function (container, $container) {
- var self = this;
-
- var id = container.id + '-results';
-
- this.$results.attr('id', id);
-
- container.on('results:all', function (params) {
- self.clear();
- self.append(params.data);
-
- if (container.isOpen()) {
- self.setClasses();
- self.highlightFirstItem();
- }
- });
-
- container.on('results:append', function (params) {
- self.append(params.data);
-
- if (container.isOpen()) {
- self.setClasses();
- }
- });
-
- container.on('query', function (params) {
- self.hideMessages();
- self.showLoading(params);
- });
-
- container.on('select', function () {
- if (!container.isOpen()) {
- return;
- }
-
- self.setClasses();
-
- if (self.options.get('scrollAfterSelect')) {
- self.highlightFirstItem();
- }
- });
-
- container.on('unselect', function () {
- if (!container.isOpen()) {
- return;
- }
-
- self.setClasses();
-
- if (self.options.get('scrollAfterSelect')) {
- self.highlightFirstItem();
- }
- });
-
- container.on('open', function () {
- // When the dropdown is open, aria-expended="true"
- self.$results.attr('aria-expanded', 'true');
- self.$results.attr('aria-hidden', 'false');
-
- self.setClasses();
- self.ensureHighlightVisible();
- });
-
- container.on('close', function () {
- // When the dropdown is closed, aria-expended="false"
- self.$results.attr('aria-expanded', 'false');
- self.$results.attr('aria-hidden', 'true');
- self.$results.removeAttr('aria-activedescendant');
- });
-
- container.on('results:toggle', function () {
- var $highlighted = self.getHighlightedResults();
-
- if ($highlighted.length === 0) {
- return;
- }
-
- $highlighted.trigger('mouseup');
- });
-
- container.on('results:select', function () {
- var $highlighted = self.getHighlightedResults();
-
- if ($highlighted.length === 0) {
- return;
- }
-
- var data = Utils.GetData($highlighted[0], 'data');
-
- if ($highlighted.attr('aria-selected') == 'true') {
- self.trigger('close', {});
- } else {
- self.trigger('select', {
- data: data
- });
- }
- });
-
- container.on('results:previous', function () {
- var $highlighted = self.getHighlightedResults();
-
- var $options = self.$results.find('[aria-selected]');
-
- var currentIndex = $options.index($highlighted);
-
- // If we are already at the top, don't move further
- // If no options, currentIndex will be -1
- if (currentIndex <= 0) {
- return;
- }
-
- var nextIndex = currentIndex - 1;
-
- // If none are highlighted, highlight the first
- if ($highlighted.length === 0) {
- nextIndex = 0;
- }
-
- var $next = $options.eq(nextIndex);
-
- $next.trigger('mouseenter');
-
- var currentOffset = self.$results.offset().top;
- var nextTop = $next.offset().top;
- var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);
-
- if (nextIndex === 0) {
- self.$results.scrollTop(0);
- } else if (nextTop - currentOffset < 0) {
- self.$results.scrollTop(nextOffset);
- }
- });
-
- container.on('results:next', function () {
- var $highlighted = self.getHighlightedResults();
-
- var $options = self.$results.find('[aria-selected]');
-
- var currentIndex = $options.index($highlighted);
-
- var nextIndex = currentIndex + 1;
-
- // If we are at the last option, stay there
- if (nextIndex >= $options.length) {
- return;
- }
-
- var $next = $options.eq(nextIndex);
-
- $next.trigger('mouseenter');
-
- var currentOffset = self.$results.offset().top +
- self.$results.outerHeight(false);
- var nextBottom = $next.offset().top + $next.outerHeight(false);
- var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;
-
- if (nextIndex === 0) {
- self.$results.scrollTop(0);
- } else if (nextBottom > currentOffset) {
- self.$results.scrollTop(nextOffset);
- }
- });
-
- container.on('results:focus', function (params) {
- params.element.addClass('select2-results__option--highlighted');
- });
-
- container.on('results:message', function (params) {
- self.displayMessage(params);
- });
-
- if ($.fn.mousewheel) {
- this.$results.on('mousewheel', function (e) {
- var top = self.$results.scrollTop();
-
- var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;
-
- var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;
- var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();
-
- if (isAtTop) {
- self.$results.scrollTop(0);
-
- e.preventDefault();
- e.stopPropagation();
- } else if (isAtBottom) {
- self.$results.scrollTop(
- self.$results.get(0).scrollHeight - self.$results.height()
- );
-
- e.preventDefault();
- e.stopPropagation();
- }
- });
- }
-
- this.$results.on('mouseup', '.select2-results__option[aria-selected]',
- function (evt) {
- var $this = $(this);
-
- var data = Utils.GetData(this, 'data');
-
- if ($this.attr('aria-selected') === 'true') {
- if (self.options.get('multiple')) {
- self.trigger('unselect', {
- originalEvent: evt,
- data: data
- });
- } else {
- self.trigger('close', {});
- }
-
- return;
- }
-
- self.trigger('select', {
- originalEvent: evt,
- data: data
- });
- });
-
- this.$results.on('mouseenter', '.select2-results__option[aria-selected]',
- function (evt) {
- var data = Utils.GetData(this, 'data');
-
- self.getHighlightedResults()
- .removeClass('select2-results__option--highlighted');
-
- self.trigger('results:focus', {
- data: data,
- element: $(this)
- });
- });
- };
-
- Results.prototype.getHighlightedResults = function () {
- var $highlighted = this.$results
- .find('.select2-results__option--highlighted');
-
- return $highlighted;
- };
-
- Results.prototype.destroy = function () {
- this.$results.remove();
- };
-
- Results.prototype.ensureHighlightVisible = function () {
- var $highlighted = this.getHighlightedResults();
-
- if ($highlighted.length === 0) {
- return;
- }
-
- var $options = this.$results.find('[aria-selected]');
-
- var currentIndex = $options.index($highlighted);
-
- var currentOffset = this.$results.offset().top;
- var nextTop = $highlighted.offset().top;
- var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
-
- var offsetDelta = nextTop - currentOffset;
- nextOffset -= $highlighted.outerHeight(false) * 2;
-
- if (currentIndex <= 2) {
- this.$results.scrollTop(0);
- } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
- this.$results.scrollTop(nextOffset);
- }
- };
-
- Results.prototype.template = function (result, container) {
- var template = this.options.get('templateResult');
- var escapeMarkup = this.options.get('escapeMarkup');
-
- var content = template(result, container);
-
- if (content == null) {
- container.style.display = 'none';
- } else if (typeof content === 'string') {
- container.innerHTML = escapeMarkup(content);
- } else {
- $(container).append(content);
- }
- };
-
- return Results;
-});
-
-S2.define('select2/keys',[
-
-], function () {
- var KEYS = {
- BACKSPACE: 8,
- TAB: 9,
- ENTER: 13,
- SHIFT: 16,
- CTRL: 17,
- ALT: 18,
- ESC: 27,
- SPACE: 32,
- PAGE_UP: 33,
- PAGE_DOWN: 34,
- END: 35,
- HOME: 36,
- LEFT: 37,
- UP: 38,
- RIGHT: 39,
- DOWN: 40,
- DELETE: 46
- };
-
- return KEYS;
-});
-
-S2.define('select2/selection/base',[
- 'jquery',
- '../utils',
- '../keys'
-], function ($, Utils, KEYS) {
- function BaseSelection ($element, options) {
- this.$element = $element;
- this.options = options;
-
- BaseSelection.__super__.constructor.call(this);
- }
-
- Utils.Extend(BaseSelection, Utils.Observable);
-
- BaseSelection.prototype.render = function () {
- var $selection = $(
- '' +
- ' '
- );
-
- this._tabindex = 0;
-
- if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {
- this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');
- } else if (this.$element.attr('tabindex') != null) {
- this._tabindex = this.$element.attr('tabindex');
- }
-
- $selection.attr('title', this.$element.attr('title'));
- $selection.attr('tabindex', this._tabindex);
- $selection.attr('aria-disabled', 'false');
-
- this.$selection = $selection;
-
- return $selection;
- };
-
- BaseSelection.prototype.bind = function (container, $container) {
- var self = this;
-
- var resultsId = container.id + '-results';
-
- this.container = container;
-
- this.$selection.on('focus', function (evt) {
- self.trigger('focus', evt);
- });
-
- this.$selection.on('blur', function (evt) {
- self._handleBlur(evt);
- });
-
- this.$selection.on('keydown', function (evt) {
- self.trigger('keypress', evt);
-
- if (evt.which === KEYS.SPACE) {
- evt.preventDefault();
- }
- });
-
- container.on('results:focus', function (params) {
- self.$selection.attr('aria-activedescendant', params.data._resultId);
- });
-
- container.on('selection:update', function (params) {
- self.update(params.data);
- });
-
- container.on('open', function () {
- // When the dropdown is open, aria-expanded="true"
- self.$selection.attr('aria-expanded', 'true');
- self.$selection.attr('aria-owns', resultsId);
-
- self._attachCloseHandler(container);
- });
-
- container.on('close', function () {
- // When the dropdown is closed, aria-expanded="false"
- self.$selection.attr('aria-expanded', 'false');
- self.$selection.removeAttr('aria-activedescendant');
- self.$selection.removeAttr('aria-owns');
-
- self.$selection.trigger('focus');
-
- self._detachCloseHandler(container);
- });
-
- container.on('enable', function () {
- self.$selection.attr('tabindex', self._tabindex);
- self.$selection.attr('aria-disabled', 'false');
- });
-
- container.on('disable', function () {
- self.$selection.attr('tabindex', '-1');
- self.$selection.attr('aria-disabled', 'true');
- });
- };
-
- BaseSelection.prototype._handleBlur = function (evt) {
- var self = this;
-
- // This needs to be delayed as the active element is the body when the tab
- // key is pressed, possibly along with others.
- window.setTimeout(function () {
- // Don't trigger `blur` if the focus is still in the selection
- if (
- (document.activeElement == self.$selection[0]) ||
- ($.contains(self.$selection[0], document.activeElement))
- ) {
- return;
- }
-
- self.trigger('blur', evt);
- }, 1);
- };
-
- BaseSelection.prototype._attachCloseHandler = function (container) {
-
- $(document.body).on('mousedown.select2.' + container.id, function (e) {
- var $target = $(e.target);
-
- var $select = $target.closest('.select2');
-
- var $all = $('.select2.select2-container--open');
-
- $all.each(function () {
- if (this == $select[0]) {
- return;
- }
-
- var $element = Utils.GetData(this, 'element');
-
- $element.select2('close');
- });
- });
- };
-
- BaseSelection.prototype._detachCloseHandler = function (container) {
- $(document.body).off('mousedown.select2.' + container.id);
- };
-
- BaseSelection.prototype.position = function ($selection, $container) {
- var $selectionContainer = $container.find('.selection');
- $selectionContainer.append($selection);
- };
-
- BaseSelection.prototype.destroy = function () {
- this._detachCloseHandler(this.container);
- };
-
- BaseSelection.prototype.update = function (data) {
- throw new Error('The `update` method must be defined in child classes.');
- };
-
- /**
- * Helper method to abstract the "enabled" (not "disabled") state of this
- * object.
- *
- * @return {true} if the instance is not disabled.
- * @return {false} if the instance is disabled.
- */
- BaseSelection.prototype.isEnabled = function () {
- return !this.isDisabled();
- };
-
- /**
- * Helper method to abstract the "disabled" state of this object.
- *
- * @return {true} if the disabled option is true.
- * @return {false} if the disabled option is false.
- */
- BaseSelection.prototype.isDisabled = function () {
- return this.options.get('disabled');
- };
-
- return BaseSelection;
-});
-
-S2.define('select2/selection/single',[
- 'jquery',
- './base',
- '../utils',
- '../keys'
-], function ($, BaseSelection, Utils, KEYS) {
- function SingleSelection () {
- SingleSelection.__super__.constructor.apply(this, arguments);
- }
-
- Utils.Extend(SingleSelection, BaseSelection);
-
- SingleSelection.prototype.render = function () {
- var $selection = SingleSelection.__super__.render.call(this);
-
- $selection.addClass('select2-selection--single');
-
- $selection.html(
- ' ' +
- '' +
- ' ' +
- ' '
- );
-
- return $selection;
- };
-
- SingleSelection.prototype.bind = function (container, $container) {
- var self = this;
-
- SingleSelection.__super__.bind.apply(this, arguments);
-
- var id = container.id + '-container';
-
- this.$selection.find('.select2-selection__rendered')
- .attr('id', id)
- .attr('role', 'textbox')
- .attr('aria-readonly', 'true');
- this.$selection.attr('aria-labelledby', id);
-
- this.$selection.on('mousedown', function (evt) {
- // Only respond to left clicks
- if (evt.which !== 1) {
- return;
- }
-
- self.trigger('toggle', {
- originalEvent: evt
- });
- });
-
- this.$selection.on('focus', function (evt) {
- // User focuses on the container
- });
-
- this.$selection.on('blur', function (evt) {
- // User exits the container
- });
-
- container.on('focus', function (evt) {
- if (!container.isOpen()) {
- self.$selection.trigger('focus');
- }
- });
- };
-
- SingleSelection.prototype.clear = function () {
- var $rendered = this.$selection.find('.select2-selection__rendered');
- $rendered.empty();
- $rendered.removeAttr('title'); // clear tooltip on empty
- };
-
- SingleSelection.prototype.display = function (data, container) {
- var template = this.options.get('templateSelection');
- var escapeMarkup = this.options.get('escapeMarkup');
-
- return escapeMarkup(template(data, container));
- };
-
- SingleSelection.prototype.selectionContainer = function () {
- return $(' ');
- };
-
- SingleSelection.prototype.update = function (data) {
- if (data.length === 0) {
- this.clear();
- return;
- }
-
- var selection = data[0];
-
- var $rendered = this.$selection.find('.select2-selection__rendered');
- var formatted = this.display(selection, $rendered);
-
- $rendered.empty().append(formatted);
-
- var title = selection.title || selection.text;
-
- if (title) {
- $rendered.attr('title', title);
- } else {
- $rendered.removeAttr('title');
- }
- };
-
- return SingleSelection;
-});
-
-S2.define('select2/selection/multiple',[
- 'jquery',
- './base',
- '../utils'
-], function ($, BaseSelection, Utils) {
- function MultipleSelection ($element, options) {
- MultipleSelection.__super__.constructor.apply(this, arguments);
- }
-
- Utils.Extend(MultipleSelection, BaseSelection);
-
- MultipleSelection.prototype.render = function () {
- var $selection = MultipleSelection.__super__.render.call(this);
-
- $selection.addClass('select2-selection--multiple');
-
- $selection.html(
- ''
- );
-
- return $selection;
- };
-
- MultipleSelection.prototype.bind = function (container, $container) {
- var self = this;
-
- MultipleSelection.__super__.bind.apply(this, arguments);
-
- this.$selection.on('click', function (evt) {
- self.trigger('toggle', {
- originalEvent: evt
- });
- });
-
- this.$selection.on(
- 'click',
- '.select2-selection__choice__remove',
- function (evt) {
- // Ignore the event if it is disabled
- if (self.isDisabled()) {
- return;
- }
-
- var $remove = $(this);
- var $selection = $remove.parent();
-
- var data = Utils.GetData($selection[0], 'data');
-
- self.trigger('unselect', {
- originalEvent: evt,
- data: data
- });
- }
- );
- };
-
- MultipleSelection.prototype.clear = function () {
- var $rendered = this.$selection.find('.select2-selection__rendered');
- $rendered.empty();
- $rendered.removeAttr('title');
- };
-
- MultipleSelection.prototype.display = function (data, container) {
- var template = this.options.get('templateSelection');
- var escapeMarkup = this.options.get('escapeMarkup');
-
- return escapeMarkup(template(data, container));
- };
-
- MultipleSelection.prototype.selectionContainer = function () {
- var $container = $(
- '' +
- '' +
- '×' +
- ' ' +
- ' '
- );
-
- return $container;
- };
-
- MultipleSelection.prototype.update = function (data) {
- this.clear();
-
- if (data.length === 0) {
- return;
- }
-
- var $selections = [];
-
- for (var d = 0; d < data.length; d++) {
- var selection = data[d];
-
- var $selection = this.selectionContainer();
- var formatted = this.display(selection, $selection);
-
- $selection.append(formatted);
-
- var title = selection.title || selection.text;
-
- if (title) {
- $selection.attr('title', title);
- }
-
- Utils.StoreData($selection[0], 'data', selection);
-
- $selections.push($selection);
- }
-
- var $rendered = this.$selection.find('.select2-selection__rendered');
-
- Utils.appendMany($rendered, $selections);
- };
-
- return MultipleSelection;
-});
-
-S2.define('select2/selection/placeholder',[
- '../utils'
-], function (Utils) {
- function Placeholder (decorated, $element, options) {
- this.placeholder = this.normalizePlaceholder(options.get('placeholder'));
-
- decorated.call(this, $element, options);
- }
-
- Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {
- if (typeof placeholder === 'string') {
- placeholder = {
- id: '',
- text: placeholder
- };
- }
-
- return placeholder;
- };
-
- Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {
- var $placeholder = this.selectionContainer();
-
- $placeholder.html(this.display(placeholder));
- $placeholder.addClass('select2-selection__placeholder')
- .removeClass('select2-selection__choice');
-
- return $placeholder;
- };
-
- Placeholder.prototype.update = function (decorated, data) {
- var singlePlaceholder = (
- data.length == 1 && data[0].id != this.placeholder.id
- );
- var multipleSelections = data.length > 1;
-
- if (multipleSelections || singlePlaceholder) {
- return decorated.call(this, data);
- }
-
- this.clear();
-
- var $placeholder = this.createPlaceholder(this.placeholder);
-
- this.$selection.find('.select2-selection__rendered').append($placeholder);
- };
-
- return Placeholder;
-});
-
-S2.define('select2/selection/allowClear',[
- 'jquery',
- '../keys',
- '../utils'
-], function ($, KEYS, Utils) {
- function AllowClear () { }
-
- AllowClear.prototype.bind = function (decorated, container, $container) {
- var self = this;
-
- decorated.call(this, container, $container);
-
- if (this.placeholder == null) {
- if (this.options.get('debug') && window.console && console.error) {
- console.error(
- 'Select2: The `allowClear` option should be used in combination ' +
- 'with the `placeholder` option.'
- );
- }
- }
-
- this.$selection.on('mousedown', '.select2-selection__clear',
- function (evt) {
- self._handleClear(evt);
- });
-
- container.on('keypress', function (evt) {
- self._handleKeyboardClear(evt, container);
- });
- };
-
- AllowClear.prototype._handleClear = function (_, evt) {
- // Ignore the event if it is disabled
- if (this.isDisabled()) {
- return;
- }
-
- var $clear = this.$selection.find('.select2-selection__clear');
-
- // Ignore the event if nothing has been selected
- if ($clear.length === 0) {
- return;
- }
-
- evt.stopPropagation();
-
- var data = Utils.GetData($clear[0], 'data');
-
- var previousVal = this.$element.val();
- this.$element.val(this.placeholder.id);
-
- var unselectData = {
- data: data
- };
- this.trigger('clear', unselectData);
- if (unselectData.prevented) {
- this.$element.val(previousVal);
- return;
- }
-
- for (var d = 0; d < data.length; d++) {
- unselectData = {
- data: data[d]
- };
-
- // Trigger the `unselect` event, so people can prevent it from being
- // cleared.
- this.trigger('unselect', unselectData);
-
- // If the event was prevented, don't clear it out.
- if (unselectData.prevented) {
- this.$element.val(previousVal);
- return;
- }
- }
-
- this.$element.trigger('input').trigger('change');
-
- this.trigger('toggle', {});
- };
-
- AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {
- if (container.isOpen()) {
- return;
- }
-
- if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {
- this._handleClear(evt);
- }
- };
-
- AllowClear.prototype.update = function (decorated, data) {
- decorated.call(this, data);
-
- if (this.$selection.find('.select2-selection__placeholder').length > 0 ||
- data.length === 0) {
- return;
- }
-
- var removeAll = this.options.get('translations').get('removeAllItems');
-
- var $remove = $(
- '' +
- '×' +
- ' '
- );
- Utils.StoreData($remove[0], 'data', data);
-
- this.$selection.find('.select2-selection__rendered').prepend($remove);
- };
-
- return AllowClear;
-});
-
-S2.define('select2/selection/search',[
- 'jquery',
- '../utils',
- '../keys'
-], function ($, Utils, KEYS) {
- function Search (decorated, $element, options) {
- decorated.call(this, $element, options);
- }
-
- Search.prototype.render = function (decorated) {
- var $search = $(
- '' +
- ' ' +
- ' '
- );
-
- this.$searchContainer = $search;
- this.$search = $search.find('input');
-
- var $rendered = decorated.call(this);
-
- this._transferTabIndex();
-
- return $rendered;
- };
-
- Search.prototype.bind = function (decorated, container, $container) {
- var self = this;
-
- var resultsId = container.id + '-results';
-
- decorated.call(this, container, $container);
-
- container.on('open', function () {
- self.$search.attr('aria-controls', resultsId);
- self.$search.trigger('focus');
- });
-
- container.on('close', function () {
- self.$search.val('');
- self.$search.removeAttr('aria-controls');
- self.$search.removeAttr('aria-activedescendant');
- self.$search.trigger('focus');
- });
-
- container.on('enable', function () {
- self.$search.prop('disabled', false);
-
- self._transferTabIndex();
- });
-
- container.on('disable', function () {
- self.$search.prop('disabled', true);
- });
-
- container.on('focus', function (evt) {
- self.$search.trigger('focus');
- });
-
- container.on('results:focus', function (params) {
- if (params.data._resultId) {
- self.$search.attr('aria-activedescendant', params.data._resultId);
- } else {
- self.$search.removeAttr('aria-activedescendant');
- }
- });
-
- this.$selection.on('focusin', '.select2-search--inline', function (evt) {
- self.trigger('focus', evt);
- });
-
- this.$selection.on('focusout', '.select2-search--inline', function (evt) {
- self._handleBlur(evt);
- });
-
- this.$selection.on('keydown', '.select2-search--inline', function (evt) {
- evt.stopPropagation();
-
- self.trigger('keypress', evt);
-
- self._keyUpPrevented = evt.isDefaultPrevented();
-
- var key = evt.which;
-
- if (key === KEYS.BACKSPACE && self.$search.val() === '') {
- var $previousChoice = self.$searchContainer
- .prev('.select2-selection__choice');
-
- if ($previousChoice.length > 0) {
- var item = Utils.GetData($previousChoice[0], 'data');
-
- self.searchRemoveChoice(item);
-
- evt.preventDefault();
- }
- }
- });
-
- this.$selection.on('click', '.select2-search--inline', function (evt) {
- if (self.$search.val()) {
- evt.stopPropagation();
- }
- });
-
- // Try to detect the IE version should the `documentMode` property that
- // is stored on the document. This is only implemented in IE and is
- // slightly cleaner than doing a user agent check.
- // This property is not available in Edge, but Edge also doesn't have
- // this bug.
- var msie = document.documentMode;
- var disableInputEvents = msie && msie <= 11;
-
- // Workaround for browsers which do not support the `input` event
- // This will prevent double-triggering of events for browsers which support
- // both the `keyup` and `input` events.
- this.$selection.on(
- 'input.searchcheck',
- '.select2-search--inline',
- function (evt) {
- // IE will trigger the `input` event when a placeholder is used on a
- // search box. To get around this issue, we are forced to ignore all
- // `input` events in IE and keep using `keyup`.
- if (disableInputEvents) {
- self.$selection.off('input.search input.searchcheck');
- return;
- }
-
- // Unbind the duplicated `keyup` event
- self.$selection.off('keyup.search');
- }
- );
-
- this.$selection.on(
- 'keyup.search input.search',
- '.select2-search--inline',
- function (evt) {
- // IE will trigger the `input` event when a placeholder is used on a
- // search box. To get around this issue, we are forced to ignore all
- // `input` events in IE and keep using `keyup`.
- if (disableInputEvents && evt.type === 'input') {
- self.$selection.off('input.search input.searchcheck');
- return;
- }
-
- var key = evt.which;
-
- // We can freely ignore events from modifier keys
- if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {
- return;
- }
-
- // Tabbing will be handled during the `keydown` phase
- if (key == KEYS.TAB) {
- return;
- }
-
- self.handleSearch(evt);
- }
- );
- };
-
- /**
- * This method will transfer the tabindex attribute from the rendered
- * selection to the search box. This allows for the search box to be used as
- * the primary focus instead of the selection container.
- *
- * @private
- */
- Search.prototype._transferTabIndex = function (decorated) {
- this.$search.attr('tabindex', this.$selection.attr('tabindex'));
- this.$selection.attr('tabindex', '-1');
- };
-
- Search.prototype.createPlaceholder = function (decorated, placeholder) {
- this.$search.attr('placeholder', placeholder.text);
- };
-
- Search.prototype.update = function (decorated, data) {
- var searchHadFocus = this.$search[0] == document.activeElement;
-
- this.$search.attr('placeholder', '');
-
- decorated.call(this, data);
-
- this.$selection.find('.select2-selection__rendered')
- .append(this.$searchContainer);
-
- this.resizeSearch();
- if (searchHadFocus) {
- this.$search.trigger('focus');
- }
- };
-
- Search.prototype.handleSearch = function () {
- this.resizeSearch();
-
- if (!this._keyUpPrevented) {
- var input = this.$search.val();
-
- this.trigger('query', {
- term: input
- });
- }
-
- this._keyUpPrevented = false;
- };
-
- Search.prototype.searchRemoveChoice = function (decorated, item) {
- this.trigger('unselect', {
- data: item
- });
-
- this.$search.val(item.text);
- this.handleSearch();
- };
-
- Search.prototype.resizeSearch = function () {
- this.$search.css('width', '25px');
-
- var width = '';
-
- if (this.$search.attr('placeholder') !== '') {
- width = this.$selection.find('.select2-selection__rendered').width();
- } else {
- var minimumWidth = this.$search.val().length + 1;
-
- width = (minimumWidth * 0.75) + 'em';
- }
-
- this.$search.css('width', width);
- };
-
- return Search;
-});
-
-S2.define('select2/selection/eventRelay',[
- 'jquery'
-], function ($) {
- function EventRelay () { }
-
- EventRelay.prototype.bind = function (decorated, container, $container) {
- var self = this;
- var relayEvents = [
- 'open', 'opening',
- 'close', 'closing',
- 'select', 'selecting',
- 'unselect', 'unselecting',
- 'clear', 'clearing'
- ];
-
- var preventableEvents = [
- 'opening', 'closing', 'selecting', 'unselecting', 'clearing'
- ];
-
- decorated.call(this, container, $container);
-
- container.on('*', function (name, params) {
- // Ignore events that should not be relayed
- if ($.inArray(name, relayEvents) === -1) {
- return;
- }
-
- // The parameters should always be an object
- params = params || {};
-
- // Generate the jQuery event for the Select2 event
- var evt = $.Event('select2:' + name, {
- params: params
- });
-
- self.$element.trigger(evt);
-
- // Only handle preventable events if it was one
- if ($.inArray(name, preventableEvents) === -1) {
- return;
- }
-
- params.prevented = evt.isDefaultPrevented();
- });
- };
-
- return EventRelay;
-});
-
-S2.define('select2/translation',[
- 'jquery',
- 'require'
-], function ($, require) {
- function Translation (dict) {
- this.dict = dict || {};
- }
-
- Translation.prototype.all = function () {
- return this.dict;
- };
-
- Translation.prototype.get = function (key) {
- return this.dict[key];
- };
-
- Translation.prototype.extend = function (translation) {
- this.dict = $.extend({}, translation.all(), this.dict);
- };
-
- // Static functions
-
- Translation._cache = {};
-
- Translation.loadPath = function (path) {
- if (!(path in Translation._cache)) {
- var translations = require(path);
-
- Translation._cache[path] = translations;
- }
-
- return new Translation(Translation._cache[path]);
- };
-
- return Translation;
-});
-
-S2.define('select2/diacritics',[
-
-], function () {
- var diacritics = {
- '\u24B6': 'A',
- '\uFF21': 'A',
- '\u00C0': 'A',
- '\u00C1': 'A',
- '\u00C2': 'A',
- '\u1EA6': 'A',
- '\u1EA4': 'A',
- '\u1EAA': 'A',
- '\u1EA8': 'A',
- '\u00C3': 'A',
- '\u0100': 'A',
- '\u0102': 'A',
- '\u1EB0': 'A',
- '\u1EAE': 'A',
- '\u1EB4': 'A',
- '\u1EB2': 'A',
- '\u0226': 'A',
- '\u01E0': 'A',
- '\u00C4': 'A',
- '\u01DE': 'A',
- '\u1EA2': 'A',
- '\u00C5': 'A',
- '\u01FA': 'A',
- '\u01CD': 'A',
- '\u0200': 'A',
- '\u0202': 'A',
- '\u1EA0': 'A',
- '\u1EAC': 'A',
- '\u1EB6': 'A',
- '\u1E00': 'A',
- '\u0104': 'A',
- '\u023A': 'A',
- '\u2C6F': 'A',
- '\uA732': 'AA',
- '\u00C6': 'AE',
- '\u01FC': 'AE',
- '\u01E2': 'AE',
- '\uA734': 'AO',
- '\uA736': 'AU',
- '\uA738': 'AV',
- '\uA73A': 'AV',
- '\uA73C': 'AY',
- '\u24B7': 'B',
- '\uFF22': 'B',
- '\u1E02': 'B',
- '\u1E04': 'B',
- '\u1E06': 'B',
- '\u0243': 'B',
- '\u0182': 'B',
- '\u0181': 'B',
- '\u24B8': 'C',
- '\uFF23': 'C',
- '\u0106': 'C',
- '\u0108': 'C',
- '\u010A': 'C',
- '\u010C': 'C',
- '\u00C7': 'C',
- '\u1E08': 'C',
- '\u0187': 'C',
- '\u023B': 'C',
- '\uA73E': 'C',
- '\u24B9': 'D',
- '\uFF24': 'D',
- '\u1E0A': 'D',
- '\u010E': 'D',
- '\u1E0C': 'D',
- '\u1E10': 'D',
- '\u1E12': 'D',
- '\u1E0E': 'D',
- '\u0110': 'D',
- '\u018B': 'D',
- '\u018A': 'D',
- '\u0189': 'D',
- '\uA779': 'D',
- '\u01F1': 'DZ',
- '\u01C4': 'DZ',
- '\u01F2': 'Dz',
- '\u01C5': 'Dz',
- '\u24BA': 'E',
- '\uFF25': 'E',
- '\u00C8': 'E',
- '\u00C9': 'E',
- '\u00CA': 'E',
- '\u1EC0': 'E',
- '\u1EBE': 'E',
- '\u1EC4': 'E',
- '\u1EC2': 'E',
- '\u1EBC': 'E',
- '\u0112': 'E',
- '\u1E14': 'E',
- '\u1E16': 'E',
- '\u0114': 'E',
- '\u0116': 'E',
- '\u00CB': 'E',
- '\u1EBA': 'E',
- '\u011A': 'E',
- '\u0204': 'E',
- '\u0206': 'E',
- '\u1EB8': 'E',
- '\u1EC6': 'E',
- '\u0228': 'E',
- '\u1E1C': 'E',
- '\u0118': 'E',
- '\u1E18': 'E',
- '\u1E1A': 'E',
- '\u0190': 'E',
- '\u018E': 'E',
- '\u24BB': 'F',
- '\uFF26': 'F',
- '\u1E1E': 'F',
- '\u0191': 'F',
- '\uA77B': 'F',
- '\u24BC': 'G',
- '\uFF27': 'G',
- '\u01F4': 'G',
- '\u011C': 'G',
- '\u1E20': 'G',
- '\u011E': 'G',
- '\u0120': 'G',
- '\u01E6': 'G',
- '\u0122': 'G',
- '\u01E4': 'G',
- '\u0193': 'G',
- '\uA7A0': 'G',
- '\uA77D': 'G',
- '\uA77E': 'G',
- '\u24BD': 'H',
- '\uFF28': 'H',
- '\u0124': 'H',
- '\u1E22': 'H',
- '\u1E26': 'H',
- '\u021E': 'H',
- '\u1E24': 'H',
- '\u1E28': 'H',
- '\u1E2A': 'H',
- '\u0126': 'H',
- '\u2C67': 'H',
- '\u2C75': 'H',
- '\uA78D': 'H',
- '\u24BE': 'I',
- '\uFF29': 'I',
- '\u00CC': 'I',
- '\u00CD': 'I',
- '\u00CE': 'I',
- '\u0128': 'I',
- '\u012A': 'I',
- '\u012C': 'I',
- '\u0130': 'I',
- '\u00CF': 'I',
- '\u1E2E': 'I',
- '\u1EC8': 'I',
- '\u01CF': 'I',
- '\u0208': 'I',
- '\u020A': 'I',
- '\u1ECA': 'I',
- '\u012E': 'I',
- '\u1E2C': 'I',
- '\u0197': 'I',
- '\u24BF': 'J',
- '\uFF2A': 'J',
- '\u0134': 'J',
- '\u0248': 'J',
- '\u24C0': 'K',
- '\uFF2B': 'K',
- '\u1E30': 'K',
- '\u01E8': 'K',
- '\u1E32': 'K',
- '\u0136': 'K',
- '\u1E34': 'K',
- '\u0198': 'K',
- '\u2C69': 'K',
- '\uA740': 'K',
- '\uA742': 'K',
- '\uA744': 'K',
- '\uA7A2': 'K',
- '\u24C1': 'L',
- '\uFF2C': 'L',
- '\u013F': 'L',
- '\u0139': 'L',
- '\u013D': 'L',
- '\u1E36': 'L',
- '\u1E38': 'L',
- '\u013B': 'L',
- '\u1E3C': 'L',
- '\u1E3A': 'L',
- '\u0141': 'L',
- '\u023D': 'L',
- '\u2C62': 'L',
- '\u2C60': 'L',
- '\uA748': 'L',
- '\uA746': 'L',
- '\uA780': 'L',
- '\u01C7': 'LJ',
- '\u01C8': 'Lj',
- '\u24C2': 'M',
- '\uFF2D': 'M',
- '\u1E3E': 'M',
- '\u1E40': 'M',
- '\u1E42': 'M',
- '\u2C6E': 'M',
- '\u019C': 'M',
- '\u24C3': 'N',
- '\uFF2E': 'N',
- '\u01F8': 'N',
- '\u0143': 'N',
- '\u00D1': 'N',
- '\u1E44': 'N',
- '\u0147': 'N',
- '\u1E46': 'N',
- '\u0145': 'N',
- '\u1E4A': 'N',
- '\u1E48': 'N',
- '\u0220': 'N',
- '\u019D': 'N',
- '\uA790': 'N',
- '\uA7A4': 'N',
- '\u01CA': 'NJ',
- '\u01CB': 'Nj',
- '\u24C4': 'O',
- '\uFF2F': 'O',
- '\u00D2': 'O',
- '\u00D3': 'O',
- '\u00D4': 'O',
- '\u1ED2': 'O',
- '\u1ED0': 'O',
- '\u1ED6': 'O',
- '\u1ED4': 'O',
- '\u00D5': 'O',
- '\u1E4C': 'O',
- '\u022C': 'O',
- '\u1E4E': 'O',
- '\u014C': 'O',
- '\u1E50': 'O',
- '\u1E52': 'O',
- '\u014E': 'O',
- '\u022E': 'O',
- '\u0230': 'O',
- '\u00D6': 'O',
- '\u022A': 'O',
- '\u1ECE': 'O',
- '\u0150': 'O',
- '\u01D1': 'O',
- '\u020C': 'O',
- '\u020E': 'O',
- '\u01A0': 'O',
- '\u1EDC': 'O',
- '\u1EDA': 'O',
- '\u1EE0': 'O',
- '\u1EDE': 'O',
- '\u1EE2': 'O',
- '\u1ECC': 'O',
- '\u1ED8': 'O',
- '\u01EA': 'O',
- '\u01EC': 'O',
- '\u00D8': 'O',
- '\u01FE': 'O',
- '\u0186': 'O',
- '\u019F': 'O',
- '\uA74A': 'O',
- '\uA74C': 'O',
- '\u0152': 'OE',
- '\u01A2': 'OI',
- '\uA74E': 'OO',
- '\u0222': 'OU',
- '\u24C5': 'P',
- '\uFF30': 'P',
- '\u1E54': 'P',
- '\u1E56': 'P',
- '\u01A4': 'P',
- '\u2C63': 'P',
- '\uA750': 'P',
- '\uA752': 'P',
- '\uA754': 'P',
- '\u24C6': 'Q',
- '\uFF31': 'Q',
- '\uA756': 'Q',
- '\uA758': 'Q',
- '\u024A': 'Q',
- '\u24C7': 'R',
- '\uFF32': 'R',
- '\u0154': 'R',
- '\u1E58': 'R',
- '\u0158': 'R',
- '\u0210': 'R',
- '\u0212': 'R',
- '\u1E5A': 'R',
- '\u1E5C': 'R',
- '\u0156': 'R',
- '\u1E5E': 'R',
- '\u024C': 'R',
- '\u2C64': 'R',
- '\uA75A': 'R',
- '\uA7A6': 'R',
- '\uA782': 'R',
- '\u24C8': 'S',
- '\uFF33': 'S',
- '\u1E9E': 'S',
- '\u015A': 'S',
- '\u1E64': 'S',
- '\u015C': 'S',
- '\u1E60': 'S',
- '\u0160': 'S',
- '\u1E66': 'S',
- '\u1E62': 'S',
- '\u1E68': 'S',
- '\u0218': 'S',
- '\u015E': 'S',
- '\u2C7E': 'S',
- '\uA7A8': 'S',
- '\uA784': 'S',
- '\u24C9': 'T',
- '\uFF34': 'T',
- '\u1E6A': 'T',
- '\u0164': 'T',
- '\u1E6C': 'T',
- '\u021A': 'T',
- '\u0162': 'T',
- '\u1E70': 'T',
- '\u1E6E': 'T',
- '\u0166': 'T',
- '\u01AC': 'T',
- '\u01AE': 'T',
- '\u023E': 'T',
- '\uA786': 'T',
- '\uA728': 'TZ',
- '\u24CA': 'U',
- '\uFF35': 'U',
- '\u00D9': 'U',
- '\u00DA': 'U',
- '\u00DB': 'U',
- '\u0168': 'U',
- '\u1E78': 'U',
- '\u016A': 'U',
- '\u1E7A': 'U',
- '\u016C': 'U',
- '\u00DC': 'U',
- '\u01DB': 'U',
- '\u01D7': 'U',
- '\u01D5': 'U',
- '\u01D9': 'U',
- '\u1EE6': 'U',
- '\u016E': 'U',
- '\u0170': 'U',
- '\u01D3': 'U',
- '\u0214': 'U',
- '\u0216': 'U',
- '\u01AF': 'U',
- '\u1EEA': 'U',
- '\u1EE8': 'U',
- '\u1EEE': 'U',
- '\u1EEC': 'U',
- '\u1EF0': 'U',
- '\u1EE4': 'U',
- '\u1E72': 'U',
- '\u0172': 'U',
- '\u1E76': 'U',
- '\u1E74': 'U',
- '\u0244': 'U',
- '\u24CB': 'V',
- '\uFF36': 'V',
- '\u1E7C': 'V',
- '\u1E7E': 'V',
- '\u01B2': 'V',
- '\uA75E': 'V',
- '\u0245': 'V',
- '\uA760': 'VY',
- '\u24CC': 'W',
- '\uFF37': 'W',
- '\u1E80': 'W',
- '\u1E82': 'W',
- '\u0174': 'W',
- '\u1E86': 'W',
- '\u1E84': 'W',
- '\u1E88': 'W',
- '\u2C72': 'W',
- '\u24CD': 'X',
- '\uFF38': 'X',
- '\u1E8A': 'X',
- '\u1E8C': 'X',
- '\u24CE': 'Y',
- '\uFF39': 'Y',
- '\u1EF2': 'Y',
- '\u00DD': 'Y',
- '\u0176': 'Y',
- '\u1EF8': 'Y',
- '\u0232': 'Y',
- '\u1E8E': 'Y',
- '\u0178': 'Y',
- '\u1EF6': 'Y',
- '\u1EF4': 'Y',
- '\u01B3': 'Y',
- '\u024E': 'Y',
- '\u1EFE': 'Y',
- '\u24CF': 'Z',
- '\uFF3A': 'Z',
- '\u0179': 'Z',
- '\u1E90': 'Z',
- '\u017B': 'Z',
- '\u017D': 'Z',
- '\u1E92': 'Z',
- '\u1E94': 'Z',
- '\u01B5': 'Z',
- '\u0224': 'Z',
- '\u2C7F': 'Z',
- '\u2C6B': 'Z',
- '\uA762': 'Z',
- '\u24D0': 'a',
- '\uFF41': 'a',
- '\u1E9A': 'a',
- '\u00E0': 'a',
- '\u00E1': 'a',
- '\u00E2': 'a',
- '\u1EA7': 'a',
- '\u1EA5': 'a',
- '\u1EAB': 'a',
- '\u1EA9': 'a',
- '\u00E3': 'a',
- '\u0101': 'a',
- '\u0103': 'a',
- '\u1EB1': 'a',
- '\u1EAF': 'a',
- '\u1EB5': 'a',
- '\u1EB3': 'a',
- '\u0227': 'a',
- '\u01E1': 'a',
- '\u00E4': 'a',
- '\u01DF': 'a',
- '\u1EA3': 'a',
- '\u00E5': 'a',
- '\u01FB': 'a',
- '\u01CE': 'a',
- '\u0201': 'a',
- '\u0203': 'a',
- '\u1EA1': 'a',
- '\u1EAD': 'a',
- '\u1EB7': 'a',
- '\u1E01': 'a',
- '\u0105': 'a',
- '\u2C65': 'a',
- '\u0250': 'a',
- '\uA733': 'aa',
- '\u00E6': 'ae',
- '\u01FD': 'ae',
- '\u01E3': 'ae',
- '\uA735': 'ao',
- '\uA737': 'au',
- '\uA739': 'av',
- '\uA73B': 'av',
- '\uA73D': 'ay',
- '\u24D1': 'b',
- '\uFF42': 'b',
- '\u1E03': 'b',
- '\u1E05': 'b',
- '\u1E07': 'b',
- '\u0180': 'b',
- '\u0183': 'b',
- '\u0253': 'b',
- '\u24D2': 'c',
- '\uFF43': 'c',
- '\u0107': 'c',
- '\u0109': 'c',
- '\u010B': 'c',
- '\u010D': 'c',
- '\u00E7': 'c',
- '\u1E09': 'c',
- '\u0188': 'c',
- '\u023C': 'c',
- '\uA73F': 'c',
- '\u2184': 'c',
- '\u24D3': 'd',
- '\uFF44': 'd',
- '\u1E0B': 'd',
- '\u010F': 'd',
- '\u1E0D': 'd',
- '\u1E11': 'd',
- '\u1E13': 'd',
- '\u1E0F': 'd',
- '\u0111': 'd',
- '\u018C': 'd',
- '\u0256': 'd',
- '\u0257': 'd',
- '\uA77A': 'd',
- '\u01F3': 'dz',
- '\u01C6': 'dz',
- '\u24D4': 'e',
- '\uFF45': 'e',
- '\u00E8': 'e',
- '\u00E9': 'e',
- '\u00EA': 'e',
- '\u1EC1': 'e',
- '\u1EBF': 'e',
- '\u1EC5': 'e',
- '\u1EC3': 'e',
- '\u1EBD': 'e',
- '\u0113': 'e',
- '\u1E15': 'e',
- '\u1E17': 'e',
- '\u0115': 'e',
- '\u0117': 'e',
- '\u00EB': 'e',
- '\u1EBB': 'e',
- '\u011B': 'e',
- '\u0205': 'e',
- '\u0207': 'e',
- '\u1EB9': 'e',
- '\u1EC7': 'e',
- '\u0229': 'e',
- '\u1E1D': 'e',
- '\u0119': 'e',
- '\u1E19': 'e',
- '\u1E1B': 'e',
- '\u0247': 'e',
- '\u025B': 'e',
- '\u01DD': 'e',
- '\u24D5': 'f',
- '\uFF46': 'f',
- '\u1E1F': 'f',
- '\u0192': 'f',
- '\uA77C': 'f',
- '\u24D6': 'g',
- '\uFF47': 'g',
- '\u01F5': 'g',
- '\u011D': 'g',
- '\u1E21': 'g',
- '\u011F': 'g',
- '\u0121': 'g',
- '\u01E7': 'g',
- '\u0123': 'g',
- '\u01E5': 'g',
- '\u0260': 'g',
- '\uA7A1': 'g',
- '\u1D79': 'g',
- '\uA77F': 'g',
- '\u24D7': 'h',
- '\uFF48': 'h',
- '\u0125': 'h',
- '\u1E23': 'h',
- '\u1E27': 'h',
- '\u021F': 'h',
- '\u1E25': 'h',
- '\u1E29': 'h',
- '\u1E2B': 'h',
- '\u1E96': 'h',
- '\u0127': 'h',
- '\u2C68': 'h',
- '\u2C76': 'h',
- '\u0265': 'h',
- '\u0195': 'hv',
- '\u24D8': 'i',
- '\uFF49': 'i',
- '\u00EC': 'i',
- '\u00ED': 'i',
- '\u00EE': 'i',
- '\u0129': 'i',
- '\u012B': 'i',
- '\u012D': 'i',
- '\u00EF': 'i',
- '\u1E2F': 'i',
- '\u1EC9': 'i',
- '\u01D0': 'i',
- '\u0209': 'i',
- '\u020B': 'i',
- '\u1ECB': 'i',
- '\u012F': 'i',
- '\u1E2D': 'i',
- '\u0268': 'i',
- '\u0131': 'i',
- '\u24D9': 'j',
- '\uFF4A': 'j',
- '\u0135': 'j',
- '\u01F0': 'j',
- '\u0249': 'j',
- '\u24DA': 'k',
- '\uFF4B': 'k',
- '\u1E31': 'k',
- '\u01E9': 'k',
- '\u1E33': 'k',
- '\u0137': 'k',
- '\u1E35': 'k',
- '\u0199': 'k',
- '\u2C6A': 'k',
- '\uA741': 'k',
- '\uA743': 'k',
- '\uA745': 'k',
- '\uA7A3': 'k',
- '\u24DB': 'l',
- '\uFF4C': 'l',
- '\u0140': 'l',
- '\u013A': 'l',
- '\u013E': 'l',
- '\u1E37': 'l',
- '\u1E39': 'l',
- '\u013C': 'l',
- '\u1E3D': 'l',
- '\u1E3B': 'l',
- '\u017F': 'l',
- '\u0142': 'l',
- '\u019A': 'l',
- '\u026B': 'l',
- '\u2C61': 'l',
- '\uA749': 'l',
- '\uA781': 'l',
- '\uA747': 'l',
- '\u01C9': 'lj',
- '\u24DC': 'm',
- '\uFF4D': 'm',
- '\u1E3F': 'm',
- '\u1E41': 'm',
- '\u1E43': 'm',
- '\u0271': 'm',
- '\u026F': 'm',
- '\u24DD': 'n',
- '\uFF4E': 'n',
- '\u01F9': 'n',
- '\u0144': 'n',
- '\u00F1': 'n',
- '\u1E45': 'n',
- '\u0148': 'n',
- '\u1E47': 'n',
- '\u0146': 'n',
- '\u1E4B': 'n',
- '\u1E49': 'n',
- '\u019E': 'n',
- '\u0272': 'n',
- '\u0149': 'n',
- '\uA791': 'n',
- '\uA7A5': 'n',
- '\u01CC': 'nj',
- '\u24DE': 'o',
- '\uFF4F': 'o',
- '\u00F2': 'o',
- '\u00F3': 'o',
- '\u00F4': 'o',
- '\u1ED3': 'o',
- '\u1ED1': 'o',
- '\u1ED7': 'o',
- '\u1ED5': 'o',
- '\u00F5': 'o',
- '\u1E4D': 'o',
- '\u022D': 'o',
- '\u1E4F': 'o',
- '\u014D': 'o',
- '\u1E51': 'o',
- '\u1E53': 'o',
- '\u014F': 'o',
- '\u022F': 'o',
- '\u0231': 'o',
- '\u00F6': 'o',
- '\u022B': 'o',
- '\u1ECF': 'o',
- '\u0151': 'o',
- '\u01D2': 'o',
- '\u020D': 'o',
- '\u020F': 'o',
- '\u01A1': 'o',
- '\u1EDD': 'o',
- '\u1EDB': 'o',
- '\u1EE1': 'o',
- '\u1EDF': 'o',
- '\u1EE3': 'o',
- '\u1ECD': 'o',
- '\u1ED9': 'o',
- '\u01EB': 'o',
- '\u01ED': 'o',
- '\u00F8': 'o',
- '\u01FF': 'o',
- '\u0254': 'o',
- '\uA74B': 'o',
- '\uA74D': 'o',
- '\u0275': 'o',
- '\u0153': 'oe',
- '\u01A3': 'oi',
- '\u0223': 'ou',
- '\uA74F': 'oo',
- '\u24DF': 'p',
- '\uFF50': 'p',
- '\u1E55': 'p',
- '\u1E57': 'p',
- '\u01A5': 'p',
- '\u1D7D': 'p',
- '\uA751': 'p',
- '\uA753': 'p',
- '\uA755': 'p',
- '\u24E0': 'q',
- '\uFF51': 'q',
- '\u024B': 'q',
- '\uA757': 'q',
- '\uA759': 'q',
- '\u24E1': 'r',
- '\uFF52': 'r',
- '\u0155': 'r',
- '\u1E59': 'r',
- '\u0159': 'r',
- '\u0211': 'r',
- '\u0213': 'r',
- '\u1E5B': 'r',
- '\u1E5D': 'r',
- '\u0157': 'r',
- '\u1E5F': 'r',
- '\u024D': 'r',
- '\u027D': 'r',
- '\uA75B': 'r',
- '\uA7A7': 'r',
- '\uA783': 'r',
- '\u24E2': 's',
- '\uFF53': 's',
- '\u00DF': 's',
- '\u015B': 's',
- '\u1E65': 's',
- '\u015D': 's',
- '\u1E61': 's',
- '\u0161': 's',
- '\u1E67': 's',
- '\u1E63': 's',
- '\u1E69': 's',
- '\u0219': 's',
- '\u015F': 's',
- '\u023F': 's',
- '\uA7A9': 's',
- '\uA785': 's',
- '\u1E9B': 's',
- '\u24E3': 't',
- '\uFF54': 't',
- '\u1E6B': 't',
- '\u1E97': 't',
- '\u0165': 't',
- '\u1E6D': 't',
- '\u021B': 't',
- '\u0163': 't',
- '\u1E71': 't',
- '\u1E6F': 't',
- '\u0167': 't',
- '\u01AD': 't',
- '\u0288': 't',
- '\u2C66': 't',
- '\uA787': 't',
- '\uA729': 'tz',
- '\u24E4': 'u',
- '\uFF55': 'u',
- '\u00F9': 'u',
- '\u00FA': 'u',
- '\u00FB': 'u',
- '\u0169': 'u',
- '\u1E79': 'u',
- '\u016B': 'u',
- '\u1E7B': 'u',
- '\u016D': 'u',
- '\u00FC': 'u',
- '\u01DC': 'u',
- '\u01D8': 'u',
- '\u01D6': 'u',
- '\u01DA': 'u',
- '\u1EE7': 'u',
- '\u016F': 'u',
- '\u0171': 'u',
- '\u01D4': 'u',
- '\u0215': 'u',
- '\u0217': 'u',
- '\u01B0': 'u',
- '\u1EEB': 'u',
- '\u1EE9': 'u',
- '\u1EEF': 'u',
- '\u1EED': 'u',
- '\u1EF1': 'u',
- '\u1EE5': 'u',
- '\u1E73': 'u',
- '\u0173': 'u',
- '\u1E77': 'u',
- '\u1E75': 'u',
- '\u0289': 'u',
- '\u24E5': 'v',
- '\uFF56': 'v',
- '\u1E7D': 'v',
- '\u1E7F': 'v',
- '\u028B': 'v',
- '\uA75F': 'v',
- '\u028C': 'v',
- '\uA761': 'vy',
- '\u24E6': 'w',
- '\uFF57': 'w',
- '\u1E81': 'w',
- '\u1E83': 'w',
- '\u0175': 'w',
- '\u1E87': 'w',
- '\u1E85': 'w',
- '\u1E98': 'w',
- '\u1E89': 'w',
- '\u2C73': 'w',
- '\u24E7': 'x',
- '\uFF58': 'x',
- '\u1E8B': 'x',
- '\u1E8D': 'x',
- '\u24E8': 'y',
- '\uFF59': 'y',
- '\u1EF3': 'y',
- '\u00FD': 'y',
- '\u0177': 'y',
- '\u1EF9': 'y',
- '\u0233': 'y',
- '\u1E8F': 'y',
- '\u00FF': 'y',
- '\u1EF7': 'y',
- '\u1E99': 'y',
- '\u1EF5': 'y',
- '\u01B4': 'y',
- '\u024F': 'y',
- '\u1EFF': 'y',
- '\u24E9': 'z',
- '\uFF5A': 'z',
- '\u017A': 'z',
- '\u1E91': 'z',
- '\u017C': 'z',
- '\u017E': 'z',
- '\u1E93': 'z',
- '\u1E95': 'z',
- '\u01B6': 'z',
- '\u0225': 'z',
- '\u0240': 'z',
- '\u2C6C': 'z',
- '\uA763': 'z',
- '\u0386': '\u0391',
- '\u0388': '\u0395',
- '\u0389': '\u0397',
- '\u038A': '\u0399',
- '\u03AA': '\u0399',
- '\u038C': '\u039F',
- '\u038E': '\u03A5',
- '\u03AB': '\u03A5',
- '\u038F': '\u03A9',
- '\u03AC': '\u03B1',
- '\u03AD': '\u03B5',
- '\u03AE': '\u03B7',
- '\u03AF': '\u03B9',
- '\u03CA': '\u03B9',
- '\u0390': '\u03B9',
- '\u03CC': '\u03BF',
- '\u03CD': '\u03C5',
- '\u03CB': '\u03C5',
- '\u03B0': '\u03C5',
- '\u03CE': '\u03C9',
- '\u03C2': '\u03C3',
- '\u2019': '\''
- };
-
- return diacritics;
-});
-
-S2.define('select2/data/base',[
- '../utils'
-], function (Utils) {
- function BaseAdapter ($element, options) {
- BaseAdapter.__super__.constructor.call(this);
- }
-
- Utils.Extend(BaseAdapter, Utils.Observable);
-
- BaseAdapter.prototype.current = function (callback) {
- throw new Error('The `current` method must be defined in child classes.');
- };
-
- BaseAdapter.prototype.query = function (params, callback) {
- throw new Error('The `query` method must be defined in child classes.');
- };
-
- BaseAdapter.prototype.bind = function (container, $container) {
- // Can be implemented in subclasses
- };
-
- BaseAdapter.prototype.destroy = function () {
- // Can be implemented in subclasses
- };
-
- BaseAdapter.prototype.generateResultId = function (container, data) {
- var id = container.id + '-result-';
-
- id += Utils.generateChars(4);
-
- if (data.id != null) {
- id += '-' + data.id.toString();
- } else {
- id += '-' + Utils.generateChars(4);
- }
- return id;
- };
-
- return BaseAdapter;
-});
-
-S2.define('select2/data/select',[
- './base',
- '../utils',
- 'jquery'
-], function (BaseAdapter, Utils, $) {
- function SelectAdapter ($element, options) {
- this.$element = $element;
- this.options = options;
-
- SelectAdapter.__super__.constructor.call(this);
- }
-
- Utils.Extend(SelectAdapter, BaseAdapter);
-
- SelectAdapter.prototype.current = function (callback) {
- var data = [];
- var self = this;
-
- this.$element.find(':selected').each(function () {
- var $option = $(this);
-
- var option = self.item($option);
-
- data.push(option);
- });
-
- callback(data);
- };
-
- SelectAdapter.prototype.select = function (data) {
- var self = this;
-
- data.selected = true;
-
- // If data.element is a DOM node, use it instead
- if ($(data.element).is('option')) {
- data.element.selected = true;
-
- this.$element.trigger('input').trigger('change');
-
- return;
- }
-
- if (this.$element.prop('multiple')) {
- this.current(function (currentData) {
- var val = [];
-
- data = [data];
- data.push.apply(data, currentData);
-
- for (var d = 0; d < data.length; d++) {
- var id = data[d].id;
-
- if ($.inArray(id, val) === -1) {
- val.push(id);
- }
- }
-
- self.$element.val(val);
- self.$element.trigger('input').trigger('change');
- });
- } else {
- var val = data.id;
-
- this.$element.val(val);
- this.$element.trigger('input').trigger('change');
- }
- };
-
- SelectAdapter.prototype.unselect = function (data) {
- var self = this;
-
- if (!this.$element.prop('multiple')) {
- return;
- }
-
- data.selected = false;
-
- if ($(data.element).is('option')) {
- data.element.selected = false;
-
- this.$element.trigger('input').trigger('change');
-
- return;
- }
-
- this.current(function (currentData) {
- var val = [];
-
- for (var d = 0; d < currentData.length; d++) {
- var id = currentData[d].id;
-
- if (id !== data.id && $.inArray(id, val) === -1) {
- val.push(id);
- }
- }
-
- self.$element.val(val);
-
- self.$element.trigger('input').trigger('change');
- });
- };
-
- SelectAdapter.prototype.bind = function (container, $container) {
- var self = this;
-
- this.container = container;
-
- container.on('select', function (params) {
- self.select(params.data);
- });
-
- container.on('unselect', function (params) {
- self.unselect(params.data);
- });
- };
-
- SelectAdapter.prototype.destroy = function () {
- // Remove anything added to child elements
- this.$element.find('*').each(function () {
- // Remove any custom data set by Select2
- Utils.RemoveData(this);
- });
- };
-
- SelectAdapter.prototype.query = function (params, callback) {
- var data = [];
- var self = this;
-
- var $options = this.$element.children();
-
- $options.each(function () {
- var $option = $(this);
-
- if (!$option.is('option') && !$option.is('optgroup')) {
- return;
- }
-
- var option = self.item($option);
-
- var matches = self.matches(params, option);
-
- if (matches !== null) {
- data.push(matches);
- }
- });
-
- callback({
- results: data
- });
- };
-
- SelectAdapter.prototype.addOptions = function ($options) {
- Utils.appendMany(this.$element, $options);
- };
-
- SelectAdapter.prototype.option = function (data) {
- var option;
-
- if (data.children) {
- option = document.createElement('optgroup');
- option.label = data.text;
- } else {
- option = document.createElement('option');
-
- if (option.textContent !== undefined) {
- option.textContent = data.text;
- } else {
- option.innerText = data.text;
- }
- }
-
- if (data.id !== undefined) {
- option.value = data.id;
- }
-
- if (data.disabled) {
- option.disabled = true;
- }
-
- if (data.selected) {
- option.selected = true;
- }
-
- if (data.title) {
- option.title = data.title;
- }
-
- var $option = $(option);
-
- var normalizedData = this._normalizeItem(data);
- normalizedData.element = option;
-
- // Override the option's data with the combined data
- Utils.StoreData(option, 'data', normalizedData);
-
- return $option;
- };
-
- SelectAdapter.prototype.item = function ($option) {
- var data = {};
-
- data = Utils.GetData($option[0], 'data');
-
- if (data != null) {
- return data;
- }
-
- if ($option.is('option')) {
- data = {
- id: $option.val(),
- text: $option.text(),
- disabled: $option.prop('disabled'),
- selected: $option.prop('selected'),
- title: $option.prop('title')
- };
- } else if ($option.is('optgroup')) {
- data = {
- text: $option.prop('label'),
- children: [],
- title: $option.prop('title')
- };
-
- var $children = $option.children('option');
- var children = [];
-
- for (var c = 0; c < $children.length; c++) {
- var $child = $($children[c]);
-
- var child = this.item($child);
-
- children.push(child);
- }
-
- data.children = children;
- }
-
- data = this._normalizeItem(data);
- data.element = $option[0];
-
- Utils.StoreData($option[0], 'data', data);
-
- return data;
- };
-
- SelectAdapter.prototype._normalizeItem = function (item) {
- if (item !== Object(item)) {
- item = {
- id: item,
- text: item
- };
- }
-
- item = $.extend({}, {
- text: ''
- }, item);
-
- var defaults = {
- selected: false,
- disabled: false
- };
-
- if (item.id != null) {
- item.id = item.id.toString();
- }
-
- if (item.text != null) {
- item.text = item.text.toString();
- }
-
- if (item._resultId == null && item.id && this.container != null) {
- item._resultId = this.generateResultId(this.container, item);
- }
-
- return $.extend({}, defaults, item);
- };
-
- SelectAdapter.prototype.matches = function (params, data) {
- var matcher = this.options.get('matcher');
-
- return matcher(params, data);
- };
-
- return SelectAdapter;
-});
-
-S2.define('select2/data/array',[
- './select',
- '../utils',
- 'jquery'
-], function (SelectAdapter, Utils, $) {
- function ArrayAdapter ($element, options) {
- this._dataToConvert = options.get('data') || [];
-
- ArrayAdapter.__super__.constructor.call(this, $element, options);
- }
-
- Utils.Extend(ArrayAdapter, SelectAdapter);
-
- ArrayAdapter.prototype.bind = function (container, $container) {
- ArrayAdapter.__super__.bind.call(this, container, $container);
-
- this.addOptions(this.convertToOptions(this._dataToConvert));
- };
-
- ArrayAdapter.prototype.select = function (data) {
- var $option = this.$element.find('option').filter(function (i, elm) {
- return elm.value == data.id.toString();
- });
-
- if ($option.length === 0) {
- $option = this.option(data);
-
- this.addOptions($option);
- }
-
- ArrayAdapter.__super__.select.call(this, data);
- };
-
- ArrayAdapter.prototype.convertToOptions = function (data) {
- var self = this;
-
- var $existing = this.$element.find('option');
- var existingIds = $existing.map(function () {
- return self.item($(this)).id;
- }).get();
-
- var $options = [];
-
- // Filter out all items except for the one passed in the argument
- function onlyItem (item) {
- return function () {
- return $(this).val() == item.id;
- };
- }
-
- for (var d = 0; d < data.length; d++) {
- var item = this._normalizeItem(data[d]);
-
- // Skip items which were pre-loaded, only merge the data
- if ($.inArray(item.id, existingIds) >= 0) {
- var $existingOption = $existing.filter(onlyItem(item));
-
- var existingData = this.item($existingOption);
- var newData = $.extend(true, {}, item, existingData);
-
- var $newOption = this.option(newData);
-
- $existingOption.replaceWith($newOption);
-
- continue;
- }
-
- var $option = this.option(item);
-
- if (item.children) {
- var $children = this.convertToOptions(item.children);
-
- Utils.appendMany($option, $children);
- }
-
- $options.push($option);
- }
-
- return $options;
- };
-
- return ArrayAdapter;
-});
-
-S2.define('select2/data/ajax',[
- './array',
- '../utils',
- 'jquery'
-], function (ArrayAdapter, Utils, $) {
- function AjaxAdapter ($element, options) {
- this.ajaxOptions = this._applyDefaults(options.get('ajax'));
-
- if (this.ajaxOptions.processResults != null) {
- this.processResults = this.ajaxOptions.processResults;
- }
-
- AjaxAdapter.__super__.constructor.call(this, $element, options);
- }
-
- Utils.Extend(AjaxAdapter, ArrayAdapter);
-
- AjaxAdapter.prototype._applyDefaults = function (options) {
- var defaults = {
- data: function (params) {
- return $.extend({}, params, {
- q: params.term
- });
- },
- transport: function (params, success, failure) {
- var $request = $.ajax(params);
-
- $request.then(success);
- $request.fail(failure);
-
- return $request;
- }
- };
-
- return $.extend({}, defaults, options, true);
- };
-
- AjaxAdapter.prototype.processResults = function (results) {
- return results;
- };
-
- AjaxAdapter.prototype.query = function (params, callback) {
- var matches = [];
- var self = this;
-
- if (this._request != null) {
- // JSONP requests cannot always be aborted
- if ($.isFunction(this._request.abort)) {
- this._request.abort();
- }
-
- this._request = null;
- }
-
- var options = $.extend({
- type: 'GET'
- }, this.ajaxOptions);
-
- if (typeof options.url === 'function') {
- options.url = options.url.call(this.$element, params);
- }
-
- if (typeof options.data === 'function') {
- options.data = options.data.call(this.$element, params);
- }
-
- function request () {
- var $request = options.transport(options, function (data) {
- var results = self.processResults(data, params);
-
- if (self.options.get('debug') && window.console && console.error) {
- // Check to make sure that the response included a `results` key.
- if (!results || !results.results || !$.isArray(results.results)) {
- console.error(
- 'Select2: The AJAX results did not return an array in the ' +
- '`results` key of the response.'
- );
- }
- }
-
- callback(results);
- }, function () {
- // Attempt to detect if a request was aborted
- // Only works if the transport exposes a status property
- if ('status' in $request &&
- ($request.status === 0 || $request.status === '0')) {
- return;
- }
-
- self.trigger('results:message', {
- message: 'errorLoading'
- });
- });
-
- self._request = $request;
- }
-
- if (this.ajaxOptions.delay && params.term != null) {
- if (this._queryTimeout) {
- window.clearTimeout(this._queryTimeout);
- }
-
- this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);
- } else {
- request();
- }
- };
-
- return AjaxAdapter;
-});
-
-S2.define('select2/data/tags',[
- 'jquery'
-], function ($) {
- function Tags (decorated, $element, options) {
- var tags = options.get('tags');
-
- var createTag = options.get('createTag');
-
- if (createTag !== undefined) {
- this.createTag = createTag;
- }
-
- var insertTag = options.get('insertTag');
-
- if (insertTag !== undefined) {
- this.insertTag = insertTag;
- }
-
- decorated.call(this, $element, options);
-
- if ($.isArray(tags)) {
- for (var t = 0; t < tags.length; t++) {
- var tag = tags[t];
- var item = this._normalizeItem(tag);
-
- var $option = this.option(item);
-
- this.$element.append($option);
- }
- }
- }
-
- Tags.prototype.query = function (decorated, params, callback) {
- var self = this;
-
- this._removeOldTags();
-
- if (params.term == null || params.page != null) {
- decorated.call(this, params, callback);
- return;
- }
-
- function wrapper (obj, child) {
- var data = obj.results;
-
- for (var i = 0; i < data.length; i++) {
- var option = data[i];
-
- var checkChildren = (
- option.children != null &&
- !wrapper({
- results: option.children
- }, true)
- );
-
- var optionText = (option.text || '').toUpperCase();
- var paramsTerm = (params.term || '').toUpperCase();
-
- var checkText = optionText === paramsTerm;
-
- if (checkText || checkChildren) {
- if (child) {
- return false;
- }
-
- obj.data = data;
- callback(obj);
-
- return;
- }
- }
-
- if (child) {
- return true;
- }
-
- var tag = self.createTag(params);
-
- if (tag != null) {
- var $option = self.option(tag);
- $option.attr('data-select2-tag', true);
-
- self.addOptions([$option]);
-
- self.insertTag(data, tag);
- }
-
- obj.results = data;
-
- callback(obj);
- }
-
- decorated.call(this, params, wrapper);
- };
-
- Tags.prototype.createTag = function (decorated, params) {
- var term = $.trim(params.term);
-
- if (term === '') {
- return null;
- }
-
- return {
- id: term,
- text: term
- };
- };
-
- Tags.prototype.insertTag = function (_, data, tag) {
- data.unshift(tag);
- };
-
- Tags.prototype._removeOldTags = function (_) {
- var $options = this.$element.find('option[data-select2-tag]');
-
- $options.each(function () {
- if (this.selected) {
- return;
- }
-
- $(this).remove();
- });
- };
-
- return Tags;
-});
-
-S2.define('select2/data/tokenizer',[
- 'jquery'
-], function ($) {
- function Tokenizer (decorated, $element, options) {
- var tokenizer = options.get('tokenizer');
-
- if (tokenizer !== undefined) {
- this.tokenizer = tokenizer;
- }
-
- decorated.call(this, $element, options);
- }
-
- Tokenizer.prototype.bind = function (decorated, container, $container) {
- decorated.call(this, container, $container);
-
- this.$search = container.dropdown.$search || container.selection.$search ||
- $container.find('.select2-search__field');
- };
-
- Tokenizer.prototype.query = function (decorated, params, callback) {
- var self = this;
-
- function createAndSelect (data) {
- // Normalize the data object so we can use it for checks
- var item = self._normalizeItem(data);
-
- // Check if the data object already exists as a tag
- // Select it if it doesn't
- var $existingOptions = self.$element.find('option').filter(function () {
- return $(this).val() === item.id;
- });
-
- // If an existing option wasn't found for it, create the option
- if (!$existingOptions.length) {
- var $option = self.option(item);
- $option.attr('data-select2-tag', true);
-
- self._removeOldTags();
- self.addOptions([$option]);
- }
-
- // Select the item, now that we know there is an option for it
- select(item);
- }
-
- function select (data) {
- self.trigger('select', {
- data: data
- });
- }
-
- params.term = params.term || '';
-
- var tokenData = this.tokenizer(params, this.options, createAndSelect);
-
- if (tokenData.term !== params.term) {
- // Replace the search term if we have the search box
- if (this.$search.length) {
- this.$search.val(tokenData.term);
- this.$search.trigger('focus');
- }
-
- params.term = tokenData.term;
- }
-
- decorated.call(this, params, callback);
- };
-
- Tokenizer.prototype.tokenizer = function (_, params, options, callback) {
- var separators = options.get('tokenSeparators') || [];
- var term = params.term;
- var i = 0;
-
- var createTag = this.createTag || function (params) {
- return {
- id: params.term,
- text: params.term
- };
- };
-
- while (i < term.length) {
- var termChar = term[i];
-
- if ($.inArray(termChar, separators) === -1) {
- i++;
-
- continue;
- }
-
- var part = term.substr(0, i);
- var partParams = $.extend({}, params, {
- term: part
- });
-
- var data = createTag(partParams);
-
- if (data == null) {
- i++;
- continue;
- }
-
- callback(data);
-
- // Reset the term to not include the tokenized portion
- term = term.substr(i + 1) || '';
- i = 0;
- }
-
- return {
- term: term
- };
- };
-
- return Tokenizer;
-});
-
-S2.define('select2/data/minimumInputLength',[
-
-], function () {
- function MinimumInputLength (decorated, $e, options) {
- this.minimumInputLength = options.get('minimumInputLength');
-
- decorated.call(this, $e, options);
- }
-
- MinimumInputLength.prototype.query = function (decorated, params, callback) {
- params.term = params.term || '';
-
- if (params.term.length < this.minimumInputLength) {
- this.trigger('results:message', {
- message: 'inputTooShort',
- args: {
- minimum: this.minimumInputLength,
- input: params.term,
- params: params
- }
- });
-
- return;
- }
-
- decorated.call(this, params, callback);
- };
-
- return MinimumInputLength;
-});
-
-S2.define('select2/data/maximumInputLength',[
-
-], function () {
- function MaximumInputLength (decorated, $e, options) {
- this.maximumInputLength = options.get('maximumInputLength');
-
- decorated.call(this, $e, options);
- }
-
- MaximumInputLength.prototype.query = function (decorated, params, callback) {
- params.term = params.term || '';
-
- if (this.maximumInputLength > 0 &&
- params.term.length > this.maximumInputLength) {
- this.trigger('results:message', {
- message: 'inputTooLong',
- args: {
- maximum: this.maximumInputLength,
- input: params.term,
- params: params
- }
- });
-
- return;
- }
-
- decorated.call(this, params, callback);
- };
-
- return MaximumInputLength;
-});
-
-S2.define('select2/data/maximumSelectionLength',[
-
-], function (){
- function MaximumSelectionLength (decorated, $e, options) {
- this.maximumSelectionLength = options.get('maximumSelectionLength');
-
- decorated.call(this, $e, options);
- }
-
- MaximumSelectionLength.prototype.bind =
- function (decorated, container, $container) {
- var self = this;
-
- decorated.call(this, container, $container);
-
- container.on('select', function () {
- self._checkIfMaximumSelected();
- });
- };
-
- MaximumSelectionLength.prototype.query =
- function (decorated, params, callback) {
- var self = this;
-
- this._checkIfMaximumSelected(function () {
- decorated.call(self, params, callback);
- });
- };
-
- MaximumSelectionLength.prototype._checkIfMaximumSelected =
- function (_, successCallback) {
- var self = this;
-
- this.current(function (currentData) {
- var count = currentData != null ? currentData.length : 0;
- if (self.maximumSelectionLength > 0 &&
- count >= self.maximumSelectionLength) {
- self.trigger('results:message', {
- message: 'maximumSelected',
- args: {
- maximum: self.maximumSelectionLength
- }
- });
- return;
- }
-
- if (successCallback) {
- successCallback();
- }
- });
- };
-
- return MaximumSelectionLength;
-});
-
-S2.define('select2/dropdown',[
- 'jquery',
- './utils'
-], function ($, Utils) {
- function Dropdown ($element, options) {
- this.$element = $element;
- this.options = options;
-
- Dropdown.__super__.constructor.call(this);
- }
-
- Utils.Extend(Dropdown, Utils.Observable);
-
- Dropdown.prototype.render = function () {
- var $dropdown = $(
- '' +
- ' ' +
- ' '
- );
-
- $dropdown.attr('dir', this.options.get('dir'));
-
- this.$dropdown = $dropdown;
-
- return $dropdown;
- };
-
- Dropdown.prototype.bind = function () {
- // Should be implemented in subclasses
- };
-
- Dropdown.prototype.position = function ($dropdown, $container) {
- // Should be implemented in subclasses
- };
-
- Dropdown.prototype.destroy = function () {
- // Remove the dropdown from the DOM
- this.$dropdown.remove();
- };
-
- return Dropdown;
-});
-
-S2.define('select2/dropdown/search',[
- 'jquery',
- '../utils'
-], function ($, Utils) {
- function Search () { }
-
- Search.prototype.render = function (decorated) {
- var $rendered = decorated.call(this);
-
- var $search = $(
- '' +
- ' ' +
- ' '
- );
-
- this.$searchContainer = $search;
- this.$search = $search.find('input');
-
- $rendered.prepend($search);
-
- return $rendered;
- };
-
- Search.prototype.bind = function (decorated, container, $container) {
- var self = this;
-
- var resultsId = container.id + '-results';
-
- decorated.call(this, container, $container);
-
- this.$search.on('keydown', function (evt) {
- self.trigger('keypress', evt);
-
- self._keyUpPrevented = evt.isDefaultPrevented();
- });
-
- // Workaround for browsers which do not support the `input` event
- // This will prevent double-triggering of events for browsers which support
- // both the `keyup` and `input` events.
- this.$search.on('input', function (evt) {
- // Unbind the duplicated `keyup` event
- $(this).off('keyup');
- });
-
- this.$search.on('keyup input', function (evt) {
- self.handleSearch(evt);
- });
-
- container.on('open', function () {
- self.$search.attr('tabindex', 0);
- self.$search.attr('aria-controls', resultsId);
-
- self.$search.trigger('focus');
-
- window.setTimeout(function () {
- self.$search.trigger('focus');
- }, 0);
- });
-
- container.on('close', function () {
- self.$search.attr('tabindex', -1);
- self.$search.removeAttr('aria-controls');
- self.$search.removeAttr('aria-activedescendant');
-
- self.$search.val('');
- self.$search.trigger('blur');
- });
-
- container.on('focus', function () {
- if (!container.isOpen()) {
- self.$search.trigger('focus');
- }
- });
-
- container.on('results:all', function (params) {
- if (params.query.term == null || params.query.term === '') {
- var showSearch = self.showSearch(params);
-
- if (showSearch) {
- self.$searchContainer.removeClass('select2-search--hide');
- } else {
- self.$searchContainer.addClass('select2-search--hide');
- }
- }
- });
-
- container.on('results:focus', function (params) {
- if (params.data._resultId) {
- self.$search.attr('aria-activedescendant', params.data._resultId);
- } else {
- self.$search.removeAttr('aria-activedescendant');
- }
- });
- };
-
- Search.prototype.handleSearch = function (evt) {
- if (!this._keyUpPrevented) {
- var input = this.$search.val();
-
- this.trigger('query', {
- term: input
- });
- }
-
- this._keyUpPrevented = false;
- };
-
- Search.prototype.showSearch = function (_, params) {
- return true;
- };
-
- return Search;
-});
-
-S2.define('select2/dropdown/hidePlaceholder',[
-
-], function () {
- function HidePlaceholder (decorated, $element, options, dataAdapter) {
- this.placeholder = this.normalizePlaceholder(options.get('placeholder'));
-
- decorated.call(this, $element, options, dataAdapter);
- }
-
- HidePlaceholder.prototype.append = function (decorated, data) {
- data.results = this.removePlaceholder(data.results);
-
- decorated.call(this, data);
- };
-
- HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {
- if (typeof placeholder === 'string') {
- placeholder = {
- id: '',
- text: placeholder
- };
- }
-
- return placeholder;
- };
-
- HidePlaceholder.prototype.removePlaceholder = function (_, data) {
- var modifiedData = data.slice(0);
-
- for (var d = data.length - 1; d >= 0; d--) {
- var item = data[d];
-
- if (this.placeholder.id === item.id) {
- modifiedData.splice(d, 1);
- }
- }
-
- return modifiedData;
- };
-
- return HidePlaceholder;
-});
-
-S2.define('select2/dropdown/infiniteScroll',[
- 'jquery'
-], function ($) {
- function InfiniteScroll (decorated, $element, options, dataAdapter) {
- this.lastParams = {};
-
- decorated.call(this, $element, options, dataAdapter);
-
- this.$loadingMore = this.createLoadingMore();
- this.loading = false;
- }
-
- InfiniteScroll.prototype.append = function (decorated, data) {
- this.$loadingMore.remove();
- this.loading = false;
-
- decorated.call(this, data);
-
- if (this.showLoadingMore(data)) {
- this.$results.append(this.$loadingMore);
- this.loadMoreIfNeeded();
- }
- };
-
- InfiniteScroll.prototype.bind = function (decorated, container, $container) {
- var self = this;
-
- decorated.call(this, container, $container);
-
- container.on('query', function (params) {
- self.lastParams = params;
- self.loading = true;
- });
-
- container.on('query:append', function (params) {
- self.lastParams = params;
- self.loading = true;
- });
-
- this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));
- };
-
- InfiniteScroll.prototype.loadMoreIfNeeded = function () {
- var isLoadMoreVisible = $.contains(
- document.documentElement,
- this.$loadingMore[0]
- );
-
- if (this.loading || !isLoadMoreVisible) {
- return;
- }
-
- var currentOffset = this.$results.offset().top +
- this.$results.outerHeight(false);
- var loadingMoreOffset = this.$loadingMore.offset().top +
- this.$loadingMore.outerHeight(false);
-
- if (currentOffset + 50 >= loadingMoreOffset) {
- this.loadMore();
- }
- };
-
- InfiniteScroll.prototype.loadMore = function () {
- this.loading = true;
-
- var params = $.extend({}, {page: 1}, this.lastParams);
-
- params.page++;
-
- this.trigger('query:append', params);
- };
-
- InfiniteScroll.prototype.showLoadingMore = function (_, data) {
- return data.pagination && data.pagination.more;
- };
-
- InfiniteScroll.prototype.createLoadingMore = function () {
- var $option = $(
- ' '
- );
-
- var message = this.options.get('translations').get('loadingMore');
-
- $option.html(message(this.lastParams));
-
- return $option;
- };
-
- return InfiniteScroll;
-});
-
-S2.define('select2/dropdown/attachBody',[
- 'jquery',
- '../utils'
-], function ($, Utils) {
- function AttachBody (decorated, $element, options) {
- this.$dropdownParent = $(options.get('dropdownParent') || document.body);
-
- decorated.call(this, $element, options);
- }
-
- AttachBody.prototype.bind = function (decorated, container, $container) {
- var self = this;
-
- decorated.call(this, container, $container);
-
- container.on('open', function () {
- self._showDropdown();
- self._attachPositioningHandler(container);
-
- // Must bind after the results handlers to ensure correct sizing
- self._bindContainerResultHandlers(container);
- });
-
- container.on('close', function () {
- self._hideDropdown();
- self._detachPositioningHandler(container);
- });
-
- this.$dropdownContainer.on('mousedown', function (evt) {
- evt.stopPropagation();
- });
- };
-
- AttachBody.prototype.destroy = function (decorated) {
- decorated.call(this);
-
- this.$dropdownContainer.remove();
- };
-
- AttachBody.prototype.position = function (decorated, $dropdown, $container) {
- // Clone all of the container classes
- $dropdown.attr('class', $container.attr('class'));
-
- $dropdown.removeClass('select2');
- $dropdown.addClass('select2-container--open');
-
- $dropdown.css({
- position: 'absolute',
- top: -999999
- });
-
- this.$container = $container;
- };
-
- AttachBody.prototype.render = function (decorated) {
- var $container = $(' ');
-
- var $dropdown = decorated.call(this);
- $container.append($dropdown);
-
- this.$dropdownContainer = $container;
-
- return $container;
- };
-
- AttachBody.prototype._hideDropdown = function (decorated) {
- this.$dropdownContainer.detach();
- };
-
- AttachBody.prototype._bindContainerResultHandlers =
- function (decorated, container) {
-
- // These should only be bound once
- if (this._containerResultsHandlersBound) {
- return;
- }
-
- var self = this;
-
- container.on('results:all', function () {
- self._positionDropdown();
- self._resizeDropdown();
- });
-
- container.on('results:append', function () {
- self._positionDropdown();
- self._resizeDropdown();
- });
-
- container.on('results:message', function () {
- self._positionDropdown();
- self._resizeDropdown();
- });
-
- container.on('select', function () {
- self._positionDropdown();
- self._resizeDropdown();
- });
-
- container.on('unselect', function () {
- self._positionDropdown();
- self._resizeDropdown();
- });
-
- this._containerResultsHandlersBound = true;
- };
-
- AttachBody.prototype._attachPositioningHandler =
- function (decorated, container) {
- var self = this;
-
- var scrollEvent = 'scroll.select2.' + container.id;
- var resizeEvent = 'resize.select2.' + container.id;
- var orientationEvent = 'orientationchange.select2.' + container.id;
-
- var $watchers = this.$container.parents().filter(Utils.hasScroll);
- $watchers.each(function () {
- Utils.StoreData(this, 'select2-scroll-position', {
- x: $(this).scrollLeft(),
- y: $(this).scrollTop()
- });
- });
-
- $watchers.on(scrollEvent, function (ev) {
- var position = Utils.GetData(this, 'select2-scroll-position');
- $(this).scrollTop(position.y);
- });
-
- $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,
- function (e) {
- self._positionDropdown();
- self._resizeDropdown();
- });
- };
-
- AttachBody.prototype._detachPositioningHandler =
- function (decorated, container) {
- var scrollEvent = 'scroll.select2.' + container.id;
- var resizeEvent = 'resize.select2.' + container.id;
- var orientationEvent = 'orientationchange.select2.' + container.id;
-
- var $watchers = this.$container.parents().filter(Utils.hasScroll);
- $watchers.off(scrollEvent);
-
- $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);
- };
-
- AttachBody.prototype._positionDropdown = function () {
- var $window = $(window);
-
- var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');
- var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');
-
- var newDirection = null;
-
- var offset = this.$container.offset();
-
- offset.bottom = offset.top + this.$container.outerHeight(false);
-
- var container = {
- height: this.$container.outerHeight(false)
- };
-
- container.top = offset.top;
- container.bottom = offset.top + container.height;
-
- var dropdown = {
- height: this.$dropdown.outerHeight(false)
- };
-
- var viewport = {
- top: $window.scrollTop(),
- bottom: $window.scrollTop() + $window.height()
- };
-
- var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);
- var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);
-
- var css = {
- left: offset.left,
- top: container.bottom
- };
-
- // Determine what the parent element is to use for calculating the offset
- var $offsetParent = this.$dropdownParent;
-
- // For statically positioned elements, we need to get the element
- // that is determining the offset
- if ($offsetParent.css('position') === 'static') {
- $offsetParent = $offsetParent.offsetParent();
- }
-
- var parentOffset = {
- top: 0,
- left: 0
- };
-
- if (
- $.contains(document.body, $offsetParent[0]) ||
- $offsetParent[0].isConnected
- ) {
- parentOffset = $offsetParent.offset();
- }
-
- css.top -= parentOffset.top;
- css.left -= parentOffset.left;
-
- if (!isCurrentlyAbove && !isCurrentlyBelow) {
- newDirection = 'below';
- }
-
- if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {
- newDirection = 'above';
- } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {
- newDirection = 'below';
- }
-
- if (newDirection == 'above' ||
- (isCurrentlyAbove && newDirection !== 'below')) {
- css.top = container.top - parentOffset.top - dropdown.height;
- }
-
- if (newDirection != null) {
- this.$dropdown
- .removeClass('select2-dropdown--below select2-dropdown--above')
- .addClass('select2-dropdown--' + newDirection);
- this.$container
- .removeClass('select2-container--below select2-container--above')
- .addClass('select2-container--' + newDirection);
- }
-
- this.$dropdownContainer.css(css);
- };
-
- AttachBody.prototype._resizeDropdown = function () {
- var css = {
- width: this.$container.outerWidth(false) + 'px'
- };
-
- if (this.options.get('dropdownAutoWidth')) {
- css.minWidth = css.width;
- css.position = 'relative';
- css.width = 'auto';
- }
-
- this.$dropdown.css(css);
- };
-
- AttachBody.prototype._showDropdown = function (decorated) {
- this.$dropdownContainer.appendTo(this.$dropdownParent);
-
- this._positionDropdown();
- this._resizeDropdown();
- };
-
- return AttachBody;
-});
-
-S2.define('select2/dropdown/minimumResultsForSearch',[
-
-], function () {
- function countResults (data) {
- var count = 0;
-
- for (var d = 0; d < data.length; d++) {
- var item = data[d];
-
- if (item.children) {
- count += countResults(item.children);
- } else {
- count++;
- }
- }
-
- return count;
- }
-
- function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {
- this.minimumResultsForSearch = options.get('minimumResultsForSearch');
-
- if (this.minimumResultsForSearch < 0) {
- this.minimumResultsForSearch = Infinity;
- }
-
- decorated.call(this, $element, options, dataAdapter);
- }
-
- MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {
- if (countResults(params.data.results) < this.minimumResultsForSearch) {
- return false;
- }
-
- return decorated.call(this, params);
- };
-
- return MinimumResultsForSearch;
-});
-
-S2.define('select2/dropdown/selectOnClose',[
- '../utils'
-], function (Utils) {
- function SelectOnClose () { }
-
- SelectOnClose.prototype.bind = function (decorated, container, $container) {
- var self = this;
-
- decorated.call(this, container, $container);
-
- container.on('close', function (params) {
- self._handleSelectOnClose(params);
- });
- };
-
- SelectOnClose.prototype._handleSelectOnClose = function (_, params) {
- if (params && params.originalSelect2Event != null) {
- var event = params.originalSelect2Event;
-
- // Don't select an item if the close event was triggered from a select or
- // unselect event
- if (event._type === 'select' || event._type === 'unselect') {
- return;
- }
- }
-
- var $highlightedResults = this.getHighlightedResults();
-
- // Only select highlighted results
- if ($highlightedResults.length < 1) {
- return;
- }
-
- var data = Utils.GetData($highlightedResults[0], 'data');
-
- // Don't re-select already selected resulte
- if (
- (data.element != null && data.element.selected) ||
- (data.element == null && data.selected)
- ) {
- return;
- }
-
- this.trigger('select', {
- data: data
- });
- };
-
- return SelectOnClose;
-});
-
-S2.define('select2/dropdown/closeOnSelect',[
-
-], function () {
- function CloseOnSelect () { }
-
- CloseOnSelect.prototype.bind = function (decorated, container, $container) {
- var self = this;
-
- decorated.call(this, container, $container);
-
- container.on('select', function (evt) {
- self._selectTriggered(evt);
- });
-
- container.on('unselect', function (evt) {
- self._selectTriggered(evt);
- });
- };
-
- CloseOnSelect.prototype._selectTriggered = function (_, evt) {
- var originalEvent = evt.originalEvent;
-
- // Don't close if the control key is being held
- if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {
- return;
- }
-
- this.trigger('close', {
- originalEvent: originalEvent,
- originalSelect2Event: evt
- });
- };
-
- return CloseOnSelect;
-});
-
-S2.define('select2/i18n/en',[],function () {
- // English
- return {
- errorLoading: function () {
- return 'The results could not be loaded.';
- },
- inputTooLong: function (args) {
- var overChars = args.input.length - args.maximum;
-
- var message = 'Please delete ' + overChars + ' character';
-
- if (overChars != 1) {
- message += 's';
- }
-
- return message;
- },
- inputTooShort: function (args) {
- var remainingChars = args.minimum - args.input.length;
-
- var message = 'Please enter ' + remainingChars + ' or more characters';
-
- return message;
- },
- loadingMore: function () {
- return 'Loading more results…';
- },
- maximumSelected: function (args) {
- var message = 'You can only select ' + args.maximum + ' item';
-
- if (args.maximum != 1) {
- message += 's';
- }
-
- return message;
- },
- noResults: function () {
- return 'No results found';
- },
- searching: function () {
- return 'Searching…';
- },
- removeAllItems: function () {
- return 'Remove all items';
- }
- };
-});
-
-S2.define('select2/defaults',[
- 'jquery',
- 'require',
-
- './results',
-
- './selection/single',
- './selection/multiple',
- './selection/placeholder',
- './selection/allowClear',
- './selection/search',
- './selection/eventRelay',
-
- './utils',
- './translation',
- './diacritics',
-
- './data/select',
- './data/array',
- './data/ajax',
- './data/tags',
- './data/tokenizer',
- './data/minimumInputLength',
- './data/maximumInputLength',
- './data/maximumSelectionLength',
-
- './dropdown',
- './dropdown/search',
- './dropdown/hidePlaceholder',
- './dropdown/infiniteScroll',
- './dropdown/attachBody',
- './dropdown/minimumResultsForSearch',
- './dropdown/selectOnClose',
- './dropdown/closeOnSelect',
-
- './i18n/en'
-], function ($, require,
-
- ResultsList,
-
- SingleSelection, MultipleSelection, Placeholder, AllowClear,
- SelectionSearch, EventRelay,
-
- Utils, Translation, DIACRITICS,
-
- SelectData, ArrayData, AjaxData, Tags, Tokenizer,
- MinimumInputLength, MaximumInputLength, MaximumSelectionLength,
-
- Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,
- AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,
-
- EnglishTranslation) {
- function Defaults () {
- this.reset();
- }
-
- Defaults.prototype.apply = function (options) {
- options = $.extend(true, {}, this.defaults, options);
-
- if (options.dataAdapter == null) {
- if (options.ajax != null) {
- options.dataAdapter = AjaxData;
- } else if (options.data != null) {
- options.dataAdapter = ArrayData;
- } else {
- options.dataAdapter = SelectData;
- }
-
- if (options.minimumInputLength > 0) {
- options.dataAdapter = Utils.Decorate(
- options.dataAdapter,
- MinimumInputLength
- );
- }
-
- if (options.maximumInputLength > 0) {
- options.dataAdapter = Utils.Decorate(
- options.dataAdapter,
- MaximumInputLength
- );
- }
-
- if (options.maximumSelectionLength > 0) {
- options.dataAdapter = Utils.Decorate(
- options.dataAdapter,
- MaximumSelectionLength
- );
- }
-
- if (options.tags) {
- options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);
- }
-
- if (options.tokenSeparators != null || options.tokenizer != null) {
- options.dataAdapter = Utils.Decorate(
- options.dataAdapter,
- Tokenizer
- );
- }
-
- if (options.query != null) {
- var Query = require(options.amdBase + 'compat/query');
-
- options.dataAdapter = Utils.Decorate(
- options.dataAdapter,
- Query
- );
- }
-
- if (options.initSelection != null) {
- var InitSelection = require(options.amdBase + 'compat/initSelection');
-
- options.dataAdapter = Utils.Decorate(
- options.dataAdapter,
- InitSelection
- );
- }
- }
-
- if (options.resultsAdapter == null) {
- options.resultsAdapter = ResultsList;
-
- if (options.ajax != null) {
- options.resultsAdapter = Utils.Decorate(
- options.resultsAdapter,
- InfiniteScroll
- );
- }
-
- if (options.placeholder != null) {
- options.resultsAdapter = Utils.Decorate(
- options.resultsAdapter,
- HidePlaceholder
- );
- }
-
- if (options.selectOnClose) {
- options.resultsAdapter = Utils.Decorate(
- options.resultsAdapter,
- SelectOnClose
- );
- }
- }
-
- if (options.dropdownAdapter == null) {
- if (options.multiple) {
- options.dropdownAdapter = Dropdown;
- } else {
- var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);
-
- options.dropdownAdapter = SearchableDropdown;
- }
-
- if (options.minimumResultsForSearch !== 0) {
- options.dropdownAdapter = Utils.Decorate(
- options.dropdownAdapter,
- MinimumResultsForSearch
- );
- }
-
- if (options.closeOnSelect) {
- options.dropdownAdapter = Utils.Decorate(
- options.dropdownAdapter,
- CloseOnSelect
- );
- }
-
- if (
- options.dropdownCssClass != null ||
- options.dropdownCss != null ||
- options.adaptDropdownCssClass != null
- ) {
- var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');
-
- options.dropdownAdapter = Utils.Decorate(
- options.dropdownAdapter,
- DropdownCSS
- );
- }
-
- options.dropdownAdapter = Utils.Decorate(
- options.dropdownAdapter,
- AttachBody
- );
- }
-
- if (options.selectionAdapter == null) {
- if (options.multiple) {
- options.selectionAdapter = MultipleSelection;
- } else {
- options.selectionAdapter = SingleSelection;
- }
-
- // Add the placeholder mixin if a placeholder was specified
- if (options.placeholder != null) {
- options.selectionAdapter = Utils.Decorate(
- options.selectionAdapter,
- Placeholder
- );
- }
-
- if (options.allowClear) {
- options.selectionAdapter = Utils.Decorate(
- options.selectionAdapter,
- AllowClear
- );
- }
-
- if (options.multiple) {
- options.selectionAdapter = Utils.Decorate(
- options.selectionAdapter,
- SelectionSearch
- );
- }
-
- if (
- options.containerCssClass != null ||
- options.containerCss != null ||
- options.adaptContainerCssClass != null
- ) {
- var ContainerCSS = require(options.amdBase + 'compat/containerCss');
-
- options.selectionAdapter = Utils.Decorate(
- options.selectionAdapter,
- ContainerCSS
- );
- }
-
- options.selectionAdapter = Utils.Decorate(
- options.selectionAdapter,
- EventRelay
- );
- }
-
- // If the defaults were not previously applied from an element, it is
- // possible for the language option to have not been resolved
- options.language = this._resolveLanguage(options.language);
-
- // Always fall back to English since it will always be complete
- options.language.push('en');
-
- var uniqueLanguages = [];
-
- for (var l = 0; l < options.language.length; l++) {
- var language = options.language[l];
-
- if (uniqueLanguages.indexOf(language) === -1) {
- uniqueLanguages.push(language);
- }
- }
-
- options.language = uniqueLanguages;
-
- options.translations = this._processTranslations(
- options.language,
- options.debug
- );
-
- return options;
- };
-
- Defaults.prototype.reset = function () {
- function stripDiacritics (text) {
- // Used 'uni range + named function' from http://jsperf.com/diacritics/18
- function match(a) {
- return DIACRITICS[a] || a;
- }
-
- return text.replace(/[^\u0000-\u007E]/g, match);
- }
-
- function matcher (params, data) {
- // Always return the object if there is nothing to compare
- if ($.trim(params.term) === '') {
- return data;
- }
-
- // Do a recursive check for options with children
- if (data.children && data.children.length > 0) {
- // Clone the data object if there are children
- // This is required as we modify the object to remove any non-matches
- var match = $.extend(true, {}, data);
-
- // Check each child of the option
- for (var c = data.children.length - 1; c >= 0; c--) {
- var child = data.children[c];
-
- var matches = matcher(params, child);
-
- // If there wasn't a match, remove the object in the array
- if (matches == null) {
- match.children.splice(c, 1);
- }
- }
-
- // If any children matched, return the new object
- if (match.children.length > 0) {
- return match;
- }
-
- // If there were no matching children, check just the plain object
- return matcher(params, match);
- }
-
- var original = stripDiacritics(data.text).toUpperCase();
- var term = stripDiacritics(params.term).toUpperCase();
-
- // Check if the text contains the term
- if (original.indexOf(term) > -1) {
- return data;
- }
-
- // If it doesn't contain the term, don't return anything
- return null;
- }
-
- this.defaults = {
- amdBase: './',
- amdLanguageBase: './i18n/',
- closeOnSelect: true,
- debug: false,
- dropdownAutoWidth: false,
- escapeMarkup: Utils.escapeMarkup,
- language: {},
- matcher: matcher,
- minimumInputLength: 0,
- maximumInputLength: 0,
- maximumSelectionLength: 0,
- minimumResultsForSearch: 0,
- selectOnClose: false,
- scrollAfterSelect: false,
- sorter: function (data) {
- return data;
- },
- templateResult: function (result) {
- return result.text;
- },
- templateSelection: function (selection) {
- return selection.text;
- },
- theme: 'default',
- width: 'resolve'
- };
- };
-
- Defaults.prototype.applyFromElement = function (options, $element) {
- var optionLanguage = options.language;
- var defaultLanguage = this.defaults.language;
- var elementLanguage = $element.prop('lang');
- var parentLanguage = $element.closest('[lang]').prop('lang');
-
- var languages = Array.prototype.concat.call(
- this._resolveLanguage(elementLanguage),
- this._resolveLanguage(optionLanguage),
- this._resolveLanguage(defaultLanguage),
- this._resolveLanguage(parentLanguage)
- );
-
- options.language = languages;
-
- return options;
- };
-
- Defaults.prototype._resolveLanguage = function (language) {
- if (!language) {
- return [];
- }
-
- if ($.isEmptyObject(language)) {
- return [];
- }
-
- if ($.isPlainObject(language)) {
- return [language];
- }
-
- var languages;
-
- if (!$.isArray(language)) {
- languages = [language];
- } else {
- languages = language;
- }
-
- var resolvedLanguages = [];
-
- for (var l = 0; l < languages.length; l++) {
- resolvedLanguages.push(languages[l]);
-
- if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {
- // Extract the region information if it is included
- var languageParts = languages[l].split('-');
- var baseLanguage = languageParts[0];
-
- resolvedLanguages.push(baseLanguage);
- }
- }
-
- return resolvedLanguages;
- };
-
- Defaults.prototype._processTranslations = function (languages, debug) {
- var translations = new Translation();
-
- for (var l = 0; l < languages.length; l++) {
- var languageData = new Translation();
-
- var language = languages[l];
-
- if (typeof language === 'string') {
- try {
- // Try to load it with the original name
- languageData = Translation.loadPath(language);
- } catch (e) {
- try {
- // If we couldn't load it, check if it wasn't the full path
- language = this.defaults.amdLanguageBase + language;
- languageData = Translation.loadPath(language);
- } catch (ex) {
- // The translation could not be loaded at all. Sometimes this is
- // because of a configuration problem, other times this can be
- // because of how Select2 helps load all possible translation files
- if (debug && window.console && console.warn) {
- console.warn(
- 'Select2: The language file for "' + language + '" could ' +
- 'not be automatically loaded. A fallback will be used instead.'
- );
- }
- }
- }
- } else if ($.isPlainObject(language)) {
- languageData = new Translation(language);
- } else {
- languageData = language;
- }
-
- translations.extend(languageData);
- }
-
- return translations;
- };
-
- Defaults.prototype.set = function (key, value) {
- var camelKey = $.camelCase(key);
-
- var data = {};
- data[camelKey] = value;
-
- var convertedData = Utils._convertData(data);
-
- $.extend(true, this.defaults, convertedData);
- };
-
- var defaults = new Defaults();
-
- return defaults;
-});
-
-S2.define('select2/options',[
- 'require',
- 'jquery',
- './defaults',
- './utils'
-], function (require, $, Defaults, Utils) {
- function Options (options, $element) {
- this.options = options;
-
- if ($element != null) {
- this.fromElement($element);
- }
-
- if ($element != null) {
- this.options = Defaults.applyFromElement(this.options, $element);
- }
-
- this.options = Defaults.apply(this.options);
-
- if ($element && $element.is('input')) {
- var InputCompat = require(this.get('amdBase') + 'compat/inputData');
-
- this.options.dataAdapter = Utils.Decorate(
- this.options.dataAdapter,
- InputCompat
- );
- }
- }
-
- Options.prototype.fromElement = function ($e) {
- var excludedData = ['select2'];
-
- if (this.options.multiple == null) {
- this.options.multiple = $e.prop('multiple');
- }
-
- if (this.options.disabled == null) {
- this.options.disabled = $e.prop('disabled');
- }
-
- if (this.options.dir == null) {
- if ($e.prop('dir')) {
- this.options.dir = $e.prop('dir');
- } else if ($e.closest('[dir]').prop('dir')) {
- this.options.dir = $e.closest('[dir]').prop('dir');
- } else {
- this.options.dir = 'ltr';
- }
- }
-
- $e.prop('disabled', this.options.disabled);
- $e.prop('multiple', this.options.multiple);
-
- if (Utils.GetData($e[0], 'select2Tags')) {
- if (this.options.debug && window.console && console.warn) {
- console.warn(
- 'Select2: The `data-select2-tags` attribute has been changed to ' +
- 'use the `data-data` and `data-tags="true"` attributes and will be ' +
- 'removed in future versions of Select2.'
- );
- }
-
- Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));
- Utils.StoreData($e[0], 'tags', true);
- }
-
- if (Utils.GetData($e[0], 'ajaxUrl')) {
- if (this.options.debug && window.console && console.warn) {
- console.warn(
- 'Select2: The `data-ajax-url` attribute has been changed to ' +
- '`data-ajax--url` and support for the old attribute will be removed' +
- ' in future versions of Select2.'
- );
- }
-
- $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));
- Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));
- }
-
- var dataset = {};
-
- function upperCaseLetter(_, letter) {
- return letter.toUpperCase();
- }
-
- // Pre-load all of the attributes which are prefixed with `data-`
- for (var attr = 0; attr < $e[0].attributes.length; attr++) {
- var attributeName = $e[0].attributes[attr].name;
- var prefix = 'data-';
-
- if (attributeName.substr(0, prefix.length) == prefix) {
- // Get the contents of the attribute after `data-`
- var dataName = attributeName.substring(prefix.length);
-
- // Get the data contents from the consistent source
- // This is more than likely the jQuery data helper
- var dataValue = Utils.GetData($e[0], dataName);
-
- // camelCase the attribute name to match the spec
- var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);
-
- // Store the data attribute contents into the dataset since
- dataset[camelDataName] = dataValue;
- }
- }
-
- // Prefer the element's `dataset` attribute if it exists
- // jQuery 1.x does not correctly handle data attributes with multiple dashes
- if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {
- dataset = $.extend(true, {}, $e[0].dataset, dataset);
- }
-
- // Prefer our internal data cache if it exists
- var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);
-
- data = Utils._convertData(data);
-
- for (var key in data) {
- if ($.inArray(key, excludedData) > -1) {
- continue;
- }
-
- if ($.isPlainObject(this.options[key])) {
- $.extend(this.options[key], data[key]);
- } else {
- this.options[key] = data[key];
- }
- }
-
- return this;
- };
-
- Options.prototype.get = function (key) {
- return this.options[key];
- };
-
- Options.prototype.set = function (key, val) {
- this.options[key] = val;
- };
-
- return Options;
-});
-
-S2.define('select2/core',[
- 'jquery',
- './options',
- './utils',
- './keys'
-], function ($, Options, Utils, KEYS) {
- var Select2 = function ($element, options) {
- if (Utils.GetData($element[0], 'select2') != null) {
- Utils.GetData($element[0], 'select2').destroy();
- }
-
- this.$element = $element;
-
- this.id = this._generateId($element);
-
- options = options || {};
-
- this.options = new Options(options, $element);
-
- Select2.__super__.constructor.call(this);
-
- // Set up the tabindex
-
- var tabindex = $element.attr('tabindex') || 0;
- Utils.StoreData($element[0], 'old-tabindex', tabindex);
- $element.attr('tabindex', '-1');
-
- // Set up containers and adapters
-
- var DataAdapter = this.options.get('dataAdapter');
- this.dataAdapter = new DataAdapter($element, this.options);
-
- var $container = this.render();
-
- this._placeContainer($container);
-
- var SelectionAdapter = this.options.get('selectionAdapter');
- this.selection = new SelectionAdapter($element, this.options);
- this.$selection = this.selection.render();
-
- this.selection.position(this.$selection, $container);
-
- var DropdownAdapter = this.options.get('dropdownAdapter');
- this.dropdown = new DropdownAdapter($element, this.options);
- this.$dropdown = this.dropdown.render();
-
- this.dropdown.position(this.$dropdown, $container);
-
- var ResultsAdapter = this.options.get('resultsAdapter');
- this.results = new ResultsAdapter($element, this.options, this.dataAdapter);
- this.$results = this.results.render();
-
- this.results.position(this.$results, this.$dropdown);
-
- // Bind events
-
- var self = this;
-
- // Bind the container to all of the adapters
- this._bindAdapters();
-
- // Register any DOM event handlers
- this._registerDomEvents();
-
- // Register any internal event handlers
- this._registerDataEvents();
- this._registerSelectionEvents();
- this._registerDropdownEvents();
- this._registerResultsEvents();
- this._registerEvents();
-
- // Set the initial state
- this.dataAdapter.current(function (initialData) {
- self.trigger('selection:update', {
- data: initialData
- });
- });
-
- // Hide the original select
- $element.addClass('select2-hidden-accessible');
- $element.attr('aria-hidden', 'true');
-
- // Synchronize any monitored attributes
- this._syncAttributes();
-
- Utils.StoreData($element[0], 'select2', this);
-
- // Ensure backwards compatibility with $element.data('select2').
- $element.data('select2', this);
- };
-
- Utils.Extend(Select2, Utils.Observable);
-
- Select2.prototype._generateId = function ($element) {
- var id = '';
-
- if ($element.attr('id') != null) {
- id = $element.attr('id');
- } else if ($element.attr('name') != null) {
- id = $element.attr('name') + '-' + Utils.generateChars(2);
- } else {
- id = Utils.generateChars(4);
- }
-
- id = id.replace(/(:|\.|\[|\]|,)/g, '');
- id = 'select2-' + id;
-
- return id;
- };
-
- Select2.prototype._placeContainer = function ($container) {
- $container.insertAfter(this.$element);
-
- var width = this._resolveWidth(this.$element, this.options.get('width'));
-
- if (width != null) {
- $container.css('width', width);
- }
- };
-
- Select2.prototype._resolveWidth = function ($element, method) {
- var WIDTH = /^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;
-
- if (method == 'resolve') {
- var styleWidth = this._resolveWidth($element, 'style');
-
- if (styleWidth != null) {
- return styleWidth;
- }
-
- return this._resolveWidth($element, 'element');
- }
-
- if (method == 'element') {
- var elementWidth = $element.outerWidth(false);
-
- if (elementWidth <= 0) {
- return 'auto';
- }
-
- return elementWidth + 'px';
- }
-
- if (method == 'style') {
- var style = $element.attr('style');
-
- if (typeof(style) !== 'string') {
- return null;
- }
-
- var attrs = style.split(';');
-
- for (var i = 0, l = attrs.length; i < l; i = i + 1) {
- var attr = attrs[i].replace(/\s/g, '');
- var matches = attr.match(WIDTH);
-
- if (matches !== null && matches.length >= 1) {
- return matches[1];
- }
- }
-
- return null;
- }
-
- if (method == 'computedstyle') {
- var computedStyle = window.getComputedStyle($element[0]);
-
- return computedStyle.width;
- }
-
- return method;
- };
-
- Select2.prototype._bindAdapters = function () {
- this.dataAdapter.bind(this, this.$container);
- this.selection.bind(this, this.$container);
-
- this.dropdown.bind(this, this.$container);
- this.results.bind(this, this.$container);
- };
-
- Select2.prototype._registerDomEvents = function () {
- var self = this;
-
- this.$element.on('change.select2', function () {
- self.dataAdapter.current(function (data) {
- self.trigger('selection:update', {
- data: data
- });
- });
- });
-
- this.$element.on('focus.select2', function (evt) {
- self.trigger('focus', evt);
- });
-
- this._syncA = Utils.bind(this._syncAttributes, this);
- this._syncS = Utils.bind(this._syncSubtree, this);
-
- if (this.$element[0].attachEvent) {
- this.$element[0].attachEvent('onpropertychange', this._syncA);
- }
-
- var observer = window.MutationObserver ||
- window.WebKitMutationObserver ||
- window.MozMutationObserver
- ;
-
- if (observer != null) {
- this._observer = new observer(function (mutations) {
- self._syncA();
- self._syncS(null, mutations);
- });
- this._observer.observe(this.$element[0], {
- attributes: true,
- childList: true,
- subtree: false
- });
- } else if (this.$element[0].addEventListener) {
- this.$element[0].addEventListener(
- 'DOMAttrModified',
- self._syncA,
- false
- );
- this.$element[0].addEventListener(
- 'DOMNodeInserted',
- self._syncS,
- false
- );
- this.$element[0].addEventListener(
- 'DOMNodeRemoved',
- self._syncS,
- false
- );
- }
- };
-
- Select2.prototype._registerDataEvents = function () {
- var self = this;
-
- this.dataAdapter.on('*', function (name, params) {
- self.trigger(name, params);
- });
- };
-
- Select2.prototype._registerSelectionEvents = function () {
- var self = this;
- var nonRelayEvents = ['toggle', 'focus'];
-
- this.selection.on('toggle', function () {
- self.toggleDropdown();
- });
-
- this.selection.on('focus', function (params) {
- self.focus(params);
- });
-
- this.selection.on('*', function (name, params) {
- if ($.inArray(name, nonRelayEvents) !== -1) {
- return;
- }
-
- self.trigger(name, params);
- });
- };
-
- Select2.prototype._registerDropdownEvents = function () {
- var self = this;
-
- this.dropdown.on('*', function (name, params) {
- self.trigger(name, params);
- });
- };
-
- Select2.prototype._registerResultsEvents = function () {
- var self = this;
-
- this.results.on('*', function (name, params) {
- self.trigger(name, params);
- });
- };
-
- Select2.prototype._registerEvents = function () {
- var self = this;
-
- this.on('open', function () {
- self.$container.addClass('select2-container--open');
- });
-
- this.on('close', function () {
- self.$container.removeClass('select2-container--open');
- });
-
- this.on('enable', function () {
- self.$container.removeClass('select2-container--disabled');
- });
-
- this.on('disable', function () {
- self.$container.addClass('select2-container--disabled');
- });
-
- this.on('blur', function () {
- self.$container.removeClass('select2-container--focus');
- });
-
- this.on('query', function (params) {
- if (!self.isOpen()) {
- self.trigger('open', {});
- }
-
- this.dataAdapter.query(params, function (data) {
- self.trigger('results:all', {
- data: data,
- query: params
- });
- });
- });
-
- this.on('query:append', function (params) {
- this.dataAdapter.query(params, function (data) {
- self.trigger('results:append', {
- data: data,
- query: params
- });
- });
- });
-
- this.on('keypress', function (evt) {
- var key = evt.which;
-
- if (self.isOpen()) {
- if (key === KEYS.ESC || key === KEYS.TAB ||
- (key === KEYS.UP && evt.altKey)) {
- self.close(evt);
-
- evt.preventDefault();
- } else if (key === KEYS.ENTER) {
- self.trigger('results:select', {});
-
- evt.preventDefault();
- } else if ((key === KEYS.SPACE && evt.ctrlKey)) {
- self.trigger('results:toggle', {});
-
- evt.preventDefault();
- } else if (key === KEYS.UP) {
- self.trigger('results:previous', {});
-
- evt.preventDefault();
- } else if (key === KEYS.DOWN) {
- self.trigger('results:next', {});
-
- evt.preventDefault();
- }
- } else {
- if (key === KEYS.ENTER || key === KEYS.SPACE ||
- (key === KEYS.DOWN && evt.altKey)) {
- self.open();
-
- evt.preventDefault();
- }
- }
- });
- };
-
- Select2.prototype._syncAttributes = function () {
- this.options.set('disabled', this.$element.prop('disabled'));
-
- if (this.isDisabled()) {
- if (this.isOpen()) {
- this.close();
- }
-
- this.trigger('disable', {});
- } else {
- this.trigger('enable', {});
- }
- };
-
- Select2.prototype._isChangeMutation = function (evt, mutations) {
- var changed = false;
- var self = this;
-
- // Ignore any mutation events raised for elements that aren't options or
- // optgroups. This handles the case when the select element is destroyed
- if (
- evt && evt.target && (
- evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'
- )
- ) {
- return;
- }
-
- if (!mutations) {
- // If mutation events aren't supported, then we can only assume that the
- // change affected the selections
- changed = true;
- } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {
- for (var n = 0; n < mutations.addedNodes.length; n++) {
- var node = mutations.addedNodes[n];
-
- if (node.selected) {
- changed = true;
- }
- }
- } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {
- changed = true;
- } else if ($.isArray(mutations)) {
- $.each(mutations, function(evt, mutation) {
- if (self._isChangeMutation(evt, mutation)) {
- // We've found a change mutation.
- // Let's escape from the loop and continue
- changed = true;
- return false;
- }
- });
- }
- return changed;
- };
-
- Select2.prototype._syncSubtree = function (evt, mutations) {
- var changed = this._isChangeMutation(evt, mutations);
- var self = this;
-
- // Only re-pull the data if we think there is a change
- if (changed) {
- this.dataAdapter.current(function (currentData) {
- self.trigger('selection:update', {
- data: currentData
- });
- });
- }
- };
-
- /**
- * Override the trigger method to automatically trigger pre-events when
- * there are events that can be prevented.
- */
- Select2.prototype.trigger = function (name, args) {
- var actualTrigger = Select2.__super__.trigger;
- var preTriggerMap = {
- 'open': 'opening',
- 'close': 'closing',
- 'select': 'selecting',
- 'unselect': 'unselecting',
- 'clear': 'clearing'
- };
-
- if (args === undefined) {
- args = {};
- }
-
- if (name in preTriggerMap) {
- var preTriggerName = preTriggerMap[name];
- var preTriggerArgs = {
- prevented: false,
- name: name,
- args: args
- };
-
- actualTrigger.call(this, preTriggerName, preTriggerArgs);
-
- if (preTriggerArgs.prevented) {
- args.prevented = true;
-
- return;
- }
- }
-
- actualTrigger.call(this, name, args);
- };
-
- Select2.prototype.toggleDropdown = function () {
- if (this.isDisabled()) {
- return;
- }
-
- if (this.isOpen()) {
- this.close();
- } else {
- this.open();
- }
- };
-
- Select2.prototype.open = function () {
- if (this.isOpen()) {
- return;
- }
-
- if (this.isDisabled()) {
- return;
- }
-
- this.trigger('query', {});
- };
-
- Select2.prototype.close = function (evt) {
- if (!this.isOpen()) {
- return;
- }
-
- this.trigger('close', { originalEvent : evt });
- };
-
- /**
- * Helper method to abstract the "enabled" (not "disabled") state of this
- * object.
- *
- * @return {true} if the instance is not disabled.
- * @return {false} if the instance is disabled.
- */
- Select2.prototype.isEnabled = function () {
- return !this.isDisabled();
- };
-
- /**
- * Helper method to abstract the "disabled" state of this object.
- *
- * @return {true} if the disabled option is true.
- * @return {false} if the disabled option is false.
- */
- Select2.prototype.isDisabled = function () {
- return this.options.get('disabled');
- };
-
- Select2.prototype.isOpen = function () {
- return this.$container.hasClass('select2-container--open');
- };
-
- Select2.prototype.hasFocus = function () {
- return this.$container.hasClass('select2-container--focus');
- };
-
- Select2.prototype.focus = function (data) {
- // No need to re-trigger focus events if we are already focused
- if (this.hasFocus()) {
- return;
- }
-
- this.$container.addClass('select2-container--focus');
- this.trigger('focus', {});
- };
-
- Select2.prototype.enable = function (args) {
- if (this.options.get('debug') && window.console && console.warn) {
- console.warn(
- 'Select2: The `select2("enable")` method has been deprecated and will' +
- ' be removed in later Select2 versions. Use $element.prop("disabled")' +
- ' instead.'
- );
- }
-
- if (args == null || args.length === 0) {
- args = [true];
- }
-
- var disabled = !args[0];
-
- this.$element.prop('disabled', disabled);
- };
-
- Select2.prototype.data = function () {
- if (this.options.get('debug') &&
- arguments.length > 0 && window.console && console.warn) {
- console.warn(
- 'Select2: Data can no longer be set using `select2("data")`. You ' +
- 'should consider setting the value instead using `$element.val()`.'
- );
- }
-
- var data = [];
-
- this.dataAdapter.current(function (currentData) {
- data = currentData;
- });
-
- return data;
- };
-
- Select2.prototype.val = function (args) {
- if (this.options.get('debug') && window.console && console.warn) {
- console.warn(
- 'Select2: The `select2("val")` method has been deprecated and will be' +
- ' removed in later Select2 versions. Use $element.val() instead.'
- );
- }
-
- if (args == null || args.length === 0) {
- return this.$element.val();
- }
-
- var newVal = args[0];
-
- if ($.isArray(newVal)) {
- newVal = $.map(newVal, function (obj) {
- return obj.toString();
- });
- }
-
- this.$element.val(newVal).trigger('input').trigger('change');
- };
-
- Select2.prototype.destroy = function () {
- this.$container.remove();
-
- if (this.$element[0].detachEvent) {
- this.$element[0].detachEvent('onpropertychange', this._syncA);
- }
-
- if (this._observer != null) {
- this._observer.disconnect();
- this._observer = null;
- } else if (this.$element[0].removeEventListener) {
- this.$element[0]
- .removeEventListener('DOMAttrModified', this._syncA, false);
- this.$element[0]
- .removeEventListener('DOMNodeInserted', this._syncS, false);
- this.$element[0]
- .removeEventListener('DOMNodeRemoved', this._syncS, false);
- }
-
- this._syncA = null;
- this._syncS = null;
-
- this.$element.off('.select2');
- this.$element.attr('tabindex',
- Utils.GetData(this.$element[0], 'old-tabindex'));
-
- this.$element.removeClass('select2-hidden-accessible');
- this.$element.attr('aria-hidden', 'false');
- Utils.RemoveData(this.$element[0]);
- this.$element.removeData('select2');
-
- this.dataAdapter.destroy();
- this.selection.destroy();
- this.dropdown.destroy();
- this.results.destroy();
-
- this.dataAdapter = null;
- this.selection = null;
- this.dropdown = null;
- this.results = null;
- };
-
- Select2.prototype.render = function () {
- var $container = $(
- '' +
- ' ' +
- ' ' +
- ' '
- );
-
- $container.attr('dir', this.options.get('dir'));
-
- this.$container = $container;
-
- this.$container.addClass('select2-container--' + this.options.get('theme'));
-
- Utils.StoreData($container[0], 'element', this.$element);
-
- return $container;
- };
-
- return Select2;
-});
-
-S2.define('jquery-mousewheel',[
- 'jquery'
-], function ($) {
- // Used to shim jQuery.mousewheel for non-full builds.
- return $;
-});
-
-S2.define('jquery.select2',[
- 'jquery',
- 'jquery-mousewheel',
-
- './select2/core',
- './select2/defaults',
- './select2/utils'
-], function ($, _, Select2, Defaults, Utils) {
- if ($.fn.select2 == null) {
- // All methods that should return the element
- var thisMethods = ['open', 'close', 'destroy'];
-
- $.fn.select2 = function (options) {
- options = options || {};
-
- if (typeof options === 'object') {
- this.each(function () {
- var instanceOptions = $.extend(true, {}, options);
-
- var instance = new Select2($(this), instanceOptions);
- });
-
- return this;
- } else if (typeof options === 'string') {
- var ret;
- var args = Array.prototype.slice.call(arguments, 1);
-
- this.each(function () {
- var instance = Utils.GetData(this, 'select2');
-
- if (instance == null && window.console && console.error) {
- console.error(
- 'The select2(\'' + options + '\') method was called on an ' +
- 'element that is not using Select2.'
- );
- }
-
- ret = instance[options].apply(instance, args);
- });
-
- // Check if we should be returning `this`
- if ($.inArray(options, thisMethods) > -1) {
- return this;
- }
-
- return ret;
- } else {
- throw new Error('Invalid arguments for Select2: ' + options);
- }
- };
- }
-
- if ($.fn.select2.defaults == null) {
- $.fn.select2.defaults = Defaults;
- }
-
- return Select2;
-});
-
- // Return the AMD loader configuration so it can be used outside of this file
- return {
- define: S2.define,
- require: S2.require
- };
-}());
-
- // Autoload the jQuery bindings
- // We know that all of the modules exist above this, so we're safe
- var select2 = S2.require('jquery.select2');
-
- // Hold the AMD module references on the jQuery function that was just loaded
- // This allows Select2 to use the internal loader outside of this file, such
- // as in the language files.
- jQuery.fn.select2.amd = S2;
-
- // Return the Select2 instance for anyone who is importing it.
- return select2;
-}));
diff --git a/wp/wp-content/plugins/search-filter-pro/public/assets/js/select2.min.js b/wp/wp-content/plugins/search-filter-pro/public/assets/js/select2.min.js
deleted file mode 100644
index e4214264..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/assets/js/select2.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
-!function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(e,t){return void 0===t&&(t="undefined"!=typeof window?require("jquery"):require("jquery")(e)),n(t),t}:n(jQuery)}(function(u){var e=function(){if(u&&u.fn&&u.fn.select2&&u.fn.select2.amd)var e=u.fn.select2.amd;var t,n,r,h,o,s,f,g,m,v,y,_,i,a,b;function w(e,t){return i.call(e,t)}function l(e,t){var n,r,i,o,s,a,l,c,u,d,p,h=t&&t.split("/"),f=y.map,g=f&&f["*"]||{};if(e){for(s=(e=e.split("/")).length-1,y.nodeIdCompat&&b.test(e[s])&&(e[s]=e[s].replace(b,"")),"."===e[0].charAt(0)&&h&&(e=h.slice(0,h.length-1).concat(e)),u=0;u":">",'"':""","'":"'","/":"/"};return"string"!=typeof e?e:String(e).replace(/[&<>"'\/\\]/g,function(e){return t[e]})},i.appendMany=function(e,t){if("1.7"===o.fn.jquery.substr(0,3)){var n=o();o.map(t,function(e){n=n.add(e)}),t=n}e.append(t)},i.__cache={};var n=0;return i.GetUniqueElementId=function(e){var t=e.getAttribute("data-select2-id");return null==t&&(e.id?(t=e.id,e.setAttribute("data-select2-id",t)):(e.setAttribute("data-select2-id",++n),t=n.toString())),t},i.StoreData=function(e,t,n){var r=i.GetUniqueElementId(e);i.__cache[r]||(i.__cache[r]={}),i.__cache[r][t]=n},i.GetData=function(e,t){var n=i.GetUniqueElementId(e);return t?i.__cache[n]&&null!=i.__cache[n][t]?i.__cache[n][t]:o(e).data(t):i.__cache[n]},i.RemoveData=function(e){var t=i.GetUniqueElementId(e);null!=i.__cache[t]&&delete i.__cache[t],e.removeAttribute("data-select2-id")},i}),e.define("select2/results",["jquery","./utils"],function(h,f){function r(e,t,n){this.$element=e,this.data=n,this.options=t,r.__super__.constructor.call(this)}return f.Extend(r,f.Observable),r.prototype.render=function(){var e=h('');return this.options.get("multiple")&&e.attr("aria-multiselectable","true"),this.$results=e},r.prototype.clear=function(){this.$results.empty()},r.prototype.displayMessage=function(e){var t=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var n=h(' '),r=this.options.get("translations").get(e.message);n.append(t(r(e.args))),n[0].className+=" select2-results__message",this.$results.append(n)},r.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},r.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n",{class:"select2-results__options select2-results__options--nested"});p.append(l),s.append(a),s.append(p)}else this.template(e,t);return f.StoreData(t,"data",e),t},r.prototype.bind=function(t,e){var l=this,n=t.id+"-results";this.$results.attr("id",n),t.on("results:all",function(e){l.clear(),l.append(e.data),t.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),t.on("results:append",function(e){l.append(e.data),t.isOpen()&&l.setClasses()}),t.on("query",function(e){l.hideMessages(),l.showLoading(e)}),t.on("select",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("unselect",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("open",function(){l.$results.attr("aria-expanded","true"),l.$results.attr("aria-hidden","false"),l.setClasses(),l.ensureHighlightVisible()}),t.on("close",function(){l.$results.attr("aria-expanded","false"),l.$results.attr("aria-hidden","true"),l.$results.removeAttr("aria-activedescendant")}),t.on("results:toggle",function(){var e=l.getHighlightedResults();0!==e.length&&e.trigger("mouseup")}),t.on("results:select",function(){var e=l.getHighlightedResults();if(0!==e.length){var t=f.GetData(e[0],"data");"true"==e.attr("aria-selected")?l.trigger("close",{}):l.trigger("select",{data:t})}}),t.on("results:previous",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e);if(!(n<=0)){var r=n-1;0===e.length&&(r=0);var i=t.eq(r);i.trigger("mouseenter");var o=l.$results.offset().top,s=i.offset().top,a=l.$results.scrollTop()+(s-o);0===r?l.$results.scrollTop(0):s-o<0&&l.$results.scrollTop(a)}}),t.on("results:next",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e)+1;if(!(n>=t.length)){var r=t.eq(n);r.trigger("mouseenter");var i=l.$results.offset().top+l.$results.outerHeight(!1),o=r.offset().top+r.outerHeight(!1),s=l.$results.scrollTop()+o-i;0===n?l.$results.scrollTop(0):ithis.$results.outerHeight()||o<0)&&this.$results.scrollTop(i)}},r.prototype.template=function(e,t){var n=this.options.get("templateResult"),r=this.options.get("escapeMarkup"),i=n(e,t);null==i?t.style.display="none":"string"==typeof i?t.innerHTML=r(i):h(t).append(i)},r}),e.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),e.define("select2/selection/base",["jquery","../utils","../keys"],function(n,r,i){function o(e,t){this.$element=e,this.options=t,o.__super__.constructor.call(this)}return r.Extend(o,r.Observable),o.prototype.render=function(){var e=n(' ');return this._tabindex=0,null!=r.GetData(this.$element[0],"old-tabindex")?this._tabindex=r.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),e.attr("title",this.$element.attr("title")),e.attr("tabindex",this._tabindex),e.attr("aria-disabled","false"),this.$selection=e},o.prototype.bind=function(e,t){var n=this,r=e.id+"-results";this.container=e,this.$selection.on("focus",function(e){n.trigger("focus",e)}),this.$selection.on("blur",function(e){n._handleBlur(e)}),this.$selection.on("keydown",function(e){n.trigger("keypress",e),e.which===i.SPACE&&e.preventDefault()}),e.on("results:focus",function(e){n.$selection.attr("aria-activedescendant",e.data._resultId)}),e.on("selection:update",function(e){n.update(e.data)}),e.on("open",function(){n.$selection.attr("aria-expanded","true"),n.$selection.attr("aria-owns",r),n._attachCloseHandler(e)}),e.on("close",function(){n.$selection.attr("aria-expanded","false"),n.$selection.removeAttr("aria-activedescendant"),n.$selection.removeAttr("aria-owns"),n.$selection.trigger("focus"),n._detachCloseHandler(e)}),e.on("enable",function(){n.$selection.attr("tabindex",n._tabindex),n.$selection.attr("aria-disabled","false")}),e.on("disable",function(){n.$selection.attr("tabindex","-1"),n.$selection.attr("aria-disabled","true")})},o.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger("blur",e)},1)},o.prototype._attachCloseHandler=function(e){n(document.body).on("mousedown.select2."+e.id,function(e){var t=n(e.target).closest(".select2");n(".select2.select2-container--open").each(function(){this!=t[0]&&r.GetData(this,"element").select2("close")})})},o.prototype._detachCloseHandler=function(e){n(document.body).off("mousedown.select2."+e.id)},o.prototype.position=function(e,t){t.find(".selection").append(e)},o.prototype.destroy=function(){this._detachCloseHandler(this.container)},o.prototype.update=function(e){throw new Error("The `update` method must be defined in child classes.")},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get("disabled")},o}),e.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(e,t,n,r){function i(){i.__super__.constructor.apply(this,arguments)}return n.Extend(i,t),i.prototype.render=function(){var e=i.__super__.render.call(this);return e.addClass("select2-selection--single"),e.html(' '),e},i.prototype.bind=function(t,e){var n=this;i.__super__.bind.apply(this,arguments);var r=t.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",r).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",r),this.$selection.on("mousedown",function(e){1===e.which&&n.trigger("toggle",{originalEvent:e})}),this.$selection.on("focus",function(e){}),this.$selection.on("blur",function(e){}),t.on("focus",function(e){t.isOpen()||n.$selection.trigger("focus")})},i.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},i.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},i.prototype.selectionContainer=function(){return e(" ")},i.prototype.update=function(e){if(0!==e.length){var t=e[0],n=this.$selection.find(".select2-selection__rendered"),r=this.display(t,n);n.empty().append(r);var i=t.title||t.text;i?n.attr("title",i):n.removeAttr("title")}else this.clear()},i}),e.define("select2/selection/multiple",["jquery","./base","../utils"],function(i,e,l){function n(e,t){n.__super__.constructor.apply(this,arguments)}return l.Extend(n,e),n.prototype.render=function(){var e=n.__super__.render.call(this);return e.addClass("select2-selection--multiple"),e.html(''),e},n.prototype.bind=function(e,t){var r=this;n.__super__.bind.apply(this,arguments),this.$selection.on("click",function(e){r.trigger("toggle",{originalEvent:e})}),this.$selection.on("click",".select2-selection__choice__remove",function(e){if(!r.isDisabled()){var t=i(this).parent(),n=l.GetData(t[0],"data");r.trigger("unselect",{originalEvent:e,data:n})}})},n.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},n.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},n.prototype.selectionContainer=function(){return i('× ')},n.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=0;n×');a.StoreData(r[0],"data",t),this.$selection.find(".select2-selection__rendered").prepend(r)}},e}),e.define("select2/selection/search",["jquery","../utils","../keys"],function(r,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=r(' ');this.$searchContainer=t,this.$search=t.find("input");var n=e.call(this);return this._transferTabIndex(),n},e.prototype.bind=function(e,t,n){var r=this,i=t.id+"-results";e.call(this,t,n),t.on("open",function(){r.$search.attr("aria-controls",i),r.$search.trigger("focus")}),t.on("close",function(){r.$search.val(""),r.$search.removeAttr("aria-controls"),r.$search.removeAttr("aria-activedescendant"),r.$search.trigger("focus")}),t.on("enable",function(){r.$search.prop("disabled",!1),r._transferTabIndex()}),t.on("disable",function(){r.$search.prop("disabled",!0)}),t.on("focus",function(e){r.$search.trigger("focus")}),t.on("results:focus",function(e){e.data._resultId?r.$search.attr("aria-activedescendant",e.data._resultId):r.$search.removeAttr("aria-activedescendant")}),this.$selection.on("focusin",".select2-search--inline",function(e){r.trigger("focus",e)}),this.$selection.on("focusout",".select2-search--inline",function(e){r._handleBlur(e)}),this.$selection.on("keydown",".select2-search--inline",function(e){if(e.stopPropagation(),r.trigger("keypress",e),r._keyUpPrevented=e.isDefaultPrevented(),e.which===l.BACKSPACE&&""===r.$search.val()){var t=r.$searchContainer.prev(".select2-selection__choice");if(0this.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define("select2/data/maximumSelectionLength",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get("maximumSelectionLength"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("select",function(){r._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var r=this;this._checkIfMaximumSelected(function(){e.call(r,t,n)})},e.prototype._checkIfMaximumSelected=function(e,n){var r=this;this.current(function(e){var t=null!=e?e.length:0;0=r.maximumSelectionLength?r.trigger("results:message",{message:"maximumSelected",args:{maximum:r.maximumSelectionLength}}):n&&n()})},e}),e.define("select2/dropdown",["jquery","./utils"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t(' ');return e.attr("dir",this.options.get("dir")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),e.define("select2/dropdown/search",["jquery","../utils"],function(o,e){function t(){}return t.prototype.render=function(e){var t=e.call(this),n=o(' ');return this.$searchContainer=n,this.$search=n.find("input"),t.prepend(n),t},t.prototype.bind=function(e,t,n){var r=this,i=t.id+"-results";e.call(this,t,n),this.$search.on("keydown",function(e){r.trigger("keypress",e),r._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on("input",function(e){o(this).off("keyup")}),this.$search.on("keyup input",function(e){r.handleSearch(e)}),t.on("open",function(){r.$search.attr("tabindex",0),r.$search.attr("aria-controls",i),r.$search.trigger("focus"),window.setTimeout(function(){r.$search.trigger("focus")},0)}),t.on("close",function(){r.$search.attr("tabindex",-1),r.$search.removeAttr("aria-controls"),r.$search.removeAttr("aria-activedescendant"),r.$search.val(""),r.$search.trigger("blur")}),t.on("focus",function(){t.isOpen()||r.$search.trigger("focus")}),t.on("results:all",function(e){null!=e.query.term&&""!==e.query.term||(r.showSearch(e)?r.$searchContainer.removeClass("select2-search--hide"):r.$searchContainer.addClass("select2-search--hide"))}),t.on("results:focus",function(e){e.data._resultId?r.$search.attr("aria-activedescendant",e.data._resultId):r.$search.removeAttr("aria-activedescendant")})},t.prototype.handleSearch=function(e){if(!this._keyUpPrevented){var t=this.$search.val();this.trigger("query",{term:t})}this._keyUpPrevented=!1},t.prototype.showSearch=function(e,t){return!0},t}),e.define("select2/dropdown/hidePlaceholder",[],function(){function e(e,t,n,r){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n,r)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),r=t.length-1;0<=r;r--){var i=t[r];this.placeholder.id===i.id&&n.splice(r,1)}return n},e}),e.define("select2/dropdown/infiniteScroll",["jquery"],function(n){function e(e,t,n,r){this.lastParams={},e.call(this,t,n,r),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("query",function(e){r.lastParams=e,r.loading=!0}),t.on("query:append",function(e){r.lastParams=e,r.loading=!0}),this.$results.on("scroll",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);if(!this.loading&&e){var t=this.$results.offset().top+this.$results.outerHeight(!1);this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=t+50&&this.loadMore()}},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger("query:append",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n(' '),t=this.options.get("translations").get("loadingMore");return e.html(t(this.lastParams)),e},e}),e.define("select2/dropdown/attachBody",["jquery","../utils"],function(f,a){function e(e,t,n){this.$dropdownParent=f(n.get("dropdownParent")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("open",function(){r._showDropdown(),r._attachPositioningHandler(t),r._bindContainerResultHandlers(t)}),t.on("close",function(){r._hideDropdown(),r._detachPositioningHandler(t)}),this.$dropdownContainer.on("mousedown",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr("class",n.attr("class")),t.removeClass("select2"),t.addClass("select2-container--open"),t.css({position:"absolute",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=f(" "),n=e.call(this);return t.append(n),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){if(!this._containerResultsHandlersBound){var n=this;t.on("results:all",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:append",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:message",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("select",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("unselect",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0}},e.prototype._attachPositioningHandler=function(e,t){var n=this,r="scroll.select2."+t.id,i="resize.select2."+t.id,o="orientationchange.select2."+t.id,s=this.$container.parents().filter(a.hasScroll);s.each(function(){a.StoreData(this,"select2-scroll-position",{x:f(this).scrollLeft(),y:f(this).scrollTop()})}),s.on(r,function(e){var t=a.GetData(this,"select2-scroll-position");f(this).scrollTop(t.y)}),f(window).on(r+" "+i+" "+o,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n="scroll.select2."+t.id,r="resize.select2."+t.id,i="orientationchange.select2."+t.id;this.$container.parents().filter(a.hasScroll).off(n),f(window).off(n+" "+r+" "+i)},e.prototype._positionDropdown=function(){var e=f(window),t=this.$dropdown.hasClass("select2-dropdown--above"),n=this.$dropdown.hasClass("select2-dropdown--below"),r=null,i=this.$container.offset();i.bottom=i.top+this.$container.outerHeight(!1);var o={height:this.$container.outerHeight(!1)};o.top=i.top,o.bottom=i.top+o.height;var s=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=ai.bottom+s,d={left:i.left,top:o.bottom},p=this.$dropdownParent;"static"===p.css("position")&&(p=p.offsetParent());var h={top:0,left:0};(f.contains(document.body,p[0])||p[0].isConnected)&&(h=p.offset()),d.top-=h.top,d.left-=h.left,t||n||(r="below"),u||!c||t?!c&&u&&t&&(r="below"):r="above",("above"==r||t&&"below"!==r)&&(d.top=o.top-h.top-s),null!=r&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+r),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+r)),this.$dropdownContainer.css(d)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(e.minWidth=e.width,e.position="relative",e.width="auto"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),e.define("select2/dropdown/minimumResultsForSearch",[],function(){function e(e,t,n,r){this.minimumResultsForSearch=n.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,r)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,r=0;r ');return e.attr("dir",this.options.get("dir")),this.$container=e,this.$container.addClass("select2-container--"+this.options.get("theme")),u.StoreData(e[0],"element",this.$element),e},d}),e.define("jquery-mousewheel",["jquery"],function(e){return e}),e.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(i,e,o,t,s){if(null==i.fn.select2){var a=["open","close","destroy"];i.fn.select2=function(t){if("object"==typeof(t=t||{}))return this.each(function(){var e=i.extend(!0,{},t);new o(i(this),e)}),this;if("string"!=typeof t)throw new Error("Invalid arguments for Select2: "+t);var n,r=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=s.GetData(this,"select2");null==e&&window.console&&console.error&&console.error("The select2('"+t+"') method was called on an element that is not using Select2."),n=e[t].apply(e,r)}),-1plugin_slug );
-
- global $search_filter_shared;
- $shared = $search_filter_shared; // this sets up shared (between frontend and admin) attributes (like post types & taxonomies)
-
- // Load public-facing style sheet and JavaScript.
- add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_styles' ) );
- add_action( 'wp_enqueue_scripts', array( $this, 'register_scripts' ) );
-
- // Ajax
- add_action( 'init', array( $this, 'get_results' ), 2000 );
- // add_action( 'init', array($this, 'get_results'), 200 );
-
- // if(!is_admin())
- // {
- add_action( 'parse_request', array( $this, 'archive_query_init' ), 10 );
- // add_action( 'pre_get_posts', array($this, 'custom_query_init'), 100 );
- add_action( 'pre_get_posts', array( $this, 'archive_query_init_later' ) );
- // add_action( 'pre_get_posts', array($this, 'archive_query_init_later'), -100 );
-
- // load SF Template - set high priority to override other plugins...
- add_action( 'template_include', array( $this, 'handle_template' ), 100, 3 );
- // }
-
- add_action( 'pre_get_posts', array( $this, 'custom_query_init' ), 10000 );
-
- $this->display_shortcode = new Search_Filter_Display_Shortcode( $this->plugin_slug );
-
- global $search_filter_third_party;
- $this->third_party = $search_filter_third_party;
-
- add_action( 'woocommerce_product_query', array( $this, 'setup_wc_query' ), 100000 );
-
- // add_filter('rewrite_rules_array', array($this, 'sf_rewrite_rules'));
- }
-
- public function custom_query_init( $query ) {
- if ( ! isset( $query->query_vars['search_filter_id'] ) ) {
- return;
- }
-
- if ( isset( $query->query_vars['search_filter_override'] ) ) {
- if ( $query->query_vars['search_filter_override'] == false ) {
- return;
- }
- }
- if ( $query->query_vars['search_filter_id'] != 0 ) {
- global $searchandfilter;
- $searchandfilter->get( $query->query_vars['search_filter_id'] )->query->setup_custom_query( $query );
- }
- }
-
- public function is_woo_shop( $query ) {
- $front_page_id = get_option( 'page_on_front' );
- $current_page_id = $query->get( 'page_id' );
- $shop_page_id = apply_filters( 'woocommerce_get_shop_page_id', get_option( 'woocommerce_shop_page_id' ) );
- $is_static_front_page = 'page' == get_option( 'show_on_front' );
-
- // Warnings are thrown when using pre_get_posts, Woocommerce & the homepage when using the function `is_shop` - https://github.com/woothemes/woocommerce/issues/10625#issuecomment-204212754 - apparently WP issue
- // Otherwise, just use is_shop since it works fine on other pages
- if ( $is_static_front_page && $front_page_id == $current_page_id ) {
- // its the homepage so use this function to detect shop
- $is_shop_page = ( $current_page_id == $shop_page_id ) ? true : false;
- } else {
- // is_shop should work fine
- $is_shop_page = is_shop();
- }
-
- return $is_shop_page;
- }
- public function archive_query_init_later( $query ) {
- global $searchandfilter;
- global $wp_query;
-
- if ( ! $query->is_main_query() ) {
- return;
- }
-
- if ( is_post_type_archive() || is_home() || is_tag() || is_tax() || is_category() ) {// then we know its a post type archive, see if any of our search forms
-
- foreach ( $this->all_search_form_ids as $search_form_id ) {
-
- // as we only want to update "enabled", then load all settings and update only this key
- $search_form_settings = Search_Filter_Helper::get_settings_meta( $search_form_id );
-
- if ( isset( $search_form_settings['display_results_as'] ) ) {
- global $wp_query;
- if ( isset( $wp_query->query_vars['sfid'] ) ) {// this means its an archive and its already been init
- return;
- }
-
- if ( $search_form_settings['display_results_as'] == 'post_type_archive' ) {
- if ( isset( $search_form_settings['post_types'] ) ) {
- $post_types = array_keys( $search_form_settings['post_types'] );
- $enable_taxonomy_archives = $search_form_settings['enable_taxonomy_archives'];
- if ( isset( $post_types[0] ) ) {
- $post_type = $post_types[0];
-
- if ( is_post_type_archive( $post_type ) ) {
- $searchandfilter->set_active_sfid( $search_form_id );
- $searchandfilter->get( $search_form_id )->query->setup_archive_query( $query );
- return;
- } elseif ( ( $post_type == 'post' ) && ( is_home() ) ) { // This then works on the blog page (is_home) set in `settings -> reading -> "a static page" -> posts page.
- $searchandfilter->set_active_sfid( $search_form_id );
- $searchandfilter->get( $search_form_id )->query->hook_setup_archive_query();
- return;
- } elseif ( ( $enable_taxonomy_archives == 1 ) && ( Search_Filter_Wp_Data::is_taxonomy_archive_of_post_type( $post_type ) ) ) {
- $searchandfilter->set_active_sfid( $search_form_id );
- $searchandfilter->get( $search_form_id )->query->setup_archive_query( $query );
- return;
- }
- }
- }
- }
- }
- }
- }
- }
- public function setup_wc_query( $query ) {
-
- global $searchandfilter;
-
- // Filter the shop page.
- if ( function_exists( 'is_shop' ) ) {
- if ( $this->is_woo_shop( $query ) ) {
- foreach ( $this->all_search_form_ids as $search_form_id ) {
- // as we only want to update "enabled", then load all settings and update only this key
- $search_form_settings = Search_Filter_Helper::get_settings_meta( $search_form_id );
-
- if ( isset( $search_form_settings['display_results_as'] ) ) {
- if ( $search_form_settings['display_results_as'] == 'custom_woocommerce_store' ) {
- $searchandfilter->set_active_sfid( $search_form_id );
- $searchandfilter->get( $search_form_id )->query->setup_wc_query( $query );
- return;
- }
- }
- }
- }
- }
-
- // Filter WC tax archives.
- if ( is_post_type_archive() || is_home() || is_tag() || is_tax() || is_category() ) {// then we know its a post type archive, see if any of our search forms
-
- foreach ( $this->all_search_form_ids as $search_form_id ) {
- // as we only want to update "enabled", then load all settings and update only this key
- $search_form_settings = Search_Filter_Helper::get_settings_meta( $search_form_id );
-
- if ( isset( $search_form_settings['display_results_as'] ) ) {
- global $wp_query;
- if ( isset( $wp_query->query_vars['sfid'] ) ) {// this means its an archive and its already been init
- return;
- } elseif ( $search_form_settings['display_results_as'] == 'custom_woocommerce_store' ) {
- $post_type = 'product';
- $enable_taxonomy_archives = $search_form_settings['enable_taxonomy_archives'];
-
- $searchandfilter->set_active_sfid( $search_form_id );
-
- if ( ( $enable_taxonomy_archives == 1 ) && ( Search_Filter_Wp_Data::is_taxonomy_archive_of_post_type( $post_type, false ) ) ) {
- $searchandfilter->set_active_sfid( $search_form_id );
- $searchandfilter->get( $search_form_id )->query->setup_wc_query( $query );
- return;
- }
- }
- }
- }
- }
- }
-
- public function archive_query_init( $wp ) {
- // here we test to see if we have an ID set - which if it is, then this means a user is on a results page, using archive method
-
- global $searchandfilter;
- global $wp_query;
-
- if ( ! is_admin() ) {
-
- if ( isset( $wp->query_vars['sfid'] ) ) {
- $sfid = (int) $wp->query_vars['sfid'];
- $searchandfilter->set_active_sfid( $sfid );
- $searchandfilter->set( $sfid );
- }
-
- // extra stuff
- // grab any search forms before woocommerce had a chance to modify the query
- $search_form_query = new WP_Query( 'post_type=search-filter-widget&fields=ids&post_status=publish&posts_per_page=-1' );
- $this->all_search_form_ids = $search_form_query->get_posts();
- }
- }
-
- public function search_filter_ajax_object_results( $ajax_data ) {
- global $searchandfilter;
- $sfid = (int) ( $_GET['sfid'] );
- $sf_inst = $searchandfilter->get( $sfid );
- $ajax_data['results'] = $sf_inst->query()->the_results();
-
- return $ajax_data;
- }
-
- public function search_filter_ajax_object_form( $ajax_data ) {
- $sfid = (int) ( $_GET['sfid'] );
- $ajax_data['form'] = $this->display_shortcode->display_shortcode( array( 'id' => $sfid ) );
- return $ajax_data;
- }
-
- public function search_filter_ajax_object_all( $ajax_data ) {
- global $searchandfilter;
- $sfid = (int) ( $_GET['sfid'] );
- $sf_inst = $searchandfilter->get( $sfid );
- $ajax_data['form'] = $this->display_shortcode->display_shortcode( array( 'id' => $sfid ) );
- $ajax_data['results'] = $sf_inst->query()->the_results();
- return $ajax_data;
- }
-
- public function get_results() {
- add_filter( 'search_filter_ajax_object_results', array( $this, 'search_filter_ajax_object_results' ), 10, 1 );
- add_filter( 'search_filter_ajax_object_form', array( $this, 'search_filter_ajax_object_form' ), 10, 1 );
- add_filter( 'search_filter_ajax_object_all', array( $this, 'search_filter_ajax_object_all' ), 10, 1 );
-
- // $this->hard_remove_filters();
- if ( ( isset( $_GET['sfid'] ) ) && ( isset( $_GET['sf_action'] ) ) && ( isset( $_GET['sf_data'] ) ) ) {
- // get_form
-
- $sf_action = esc_attr( $_GET['sf_action'] );
- $sf_data = esc_attr( $_GET['sf_data'] );
-
- if ( ( esc_attr( $_GET['sfid'] ) != '' ) && ( $sf_action == 'get_data' ) ) {
- global $searchandfilter;
-
- $sfid = (int) ( $_GET['sfid'] );
- $sf_inst = $searchandfilter->get( $sfid );
-
- $data_types = explode( ',', $sf_data );
- $ajax_data = array(); // the obejct that is json encoded
-
- foreach ( $data_types as $data_type ) {
- $clean_data_type = esc_attr( $data_type );
-
- if ( has_filter( "search_filter_ajax_object_$clean_data_type" ) ) {
-
- $ajax_data = apply_filters( "search_filter_ajax_object_$clean_data_type", $ajax_data );
- }
- }
-
- do_action( 'search_filter_api_header' );
- header( 'Content-Type: application/json; charset=utf-8' );
- echo wp_json_encode( $ajax_data );
- exit;
- }
- }
- }
-
- public function handle_template( $original_template ) {
- global $searchandfilter;
- global $wp_query;
-
- $sfid = 0;
-
- if ( isset( $wp_query->query_vars['sfid'] ) ) {
- $sfid = $wp_query->query_vars['sfid'];
- } else {
- return $original_template;
- }
-
- if ( ( $searchandfilter->get( $sfid )->settings( 'display_results_as' ) == 'custom_woocommerce_store' ) || ( $searchandfilter->get( $sfid )->settings( 'display_results_as' ) == 'post_type_archive' ) ) {
- return $original_template;
- }
-
- if ( $searchandfilter->get( $sfid )->is_valid_form() ) {// then we are doing a search
- $sfpaged = 1;
- if ( isset( $_GET['sf_paged'] ) ) {
- $sfpaged = (int) $_GET['sf_paged'];
- }
- global $paged;
- $paged = $sfpaged;
- // set_query_var("paged", $paged);
-
- $template_file_name = $searchandfilter->get( $sfid )->get_template_name();
-
- if ( $template_file_name ) {
- $located = locate_template( $template_file_name );
-
- if ( ! empty( $located ) ) {
- $this->display_shortcode->set_is_template( true );
- return ( $located );
- }
- }
- }
-
- return $original_template;
- }
-
- /**
- * Return the plugin slug.
- *
- * @since 1.0.0
- *
- * @return Plugin slug variable.
- */
- public function get_plugin_slug() {
- return $this->plugin_slug;
- }
-
-
-
- /**
- * Return an instance of this class.
- *
- * @since 1.0.0
- *
- * @return object A single instance of this class.
- */
- public static function get_instance() {
-
- // If the single instance hasn't been set, set it now.
- if ( null == self::$instance ) {
- self::$instance = new self();
- }
-
- return self::$instance;
- }
-
- /**
- * Fired when the plugin is activated.
- *
- * @since 1.0.0
- *
- * @param boolean $network_wide True if WPMU superadmin uses
- * "Network Activate" action, false if
- * WPMU is disabled or plugin is
- * activated on an individual blog.
- */
- public static function activate( $network_wide ) {
-
- if ( function_exists( 'is_multisite' ) && is_multisite() ) {
-
- if ( $network_wide ) {
-
- // Get all blog ids
- $blog_ids = self::get_blog_ids();
-
- foreach ( $blog_ids as $blog_id ) {
-
- switch_to_blog( $blog_id );
- self::single_activate();
- }
-
- restore_current_blog();
-
- } else {
- self::single_activate();
- }
- } else {
- self::single_activate();
- }
-
- }
-
- /**
- * Fired when the plugin is deactivated.
- *
- * @since 1.0.0
- *
- * @param boolean $network_wide True if WPMU superadmin uses
- * "Network Deactivate" action, false if
- * WPMU is disabled or plugin is
- * deactivated on an individual blog.
- */
- public static function deactivate( $network_wide ) {
-
- if ( function_exists( 'is_multisite' ) && is_multisite() ) {
-
- if ( $network_wide ) {
-
- // Get all blog ids
- $blog_ids = self::get_blog_ids();
-
- foreach ( $blog_ids as $blog_id ) {
-
- switch_to_blog( $blog_id );
- self::single_deactivate();
-
- }
-
- restore_current_blog();
-
- } else {
- self::single_deactivate();
- }
- } else {
- self::single_deactivate();
- }
-
- }
-
- /**
- * Get all blog ids of blogs in the current network that are:
- * - not archived
- * - not spam
- * - not deleted
- *
- * @since 1.0.0
- *
- * @return array|false The blog ids, false if no matches.
- */
- private static function get_blog_ids() {
-
- global $wpdb;
-
- // get an array of blog ids
- $sql = "SELECT blog_id FROM $wpdb->blogs
- WHERE archived = '0' AND spam = '0'
- AND deleted = '0'";
-
- return $wpdb->get_col( $sql );
-
- }
-
- /**
- * Fired for each blog when the plugin is activated.
- *
- * @since 1.0.0
- */
- private static function single_activate() {
- // @TODO: Define activation functionality here
- }
-
- /**
- * Fired for each blog when the plugin is deactivated.
- *
- * @since 1.0.0
- */
- private static function single_deactivate() {
- // @TODO: Define deactivation functionality here
- }
-
-
- /**
- * Register and enqueue public-facing style sheet.
- *
- * @since 1.0.0
- */
- public function enqueue_styles() {
- $file_ext = '.min.css';
- if ( SEARCH_FILTER_DEBUG == true ) {
- $file_ext = '.css';
- }
-
- $load_js_css = (int) Search_Filter_Helper::get_option( 'load_js_css' );
-
- if ( $load_js_css === 1 ) {
- wp_enqueue_style( $this->plugin_slug . '-plugin-styles', plugins_url( 'assets/css/search-filter' . $file_ext, __FILE__ ), array(), self::VERSION );
- }
- }
-
- /**
- * Register and enqueues public-facing JavaScript files.
- *
- * @since 1.0.0
- */
- public function register_scripts() {
-
- global $searchandfilter;
-
- $file_ext = '.min.js';
- if ( SEARCH_FILTER_DEBUG == true ) {
- $file_ext = '.js';
- }
-
- wp_register_script( $this->plugin_slug . '-plugin-build', plugins_url( 'assets/js/search-filter-build' . $file_ext, __FILE__ ), array( 'jquery' ), self::VERSION );
- wp_register_script( $this->plugin_slug . '-plugin-chosen', plugins_url( 'assets/js/chosen.jquery' . $file_ext, __FILE__ ), array( 'jquery' ), self::VERSION );
- wp_register_script( $this->plugin_slug . '-plugin-select2', plugins_url( 'assets/js/select2' . $file_ext, __FILE__ ), array( 'jquery' ), self::VERSION );
- wp_register_script( $this->plugin_slug . '-plugin-jquery-i18n', '//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/i18n/jquery-ui-i18n' . $file_ext, array( 'jquery' ), self::VERSION );
- // wp_register_script( $this->plugin_slug . '-plugin-jquery-i18n', '//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/i18n/datepicker-nl.js', array('jquery'), self::VERSION );
- $js_data = array(
- 'ajax_url' => admin_url( 'admin-ajax.php' ),
- 'home_url' => home_url( '/' ),
- 'extensions' => apply_filters( 'search_filter_extensions', array() ),
- );
- wp_localize_script( $this->plugin_slug . '-plugin-build', 'SF_LDATA', $js_data );
-
- $lazy_load_js = Search_Filter_Helper::get_option( 'lazy_load_js' );
- $load_js_css = Search_Filter_Helper::get_option( 'load_js_css' );
-
- if ( ( $lazy_load_js != 1 ) && ( $load_js_css == 1 ) ) {
- $this->enqueue_scripts();
- }
- }
- public function enqueue_scripts() {
- $load_jquery_i18n = (int) Search_Filter_Helper::get_option( 'load_jquery_i18n' );
- $combobox_script = Search_Filter_Helper::get_option( 'combobox_script' );
-
- wp_enqueue_script( $this->plugin_slug . '-plugin-build' );
- wp_enqueue_script( $this->plugin_slug . '-plugin-' . $combobox_script );
- wp_enqueue_script( 'jquery-ui-datepicker' );
-
- if ( $load_jquery_i18n === 1 ) {
- wp_enqueue_script( $this->plugin_slug . '-plugin-jquery-i18n' );
- }
- }
-
- /**
- * NOTE: Actions are points in the execution of a page or process
- * lifecycle that WordPress fires.
- *
- * Actions: http://codex.wordpress.org/Plugin_API#Actions
- * Reference: http://codex.wordpress.org/Plugin_API/Action_Reference
- *
- * @since 1.0.0
- */
- public function create_custom_post_types() {
-
- $labels = array(
- 'name' => __( 'Search & Filter', $this->plugin_slug ),
- 'singular_name' => __( 'Search Form', $this->plugin_slug ),
- 'add_new' => __( 'Add New Search Form', $this->plugin_slug ),
- 'add_new_item' => __( 'Add New Search Form', $this->plugin_slug ),
- 'edit_item' => __( 'Edit Search Form', $this->plugin_slug ),
- 'new_item' => __( 'New Search Form', $this->plugin_slug ),
- 'view_item' => __( 'View Search Form', $this->plugin_slug ),
- 'search_items' => __( 'Search \'Search Forms\'', $this->plugin_slug ),
- 'not_found' => __( 'No Search Forms found', $this->plugin_slug ),
- 'not_found_in_trash' => __( 'No Search Forms found in Trash', $this->plugin_slug ),
- );
-
- register_post_type(
- $this->plugin_slug . '-widget',
- array(
- 'labels' => $labels,
- 'public' => false,
- 'show_ui' => true,
- '_builtin' => false,
- 'capability_type' => 'page',
- 'hierarchical' => true,
- 'rewrite' => false,
- 'supports' => array( 'title' ),
- 'show_in_menu' => false,
- /*'has_archive' => true,*/
- )
- );
- }
-}
-
-
-if ( ! function_exists( 'search_filter_get_previous_posts_link' ) ) {
- function search_filter_get_previous_posts_link( $label = null ) {
- global $paged;
-
- if ( null === $label ) {
- $label = __( '« Previous Page' );
- }
-
- if ( $paged > 1 ) {
- /**
- * Filters the anchor tag attributes for the previous posts page link.
- *
- * @since 2.7.0
- *
- * @param string $attributes Attributes for the anchor tag.
- */
- $attr = apply_filters( 'previous_posts_link_attributes', '' );
-
- return sprintf(
- '%3$s ',
- previous_posts( false ),
- $attr,
- preg_replace( '/&([^#])(?![a-z]{1,8};)/i', '&$1', $label )
- );
- }
- }
-}
-
-if ( ! function_exists( 'search_filter_get_next_posts_link' ) ) {
- function search_filter_get_next_posts_link( $label = null, $max_page = 0 ) {
- global $paged, $wp_query;
-
- if ( ! $max_page ) {
- $max_page = $wp_query->max_num_pages;
- }
-
- if ( ! $paged ) {
- $paged = 1;
- }
-
- $next_page = (int) $paged + 1;
-
- if ( null === $label ) {
- $label = __( 'Next Page »' );
- }
-
- if ( $next_page <= $max_page ) {
- /**
- * Filters the anchor tag attributes for the next posts page link.
- *
- * @since 2.7.0
- *
- * @param string $attributes Attributes for the anchor tag.
- */
- $attr = apply_filters( 'next_posts_link_attributes', '' );
-
- return sprintf(
- '%3$s ',
- next_posts( $max_page, false ),
- $attr,
- preg_replace( '/&([^#])(?![a-z]{1,8};)/i', '&$1', $label )
- );
- }
- }
-}
-
-if ( ! class_exists( 'Search_Filter_Display_Shortcode' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'includes/class-search-filter-display-shortcode.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Query' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'includes/class-search-filter-query.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Active_Query' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'includes/class-search-filter-active-query.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Cache' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'includes/class-search-filter-cache.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Config' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'includes/class-search-filter-config.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Global' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'includes/class-search-filter-global.php';
-}
-
-if ( ! defined( 'SF_FPRE' ) ) {
- define( 'SF_FPRE', '_sf_' );
-}
-if ( ! defined( 'SF_TAX_PRE' ) ) {
- define( 'SF_TAX_PRE', '_sft_' );
-}
-if ( ! defined( 'SF_META_PRE' ) ) {
- define( 'SF_META_PRE', '_sfm_' );
-}
-if ( ! defined( 'SF_CLASS_PRE' ) ) {
- define( 'SF_CLASS_PRE', 'sf-' );
-}
-if ( ! defined( 'SF_INPUT_ID_PRE' ) ) {
- define( 'SF_INPUT_ID_PRE', 'sf' );
-}
-if ( ! defined( 'SF_FIELD_CLASS_PRE' ) ) {
- define( 'SF_FIELD_CLASS_PRE', SF_CLASS_PRE . 'field-' );
-}
-if ( ! defined( 'SF_ITEM_CLASS_PRE' ) ) {
- define( 'SF_ITEM_CLASS_PRE', SF_CLASS_PRE . 'item-' );
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-active-query.php b/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-active-query.php
deleted file mode 100644
index 34671255..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-active-query.php
+++ /dev/null
@@ -1,908 +0,0 @@
-plugin_slug = $plugin_slug;
-
- if ( $this->sfid == 0 ) {
- $this->sfid = $sfid;
- $this->form_fields = $fields;
- $this->form_settings = $settings;
- }
-
- }
-
- public function get_field_values( $field_name ) {
- $this->set_fields_array();
-
- if ( isset( $this->field_values[ $field_name ] ) ) {
- return $this->field_values[ $field_name ];
- }
-
- return array();
- }
-
- private function set_field_values_array() {
- $field_values = array();
-
- $current_query_arr = $this->get_array();
-
- foreach ( $current_query_arr as $field_name => $field ) {
-
- if ( isset( $field['active_terms'] ) ) {
- $field_values[ $field_name ] = array();
-
- foreach ( $field['active_terms'] as $active_term ) {
- array_push( $field_values[ $field_name ], $active_term['value'] );
- }
- }
- }
-
- $this->field_values = $field_values;
-
- // perhaps we should keep the inherited stuff sepearte? And add an option to the functions to merge with regular defaults
- $this->set_inherited_defaults();
-
- }
-
- private function set_inherited_defaults() {
- $inherit_current_post_type_archive = '';
- if ( isset( $this->form_settings['inherit_current_post_type_archive'] ) ) {
- $inherit_current_post_type_archive = $this->form_settings['inherit_current_post_type_archive'];
- }
-
- $inherit_current_taxonomy_archive = '';
- if ( isset( $this->form_settings['inherit_current_taxonomy_archive'] ) ) {
- $inherit_current_taxonomy_archive = $this->form_settings['inherit_current_taxonomy_archive'];
- }
-
- $inherit_current_author_archive = '';
- if ( isset( $this->form_settings['inherit_current_author_archive'] ) ) {
- $inherit_current_author_archive = $this->form_settings['inherit_current_author_archive'];
- }
-
- if ( $inherit_current_post_type_archive == '1' ) {
- if ( ( is_post_type_archive() ) && ( ( ! is_tax() ) && ( ! is_category() ) && ( ! is_tag() ) ) ) {
- $post_type_slug = get_post_type();
-
- if ( $post_type_slug ) {
- $this->field_values['post_types'] = array( $post_type_slug );
- }
- } elseif ( is_home() ) {// this is the same as the "posts" archive
-
- }
- }
-
- if ( $inherit_current_taxonomy_archive == '1' ) {
- global $searchandfilter;
- $term = $searchandfilter->get_queried_object();
-
- if ( is_tax() ) {
- $this->field_values[ SF_TAX_PRE . $term->taxonomy ] = array( $term->slug );
-
- } elseif ( is_category() ) {
- $this->field_values[ SF_TAX_PRE . 'category' ] = array( $term->slug );
-
- } elseif ( is_tag() ) {
- $this->field_values[ SF_TAX_PRE . 'post_tag' ] = array( $term->slug );
- }
- }
-
- if ( $inherit_current_author_archive == '1' ) {
- if ( is_author() ) {
- global $searchandfilter;
- $author = $searchandfilter->get_queried_object();
-
- $this->field_values['authors'] = array( $author->user_nicename );
- }
- }
-
- }
-
- private function set_fields_array() {
- // the the object has already been set up don't bother setting up again
- if ( $this->is_set ) {
- return;
- }
-
- // now set flag to true so we can't come here again
- $this->is_set = true;
-
- // now loop through URL vars and grab the user selection
-
- // grab search term for prefilling search input
-
- if ( isset( $_GET['_sf_s'] ) ) {
- if ( is_string( $_GET['_sf_s'] ) ) {
- $this->searchterm = esc_attr( trim( stripslashes( $_GET['_sf_s'] ) ) );
- } else {
- $this->searchterm = '';
- }
- }
-
- $taxs = array();
-
- if ( isset( $this->form_fields ) ) {
- foreach ( $this->form_fields as $field_name => $field ) {
- $field_name_get = str_replace( array( ' ', '.' ), '_', $field_name ); // replace space with `_` as this is done anyway - spaces are not allowed in GET variable names, and are automatically converted by server/browser to `_`
-
- $key = $field_name;
-
- if ( isset( $_GET[ $field_name_get ] ) ) {
- if ( strpos( $key, SF_TAX_PRE ) === 0 ) {
- $tax_object = $this->get_taxonomy( $key );
- $this->query_array[ $key ] = $tax_object;
- } elseif ( strpos( $key, SF_META_PRE ) === 0 ) {
- $meta_data = $this->get_post_meta( $key );
- $this->query_array[ $key ] = $meta_data;
-
- }
- }
- }
- }
-
- if ( isset( $_GET['authors'] ) ) {
- $author = $this->get_author( 'authors' );
- $this->query_array['authors'] = $author;
- }
-
- if ( isset( $_GET['post_types'] ) ) {
- $post_type = $this->get_post_type( 'post_types' );
- $this->query_array['post_types'] = $post_type;
- }
-
- if ( isset( $_GET['post_date'] ) ) {
- $post_date = array( '', '' );
-
- $post_date = array_map( 'urldecode', explode( '+', esc_attr( urlencode( $_GET['post_date'] ) ) ) );
- if ( count( $post_date ) == 1 ) {
- $post_date[1] = '';
- }
-
- $this->query_array[ SF_FPRE . 'post_date' ]['active_terms'] = array();
-
- foreach ( $post_date as $a_post_date ) {
- $active_terms = array( 'value' => urlencode( $a_post_date ) );
- array_push( $this->query_array[ SF_FPRE . 'post_date' ]['active_terms'], $active_terms );
- }
- }
-
- if ( isset( $_GET['sort_order'] ) ) {
- $sort_orders = array();
- $sort_orders = explode( ',', esc_attr( $_GET['sort_order'] ) );
-
- $this->query_array[ SF_FPRE . 'sort_order' ]['active_terms'] = array();
-
- foreach ( $sort_orders as $sort_order ) {
- $sort_order = str_replace( ' ', '+', $sort_order );
- // $active_terms = (array("value"=>urlencode($sort_order)));
- $active_terms = ( array( 'value' => ( $sort_order ) ) );
- array_push( $this->query_array[ SF_FPRE . 'sort_order' ]['active_terms'], $active_terms );
- }
- }
-
- // results per page
- if ( isset( $_GET['_sf_ppp'] ) ) {
- $active_term = ( array( 'value' => (int) $_GET['_sf_ppp'] ) );
- $this->query_array[ SF_FPRE . 'ppp' ]['active_terms'] = array( $active_term );
- }
-
- $this->set_field_values_array(); // this is an array with only the values from the URL, used mostly for setting defaults in the search form
-
- }
-
-
-
-
- public function get_taxonomy_terms_string( $sf_taxonomy_key, $term_delim_arr = array( ', ' ), $show_if_not_selected = true, $use_smart_labels = true ) {
- $taxonomy = $this->get_taxonomy( $sf_taxonomy_key );
-
- $active_terms = $taxonomy['active_terms'];
- $no_active_terms = count( $active_terms );
-
- $term_string = '';
-
- $taxonomy_string = '';
-
- if ( $no_active_terms == 0 ) {
- if ( $show_if_not_selected ) {
- $term_string = $taxonomy['all_items_label'];
- }
- } else {
- // $active_term_names = array_map(function($el){ return $el['name']; }, $active_terms);
- $term_delim = '';
- if ( count( $term_delim_arr ) == 1 ) {// then use the same for both and / or , scenarios
- $term_delim = $term_delim_arr[0];
- }
-
- $term_string = implode( $term_delim, array_map( array( $this, 'implode_name' ), $active_terms ) );
-
- }
-
- if ( $term_string != '' ) {
- $taxonomy_string = $term_string;
- }
-
- return $taxonomy_string;
- }
-
- public function implode_name( $term ) {
- return $term['name'];
- }
-
- public function get_fields_html( $field_names, $args = array() ) {
- $fields_strs = array();
-
- $defaults = array(
-
- 'str' => '%1$s: %2$s',
- 'delim' => array( ', ', ' - ' ), // first value is for regular delim, second value is for range fields
- 'field_delim' => ' ',
- 'show_all_if_empty' => true,
- 'use_smart_lables' => true,
- 'labels' => array(),
-
- );
-
- if ( is_array( $args ) ) {
- $fields_args = array_replace( $defaults, $args );
- } else {
- $fields_args = $defaults;
- }
-
- foreach ( $field_names as $field_name ) {
- if ( $field_name ) {
- $field_args = $fields_args;
-
- $field_args['labels'] = array();
-
- if ( isset( $fields_args['labels'] ) ) {
- if ( isset( $fields_args['labels'][ $field_name ] ) ) {
-
- $field_args['labels'] = $fields_args['labels'][ $field_name ];
-
- }
- }
-
- $field_str = $this->get_field_string( $field_name, $field_args );
- if ( $field_str != '' ) {
- array_push( $fields_strs, $field_str );
- }
- }
- }
-
- return implode( $fields_args['field_delim'], $fields_strs );
-
- }
-
- public function get_field_string( $sf_field_key, $args = array() ) {
- $defaults = array(
-
- 'str' => '%1$s: %2$s',
- 'delim' => array( ', ', ' - ' ),
- 'show_all_if_empty' => true,
- 'use_smart_lables' => true,
- 'labels' => array(
- 'name' => '',
- 'singular_name' => '',
- 'all_items_label' => '',
- ),
-
- );
-
- $field_args = array_replace( $defaults, $args );
-
- $field_as_string = '';
-
- $is_choice_field = true;
-
- if ( strpos( $sf_field_key, SF_TAX_PRE ) === 0 ) {
- $field = $this->get_taxonomy( $sf_field_key );
- } elseif ( strpos( $sf_field_key, SF_META_PRE ) === 0 ) {
- if ( ! isset( $this->form_fields[ $sf_field_key ] ) ) {
- return;
- }
-
- $post_meta_field = $this->form_fields[ $sf_field_key ];
-
- if ( $post_meta_field['meta_type'] != 'choice' ) {
- $field_args['use_smart_lables'] = false;
- $is_choice_field = false;
- }
-
- $field = $this->get_post_meta( $sf_field_key, $field_args['labels'] );
-
- } elseif ( $sf_field_key == '_sf_authors' ) {
- $field = $this->get_author( $sf_field_key, $field_args['labels'] );
- } elseif ( $sf_field_key == '_sf_post_types' ) {
- $field = $this->get_post_type( $sf_field_key, $field_args['labels'] );
- } else {
- return;
- }
-
- // calculate delims
- if ( ! is_array( $field_args['delim'] ) ) {
- $delim = $field_args['delim'];
- } else {
- if ( count( $field_args['delim'] ) > 0 ) {
- $delim_arr = $field_args['delim'];
- } else {
- $delim_arr = $defaults['delim'];
- }
-
- if ( count( $delim_arr ) == 1 ) {
- $delim = $delim_arr[0];
- } else {
- if ( $is_choice_field ) {
- $delim = $delim_arr[0];
- } else {
- $delim = $delim_arr[1];
- }
- }
- }
-
- $active_terms = $field['active_terms'];
- $no_active_terms = 0;
- if ( is_array( $active_terms ) ) {
- $no_active_terms = count( $active_terms );
- }
-
- $taxonomy_label = $field['name'];
- $term_string = '';
-
- if ( $field_args['use_smart_lables'] ) {
- if ( $no_active_terms == 1 ) {
- $taxonomy_label = $field['singular_name'];
- }
- }
-
- $field_string = '';
- $term_string = '';
-
- if ( $no_active_terms == 0 ) {
- if ( $field_args['show_all_if_empty'] ) {
- $term_string = $field['all_items_label'];
- }
- } else {
- $term_string = implode( $delim, array_map( array( $this, 'implode_name' ), $active_terms ) );
- }
-
- if ( ( $taxonomy_label != '' ) && ( $term_string != '' ) ) {
- $field_as_string = sprintf( $field_args['str'], $taxonomy_label, $term_string );
- }
-
- return $field_as_string;
- }
-
- public function get_search_term_field() {
- $search_term = '';
-
- if ( isset( $_GET['_sf_s'] ) ) {
-
- if ( is_string( $_GET['_sf_s'] ) ) {
- $search_term = esc_attr( trim( stripslashes( $_GET['_sf_s'] ) ) );
- } else {
- $search_term = '';
- }
- }
-
- return array( 'value', $search_term );
- }
-
- public function get_sort_order_value() {
- $active_values = array();
-
- $sf_get_key = 'sort_order';
- if ( isset( $_GET[ $sf_get_key ] ) ) {
- $sort_order_str = esc_attr( trim( urlencode( $_GET[ $sf_get_key ] ) ) );
-
- // $sort_order = (preg_split("/[,\+ ]/", $sort_order_str)); //explode with 2 delims
- $sort_orders = explode( ',', $sort_order_str );
-
- foreach ( $sort_orders as $sort_order ) {
- array_push( $active_values, $sort_order );
- }
- }
- }
- public function get_sort_order( $labels = array() ) {
- global $wp_query;
- global $wpdb;
-
- $field_obj = array();
-
- $sf_get_key = 'sort_order';
-
- $label_defaults = array(
-
- 'name' => __( 'Sort Order', $this->plugin_slug ),
- 'singular_name' => __( 'Sort Order', $this->plugin_slug ),
- 'all_items_label' => __( 'Sort Order', $this->plugin_slug ),
-
- );
-
- if ( ( is_array( $labels ) ) && ( ! empty( $labels ) ) ) {
- $labels = array_replace( $label_defaults, $labels );
- } else {
- $labels = $label_defaults;
- }
-
- $field_obj['name'] = $labels['name'];
- $field_obj['singular_name'] = $labels['singular_name'];
- $field_obj['all_items_label'] = $labels['all_items_label'];
- $field_obj['type'] = 'post_type';
-
- $field_obj['active_terms'] = array();
-
- if ( isset( $_GET[ $sf_get_key ] ) ) {
- $sort_order_str = esc_attr( trim( urlencode( $_GET[ $sf_get_key ] ) ) );
-
- // $sort_order = (preg_split("/[,\+ ]/", $sort_order_str)); //explode with 2 delims
- $sort_orders = explode( ',', $sort_order_str );
-
- foreach ( $sort_orders as $sort_order ) {
- $sort_order_option = array();
- $sort_order_option['name'] = $sort_order;
- $sort_order_option['value'] = $sort_order;
-
- array_push( $field_obj['active_terms'], $sort_order_option );
- }
- }
-
- return $field_obj;
- }
-
-
- public function get_post_meta( $sf_post_meta_key, $labels = array() ) {
- global $wp_query;
- global $wpdb;
-
- $post_meta_obj = array();
-
- // remove sf prefix fom meta
- $post_meta_key = substr( $sf_post_meta_key, strlen( SF_META_PRE ) );
-
- $post_meta_obj['name'] = isset( $labels['name'] ) ? $labels['name'] : '';
- $post_meta_obj['singular_name'] = isset( $labels['singular_name'] ) ? $labels['singular_name'] : '';
- $post_meta_obj['all_items_label'] = isset( $labels['all_items_label'] ) ? $labels['all_items_label'] : '';
- $post_meta_obj['type'] = 'post_meta';
-
- $post_meta_obj['active_terms'] = array();
-
- $sf_post_meta_key_get = str_replace( array( ' ', '.' ), '_', $sf_post_meta_key ); // replace space with `_` as this is done anyway - spaces are not allowed in GET variable names, and are automatically converted by server/browser to `_`
-
- if ( isset( $_GET[ $sf_post_meta_key_get ] ) ) {
- if ( isset( $this->form_fields[ $sf_post_meta_key ] ) ) {
- $post_meta_field = $this->form_fields[ $sf_post_meta_key ];
-
- if ( $post_meta_field['meta_type'] == 'choice' ) {
- $post_meta_options_list = isset( $post_meta_field['meta_options'] ) ? $post_meta_field['meta_options'] : array();
-
- $getval = '';
- if ( is_string( $_GET[ $sf_post_meta_key_get ] ) ) {
- $getval = stripslashes( $_GET[ $sf_post_meta_key_get ] );
- }
-
- if ( $post_meta_field['operator'] == 'or' ) {
- $ochar = '-,-';
- } else {
- $ochar = '-+-';
- $replacechar = '- -';
-
- $getval = str_replace( $replacechar, $ochar, $getval );
- }
-
- $post_meta_values = explode( $ochar, ( $getval ) );
-
- foreach ( $post_meta_values as $post_meta_value ) {
- $tax_term = array();
-
- $choice_get_option_mode = 'manual';
- $choice_is_acf = 0;
- if ( isset( $post_meta_field['choice_get_option_mode'] ) ) {
- $choice_get_option_mode = $post_meta_field['choice_get_option_mode'];
- $choice_is_acf = $post_meta_field['choice_is_acf'];
- }
-
- if ( $choice_get_option_mode == 'manual' ) {
- $post_meta_option_index = $this->search_meta_option_by_value( $post_meta_value, $post_meta_options_list );
-
- if ( isset( $post_meta_options_list[ $post_meta_option_index ] ) ) {
- $post_meta_option = array();
- $post_meta_option_full = $post_meta_options_list[ $post_meta_option_index ];
-
- $post_meta_option['name'] = $post_meta_option_full['option_label'];
- $post_meta_option['value'] = $post_meta_option_full['option_value'];
- }
- } elseif ( $choice_get_option_mode == 'auto' ) {
- if ( $choice_is_acf == 0 ) {
- $post_meta_option = array();
- $post_meta_option['name'] = $post_meta_value;
- $post_meta_option['value'] = $post_meta_value;
- } elseif ( $choice_is_acf == 1 ) {
- $post_meta_option = array();
- $post_meta_option['name'] = $this->get_acf_option_label( $sf_post_meta_key, $post_meta_key, $post_meta_value );
- $post_meta_option['value'] = $post_meta_value;
-
- }
- }
-
- if ( ! empty( $post_meta_option ) ) {
- $use_auto_count = 0;
- if ( isset( $this->form_settings['enable_auto_count'] ) ) {
- $use_auto_count = $this->form_settings['enable_auto_count'];
- }
-
- if ( $use_auto_count == 1 ) {
- global $searchandfilter;
- $searchform = $searchandfilter->get( $this->sfid );
-
- $post_meta_option['count'] = $searchform->get_count_var( $sf_post_meta_key, $post_meta_option['value'] );
- }
-
- array_push( $post_meta_obj['active_terms'], $post_meta_option );
- }
- }
- } elseif ( $post_meta_field['meta_type'] == 'number' ) {
- $post_meta_values = array();
-
- $post_meta_values = ( preg_split( '/[,\+ ]/', esc_attr( ( $_GET[ $sf_post_meta_key_get ] ) ) ) ); // explode with 2 delims
-
- foreach ( $post_meta_values as $post_meta_value ) {
- $post_meta_option = array();
-
- $post_meta_option['name'] = $post_meta_field['range_value_prefix'] . $post_meta_value . $post_meta_field['range_value_postfix'];
- $post_meta_option['value'] = $post_meta_value;
-
- array_push( $post_meta_obj['active_terms'], $post_meta_option );
- }
- } elseif ( $post_meta_field['meta_type'] == 'date' ) {
-
- $post_meta_values = array();
-
- $post_meta_values = array_map( 'urldecode', explode( '+', esc_attr( urlencode( $_GET[ $sf_post_meta_key_get ] ) ) ) );
-
- foreach ( $post_meta_values as $post_meta_value ) {
- $post_meta_option = array();
- $post_meta_option['name'] = $post_meta_value;
- $post_meta_option['value'] = $post_meta_value;
-
- array_push( $post_meta_obj['active_terms'], $post_meta_option );
- }
- }
- }
- }
-
- return $post_meta_obj;
-
- }
- private function get_acf_option_label( $sf_post_meta_key, $post_meta_key, $post_meta_value ) {
- $option_label = $post_meta_value;
-
- if ( ! function_exists( 'get_field_object' ) ) {
- return $option_label;
- }
-
- $post_id = $this->find_post_id_with_field( $sf_post_meta_key ); // acf needs to have at least 1 post id with the post meta attached in order to lookup the rest of the field
- $field = get_field_object( $post_meta_key, $post_id );
-
- if ( isset( $field['choices'] ) ) {
- $choices = $field['choices'];
-
- if ( isset( $choices[ $post_meta_value ] ) ) {
- $option_label = $choices[ $post_meta_value ];
- }
- }
-
- return $option_label;
-
- }
-
- private function find_post_id_with_field( $field_name ) {
- global $wpdb;
-
- $term_results_table_name = Search_Filter_Helper::get_table_name( 'search_filter_term_results' );
-
- $field_options = $wpdb->get_results(
- $wpdb->prepare(
- "
- SELECT field_value, result_ids
- FROM $term_results_table_name
- WHERE field_name = '%s' LIMIT 0,1
- ",
- $field_name
- )
- );
-
- foreach ( $field_options as $field_option ) {
-
- $post_ids = explode( ',', $field_option->result_ids );
-
- if ( isset( $post_ids[0] ) ) {
- return $post_ids[0];
- }
- }
-
- return 0;
- }
- public function search_meta_option_by_value( $value, $array ) {
- foreach ( $array as $key => $val ) {
- if ( $val['option_value'] === $value ) {
- return $key;
- }
- }
- return null;
- }
- public function get_taxonomy( $sf_taxonomy_key ) {
- global $wp_query;
- global $wpdb;
-
- $taxonomy_obj = array();
-
- // remove sf prefix fom taxonomy
- $taxonomy_key = substr( $sf_taxonomy_key, strlen( SF_TAX_PRE ) );
-
- // first get the taxonomy singular and plural label
- $taxonomy = get_taxonomy( $taxonomy_key );
-
- if ( ! $taxonomy ) {
- return false;
- }
-
- $taxonomy_obj['name'] = $taxonomy->labels->name;
- $taxonomy_obj['singular_name'] = $taxonomy->labels->singular_name;
- $taxonomy_obj['all_items_label'] = $taxonomy->labels->all_items;
- $taxonomy_obj['type'] = 'taxonomy';
-
- $taxonomy_obj['active_terms'] = array();
-
- if ( isset( $_GET[ $sf_taxonomy_key ] ) ) {
- $tax_values_str = esc_attr( trim( $_GET[ $sf_taxonomy_key ] ) );
-
- $tax_term_slugs = ( preg_split( '/[,\+ ]/', $tax_values_str ) ); // explode with 2 delims
-
- foreach ( $tax_term_slugs as $tax_term_slug ) {
- $tax_term_full = get_term_by( 'slug', $tax_term_slug, $taxonomy_key );
-
- if ( $tax_term_full ) {
-
- $tax_term = array();
- $tax_term['id'] = $tax_term_full->term_id;
- $tax_term['name'] = $tax_term_full->name;
- $tax_term['value'] = $tax_term_full->slug;
-
- $inherit_current_post_type_archive = '';
- if ( isset( $this->form_settings['inherit_current_post_type_archive'] ) ) {
- $inherit_current_post_type_archive = $this->form_settings['inherit_current_post_type_archive'];
- }
-
- $use_auto_count = 0;
- if ( isset( $this->form_settings['enable_auto_count'] ) ) {
- $use_auto_count = $this->form_settings['enable_auto_count'];
- }
-
- if ( $use_auto_count == 1 ) {
- global $searchandfilter;
- $searchform = $searchandfilter->get( $this->sfid );
- $tax_term['count'] = $searchform->get_count_var( $sf_taxonomy_key, $tax_term_slug );
- } else {
- $tax_term['count'] = intval( $tax_term_full->count );
- }
-
- array_push( $taxonomy_obj['active_terms'], $tax_term );
- }
- }
- }
- return $taxonomy_obj;
-
- }
-
- public function get_post_type( $sf_field_key, $labels = array() ) {
- global $wp_query;
- global $wpdb;
-
- $field_obj = array();
-
- $label_defaults = array(
-
- 'name' => __( 'Post Types', $this->plugin_slug ),
- 'singular_name' => __( 'Post Type', $this->plugin_slug ),
- 'all_items_label' => __( 'All Post Types', $this->plugin_slug ),
-
- );
-
- if ( ( is_array( $labels ) ) && ( ! empty( $labels ) ) ) {
- $labels = array_replace( $label_defaults, $labels );
- } else {
- $labels = $label_defaults;
- }
-
- $field_obj['name'] = $labels['name'];
- $field_obj['singular_name'] = $labels['singular_name'];
- $field_obj['all_items_label'] = $labels['all_items_label'];
- $field_obj['type'] = 'post_type';
-
- $field_obj['active_terms'] = array();
-
- if ( strpos( $sf_field_key, SF_FPRE ) === 0 ) {
- $sf_get_key = substr( $sf_field_key, strlen( SF_FPRE ) );
- } else {
- $sf_get_key = $sf_field_key;
- }
-
- if ( isset( $_GET[ $sf_get_key ] ) ) {
- $post_type_values_str = esc_attr( trim( $_GET[ $sf_get_key ] ) );
-
- $post_type_slugs = ( preg_split( '/[,\+ ]/', $post_type_values_str ) ); // explode with 2 delims
-
- foreach ( $post_type_slugs as $post_type_slug ) {
- $post_type_object = get_post_type_object( $post_type_slug );
-
- $post_type_term = array();
- $post_type_term['name'] = $post_type_object->labels->name;
- $post_type_term['value'] = $post_type_slug;
-
- array_push( $field_obj['active_terms'], $post_type_term );
-
- }
- }
-
- return $field_obj;
- }
-
- public function get_author( $sf_field_key, $labels = array() ) {
- global $wp_query;
- global $wpdb;
-
- $field_obj = array();
-
- $label_defaults = array(
-
- 'name' => __( 'Authors', $this->plugin_slug ),
- 'singular_name' => __( 'Author', $this->plugin_slug ),
- 'all_items_label' => __( 'All Authors', $this->plugin_slug ),
-
- );
-
- if ( ( is_array( $labels ) ) && ( ! empty( $labels ) ) ) {
- $labels = array_replace( $label_defaults, $labels );
- } else {
- $labels = $label_defaults;
- }
-
- $field_obj['name'] = $labels['name'];
- $field_obj['singular_name'] = $labels['singular_name'];
- $field_obj['all_items_label'] = $labels['all_items_label'];
- $field_obj['type'] = 'post_type';
-
- $field_obj['active_terms'] = array();
-
- if ( strpos( $sf_field_key, SF_FPRE ) === 0 ) {
- $sf_get_key = substr( $sf_field_key, strlen( SF_FPRE ) );
- } else {
- $sf_get_key = $sf_field_key;
- }
-
- if ( isset( $_GET[ $sf_get_key ] ) ) {
-
- $field_values_str = esc_attr( trim( $_GET[ $sf_get_key ] ) );
-
- $field_vals = ( preg_split( '/[,\+ ]/', $field_values_str ) ); // explode with 2 delims
-
- foreach ( $field_vals as $field_val ) {
- $field_object = get_user_by( 'slug', esc_attr( $field_val ) );
-
- $field_term = array();
- $field_term['id'] = $field_object->ID;
- // $field_term["name"] = $field_object->user_nicename;
- $field_term['name'] = $field_object->display_name;
- $field_term['value'] = $field_object->user_nicename;
-
- array_push( $field_obj['active_terms'], $field_term );
-
- }
- }
-
- return $field_obj;
- }
-
- public function get_array() {
- $this->set_fields_array();
-
- return $this->query_array;
- }
- public function get_query_str() {
- if ( $this->query_str === -1 ) {
-
- $this->query_str = '';
-
- // $_get is best way to get the actual get value, we want to preserve things like spaces, plus signs etc between the URLs
- $query_parts = array();
- $exclude_list = array( 'sf_data', 'sf_action', 'sfid', 'page_id' );
-
- foreach ( $_GET as $get_key => $get_val ) {
-
- if ( ( gettype( $get_key ) === 'string' ) && ( gettype( $get_val ) === 'string' ) ) {
- if ( ! in_array( $get_key, $exclude_list ) ) {
- $query_param = $get_key . '=' . $get_val;
- array_push( $query_parts, $query_param );
- }
- }
- }
-
- // now we have the $_get values, but there could still be some values set in the form not from $_GET url, so deal with them here
- $this->set_fields_array();
-
- foreach ( $this->field_values as $field_name => $field_values ) {
- if ( ! isset( $_GET[ $field_name ] ) ) {
- $query_param = $field_name . '=' . implode( '|', $field_values );
- array_push( $query_parts, $query_param );
- }
- }
-
- $this->query_str = implode( '&', $query_parts );
- }
-
- return $this->query_str;
-
- }
-
- public function get_search_term() {
- $search_term = '';
-
- if ( isset( $_GET['_sf_s'] ) ) {
-
- if ( is_string( $_GET['_sf_s'] ) ) {
- $search_term = esc_attr( trim( stripslashes( $_GET['_sf_s'] ) ) );
- }
- }
-
- return ( $search_term );
-
- }
-
- public function is_filtered( $exclude_items = array() ) {
- $filtered_array = $this->get_array();
-
- foreach ( $exclude_items as $exclude_item ) {
-
- if ( isset( $filtered_array[ $exclude_item ] ) ) {
- unset( $filtered_array[ $exclude_item ] );
- }
- }
-
- if ( empty( $filtered_array ) ) {
- return false;
- } else {
- return true;
- }
-
- }
-
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-author-object-walker.php b/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-author-object-walker.php
deleted file mode 100644
index 6312b221..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-author-object-walker.php
+++ /dev/null
@@ -1,157 +0,0 @@
-options = array();
- $this->options_obj = $options_obj;
- }
-
- function wp_authors( $args = '' ) {
-
- global $wpdb;
-
- $defaults = array(
- 'orderby' => 'name',
- 'order' => 'ASC',
- 'number' => '',
- 'optioncount' => false,
- 'exclude_admin' => true,
- 'show_fullname' => false,
- 'hide_empty' => true,
- 'feed' => '',
- 'feed_image' => '',
- 'feed_type' => '',
- 'echo' => true,
- 'style' => 'list',
- 'html' => true,
- 'exclude' => '',
- 'include' => '',
- 'post_types' => array( 'post' ),
- 'combo_box' => '',
-
- );
-
- $args = wp_parse_args( $args, $defaults );
- extract( $args, EXTR_SKIP );
-
- $return = '';
-
- $query_args = wp_array_slice_assoc( $args, array( 'orderby', 'order', 'number', 'exclude', 'include' ) );
- $query_args['fields'] = 'ids';
- $authors = get_users( $query_args );
-
- // build where conditions for post types...
-
- $where_conditions = array();
- $post_type_count = count( $post_types );
- $where_query = '';
- if ( $post_type_count > 0 ) {
- foreach ( $post_types as $post_type ) {
- if ( post_type_exists( $post_type ) ) {
- $post_type = esc_attr( $post_type );
- $where_conditions[] = $wpdb->prepare(
- "(post_type = '%s' AND " . get_private_posts_cap_sql( $post_type ) . ')',
- $post_type
- );
- }
- }
- $where_query = implode( ' OR ', $where_conditions );
- }
-
- $author_count = array();
- $author_count_query = $wpdb->get_results( "SELECT DISTINCT post_author, COUNT(ID) AS count FROM $wpdb->posts WHERE $where_query GROUP BY post_author" );
-
- foreach ( (array) $author_count_query as $row ) {
- $author_count[ $row->post_author ] = $row->count;
- }
-
- $show_option_all_sf = $args['show_option_all_sf'];
- $show_default_option_sf = $args['show_default_option_sf'];
-
- if ( ( isset( $show_option_all_sf ) ) && ( $show_default_option_sf == true ) ) {
- $default_option = new stdClass();
- $default_option->label = $show_option_all_sf;
- $default_option->attributes = array(
- 'class' => SF_CLASS_PRE . 'level-0 ' . SF_ITEM_CLASS_PRE . '0',
- );
- $default_option->value = '';
- $default_option->count = 0;
- array_push( $this->options, $default_option );
- }
-
- foreach ( $authors as $author_id ) {
-
- $author = get_userdata( $author_id );
-
- // check if user role is administrator or not
- $is_user_role_admin = in_array( 'administrator', $author->roles );
-
- if ( $exclude_admin && $is_user_role_admin ) {
- continue;
- }
-
- $option_count = isset( $author_count[ $author->ID ] ) ? $author_count[ $author->ID ] : 0;
-
- if ( ! $option_count && $hide_empty ) {
- continue;
- }
-
- $link = '';
-
- if ( $show_fullname && $author->first_name && $author->last_name ) {
- $name = "$author->first_name $author->last_name";
- } else {
- $name = $author->display_name;
- }
-
- /*
- if ( !$html ) {
- $return .= $name . ', ';
-
- continue; // No need to go further to process HTML.
- }*/
-
- if ( $optioncount ) {
- if ( $show_count_format_sf == 'inline' ) {
- $name .= ' (' . number_format_i18n( $option_count ) . ')';
- } elseif ( $show_count_format_sf == 'html' ) {
- $name .= '(' . number_format_i18n( $option_count ) . ') ';
- }
- }
-
- $option = new stdClass();
- $option->attributes = array(
- 'class' => SF_CLASS_PRE . 'level-0',
- );
-
- $option->value = $author->user_nicename;
- // $option->selected_value = $author->ID; //we want to match defaults based on ID
- $option->label = $name;
- $option->count = $option_count;
-
- array_push( $this->options, $option );
- }
-
- $this->options_obj->set( $this->options );
- }
-}
-
-
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-cache.php b/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-cache.php
deleted file mode 100644
index cd855047..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-cache.php
+++ /dev/null
@@ -1,1930 +0,0 @@
-sfid == 0 ) {
-
- $this->sfid = $sfid;
-
- $this->cache_table_name = Search_Filter_Helper::get_table_name( 'search_filter_cache' );
- $this->term_results_table_name = Search_Filter_Helper::get_table_name( 'search_filter_term_results' );
-
- $this->form_fields = $fields;
- $this->form_settings = $settings;
-
- $this->filter_operator = 'and';
- if ( isset( $this->form_settings['field_relation'] ) ) {
- if ( $this->form_settings['field_relation'] != '' ) {
- $this->filter_operator = $this->form_settings['field_relation'];
- }
- }
-
- $this->initial_filters = $filters;
- }
- }
-
-
- // the main function, setup query from the cache based on filters, then allow users to hook in to modify query, then init the count variables - eg "term (22)"
- function init_all_filter_terms() {
- $this->filter_query_args( array(), true );
-
- }
- function filter_query_args( $query_args, $all_terms = false ) {
- global $wpdb;
-
- $this->use_transients = Search_Filter_Helper::get_option( 'cache_use_transients' );
-
- if ( isset( $this->form_settings['enable_auto_count'] ) ) {
- if ( $this->form_settings['enable_auto_count'] == 1 ) {
- if ( $all_terms == true ) {
- $this->load_only_active_filters = false;
- } else {
- $this->load_only_active_filters = true;
- }
- }
- }
-
- // Search_Filter_Helper::start_log("Total time to complete query prep");
- // Search_Filter_Helper::start_log("----- Total time");
-
- // Search_Filter_Helper::start_log("init_filters");
- $this->init_filters( $this->initial_filters ); // filters are taxonomies or post meta - they are stored in the caching DB for fast calls
- // Search_Filter_Helper::finish_log("init_filters");
- $this->init_hidden_filters();
-
- // Search_Filter_Helper::start_log("init_filter_terms");
- $this->init_filter_terms( $this->initial_filters );
- // Search_Filter_Helper::finish_log("init_filter_terms");
-
- // set all the results for each term/value
- // Search_Filter_Helper::start_log("set_filter_term_ids_cached");
- $this->set_filter_term_ids_cached(); // grabs the IDs of teh results in each term for each filter
- // Search_Filter_Helper::finish_log("set_filter_term_ids_cached");
-
- // Search_Filter_Helper::start_log("set_filter_ids_cached");
- $this->set_filter_ids_cached(); // combines the IDs of each term for each filter - taking into account AND/OR operator
- // Search_Filter_Helper::finish_log("set_filter_ids_cached");
-
- // Search_Filter_Helper::start_log("fetch_all_cached_post_ids");
- $this->fetch_all_cached_post_ids(); // get all possible IDs from the cache
- // Search_Filter_Helper::finish_log("fetch_all_cached_post_ids", true, true);
-
- // Search_Filter_Helper::start_log("apply_cached_filters");
- $this->apply_cached_filters(); // apply regular WP_Query filters to the post IDs - now we have setup the query_args for the actual search query
- // Search_Filter_Helper::finish_log("apply_cached_filters");
-
- // Search_Filter_Helper::finish_log("Total time to complete query prep");
-
- // Search_Filter_Helper::start_log("Total time to complete count query");
- if ( isset( $this->form_settings['enable_auto_count'] ) ) {
- if ( ( $this->form_settings['enable_auto_count'] == 1 ) && ( $this->load_only_active_filters === false ) ) {
- $this->init_count_vars();
- }
- }
- // Search_Filter_Helper::finish_log("Total time to complete count query");
- // Search_Filter_Helper::finish_log("----- Total time", true, true);
- // echo "Loop time: ".round($this->const_time, 5)." ";
-
- return $this->query_args;
- }
-
-
- public function init_hidden_filters() {
- global $searchandfilter;
- $display_results_as = $searchandfilter->get( $this->sfid )->settings( 'display_results_as' );
- $enable_taxonomy_archives = $searchandfilter->get( $this->sfid )->settings( 'enable_taxonomy_archives' );
-
- if ( ! $searchandfilter->get( $this->sfid )->settings( 'post_types' ) ) {
- return;
- }
-
- $post_types_arr = $searchandfilter->get( $this->sfid )->settings( 'post_types' );
- $post_types = array();
- if ( is_array( $post_types_arr ) ) {
- $post_types = array_keys( $post_types_arr );
- }
-
- if ( ( ( $display_results_as == 'post_type_archive' ) || ( $display_results_as == 'custom_woocommerce_store' ) ) && ( $enable_taxonomy_archives == 1 ) ) {
- if ( ! isset( $post_types[0] ) ) {
- return;
- }
-
- $post_type = $post_types[0];
-
- $single = true;
- if ( $display_results_as == 'custom_woocommerce_store' ) {
- $single = false;
- }
-
- if ( Search_Filter_Wp_Data::is_taxonomy_archive_of_post_type( $post_type, $single ) ) {
- $term = $searchandfilter->get_queried_object();
- $taxonomy_name = $term->taxonomy;
-
- $field_name = '_sft_' . $taxonomy_name;
- $field_value = $term->slug;
-
- if ( ! in_array( $field_name, $this->initial_filters ) ) {
- array_push( $this->initial_filters, $field_name );
- }
- // if the field is visible set it
- $_GET[ $field_name ] = $field_value;
-
- if ( ! isset( $this->filters[ $field_name ] ) ) {
- $this->filters[ $field_name ] = array();
-
- $this->filters[ $field_name ]['source'] = 'taxonomy';
- $this->filters[ $field_name ]['taxonomy_name'] = $taxonomy_name;
- $this->filters[ $field_name ]['type'] = 'choice';
-
- $this->filters[ $field_name ]['cached_result_ids'] = array(); // these are all the result IDs for the whole field/filter (combining all IDs from terms)
- $this->filters[ $field_name ]['wp_query_result_ids'] = array(); // these are all the result IDs for the whole field/filter (combining all IDs from terms)
- $this->filters[ $field_name ]['wp_query_result_ids_unfiltered'] = array();
- $this->filters[ $field_name ]['active_values'] = array(); // this is what has been searched (ie $_GET from the url)
- $this->filters[ $field_name ]['term_operator'] = 'and';
- $this->filters[ $field_name ]['terms'] = array(); // array containing all terms for current filter - with result IDs etc
-
- $this->filters[ $field_name ]['active_values'] = array( $field_value );
- } else {
- if ( ! in_array( $field_value, $this->filters[ $field_name ]['active_values'] ) ) {
- array_push( $this->filters[ $field_name ]['active_values'], $field_value );
- }
- }
-
- $this->filters[ $field_name ]['is_active'] = true;
- }
- }
- }
-
- public function init_filters( $filters ) {
- foreach ( $filters as $filter_name ) {
-
- $filter_name_get = str_replace( array( ' ', '.' ), '_', $filter_name ); // replace space with `_` as this is done anyway - spaces are not allowed in GET variable names, and are automatically converted by server/browser to `_`
-
- if ( ! isset( $this->filters[ $filter_name ] ) ) {
-
- $this->filters[ $filter_name ] = array();
-
- $taxonomy_types = array( 'tag', 'category', 'taxonomy' );
-
- $this->filters[ $filter_name ]['type'] = 'choice';
-
- if ( in_array( $this->form_fields[ $filter_name ]['type'], $taxonomy_types ) ) {
- $this->filters[ $filter_name ]['source'] = 'taxonomy';
-
- if ( strpos( $filter_name, SF_TAX_PRE ) === 0 ) {
- $taxonomy_name = substr( $filter_name, strlen( SF_TAX_PRE ) );
- $this->filters[ $filter_name ]['taxonomy_name'] = $taxonomy_name;
- $this->filters[ $filter_name ]['type'] = 'choice';
- }
- } elseif ( $this->form_fields[ $filter_name ]['type'] == 'post_meta' ) {
- $this->filters[ $filter_name ]['source'] = 'post_meta';
- $this->filters[ $filter_name ]['type'] = $this->form_fields[ $filter_name ]['meta_type'];
- }
-
- $this->filters[ $filter_name ]['cached_result_ids'] = array(); // these are all the result IDs for the whole field/filter (combining all IDs from terms)
- $this->filters[ $filter_name ]['wp_query_result_ids'] = array(); // these are all the result IDs for the whole field/filter (combining all IDs from terms)
- $this->filters[ $filter_name ]['wp_query_result_ids_unfiltered'] = array();
- $this->filters[ $filter_name ]['active_values'] = array(); // this is what has been searched (ie $_GET from the url)
- $this->filters[ $filter_name ]['is_active'] = false;
- $this->filters[ $filter_name ]['term_operator'] = array();
- $this->filters[ $filter_name ]['terms'] = array(); // array containing all terms for current filter - with result IDs etc
-
- // set is_range
- $range = false;
- if ( $this->filters[ $filter_name ]['type'] == 'date' ) {
- if ( $this->form_fields[ $filter_name ]['date_input_type'] == 'daterange' ) {
- $range = true;
-
- // $_filter_name = SF_META_PRE.$this->form_fields[$filter_name]['compare_mode'];
- $compare_mode = 'userrange';
-
- if ( isset( $this->form_fields[ $filter_name ]['date_compare_mode'] ) ) {
- $compare_mode = $this->form_fields[ $filter_name ]['date_compare_mode'];
- }
-
- $this->filters[ $filter_name ]['compare_mode'] = $compare_mode;
- }
- } elseif ( $this->filters[ $filter_name ]['type'] == 'number' ) {
- $range = true;
-
- $this->filters[ $filter_name ]['is_decimal'] = 0;
- if ( isset( $this->form_fields[ $filter_name ]['number_is_decimal'] ) ) {
-
- if ( $this->form_fields[ $filter_name ]['number_is_decimal'] == 1 ) {
- $decimal_places = 2;
-
- if ( isset( $this->form_fields[ $filter_name ]['number_decimal_places'] ) ) {
- $decimal_places = $this->form_fields[ $filter_name ]['number_decimal_places'];
- }
-
- $this->filters[ $filter_name ]['decimal_places'] = $decimal_places;
- }
- }
- $compare_mode = 'userrange';
-
- if ( isset( $this->form_fields[ $filter_name ]['number_compare_mode'] ) ) {
- $compare_mode = $this->form_fields[ $filter_name ]['number_compare_mode'];
- }
-
- $this->filters[ $filter_name ]['compare_mode'] = $compare_mode;
- }
-
- $this->filters[ $filter_name ]['is_range'] = $range;
-
- // set the active terms for each filter
- if ( $this->filters[ $filter_name ]['type'] == 'choice' ) {
- $this->filters[ $filter_name ]['term_operator'] = $this->form_fields[ $filter_name ]['operator'];
-
- if ( $this->filters[ $filter_name ]['source'] == 'taxonomy' ) {
- if ( ( $this->form_fields[ $filter_name ]['input_type'] == 'select' ) || ( $this->form_fields[ $filter_name ]['input_type'] == 'radio' ) || ( $this->form_fields[ $filter_name ]['input_type'] == 'list' ) ) {
- $this->filters[ $filter_name ]['term_operator'] = 'or';
- }
- } elseif ( $this->filters[ $filter_name ]['source'] == 'post_meta' ) {
- if ( ( $this->form_fields[ $filter_name ]['choice_input_type'] == 'select' ) || ( $this->form_fields[ $filter_name ]['choice_input_type'] == 'radio' ) || ( $this->form_fields[ $filter_name ]['input_type'] == 'list' ) ) {
- $this->filters[ $filter_name ]['term_operator'] = 'or';
- }
- }
-
- if ( isset( $_GET[ $filter_name_get ] ) ) {
- // get the value and parse it - might need to parse different for meta
- // $filter_value = sanitize_text_field($_GET[$filter_name_get]);
- $filter_value = $_GET[ $filter_name_get ];
- $this->filters[ $filter_name ]['active_values'] = $this->parse_get_value( $filter_value, $filter_name, $this->filters[ $filter_name ]['source'] );
- $this->filters[ $filter_name ]['is_active'] = true;
-
- } else {
- // if its not set in the URL try to detect from the current page if the setting is enabled
- // filter_query_inherited_defaults
- if ( $this->filters[ $filter_name ]['source'] == 'taxonomy' ) {
- if ( isset( $this->form_settings['inherit_current_taxonomy_archive'] ) ) {
- if ( $this->form_settings['inherit_current_taxonomy_archive'] == '1' ) {
- if ( is_tax() || is_category() || is_tag() ) {
- global $searchandfilter;
- $term = $searchandfilter->get_queried_object();
-
- if ( $filter_name == '_sft_' . $term->taxonomy ) {
- // we should try to inherit the taxonomy values from this archive page
- $this->filters[ $filter_name ]['active_values'] = array( utf8_uri_encode( $term->slug ) );
- $this->filters[ $filter_name ]['is_active'] = true;
- }
- }
- }
- }
- }
- }
- } elseif ( $this->filters[ $filter_name ]['is_range'] == true ) { /* daterange and number range */
- $this->filters[ $filter_name ]['term_operator'] = 'and'; // when using a number operator always use AND because its a combination of the two result sets
-
- if ( isset( $_GET[ $filter_name_get ] ) ) {
- // get the value and parse it - might need to parse different for meta
- $filter_value = sanitize_text_field( $_GET[ $filter_name_get ] );
-
- if ( $this->filters[ $filter_name ]['type'] == 'date' ) {// then we need to convert the _GET to the correct date format
- $this->filters[ $filter_name ]['active_values'] = $this->parse_get_value( $filter_value, $filter_name, $this->filters[ $filter_name ]['source'], 'date' );
- } else {
- $this->filters[ $filter_name ]['active_values'] = $this->parse_get_value( $filter_value, $filter_name, $this->filters[ $filter_name ]['source'], 'simple' );
- }
-
- $this->filters[ $filter_name ]['is_active'] = true;
-
- }
- } else {
- if ( isset( $_GET[ $filter_name_get ] ) ) {
- // get the value and parse it - might need to parse different for meta
- $filter_value = sanitize_text_field( $_GET[ $filter_name_get ] );
-
- if ( $this->filters[ $filter_name ]['type'] == 'date' ) {
- $this->filters[ $filter_name ]['term_operator'] = 'or';
- $this->filters[ $filter_name ]['is_active'] = true;
- $this->filters[ $filter_name ]['active_values'] = $this->parse_get_value( $filter_value, $filter_name, $this->filters[ $filter_name ]['source'], 'date' );
-
- }
- }
- }
- }
- }
- }
-
-
- function init_filter_terms( $filters ) {
- foreach ( $filters as $filter_name ) {
-
- $filter_terms_init = false;
-
- if ( isset( $this->filters[ $filter_name ]['filter_terms'] ) ) {
- $filter_terms_init = true;
- }
-
- if ( ! $filter_terms_init ) {
-
- /* TODO - this could be used to find min / max - but all searches are performed on active_terms */
- if ( $this->filters[ $filter_name ]['type'] == 'choice' ) {
-
- $filter_terms = array();
- $filter_terms_trans = array();
- $cache_key = 'filter_terms_' . $this->sfid . '_' . $filter_name;
-
- // in the transient we only store an array of values, to keep the size of it small, so we must re-init the objects using the terms
- if ( $this->use_transients == 1 ) {
-
- $filter_terms_trans = Search_Filter_Wp_Cache::get_transient( $cache_key );
- if ( ! empty( $filter_terms_trans ) ) {
- foreach ( $filter_terms_trans as $filter_term_value ) {
-
- $filter_term = new stdClass();
- $filter_term->field_value = $filter_term_value;
- array_push( $filter_terms, $filter_term );
- }
- }
- }
-
- if ( ( empty( $filter_terms ) && ( empty( $filter_terms_trans ) ) ) ) {
- if ( $this->filters[ $filter_name ]['source'] == 'taxonomy' ) {
- $filter_terms = $this->get_filter_terms_all( $filter_name, $this->filters[ $filter_name ]['source'] );
- } else { // them meta
- $filter_terms = $this->get_filter_terms_all( $filter_name, $this->filters[ $filter_name ]['source'] );
- // $filter_terms = $this->get_filter_terms_meta($filter_name, $this->form_fields[$filter_name]);
- }
-
- if ( $this->use_transients == 1 ) {
- $terms_arr = array();
- foreach ( $filter_terms as $filter_term ) {
- array_push( $terms_arr, $filter_term->field_value );
- }
- Search_Filter_Wp_Cache::set_transient( $cache_key, $terms_arr );
- }
- }
- } elseif ( $this->filters[ $filter_name ]['is_range'] == true ) {
- $filter_terms = array();
- $filter_terms[0] = new stdClass();
- $filter_terms[0]->field_value = 'value';
- // $filter_terms[1] = new stdClass();
- // $filter_terms[1]->field_value = "max";
- } else {
- $filter_terms = array();
-
- if ( $this->filters[ $filter_name ]['type'] == 'date' ) {
- $filter_terms[0] = new stdClass();
- $filter_terms[0]->field_value = 'value';
- }
- }
- // }
- $this->filters[ $filter_name ]['filter_terms'] = $filter_terms;
- }
-
- $filter_terms = $this->filters[ $filter_name ]['filter_terms'];
-
- if ( count( $filter_terms ) > 0 ) {
-
- // if the taxonomy is hierarchical, and the user has set it as so, and the've set the option "include_children"
- // then get all the terms for the taxonomy, because we'll need them for figuring out child/parent related
- // stuff in the query
- $hierarchical_override = false;
- if ( $this->filters[ $filter_name ]['source'] == 'taxonomy' ) {
- if ( is_taxonomy_hierarchical( $this->filters[ $filter_name ]['taxonomy_name'] ) ) {
- $hierarchical = 0;
- $include_children = 0;
- if ( ( isset( $this->form_fields[ $filter_name ]['hierarchical'] ) ) && ( isset( $this->form_fields[ $filter_name ]['include_children'] ) ) ) {
- $hierarchical = $this->form_fields[ $filter_name ]['hierarchical'];
- $include_children = $this->form_fields[ $filter_name ]['include_children'];
- }
-
- if ( ( $hierarchical == 1 ) && ( $include_children == 1 ) ) {
- $hierarchical_override = true;
- }
- }
- }
-
- // init the terms on local variable
- if ( ( ( $this->load_only_active_filters === false ) && ( $this->filters[ $filter_name ]['source'] == 'taxonomy' ) ) || ( $hierarchical_override == true ) ) {
- Search_Filter_Wp_Data::get_taxonomy_terms( $this->filters[ $filter_name ]['taxonomy_name'] );
- }
-
- foreach ( $filter_terms as $filter_term ) {
- $this->init_filter_term( $filter_term, $filter_name );
-
- }
- }
- }
- }
-
- private function init_filter_term( $filter_term, $filter_name ) {
- $add_term = false;
-
- // if term is not already init
- // if(!isset($this->filters[$filter_name]['terms'])) {
-
- if ( $this->filters[ $filter_name ]['source'] == 'taxonomy' ) {// then we will have IDs - so we need to convert back to slug
-
- if ( $this->load_only_active_filters === true ) {
-
- $active_value_ids = array();
- foreach ( $this->filters[ $filter_name ]['active_values'] as $active_value ) {
-
- $term = Search_Filter_Wp_Data::get_taxonomy_term_by( 'slug', $active_value, $this->filters[ $filter_name ]['taxonomy_name'] );
-
- if ( ( ! is_wp_error( $term ) ) && ( ! empty( $term ) ) ) {
- $term_id = $term->term_id;
- array_push( $active_value_ids, $term_id );
- }
- }
-
- if ( in_array( $filter_term->field_value, $active_value_ids ) ) {
- Search_Filter_Wp_Data::get_taxonomy_term_by( 'id', $filter_term->field_value, $this->filters[ $filter_name ]['taxonomy_name'] );
- }
- }
-
- if ( isset( Search_Filter_Wp_Data::$wp_tax_terms[ $this->filters[ $filter_name ]['taxonomy_name'] ] ) ) {
- $wp_tax_terms_array = Search_Filter_Wp_Data::$wp_tax_terms[ $this->filters[ $filter_name ]['taxonomy_name'] ];
- if ( isset( $wp_tax_terms_array['id'][ $filter_term->field_value ] ) ) {// make sure term exists
-
- $term = $wp_tax_terms_array['id'][ $filter_term->field_value ];
- $term_name = $term->slug;
-
- if ( empty( $this->filters[ $filter_name ]['terms'][ $term_name ] ) ) {
-
- $this->filters[ $filter_name ]['terms'][ $term_name ] = array();
- $this->filters[ $filter_name ]['terms'][ $term_name ]['term_id'] = $term->term_id;
- $add_term = true;
- }
- }
- }
- } else {
- $add_term = true;
- $term_name = $filter_term->field_value;
- if ( empty( $this->filters[ $filter_name ]['terms'][ $term_name ] ) ) {
- $this->filters[ $filter_name ]['terms'][ $term_name ] = array();
- }
- }
-
- // last check, if we do not display the search form, we only need to initialise those filter which are active
- /*
- if ($this->load_only_active_filters === true){
- if ($add_term) {
- if (!in_array($filter_term->field_value, $this->filters[$filter_name]['active_values'])) {
- $add_term = false;
- }
- }
- }*/
-
- // if (($add_term) && (in_array($filter_term->field_value, $this->filters[$filter_name]['active_values']))) {
- if ( $add_term ) {
-
- // all the IDs used for setting up queries & counts
- if ( empty( $this->filters[ $filter_name ]['terms'][ $term_name ] ) ) {
- $this->filters[ $filter_name ]['terms'][ $term_name ]['cache_result_ids'] = array();
- $this->filters[ $filter_name ]['terms'][ $term_name ]['wp_query_results_ids'] = array();
- $this->filters[ $filter_name ]['terms'][ $term_name ]['count'] = 0;
- }
- }
- }
- /*
- function preg_replace_callback_uppercaser($match) {
- return strtoupper($match[0]);
- }
- $string = preg_replace_callback('/%[a-zA-Z0-9]{2}/', 'preg_replace_callback_uppercaser', $string);
- */
-
- /* get array of values from a $_GET value - usually just an explode */
- function parse_get_value( $value, $filter_name, $source, $format = '' ) {
- $value = stripslashes( $value );
- $active_terms = array();
- if ( ( $source == 'taxonomy' ) || ( $format == 'simple' ) || ( $format == 'date' ) ) {
-
- if ( strpos( esc_attr( $value ), ',' ) !== false ) {
- $operator = 'OR';
- $ochar = ',';
- $active_terms = explode( $ochar, esc_attr( ( $value ) ) );
- } else {
- $operator = 'AND';
- $ochar = '+';
-
- $value = str_replace( ' ', '+', $value );
- // $active_terms = explode($ochar, esc_attr(urlencode($value)));
- $active_terms = explode( $ochar, esc_attr( $value ) );
-
- }
-
- $active_terms = array_map( 'urldecode', ( $active_terms ) );
- $active_terms = array_map( 'utf8_uri_encode', ( $active_terms ) ); // use WordPress' method for encoding so it will always match what is stored in teh actual terms table
-
- $active_terms_count = count( $active_terms );
-
- if ( $format == 'date' ) {// convert $active_terms
-
- $date_output_format = 'm/d/Y';
- $date_input_format = 'timestamp';
-
- if ( isset( $this->form_fields[ $filter_name ]['date_output_format'] ) ) {
- $date_output_format = $this->form_fields[ $filter_name ]['date_output_format'];
- }
- if ( isset( $this->form_fields[ $filter_name ]['date_input_format'] ) ) {
- $date_input_format = $this->form_fields[ $filter_name ]['date_input_format'];
- }
-
- if ( $active_terms_count == 2 ) {
- $active_terms[0] = $this->convert_date_to( $date_input_format, $active_terms[0], $date_output_format );
- $active_terms[1] = $this->convert_date_to( $date_input_format, $active_terms[1], $date_output_format );
- } else {
- $active_terms[0] = $this->convert_date_to( $date_input_format, $active_terms[0], $date_output_format );
- }
- }
- } elseif ( $source == 'post_meta' ) {
-
- if ( strpos( ( $value ), '-,-' ) !== false ) {
- $operator = 'OR';
- $ochar = '-,-';
- } else {
- $operator = 'AND';
- $ochar = '-+-';
- $replacechar = '- -';
- $value = str_replace( $replacechar, $ochar, $value );
- }
-
- $active_terms = explode( $ochar, ( $value ) );
- }
-
- return $active_terms;
- }
-
- function convert_date_to( $type, $date, $date_output_format ) {
- if ( ! empty( $date ) ) {
- if ( $date_output_format == 'm/d/Y' ) {
- $month = substr( $date, 0, 2 );
- $day = substr( $date, 2, 2 );
- $year = substr( $date, 4, 4 );
- } elseif ( $date_output_format == 'd/m/Y' ) {
- $month = substr( $date, 2, 2 );
- $day = substr( $date, 0, 2 );
- $year = substr( $date, 4, 4 );
- } elseif ( $date_output_format == 'Y/m/d' ) {
- $month = substr( $date, 4, 2 );
- $day = substr( $date, 6, 2 );
- $year = substr( $date, 0, 4 );
- }
-
- if ( $type == 'timestamp' ) {
- $date = strtotime( $year . '-' . $month . '-' . $day );
- } elseif ( $type == 'yyyymmdd' ) {
- $date = $year . $month . $day;
- } elseif ( $type == 'yyyy-mm-dd' ) {
- $date = $year . '-' . $month . '-' . $day;
- }
- }
- return $date;
- }
-
-
-
- // grabs all the IDS in teh cached table for each individual term
- public function set_filter_term_ids_cached() {
- global $wpdb;
- $filter_names = array();
- $filter_names = array_unique( array_keys( $this->filters ) );
- $filter_query_arr = array();
-
- if ( has_filter( 'search_filter_cache_filter_names' ) ) {
- $filter_names = apply_filters( 'search_filter_cache_filter_names', $filter_names, $this->sfid );
- }
-
- foreach ( $filter_names as $filter_name ) {
-
- array_push(
- $filter_query_arr,
- $wpdb->prepare(
- "field_name = '%s'",
- $filter_name
- )
- );
- }
-
- $filter_query_sql = implode( ' OR ', $filter_query_arr );
-
- if ( empty( $filter_query_sql ) ) {
- return;
- }
-
- $already_init = false;
-
- $this->term_results_table_name = Search_Filter_Helper::get_table_name( 'search_filter_term_results' );
-
- if ( empty( $this->field_terms_results ) ) {
-
- /*
- $cache_key = 'cached_field_terms_results_'.$this->sfid;
- $cached_field_terms_results = array();
-
- if($this->use_transients==1){
- $cached_field_terms_results = Search_Filter_Wp_Cache::get_transient( $cache_key );
- }
-
- if((!empty($cached_field_terms_results))&&($this->use_transients==1)){
- $this->field_terms_results = $cached_field_terms_results;
- }
- else {
- // too big for transient on larger sites atm, plus, the query is quite basic already */
- $this->field_terms_results = $wpdb->get_results(
- "
- SELECT field_name, field_value, result_ids
- FROM $this->term_results_table_name
- WHERE $filter_query_sql
- "
- );
- /*
- if($this->use_transients==1) {
- Search_Filter_Wp_Cache::set_transient( $cache_key, $this->field_terms_results);
- }
- }*/
- } else {
- $already_init = true;
- }
-
- $cache_term_results = array();
-
- foreach ( $this->field_terms_results as $term_result ) {
- $setup_term = true;
-
- if ( ! isset( $cache_term_results[ $term_result->field_name ] ) ) {
- $cache_term_results[ $term_result->field_name ] = array();
- }
-
- $field_value = $term_result->field_value;
-
- if ( $this->is_taxonomy_key( $term_result->field_name ) ) {
-
- $setup_term = false; // couldn't fine the term, so don't try to add it
-
- // only setup this term if it hasn't been already v2.3
- if ( empty( $this->filters[ $term_result->field_name ]['terms'][ $field_value ]['cache_result_ids'] ) ) {
-
- $taxonomy_name = substr( $term_result->field_name, strlen( SF_TAX_PRE ) );
-
- if ( isset( Search_Filter_Wp_Data::$wp_tax_terms[ $taxonomy_name ] ) ) {
-
- $wp_tax_terms_array = Search_Filter_Wp_Data::$wp_tax_terms[ $taxonomy_name ];
-
- if ( isset( $wp_tax_terms_array['id'][ $term_result->field_value ] ) ) {// make sure term exists
-
- $term = $wp_tax_terms_array['id'][ $term_result->field_value ];
- $field_value = $term->slug;
- $setup_term = true; // couldn't fine the term, so don't try to add it
- }
- }
-
- if ( ( Search_Filter_Helper::has_wpml() ) && ( ! empty( $term ) ) ) {
- // do not even add the term to the list if its in the wrong language
- if ( $term_result->field_value != $term->term_id ) {
- // this means WPML changed teh ID to current language ID, which means we just want to skip over this completely
- $setup_term = false;
- }
- }
- }
- } elseif ( $this->is_meta_key( $term_result->field_name ) ) {
- // true
- }
-
- if ( $setup_term ) {
-
- $cache_term_results[ $term_result->field_name ][ $field_value ] = explode( ',', $term_result->result_ids );
-
- // this captures all the post IDs S&F has found from its tables, can add overhead
- $register_result_ids = false;
- if ( has_filter( 'sf_query_cache_register_all_ids' ) ) {
- // check to see if this should be enabled
- $register_result_ids = apply_filters( 'sf_query_cache_register_all_ids', $register_result_ids, $this->sfid );
- }
- if ( $register_result_ids == true ) {
- $this->register_result_ids( $cache_term_results[ $term_result->field_name ][ $field_value ] );
- }
- }
- }
-
- // if(!$already_init) {
- foreach ( $this->filters as $filter_name => $filter ) {
-
- $field_terms = $this->filters[ $filter_name ]['terms'];
-
- if ( $filter['type'] == 'choice' ) {
-
- foreach ( $field_terms as $term_name => $tval ) {
- $cached_term_results = array();
-
- if ( isset( $cache_term_results[ $filter_name ] ) ) {
- if ( isset( $cache_term_results[ $filter_name ][ $term_name ] ) ) {
- $cached_term_results = $cache_term_results[ $filter_name ][ $term_name ];
- }
- }
-
- $this->filters[ $filter_name ]['terms'][ $term_name ]['cache_result_ids'] = $cached_term_results;
- }
-
- $hierarchical = 0;
- $include_children = 0;
- if ( ( isset( $this->form_fields[ $filter_name ]['hierarchical'] ) ) && ( isset( $this->form_fields[ $filter_name ]['include_children'] ) ) ) {
- $hierarchical = $this->form_fields[ $filter_name ]['hierarchical'];
- $include_children = $this->form_fields[ $filter_name ]['include_children'];
- }
- // $hierarchical = 1;
- // $include_children = 1;
-
- if ( ( $hierarchical == 1 ) && ( $include_children == 1 ) ) {
-
- $taxonomy_name = '';
- $term_ids_w_parent = array();
-
- if ( strpos( $filter_name, SF_TAX_PRE ) === 0 ) {
- $taxonomy_name = substr( $filter_name, strlen( SF_TAX_PRE ) );
- }
-
- if ( $taxonomy_name != '' ) {
-
- foreach ( $field_terms as $term_name => $the_term ) {
- if ( isset( $the_term['term_id'] ) ) {
- $ancestors = get_ancestors( $the_term['term_id'], $taxonomy_name );
-
- foreach ( $ancestors as $ancestor ) {
- if ( ! isset( $term_ids_w_parent[ $ancestor ] ) ) {
- $term_ids_w_parent[ $ancestor ] = array();
- }
-
- $term_ids_w_parent[ $ancestor ] = array_merge( $term_ids_w_parent[ $ancestor ], $this->filters[ $filter_name ]['terms'][ $term_name ]['cache_result_ids'] );
- }
- }
- }
-
- foreach ( $term_ids_w_parent as $term_wp_id => $term_wp_ids ) {// get
-
- $push_term = get_term( $term_wp_id, $taxonomy_name );
- $push_term_name = $push_term->slug;
-
- if ( isset( $this->filters[ $filter_name ]['terms'][ $push_term_name ] ) ) {
-
- $this->filters[ $filter_name ]['terms'][ $push_term_name ]['cache_result_ids'] = array_values( array_unique( array_merge( $this->filters[ $filter_name ]['terms'][ $push_term_name ]['cache_result_ids'], $term_wp_ids ) ) );
- } else {
- $this->filters[ $filter_name ]['terms'][ $push_term_name ] = array();
- $this->filters[ $filter_name ]['terms'][ $push_term_name ]['cache_result_ids'] = $term_wp_ids;
- }
- }
-
- // now put these IDs back on the the cached result IDs
- }
- } else {
- // echo "don't include the kids";
- }
- } elseif ( $filter['is_range'] == true ) {
-
- if ( empty( $this->filters[ $filter_name ]['terms']['value']['cache_result_ids'] ) ) {
- $start_field_name = $filter_name;
- $end_field_name = $filter_name; // start / end keys are the same
-
- if ( $filter['type'] == 'number' ) {
- if ( isset( $this->form_fields[ $filter_name ]['number_use_same_toggle'] ) ) {
- if ( $this->form_fields[ $filter_name ]['number_use_same_toggle'] != 1 ) {
- $end_field_name = SF_META_PRE . $this->form_fields[ $filter_name ]['number_end_meta_key'];
- }
- }
- } elseif ( $filter['type'] == 'date' ) {
- if ( isset( $this->form_fields[ $filter_name ]['date_use_same_toggle'] ) ) {
- if ( $this->form_fields[ $filter_name ]['date_use_same_toggle'] != 1 ) {
- $end_field_name = SF_META_PRE . $this->form_fields[ $filter_name ]['date_end_meta_key'];
- }
- }
- }
- $this->filters[ $filter_name ]['terms']['value']['cache_result_ids'] = $this->get_cache_number_range_ids( $start_field_name, $end_field_name, $this->filters[ $filter_name ] );
- }
- } else {
-
- /* todo should this be $term_name or "value" */
-
- if ( $filter['type'] == 'date' ) {
- foreach ( $field_terms as $term_name => $tval ) {
- $this->filters[ $filter_name ]['terms']['value']['cache_result_ids'] = $this->get_cache_date_ids( $filter_name, $term_name, $this->filters[ $filter_name ] );
- }
- }
- }
- }
-
- if ( has_filter( 'sf_query_cache_field_terms_results' ) ) {
- $this->filters = apply_filters( 'sf_query_cache_field_terms_results', $this->filters, $cache_term_results, $this->sfid );
- }
-
- // }
- }
-
- public function get_registered_result_ids() {
- return $this->all_result_ids;
- }
- private function register_result_ids( $result_ids ) {
- foreach ( $result_ids as $result_id ) {
- $this->all_result_ids[ $result_id ] = 1;
- }
-
- }
- // combine term ids with the operator to get the list of IDs in use by the whole filter
- public function set_filter_ids_cached() {
- foreach ( $this->filters as $filter_name => $filter ) {
- $merge_count = 0;
-
- $get_all_term_ids = false;
-
- if ( $filter['is_active'] == true ) {
- if ( ( $filter['term_operator'] == 'or' ) && ( $this->filter_operator == 'or' ) ) {
- $get_all_term_ids = true;
- }
- } else {
- $get_all_term_ids = true;
- }
-
- if ( $filter['is_active'] == true ) {
-
- $field_terms = $filter['terms'];
- $active_values = $filter['active_values'];
- $filter_term_ids = array();
-
- if ( $filter['type'] == 'choice' ) {
- foreach ( $active_values as $active_value ) {
- if ( isset( $filter['terms'][ $active_value ] ) ) {
- $filter_term_ids[ $active_value ] = $filter['terms'][ $active_value ]['cache_result_ids'];
- } else {
- $filter_term_ids[ $active_value ] = array();
- }
- }
- } elseif ( $filter['is_range'] == true ) {
- /*
- $filter_term_ids["min"] = $filter['terms']["min"]['cache_result_ids'];
- $filter_term_ids["max"] = $filter['terms']["max"]['cache_result_ids'];*/
-
- $filter_term_ids['value'] = $filter['terms']['value']['cache_result_ids'];
- } else {
-
- if ( $filter['type'] == 'date' ) {
- $filter_term_ids['value'] = $filter['terms']['value']['cache_result_ids'];
- }
- }
-
- $this->filters[ $filter_name ]['cached_result_ids'] = $this->combine_result_arrays( $filter_term_ids, $filter['term_operator'] );
-
- } //no point doing this if not active
-
- $this->filters[ $filter_name ]['cached_inactive_result_ids'] = array();
- // if($get_all_term_ids)
- // {//add up all the ids in all the options
-
- // make sure auto count is enabled
- if ( $this->form_settings['enable_auto_count'] == 1 ) {
-
- $field_terms = $filter['terms'];
-
- $filter_term_ids = array();
-
- if ( $filter['type'] == 'choice' ) {
- foreach ( $field_terms as $active_value => $at ) {
- if ( isset( $filter['terms'][ $active_value ] ) ) {
- $filter_term_ids[ $active_value ] = $filter['terms'][ $active_value ]['cache_result_ids'];
- } else {
- $filter_term_ids[ $active_value ] = array();
- }
- }
-
- $cache_key = 'cached_inactive_result_ids_' . $this->sfid . '_' . $filter_name;
- $cached_inactive_result_ids_trans = array();
-
- if ( $this->use_transients == 1 ) {
- $cached_inactive_result_ids_trans = Search_Filter_Wp_Cache::get_transient( $cache_key );
- }
-
- if ( ( ! empty( $cached_inactive_result_ids_trans ) ) && ( $this->use_transients == 1 ) ) {
- $cached_inactive_result_ids = $cached_inactive_result_ids_trans;
- } else {
- $cached_inactive_result_ids = $this->combine_result_arrays( $filter_term_ids, 'or' );
-
- if ( $this->use_transients == 1 ) {
- Search_Filter_Wp_Cache::set_transient( $cache_key, $cached_inactive_result_ids );
- }
- }
-
- $this->filters[ $filter_name ]['cached_inactive_result_ids'] = $cached_inactive_result_ids;
-
- } elseif ( $filter['is_range'] == true ) { /*
- date range and number */
- /*
- $filter_term_ids["min"] = $filter['terms']["min"]['cache_result_ids'];
- $filter_term_ids["max"] = $filter['terms']["max"]['cache_result_ids'];*/
-
- $filter_term_ids['value'] = $filter['terms']['value']['cache_result_ids'];
- // $this->filters[$filter_name]['cached_result_ids'] = $this->combine_result_arrays($filter_term_ids, $filter['term_operator']);
- }
- }
- }
- }
-
- // using the operator, combine an arrays of results
- public function combine_result_arrays( $result_ids_array, $operator, $track = false ) {
- /* this is the biggest bottle neck - */
-
- $time_start = microtime( true );
-
- $combined_results = array();
-
- $first_arr = false;
- foreach ( $result_ids_array as $key => $result_ids ) {
- if ( $first_arr == false ) {
- $first_arr = true;
- // $start_time = microtime(true);
- $combined_results = array();
- foreach ( $result_ids as $arr_val ) {
- $combined_results[ $arr_val ] = 1;
- }
-
- /*
- $end_time = microtime(true);
- $total_time = $end_time - $start_time;
- $this->const_time += $total_time;*/
-
- } else {
- if ( $operator == 'or' ) {
-
- $combined_results = $this->array_merge_hash( $combined_results, $result_ids ); // pass smaller array first due optmisiations
-
- } else {
- $array_keys = array();
- $arr_count = count( $result_ids );
-
- for ( $i = 0; $i < $arr_count; $i++ ) {
- $array_keys[ $result_ids[ $i ] ] = 1;
- }
- $combined_results = array_intersect_key( $combined_results, $array_keys );
- }
- }
- }
-
- // $combined_results = array_unique($combined_results);
- $combined_results = array_keys( $combined_results );
-
- return $combined_results;
- }
-
- function array_merge_hash( &$array_1, $array_2 ) {
- // $hash = array();
-
- foreach ( $array_2 as $arr_val ) {
- $array_1[ $arr_val ] = 1;
- }
-
- // $array_from_hash = array_keys( $array_1 );
-
- return $array_1;
- }
-
- public function get_cache_date_ids( $filter_name, $filter_value, $filter ) {
-
- global $wpdb;
-
- // test for speed
-
- $field_term_ids = array();
- $compare_operator = '=';
-
- if ( count( $filter['active_values'] ) != 1 ) {
- return $field_term_ids;
- }
-
- if ( $filter_value == 'value' ) {
- $compare_operator = '=';
- $filter_value = $filter['active_values'][0];
-
- }
-
- $this->cache_table_name = Search_Filter_Helper::get_table_name( 'search_filter_cache' );
-
- $cast_type = 'DATE';
- if ( is_numeric( $filter_value ) ) {
- $cast_type = 'UNSIGNED';
- }
-
- if ( $filter_value != '' ) {
- $field_terms_results = $wpdb->get_results(
- $wpdb->prepare(
- "
- SELECT post_id, post_parent_id
- FROM $this->cache_table_name
- WHERE field_name = '%s'
- AND cast(field_value AS $cast_type) $compare_operator %s
- ",
- $filter_name,
- $filter_value
- )
- );
-
- $treat_child_posts_as_parent = false;
- if ( isset( $this->form_settings['treat_child_posts_as_parent'] ) ) {
- $treat_child_posts_as_parent = (bool) $this->form_settings['treat_child_posts_as_parent'];
- }
-
- foreach ( $field_terms_results as $field_terms_result ) {
- array_push( $field_term_ids, $field_terms_result->post_id );
-
- /*
- if(!$treat_child_posts_as_parent)
- {
- array_push($field_term_ids, $field_terms_result->post_id);
- }
- else
- {
- if($field_terms_result->post_parent_id==0)
- {//this is not a child page - its the parent
- array_push($field_term_ids, $field_terms_result->post_id);
- }
- else
- {
- array_push($field_term_ids, $field_terms_result->post_parent_id);
- }
- }*/
- }
- }
- return $field_term_ids;
- }
-
- public function get_cache_number_range_ids( $start_field_name, $end_field_name, $filter ) {
- global $wpdb;
-
- $field_term_ids = array();
-
- // check there are acutally 2 values - a min and max selected
- if ( count( $filter['active_values'] ) != 2 ) {
- return $field_term_ids;
- }
-
- // figure out if decimal or not
- $cast_type = 'UNSIGNED';
-
- if ( $filter['type'] === 'date' ) {
-
- $min_value = $filter['active_values'][0];
- $max_value = $filter['active_values'][1];
-
- if ( strtotime( $min_value ) > strtotime( $max_value ) ) {
- return $field_term_ids; // don't allow min value to be larger than max - treat as incorrect / no results
- }
-
- $cast_type = 'DATE';
- if ( is_numeric( $min_value ) ) {
- $cast_type = 'UNSIGNED';
- }
- } else {
- $min_value = (float) $filter['active_values'][0];
- $max_value = (float) $filter['active_values'][1];
-
- if ( $min_value > $max_value ) {
- return $field_term_ids; // don't allow min value to be larger than max - treat as incorrect / no results
- }
-
- if ( isset( $filter['decimal_places'] ) ) {
- $decimal_places = 0;
- $decimal_places = (int) $filter['decimal_places'];
-
- if ( $decimal_places > 5 ) {
- $decimal_places = 5; // limit to 5
- }
-
- if ( $decimal_places > 0 ) {
- $cast_type = 'DECIMAL(12,' . $decimal_places . ')';
- }
- }
- }
-
- if ( $start_field_name == $end_field_name ) {
- $filter['compare_mode'] = 'userrange'; // not possible for another compare mode - single field name means its a single result we are comparing against, not a range.
- }
-
- $this->cache_table_name = Search_Filter_Helper::get_table_name( 'search_filter_cache' );
- $this->term_results_table_name = Search_Filter_Helper::get_table_name( 'search_filter_term_results' );
-
- // post meta start/end must be within user selection
- if ( $filter['compare_mode'] == 'userrange' ) {
- if ( $start_field_name == $end_field_name ) {
- $field_terms_results = $wpdb->get_results(
- $wpdb->prepare(
- "
- SELECT post_id, post_parent_id, field_value FROM
- $this->cache_table_name WHERE
- field_name = '%s' AND
- cast(field_value AS $cast_type) >= cast(%s AS $cast_type) AND
- cast(field_value AS $cast_type) <= cast(%s AS $cast_type)
-
- ",
- $start_field_name,
- $min_value,
- $max_value
- )
- );
- } else {
- $field_terms_results = $wpdb->get_results(
- $wpdb->prepare(
- "
- SELECT post_id, post_parent_id, field_value_min, field_value_max FROM
- (SELECT min_table.post_id as post_id, min_table.post_parent_id as post_parent_id, min_table.field_value as field_value_min, max_table.field_value as field_value_max
- FROM (SELECT post_id, post_parent_id, field_value FROM $this->cache_table_name WHERE field_name = '%s') AS min_table
- LEFT JOIN (SELECT post_id, field_value FROM $this->cache_table_name WHERE field_name = '%s') AS max_table
- ON min_table.post_id = max_table.post_id) as range_table
- WHERE
- cast(field_value_min AS $cast_type) >= cast(%s as $cast_type) AND
- cast(field_value_max AS $cast_type) <= cast(%s as $cast_type)
-
- ",
- $start_field_name,
- $end_field_name,
- $min_value,
- $max_value
- )
- );
- }
- } elseif ( $filter['compare_mode'] == 'metarange' ) {
- $field_terms_results = $wpdb->get_results(
- $wpdb->prepare(
- "
- SELECT post_id, post_parent_id, field_value_min, field_value_max FROM
- (SELECT min_table.post_id as post_id, min_table.post_parent_id as post_parent_id, min_table.field_value as field_value_min, max_table.field_value as field_value_max
- FROM (SELECT post_id, post_parent_id, field_value FROM $this->cache_table_name WHERE field_name = '%s') AS min_table
- LEFT JOIN (SELECT post_id, field_value FROM $this->cache_table_name WHERE field_name = '%s') AS max_table
- ON min_table.post_id = max_table.post_id) as range_table
- WHERE
- cast(field_value_min AS $cast_type) <= cast(%s as $cast_type) AND
- cast(field_value_max AS $cast_type) >= cast(%s as $cast_type)
- ",
- $start_field_name,
- $end_field_name,
- $min_value,
- $max_value
- )
- );
- } elseif ( $filter['compare_mode'] == 'overlap' ) {
- $field_terms_results = $wpdb->get_results(
- $wpdb->prepare(
- "
- SELECT post_id, post_parent_id, field_value_min, field_value_max FROM
- (SELECT min_table.post_id as post_id, min_table.post_parent_id as post_parent_id, min_table.field_value as field_value_min, max_table.field_value as field_value_max
- FROM (SELECT post_id, post_parent_id, field_value FROM $this->cache_table_name WHERE field_name = '%s') AS min_table
- LEFT JOIN (SELECT post_id, field_value FROM $this->cache_table_name WHERE field_name = '%s') AS max_table
- ON min_table.post_id = max_table.post_id) as range_table
- WHERE
- (
- cast(field_value_min AS $cast_type) >= cast(%s as $cast_type) AND
- cast(field_value_min AS $cast_type) <= cast(%s as $cast_type)
- )
- OR
- (
- cast(field_value_max AS $cast_type) >= cast(%s as $cast_type) AND
- cast(field_value_max AS $cast_type) <= cast(%s as $cast_type)
- )
- OR
- (
- cast(field_value_min AS $cast_type) <= cast(%s as $cast_type) AND
- cast(field_value_max AS $cast_type) >= cast(%s as $cast_type)
- )
- OR
- (
- cast(field_value_min AS $cast_type) >= cast(%s as $cast_type) AND
- cast(field_value_max AS $cast_type) <= cast(%s as $cast_type)
- )
- ",
- $start_field_name,
- $end_field_name,
- $min_value,
- $max_value,
- $min_value,
- $max_value,
- $min_value,
- $max_value,
- $min_value,
- $max_value
- )
- );
- }
-
- $treat_child_posts_as_parent = false;
- if ( isset( $this->form_settings['treat_child_posts_as_parent'] ) ) {
- $treat_child_posts_as_parent = (bool) $this->form_settings['treat_child_posts_as_parent'];
- }
-
- foreach ( $field_terms_results as $field_terms_result ) {
- if ( ! $treat_child_posts_as_parent ) {
- array_push( $field_term_ids, $field_terms_result->post_id );
- } else {
- if ( $field_terms_result->post_parent_id == 0 ) {// this is not a child page - its the parent
- array_push( $field_term_ids, $field_terms_result->post_id );
- } else {
- array_push( $field_term_ids, $field_terms_result->post_parent_id );
- }
- }
- }
-
- return $field_term_ids;
- }
-
-
-
- public function fetch_all_cached_post_ids() {
-
- global $wpdb;
-
- if ( ! $this->has_all_post_ids_cached ) {
- $this->has_all_post_ids_cached = true;
-
- $cache_key = 'all_post_ids_cached_' . $this->sfid;
- $cached_field_terms_results = array();
-
- if ( $this->use_transients == 1 ) {
- $all_post_ids_cached = Search_Filter_Wp_Cache::get_transient( $cache_key );
- }
-
- if ( ( ! empty( $all_post_ids_cached ) ) && ( $this->use_transients == 1 ) ) {
- $this->all_post_ids_cached = $all_post_ids_cached;
- } else {
- $this->cache_table_name = Search_Filter_Helper::get_table_name( 'search_filter_cache' );
-
- $cache_search_sql = "
- SELECT DISTINCT post_id
- FROM $this->cache_table_name
- ";
-
- $cache_search_result = $wpdb->get_results( $cache_search_sql );
-
- $cache_result_ids = array();
- foreach ( $cache_search_result as $post ) {
- array_push( $cache_result_ids, $post->post_id );
- }
-
- $this->all_post_ids_cached = $cache_result_ids;
-
- if ( $this->use_transients == 1 ) {
- Search_Filter_Wp_Cache::set_transient( $cache_key, $this->all_post_ids_cached );
- }
- }
- }
- }
-
-
-
- public function apply_cached_filters() {
-
- $filter_ids_choices = array();
- $filter_ids_extra = array();
-
- foreach ( $this->filters as $filter_name => $filter ) {
- if ( $filter['is_active'] == true ) {
- if ( $filter['type'] == 'choice' ) {// these all share an operator
- $filter_ids_choices[ $filter_name ] = $filter['cached_result_ids'];
- } else { // these are all assumed to be AND -
- $filter_ids_extra[ $filter_name ] = $filter['cached_result_ids'];
- }
- }
- }
-
- $final_filtered_ids = array();
-
- $post__in = array();
-
- // no filters have been set, so just use all the Post IDs in the cache
- if ( ( count( $filter_ids_choices ) == 0 ) ) {// no filters have been set
- // $this->post__in = $this->all_post_ids_cached;
- $final_filtered_ids['choice_ids'] = $this->all_post_ids_cached;
- } else {
- // filter the final result from all post IDs and choice filters
- $final_filtered_ids['choice_ids'] = $this->filter_results_ids( $filter_ids_choices, $this->all_post_ids_cached, $this->filter_operator );
-
- }
-
- if ( ( count( $filter_ids_extra ) == 0 ) ) {// no filters have been set
-
- // $this->post__in = $this->all_post_ids_cached;
- $final_filtered_ids['extra_ids'] = $this->all_post_ids_cached;
- } else {
- // filter the result ids with the result ids from selected options
- $final_filtered_ids['extra_ids'] = $this->combine_result_arrays( $filter_ids_extra, 'and' );
- }
-
- // now we setup the actual query - and apply users' `pre_get_posts`
-
- // usually used internally to setup the query
- if ( has_filter( 'sf_edit_query_args' ) ) {
- $this->query_args = apply_filters( 'sf_edit_query_args', $this->query_args, $this->sfid );
- }
-
- // allow input of IDs to for users to apply to search results
- if ( has_filter( 'sf_apply_custom_filter' ) ) {
-
- $user_arr = array();
- $user_arr['user_filter'] = array();
- $user_arr['user_filter'] = apply_filters( 'sf_apply_custom_filter', $user_arr['user_filter'], $this->query_args, $this->sfid );
- $user_arr['extra_ids'] = $final_filtered_ids['extra_ids'];
-
- $merge_custom_filter = true;
-
- if ( isset( $user_arr['user_filter'][0] ) ) {
- if ( $user_arr['user_filter'][0] === false ) {
- $merge_custom_filter = false;
- }
- }
-
- if ( $merge_custom_filter == true ) {
- $final_filtered_ids['extra_ids'] = $this->combine_result_arrays( $user_arr, 'and' );
- }
- }
-
- $count = 0;
- $this->filter_ids_extra = $final_filtered_ids['extra_ids'];
-
- $post__in = $this->combine_result_arrays( $final_filtered_ids, 'and' );
-
- if ( has_filter( 'sf_edit_query_args_after_custom_filter' ) ) {
- $this->query_args = apply_filters( 'sf_edit_query_args_after_custom_filter', $this->query_args, $this->sfid );
- }
-
- // now remove excluded post IDs from the included IDs as these overwrite the excluded posts types too
- if ( isset( $this->query_args['post__not_in'] ) ) {
- if ( ! is_array( $this->query_args['post__not_in'] ) ) {
- $this->query_args['post__not_in'] = array( $this->query_args['post__not_in'] );
- }
- $post__in = array_diff( $post__in, $this->query_args['post__not_in'] );
- // unset( $this->query_args['post__not_in'] ); // we probably should unset this
-
- }
-
- if ( ! is_array( $this->query_args ) ) {// then there was likely some problem from the filters
-
- $this->query_args = array();
- }
-
- if ( count( $post__in ) == 0 ) {
- $post__in = array( 0 ); // force no search results on query if no post IDs are included
- }
-
- if ( has_filter( 'sf_query_cache_post__in' ) ) {
- $post__in = apply_filters( 'sf_query_cache_post__in', $post__in, $this->sfid );
- }
-
- // setup the query args for the main search query
- $expand_args = array(
- 'post__in' => $post__in,
- );
-
- $this->query_args = array_merge( $this->query_args, $expand_args );
-
- }
-
- public function filter_results_ids( $filter_ids, $results_ids, $operator ) {
-
- // combine all choice type arrays according to THEIR operator
- $filtered_result_ids = $this->combine_result_arrays( $filter_ids, $operator );
-
- // the COMBINE ALL compulsory fields, like price, date range
- // AND THEN COMBINE THE TWO TOGETHER
-
- $pre_result_ids = array_intersect( $filtered_result_ids, $results_ids );
-
- return $pre_result_ids;
- }
-
-
- public function init_count_vars() {
-
- global $searchandfilter;
-
- // try to see if we have a transient for this data (only on pages where there are no query args, the default unfiltered
- $query_str = $searchandfilter->get( $this->sfid )->current_query()->get_query_str();
- $cache_key = 'count_table_' . $this->sfid;
-
- $count_vars_trans = array();
- if ( ( $this->use_transients == 1 ) && ( $query_str == '' ) ) {// this works by ignoring taxonomy archives if they are set, because the taxonomy archive still sets `query_str`
- $count_vars_trans = Search_Filter_Wp_Cache::get_transient( $cache_key );
- }
-
- if ( ( ! empty( $count_vars_trans ) ) && ( $count_vars_trans !== false ) && ( $query_str == '' ) && ( $this->use_transients == 1 ) ) {
- $searchandfilter->get( $this->sfid )->set_count_table( $count_vars_trans );
- return;
- }
-
- $this->count_data['current_filtered_result_ids'] = array();
- $this->count_data['current_unfiltered_result_ids'] = array();
-
- // now setup the counts for the filters
-
- // Search_Filter_Helper::start_log("set_count_filtered_post_ids");
- $this->set_count_filtered_post_ids();// get the IDs of the full result set of the current search
- // Search_Filter_Helper::finish_log("set_count_filtered_post_ids");
-
- // Search_Filter_Helper::start_log("set_count_unfiltered_post_ids");
- $this->set_count_unfiltered_post_ids(); // get the IDs of the full result set without filters
- // Search_Filter_Helper::finish_log("set_count_unfiltered_post_ids");
-
- // Search_Filter_Helper::start_log("set_filter_ids_post_query");
- $this->set_filter_ids_post_query();
- // Search_Filter_Helper::finish_log("set_filter_ids_post_query");
-
- // update the IDs associated with this filter based on the current search
- // Search_Filter_Helper::start_log("set_filter_term_ids_post_query");
- $this->set_filter_term_ids_post_query();
- // Search_Filter_Helper::finish_log("set_filter_term_ids_post_query");
- }
-
- public function set_filter_ids_post_query() {
- foreach ( $this->filters as $filter_name => $filter ) {
- // if($filter['is_active']==true)
- // {
-
- if ( count( $filter['cached_result_ids'] ) > 0 ) {// merge the old filter ids with the new result set
-
- $combine_results = array();
- $combine_results['cached_ids'] = $filter['cached_result_ids'];
- $combine_results['unfiltered_ids'] = $this->count_data['current_filtered_result_ids'];
-
- $this->filters[ $filter_name ]['wp_query_result_ids'] = $this->combine_result_arrays( $combine_results, 'and' );
-
- $combine_results = array();
- $combine_results['cached_ids'] = $filter['cached_result_ids'];
- $combine_results['unfiltered_ids'] = $this->count_data['current_unfiltered_result_ids'];
-
- $this->filters[ $filter_name ]['wp_query_result_ids_unfiltered'] = $this->combine_result_arrays( $combine_results, 'and' );
-
- }
- $combine_results = array();
- $combine_results['cached_inactive_ids'] = $filter['cached_inactive_result_ids'];
- $combine_results['unfiltered_ids'] = $this->count_data['current_unfiltered_result_ids'];
-
- $this->filters[ $filter_name ]['wp_query_inactive_result_ids'] = $this->combine_result_arrays( $combine_results, 'and' );
-
- $combine_results = array();
- $combine_results['cached_ids'] = $filter['cached_inactive_result_ids'];
- $combine_results['filtered_ids'] = $this->count_data['current_filtered_result_ids'];
-
- $this->filters[ $filter_name ]['wp_query_active_result_ids'] = $this->combine_result_arrays( $combine_results, 'and' );
- }
- }
-
- /* hacky !? - was the only way to stop woocommerce modifying some queries */
- public function hard_remove_filters() {
- $remove_posts_clauses = false;
- $remove_posts_where = false;
-
- if ( isset( $GLOBALS['wp_filter']['posts_clauses'] ) ) {
- $remove_posts_clauses = true;
- }
-
- if ( isset( $GLOBALS['wp_filter']['posts_where'] ) ) {
- $remove_posts_where = true;
- }
-
- if ( ( $remove_posts_clauses ) || ( $remove_posts_where ) ) {
- $this->WP_FILTER = $GLOBALS['wp_filter'];
- }
-
- if ( $remove_posts_clauses ) {
-
- unset( $GLOBALS['wp_filter']['posts_clauses'] );
- }
-
- if ( $remove_posts_where ) {
-
- unset( $GLOBALS['wp_filter']['posts_where'] );
- }
- }
-
-
- public function hard_restore_filters() {
- $remove_posts_clauses = false;
- $remove_posts_where = false;
-
- if ( isset( $this->WP_FILTER['posts_clauses'] ) ) {
- $remove_posts_clauses = true;
- }
-
- if ( isset( $this->WP_FILTER['posts_where'] ) ) {
- $remove_posts_where = true;
- }
-
- if ( ( $remove_posts_clauses ) || ( $remove_posts_where ) ) {
- $GLOBALS['wp_filter'] = $this->WP_FILTER;
- unset( $this->WP_FILTER );
- }
-
- }
- public function set_count_filtered_post_ids() {
- // $time_start = microtime(true);
-
- // set args so we can grab the IDs of the full query (ie minus pagination)
- $expand_args = array(
- 'posts_per_page' => -1,
- 'paged' => 1,
- // 'post_status' => array("publish"),
- 'fields' => 'ids',
-
- 'orderby' => '', // remove sorting
- 'meta_key' => '',
- 'order' => '',
- // 'post__in' => $this->post__in,
-
- 'suppress_filters' => false,
-
- /* speed improvements */
- 'no_found_rows' => true,
- 'update_post_meta_cache' => false,
- 'update_post_term_cache' => false,
-
- );
-
- $query_args = array_merge( $this->query_args, $expand_args );
-
- // $this->hard_remove_filters();
- // Search_Filter_Helper::start_log("set_count_filtered_post_ids");
- $query_arr = new WP_Query( $query_args );
- // Search_Filter_Helper::finish_log("set_count_filtered_post_ids");
- // $this->hard_restore_filters();
-
- if ( $query_arr->have_posts() ) {
- $this->count_data['current_filtered_result_ids'] = $query_arr->posts;
- }
-
- // $time_end = microtime(true);
- // $total_time = $time_end - $time_start;
-
- // echo "Total time to generate all_filtered_post_ids : $total_time seconds ";
- // echo "---------------------------- ";
- }
- public function set_count_unfiltered_post_ids() {
- // $time_start = microtime(true);
-
- // set args so we can grab the IDs of the full query (ie minus pagination)
- $expand_args = array(
- 'posts_per_page' => -1,
- // 'post_status' => array("publish"),
- 'paged' => 1,
- 'fields' => 'ids',
- 'post__in' => array(),
-
- 'orderby' => '', // remove sorting
- 'meta_key' => '',
- 'order' => '',
-
- 'suppress_filters' => false, // should normally be true - but we need for WPML to apply lang to query
- // 'lang' => ICL_LANGUAGE_CODE,
-
- /* speed improvements */
- 'no_found_rows' => true,
- 'update_post_meta_cache' => false,
- 'update_post_term_cache' => false,
-
- );
-
- $query_args = array_merge( $this->query_args, $expand_args );
-
- $cache_key = 'count_unfiltered_post_ids_' . $this->sfid;
-
- $query_trans = array();
- if ( $this->use_transients == 1 ) {
- $query_trans = Search_Filter_Wp_Cache::get_transient( $cache_key );
- }
-
- if ( ( ! empty( $query_trans ) ) && ( $this->use_transients == 1 ) ) {
- $query = $query_trans;
- } else {
-
- $query = new WP_Query( $query_args );
-
- if ( $this->use_transients == 1 ) {
- Search_Filter_Wp_Cache::set_transient( $cache_key, $query );
- }
- }
-
- if ( $query->have_posts() ) {
-
- $extras_result_array = array();
- $extras_result_array['result_ids'] = $query->posts;
- $extras_result_array['filter_ids_extra'] = $this->filter_ids_extra;
-
- $this->count_data['current_unfiltered_result_ids'] = $this->combine_result_arrays( $extras_result_array, 'and' );
- }
- }
-
-
- public function filters_active() {
- foreach ( $this->filters as $filter_name => $filter ) {
- if ( ( $filter['is_active'] ) && ( $filter['type'] == 'choice' ) ) {
- return true;
- }
- }
-
- return false;
- }
-
- // calculate all the term IDS & counts once the query has been run
- public function set_filter_term_ids_post_query() {
- // $time_start = microtime(true);
- $filter_ids_extra = array();
-
- $filters_active = $this->filters_active();
-
- foreach ( $this->filters as $filter_name => $filter ) {
- $field_terms = $filter['terms'];
- $term_result_ids = array();
-
- if ( $filter['type'] == 'choice' ) {
-
- // if($filter["is_active"])
- // {
- if ( ( $this->filter_operator == 'and' ) && ( $filter['term_operator'] == 'or' ) ) {
- $results_excl_current_field = $this->get_results_excluding_filter( $filter_name );
-
- } elseif ( ( $this->filter_operator == 'or' ) && ( $filter['term_operator'] == 'and' ) ) {
- $results_incl_current_field = $this->get_results_including_filter( $filter_name );
-
- }
- // }
-
- // $loopcount = 0;
- foreach ( $field_terms as $term_name => $term ) {
- // echo $filter_name. " | ".$term_name." | ".$this->filter_operator." | ".$filter['term_operator']."\r\n";
- if ( $filters_active ) {
-
- if ( $this->filter_operator == 'or' ) {
-
- if ( $filter['term_operator'] == 'or' ) {
- // all_unfiltered_post_ids
- $combined_results = array();
- $combined_results['cache_result_ids'] = $term['cache_result_ids'];
- $combined_results['filtered_results'] = $filter['wp_query_inactive_result_ids']; // combine with the IDS for this field
-
- $term_result_ids = $this->combine_result_arrays( $combined_results, 'and' );
-
- /*
- if(!$filter['is_active'])
- { // just to make it a bit quicker
- $combined_results = array();
- $combined_results['cache_result_ids'] = $term['cache_result_ids'];
- $combined_results['filtered_results'] = $filter['wp_query_result_ids']; //combine with the IDS for this field
-
- $term_result_ids = $this->combine_result_arrays($combined_results, "and");
- }
- else
- {
- $combined_results = array();
- $combined_results['cache_result_ids'] = $term['cache_result_ids'];
- $combined_results['unfiltered_results'] = $this->count_data['current_unfiltered_result_ids'];
-
- $term_result_ids = $this->combine_result_arrays($combined_results, "and");
- //}*/
-
- } elseif ( $filter['term_operator'] == 'and' ) {
-
- $combined_results = array();
- $combined_results['cache_result_ids'] = $term['cache_result_ids'];
- $combined_results['unfiltered_results'] = $results_incl_current_field;
-
- $term_result_ids = $this->combine_result_arrays( $combined_results, 'and' );
- }
- } elseif ( $this->filter_operator == 'and' ) {
-
- if ( $filter['term_operator'] == 'or' ) {
- $combined_results = array();
-
- $combined_results['cache_result_ids'] = $term['cache_result_ids'];
- $combined_results['unfiltered_results'] = $results_excl_current_field;
-
- $term_result_ids = $this->combine_result_arrays( $combined_results, 'and' );
- } elseif ( $filter['term_operator'] == 'and' ) {
- $combined_results = array();
- $combined_results['cache_result_ids'] = $term['cache_result_ids'];
- // $combined_results['filtered_results'] = $this->count_data['current_filtered_result_ids'];
- // $combined_results['filtered_results'] = $filter['wp_query_result_ids']; //combine with the IDS for this field
- // $combined_results['filtered_results'] = $filter['wp_query_inactive_result_ids']; //combine with the IDS for this field
- $combined_results['filtered_results'] = $filter['wp_query_active_result_ids']; // combine with the IDS for this field
-
- $term_result_ids = $this->combine_result_arrays( $combined_results, 'and' );
-
- }
- }
- } else {
- $combined_results = array();
- $combined_results['cache_result_ids'] = $term['cache_result_ids'];
-
- $combined_results['filtered_results'] = $filter['wp_query_inactive_result_ids']; // combine with the IDS for this field
- $term_result_ids = $this->combine_result_arrays( $combined_results, 'and' );
- }
-
- if ( has_filter( 'sf_query_cache_count_ids' ) ) {
- $term_result_ids = apply_filters( 'sf_query_cache_count_ids', $term_result_ids, $this->sfid );
- }
-
- $term_results = count( $term_result_ids );
-
- $count = $term_results;
-
- $this->filters[ $filter_name ]['terms'][ $term_name ]['count'] = $count;
- }
- } else {
- // then we need to combine the extras with the filters using AND
- // $filter_ids_extra[$filter_name] = $filter['cached_result_ids'];
- }
- }
-
- $this->set_count_table();
- }
-
- public function set_count_table() {
- $count_vars = array();
- foreach ( $this->filters as $filter_name => $filter ) {
- $field_terms = $this->filters[ $filter_name ]['terms'];
-
- $count_vars[ $filter_name ] = array();
-
- foreach ( $field_terms as $term_name => $term ) {
- $count_vars[ $filter_name ][ $term_name ] = $term['count'];
- }
- }
-
- global $searchandfilter;
- $query_str = $searchandfilter->get( $this->sfid )->current_query()->get_query_str();
- $cache_key = 'count_table_' . $this->sfid;
-
- $count_vars_trans = array();
- if ( ( $this->use_transients == 1 ) && ( $query_str == '' ) ) {
- $count_vars_trans = Search_Filter_Wp_Cache::get_transient( $cache_key );
-
- if ( ( empty( $count_vars_trans ) ) || ( $count_vars_trans == false ) ) {
- Search_Filter_Wp_Cache::set_transient( $cache_key, $count_vars );
- }
- }
-
- $searchandfilter->get( $this->sfid )->set_count_table( $count_vars );
-
- }
-
- public function get_results_excluding_filter( $filter_name_excl = '' ) {
- $combined_results = array();
- foreach ( $this->filters as $filter_name => $filter ) {
- if ( $filter_name_excl != $filter_name ) {
- if ( ( $filter['is_active'] ) && ( $filter['type'] == 'choice' ) ) {
- $filter_ids = $this->filters[ $filter_name ]['wp_query_result_ids_unfiltered'];
- $combined_results[ $filter_name ] = $filter_ids;
- } else {
-
- }
- }
- }
-
- if ( count( $combined_results ) == 0 ) {
- $term_result_ids = $this->count_data['current_unfiltered_result_ids'];
- } else {
- $term_result_ids = $this->combine_result_arrays( $combined_results, $this->filter_operator );
- }
-
- return $term_result_ids;
-
- }
- public function get_results_including_filter( $filter_name_incl = '' ) {
- $combined_results = array();
- $combined_results = $this->filters[ $filter_name_incl ]['wp_query_result_ids_unfiltered'];
-
- if ( count( $combined_results ) == 0 ) {
- $term_result_ids = $this->count_data['current_unfiltered_result_ids'];
- } else {
- $term_result_ids = $combined_results;
- }
-
- return $term_result_ids;
- }
- public function get_filter_terms_meta( $field_name, $field_data ) {
-
- global $wpdb;
-
- $filter_terms = array();
- $filterit = 0;
-
- if ( isset( $field_data['meta_options'] ) ) {
- $options = $field_data['meta_options'];
-
- foreach ( $options as $option ) {
-
- $filter_terms[ $filterit ] = new stdClass();
- $filter_terms[ $filterit ]->field_value = $option['option_value'];
-
- $filterit++;
- }
- }
-
- return $filter_terms;
- }
-
-
- // this is how it should be - pulling in all terms from the DB - but for now, rely on what hte user added to the fields
- public function get_filter_terms_all( $field_name, $source ) {
-
- global $wpdb;
-
- // TODO - should use binary from the start.
- $use_binary_columns = apply_filters( 'search_filter_cache_use_binary_terms', false );
-
- $field_col_select = 'field_value';
- if ( $use_binary_columns === true ) {
- $field_col_select = 'BINARY( field_value ) AS field_value';
- }
- if ( $source == 'taxonomy' ) {
- $field_col_select = 'field_value_num as field_value';
- }
-
- $this->cache_table_name = Search_Filter_Helper::get_table_name( 'search_filter_cache' );
-
- $field_terms_result = $wpdb->get_results(
- $wpdb->prepare(
- "
- SELECT DISTINCT $field_col_select
- FROM $this->cache_table_name
- WHERE field_name = '%s'
- ",
- $field_name
- )
- );
-
- return $field_terms_result;
- }
-
- public function is_meta_value( $key ) {
- if ( substr( $key, 0, 5 ) === SF_META_PRE ) {
- return true;
- }
- return false;
- }
- public function is_meta_key( $key ) {
- if ( substr( $key, 0, 5 ) === SF_META_PRE ) {
- return true;
- }
- return false;
- }
-
- public function is_taxonomy_key( $key ) {
- if ( substr( $key, 0, 5 ) === SF_TAX_PRE ) {
- return true;
- }
- return false;
- }
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-config.php b/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-config.php
deleted file mode 100644
index 3a24cce3..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-config.php
+++ /dev/null
@@ -1,251 +0,0 @@
-plugin_slug = $plugin_slug;
- $this->init( $sfid );
- }
-
- public function init( $sfid ) {
- if ( $this->sfid == 0 ) {
- $this->sfid = $sfid;
-
- $this->init_settings( $sfid );
-
- if ( ! isset( $this->query ) ) {
- $this->query = new Search_Filter_Query( $this->sfid, $this->form_data['settings'], $this->form_data['fields_assoc'], $this->get_filters() );
- $this->current_query = new Search_Filter_Active_Query( $this->plugin_slug, $this->sfid, $this->form_data['settings'], $this->form_data['fields_assoc'] );
- }
- }
- }
-
- public function query() {
- return( $this->query );
- }
-
- public function current_query() {
- return $this->current_query;
- }
-
- public function get_field_by_key( $key ) {
- if ( isset( $this->form_data['fields_assoc'][ $key ] ) ) {
- return $this->form_data['fields_assoc'][ $key ];
- } else {
- return false;
- }
- }
-
- public function set_count_table( $count_table ) {
- $this->count_table = $count_table;
- }
-
- public function get_count_table() {
- return $this->count_table;
- }
-
- public function get_count_var( $field_name, $term_name ) {
- if ( isset( $this->count_table[ $field_name ] ) ) {
- if ( isset( $this->count_table[ $field_name ][ $term_name ] ) ) {
- return $this->count_table[ $field_name ][ $term_name ];
- }
- }
- return 0;
- }
-
- public function init_settings( $postid = '' ) {
- $form_id = $postid;
-
- $this->form_data['settings'] = Search_Filter_Helper::get_settings_meta( $form_id );
- $this->form_data['fields'] = Search_Filter_Helper::get_fields_meta( $form_id );
- $this->form_data['fields_assoc'] = array();
- $this->form_data['fields_taxonomies'] = array();
- $this->form_data['fields_meta'] = array();
-
- if ( ( $this->form_data['settings'] ) && ( $this->form_data['fields'] ) ) {
- $this->form_data['id'] = $form_id;
- $this->form_data['postid'] = $postid;
- $this->form_data['idref'] = $postid;
-
- // $fieldswkeys = array();
-
- foreach ( $this->form_data['fields'] as $field ) {
- if ( $field['type'] == 'post_meta' ) {
- $meta_key = $field['meta_key'];
- if ( isset( $field['meta_key_manual_toggle'] ) ) {
- if ( $field['meta_key_manual_toggle'] == 1 ) {
- $meta_key = $field['meta_key_manual'];
- }
- }
- $this->form_data['fields_assoc'][ SF_META_PRE . $meta_key ] = $field; // make fields accessible by key
-
- array_push( $this->form_data['fields_meta'], $meta_key );
- } elseif ( $field['type'] == 'taxonomy' ) {
- $taxonomy_name = $field['taxonomy_name'];
-
- $this->form_data['fields_assoc'][ SF_TAX_PRE . $taxonomy_name ] = $field; // make fields accessible by key
-
- array_push( $this->form_data['fields_taxonomies'], $taxonomy_name );
- } elseif ( ( $field['type'] == 'tag' ) || ( $field['type'] == 'category' ) ) {
-
- $taxonomy_name = $field['taxonomy_name'];
-
- $this->form_data['fields_assoc'][ SF_TAX_PRE . $taxonomy_name ] = $field; // make fields accessible by key
-
- /*
- if($this->is_using_custom_template())
- {//if we're using a custom template, treat tag and cat as normal taxonomies
-
-
- $this->form_data['fields_assoc'][SF_TAX_PRE.$taxonomy_name] = $field; //make fields accessible by key
- }
- else
- {//else make them special ;)
- $this->form_data['fields_assoc'][$field['type']] = $field; //make fields accessible by key
- }*/
-
- array_push( $this->form_data['fields_taxonomies'], $taxonomy_name );
- } else {
- $this->form_data['fields_assoc'][ $field['type'] ] = $field; // make fields accessible by key
- }
- }
- }
- }
-
- public function get_filters() {
- $filters = array();
-
- if ( ! empty( $this->form_data['fields'] ) ) {
- foreach ( $this->form_data['fields'] as $key => $field ) {
-
- $valid_filter_types = array( 'tag', 'category', 'taxonomy', 'post_meta' );
-
- if ( in_array( $field['type'], $valid_filter_types ) ) {
- if ( ( $field['type'] == 'tag' ) || ( $field['type'] == 'category' ) || ( $field['type'] == 'taxonomy' ) ) {
- array_push( $filters, '_sft_' . $field['taxonomy_name'] );
- } elseif ( $field['type'] == 'post_meta' ) {
- array_push( $filters, '_sfm_' . $field['meta_key'] );
- }
- }
- }
- }
-
- return $filters;
- }
-
- public function get_fields() {
- $fields = array();
- foreach ( $this->form_data['fields_taxonomies'] as $tax_field ) {
- array_push( $fields, '_sft_' . $tax_field );
-
- }
- return $fields;
- }
-
-
- public function get_fields_taxonomies() {
- return $this->form_data['fields_taxonomies'];
- }
-
- public function get_fields_meta() {
- return $this->form_data['fields_meta'];
- }
-
- function data( $index = '' ) {
- if ( isset( $this->form_data[ $index ] ) ) {
- return $this->form_data[ $index ];
- }
-
- return false;
- }
-
- public function settings( $index ) {
- if ( isset( $this->form_data['settings'] ) ) {
- if ( isset( $this->form_data['settings'][ $index ] ) ) {
- return $this->form_data['settings'][ $index ];
- }
- }
-
- return false;
- }
-
- public function get_template_name() {
- if ( isset( $this->form_data['settings'] ) ) {
- if ( isset( $this->form_data['settings']['use_template_manual_toggle'] ) ) {
- if ( $this->form_data['settings']['use_template_manual_toggle'] == 1 ) {// then a template option has been selected
-
- if ( isset( $this->form_data['settings']['template_name_manual'] ) ) {
- return $this->form_data['settings']['template_name_manual'];
- }
- }
- }
- }
-
- return false;
- }
-
- public function is_valid_form() {
- if ( isset( $this->form_data['id'] ) ) {
- if ( $this->form_data['id'] != 0 ) {
- return true;
- }
- }
-
- return false;
- }
- public function form_id() {
- if ( isset( $this->form_data['id'] ) ) {
- if ( $this->form_data['id'] != 0 ) {
- return $this->form_data['id'];
- }
- }
-
- return false;
- }
-
- /*
- public function is_using_custom_template()
- {
- if(isset($this->form_data['settings']))
- {
- if(isset($this->form_data['settings']['use_template_manual_toggle']))
- {
- if($this->form_data['settings']['use_template_manual_toggle']==1)
- {
- return true;
- }
- }
- }
-
- return false;
- }*/
-
- public function return_data() {
- return $this->form_data;
- }
-
-}
-
-
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-display-results.php b/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-display-results.php
deleted file mode 100644
index b738f1f0..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-display-results.php
+++ /dev/null
@@ -1,58 +0,0 @@
-plugin_slug = $plugin_slug;
-
- }
-
- public function output_results( $sfid, $settings ) {
- global $searchandfilter;
-
- $returnvar = '';
-
- $returnvar .= '';
- $returnvar .= '';
-
- // $get_results_obj = new Search_Filter_Query($this->plugin_slug);
-
- Search_Filter_Helper::start_log( 'the_results' );
-
- $the_results = $searchandfilter->get( $sfid )->query()->the_results();
-
- // Search_Filter_Helper::finish_log("the_results");
-
- $returnvar .= $the_results;
-
- $returnvar .= '
';
-
- return $returnvar;
- }
-
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-display-shortcode.php b/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-display-shortcode.php
deleted file mode 100644
index 27b032d5..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-display-shortcode.php
+++ /dev/null
@@ -1,1011 +0,0 @@
-plugin_slug = $plugin_slug;
-
- // Add shortcode support for widgets
- add_shortcode( 'searchandfilter', array( $this, 'display_shortcode' ) );
- add_filter( 'widget_text', 'do_shortcode' );
-
- // add query vars
- add_filter( 'query_vars', array( $this, 'add_queryvars' ) );
-
- // if the current page is using the defined template - the search form can display anywhere on the site so sometimes where it is displayed may not be a results page
- $this->is_template_loaded = false;
-
- $this->display_results = new Search_Filter_Display_Results( $plugin_slug );
- }
-
- public function set_is_template( $is_template ) {
- $this->is_template_loaded = $is_template;
- }
-
- public function set_defaults( $sfid ) {
- global $searchandfilter;
- global $wp_query;
-
- $searchform = $searchandfilter->get( $sfid );
-
- // try to detect any info from current page/archive and set defaults
- // $this->set_inherited_defaults($searchform);
-
- // $current_query = $searchform->current_query()->get_array();
-
- // give priority to user selections by setting them up after
-
- /*
- $categories = array();
-
- if(isset($wp_query->query['category_name']))
- {
- $category_params = (preg_split("/[,\+ ]/", esc_attr($wp_query->query['category_name']))); //explode with 2 delims
-
- //$category_params = explode("+",esc_attr($wp_query->query['category_name']));
-
- foreach($category_params as $category_param)
- {
- $category = get_category_by_slug( $category_param );
- if(isset($category->cat_ID))
- {
- $categories[] = $category->cat_ID;
- }
- }
- }
-
- if((count($categories)>0)||(!isset($this->defaults[SF_TAX_PRE.'category'])))
- {
- $this->defaults[SF_FPRE.'category'] = $categories;
- }
- */
- // grab search term for prefilling search input
- /*
- if(isset($_GET['_sf_s']))
- {
- $this->defaults['search'] = esc_attr(trim(stripslashes($_GET['_sf_s'])));
- }*/
-
- // check to see if tag is set
-
- /*
- $tags = array();
-
- if(isset($wp_query->query['tag']))
- {
- $tag_params = (preg_split("/[,\+ ]/", esc_attr($wp_query->query['tag']))); //explode with 2 delims
-
- foreach($tag_params as $tag_param)
- {
- $tag = get_term_by("slug",$tag_param, "post_tag");
- if(isset($tag->term_id))
- {
- $tags[] = $tag->term_id;
- }
- }
- }
-
- if((count($tags)>0)||(!isset($this->defaults[SF_TAX_PRE.'post_tag'])))
- {
- $this->defaults[SF_FPRE.'post_tag'] = $tags;
- }*/
-
- /*
- $taxonomies_list = get_taxonomies('','names');
-
-
- $taxs = array();
-
- //loop through all the query vars
- if(isset($_GET))
- {
- foreach($_GET as $key=>$val)
- {
- $taxs = array();
- if (strpos($key, SF_TAX_PRE) === 0)
- {
- $key = substr($key, strlen(SF_TAX_PRE));
-
- $taxslug = ($val);
- //$tax_params = explode("+",esc_attr($taxslug));
-
- $tax_params = array();
-
- $tax_params = (preg_split("/[,\+ ]/", esc_attr($taxslug))); //explode with 2 delims
-
- foreach($tax_params as $tax_param)
- {
- $tax = get_term_by("slug",$tax_param, $key);
-
- if(isset($tax->term_id))
- {
- $taxs[] = $tax->term_id;
- }
- }
-
- if((count($taxs)>0)||(!isset($this->defaults[SF_TAX_PRE.$key])))
- {
- $this->defaults[SF_TAX_PRE.$key] = $taxs;
- }
-
-
- }
- else if (strpos($key, SF_META_PRE) === 0)
- {
- $key = substr($key, strlen(SF_META_PRE));
-
- $meta_data = array("","");
-
- if(isset($_GET[SF_META_PRE.$key]))
- {
- //get meta field options
- $meta_field_data = $searchform->get_field_by_key(SF_META_PRE.$key);
-
- if($meta_field_data['meta_type']=="number")
- {
- $meta_data = array("","");
- if(isset($_GET[SF_META_PRE.$key]))
- {
- $meta_data = (preg_split("/[,\+ ]/", esc_attr(($_GET[SF_META_PRE.$key])))); //explode with 2 delims
-
- if(count($meta_data)==1)
- {
- $meta_data[1] = "";
- }
- }
-
- $this->defaults[SF_FPRE.$key] = $meta_data;
- }
- else if($meta_field_data['meta_type']=="choice")
- {
- $getval = $_GET[SF_META_PRE.$key];
-
- if($meta_field_data["operator"]=="or")
- {
- $ochar = "-,-";
- }
- else
- {
- $ochar = "-+-";
- $replacechar = "- -";
- $getval = str_replace($replacechar, $ochar, $getval);
- }
-
- $meta_data = explode($ochar, esc_attr($getval));
-
- if(count($meta_data)==1)
- {
- $meta_data[1] = "";
- }
- }
- else if($meta_field_data['meta_type']=="date")
- {
- $meta_data = array("","");
- if(isset($_GET[SF_META_PRE.$key]))
- {
- $meta_data = array_map('urldecode', explode("+", esc_attr(urlencode($_GET[SF_META_PRE.$key]))));
- if(count($meta_data)==1)
- {
- $meta_data[1] = "";
- }
- }
- }
- }
-
- $this->defaults[SF_META_PRE.$key] = $meta_data;
-
- }
- }
- }
-
- $post_date = array("","");
- if(isset($_GET['post_date']))
- {
- $post_date = array_map('urldecode', explode("+", esc_attr(urlencode($_GET['post_date']))));
- if(count($post_date)==1)
- {
- $post_date[1] = "";
- }
- }
- $this->defaults[SF_FPRE.'post_date'] = $post_date;
-
-
- $post_types = array();
- if(isset($_GET['post_types']))
- {
- $post_types = explode(",",esc_attr($_GET['post_types']));
- }
-
- if((count($post_types)>0)||(!isset($this->defaults[SF_FPRE.'post_type'])))
- {
- $this->defaults[SF_FPRE.'post_type'] = $post_types;
- }
-
-
-
- $sort_order = array();
- if(isset($_GET['sort_order']))
- {
- $sort_order = explode(",",esc_attr(urlencode($_GET['sort_order'])));
- }
- $this->defaults[SF_FPRE.'sort_order'] = $sort_order;
-
- $authors = array();
- if(isset($_GET['authors']))
- {
- $authors = explode(",",esc_attr($_GET['authors']));
- }
-
- if((count($authors)>0)||(!isset($this->defaults[SF_FPRE.'author'])))
- {
- $this->defaults[SF_FPRE.'author'] = $authors;
- }*/
-
- }
-
-
-
- public function enqueue_scripts() {
- $load_jquery_i18n = Search_Filter_Helper::get_option( 'load_jquery_i18n' );
- $combobox_script = Search_Filter_Helper::get_option( 'combobox_script' );
-
- wp_enqueue_script( $this->plugin_slug . '-plugin-build' );
- wp_enqueue_script( $this->plugin_slug . '-plugin-' . $combobox_script );
- wp_enqueue_script( 'jquery-ui-datepicker' );
-
- if ( $load_jquery_i18n == 1 ) {
- wp_enqueue_script( $this->plugin_slug . '-plugin-jquery-i18n' );
- }
-
- }
-
- public function display_shortcode( $atts, $content = null ) {
- $time_start = microtime( true );
- $total_start = $time_start;
-
- $lazy_load_js = Search_Filter_Helper::get_option( 'lazy_load_js' );
- $load_js_css = Search_Filter_Helper::get_option( 'load_js_css' );
-
- if ( $lazy_load_js === false ) {
- $lazy_load_js = 0;
- }
- if ( $load_js_css === false ) {
- $load_js_css = 1;
- }
-
- if ( ( $lazy_load_js == 1 ) && ( $load_js_css == 1 ) ) {
- $this->enqueue_scripts();
- }
-
- // extract the attributes into variables
- extract(
- shortcode_atts(
- array(
-
- 'id' => '',
- 'slug' => '',
- 'show' => 'form',
- 'action' => '',
- 'skip' => 0,
-
- ),
- $atts
- )
- );
-
- $returnvar = '';
-
- // make sure its set
- if ( ( $id !== '' ) || ( $slug !== '' ) ) {
-
- if ( $id == '' ) {
- if ( $post = get_page_by_path( esc_attr( $slug ), OBJECT, 'search-filter-widget' ) ) {
- $id = $post->ID;
- }
- }
-
- $base_form_id = (int) $id;
- if ( Search_Filter_Helper::has_wpml() ) {
- $current_lang = Search_Filter_Helper::wpml_current_language();
- if ( $current_lang ) {
- $base_form_id = Search_Filter_Helper::wpml_object_id( $id, 'search-filter-widget', true, $current_lang );
- }
- }
-
- if ( get_post_status( $base_form_id ) != 'publish' ) {
- return;
- }
-
- $fields = Search_Filter_Helper::get_fields_meta( $base_form_id );
- $settings = Search_Filter_Helper::get_settings_meta( $base_form_id );
- $addclass = '';
-
- global $searchandfilter;
-
- $searchform = $searchandfilter->get( $base_form_id );
-
- $this->set_defaults( $base_form_id );
-
- if ( $action == 'prep_query' ) {
- // old, used for EDD, same as "filter_next_query"
- do_action( 'search_filter_filter_next_query', $base_form_id );
- if ( ! isset( $skip ) ) {
- $skip = 0;
- }
- $skip = intval( $skip );
- $searchform->query()->filter_next_query( $skip );
- return $returnvar;
- } elseif ( $action == 'do_archive_query' ) {
- do_action( 'search_filter_archive_query', $base_form_id );// legacy
- do_action( 'search_filter_do_query', $base_form_id );
- return $returnvar;
- } elseif ( $action == 'setup_pagination' ) {
- $searchform->query()->setup_pagination();
- return $returnvar;
- } elseif ( $action == 'remove_pagination' ) {
- $searchform->query()->remove_pagination();
- return $returnvar;
- } elseif ( $action == 'filter_next_query' ) {
- do_action( 'search_filter_filter_next_query', $base_form_id );
-
- if ( ! isset( $skip ) ) {
- $skip = 0;
- }
- $skip = intval( $skip );
-
- // $searchform->query()->prep_query();
- $searchform->query()->filter_next_query( $skip );
-
- return $returnvar;
- } elseif ( $show == 'form' ) {
- if ( isset( $_GET['sf_data'] ) ) {// this means the searchform is loaded within a S&F ajax request, and we only want results - so don't want
-
- if ( $_GET['sf_data'] == 'results' ) {
- return;
- }
- }
-
- $searchandfilter->increment_form_count( $base_form_id );
- /* TODO set auto count somewhere else */
-
- // make sure there are fields
- if ( isset( $fields ) ) {
- // make sure fields are in array format as expected
- if ( is_array( $fields ) ) {
- $use_ajax = isset( $settings['use_ajax_toggle'] ) ? (bool) $settings['use_ajax_toggle'] : false;
- $pagination_type = isset( $settings['pagination_type'] ) ? esc_attr( $settings['pagination_type'] ) : 'normal';
- $infinite_scroll_container = isset( $settings['infinite_scroll_container'] ) ? esc_html( $settings['infinite_scroll_container'] ) : '';
- $infinite_scroll_trigger = isset( $settings['infinite_scroll_trigger'] ) ? esc_html( $settings['infinite_scroll_trigger'] ) : '-100';
- $infinite_scroll_result_class = isset( $settings['infinite_scroll_result_class'] ) ? esc_html( $settings['infinite_scroll_result_class'] ) : '';
- $show_infinite_scroll_loader = isset( $settings['show_infinite_scroll_loader'] ) ? esc_html( $settings['show_infinite_scroll_loader'] ) : 1;
-
- $use_history_api = true;
- $ajax_target = isset( $settings['ajax_target'] ) ? esc_attr( $settings['ajax_target'] ) : '';
- $results_url = isset( $settings['results_url'] ) ? esc_attr( $settings['results_url'] ) : '';
- $page_slug = isset( $settings['page_slug'] ) ? esc_attr( $settings['page_slug'] ) : '';
- $ajax_links_selector = isset( $settings['ajax_links_selector'] ) ? esc_attr( $settings['ajax_links_selector'] ) : '';
- $ajax_auto_submit = isset( $settings['auto_submit'] ) ? (int) $settings['auto_submit'] : '';
- $auto_count = isset( $settings['enable_auto_count'] ) ? (int) $settings['enable_auto_count'] : '';
- $enable_taxonomy_archives = isset( $settings['enable_taxonomy_archives'] ) ? (int) $settings['enable_taxonomy_archives'] : '';
- $auto_count_refresh_mode = isset( $settings['auto_count_refresh_mode'] ) ? (int) $settings['auto_count_refresh_mode'] : '';
- $use_results_shortcode = isset( $settings['use_results_shortcode'] ) ? (int) $settings['use_results_shortcode'] : ''; /* legacy */
- $display_results_as = isset( $settings['display_results_as'] ) ? esc_attr( $settings['display_results_as'] ) : 'shortcode';
- $update_ajax_url = isset( $settings['update_ajax_url'] ) ? (int) $settings['update_ajax_url'] : 1;
- $only_results_ajax = isset( $settings['only_results_ajax'] ) ? (int) $settings['only_results_ajax'] : '';
- $scroll_to_pos = isset( $settings['scroll_to_pos'] ) ? esc_attr( $settings['scroll_to_pos'] ) : '';
- $scroll_on_action = isset( $settings['scroll_on_action'] ) ? esc_attr( $settings['scroll_on_action'] ) : '';
- $custom_scroll_to = isset( $settings['custom_scroll_to'] ) ? esc_html( $settings['custom_scroll_to'] ) : '';
- $maintain_state = isset( $settings['maintain_state'] ) ? esc_html( $settings['maintain_state'] ) : '';
-
- // $is_woocommerce = isset($settings['is_woocommerce']) ? esc_html($settings['is_woocommerce']) : '';
-
- /* legacy */
- if ( isset( $settings['use_results_shortcode'] ) ) {
- if ( $settings['use_results_shortcode'] == 1 ) {
- $display_results_as = 'shortcode';
-
- } else {
- $display_results_as = 'archive';
- }
- }
- /* end legacy */
-
- // if($display_results_as=="shortcode")
- // {
- // prep the query so we can get the counts for the items in the search form
- $searchform->query()->prep_query( true );
- // }
-
- if ( $display_results_as == 'shortcode' ) {// if we're using a shortcode, grab the selector automatically from the id
- $ajax_target = '#search-filter-results-' . $base_form_id;
- }
-
- $post_types = isset( $settings['post_types'] ) ? $settings['post_types'] : '';
-
- $form_attributes = array();
-
- // $form_attr = ' data-sf-form-id="'.$base_form_id.'" data-is-rtl="'.(int)is_rtl().'"';
- $form_attributes['data-sf-form-id'] = $base_form_id;
- $form_attributes['data-is-rtl'] = (int) is_rtl();
- $form_attributes['data-maintain-state'] = $maintain_state;
-
- $ajax_url = '';
-
- /* figure out the ajax/results urls */
- $ajax_data_fields = 'results';
- if ( ( $use_ajax == 1 ) && ( $auto_count == 1 ) ) {
- $ajax_data_fields = 'all';
- }
-
- if ( $display_results_as == 'archive' ) {
- // get search & filter results url respecting permalink settings
- $page_slug = '';
- $results_url = home_url( '?sfid=' . $base_form_id );
-
- if ( get_option( 'permalink_structure' ) ) {
- $page_slug = $settings['page_slug'];
- $home_url = home_url( $page_slug );
-
- if ( $page_slug != '' ) {
- if ( strpos( $home_url, '?' ) !== false ) {
- $results_url = home_url( $page_slug );
- } else {
- $results_url = trailingslashit( home_url( $page_slug ) );
- }
- }
- }
-
- if ( has_filter( 'sf_archive_results_url' ) ) {
-
- $results_url = apply_filters( 'sf_archive_results_url', $results_url, $base_form_id, $page_slug );
- }
- } elseif ( $display_results_as == 'post_type_archive' ) {
- // get the post type for this form (should only be one set)
- // then find out the proper url for the archive page according to permalink option
- if ( isset( $settings['post_types'] ) ) {
- $post_types = array_keys( $settings['post_types'] );
- if ( isset( $post_types[0] ) ) {
- $is_tax_archive = false;
- $post_type = $post_types[0];
- $has_tax_in_fields = false;
-
- if ( Search_Filter_Wp_Data::is_taxonomy_archive_of_post_type( $post_type ) ) {
- $is_tax_archive = true;
- $term = $searchandfilter->get_queried_object();
- $filters = $searchform->get_filters();
- if ( in_array( '_sft_' . $term->taxonomy, $filters ) ) {
- $has_tax_in_fields = true;
- }
- }
-
- if ( ( $enable_taxonomy_archives == 1 ) && ( $has_tax_in_fields == false ) && ( $is_tax_archive ) ) {
-
- $results_url = get_term_link( $term );
- } else {
-
- if ( $post_type == 'post' ) {
- if ( get_option( 'show_on_front' ) == 'page' ) {
- $results_url = get_permalink( get_option( 'page_for_posts' ) );
- } else {
- $results_url = home_url( '/' );
- }
- } else {
- $results_url = get_post_type_archive_link( $post_type );
- }
- }
- }
- }
- } elseif ( $display_results_as == 'shortcode' ) {// use the results_url defined by the user
- $ajax_url = home_url( '?sfid=' . $base_form_id . '&sf_action=get_data' );
- } elseif ( ( $display_results_as == 'custom_woocommerce_store' ) && ( Search_Filter_Helper::wc_get_page_id() ) ) {
- // find woocommerce shop page
-
- $post_type = 'product';
- $results_url = home_url( "?post_type=$post_type" );
-
- $searchform->query()->remove_permalink_filters();
- if ( get_option( 'permalink_structure' ) ) {
- $results_url = get_permalink( Search_Filter_Helper::wc_get_page_id( 'shop' ) );
- }
- $searchform->query()->add_permalink_filters();
-
- $has_tax_in_fields = false;
- $is_tax_archive = false;
-
- if ( Search_Filter_Wp_Data::is_taxonomy_archive_of_post_type( $post_type, false ) ) {
- $is_tax_archive = true;
- $term = $searchandfilter->get_queried_object();
- $filters = $searchform->get_filters();
- if ( in_array( '_sft_' . $term->taxonomy, $filters ) ) {
- $has_tax_in_fields = true;
- }
- }
-
- if ( ( $enable_taxonomy_archives == 1 ) && ( $has_tax_in_fields == false ) && ( $is_tax_archive ) ) {
-
- $results_url = get_term_link( $term );
- }
-
- /*
- else {
-
- }*/
- }
- if ( $results_url != '' ) {
- if ( has_filter( 'sf_results_url' ) ) {
-
- $results_url = apply_filters( 'sf_results_url', $results_url, $base_form_id );
- }
-
- // $form_attr.=' data-results-url="'.$results_url.'"';
- $form_attributes['data-results-url'] = $results_url;
- }
-
- if ( ( $ajax_url == '' ) && ( $results_url != '' ) && ( $use_ajax ) ) {
- $ajax_url = $results_url;
- }
-
- if ( ( $use_ajax ) && ( $ajax_url != '' ) ) {
- if ( has_filter( 'sf_ajax_data_fields' ) ) {
-
- $ajax_data_fields = apply_filters( 'sf_ajax_data_fields', $ajax_data_fields, $base_form_id );
- }
-
- $ajax_url = add_query_arg( 'sf_data', $ajax_data_fields, $ajax_url );
-
- if ( has_filter( 'sf_ajax_results_url' ) ) {
-
- $ajax_url = apply_filters( 'sf_ajax_results_url', $ajax_url, $base_form_id );
- }
-
- // $form_attr.=' data-ajax-url="'.$ajax_url.'"';
- $form_attributes['data-ajax-url'] = $ajax_url;
- }
-
- $ajax_form_url = home_url( '?sfid=' . $base_form_id . '&sf_action=get_data&sf_data=form' );
-
- if ( $ajax_form_url != '' ) {
- if ( has_filter( 'sf_ajax_form_url' ) ) {
-
- $ajax_form_url = apply_filters( 'sf_ajax_form_url', $ajax_form_url, $base_form_id );
- }
-
- // $form_attr.=' data-ajax-form-url="'.$ajax_form_url.'"';
- $form_attributes['data-ajax-form-url'] = $ajax_form_url;
- }
-
- $form_attributes['data-display-result-method'] = $display_results_as;
- $form_attributes['data-use-history-api'] = (int) $use_history_api;
- $form_attributes['data-template-loaded'] = (int) $this->is_template_loaded;
-
- if ( ( $enable_taxonomy_archives == 1 ) && ( ( $display_results_as == 'post_type_archive' ) || ( $display_results_as == 'custom_woocommerce_store' ) ) ) {
-
- $form_attributes['data-taxonomy-archives'] = $enable_taxonomy_archives;
-
- if ( isset( $settings['post_types'] ) ) {
- $post_types = array_keys( $settings['post_types'] );
- if ( isset( $post_types[0] ) ) {
-
- $single = true;
- if ( $display_results_as == 'custom_woocommerce_store' ) {
- $single = false;
- }
-
- if ( Search_Filter_Wp_Data::is_taxonomy_archive_of_post_type( $post_types[0], $single ) ) {
- $term = $searchandfilter->get_queried_object();
- $taxonomy = $term->taxonomy;
- $form_attributes['data-current-taxonomy-archive'] = $taxonomy;
- }
- }
- }
- }
-
- $lang_code = '';
-
- if ( Search_Filter_Helper::has_wpml() ) {
- $lang_code = Search_Filter_Helper::wpml_current_language();
- } else {
- $lang_code = strtolower( substr( get_bloginfo( 'language' ), 0, 2 ) );
- }
-
- // $form_attr .= ' data-lang-code="'.$lang_code.'"';
- // $form_attr.=' data-ajax="'.(int)$use_ajax.'"';
- $form_attributes['data-lang-code'] = $lang_code;
- $form_attributes['data-ajax'] = (int) $use_ajax;
-
- if ( $use_ajax ) {
- $form_attributes['data-ajax-data-type'] = 'html';
-
- if ( $display_results_as == 'shortcode' ) {
-
- $form_attributes['data-ajax-data-type'] = 'json';
- $form_attributes['data-ajax-links-selector'] = '.pagination a';
- } else {
- if ( $ajax_links_selector != '' ) {
- // $form_attr.=' data-ajax-links-selector="'.$ajax_links_selector.'"';
- $form_attributes['data-ajax-links-selector'] = $ajax_links_selector;
- } else {
- // $form_attributes['data-ajax-links-selector'] = '';
- }
- }
-
- if ( has_filter( 'sf_ajax_data_type' ) ) {
-
- $form_attributes['data-ajax-data-type'] = apply_filters( 'sf_ajax_data_type', $form_attributes['data-ajax-data-type'], $base_form_id );
- }
-
- if ( $ajax_target != '' ) {
- // $form_attr.=' data-ajax-target="'.$ajax_target.'"';
- $form_attributes['data-ajax-target'] = $ajax_target;
- }
-
- if ( $pagination_type != '' ) {
- // $form_attr.=' data-ajax-pagination-type="'.$pagination_type.'"';
- $form_attributes['data-ajax-pagination-type'] = $pagination_type;
- }
-
- if ( $pagination_type == 'infinite_scroll' ) {
- // $form_attr.=' data-show-scroll-loader="'.$show_infinite_scroll_loader.'"';
- $form_attributes['data-show-scroll-loader'] = $show_infinite_scroll_loader;
-
- if ( $infinite_scroll_container !== '' ) {
- // $form_attr.=' data-infinite-scroll-container="'.$infinite_scroll_container.'"';
- $form_attributes['data-infinite-scroll-container'] = $infinite_scroll_container;
- }
- if ( $infinite_scroll_trigger !== '' ) {
- // $form_attr.=' data-infinite-scroll-container="'.$infinite_scroll_container.'"';
- $form_attributes['data-infinite-scroll-trigger'] = $infinite_scroll_trigger;
- }
-
- if ( $infinite_scroll_result_class !== '' ) {
- // $form_attr.=' data-infinite-scroll-result-class="'.$infinite_scroll_result_class.'"';
- $form_attributes['data-infinite-scroll-result-class'] = $infinite_scroll_result_class;
- }
- }
-
- if ( $update_ajax_url != '' ) {
- $form_attributes['data-update-ajax-url'] = $update_ajax_url;
- }
- if ( $only_results_ajax != '' ) {
- $form_attributes['data-only-results-ajax'] = $only_results_ajax;
- }
-
- if ( $scroll_to_pos != '' ) {
- $form_attributes['data-scroll-to-pos'] = $scroll_to_pos;
-
- if ( $scroll_to_pos == 'custom' ) {
- if ( $custom_scroll_to != '' ) {
- $form_attributes['data-custom-scroll-to'] = $custom_scroll_to;
- }
- }
- }
-
- if ( $scroll_on_action != '' ) {
- $form_attributes['data-scroll-on-action'] = $scroll_on_action;
- }
- }
-
- $init_paged = 1;
- if ( isset( $_GET['sf_paged'] ) ) {
- $init_paged = (int) $_GET['sf_paged'];
- }
- $form_attributes['data-init-paged'] = $init_paged;
- $form_attributes['data-auto-update'] = $ajax_auto_submit;
-
- if ( $auto_count == 1 ) {
- $form_attributes['data-auto-count'] = $auto_count;
-
- if ( $auto_count_refresh_mode == 1 ) {
- $form_attributes['data-auto-count-refresh-mode'] = $auto_count_refresh_mode;
- }
- }
-
- $form_attributes['action'] = $results_url;
- $form_attributes['method'] = 'post';
- $form_attributes['class'] = 'searchandfilter' . $addclass;
- $form_attributes['id'] = 'search-filter-form-' . $base_form_id;
- $form_attributes['autocomplete'] = 'off';
- $form_attributes['data-instance-count'] = $searchandfilter->get_form_count( $base_form_id );
-
- $ajax_update_sections = apply_filters( 'search_filter_form_attributes_update_sections', array(), $base_form_id );
-
- if ( ! empty( $ajax_update_sections ) ) {
- $form_attributes['data-ajax-update-sections'] = wp_json_encode( $ajax_update_sections );
- }
-
- if ( has_filter( 'search_filter_form_attributes' ) ) {
- $form_attributes = apply_filters( 'search_filter_form_attributes', $form_attributes, $base_form_id );
- }
-
- $form_attr = '';
- foreach ( $form_attributes as $key => $val ) {
- $form_attr .= $key . "='" . esc_attr( $val ) . "' ";
- }
- $form_attr = trim( $form_attr );
-
- $returnvar .= '';
- $returnvar .= '';
-
- $this->fields = new Search_Filter_Fields( $this->plugin_slug, $base_form_id );
-
- // loop through each field and grab html
- foreach ( $fields as $field ) {
- $returnvar .= $this->get_field( $field, $post_types, $base_form_id );
- }
-
- $returnvar .= ' ';
- $returnvar .= ' ';
-
- }
- }
-
- $time_end = microtime( true );
- $total_time = round( ( $time_end - $time_start ), 6 );
-
- /*
- echo "~~~~~~~~~~~~~~~~~~~ ";
- echo "Total To Generate & Display Search Form: $total_time ";
- echo "~~~~~~~~~~~~~~~~~~~ ";*/
- } elseif ( $show == 'results' ) {
- // dont display results if they are inside the same loop (infinite loop)
- // if($searchandfilter->active_loop_id()==$base_form_id)
-
- // actually, why would we want to show any results within results, if there is an active loop, prevent
- // any further results shortcodes from activating within that set of results
- if ( $searchandfilter->active_loop_id() != 0 ) {
- return;
- }
-
- /* legacy */
- if ( $searchform->settings( 'use_results_shortcode' ) == 1 ) {
- $display_results_as = 'shortcode';
- } else {
- $display_results_as = 'archive';
- }
- /* end legacy */
-
- if ( $searchform->settings( 'display_results_as' ) != '' ) {
- $display_results_as = $searchform->settings( 'display_results_as' );
- }
-
- if ( $display_results_as == 'shortcode' ) {
- $returnvar = $this->display_results->output_results( $base_form_id, $settings );
- } else {
- if ( current_user_can( 'edit_posts' ) ) {
- $returnvar = __( "Notice: This Search Form has not been configured to use a shortcode. Edit settings .
", $this->plugin_slug );
- }
- }
- }
- }
-
- // Search_Filter_Helper::finish_log("----- Finish display_shortcode");
- return $returnvar;
- }
-
- // switch for different field types
- private function get_field( $field_data, $post_types, $search_form_id ) {
- $returnvar = '';
-
- $field_class = '';
- $field_name = '';
- if ( $field_data['type'] == 'category' ) {
- $field_class = SF_FIELD_CLASS_PRE . $field_data['type'];
- $field_name = SF_TAX_PRE . 'category';
- } elseif ( $field_data['type'] == 'tag' ) {
- $field_class = SF_FIELD_CLASS_PRE . $field_data['type'];
- $field_name = SF_TAX_PRE . 'post_tag';
- } elseif ( $field_data['type'] == 'taxonomy' ) {
- $field_class = SF_FIELD_CLASS_PRE . $field_data['type'] . '-' . ( $field_data['taxonomy_name'] );
- $field_name = SF_TAX_PRE . $field_data['taxonomy_name'];
- } elseif ( $field_data['type'] == 'post_meta' ) {
- $field_class = SF_FIELD_CLASS_PRE . 'post-meta' . '-' . ( $field_data['meta_key'] );
- $field_name = SF_META_PRE . $field_data['meta_key'];
- } elseif ( $field_data['type'] == 'post_type' ) {
- $field_class = SF_FIELD_CLASS_PRE . $field_data['type'];
- $field_name = SF_FPRE . $field_data['type'];
- } elseif ( $field_data['type'] == 'sort_order' ) {
- $field_class = SF_FIELD_CLASS_PRE . $field_data['type'];
- $field_name = SF_FPRE . $field_data['type'];
- } elseif ( $field_data['type'] == 'author' ) {
- $field_class = SF_FIELD_CLASS_PRE . $field_data['type'];
- $field_name = SF_FPRE . $field_data['type'];
- } elseif ( $field_data['type'] == 'post_date' ) {
- $field_class = SF_FIELD_CLASS_PRE . $field_data['type'];
- $field_name = SF_FPRE . $field_data['type'];
- } else {
- $field_class = SF_FIELD_CLASS_PRE . $field_data['type'];
- $field_name = $field_data['type'];
- }
-
- $field_class = sanitize_html_class( $field_class );
-
- $input_type = '';
- if ( isset( $field_data['input_type'] ) ) {
- $input_type = $field_data['input_type'];
- }
-
- $addAttributes = '';
-
- // check if is combobox
- if ( ( $input_type == 'select' ) || ( $input_type == 'multiselect' ) ) {
- if ( isset( $field_data['combo_box'] ) ) {
- if ( $field_data['combo_box'] == 1 ) {
- $addAttributes .= ' data-sf-combobox="1"';
-
- if ( ! empty( $field_data['no_results_message'] ) ) {
- $addAttributes .= ' data-sf-combobox-nrm="' . esc_attr( $field_data['no_results_message'] ) . '"';
- }
- }
- }
- }
-
- $display_field = true;
-
- if ( has_filter( 'sf_display_field' ) ) {
- $display_field = apply_filters( 'sf_display_field', $display_field, $search_form_id, $field_name );
- }
-
- if ( $display_field == false ) {
- return $returnvar;
- }
-
- $field_html = '';
-
- if ( $field_data['type'] == 'search' ) {
- $field_html = $this->fields->search->get( $field_data );
- } elseif ( ( $field_data['type'] == 'tag' ) || ( $field_data['type'] == 'category' ) || ( $field_data['type'] == 'taxonomy' ) ) {
- $field_html = $this->fields->taxonomy->get( $field_data );
- } elseif ( $field_data['type'] == 'post_type' ) {
- $field_html = $this->fields->post_type->get( $field_data );
- } elseif ( $field_data['type'] == 'post_date' ) {
- $field_html = $this->fields->post_date->get( $field_data );
- } elseif ( $field_data['type'] == 'post_meta' ) {
- $field_html = $this->fields->post_meta->get( $field_data );
- } elseif ( $field_data['type'] == 'sort_order' ) {
- $field_html = $this->fields->sort_order->get( $field_data );
- } elseif ( $field_data['type'] == 'posts_per_page' ) {
- $field_html = $this->fields->posts_per_page->get( $field_data );
- } elseif ( $field_data['type'] == 'author' ) {
- $field_html = $this->fields->author->get( $field_data );
- } elseif ( $field_data['type'] == 'submit' ) {
- $field_html = $this->fields->submit->get( $field_data );
- } elseif ( $field_data['type'] == 'reset' ) {
- $field_html = $this->fields->reset->get( $field_data, $search_form_id );
- }
-
- global $searchandfilter;
- $searchform = $searchandfilter->get( $search_form_id );
- $enable_taxonomy_archives = $searchform->settings( 'enable_taxonomy_archives' );
- $field_taxonomy = '';
-
- if ( $enable_taxonomy_archives == 1 ) {
- if ( $field_data['type'] == 'category' ) {
- $field_taxonomy = 'category';
- } elseif ( $field_data['type'] == 'tag' ) {
- $field_taxonomy = 'post_tag';
- } elseif ( $field_data['type'] == 'taxonomy' ) {
- $field_taxonomy = $field_data['taxonomy_name'];
- }
-
- $taxonomy = get_taxonomy( $field_taxonomy );
- if ( $taxonomy ) {
- if ( $taxonomy->public == true ) {
- $rewrite = Search_Filter_Helper::json_encode( Search_Filter_TTT::get_template( $field_taxonomy ) );
- } else {
- $rewrite = '';
- }
-
- $addAttributes .= " data-sf-term-rewrite='" . $rewrite . "'";
- }
-
- if ( Search_Filter_Wp_Data::is_taxonomy_archive() ) {
- $term = $searchandfilter->get_queried_object();
- if ( isset( $term->taxonomy ) ) {
- $taxonomy_name = $term->taxonomy;
- if ( $field_taxonomy == $taxonomy_name ) {
- $addAttributes .= " data-sf-taxonomy-archive='1'";
- }
- }
- }
- }
-
- if ( $field_data['type'] == 'post_meta' ) {
- $addAttributes .= ' data-sf-meta-type="' . $field_data['meta_type'] . '"';
- if ( $field_data['meta_type'] == 'number' ) {
- $input_type = $field_data['number_input_type'];
- } elseif ( $field_data['meta_type'] == 'choice' ) {
- $input_type = $field_data['choice_input_type'];
-
- if ( $field_data['combo_box'] == 1 ) {
- $addAttributes .= ' data-sf-combobox="1"';
- }
- } elseif ( $field_data['meta_type'] == 'date' ) {
- $input_type = $field_data['date_input_type'];
- }
- }
-
- $returnvar .= "';
-
- // display a heading? (available to all field types)
- if ( isset( $field_data['heading'] ) ) {
- if ( $field_data['heading'] != '' ) {
- $returnvar .= '' . esc_html( $field_data['heading'] ) . ' ';
- }
- }
-
- $returnvar .= $field_html;
-
- $returnvar .= ' ';
-
- return $returnvar;
- }
-
- function add_queryvars( $qvars ) {
- /*
- $qvars[] = 'post_types';
- $qvars[] = 'post_date';
- $qvars[] = 'sort_order';
- $qvars[] = 'authors';
- $qvars[] = '_sf_s';*/
- $qvars[] = 'sfid'; // search filter template
-
- // we need to add in any meta keys
- /*
- foreach($_GET as $key=>$val)
- {
- $key = sanitize_text_field($key);
-
- if(($this->is_meta_value($key))||($this->is_taxonomy_key($key)))
- {
- $qvars[] = $key;
- }
- }*/
-
- return $qvars;
- }
-
- public function is_meta_value( $key ) {
- if ( substr( $key, 0, 5 ) === SF_META_PRE ) {
- return true;
- }
- return false;
- }
- public function is_taxonomy_key( $key ) {
- if ( substr( $key, 0, 5 ) === SF_TAX_PRE ) {
- return true;
- }
- return false;
- }
-}
-
-if ( ! class_exists( 'Search_Filter_Generate_Input' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'class-search-filter-generate-input.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Display_Results' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'class-search-filter-display-results.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Fields' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'class-search-filter-fields.php';
-}
-
-
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-fields.php b/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-fields.php
deleted file mode 100644
index 3899d9fd..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-fields.php
+++ /dev/null
@@ -1,114 +0,0 @@
-plugin_slug = $plugin_slug;
- $this->sfid = $sfid;
-
- $this->search = new Search_Filter_Field_Search( $this->plugin_slug, $sfid );
- $this->taxonomy = new Search_Filter_Field_Taxonomy( $this->plugin_slug, $sfid );
- $this->post_type = new Search_Filter_Field_Post_Type( $this->plugin_slug, $sfid );
- $this->sort_order = new Search_Filter_Field_Sort_Order( $this->plugin_slug, $sfid );
- $this->posts_per_page = new Search_Filter_Field_Posts_Per_Page( $this->plugin_slug, $sfid );
- $this->author = new Search_Filter_Field_Author( $this->plugin_slug, $sfid );
- $this->post_meta = new Search_Filter_Field_Post_Meta( $this->plugin_slug, $sfid );
- $this->post_date = new Search_Filter_Field_Post_Date( $this->plugin_slug, $sfid );
- $this->submit = new Search_Filter_Field_Submit( $this->plugin_slug, $sfid );
- $this->reset = new Search_Filter_Field_Reset( $this->plugin_slug, $sfid );
-
- }
-
-}
-
-
-if ( ! class_exists( 'Search_Filter_Field_Search' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'fields/base.php';
-}
-if ( ! class_exists( 'Search_Filter_Field_Search' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'fields/search.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Field_Taxonomy' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'fields/taxonomy.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Field_Post_Type' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'fields/post_type.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Field_Post_Meta' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'fields/post_meta.php';
-}
-if ( ! class_exists( 'Search_Filter_Field_Post_Meta_Choice' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'fields/post_meta_choice.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Field_Post_Meta_Number' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'fields/post_meta_number.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Field_Post_Meta_Date' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'fields/post_meta_date.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Field_Post_Date' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'fields/post_date.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Field_Sort_Order' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'fields/sort_order.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Field_Posts_Per_Page' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'fields/posts_per_page.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Field_Author' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'fields/author.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Field_Submit' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'fields/submit.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Field_Reset' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'fields/reset.php';
-}
-
-
-if ( ! class_exists( 'Search_Filter_Taxonomy_Object_Walker' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'class-search-filter-taxonomy-object-walker.php';
-}
-if ( ! class_exists( 'Search_Filter_Author_Object_Walker' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'class-search-filter-author-object-walker.php';
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-generate-input.php b/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-generate-input.php
deleted file mode 100644
index 6647f82f..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-generate-input.php
+++ /dev/null
@@ -1,913 +0,0 @@
-plugin_slug = $plugin_slug;
- $this->sfid = $sfid;
- }
-
-
- public function generate_range_checkbox( $field, $min, $max, $step, $smin, $smax, $value_prefix = '', $value_postfix = '' ) {
- $returnvar = '';
-
- return $returnvar;
- }
-
- /* finish remove */
-
- public function datepicker( $args ) {
- $returnvar = '';
-
- $args['attributes']['class'] = 'sf-datepicker sf-input-date';
-
- if ( isset( $args['prefix'] ) ) {
- if ( $args['prefix'] != '' ) {
- $args['prefix'] = "" . $args['prefix'] . ' ';
- }
- }
- if ( isset( $args['postfix'] ) ) {
- if ( $args['postfix'] != '' ) {
- $args['postfix'] = "" . $args['postfix'] . ' ';
- }
- }
-
- $returnvar .= $this->text( $args );
-
- return $returnvar;
- }
-
- public function text( $args ) {
- // init defaults & vars
- $input_args = $this->prepare_input_args( $args, 'text' );
-
- // wcag 2.0
- $accessibility_label = '';
- if ( isset( $input_args['accessibility_label'] ) ) {
- if ( $input_args['accessibility_label'] != '' ) {
- $accessibility_label = $input_args['accessibility_label'];
- }
- }
-
- // now we want to put the class attribute on the LI, and remove from input
- $input_args['attributes']['class'] .= ' ' . $input_args['input_class'];
- $input_args['attributes']['class'] = trim( $input_args['attributes']['class'] );
- $input_args['attributes']['type'] = $input_args['type'];
- $input_args['attributes']['value'] = $input_args['value'];
- $input_args['attributes']['title'] = $accessibility_label;
-
- // filter the input arguments before the html is generated - allowing almost all options to be modified
- if ( has_filter( 'sf_input_object_pre' ) ) {
- $input_args = apply_filters( 'sf_input_object_pre', $input_args, $this->sfid );
- }
-
- // prepare html
- $attibutes_html = $this->convert_attributes_to_html( $input_args['attributes'] );
-
- $prefix = '';
- $postfix = '';
-
- if ( isset( $input_args['prefix'] ) ) {
- if ( $input_args['prefix'] != '' ) {
- $prefix = $input_args['prefix'];
- }
- }
- if ( isset( $input_args['postfix'] ) ) {
- if ( $input_args['postfix'] != '' ) {
- $postfix = $input_args['postfix'];
- }
- }
-
- ob_start();
-
- ?>
-
-
- >
- prepare_input_args( $args, 'select' );
-
- // wcag 2.0
- // $accessibility_label = __("Choose an option:", $this->plugin_slug);
- $accessibility_label = '';
- if ( isset( $input_args['accessibility_label'] ) ) {
- if ( $input_args['accessibility_label'] != '' ) {
- $accessibility_label = $input_args['accessibility_label'];
- }
- }
-
- $input_args['attributes']['title'] = $accessibility_label;
-
- // now we want to put the class attribute on the LI, and remove from input
- $input_args['attributes']['class'] .= ' ' . $input_args['input_class'];
- $input_args['attributes']['class'] = trim( $input_args['attributes']['class'] );
- unset( $input_args['input_class'] );// don't want this visible to users
-
- // filter the input arguments before the html is generated - allowing almost all options to be modified
- if ( has_filter( 'sf_input_object_pre' ) ) {
- $input_args = apply_filters( 'sf_input_object_pre', $input_args, $this->sfid );
- }
-
- // prepare html
- $attibutes_html = $this->convert_attributes_to_html( $input_args['attributes'] );
-
- $prefix = '';
- $postfix = '';
-
- if ( isset( $input_args['prefix'] ) ) {
- if ( $input_args['prefix'] != '' ) {
- $prefix = $input_args['prefix'];
- }
- }
- if ( isset( $input_args['postfix'] ) ) {
- if ( $input_args['postfix'] != '' ) {
- $postfix = $input_args['postfix'];
- }
- }
-
- ob_start();
-
- ?>
-
-
-
-
- >
- attributes ) ) {
- $option->attributes = array(
- 'class' => '',
- 'id' => '',
- );
- }
-
- if ( $this->is_option_selected( $option, $input_args['defaults'] ) ) {
- $option->attributes['selected'] = 'selected';
- $option->attributes['class'] = trim( $option->attributes['class'] ) . ' sf-option-active';
- } else {
- if ( isset( $option->attributes['selected'] ) ) {
- unset( $option->attributes['selected'] );
- }
- }
-
- $container_attibutes_html = '';
- if ( isset( $option->count ) ) {
- $option->attributes['data-sf-count'] = $option->count;
- }
- $option->attributes['data-sf-depth'] = '0';
-
- // add padding to labels for anything hierarchical
- $label_pad = '';
- if ( isset( $option->depth ) ) {
- $label_pad = str_repeat( ' ', $option->depth * 3 );
- $option->attributes['data-sf-depth'] = $option->depth;
- }
-
- // create the attributes
- $option_attibutes_html = $this->convert_attributes_to_html( $option->attributes );
-
- $option_label = $label_pad . $option->label;
-
- ?>
- value="value ); ?>">
-
-
- prepare_input_args( $args, 'checkbox' );
-
- $input_name = $input_args['attributes']['name'];
- unset( $input_args['attributes']['name'] );
-
- // filter the input arguments before the html is generated - allowing almost all options to be modified
- if ( has_filter( 'sf_input_object_pre' ) ) {
- $input_args = apply_filters( 'sf_input_object_pre', $input_args, $this->sfid );
- }
-
- // prepare html
- $attibutes_html = $this->convert_attributes_to_html( $input_args['attributes'] );
-
- $open_child_count = 0;
-
- ob_start();
-
- ?>
- ', $diff );
- echo $str_repeat;
- }
- } else {
- echo '';
- }
- }
-
- $str_repeat = str_repeat( '', (int) $open_child_count );
- echo $str_repeat;
-
- ?>
-
- prepare_input_args( $args, 'radio' );
-
- $input_name = $input_args['attributes']['name'];
- unset( $input_args['attributes']['name'] );
-
- // filter the input arguments before the html is generated - allowing almost all options to be modified
- if ( has_filter( 'sf_input_object_pre' ) ) {
- $input_args = apply_filters( 'sf_input_object_pre', $input_args, $this->sfid );
- }
-
- // prepare html
- $attibutes_html = $this->convert_attributes_to_html( $input_args['attributes'] );
-
- $open_child_count = 0;
-
- ob_start();
-
- ?>
- ', $diff );
- echo $str_repeat;
-
- }
- } else {
- echo '';
- }
- }
-
- // close any child lists we may not have accounted for
- $str_repeat = str_repeat( '', (int) $open_child_count );
- echo $str_repeat;
-
- ?>
-
- get_form_count( $this->sfid );
-
- // use count + time, because on page load, time (md5'd) seems to remain the same - via ajax count will always be set to 1, however time will keep this unique
- // return SF_CLASS_PRE."input-".md5($this->sfid.$unique_name);
-
- return SF_CLASS_PRE . 'input-' . md5( $this->sfid . '_' . $sf_instance_count . '_' . time() . '_' . $unique_name );
- }
-
- // this just some basic stuff like adding a name attribute to a field and the basic CSS class that needs to be added
- private function is_option_selected( $option, $defaults ) {
- // first grab the comparison value from this option
- $select_value = ''; // selected value allows another value for matching occur, or "selected status" to be applied.
- if ( isset( $option->selected_value ) ) {
- $select_value = $option->selected_value;
- } else {
- $select_value = $option->value;
- }
-
- $no_selected_options = count( $defaults );
-
- if ( $no_selected_options > 0 ) {
- if ( in_array( (string) $select_value, $defaults ) ) {
- return true;
- }
- }
-
- return false;
- }
-
-
-
- public function range_slider( $args ) {
- $field_name = $args['name'];
-
- $args = $this->prepare_range_args( $args, 'slider' );
-
- if ( $args['number_display_values_as'] == 'text' ) {
-
- $input_class = 'sf-text-number';
- $value_min_html = $args['prefix'] . '' . $args['attributes']['data-start-min-formatted'] . ' ' . $args['postfix'];
- $value_max_html = $args['prefix'] . '' . $args['attributes']['data-start-max-formatted'] . ' ' . $args['postfix'];
- } else {
- // setup input/text fields
-
- // setup vars in common with both fields
- if ( ( $args['decimal_places'] == 0 ) && ( $args['thousand_seperator'] == '' ) ) {
- $input_type = 'number';
- } else {
- $input_type = 'text';
- }
-
- $accessibility_label = '';
- if ( isset( $args['accessibility_label'] ) ) {
- $accessibility_label = $args['accessibility_label'];
- }
-
- $text_args = array(
- 'name' => $args['name'],
- 'value' => '',
- 'accessibility_label' => $accessibility_label,
- 'type' => $input_type,
- 'attributes' => array(
- 'class' => 'sf-input-range-number',
- ),
- );
-
- if ( $input_type == 'number' ) {
- $text_args['attributes']['min'] = $args['attributes']['data-min'];
- $text_args['attributes']['max'] = $args['attributes']['data-max'];
- $text_args['attributes']['step'] = $args['attributes']['data-step'];
- }
-
- $text_args['prefix'] = $args['prefix'];
- $text_args['postfix'] = $args['postfix'];
-
- // now setup the min / max vars for the fields
- $text_field_min = $text_args;
- $text_field_min['value'] = $args['attributes']['data-start-min-formatted'];
- $text_field_min['attributes']['class'] .= ' sf-range-min';
-
- $text_field_max = $text_args;
- $text_field_max['value'] = $args['attributes']['data-start-max-formatted'];
- $text_field_max['attributes']['class'] .= ' sf-range-max';
-
- $value_min_html = $this->text( $text_field_min );
- $value_max_html = $this->text( $text_field_max );
- }
-
- // prepare html
- $attibutes_html = $this->convert_attributes_to_html( $args['attributes'] );
-
- ob_start();
-
- ?>
-
- prepare_range_args( $args, 'radio' );
-
- $args['attributes']['class'] .= ' sf-meta-range-radio-fromto';
- // create the input fields
- $input_type = 'radio';
- $radio_args = array(
- 'name' => $args['name'],
- 'value' => '',
- 'options' => $args['options'],
- 'type' => $input_type,
- 'attributes' => array(
- 'class' => 'sf-input-range-radio',
- ),
- );
-
- $radio_args['prefix'] = $args['prefix'];
- $radio_args['postfix'] = $args['postfix'];
-
- // now setup the min / max vars for the fields
- $radio_field_min = $radio_args;
- $radio_field_min['name'] = $args['name'] . '_min';
- $radio_field_min['attributes']['class'] .= ' sf-range-min';
- $radio_field_min['defaults'] = array( $args['attributes']['data-start-min'] );
-
- $radio_field_max = $radio_args;
- $radio_field_max['name'] = $args['name'] . '_max';
- $radio_field_max['attributes']['class'] .= ' sf-range-max';
- $radio_field_max['defaults'] = array( $args['attributes']['data-start-max'] );
-
- $value_min_html = $this->radio( $radio_field_min );
- $value_max_html = $this->radio( $radio_field_max );
-
- // prepare html
- $attibutes_html = $this->convert_attributes_to_html( $args['attributes'] );
- ob_start();
-
- ?>
- >
-
-
-
-
- prepare_range_args( $args, 'select' );
-
- $args['attributes']['class'] .= ' sf-meta-range-select-fromto';
-
- // create the input fields
- $input_type = 'select';
-
- $accessibility_label = '';
- if ( isset( $args['accessibility_label'] ) ) {
- $accessibility_label = $args['accessibility_label'];
- }
-
- $select_args = array(
- 'name' => $args['name'],
- 'value' => '',
- 'accessibility_label' => $accessibility_label,
- 'options' => $args['options'],
- 'type' => $input_type,
- 'attributes' => array(
- 'class' => 'sf-input-range-select',
- ),
- );
-
- $select_args['prefix'] = $args['prefix'];
- $select_args['postfix'] = $args['postfix'];
-
- // now setup the min / max vars for the fields
- $select_field_min = $select_args;
- $select_field_min['name'] = $args['name'] . '_min';
- $select_field_min['attributes']['class'] .= ' sf-range-min';
- $select_field_min['defaults'] = array( $args['default_min'] );
-
- $select_field_max = $select_args;
- $select_field_max['name'] = $args['name'] . '_max';
- $select_field_max['attributes']['class'] .= ' sf-range-max';
- $select_field_max['defaults'] = array( $args['default_max'] );
-
- $value_min_html = $this->select( $select_field_min );
- $value_max_html = $this->select( $select_field_max );
-
- // prepare html
- $attibutes_html = $this->convert_attributes_to_html( $args['attributes'] );
- ob_start();
-
- ?>
- >
-
-
- prepare_range_args( $args, 'number' );
-
- // create the input fields
- $input_type = 'number';
-
- $accessibility_label = '';
- if ( isset( $args['accessibility_label'] ) ) {
- $accessibility_label = $args['accessibility_label'];
- }
-
- $text_args = array(
- 'name' => $args['name'],
- 'value' => '',
- 'accessibility_label' => $accessibility_label,
- 'type' => $input_type,
- 'attributes' => array(
- 'class' => 'sf-input-range-number',
- 'min' => $args['attributes']['data-min'],
- 'max' => $args['attributes']['data-max'],
- 'step' => $args['attributes']['data-step'],
- ),
- );
-
- $text_args['prefix'] = $args['prefix'];
- $text_args['postfix'] = $args['postfix'];
-
- // now setup the min / max vars for the fields
- $text_field_min = $text_args;
- $text_field_min['value'] = $args['attributes']['data-start-min'];
- $text_field_min['attributes']['class'] .= ' sf-range-min';
-
- $text_field_max = $text_args;
- $text_field_max['value'] = $args['attributes']['data-start-max'];
- $text_field_max['attributes']['class'] .= ' sf-range-max';
-
- $value_min_html = $this->text( $text_field_min );
- $value_max_html = $this->text( $text_field_max );
-
- // prepare html
- $attibutes_html = $this->convert_attributes_to_html( $args['attributes'] );
- ob_start();
-
- ?>
- >
-
-
-
-
- " . $args['range_value_prefix'] . '';
- }
- }
-
- if ( isset( $args['range_value_postfix'] ) ) {
- if ( $args['range_value_postfix'] != '' ) {
- $args['postfix'] = "" . $args['range_value_postfix'] . ' ';
- }
- }
-
- $args['type'] = 'range-' . $type;
-
- // filter the input arguments before the html is generated - allowing almost all options to be modified
- if ( has_filter( 'sf_input_object_pre' ) ) {
- $args = apply_filters( 'sf_input_object_pre', $args, $this->sfid );
- }
-
- return $args;
- }
-
-
- private function prepare_input_args( $args, $type ) {
- // init defaults
- $default_args = array(
- 'name' => '',
- 'defaults' => array(),
- 'options' => array(),
- 'attributes' => array(),
- 'accessibility_label' => '',
- );
-
- $input_args = array_replace( $default_args, $args ); // replace defaults with $args
-
- $input_args['attributes']['name'] = $input_args['name'] . '[]'; // setup name attribute
-
- // add required class to attributes list
- if ( ! isset( $input_args['attributes']['class'] ) ) {
- $input_args['attributes']['class'] = '';
- }
- // $input_args['attributes']['class'] .= ' '.SF_CLASS_PRE."input-".$type;
-
- if ( ! isset( $input_args['type'] ) ) {
- $input_args['type'] = $type;
- }
-
- $input_args['input_class'] = SF_CLASS_PRE . 'input-' . $input_args['type'];
-
- // $input_args['attributes']['class'] = trim($input_args['attributes']['class']);
-
- return $input_args;
- }
-
-
- public function convert_attributes_to_html( $attributes ) {
- $attibutes_html = '';
-
- if ( is_array( $attributes ) ) {
- foreach ( $attributes as $attribute_name => $attribute_val ) {
- $attibutes_html .= ' ' . $attribute_name . '="' . esc_attr( $attribute_val ) . '"';
- }
- }
-
- return $attibutes_html;
- }
-
-}
-
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-global.php b/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-global.php
deleted file mode 100644
index 25e3f1c5..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-global.php
+++ /dev/null
@@ -1,173 +0,0 @@
-plugin_slug = $plugin_slug;
-
- global $search_filter_post_cache;
- $this->post_cache = $search_filter_post_cache;
-
- $this->pagination_init = false;
-
- add_action( 'search_filter_prep_query', array( $this, 'set' ), 10 );
- add_action( 'search_filter_archive_query', array( $this, 'query_posts' ), 10 ); // legacy
- add_action( 'search_filter_do_query', array( $this, 'query_posts' ), 10 ); // legacy
- add_action( 'search_filter_query_posts', array( $this, 'query_posts' ), 10 );
- add_action( 'search_filter_setup_pagination', array( $this, 'setup_pagination' ), 10 );
- add_action( 'search_filter_remove_pagination', array( $this, 'remove_pagination' ), 10 );
-
- add_action( 'search_filter_pagination_init', array( $this, 'set_pagination_init' ), 10 );
- add_action( 'search_filter_pagination_unset', array( $this, 'set_pagination_unset' ), 10 );
- add_action( 'wp', array( $this, 'set_queried_object' ), 10 );
-
- // to prevent loops within loops, we need to keep track of which one is active
- add_action( 'loop_start', array( $this, 'loop_start' ), 10 );
- add_action( 'loop_end', array( $this, 'loop_end' ), 10 );
-
- $this->data = new stdClass();
- $this->form_count = new stdClass();
- $this->_GET = $_GET;
-
- }
-
- public function loop_start( $query ) {
- if ( $query->get( 'search_filter_id' ) ) {
- if ( SEARCH_FILTER_QUERY_DEBUG == true ) {
- echo "\r\n\r\n";
- }
-
- $this->active_loop_id = (int) $query->query_vars['search_filter_id'];
- }
-
- }
-
- public function loop_end( $query ) {
- if ( isset( $query->query_vars['search_filter_id'] ) ) {
- if ( (int) $query->query_vars['search_filter_id'] == $this->active_loop_id ) {
- $this->active_loop_id = 0;
- }
- }
-
- }
-
- public function set( $sfid ) {
- // $this->active_sfid = $sfid;
- if ( ! isset( $this->data->$sfid ) ) {
- $this->data->$sfid = new Search_Filter_Config( $this->plugin_slug, $sfid );
- }
- }
-
-
- public function setup_pagination( $sfid ) {
- if ( ! isset( $this->data->$sfid ) ) {
- $this->data->$sfid = new Search_Filter_Config( $this->plugin_slug, $sfid );
- }
-
- $this->data->$sfid->query->setup_pagination();
- }
-
- public function remove_pagination( $sfid ) {
- if ( ! isset( $this->data->$sfid ) ) {
- $this->data->$sfid = new Search_Filter_Config( $this->plugin_slug, $sfid );
- }
-
- $this->data->$sfid->query->remove_pagination();
- }
-
- public function query_posts( $sfid ) {
- // $this->active_sfid = $sfid;
- $this->get( $sfid )->query()->do_main_query();
- }
-
- public function get( $sfid ) {
- // $this->active_sfid = $sfid;
- if ( ! isset( $this->data->$sfid ) ) {
- $this->data->$sfid = new Search_Filter_Config( $this->plugin_slug, $sfid );
- }
-
- return $this->data->$sfid;
- }
-
- public function set_active_sfid( $sfid ) {
- $this->active_sfid = $sfid;
- }
- public function active_loop_id() {
- return $this->active_loop_id;
- }
-
- public function active_sfid() {
- return $this->active_sfid;
- }
-
- public function is_search_form( $sfid ) {
- return $this->get( $sfid )->is_valid_form();
- }
-
- public function set_pagination_init() {
- $this->pagination_init = true;
- }
-
- public function set_pagination_unset() {
- $this->pagination_init = false;
- }
-
- public function has_pagination_init() {
- return $this->pagination_init;
- }
- public function increment_form_count( $sfid ) {
- if ( ! isset( $this->form_count->$sfid ) ) {
- $this->form_count->$sfid = 0;
- }
-
- $this->form_count->$sfid++;
- }
- public function get_form_count( $sfid ) {
- if ( ! isset( $this->form_count->$sfid ) ) {
- $this->form_count->$sfid = 0;
- }
-
- return $this->form_count->$sfid;
- }
- public function set_queried_object() {
- $this->queried_object = get_queried_object();
- }
- public function get_queried_object() {
- if ( ( ! isset( $this->queried_object ) ) || ( empty( $this->queried_object ) ) ) {
- $this->set_queried_object();
- }
-
- return $this->queried_object;
-
- }
-
-}
-
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-query.php b/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-query.php
deleted file mode 100644
index 18749606..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-query.php
+++ /dev/null
@@ -1,1480 +0,0 @@
-sfid == 0 ) {
-
- $this->sfid = $sfid;
- $this->filter_operator = 'and';
- $this->table_name = $wpdb->prefix . 'search_filter_cache';
- $this->form_fields = $fields;
- $this->form_settings = $settings;
-
- $this->cache = new Search_Filter_Cache( $sfid, $settings, $fields, $filters );
- /*
- * Call $plugin_slug from public plugin class.
- */
-
- global $searchandfilter;
-
- if ( isset( $this->form_settings['display_results_as'] ) ) {
- if ( $this->form_settings['display_results_as'] == 'archive' ) {
- add_action( 'pre_get_posts', array( $this, 'setup_archive_query' ), 200 );
- }
- }
-
- add_filter( 'sf_edit_query_args', array( $this, 'sf_filter_query_args' ), 10, 2 );
- add_action( 'parse_query', array( $this, 'disable_canonical_redirect' ) ); // for shortcode methods
-
- // $this->init($sfid);
- }
-
- }
- public function disable_canonical_redirect() {
- remove_filter( 'template_redirect', 'redirect_canonical' );
- add_filter( 'redirect_canonical', '__return_false' );
- }
- public function do_main_query() {
- $this->prep_query();
-
- $args = $this->query_args;
-
- query_posts( $args );
- }
- public function filter_next_query( $skip = 0 ) {
- $this->filter_next_skip = $skip;
- add_action( 'pre_get_posts', array( $this, 'setup_next_query' ), 200 );
- }
-
- public function hook_setup_archive_query() {
- add_action( 'pre_get_posts', array( $this, 'setup_archive_query' ), 200 );
- }
-
- public function setup_custom_query( $query ) {
- global $searchandfilter;
- $searchform = $searchandfilter->get( $this->sfid );
-
- $this->disable_canonical_redirect();
- $this->prep_query();
-
- if ( ! $searchandfilter->has_pagination_init() ) {
- add_filter( 'get_pagenum_link', array( $this, 'pagination_fix_pagenum' ), 100 );
- add_filter( 'paginate_links', array( $this, 'pagination_fix_paginate' ), 100 );
-
- do_action( 'search_filter_pagination_init' );
- }
-
- // convert already init args and set under pre_get_posts
- foreach ( $this->query_args as $key => $val ) {
- $query->set( $key, $val );
- }
-
- $force_is_search = $searchform->settings( 'force_is_search' );
- if ( $force_is_search == 1 ) {
- $query->set( 'is_search', true );
- $query->is_search = true;
- }
-
- $force_is_archive = $searchform->settings( 'force_is_archive' );
- if ( $force_is_archive == 1 ) {
- $query->set( 'is_archive', true );
- $query->is_archive = true;
- }
- }
-
- public function setup_next_query( $query ) {
- if ( $this->filter_next_skip == 0 ) {
- $this->setup_custom_query( $query );
- remove_action( 'pre_get_posts', array( $this, 'setup_next_query' ), 200 );
- } else {
- $this->filter_next_skip--;
- }
-
- }
- public function setup_wc_query( $query ) {
-
- // $this->prep_query();
- $this->filter_pre_get_posts( $query );
- }
-
- public function setup_archive_query( $query, $is_custom_query = false ) {
- if ( ! $is_custom_query ) {
- if ( ! $query->is_main_query() ) {
- return;
- }
- }
-
- global $searchandfilter;
-
- $display_results_as = $searchandfilter->get( $this->sfid )->settings( 'display_results_as' );
-
- $enable_taxonomy_archives = $searchandfilter->get( $this->sfid )->settings( 'enable_taxonomy_archives' );
-
- // for post_type_archive results
- $post_types_arr = $searchandfilter->get( $this->sfid )->settings( 'post_types' );
- $post_types = array();
- if ( is_array( $post_types_arr ) ) {
- $post_types = array_keys( $post_types_arr );
- }
-
- $filter_query = false;
-
- // if(($display_results_as=="archive")||($display_results_as=="custom_woocommerce_store")||($display_results_as=="custom_edd_store"))
- if ( ( $display_results_as == 'archive' ) && ( $query->is_main_query() ) ) {
- $filter_query = true;
- } elseif ( $display_results_as == 'custom_woocommerce_store' ) {
- if ( function_exists( 'is_shop' ) ) {
- if ( is_shop() && $query->is_main_query() ) {
- add_filter( 'woocommerce_redirect_single_search_result', '__return_false' );
- // $filter_query = true;
- // add_action( 'woocommerce_product_query', array($this, 'setup_wc_query') );
- }
- }
-
- /*
- $post_type = "product";
- if(( $query->is_main_query() ) && ($enable_taxonomy_archives==1) && ( Search_Filter_Wp_Data::is_taxonomy_archive($query) ) )
- {
- //now check to make sure this taxonomy belongs to the post type
- if(isset($query->tax_query))
- {
- if(isset($query->tax_query->queried_terms))
- {
- $taxonomy_names = array_keys($query->tax_query->queried_terms);
- if(count($taxonomy_names)==1)
- {
- $taxonomy_name = $taxonomy_names[0];
- $taxonomies = get_object_taxonomies( $post_type );
- $is_taxonomy_archive = in_array( $taxonomy_name, $taxonomies );
-
- if ($is_taxonomy_archive) {
- $filter_query = true;
- //add_action( 'woocommerce_product_query', array($this, 'setup_wc_query') );
- }
- }
- }
- }
- }*/
-
- } elseif ( $display_results_as == 'post_type_archive' ) {
- if ( isset( $post_types[0] ) ) {
- $post_type = $post_types[0];
-
- if ( ( is_post_type_archive( $post_type ) ) && ( $query->is_main_query() ) && ( ( ! $query->is_tax() ) && ( ! $query->is_category() ) && ( ! $query->is_tag() ) ) ) {
- $filter_query = true;
- } elseif ( ( $query->is_main_query() ) && ( $enable_taxonomy_archives == 1 ) && ( Search_Filter_Wp_Data::is_taxonomy_archive( $query ) ) ) {
- // now check to make sure this taxonomy belongs to the post type
- if ( isset( $query->tax_query ) ) {
- if ( isset( $query->tax_query->queried_terms ) ) {
- $taxonomy_names = array_keys( $query->tax_query->queried_terms );
-
- if ( count( $taxonomy_names ) > 0 ) {// there should only be one really, but sometimes plugins like poly lange will add a taxonomy filter
-
- $taxonomy_name = $taxonomy_names[0];
- $taxonomies = get_object_taxonomies( $post_type );
- $is_taxonomy_archive = in_array( $taxonomy_name, $taxonomies );
-
- if ( $is_taxonomy_archive ) {
-
- $filter_query = true;
- }
- }
- }
- }
- } elseif ( ( $post_type == 'post' ) && ( is_home() ) ) {// this then works on the blog page (is_home) set in `settings -> reading -> "a static page" -> posts page
- $filter_query = true;
- } else {
-
- }
- }
- }
-
- if ( ( $filter_query ) && ( ! is_admin() ) ) {
- $this->filter_pre_get_posts( $query );
- }
- }
-
- public function filter_pre_get_posts( $query ) {
- global $searchandfilter;
-
- $this->disable_canonical_redirect();
- $this->prep_query();
-
- $force_is_search = $searchandfilter->get( $this->sfid )->settings( 'force_is_search' );
- $force_is_archive = $searchandfilter->get( $this->sfid )->settings( 'force_is_archive' );
-
- global $searchandfilter;
- if ( ! $searchandfilter->has_pagination_init() ) {
-
- add_filter( 'get_pagenum_link', array( $this, 'pagination_fix_pagenum' ), 100 );
- add_filter( 'paginate_links', array( $this, 'pagination_fix_paginate' ), 100 );
-
- do_action( 'search_filter_pagination_init' );
- }
-
- // convert already init args and set under pre_get_posts
- foreach ( $this->query_args as $key => $val ) {
- $query->set( $key, $val );
- }
-
- if ( has_filter( 'sf_main_query_pre_get_posts' ) ) {
- $query = apply_filters( 'sf_main_query_pre_get_posts', $query, $this->sfid );
- }
-
- if ( $force_is_search == 1 ) {
- $query->set( 'is_search', true );
- $query->is_search = true;
- }
- if ( $force_is_archive == 1 ) {
- $query->set( 'is_archive', true );
- $query->is_archive = true;
- }
-
- }
- public function setup_edd_query( $args ) {
- global $searchandfilter;
-
- // $display_results_as = $searchandfilter->get($this->sfid)->settings("display_results_as");
-
- $this->prep_query();
-
- if ( ! $searchandfilter->has_pagination_init() ) {
- add_filter( 'get_pagenum_link', array( $this, 'pagination_fix_pagenum' ), 100 );
- add_filter( 'paginate_links', array( $this, 'pagination_fix_paginate' ), 100 );
-
- do_action( 'search_filter_pagination_init' );
- }
-
- $args = array_merge( $args, $this->query_args );
-
- return $args;
- }
-
- public function setup_pagination() {
- global $searchandfilter;
- if ( ! $searchandfilter->has_pagination_init() ) {
- $init_pagination = true;
-
- if ( has_filter( 'search_filter_do_pagination' ) ) {
- $init_pagination = apply_filters( 'search_filter_do_pagination', $init_pagination );
- }
-
- if ( $init_pagination ) {
- add_filter( 'get_pagenum_link', array( $this, 'pagination_fix_pagenum' ), 100 );
- add_filter( 'paginate_links', array( $this, 'pagination_fix_paginate' ), 100 );
-
- do_action( 'search_filter_pagination_init' );
- }
- }
-
- }
-
- public function remove_pagination() {
- global $searchandfilter;
- if ( $searchandfilter->has_pagination_init() ) {
- remove_filter( 'get_pagenum_link', array( $this, 'pagination_fix_pagenum' ), 100 );
- remove_filter( 'paginate_links', array( $this, 'pagination_fix_paginate' ), 100 );
- do_action( 'search_filter_pagination_unset' );
-
- }
-
- }
-
- public function prep_query( $all_terms = false ) {
- global $wpdb;
- global $searchandfilter;
-
- if ( $this->has_prep_query == false ) {// only run once
-
- $this->has_prep_query = true;
-
- // apply filter logic from cache, and `sf_edit_query_args` filter
- $this->query_args = $this->cache->filter_query_args( $this->query_args, $all_terms );
-
- if ( has_filter( 'sf_query_post__in' ) ) {
- $this->query_args['post__in'] = apply_filters( 'sf_query_post__in', $this->query_args['post__in'], $this->sfid );
- }
-
- if ( ( $all_terms == true ) && ( $this->has_prep_terms == false ) ) {
- $this->has_prep_terms = true;
- }
-
- if ( has_filter( 'sf_apply_filter_sort_post__in' ) ) {
-
- // only apply anything here if there has been no custom user sort
- if ( $this->sort_type == 'default' ) {
- $post__in = apply_filters( 'sf_apply_filter_sort_post__in', $this->query_args['post__in'], $this->query_args, $this->sfid );
-
- $this->query_args['post__in'] = $post__in;
-
- // if this filter exists, we want a custom sort on post__in
- $this->query_args['orderby'] = 'post__in';
- }
- }
-
- $this->add_permalink_filters();
- } elseif ( ( $all_terms == true ) && ( $this->has_prep_terms == false ) ) {
- $this->has_prep_terms = true;
- $this->cache->init_all_filter_terms();
- }
-
- }
-
- public function add_permalink_filters() {
- // apply any regular WP_Query logic
- global $searchandfilter;
-
- }
- public function remove_permalink_filters() {
- global $searchandfilter;
-
- }
-
- public function maintain_search_settings( $url ) {
-
- $tGET = $_GET;
- unset( $tGET['action'] );
- unset( $tGET['paged'] );
- unset( $tGET['sfid'] );
- unset( $tGET['lang'] );
- unset( $tGET['page_id'] );
-
- if ( isset( $tGET['s'] ) ) {
- $tGET['_sf_s'] = $tGET['s'];
- unset( $tGET['s'] );
- }
- foreach ( $tGET as &$get ) {
- $get = str_replace( ' ', '+', $get ); // force + signs back in - otherwise WP seems to strip just " "
- }
-
- return add_query_arg( $tGET, $url );
-
- // return $url;
- }
-
- // grabs all post IDs for the filter name/term - possibly do 1 query for all??
-
-
- public function sf_filter_query_args( $query_args, $sfid ) {
-
- if ( $this->sfid == $sfid ) {
- $query_args = $this->get_wp_query_args( $query_args );
- }
-
- return $query_args;
- }
-
- public function get_wp_query_args( $args ) {
- // ajax paged value
- $sfpaged = 1;
- if ( isset( $_GET['sf_paged'] ) ) {
- $sfpaged = (int) $_GET['sf_paged'];
- global $paged;
- $paged = $sfpaged;
- set_query_var( 'paged', $paged ); // some plugins / themes use `get_query_var`, they often shouldn't
- }
-
- // regular paged value - normally found when loading the page (non ajax)
- $args['paged'] = $sfpaged;
- $args['search_filter_id'] = $this->sfid;
- $args['search_filter_override'] = false;
-
- $args = $this->filter_settings( $args );
- $args = $this->filter_query_search_term( $args );
- $args = $this->filter_query_post_types( $args );
- $args = $this->filter_query_author( $args );
- // $args = $this->filter_query_tax_meta($args);
- $args = $this->filter_query_sort_order( $args );
- $args = $this->filter_query_posts_per_page( $args );
- $args = $this->filter_query_post_date( $args );
- $args = $this->filter_query_inherited_defaults( $args );
- // $args = $this->filter_query_hidden($args);
-
- return $args;
- }
-
- private function filter_query_hidden( $args ) {
- global $searchandfilter;
- $display_results_as = $searchandfilter->get( $this->sfid )->settings( 'display_results_as' );
- $enable_taxonomy_archives = $searchandfilter->get( $this->sfid )->settings( 'enable_taxonomy_archives' );
-
- $post_types_arr = $searchandfilter->get( $this->sfid )->settings( 'post_types' );
- $post_types = array();
- if ( is_array( $post_types_arr ) ) {
- $post_types = array_keys( $post_types_arr );
- }
-
- if ( $display_results_as == 'post_type_archive' ) {
- if ( $enable_taxonomy_archives == 1 ) {
- if ( ! isset( $post_types[0] ) ) {
- return;
- }
-
- $post_type = $post_types[0];
- // $is_taxonomy_archive = false;
-
- if ( is_tax() || is_tag() || is_category() ) {
- global $searchandfilter;
- $term = $searchandfilter->get_queried_object();
- $taxonomy_name = $term->taxonomy;
- $taxonomies = get_object_taxonomies( $post_type );
- $is_taxonomy_archive = in_array( $taxonomy_name, $taxonomies );
-
- if ( $is_taxonomy_archive ) {
-
- $field_name = '_sft_' . $taxonomy_name;
- $field_value = $term->slug;
-
- $_GET[ $field_name ] = $field_value;
- }
- }
- }
- }
-
- if ( isset( $this->form_settings['inherit_current_post_type_archive'] ) ) {
-
- if ( $this->form_settings['inherit_current_post_type_archive'] == '1' ) {
- // if(is_post_type_archive())
- if ( ( is_post_type_archive() ) && ( ( ! is_tax() ) && ( ! is_category() ) && ( ! is_tag() ) ) ) {
- $post_type_slug = get_post_type();
-
- if ( $post_type_slug ) {
- $args['post_type'] = $post_type_slug;
- // $args['post_type'] = array($post_type_slug);
- }
- } elseif ( is_home() ) {// this is the same as the "posts" archive
-
- }
- }
- }
-
- if ( isset( $this->form_settings['inherit_current_author_archive'] ) ) {
- if ( $this->form_settings['inherit_current_author_archive'] == '1' ) {
- global $wp_query;
-
- if ( is_author() ) {
- global $searchandfilter;
- $author = $searchandfilter->get_queried_object();
-
- $args['author'] = $author->ID; // here we set the post types that we want WP to search
- }
- }
- }
-
- return $args;
- }
-
- private function filter_query_inherited_defaults( $args ) {
- if ( isset( $this->form_settings['inherit_current_post_type_archive'] ) ) {
-
- if ( $this->form_settings['inherit_current_post_type_archive'] == '1' ) {
- // if(is_post_type_archive())
- if ( ( is_post_type_archive() ) && ( ( ! is_tax() ) && ( ! is_category() ) && ( ! is_tag() ) ) ) {
- $post_type_slug = get_post_type();
-
- if ( $post_type_slug ) {
- $args['post_type'] = $post_type_slug;
- // $args['post_type'] = array($post_type_slug);
- }
- } elseif ( is_home() ) {// this is the same as the "posts" archive
-
- }
- }
- }
-
- if ( isset( $this->form_settings['inherit_current_author_archive'] ) ) {
- if ( $this->form_settings['inherit_current_author_archive'] == '1' ) {
- global $wp_query;
-
- if ( is_author() ) {
- global $searchandfilter;
- $author = $searchandfilter->get_queried_object();
-
- $args['author'] = $author->ID; // here we set the post types that we want WP to search
- }
- }
- }
-
- return $args;
- }
-
- public function filter_query_search_term( $args ) {
- global $wp_query;
- global $searchandfilter;
-
- if ( isset( $_GET['_sf_s'] ) ) {
- $search_term = trim( urldecode( stripslashes( $_GET['_sf_s'] ) ) );
- $args['s'] = $search_term;
- }
-
- return $args;
- }
-
- public function filter_query_post_types( $args ) {
- global $wp_query;
- global $searchandfilter;
- $searchform = $searchandfilter->get( $this->sfid );
-
- if ( isset( $_GET['post_types'] ) ) {
- $post_types_filter = array();
- $form_post_types = array();
-
- $post_types = $searchform->settings( 'post_types' );
- if ( $post_types ) {
- if ( is_array( $post_types ) ) {
- foreach ( $post_types as $key => $value ) {
- array_push( $form_post_types, $key );
- }
- }
- }
-
- $user_post_types = explode( ',', esc_attr( $_GET['post_types'] ) );
-
- if ( isset( $user_post_types ) ) {
- if ( is_array( $user_post_types ) ) {
- // this means the user has submitted some post types
- foreach ( $user_post_types as $upt ) {
- if ( in_array( $upt, $form_post_types ) ) {
- array_push( $post_types_filter, $upt );
- }
- }
- }
- }
-
- $args['post_type'] = $post_types_filter; // here we set the post types that we want WP to search
-
- } else {
- $form_post_types = array();
- $post_types = $searchform->settings( 'post_types' );
-
- if ( $post_types ) {
- if ( is_array( $post_types ) ) {
- foreach ( $post_types as $key => $value ) {
- array_push( $form_post_types, $key );
- }
- }
- }
-
- $args['post_type'] = $form_post_types;
- }
-
- // if its a single post type, get rid of array - helps with some compatibility issues where themes are not expecting an array here
- if ( count( $args['post_type'] ) == 1 ) {
- $args['post_type'] = $args['post_type'][0];
- }
-
- if ( $searchform->settings( 'force_is_search' ) == 1 ) {
- $args['is_search'] = true;
- }
-
- if ( $searchform->settings( 'force_is_archive' ) == 1 ) {
- $args['is_archive'] = true;
- }
-
- return $args;
- }
-
-
-
- public function filter_query_author( $args ) {
- global $wp_query;
-
- if ( isset( $_GET['authors'] ) ) {
-
- $authors = explode( ',', esc_attr( $_GET['authors'] ) );
- foreach ( $authors as &$author ) {
- $the_author = get_user_by( 'slug', esc_attr( $author ) );
- $author = intval( $the_author->ID );
- }
-
- $args['author'] = implode( ',', $authors ); // here we set the post types that we want WP to search
- }
-
- return $args;
- }
-
- public function filter_query_posts_per_page( $args ) {
- if ( isset( $_GET['_sf_ppp'] ) ) {
- $args['posts_per_page'] = (int) $_GET['_sf_ppp'];
- }
-
- return $args;
- }
- public function filter_query_sort_order( $args ) {
- global $wp_query;
-
- if ( isset( $_GET['orderby'] ) ) {
- return $args;
- }
-
- $built_in_sort_types = array( 'decimal', 'date', 'datetime' );
-
- if ( isset( $_GET['sort_order'] ) ) {
- $search_all = false;
-
- // $sort_order_arr = explode("+",esc_attr(urlencode($_GET['sort_order'])));
- $sort_order_arr = explode( ' ', esc_attr( $_GET['sort_order'] ) );
- $sort_arr_length = count( $sort_order_arr );
-
- $this->sort_type = 'user';
-
- // check both elems in arr exist - field name [0] and direction [1]
- if ( $sort_arr_length >= 2 ) {
- $sort_order_arr[1] = strtoupper( $sort_order_arr[1] );
- if ( ( $sort_order_arr[1] == 'ASC' ) || ( $sort_order_arr[1] == 'DESC' ) ) {
- if ( $this->is_meta_value( $sort_order_arr[0] ) ) {
- $sort_by = 'meta_value';
-
- $meta_type = '';
- if ( isset( $sort_order_arr[2] ) ) {
- $meta_type = strtolower( $sort_order_arr[2] );
- }
-
- if ( $meta_type == 'num' ) {
- $sort_by = 'meta_value_num';
- $meta_type = '';
- }
-
- $meta_key = substr( $sort_order_arr[0], strlen( SF_META_PRE ) );
-
- $args['orderby'] = $sort_by;
- $args['order'] = $sort_order_arr[1];
- $args['meta_key'] = $meta_key;
-
- if ( $meta_type != '' ) {
- $args['meta_type'] = strtoupper( $meta_type );
- }
- } else {
- $sort_by = $sort_order_arr[0];
- if ( $sort_by == 'id' ) {
- $sort_by = 'ID';
- }
-
- $args['orderby'] = $sort_by;
- $args['order'] = $sort_order_arr[1];
- }
- }
- }
- } else {
- $this->sort_type = 'default';
-
- global $searchandfilter;
- $searchform = $searchandfilter->get( $this->sfid );
-
- $sort_arr = array(); // this contains all the options from the settings in array format
-
- $default_sort_order = array(
-
- 'sort_by' => $searchform->settings( 'default_sort_by' ),
- 'sort_dir' => strtoupper( $searchform->settings( 'default_sort_dir' ) ),
- 'meta_key' => $searchform->settings( 'default_meta_key' ),
- 'sort_type' => $searchform->settings( 'default_sort_type' ),
- );
-
- $secondary_sort_order = array(
-
- 'sort_by' => $searchform->settings( 'secondary_sort_by' ),
- 'sort_dir' => strtoupper( $searchform->settings( 'secondary_sort_dir' ) ),
- 'meta_key' => $searchform->settings( 'secondary_meta_key' ),
- 'sort_type' => $searchform->settings( 'secondary_sort_type' ),
- );
-
- array_push( $sort_arr, $default_sort_order );
- array_push( $sort_arr, $secondary_sort_order );
-
- $order_by = array();
-
- foreach ( $sort_arr as $sort_order ) {
- if ( isset( $sort_order['sort_by'] ) ) {
- if ( $sort_order['sort_by'] != '0' ) {
- if ( $sort_order['sort_by'] == 'meta_value' ) {
- $order_by[ $sort_order['meta_key'] ] = $sort_order['sort_dir'];
-
- if ( in_array( $sort_order['sort_type'], $built_in_sort_types ) ) {
- $meta_type = strtoupper( $sort_order['sort_type'] );
- } else {
- $meta_type = ( $sort_order['sort_type'] == 'numeric' ) ? 'DECIMAL(12,4)' : 'CHAR';
- }
-
- $meta_query = array(
-
- 'key' => $sort_order['meta_key'],
- 'type' => $meta_type,
- 'compare' => 'EXISTS',
- );
-
- if ( ! isset( $args['meta_query'] ) ) {
- $args['meta_query'] = array();
- }
-
- $args['meta_query'][ $sort_order['meta_key'] ] = $meta_query;
-
- } else {
- $order_by[ $sort_order['sort_by'] ] = $sort_order['sort_dir'];
- }
- }
- }
- }
-
- if ( ! empty( $order_by ) ) {
- $args['orderby'] = $order_by;
- }
- }
-
- return $args;
- }
-
- public function filter_query_post_date( $args ) {
- global $wp_query;
-
- if ( isset( $_GET['post_date'] ) ) {
- // get post dates into array
- $post_date = explode( '+', esc_attr( urlencode( $_GET['post_date'] ) ) );
-
- if ( ! empty( $post_date ) ) {
- global $searchandfilter;
- $post_date_field = $searchandfilter->get( $this->sfid )->get_field_by_key( 'post_date' );
-
- if ( ! $post_date_field ) {
- return $args;
- }
-
- $date_format = 'm/d/Y';
-
- if ( isset( $post_date_field['date_format'] ) ) {
- $date_format = $post_date_field['date_format'];
- }
-
- // if there is more than 1 post date and the dates are not the same
- if ( count( $post_date ) > 1 && $post_date[0] != $post_date[1] ) {
-
- if ( ( ! empty( $post_date[0] ) ) && ( ! empty( $post_date[1] ) ) ) {
-
- $fromDate = $this->getDateDMY( $post_date[0], $date_format );
- $toDate = $this->getDateDMY( $post_date[1], $date_format );
-
- $args['date_query'] = array(
- 'after' => array(
- 'day' => $fromDate['day'],
- 'month' => $fromDate['month'],
- 'year' => $fromDate['year'],
- // 'compare' => '>='
- ),
- 'before' => array(
- 'day' => $toDate['day'],
- 'month' => $toDate['month'],
- 'year' => $toDate['year'],
- // 'compare' => '<='
- ),
- 'inclusive' => true,
- );
- }
- } else { // else we are dealing with one date or both dates are the same (so need to find posts for a single day)
-
- if ( ! empty( $post_date[0] ) ) {
- $theDate = $this->getDateDMY( $post_date[0], $date_format );
-
- $args['year'] = $theDate['year'];
- $args['monthnum'] = $theDate['month'];
- $args['day'] = $theDate['day'];
- }
- }
- }
- }
-
- return $args;
- }
-
- public function is_meta_value( $key ) {
- if ( substr( $key, 0, 5 ) === SF_META_PRE ) {
- return true;
- }
- return false;
- }
-
- public function is_taxonomy_key( $key ) {
- if ( substr( $key, 0, 5 ) === SF_TAX_PRE ) {
- return true;
- }
- return false;
- }
-
- public function getDateDMY( $date, $date_format ) {
- if ( $date_format == 'm/d/Y' ) {
- $month = substr( $date, 0, 2 );
- $day = substr( $date, 2, 2 );
- $year = substr( $date, 4, 4 );
- } elseif ( $date_format == 'd/m/Y' ) {
- $month = substr( $date, 2, 2 );
- $day = substr( $date, 0, 2 );
- $year = substr( $date, 4, 4 );
- } elseif ( $date_format == 'Y/m/d' ) {
-
- $month = substr( $date, 4, 2 );
- $day = substr( $date, 6, 2 );
- $year = substr( $date, 0, 4 );
-
- }
-
- $rdate['year'] = $year;
- $rdate['month'] = $month;
- $rdate['day'] = $day;
-
- return $rdate;
- }
-
- public function get_query_object() {
- return $this->the_results( true );
- }
-
-
- public function the_results( $get_query = false ) {
- global $searchandfilter;
-
- $this->prep_query();
-
- $args = $this->query_args;
-
- $returnvar = '';
-
- // add_action('posts_where', array($this, 'filter_meta_query_where'));
- // add_action('posts_join' , array($this, 'filter_meta_join'));
-
- // Attach hook to filter WHERE clause.
- // add_filter('posts_where', array($this,'limit_date_range_query'));
- // Remove the filter after it is executed.
- // add_action('posts_selection', array($this,'remove_limit_date_range_query'));
-
- /*
- if($searchandfilter->get($this->sfid)->settings("maintain_state")==1)
- {
- add_filter('the_permalink', array($this, 'maintain_search_settings'));
- }*/
-
- if ( ! $searchandfilter->has_pagination_init() ) {
- add_filter( 'get_pagenum_link', array( $this, 'pagination_fix_pagenum' ), 100 );
- add_filter( 'paginate_links', array( $this, 'pagination_fix_paginate' ), 100 );
-
- do_action( 'search_filter_pagination_init' );
- }
-
- // we only store the query in transient for the default query (unfiltered), as this is likely the most visited page, and doing it for every combination of filter would blow up the DB
- // Search_Filter_Helper::start_log("shortcode query");
-
- // $use_transients = get_option( 'search_filter_cache_use_transients' );
- // $query_str = $searchandfilter->get($this->sfid)->current_query()->get_query_str();
-
- $cache_key = 'results_query_' . $this->sfid;
-
- $query_trans = array();
- /*
- if(($use_transients==1)&&($query_str==""))
- {
- $query_trans = Search_Filter_Wp_Cache::get_transient( $cache_key );
- }*/
-
- if ( ( empty( $query_trans ) ) || ( $query_trans == false ) ) {
- $query = new WP_Query( $args );
- /*
- if(($use_transients==1)&&($query_str=="")) {
- Search_Filter_Wp_Cache::set_transient( $cache_key, $query);
- }*/
- } else {
- $query = $query_trans;
- }
-
- // Search_Filter_Helper::finish_log("shortcode query");
-
- if ( $get_query ) {
- return $query;
- }
-
- ob_start();
-
- // first check to see if there is a search form that matches the ID of this form
- if ( $overridden_template = locate_template( 'search-filter/' . $this->sfid . '.php' ) ) {
- // locate_template() returns path to file
- // if either the child theme or the parent theme have overridden the template
- include $overridden_template;
-
- } else {
-
- // the check for the default template (results.php)
-
- if ( $overridden_template = locate_template( 'search-filter/results.php' ) ) {
- // locate_template() returns path to file
- // if either the child theme or the parent theme have overridden the template
- include $overridden_template;
-
- } else {
- // If neither the child nor parent theme have overridden the template,
- // we load the template from the 'templates' sub-directory of the directory this file is in
- include plugin_dir_path( SEARCH_FILTER_PRO_BASE_PATH ) . '/templates/results.php';
- }
- }
-
- $returnvar = ob_get_clean();
-
- wp_reset_postdata();
-
- return $returnvar;
-
- }
-
- public function pagination_fix_pagenum( $url ) {
- $new_url = $this->pagination_fix( $url );
- return $new_url;
- }
- public function pagination_fix_paginate( $url ) {
- $new_url = $this->pagination_fix( $url );
- return $new_url;
- }
-
- public function get_page_no_from_url( $url ) {
- $url = str_replace( '&', '&', $url );
- $url = str_replace( '#038;', '&', $url );
-
- $url_query = parse_url( $url, PHP_URL_QUERY );
- $url_args = array();
- if ( $url_query !== null ) {
- parse_str( $url_query, $url_args );
- }
- $sf_page_no = 0;
-
- if ( isset( $url_args['paged'] ) ) {
- $sf_page_no = (int) $url_args['paged'];
- } elseif ( $this->has_url_var( $url, 'page' ) ) {// try to get page number from permalink url
- $sf_page_no = (int) $this->get_url_var( $url, 'page' );
- } elseif ( $this->last_url_param_is_page_no( $url ) ) {// try to get page number from permalink url
- $sf_page_no = (int) $this->last_url_param( $url );
- } elseif ( isset( $url_args['product-page'] ) ) {// then its woocommerce product shortcode pagination
-
- $sf_page_no = (int) ( $url_args['product-page'] );
- } elseif ( isset( $url_args['sf_paged'] ) ) { /* sf_paged check needs to be last, because we will always add it on anyway */
-
- $current_page = 1;
- if ( isset( $_GET['sf_paged'] ) ) {
- $current_page = (int) $_GET['sf_paged'];
- }
-
- // little hack to stop appending `sf_paged` to urls pointing to page 1, where `?sf_paged` is appended to the current URL (and therefor automatically adding it to all pagination links)
- // so if the sf_paged value equals the current pages sf_paged value, don't add it to the URL - who wants pagination linking to the current page anyway
- if ( $current_page != (int) $url_args['sf_paged'] ) {
- $sf_page_no = (int) $url_args['sf_paged'];
- }
- }
-
- return $sf_page_no;
-
- }
- public function get_results_url( $searchform ) {
- $display_results_as = $searchform->settings( 'display_results_as' );
- $enable_taxonomy_archives = $searchform->settings( 'enable_taxonomy_archives' );
-
- $results_url = '';
-
- if ( $display_results_as == 'shortcode' ) {
- $results_url = $searchform->settings( 'results_url' );
- } elseif ( $display_results_as == 'archive' ) {
- $results_url = home_url( '?sfid=' . $this->sfid );
- $page_slug = '';
-
- if ( get_option( 'permalink_structure' ) ) {
- $page_slug = $searchform->settings( 'page_slug' );
- $home_url = home_url( $page_slug );
-
- if ( $page_slug != '' ) {
- if ( strpos( $home_url, '?' ) !== false ) {
- $results_url = home_url( $page_slug );
- } else {
- $results_url = trailingslashit( home_url( $page_slug ) );
- }
- }
- }
-
- if ( has_filter( 'sf_archive_results_url' ) ) {
-
- $results_url = apply_filters( 'sf_archive_results_url', $results_url, $this->sfid, $page_slug );
- }
- } elseif ( ( $display_results_as == 'custom_woocommerce_store' ) && ( Search_Filter_Helper::wc_get_page_id() ) ) {
- if ( get_option( 'permalink_structure' ) ) {
- $results_url = get_permalink( Search_Filter_Helper::wc_get_page_id( 'shop' ) );
- } else {
- $results_url = home_url( '?post_type=product' );
- }
-
- $post_type = 'product';
-
- $searchform->query()->remove_permalink_filters();
- if ( get_option( 'permalink_structure' ) ) {
- $results_url = get_permalink( Search_Filter_Helper::wc_get_page_id( 'shop' ) );
- }
- $searchform->query()->add_permalink_filters();
-
- $has_tax_in_fields = false;
- $is_tax_archive = false;
-
- if ( Search_Filter_Wp_Data::is_taxonomy_archive_of_post_type( $post_type, false ) ) {
- $is_tax_archive = true;
- global $searchandfilter;
- $term = $searchandfilter->get_queried_object();
- $filters = $searchform->get_filters();
- if ( in_array( '_sft_' . $term->taxonomy, $filters ) ) {
- $has_tax_in_fields = true;
- }
- }
-
- if ( /* ($enable_taxonomy_archives == 1) && ($has_tax_in_fields == true) && */ ( $is_tax_archive ) ) {
-
- $results_url = get_term_link( $term );
- }
- } elseif ( $display_results_as == 'post_type_archive' ) {
- $enable_taxonomy_archives = $searchform->settings( 'enable_taxonomy_archives' );
-
- if ( is_array( $searchform->settings( 'post_types' ) ) ) {
- $post_types = array_keys( $searchform->settings( 'post_types' ) );
-
- if ( isset( $post_types[0] ) ) {
-
- $is_tax_archive = false;
- $post_type = $post_types[0];
- $has_tax_in_fields = false;
-
- if ( Search_Filter_Wp_Data::is_taxonomy_archive_of_post_type( $post_type ) ) {
- $is_tax_archive = true;
- global $searchandfilter;
- $term = $searchandfilter->get_queried_object();
- $filters = $searchform->get_filters();
- if ( in_array( '_sft_' . $term->taxonomy, $filters ) ) {
- $has_tax_in_fields = true;
- }
- }
-
- if ( /* ($enable_taxonomy_archives==1) && ($has_tax_in_fields==true) && */ ( $is_tax_archive ) ) {
-
- $results_url = get_term_link( $term );
- } else {
-
- //
- // if (($enable_taxonomy_archives==1) && ($is_tax_archive) ) {
- // $results_url = get_term_link($term);
- // }
- // else {
- if ( $post_type == 'post' ) {
- if ( get_option( 'show_on_front' ) == 'page' ) {
- $results_url = get_permalink( get_option( 'page_for_posts' ) );
- } else {
- $results_url = home_url( '/' );
- }
- } else {
- $results_url = get_post_type_archive_link( $post_type );
- }
- // }
-
- }
- }
- }
- } elseif ( $display_results_as == 'custom' ) {
- $results_url = $searchform->settings( 'results_url' );
- } else {
- $results_url = $searchform->settings( 'results_url' );
- }
-
- if ( $results_url != '' ) {
- if ( has_filter( 'sf_results_url' ) ) {
-
- $results_url = apply_filters( 'sf_results_url', $results_url, $this->sfid );
- }
- }
-
- return $results_url;
- }
- public function add_paged_to_url( $url, $page_no ) {
- if ( $page_no > 1 ) {
- $url = add_query_arg( 'sf_paged', $page_no, $url );
- }
-
- return $url;
- }
-
- public function add_url_args( $source_url, $dest_url, $display_results_as ) {
-
- $url_query = parse_url( $source_url, PHP_URL_QUERY );
- $url_args = array();
-
- if ( $url_query !== null ) {
- parse_str( $url_query, $url_args ); // url decodes the vals
- }
-
- $remove_args = array( 'sf_paged', 'action', 'sf_action', 'sfid', 'paged' );
-
- // if archive method, without a slug, then we must keep in "sfid"
- if ( $display_results_as == 'archive' ) {
-
- if ( ! get_option( 'permalink_structure' ) ) {
-
- if ( ( $key = array_search( 'sfid', $remove_args ) ) !== false ) {
- unset( $remove_args[ $key ] ); // remove "sfid" from the remove_args array
- }
- }
- }
-
- foreach ( $url_args as $key => $val ) {
-
- if ( ! in_array( $key, $remove_args ) ) {
- $dest_url = add_query_arg( $key, urlencode( $val ), $dest_url );
- }
- }
-
- return $dest_url;
- }
-
- public function pagination_fix( $url ) {
-
- global $searchandfilter;
-
- // $url = urldecode($url);
- $url = remove_query_arg( 'sf_data', $url );
-
- $sf_url = '';
-
- // get the page number
- $page_no = $this->get_page_no_from_url( $url );
-
- $url = remove_query_arg( 'product-page', $url );
-
- // get the results url
- $searchform = $searchandfilter->get( $this->sfid );
- $results_url = $this->get_results_url( $searchform );
-
- // remove args we know we don't want
- $sf_url = $results_url;
-
- // add args from original URL to the url
- $display_results_as = $searchform->settings( 'display_results_as' );
-
- $sf_url = $this->add_url_args( $url, $sf_url, $display_results_as );
-
- // add sf_paged variable (back) to the url
- $sf_url = $this->add_paged_to_url( $sf_url, $page_no );
-
- return $sf_url;
- }
-
- public function get_url_var( $url, $name ) {
- $strURL = $url;
- $arrVals = explode( '/', $strURL );
- $found = 0;
- foreach ( $arrVals as $index => $value ) {
- if ( $value == $name ) {
- $found = $index;
- }
- }
- $place = $found + 1;
- return $arrVals[ $place ];
- }
-
- public function has_url_var( $url, $name ) {
- $strURL = $url;
- $arrVals = explode( '/', $strURL );
- $found = 0;
- foreach ( $arrVals as $index => $value ) {
- if ( $value == $name ) {
- return true;
- }
- }
- return false;
- }
- public function last_url_param( $url ) {
- // remove query string
- $url = preg_replace( '/\?.*/', '', $url );
-
- // now get the last part
- $url_parts = explode( '/', rtrim( $url, '/' ) );
- $last_part = end( $url_parts );
-
- return $last_part;
- }
-
- public function last_url_param_is_page_no( $url ) {
- global $searchandfilter;
- $current_page = $searchandfilter->get_queried_object();
-
- // only do this on single posts/pages/custom post types
- if ( is_singular() ) {
-
- $post = get_post( get_the_ID() );
- $slug = $post->post_name;
-
- // remove query string
- $url = preg_replace( '/\?.*/', '', $url );
-
- // now get the last part
- $url_parts = explode( '/', rtrim( $url, '/' ) );
- $last_part = end( $url_parts );
-
- // make sure the last part is not the doc name, and it looks numeric
- if ( ( $last_part !== $slug ) && ( is_numeric( $last_part ) ) ) {
- return true;
- }
- }
-
- return false;
-
- }
-
- public function filter_settings( $args ) {
- global $searchandfilter;
- $searchform = $searchandfilter->get( $this->sfid );
- // posts per page
- $args['posts_per_page'] = $searchform->settings( 'results_per_page' ) == '' ? get_option( 'posts_per_page' ) : $searchform->settings( 'results_per_page' );
-
- // post status
- if ( $searchform->settings( 'post_status' ) != '' ) {
- $post_status = $searchform->settings( 'post_status' );
- $args['post_status'] = array_map( 'esc_attr', array_keys( $post_status ) );
-
- $post_types = $searchform->settings( 'post_types' );
- if ( $post_types != '' ) {
- if ( array_key_exists( 'attachment', $post_types ) ) {
- array_push( $args['post_status'], 'inherit' );
- }
- }
- }
-
- // exclude post ids
- if ( $searchform->settings( 'exclude_post_ids' ) != '' ) {
- $exclude_post_ids = $searchform->settings( 'exclude_post_ids' );
- $args['post__not_in'] = array_map( 'intval', explode( ',', $exclude_post_ids ) );
- }
-
- if ( $searchform->settings( 'sticky_posts' ) != '' ) {
- $sticky_posts = $searchform->settings( 'sticky_posts' );
-
- if ( $sticky_posts == 'exclude' ) {
- $sticky_post_ids = get_option( 'sticky_posts' );
-
- if ( ! empty( $sticky_post_ids ) ) {
- if ( ! isset( $args['post__not_in'] ) ) {
- $args['post__not_in'] = $sticky_post_ids;
- } elseif ( is_array( $args['post__not_in'] ) ) {
- $args['post__not_in'] = array_merge( $args['post__not_in'], $sticky_post_ids );
- }
- }
- } elseif ( $sticky_posts == 'ignore' ) {
- $args['ignore_sticky_posts'] = 1;
- }
- }
-
- // include/exclude taxonomies
- if ( $searchform->settings( 'taxonomies_settings' ) != '' ) {
- if ( is_array( $searchform->settings( 'taxonomies_settings' ) ) ) {
- foreach ( $searchform->settings( 'taxonomies_settings' ) as $key => $val ) {
-
- if ( $key == 'category' ) {
- if ( isset( $val['ids'] ) ) {
- if ( $val['ids'] != '' ) {
- if ( $val['include_exclude'] == 'include' ) {
- $args['category__in'] = $this->lang_object_ids( array_map( 'intval', explode( ',', $val['ids'] ) ), $key );
- } else {
- $args['category__not_in'] = $this->lang_object_ids( array_map( 'intval', explode( ',', $val['ids'] ) ), $key );
- }
- }
- }
- } elseif ( $key == 'post_tag' ) {
- if ( isset( $val['ids'] ) ) {
- if ( $val['ids'] != '' ) {
- if ( $val['include_exclude'] == 'include' ) {
- $args['tag__in'] = $this->lang_object_ids( array_map( 'intval', explode( ',', $val['ids'] ) ), $key );
- } else {
- $args['tag__not_in'] = $this->lang_object_ids( array_map( 'intval', explode( ',', $val['ids'] ) ), $key );
- }
- }
- }
- } else { // taxonomy
- if ( isset( $val['ids'] ) ) {
- if ( $val['ids'] != '' ) {
- $args['tax_query']['relation'] = 'AND';
-
- if ( $val['include_exclude'] == 'include' ) {
- $operator = 'IN';
- } else {
- $operator = 'NOT IN';
- }
-
- $args['tax_query'][] = array(
- 'taxonomy' => $key,
- 'field' => 'id',
- 'terms' => $this->lang_object_ids( array_map( 'intval', explode( ',', $val['ids'] ) ), $key ),
- 'operator' => $operator,
- );
- }
- }
- }
- }
- }
- }
-
- // meta queries
- if ( ! isset( $args['meta_query'] ) ) {
- $args['meta_query'] = array();
- }
-
- if ( $searchform->settings( 'settings_post_meta' ) != '' ) {
- // $args['meta_query']
- if ( is_array( $searchform->settings( 'settings_post_meta' ) ) ) {
- foreach ( $searchform->settings( 'settings_post_meta' ) as $post_meta ) {
- $compare_val = '';
- if ( $post_meta['meta_compare'] == 'e' ) {
- $compare_val = '=';
- } elseif ( $post_meta['meta_compare'] == 'ne' ) {
- $compare_val = '!=';
- } elseif ( $post_meta['meta_compare'] == 'lt' ) {
- $compare_val = '<';
- } elseif ( $post_meta['meta_compare'] == 'gt' ) {
- $compare_val = '>';
- } elseif ( $post_meta['meta_compare'] == 'lte' ) {
- $compare_val = '<=';
- } elseif ( $post_meta['meta_compare'] == 'gte' ) {
- $compare_val = '>=';
- } else {
- $compare_val = $post_meta['meta_compare'];
- }
-
- if ( $post_meta['meta_type'] == 'DATE' ) {
- if ( $post_meta['meta_date_value_current_date'] == 1 ) {
- $meta_query = array(
-
- 'key' => $post_meta['meta_key'],
- 'value' => date( 'Ymd', current_time( 'timestamp' ) ),
- 'type' => $post_meta['meta_type'],
- 'compare' => $compare_val,
- );
- } else {
- $meta_query = array(
-
- 'key' => $post_meta['meta_key'],
- 'value' => $post_meta['meta_date_value_date'],
- 'type' => $post_meta['meta_type'],
- 'compare' => $compare_val,
- );
- }
- } elseif ( $post_meta['meta_type'] == 'TIMESTAMP' ) {
- if ( $post_meta['meta_date_value_current_timestamp'] == 1 ) {
- $meta_query = array(
-
- 'key' => $post_meta['meta_key'],
- 'value' => current_time( 'timestamp' ),
- 'type' => 'NUMERIC',
- 'compare' => $compare_val,
- );
- } else {
- $meta_query = array(
-
- 'key' => $post_meta['meta_key'],
- 'value' => $post_meta['meta_date_value_timestamp'],
- 'type' => 'NUMERIC',
- 'compare' => $compare_val,
- );
- }
- } else {
- $meta_query = array(
-
- 'key' => $post_meta['meta_key'],
- 'value' => $post_meta['meta_value'],
- 'type' => $post_meta['meta_type'],
- 'compare' => $compare_val,
- );
- }
-
- // we don't want to pass the value when checking if a field exists or not
- if ( ( $compare_val == 'EXISTS' ) || ( $compare_val == 'NOT EXISTS' ) ) {
- unset( $meta_query['value'] );
- unset( $meta_query['type'] );
-
- }
-
- array_push( $args['meta_query'], $meta_query );
-
- }
- }
- }
-
- return $args;
- }
-
- public function lang_object_ids( $ids_array, $type ) {
- if ( Search_Filter_Helper::has_wpml() ) {
- $res = array();
- foreach ( $ids_array as $id ) {
- $xlat = Search_Filter_Helper::wpml_object_id( $id, $type, true );
- if ( ! is_null( $xlat ) ) {
- $res[] = $xlat;
- }
- }
- return $res;
- } else {
- return $ids_array;
- }
- }
-
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-taxonomy-object-walker.php b/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-taxonomy-object-walker.php
deleted file mode 100644
index c13caa96..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-taxonomy-object-walker.php
+++ /dev/null
@@ -1,215 +0,0 @@
-type = $type;
-
- $this->options = array();
- $this->options_obj = $options_obj;
- }
-
- function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
-
- parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
- }
-
-
- function start_el( &$output, $taxonomy_term, $depth = 0, $args = array(), $id = 0 ) {
- global $searchandfilter;
-
- $sfid = $args['sfid'];
- $defaults = $args['defaults'];
- $hide_empty = $args['hide_empty'];
- $sf_hide_empty = $args['sf_hide_empty'];
- $show_option_all_sf = $args['show_option_all_sf'];
- $show_default_option_sf = $args['show_default_option_sf'];
- $show_count = $args['show_count'];
- $show_count_format_sf = $args['show_count_format_sf'];
-
- $searchform = $searchandfilter->get( $sfid );
- $this->auto_count = $searchform->settings( 'enable_auto_count' );
- $this->auto_count_deselect_emtpy = $searchform->settings( 'auto_count_deselect_emtpy' );
-
- $field_name = $args['sf_name'];
-
- // insert a default "select all" or "choose category: " at the start of the options
- // should only do this on radio or select field types as they are single select
-
- if ( $this->elementno == 0 ) {// we are on the first element, so insert a default element first
-
- if ( ( isset( $show_option_all_sf ) ) && ( $show_default_option_sf == true ) ) {
- $default_option = new stdClass();
- $default_option->label = $show_option_all_sf;
- $default_option->attributes = array(
- 'class' => SF_CLASS_PRE . 'level-0 ' . SF_ITEM_CLASS_PRE . '0',
- );
- $default_option->value = '';
- $default_option->count = 0;
- array_push( $this->options, $default_option );
- }
-
- $this->elementno++;
- }
-
- $option = new stdClass();
- $option->label = '';
- $option->attributes = array(
- 'class' => '',
- );
- $option->value = '';
-
- // setup taxonomy term defaults
- $taxonomy_term_name = esc_attr( $taxonomy_term->name );
- $taxonomy_term_id = esc_attr( $taxonomy_term->term_id );
- $taxonomy_term_slug = esc_attr( $taxonomy_term->slug );
- $taxonomy_term_name = apply_filters( 'list_cats', $taxonomy_term_name, $taxonomy_term );
-
- // get the count var (either from S&F cache, or from WP)
- if ( $this->auto_count == 1 ) {
- $option_count = $searchform->get_count_var( $field_name, $taxonomy_term->slug );
- } else {
- $option_count = intval( $taxonomy_term->count );
- }
-
- $current_depth = 0;
- if ( $args['hierarchical'] == 1 ) {
-
- if ( $taxonomy_term->parent == 0 ) {
- // then this has no parent so reset depth
- $current_depth = 0;
- // and reset the array tracking the parent IDs of this tree
- $this->depth_track = array( $taxonomy_term_id ); // reset the chain
-
- } else {
-
- // check to see if the parent ID is somewhere in the depth tracker
- $depth_length = count( $this->depth_track );
-
- $found_parent_depth = array_search( $taxonomy_term->parent, $this->depth_track );
-
- if ( $found_parent_depth !== false ) {
-
- $current_depth = $found_parent_depth + 1;
-
- // then we found a parent, but it was at the end of the chain, so we need to extend it by
- $this->depth_track[ $current_depth ] = $taxonomy_term_id;
-
- }
- }
- }
-
- $this->parents_names[ $current_depth ] = $taxonomy_term->slug;
- if ( ( intval( $sf_hide_empty ) != 1 ) || ( $option_count != 0 ) ) {
-
- $option->value = $taxonomy_term_slug;
- $option->label = $taxonomy_term_name;
- $option->depth = $current_depth;
- $option->count = $option_count;
-
- // we only want to grab the term rewrite template once for each depth
- if ( $option->depth == $this->term_rewrite_depth ) {
- Search_Filter_TTT::add_template( $this->get_term_link_template( $taxonomy_term, $this->parents_names ), $this->term_rewrite_depth, $taxonomy_term->taxonomy );
- $this->term_rewrite_depth++;
- }
-
- // add classes
- $option->attributes['class'] = SF_CLASS_PRE . 'level-' . $current_depth . ' ' . SF_ITEM_CLASS_PRE . $taxonomy_term_id;
-
- if ( ! empty( $show_count ) ) {
- if ( $show_count_format_sf == 'inline' ) {
- $option->label .= ' (' . number_format_i18n( $option_count ) . ')';
- } elseif ( $show_count_format_sf == 'html' ) {
- $option->label .= '(' . number_format_i18n( $option_count ) . ') ';
- }
- }
-
- // always last, after everything init
- array_push( $this->options, $option );
- }
-
- $this->options_obj->set( $this->options );
-
- $output = '';
- }
- private function get_term_link_template( $term, $term_names ) {
- $taxonomy_name = $term->taxonomy;
-
- $term_slug = $term->slug;
-
- // is_taxonomy_hierarchical
- $term_link = get_term_link( $term, $taxonomy_name );
-
- $term_template_link = $term_link;
-
- // sort the array by string length, preserving indexes
- uasort( $term_names, array( $this, 'sortStringByLength' ) );
-
- $home_url_removed = false;
- if ( strpos( $term_template_link, home_url() ) === 0 ) {
- $term_template_link = substr( $term_template_link, strlen( home_url() ) );
- $home_url_removed = true;
- }
-
- // we need to loop[ through these terms in order
- foreach ( $term_names as $term_index => $term_name ) {
- $term_template_link = $this->str_lreplace( $term_name, "[$term_index]", $term_template_link );
- }
- if ( $home_url_removed === true ) {
-
- $term_template_link = home_url() . $term_template_link;
- }
-
- return $term_template_link;
- }
- public function sortStringByLength( $a, $b ) {
- return strlen( $b ) - strlen( $a );
- }
- function str_lreplace( $search, $replace, $subject ) {
- $pos = strrpos( $subject, $search );
-
- if ( $pos !== false ) {
- $subject = substr_replace( $subject, $replace, $pos, strlen( $search ) );
- }
-
- return $subject;
- }
-
- function end_el( &$output, $page, $depth = 0, $args = array() ) {
- }
-
- function start_lvl( &$output, $depth = 0, $args = array() ) {
- }
-
-
- function end_lvl( &$output, $depth = 0, $args = array() ) {
- }
-
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/author.php b/wp/wp-content/plugins/search-filter-pro/public/includes/fields/author.php
deleted file mode 100644
index 90a58db7..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/author.php
+++ /dev/null
@@ -1,176 +0,0 @@
-current_query->get_field_values( 'authors' );
-
- if ( count( $fields_defaults ) == 0 ) {
- $fields_defaults = array( '' );
- }
-
- $returnvar = '';
-
- // set defaults so no chance of any php errors when accessing un init vars
- $defaults = array(
- 'input_type' => '',
- 'optioncount' => '',
- 'exclude_admin' => '',
- 'show_fullname' => '',
- 'order_by' => '',
- 'order_dir' => '',
- 'hide_empty' => '',
- 'operator' => '',
- 'all_items_label' => '',
- 'accessibility_label' => '',
- 'exclude' => '',
- 'combo_box' => '',
- 'no_results_message' => '',
- 'show_default_option_sf' => false,
- 'show_count_format_sf' => 'inline',
- );
- // set defaults so no chance of any php errors when accessing un init vars
- $args = array_replace( $defaults, $field_data );
-
- $post_types = $this->searchform->settings( 'post_types' );
-
- if ( is_array( $post_types ) ) {// get the post types in to the proper format
- $post_types_array = array();
-
- foreach ( $post_types as $key => $val ) {
- $post_types_array[] = $key;
- }
-
- $args['post_types'] = $post_types_array;
- }
-
- if ( $field_data['all_items_label'] == '' ) {
- $args['show_option_all_sf'] = __( 'All Authors', $this->plugin_slug );
- } else {
- $args['show_option_all_sf'] = $field_data['all_items_label'];
-
- }
-
- if ( ( $args['order_by'] != 'default' ) && ( $args['order_by'] != '' ) ) {
- $args['orderby'] = $args['order_by'];
- $args['order'] = strtoupper( $args['order_dir'] );
- }
-
- $args['name'] = $field_name; // field name
-
- $input_args = array(
- 'name' => $field_name,
- 'defaults' => $fields_defaults,
- 'accessibility_label' => $args['accessibility_label'],
- 'attributes' => array(),
- 'options' => array(),
- );
-
- if ( $args['input_type'] == 'select' ) {
- // setup any custom attributes
- $attributes = array();
- if ( $args['combo_box'] == 1 ) {
- $attributes['data-combobox'] = '1';
-
- if ( ! empty( $args['no_results_message'] ) ) {
- $attributes['data-combobox-nrm'] = $args['no_results_message'];
- }
- }
-
- // finalise input args object
- $args['show_default_option_sf'] = true;
- $input_args['options'] = $this->get_options( $args );
- $input_args['attributes'] = $attributes;
-
- $returnvar .= $this->create_input->select( $input_args );
-
- } elseif ( $args['input_type'] == 'checkbox' ) {
- // setup any custom attributes
- $attributes = array();
-
- // finalise input args object show_count_format_sf
- $args['show_count_format_sf'] = 'html';
- $input_args['options'] = $this->get_options( $args );
- $input_args['attributes'] = $attributes;
-
- $returnvar .= $this->create_input->checkbox( $input_args );
- } elseif ( $args['input_type'] == 'radio' ) {
- // setup any custom attributes
- $attributes = array();
-
- // finalise input args object
- $args['show_default_option_sf'] = true;
- $args['show_count_format_sf'] = 'html';
- $input_args['options'] = $this->get_options( $args );
- $input_args['attributes'] = $attributes;
-
- $returnvar .= $this->create_input->radio( $input_args );
-
- } elseif ( $args['input_type'] == 'multiselect' ) {
- // setup any custom attributes
- $attributes = array();
- if ( $args['combo_box'] == 1 ) {
- $attributes['data-combobox'] = '1';
- $attributes['data-placeholder'] = $args['show_option_all_sf'];
-
- if ( ! empty( $args['no_results_message'] ) ) {
- $attributes['data-combobox-nrm'] = $args['no_results_message'];
- }
- }
-
- $attributes['multiple'] = 'multiple';
-
- // finalise input args object
- $input_args['options'] = $this->get_options( $args );
- $input_args['attributes'] = $attributes;
-
- $returnvar .= $this->create_input->select( $input_args );
- }
-
- return $returnvar;
- }
-
- private function get_options( $args ) {
- // options is passed by ref, so when `wp_list_categories` is finished running, it will contain an object of all options for this field.
- $options = array();
-
- $options_obj = new Author_Options();
-
- // use a walker to silence output, and create a custom object which is stored in `$options`
- $walker = new Search_Filter_Author_Object_Walker( $options_obj );
- $output = $walker->wp_authors( $args );
-
- return $options_obj->get();
- }
-}
-
-
-class Author_Options {
-
- private $options = array();
-
- public function set( $options ) {
- $this->options = $options;
- }
- public function get() {
- return $this->options;
- }
-}
-
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/base.php b/wp/wp-content/plugins/search-filter-pro/public/includes/fields/base.php
deleted file mode 100644
index c878f422..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/base.php
+++ /dev/null
@@ -1,63 +0,0 @@
-plugin_slug = $plugin_slug;
- $this->sfid = $sfid;
- $this->create_input = new Search_Filter_Generate_Input( $this->plugin_slug, $sfid );
-
- global $searchandfilter;
- $searchform = $searchandfilter->get( $this->sfid );
- $this->searchform = $searchform;
- $this->current_query = $searchform->current_query();
- }
-
-
- public function set_defaults() {
- $field_defaults = array();
-
- /*
- global $searchandfilter;
- $searchform = $searchandfilter->get($this->sfid);
- $current_query = $searchform->current_query()->get_array();
-
- foreach($current_query as $field_name => $field)
- {
- if(isset($field['active_terms']))
- {
- $field_defaults[$field_name] = array();
-
- foreach($field['active_terms'] as $active_term)
- {
- array_push($field_defaults[$field_name], $active_term->value);
- }
- }
- }*/
-
- $this->field_defaults = $field_defaults;
-
- }
-
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_date.php b/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_date.php
deleted file mode 100644
index ead04446..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_date.php
+++ /dev/null
@@ -1,188 +0,0 @@
-current_query->get_field_values( $field_name );
-
- $returnvar = '';
-
- $defaults = array(
- 'input_type' => '',
- 'date_format' => '',
- 'heading' => '',
- 'accessibility_label' => '',
-
- 'date_from_prefix' => '',
- 'date_from_postfix' => '',
- 'date_from_placeholder' => '',
- 'date_to_prefix' => '',
- 'date_to_postfix' => '',
- 'date_to_placeholder' => '',
-
- 'date_use_dropdown_month' => '',
- 'date_use_dropdown_year' => '',
-
- );
-
- $args = array_replace( $defaults, $field_data );
-
- if ( $args['date_format'] == '' ) {
- $args['date_format'] = 'm/d/Y';
- }
-
- $defaults = '';
- $placeholder = '';
- $jqueryformat = '';
-
- if ( $args['date_format'] == 'm/d/Y' ) {
- $placeholder = __( 'mm/dd/yyyy', $this->plugin_slug );
- $jqueryformat = __( 'mm/dd/yy', $this->plugin_slug );
- } elseif ( $args['date_format'] == 'd/m/Y' ) {
- $placeholder = __( 'dd/mm/yyyy', $this->plugin_slug );
- $jqueryformat = __( 'dd/mm/yy', $this->plugin_slug );
- } elseif ( $args['date_format'] == 'Y/m/d' ) {
- $placeholder = __( 'yyyy/mm/dd', $this->plugin_slug );
- $jqueryformat = __( 'yy/mm/dd', $this->plugin_slug );
- }
-
- if ( isset( $fields_defaults ) ) {
- foreach ( $fields_defaults as &$a_default ) {
- if ( strlen( $a_default ) == 8 ) {
- if ( $args['date_format'] == 'm/d/Y' ) {
- $month = substr( $a_default, 0, 2 );
- $day = substr( $a_default, 2, 2 );
- $year = substr( $a_default, 4, 4 );
-
- $a_default = $month . '/' . $day . '/' . $year;
-
- } elseif ( $args['date_format'] == 'd/m/Y' ) {
- $month = substr( $a_default, 2, 2 );
- $day = substr( $a_default, 0, 2 );
- $year = substr( $a_default, 4, 4 );
-
- $a_default = $day . '/' . $month . '/' . $year;
-
- } elseif ( $args['date_format'] == 'Y/m/d' ) {
- $month = substr( $a_default, 4, 2 );
- $day = substr( $a_default, 6, 2 );
- $year = substr( $a_default, 0, 4 );
-
- $a_default = $year . '/' . $month . '/' . $day;
-
- }
- } else {
- $a_default = '';
- }
- }
-
- $defaults = $fields_defaults;
- }
-
- $returnvar .= '";
-
- if ( $args['input_type'] == 'date' ) {
- $attributes = array();
-
- if ( $args['date_from_placeholder'] != '' ) {
- $attributes['placeholder'] = $args['date_from_placeholder'];
- }
-
- $date_value = $this->get_date_from_default( $defaults, 'from' );
-
- $input_args = array(
- 'name' => $field_name,
- // 'options' => $this->get_options($args),
- 'value' => $date_value,
- 'accessibility_label' => $args['accessibility_label'],
- 'attributes' => $attributes,
- 'prefix' => $args['date_from_prefix'],
- 'postfix' => $args['date_from_postfix'],
-
- );
-
- $returnvar .= '';
- $returnvar .= $this->create_input->datepicker( $input_args );
- $returnvar .= ' ';
- } elseif ( $args['input_type'] == 'daterange' ) {
- // from field
- $attributes = array();
- if ( $args['date_from_placeholder'] != '' ) {
- $attributes['placeholder'] = $args['date_from_placeholder'];
- }
-
- $date_value = $this->get_date_from_default( $defaults, 'from' );
-
- $input_args = array(
- 'name' => $field_name,
- 'value' => $date_value,
- 'accessibility_label' => $args['accessibility_label'],
- 'attributes' => $attributes,
- 'prefix' => $args['date_from_prefix'],
- 'postfix' => $args['date_from_postfix'],
-
- );
- $returnvar .= '';
- $returnvar .= $this->create_input->datepicker( $input_args );
- $returnvar .= ' ';
-
- // to field
- $attributes = array();
- if ( $args['date_to_placeholder'] != '' ) {
- $attributes['placeholder'] = $args['date_to_placeholder'];
- }
-
- $date_value = $this->get_date_from_default( $defaults, 'to' );
-
- $input_args = array(
- 'name' => $field_name,
- 'value' => $date_value,
- 'accessibility_label' => $args['accessibility_label'],
- 'attributes' => $attributes,
- 'prefix' => $args['date_to_prefix'],
- 'postfix' => $args['date_to_postfix'],
-
- );
-
- $returnvar .= '';
- $returnvar .= $this->create_input->datepicker( $input_args );
- $returnvar .= ' ';
-
- }
-
- $returnvar .= ' ';
-
- return $returnvar;
- }
-
- public function get_date_from_default( $defaults, $fromto = 'from' ) {
- if ( $fromto == 'from' ) {
- $currentid = 0;
- } elseif ( $fromto == 'to' ) {
- $currentid = 1;
- }
-
- $current_date = '';
- if ( isset( $defaults[ $currentid ] ) ) {
- $current_date = $defaults[ $currentid ];
- }
-
- return $current_date;
-
- }
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_meta.php b/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_meta.php
deleted file mode 100644
index 7f28f668..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_meta.php
+++ /dev/null
@@ -1,110 +0,0 @@
- '',
-
- 'meta_type' => 'number',
- 'meta_key' => '',
- 'meta_key_manual' => '',
- 'meta_key_manual_toggle' => '',
-
- 'number_input_type' => '',
- 'number_is_decimal' => '',
- 'choice_input_type' => '',
- 'date_input_type' => '',
-
- 'choice_get_option_mode' => 'manual',
- 'choice_order_option_by' => 'value',
- 'choice_order_option_dir' => 'asc',
- 'choice_order_option_type' => 'alphabetic',
-
- 'range_min' => '0',
- 'range_max' => '1000',
- 'range_step' => '10',
- 'range_min_detect' => '',
- 'range_max_detect' => '',
-
- 'thousand_seperator' => '',
- 'decimal_seperator' => '.',
- 'decimal_places' => '0',
- 'number_decimal_places' => '2',
- 'number_values_seperator' => ' - ',
- 'number_display_values_as' => 'textinput',
-
- 'number_display_input_as' => 'singlefield',
-
- 'range_value_prefix' => '',
- 'range_value_postfix' => '',
-
- 'meta_options' => array(),
-
- 'choice_accessibility_label' => '',
- 'number_accessibility_label' => '',
- 'date_accessibility_label' => '',
-
- 'all_items_label' => '',
- 'all_items_label_number' => '',
- 'combo_box' => '',
- 'show_count' => '',
- 'hide_empty' => '',
- );
-
- $values = array_replace( $defaults, $field_data );
-
- if ( $values['meta_key_manual_toggle'] == 1 ) {
- $meta_key = $values['meta_key_manual'];
- } else {
- $meta_key = $values['meta_key'];
- }
-
- $field_name = SF_META_PRE . $meta_key;
-
- // $field_name_get = str_replace(" ", "_", $field_name); //replace space with `_` as this is done anyway - spaces are not allowed in GET variable names, and are automatically converted by server/browser to `_`
- $fields_defaults = $this->current_query->get_field_values( $field_name );
-
- if ( $field_data['all_items_label'] == '' ) {
- $values['show_option_all_sf'] = __( 'All Items', $this->plugin_slug );
- } else {
- $values['show_option_all_sf'] = $field_data['all_items_label'];
- }
-
- $defaults = $fields_defaults;
-
- if ( $values['meta_type'] == 'choice' ) {
- $this->meta_field_choice = new Search_Filter_Field_Post_Meta_Choice( $this->plugin_slug, $this->sfid );
- $returnvar .= $this->meta_field_choice->get( $field_name, $values, $fields_defaults );
- } elseif ( $values['meta_type'] == 'number' ) {
- $this->meta_field_number = new Search_Filter_Field_Post_Meta_Number( $this->plugin_slug, $this->sfid );
- $returnvar .= $this->meta_field_number->get( $field_name, $values, $fields_defaults );
- } elseif ( $values['meta_type'] == 'date' ) {
- $this->meta_field_date = new Search_Filter_Field_Post_Meta_Date( $this->plugin_slug, $this->sfid );
- $returnvar .= $this->meta_field_date->get( $field_name, $values, $fields_defaults );
- }
-
- return $returnvar;
- }
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_meta_choice.php b/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_meta_choice.php
deleted file mode 100644
index 8eb5ad82..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_meta_choice.php
+++ /dev/null
@@ -1,523 +0,0 @@
-plugin_slug = $plugin_slug;
- $this->sfid = $sfid;
- $this->create_input = new Search_Filter_Generate_Input( $this->plugin_slug, $sfid );
-
- $this->term_results_table_name = Search_Filter_Helper::get_table_name( 'search_filter_term_results' );
- }
-
- public function get( $field_name, $args, $fields_defaults ) {
- if ( count( $fields_defaults ) == 0 ) {
- $fields_defaults = array( '' );
- }
-
- $returnvar = '';
-
- $meta_options = array();
-
- $input_args = array(
- 'name' => $field_name,
- 'defaults' => $fields_defaults,
- 'attributes' => array(),
- 'options' => array(),
- );
-
- $args['show_count_format_sf'] = 'inline';
- $args['show_default_option_sf'] = false;
- $args['name_sf'] = $field_name;
-
- if ( $args['choice_input_type'] == 'select' ) {
- // setup any custom attributes
- $attributes = array();
- if ( $args['combo_box'] == 1 ) {
- $attributes['data-combobox'] = '1';
-
- if ( isset( $args['no_results_message'] ) ) {
- if ( ! empty( $args['no_results_message'] ) ) {
- $attributes['data-combobox-nrm'] = $args['no_results_message'];
- }
- }
- }
-
- $args['show_default_option_sf'] = true;
-
- $input_args['options'] = $this->get_options( $args );
- $input_args['attributes'] = $attributes;
- $input_args['accessibility_label'] = $args['choice_accessibility_label'];
-
- $returnvar .= $this->create_input->select( $input_args );
-
- }
- if ( $args['choice_input_type'] == 'checkbox' ) {
- $attributes = array();
- $attributes['data-operator'] = $args['operator'];
-
- $args['show_count_format_sf'] = 'html';
-
- $input_args['options'] = $this->get_options( $args );
- $input_args['attributes'] = $attributes;
-
- $returnvar .= $this->create_input->checkbox( $input_args );
- } elseif ( $args['choice_input_type'] == 'radio' ) {
- $attributes = array();
-
- $args['show_default_option_sf'] = true;
- $args['show_count_format_sf'] = 'html';
-
- $input_args['options'] = $this->get_options( $args );
- $input_args['attributes'] = $attributes;
-
- $returnvar .= $this->create_input->radio( $input_args );
- } elseif ( $args['choice_input_type'] == 'multiselect' ) {
- // setup any custom attributes
- $attributes = array();
-
- $attributes['data-operator'] = $args['operator'];
-
- if ( $args['combo_box'] == 1 ) {
- $attributes['data-combobox'] = '1';
- $attributes['data-placeholder'] = $args['show_option_all_sf'];
- }
- $attributes['multiple'] = 'multiple';
-
- // finalise input args object
- $input_args['options'] = $this->get_options( $args );
- $input_args['attributes'] = $attributes;
- $input_args['accessibility_label'] = $args['choice_accessibility_label'];
-
- $returnvar .= $this->create_input->select( $input_args );
- }
-
- return $returnvar;
- }
-
- private function get_options_manual( $args ) {
- $options = array();
-
- $name = $args['name_sf'];
- $show_option_all_sf = $args['show_option_all_sf'];
- $show_default_option_sf = $args['show_default_option_sf'];
- $show_count = $args['show_count'];
- $show_count_format_sf = $args['show_count_format_sf'];
- $hide_empty = $args['hide_empty'];
-
- global $searchandfilter;
- $searchform = $searchandfilter->get( $this->sfid );
- $this->auto_count = $searchform->settings( 'enable_auto_count' );
- $this->auto_count_deselect_emtpy = $searchform->settings( 'auto_count_deselect_emtpy' );
-
- if ( ( isset( $show_option_all_sf ) ) && ( $show_default_option_sf == true ) ) {
- $default_option = new stdClass();
- $default_option->label = $show_option_all_sf;
- $default_option->attributes = array(
- 'class' => SF_CLASS_PRE . 'level-0 ' . SF_ITEM_CLASS_PRE . '0',
- );
- $default_option->value = '';
-
- array_push( $options, $default_option );
- }
-
- if ( isset( $args['meta_options'] ) ) {
- if ( is_array( $args['meta_options'] ) ) {
- $meta_options = array();
-
- foreach ( $args['meta_options'] as $meta_option ) {
- $option = $this->create_option( $name, $meta_option['option_value'], $meta_option['option_label'], $hide_empty, $show_count, $show_count_format_sf );
-
- if ( $option ) {
- array_push( $options, $option );
- }
- }
- }
- }
-
- return $options;
- }
- private function get_options( $args ) {
- if ( $args['choice_get_option_mode'] == 'manual' ) {
- return $this->get_options_manual( $args );
- } elseif ( $args['choice_get_option_mode'] == 'auto' ) {
- return $this->get_options_auto( $args );
- }
- }
-
- private function get_options_from_cache( $args ) {
- // now check the DB for the options in this field and build options
- $name = $args['name_sf'];
-
- $options = array();
-
- global $wpdb;
- global $searchandfilter;
-
- $name = $args['name_sf'];
- $show_option_all_sf = $args['show_option_all_sf'];
- $show_default_option_sf = $args['show_default_option_sf'];
- $show_count = $args['show_count'];
- $show_count_format_sf = $args['show_count_format_sf'];
- $hide_empty = $args['hide_empty'];
-
- $order_type = $args['choice_order_option_type'];
- $order_dir = $args['choice_order_option_dir'];
-
- if ( $order_type == 'numeric' ) {
- $order_by = "cast(field_value AS UNSIGNED) $order_dir";
- } else {
- $order_by = "field_value $order_dir";
- }
-
- $this->term_results_table_name = Search_Filter_Helper::get_table_name( 'search_filter_term_results' );
-
- $field_options = $wpdb->get_results(
- "
- SELECT field_value
- FROM $this->term_results_table_name
- WHERE BINARY field_name = '$name' AND field_value != ''
- ORDER BY $order_by
- "
- );
-
- foreach ( $field_options as $field_option ) {
- $option = $this->create_option( $name, $field_option->field_value, $field_option->field_value, $hide_empty, $show_count, $show_count_format_sf );
-
- if ( $option ) {
- array_push( $options, $option );
- }
- }
-
- return $options;
- }
-
- private function get_options_auto( $args ) {
- $options = array();
-
- $name = $args['name_sf'];
- $show_option_all_sf = $args['show_option_all_sf'];
- $show_default_option_sf = $args['show_default_option_sf'];
- $show_count = $args['show_count'];
- $show_count_format_sf = $args['show_count_format_sf'];
- $hide_empty = $args['hide_empty'];
-
- global $searchandfilter;
- $searchform = $searchandfilter->get( $this->sfid );
- $this->auto_count = $searchform->settings( 'enable_auto_count' );
- $this->auto_count_deselect_emtpy = $searchform->settings( 'auto_count_deselect_emtpy' );
-
- if ( ( isset( $show_option_all_sf ) ) && ( $show_default_option_sf == true ) ) {
- $default_option = new stdClass();
- $default_option->label = $show_option_all_sf;
- $default_option->attributes = array(
- 'class' => SF_CLASS_PRE . 'level-0 ' . SF_ITEM_CLASS_PRE . '0',
- );
- $default_option->value = '';
-
- array_push( $options, $default_option );
- }
-
- /*
- $pre_options = array();
- if(has_filter('sf_pre_options_build')) {
- $pre_options = apply_filters('sf_pre_options_build', $pre_options, $args);
- }
- */
- $is_acf = $args['choice_is_acf'];
- $pre_options = array();
- if ( $is_acf == 1 ) {
-
- $pre_options = $this->get_acf_options( $args );
- $options = array_merge( $options, $pre_options );
- }
-
- if ( empty( $pre_options ) ) {
-
- $cache_options = $this->get_options_from_cache( $args );
- $options = array_merge( $options, $cache_options );
- }
-
- return $options;
- }
-
- private function find_post_id_with_field( $field_name ) {
- global $wpdb;
-
- $this->term_results_table_name = Search_Filter_Helper::get_table_name( 'search_filter_term_results' );
- $field_options = $wpdb->get_results(
- $wpdb->prepare(
- "
- SELECT field_value, result_ids
- FROM $this->term_results_table_name
- WHERE field_name = '%s' AND result_ids != '' LIMIT 0,1
- ",
- $field_name
- )
- );
-
- foreach ( $field_options as $field_option ) {
-
- $post_ids = explode( ',', $field_option->result_ids );
-
- if ( isset( $post_ids[0] ) ) {
- return $post_ids[0];
- }
- }
-
- return 0;
- }
-
- private function find_post_id_with_field_2( $meta_key ) {
- global $wpdb;
- global $searchandfilter;
- $searchform = $searchandfilter->get( $this->sfid );
-
- $post_types_arr = $searchform->settings( 'post_types' );
- $post_types = array();
- if ( is_array( $post_types_arr ) ) {
- $post_types = array_keys( $post_types_arr );
- }
-
- $post_stati_arr = $searchform->settings( 'post_status' );
- $post_stati = array();
- if ( is_array( $post_stati_arr ) ) {
- $post_stati = array_keys( $post_stati_arr );
- }
-
- $args = array(
- 'post_type' => $post_types,
- 'fields' => 'ids',
- 'posts_per_page' => 1,
- 'post_status' => $post_stati,
- 'meta_query' => array(
- array(
- 'key' => $meta_key,
- 'compare' => 'EXISTS',
- ),
- ),
- );
-
- $query = new WP_Query( $args );
- // $results = $query->get_posts();
- $post_id = 0;
-
- if ( $query->have_posts() ) {
-
- foreach ( $query->posts as $posts_id ) {
- $post_id = $posts_id;
- }
- }
-
- return $post_id;
- }
-
- private function get_acf_options( $args ) {
- $options = array();
-
- if ( ! function_exists( 'get_field_object' ) ) {
- return $options;
- }
-
- $name = $args['name_sf'];
- $show_option_all_sf = $args['show_option_all_sf'];
- $show_default_option_sf = $args['show_default_option_sf'];
- $show_count = $args['show_count'];
- $show_count_format_sf = $args['show_count_format_sf'];
- $hide_empty = $args['hide_empty'];
-
- // $post_id = $this->find_post_id_with_field($name); //acf needs to have at least 1 post id with the post meta attached in order to lookup the rest of the field
- // do_action( 'wpml_switch_language', 'nl' );
- // do_action( 'wpml_switch_language', 'nl' );
- $post_id = $this->find_post_id_with_field_2( $args['meta_key'] ); // acf needs to have at least 1 post id with the post meta attached in order to lookup the rest of the field
- $field = get_field_object( $args['meta_key'], $post_id );
-
- // @this is a temporary hook for fixing ACF fields + WPML issues - it will be removed
- // this part gets the translated version of the field / options
- $field = apply_filters( 'sf_input_object_acf_field', $field, $args['meta_key'], $this->sfid );
-
- if ( ! $field ) {
- return $options;
- }
- if ( ! is_array( $field ) ) {
- return $options;
- }
- $options_array = array();
- global $searchandfilter;
-
- if ( ! isset( $field['choices'] ) ) {
- if ( ( $field['type'] == 'post_object' ) || ( $field['type'] == 'page_link' ) || ( $field['type'] == 'relationship' ) ) {
- $cached_options = $this->get_options_from_cache( $args );
-
- foreach ( $cached_options as $sf_option ) {
- $post_id = absint( $sf_option->value );
- $sf_option->label = get_the_title( $post_id );
-
- /*
- if ( Search_Filter_Helper::has_wpml() ) {
- $post_type = get_post_type( $post_id );
- $current_lang = Search_Filter_Helper::wpml_current_language();
- $translated_post_id = Search_Filter_Helper::wpml_object_id( $post_id, $post_type, false, $current_lang );
- $sf_option->label = get_the_title($translated_post_id);
- } */
-
- $option = $this->create_option( $name, $post_id, $sf_option->label, $hide_empty, $show_count, $show_count_format_sf );
-
- if ( $option ) {
- array_push( $options, $option );
- }
- }
- // $field['return_format']==strtolower("object")
-
- } elseif ( $field['type'] == 'taxonomy' ) {
- $taxonomy = $field['taxonomy'];
-
- $cached_options = $this->get_options_from_cache( $args );
-
- foreach ( $cached_options as $sf_option ) {
- $term = get_term( $sf_option->value, $taxonomy );
-
- if ( $term ) {
- $sf_option->label = $term->name;
-
- $option = $this->create_option( $name, $sf_option->value, $sf_option->label, $hide_empty, $show_count, $show_count_format_sf );
-
- if ( $option ) {
- array_push( $options, $option );
- }
- }
- }
- } elseif ( $field['type'] == 'user' ) {
- // $taxonomy = $field['taxonomy'];
-
- $cached_options = $this->get_options_from_cache( $args );
-
- foreach ( $cached_options as $sf_option ) {
- $user = get_user_by( 'ID', (int) $sf_option->value );
-
- if ( $user ) {
-
- // $options_array[$sf_option->value] = $sf_option->label;
-
- // $sf_option->label = $user->user_nicename;
- $sf_option->label = $user->display_name;
-
- $option = $this->create_option( $name, $sf_option->value, $sf_option->label, $hide_empty, $show_count, $show_count_format_sf );
-
- if ( $option ) {
- array_push( $options, $option );
- }
- }
- }
- }
- } elseif ( isset( $field['choices'] ) ) {
- $choices = $field['choices'];
-
- foreach ( $choices as $value => $label ) {
- $option = $this->create_option( $name, $value, $label, $hide_empty, $show_count, $show_count_format_sf );
-
- if ( $option ) {
- array_push( $options, $option );
- }
- }
- }
-
- // sort the options
- if ( ! empty( $options ) ) {
- $order_type = $args['choice_order_option_type'];
- $order_dir = $args['choice_order_option_dir'];
- $order_by = $args['choice_order_option_by'];
-
- $options = $this->sort_arr_of_obj( $options, $order_by, $order_dir, $order_type );
- }
-
- return $options;
-
- }
- private function sort_arr_of_obj( $array, $sortby, $direction = 'asc', $order_type = 'numeric' ) {
-
- if ( $sortby == 'none' ) {
- return $array;
- }
-
- $sortedArr = array();
- $tmp_Array = array();
-
- foreach ( $array as $k => $v ) {
- $tmp_Array[] = strtolower( $v->$sortby );
- }
-
- if ( $order_type == 'numeric' ) {
- $sort_type = SORT_NUMERIC;
- } else {
- $sort_type = SORT_STRING;
- }
-
- if ( $direction == 'asc' ) {
- asort( $tmp_Array, $sort_type );
- } else {
- arsort( $tmp_Array, $sort_type );
- }
-
- foreach ( $tmp_Array as $k => $tmp ) {
- $sortedArr[] = $array[ $k ];
- }
-
- return $sortedArr;
-
- }
-
- private function create_option( $field_name, $value, $label, $hide_empty, $show_count, $show_count_format = 'inline' ) {
- if ( $this->auto_count == 1 ) {
- global $searchandfilter;
- $option_count = $searchandfilter->get( $this->sfid )->get_count_var( $field_name, ( $value ) );
- } else {
- $option_count = -1;
- }
-
- $option = new stdClass();
-
- if ( ( intval( $hide_empty ) != 1 ) || ( $option_count != 0 ) ) {
- $option->label = $label;
- $option->count = $option_count;
- $option->attributes = array(
- 'class' => SF_CLASS_PRE . 'level-0 ',
- );
- $option->value = $value;
-
- if ( ( $show_count == 1 ) && ( $option_count != -1 ) ) {
- if ( $show_count_format == 'inline' ) {
- $option->label .= ' (' . number_format_i18n( $option_count ) . ')';
- } elseif ( $show_count_format == 'html' ) {
- $option->label .= '(' . number_format_i18n( $option_count ) . ') ';
- }
- }
-
- return $option;
- } else {
- return false;
- }
- }
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_meta_date.php b/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_meta_date.php
deleted file mode 100644
index 616bc07e..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_meta_date.php
+++ /dev/null
@@ -1,193 +0,0 @@
-plugin_slug = $plugin_slug;
- $this->sfid = $sfid;
- $this->create_input = new Search_Filter_Generate_Input( $this->plugin_slug, $sfid );
- }
-
- public function get( $field_name, $args, $fields_defaults ) {
- $returnvar = '';
-
- $defaults = array(
- 'date_input_type' => '',
- 'date_output_format' => '',
- 'heading' => '',
-
- 'use_same_toggle' => '',
-
- 'date_from_prefix' => '',
- 'date_from_postfix' => '',
- 'date_from_placeholder' => '',
- 'date_to_prefix' => '',
- 'date_to_postfix' => '',
- 'date_to_placeholder' => '',
-
- 'date_use_dropdown_month' => '',
- 'date_use_dropdown_year' => '',
-
- );
-
- $args = array_replace( $defaults, $args );
-
- if ( $args['date_output_format'] == '' ) {
- $args['date_output_format'] = 'm/d/Y';
- }
-
- $defaults = '';
- $placeholder = '';
- $jqueryformat = '';
-
- if ( $args['date_output_format'] == 'm/d/Y' ) {
- $placeholder = __( 'mm/dd/yyyy', $this->plugin_slug );
- $jqueryformat = __( 'mm/dd/yy', $this->plugin_slug );
- } elseif ( $args['date_output_format'] == 'd/m/Y' ) {
- $placeholder = __( 'dd/mm/yyyy', $this->plugin_slug );
- $jqueryformat = __( 'dd/mm/yy', $this->plugin_slug );
- } elseif ( $args['date_output_format'] == 'Y/m/d' ) {
- $placeholder = __( 'yyyy/mm/dd', $this->plugin_slug );
- $jqueryformat = __( 'yy/mm/dd', $this->plugin_slug );
- }
-
- if ( isset( $fields_defaults ) ) {
- foreach ( $fields_defaults as &$a_default ) {
- if ( strlen( $a_default ) == 8 ) {
- if ( $args['date_output_format'] == 'm/d/Y' ) {
- $month = substr( $a_default, 0, 2 );
- $day = substr( $a_default, 2, 2 );
- $year = substr( $a_default, 4, 4 );
-
- $a_default = $month . '/' . $day . '/' . $year;
-
- } elseif ( $args['date_output_format'] == 'd/m/Y' ) {
- $month = substr( $a_default, 2, 2 );
- $day = substr( $a_default, 0, 2 );
- $year = substr( $a_default, 4, 4 );
-
- $a_default = $day . '/' . $month . '/' . $year;
-
- } elseif ( $args['date_output_format'] == 'Y/m/d' ) {
- $month = substr( $a_default, 4, 2 );
- $day = substr( $a_default, 6, 2 );
- $year = substr( $a_default, 0, 4 );
-
- $a_default = $year . '/' . $month . '/' . $day;
-
- }
- } else {
- $a_default = '';
- }
- }
-
- $defaults = $fields_defaults;
- }
-
- $returnvar .= '";
-
- if ( $args['date_input_type'] == 'date' ) {
- $attributes = array();
-
- if ( $args['date_from_placeholder'] != '' ) {
- $attributes['placeholder'] = $args['date_from_placeholder'];
- }
-
- $date_value = $this->get_date_default( $defaults, 'from' );
-
- $input_args = array(
- 'name' => $field_name,
- // 'options' => $this->get_options($args),
- 'value' => $date_value,
- 'accessibility_label' => $args['date_accessibility_label'],
- 'attributes' => $attributes,
- 'prefix' => $args['date_from_prefix'],
- 'postfix' => $args['date_from_postfix'],
-
- );
-
- $returnvar .= '';
- $returnvar .= $this->create_input->datepicker( $input_args );
- $returnvar .= ' ';
- } elseif ( $args['date_input_type'] == 'daterange' ) {
- // from field
- $attributes = array();
- if ( $args['date_from_placeholder'] != '' ) {
- $attributes['placeholder'] = $args['date_from_placeholder'];
- }
-
- $date_value = $this->get_date_default( $defaults, 'from' );
-
- $input_args = array(
- 'name' => $field_name,
- 'value' => $date_value,
- 'accessibility_label' => $args['date_accessibility_label'],
- 'attributes' => $attributes,
- 'prefix' => $args['date_from_prefix'],
- 'postfix' => $args['date_from_postfix'],
-
- );
- $returnvar .= '';
- $returnvar .= $this->create_input->datepicker( $input_args );
- $returnvar .= ' ';
-
- // to field
- $attributes = array();
- if ( $args['date_to_placeholder'] != '' ) {
- $attributes['placeholder'] = $args['date_to_placeholder'];
- }
-
- $date_value = $this->get_date_default( $defaults, 'to' );
-
- $input_args = array(
- 'name' => $field_name,
- 'value' => $date_value,
- 'accessibility_label' => $args['date_accessibility_label'],
- 'attributes' => $attributes,
- 'prefix' => $args['date_to_prefix'],
- 'postfix' => $args['date_to_postfix'],
-
- );
-
- $returnvar .= '';
- $returnvar .= $this->create_input->datepicker( $input_args );
- $returnvar .= ' ';
-
- }
-
- $returnvar .= ' ';
-
- return $returnvar;
-
- }
-
- public function get_date_default( $defaults, $fromto = 'from' ) {
- if ( $fromto == 'from' ) {
- $currentid = 0;
- } elseif ( $fromto == 'to' ) {
- $currentid = 1;
- }
-
- $current_date = '';
- if ( isset( $defaults[ $currentid ] ) ) {
- $current_date = $defaults[ $currentid ];
- }
-
- return $current_date;
-
- }
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_meta_number.php b/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_meta_number.php
deleted file mode 100644
index c89b3b4a..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_meta_number.php
+++ /dev/null
@@ -1,490 +0,0 @@
-plugin_slug = $plugin_slug;
- $this->sfid = $sfid;
- $this->create_input = new Search_Filter_Generate_Input( $this->plugin_slug, $sfid );
-
- }
-
- public function round_tdp( $number, $decimal_places ) {
- // we assume number are stored as 123456.78 so no need to format
- // $number = number_format( $number, $decimal_places, '.', '' );
-
- $multiplier = pow( 10, (int) $decimal_places );
- $number = floor( (float) $number * $multiplier ) / $multiplier;
- return $number;
- }
-
- private function divide_get_remainder( $value, $divisor ) {
- // We get strange errors when dividing by anything under 1, so we multiply by 10 to get around this.
- if ( $divisor < 1 ) {
- $value = $value * 10;
- $divisor = $divisor * 10;
- }
- $division_result = $value / $divisor;
- $remainder = $division_result - floor( $division_result );
- return $remainder;
- }
- public function get( $field_name, $args, $fields_defaults ) {
- $returnvar = '';
- $defaults = $fields_defaults;
-
- $this->use_transients = Search_Filter_Helper::get_option( 'cache_use_transients' );
- $thousand_seperator = $args['thousand_seperator'];
- $decimal_point = $args['decimal_seperator'];
- $decimal_places = $args['decimal_places'];
-
- global $wpdb;
- global $searchandfilter;
- $searchform = $searchandfilter->get( $this->sfid );
- $post_types_arr = $searchform->settings( 'post_types' );
- $post_status_arr = $searchform->settings( 'post_status' );
-
- $post_types = array();
- if ( is_array( $post_types_arr ) ) {
- $post_types = array_keys( $post_types_arr );
- }
- if ( is_array( $post_status_arr ) ) {
- $post_stati = array_keys( $post_status_arr );
- }
-
- if ( $args['range_min_detect'] == 1 ) {
-
- $min_range_auto = $this->get_range_min_auto( $post_types, $post_stati, $args );
- if ( $min_range_auto ) {
- $args['range_min'] = $min_range_auto;
- }
- }
-
- if ( $args['range_max_detect'] == 1 ) {
-
- $max_range_auto = $this->get_range_max_auto( $post_types, $post_stati, $args );
- if ( $max_range_auto ) {
- $args['range_max'] = $max_range_auto;
- }
- }
-
- // now format min / max according to decimal places
- // $value_formatted = number_format( (float)$max, $decimal_places, $decimal_point, $thousand_seperator );
- if ( ( $args['number_input_type'] == 'range-number' ) || ( $args['number_input_type'] == 'range-slider' ) ) {
-
- if ( $args['number_input_type'] == 'range-number' ) {
- $decimal_places = 0;
- }
-
- $args['range_step'] = $this->round_tdp( $args['range_step'], $decimal_places );
-
- $step = $args['range_step'];
- if ( round( $step, 10 ) === 0.0 ) {
- $step = 1;
- }
- $args['range_min'] = $this->round_tdp( $args['range_min'], $decimal_places );
-
- // make sure the max is an exact multiple of a step from the min
- $range_diff = (float) $args['range_max'] - (float) $args['range_min'];
-
- if ( 0 != $this->divide_get_remainder( $range_diff, (float) $step ) ) {
- $steps_in_range = $range_diff / $step;
- $wanted_steps = floor( $steps_in_range ) + 1;
- $wanted_range_diff = $wanted_steps * $step;
-
- $args['range_max'] = $args['range_min'] + $wanted_range_diff;
- }
- }
-
- $is_default = false;
- if ( empty( $defaults ) ) {
- $is_default = true;
-
- }
-
- if ( is_array( $defaults ) ) {
- if ( ! isset( $defaults[0] ) ) {
- $defaults[0] = $args['range_min'];
- }
- if ( ! isset( $defaults[1] ) ) {
- $defaults[1] = $args['range_max'];
- }
- } else {
- $defaults = array( $args['range_min'], $args['range_max'] );
- }
-
- $defaults_formatted = $defaults;
- if ( ( $args['number_input_type'] == 'range-slider' ) && ( $decimal_places > 0 ) ) {
-
- // now check to see if we have decimal places... if so, then the input can be formatted with a different decimal
- // make sure all format is set correctly
- // actually, we only need to do this with the "defaults" or current value, to avoid the flicker
- $defaults_formatted = array();
- $defaults_formatted[0] = number_format( (float) $defaults[0], $decimal_places, $decimal_point, $thousand_seperator );
- $defaults_formatted[1] = number_format( (float) $defaults[1], $decimal_places, $decimal_point, $thousand_seperator );
- }
-
- $input_args = array(
- 'name' => $field_name,
- 'range_min' => $args['range_min'],
- 'range_max' => $args['range_max'],
- 'range_step' => $args['range_step'],
- 'default_min' => $defaults[0],
- 'default_max' => $defaults[1],
- 'default_min_formatted' => $defaults_formatted[0],
- 'default_max_formatted' => $defaults_formatted[1],
- 'range_value_prefix' => $args['range_value_prefix'],
- 'range_value_postfix' => $args['range_value_postfix'],
- 'number_is_decimal' => $args['number_is_decimal'],
- 'accessibility_label' => $args['number_accessibility_label'],
-
- 'thousand_seperator' => $args['thousand_seperator'],
- 'decimal_seperator' => $args['decimal_seperator'],
- 'decimal_places' => $args['decimal_places'],
- 'number_values_seperator' => $args['number_values_seperator'],
- 'number_display_values_as' => $args['number_display_values_as'],
- );
-
- $option_args = array(
- 'name_sf' => $field_name,
- 'min' => $args['range_min'],
- 'max' => $args['range_max'],
- 'step' => $args['range_step'],
-
- 'thousand_seperator' => $args['thousand_seperator'],
- 'decimal_seperator' => $args['decimal_seperator'],
- 'decimal_places' => $args['decimal_places'],
-
- 'prefix' => $args['range_value_prefix'],
- 'postfix' => $args['range_value_postfix'],
- );
-
- if ( $args['all_items_label_number'] == '' ) {
- $option_args['show_option_all_sf'] = __( 'All Items', $this->plugin_slug );
- } else {
- $option_args['show_option_all_sf'] = $args['all_items_label_number'];
- }
-
- if ( $args['number_input_type'] == 'range-slider' ) {
- $returnvar .= $this->create_input->range_slider( $input_args );
- } elseif ( $args['number_input_type'] == 'range-number' ) {
- $returnvar .= $this->create_input->range_number( $input_args );
- } elseif ( $args['number_input_type'] == 'range-select' ) {
- if ( $args['number_display_input_as'] == 'fromtofields' ) {
- $input_args['options'] = $this->get_range_options( $option_args );
-
- // adjust max option based on the new range options generated (max can change because of the step value in the range)
- $last_option_i = count( $input_args['options'] ) - 1;
- $max_option = $input_args['options'][ $last_option_i ]->value;
-
- if ( $is_default === true ) {
-
- // set the default to option, to max, when nothing has been selected
- $input_args['default_max'] = $max_option;
- $input_args['default_max_formatted'] = number_format( (float) $max_option, $decimal_places, $decimal_point, $thousand_seperator );
- }
- // adjust max option based on the new range options generated (max can change because of the step value in the range)
- $input_args['range_max'] = $max_option;
-
- $returnvar .= $this->create_input->range_select( $input_args );
- } elseif ( $args['number_display_input_as'] == 'singlefield' ) {
- // setup any custom attributes
- $attributes = array();
-
- // finalise input args object
- $option_args['show_default_option_sf'] = true;
- $input_args['options'] = $this->get_range_single_options( $option_args );
- $input_args['attributes'] = $attributes;
-
- $select_defaults = array( $defaults[0] . '+' . $defaults[1] );
- $input_args['defaults'] = $select_defaults;
-
- $returnvar .= $this->create_input->select( $input_args );
- }
- } elseif ( $args['number_input_type'] == 'range-radio' ) {
- // setup any custom attributes
- $attributes = array();
-
- if ( $args['number_display_input_as'] == 'fromtofields' ) {
- $input_args['options'] = $this->get_range_options( $option_args );
-
- // adjust max option based on the new range options generated (max can change because of the step value in the range)
- $last_option_i = count( $input_args['options'] ) - 1;
- $max_option = $input_args['options'][ $last_option_i ]->value;
-
- if ( $is_default === true ) {
-
- // set the default to option, to max, when nothing has been selected
- $input_args['default_max'] = $max_option;
- $input_args['default_max_formatted'] = number_format( (float) $max_option, $decimal_places, $decimal_point, $thousand_seperator );
- }
- // adjust max option based on the new range options generated (max can change because of the step value in the range)
- $input_args['range_max'] = $max_option;
-
- $returnvar .= $this->create_input->range_radio( $input_args );
- } elseif ( $args['number_display_input_as'] == 'singlefield' ) {
- $defaults = array( '' );
- if ( count( $fields_defaults ) > 0 ) {
- $defaults = array( implode( '+', $fields_defaults ) );
- }
-
- $input_args['defaults'] = $defaults;
-
- // finalise input args object
- $option_args['show_default_option_sf'] = true;
- // $option_args['show_count_format_sf'] = 'html';
-
- $input_args['options'] = $this->get_range_single_options( $option_args );
- $input_args['attributes'] = $attributes;
-
- $returnvar .= $this->create_input->radio( $input_args );
- }
- } elseif ( $args['number_input_type'] == 'range-checkbox' ) {
- $returnvar .= $this->create_input->generate_range_checkbox( $field_name, $args['range_min'], $args['range_max'], $args['range_step'], $args['range_min'], $args['range_max'], $args['range_value_prefix'], $args['range_value_postfix'] );
- }
-
- return $returnvar;
- }
-
- public function get_range_min_auto( $post_types, $post_stati, $args ) {
- $min_field_name = '_sfm_' . $args['number_start_meta_key'];
- $range_min_trans = false;
- $cache_key = '';
-
- if ( $this->use_transients == 1 ) {
- $cache_key = 'field_range_min_' . $this->sfid . '_' . $min_field_name;
- $range_min_trans = Search_Filter_Wp_Cache::get_transient( $cache_key );
- }
-
- if ( false === $range_min_trans ) {
-
- // lookup min
- $min_query = new WP_Query(
- array(
- 'post_type' => $post_types,
- 'post_status' => $post_stati,
- 'orderby' => 'meta_value_num',
- 'order' => 'ASC',
- 'meta_key' => $args['number_start_meta_key'],
- 'posts_per_page' => 1,
- 'suppress_filters' => true,
- 'meta_query' => array(
- 'key' => $args['number_start_meta_key'],
- 'value' => '',
- 'compare' => '!=',
- ),
- )
- );
- $min_posts = $min_query->get_posts();
-
- if ( ( count( $min_posts ) == 1 ) && ( isset( $min_posts[0] ) ) ) {
- $min_post = $min_posts[0];
- if ( isset( $min_post->ID ) ) {
- $min_value = get_post_meta( $min_post->ID, $args['number_start_meta_key'], true );
- $range_min_trans = $min_value;
- }
- }
- } else {
-
- }
-
- if ( ( $this->use_transients == 1 ) && ( false !== $range_min_trans ) ) {
- $transient_lifespan = DAY_IN_SECONDS / 24; // 1hr
- Search_Filter_Wp_Cache::set_transient( $cache_key, $range_min_trans, $transient_lifespan );
- }
-
- return $range_min_trans;
- }
-
- public function get_range_max_auto( $post_types, $post_stati, $args ) {
- $min_field_name = '_sfm_' . $args['number_start_meta_key'];
- $range_max_trans = false;
- $cache_key = '';
-
- if ( $this->use_transients == 1 ) {
-
- $cache_key = 'field_range_max_' . $this->sfid . '_' . $min_field_name;
- $range_max_trans = Search_Filter_Wp_Cache::get_transient( $cache_key );
- }
-
- if ( false === $range_max_trans ) {
- // lookup max
- // $max_field_name = '_sfm_'.$args['number_start_meta_key'];
- $max_meta_key = $args['number_start_meta_key'];
-
- $use_same_as_start = $args['number_use_same_toggle'];
- if ( ! $use_same_as_start ) {
- // $max_field_name = '_sfm_'.$args['number_end_meta_key'];
- $max_meta_key = $args['number_end_meta_key'];
- }
-
- // lookup max
- $max_query = new WP_Query(
- array(
- 'post_type' => $post_types,
- 'post_status' => $post_stati,
- 'orderby' => 'meta_value_num',
- 'order' => 'DESC',
- 'meta_key' => $max_meta_key,
- 'posts_per_page' => 1,
- )
- );
- $max_posts = $max_query->get_posts();
- if ( ( count( $max_posts ) == 1 ) && ( isset( $max_posts[0] ) ) ) {
- $max_post = $max_posts[0];
- if ( isset( $max_post->ID ) ) {
- $max_value = get_post_meta( $max_post->ID, $max_meta_key, true );
- $range_max_trans = $max_value;
- }
- }
- } else {
-
- }
-
- if ( ( $this->use_transients == 1 ) && ( false !== $range_max_trans ) ) {
- $transient_lifespan = DAY_IN_SECONDS / 24; // 1hr
- Search_Filter_Wp_Cache::set_transient( $cache_key, $range_max_trans, $transient_lifespan );
- }
-
- return $range_max_trans;
-
- }
- private function get_range_single_options( $args ) {
- // options is passed by ref, so when `wp_list_categories` is finished running, it will contain an object of all options for this field.
- $options = array();
- $name = $args['name_sf'];
-
- global $searchandfilter;
- $searchform = $searchandfilter->get( $this->sfid );
- $this->auto_count = $searchform->settings( 'enable_auto_count' );
- $this->auto_count_deselect_emtpy = $searchform->settings( 'auto_count_deselect_emtpy' );
-
- $min = $args['min'];
- $max = $args['max'];
- $step = $args['step'];
- $thousand_seperator = $args['thousand_seperator'];
- $decimal_point = $args['decimal_seperator'];
- $decimal_places = $args['decimal_places'];
-
- $value_prefix = $args['prefix'];
- $value_postfix = $args['postfix'];
-
- /*
- if(isset($all_items_label))
- {
- if($all_items_label!="")
- {//check to see if all items has been registered in field then use this label
- $returnvar .= ''.esc_html($all_items_label).' ';
- }
- }*/
-
- $show_option_all_sf = $args['show_option_all_sf'];
- $show_default_option_sf = $args['show_default_option_sf'];
-
- if ( ( isset( $show_option_all_sf ) ) && ( $show_default_option_sf == true ) ) {
- $default_option = new stdClass();
- $default_option->label = $show_option_all_sf;
- $default_option->attributes = array(
- 'class' => SF_CLASS_PRE . 'level-0 ' . SF_ITEM_CLASS_PRE . '0',
- );
- $default_option->value = '';
-
- array_push( $options, $default_option );
- }
-
- $value = $min;
-
- if ( $step > 0 ) {
- for ( $value = $min; $value <= $max; $value += $step ) {
- $min_val = (float) $value;
- $max_val = (float) $min_val + $step;
-
- /*
- if($max_val>$max)
- {
- $max_val = (float) $max;
- }*/
-
- $min_label = number_format( (float) $min_val, $decimal_places, $decimal_point, $thousand_seperator );
- $max_label = number_format( (float) $max_val, $decimal_places, $decimal_point, $thousand_seperator );
-
- $option = new stdClass();
- $option->label = $value_prefix . $min_label . $value_postfix . ' - ' . $value_prefix . $max_label . $value_postfix;
- $option->attributes = array(
- 'class' => SF_CLASS_PRE . 'level-0 ',
- );
-
- $option->value = $min_val . '+' . $max_val;
- array_push( $options, $option );
-
- }
- }
-
- return $options;
- }
-
- private function get_range_options( $args ) {
- // options is passed by ref, so when `wp_list_categories` is finished running, it will contain an object of all options for this field.
- $options = array();
- $name = $args['name_sf'];
-
- global $searchandfilter;
- $searchform = $searchandfilter->get( $this->sfid );
- $this->auto_count = $searchform->settings( 'enable_auto_count' );
- $this->auto_count_deselect_emtpy = $searchform->settings( 'auto_count_deselect_emtpy' );
-
- $min = $args['min'];
- $max = $args['max'];
- $step = $args['step'];
- $thousand_seperator = $args['thousand_seperator'];
- $decimal_point = $args['decimal_seperator'];
- $decimal_places = $args['decimal_places'];
-
- $value = $min;
-
- // for($value=$min; $value<=$max; $value+=$step)
- for ( $value = $min; $value <= $max + $step; $value += $step ) {
- $value_formatted = number_format( (float) $value, $decimal_places, $decimal_point, $thousand_seperator );
-
- $option = new stdClass();
- $option->label = $value_formatted;
- $option->attributes = array(
- 'class' => SF_CLASS_PRE . 'level-0 ',
- );
-
- $option->value = $value;
- array_push( $options, $option );
- }
-
- /*
- if(($value-$step)!=$max)
- {
- $option = new stdClass();
-
- $option->attributes = array(
- 'class' => SF_CLASS_PRE.'level-0 '
- );
-
- $value_formatted = number_format( (float)$max, $decimal_places, $decimal_point, $thousand_seperator );
- $option->label = $value_formatted;
- $option->value = $max;
- array_push($options, $option);
- }*/
-
- return $options;
- }
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_type.php b/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_type.php
deleted file mode 100644
index 411f5e0e..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/post_type.php
+++ /dev/null
@@ -1,166 +0,0 @@
-current_query->get_field_values( 'post_types' );
-
- if ( count( $fields_defaults ) == 0 ) {
- $fields_defaults = array( '' );
- }
-
- $returnvar = '';
-
- // set defaults so no chance of any php errors when accessing un init vars
- $defaults = array(
- 'post_types' => array(),
- 'input_type' => '',
- 'heading' => '',
- 'show_count' => '',
- 'hide_empty' => '',
- 'order_by' => '',
- 'order_dir' => '',
- 'all_items_label' => '',
- 'accessibility_label' => '',
- 'combo_box' => '',
- 'no_results_message' => '',
- );
-
- $values = array_replace( $defaults, $field_data );
-
- $args = array( 'show_default_option_sf' => false );
-
- if ( $field_data['all_items_label'] == '' ) {
- $args['show_option_all_sf'] = __( 'All Post Types', $this->plugin_slug );
- } else {
- $args['show_option_all_sf'] = $field_data['all_items_label'];
- }
-
- $args['post_types'] = $values['post_types'];
-
- $input_args = array(
- 'name' => $field_name,
- 'defaults' => $fields_defaults,
- 'attributes' => array(),
- 'options' => array(),
- );
-
- if ( $values['input_type'] == 'select' ) {
- // setup any custom attributes
- $attributes = array();
- if ( $values['combo_box'] == 1 ) {
- $attributes['data-combobox'] = '1';
-
- if ( ! empty( $values['no_results_message'] ) ) {
- $attributes['data-combobox-nrm'] = $values['no_results_message'];
- }
- }
-
- $args['show_default_option_sf'] = true;
- $input_args['options'] = $this->get_options( $args );
- $input_args['attributes'] = $attributes;
- $input_args['accessibility_label'] = $values['accessibility_label'];
-
- $returnvar .= $this->create_input->select( $input_args );
-
- } elseif ( $values['input_type'] == 'checkbox' ) {
- // setup any custom attributes
- $attributes = array();
-
- // finalise input args object
- $input_args['options'] = $this->get_options( $args );
- $input_args['attributes'] = $attributes;
-
- $returnvar .= $this->create_input->checkbox( $input_args );
- } elseif ( $values['input_type'] == 'radio' ) {
- // setup any custom attributes
- $attributes = array();
-
- // finalise input args object
- $args['show_default_option_sf'] = true;
- $input_args['options'] = $this->get_options( $args );
- $input_args['attributes'] = $attributes;
-
- $returnvar .= $this->create_input->radio( $input_args );
-
- } elseif ( $values['input_type'] == 'multiselect' ) {
- // setup any custom attributes
- $attributes = array();
- if ( $values['combo_box'] == 1 ) {
- $attributes['data-combobox'] = '1';
- $attributes['data-placeholder'] = $args['show_option_all_sf'];
-
- if ( ! empty( $values['no_results_message'] ) ) {
- $attributes['data-combobox-nrm'] = $values['no_results_message'];
- }
- }
- $attributes['multiple'] = 'multiple';
-
- // finalise input args object
- $input_args['options'] = $this->get_options( $args );
- $input_args['attributes'] = $attributes;
- $input_args['accessibility_label'] = $values['accessibility_label'];
-
- $returnvar .= $this->create_input->select( $input_args );
-
- }
-
- return $returnvar;
- }
-
- public function get_options( $args ) {
- $options = array();
-
- // $post_types_data = array();
-
- $show_option_all_sf = $args['show_option_all_sf'];
- $show_default_option_sf = $args['show_default_option_sf'];
-
- if ( ( isset( $show_option_all_sf ) ) && ( $show_default_option_sf == true ) ) {
- $default_option = new stdClass();
- $default_option->label = $show_option_all_sf;
- $default_option->attributes = array(
- 'class' => SF_CLASS_PRE . 'level-0 ' . SF_ITEM_CLASS_PRE . '0',
- );
- $default_option->value = '';
-
- array_push( $options, $default_option );
- }
-
- if ( is_array( $args['post_types'] ) ) {
- foreach ( $args['post_types'] as $post_type => $val ) {
- $post_type_object = get_post_type_object( $post_type );
-
- if ( $post_type_object ) {
- $option = new stdClass();
- $option->label = $post_type_object->labels->name;
- $option->attributes = array(
- // 'class' => SF_CLASS_PRE.'level-0 '.SF_ITEM_CLASS_PRE.'0'
- 'class' => SF_CLASS_PRE . 'level-0 ',
- );
- $option->value = $post_type;
-
- array_push( $options, $option );
-
- }
- }
- }
-
- return $options;
- }
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/posts_per_page.php b/wp/wp-content/plugins/search-filter-pro/public/includes/fields/posts_per_page.php
deleted file mode 100644
index ef8e0e42..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/posts_per_page.php
+++ /dev/null
@@ -1,154 +0,0 @@
-current_query->get_field_values( '_sf_ppp' );
- // $fields_defaults = $this->current_query->get_field_values("sort_order");
-
- if ( count( $fields_defaults ) == 0 ) {
- $fields_defaults = array( '' );
- }
-
- $search_form_id = $this->sfid;
-
- $returnvar = '';
-
- // set defaults so no chance of any php errors when accessing un init vars
- $defaults = array(
- 'input_type' => 'select',
- 'all_items_label' => '',
- 'accessibility_label' => '',
- 'ppp_min' => '25',
- 'ppp_max' => '100',
- 'ppp_step' => '25',
- 'options' => array(),
- );
-
- $values = array_replace( $defaults, $field_data );
-
- $args = array();
-
- $args = array( 'show_default_option_sf' => false );
-
- if ( $field_data['all_items_label'] == '' ) {
- if ( $values['input_type'] == 'select' ) {
- $args['show_option_all_sf'] = __( 'Results Per Page ', $this->plugin_slug );
- } elseif ( $values['input_type'] == 'radio' ) {
- $args['show_option_all_sf'] = __( 'Results Per Page', $this->plugin_slug );
- }
- } else {
- $args['show_option_all_sf'] = $field_data['all_items_label'];
- }
-
- $attributes = array();
-
- /*
- if($values['combo_box']==1)
- {
- $attributes['data-combobox'] = '1';
- }*/
-
- $args['show_default_option_sf'] = true;
- $args['ppp_min'] = $values['ppp_min'];
- $args['ppp_max'] = $values['ppp_max'];
- $args['ppp_step'] = $values['ppp_step'];
-
- $input_args = array(
- 'name' => $field_name,
- 'defaults' => $fields_defaults,
- 'attributes' => $attributes,
- 'options' => array(),
- );
-
- if ( $values['input_type'] == 'select' ) {
- $args['show_default_option_sf'] = true;
- $input_args['options'] = $this->get_options( $args );
- $input_args['attributes'] = $attributes;
- $input_args['accessibility_label'] = $values['accessibility_label'];
-
- $returnvar .= $this->create_input->select( $input_args );
- } elseif ( $values['input_type'] == 'radio' ) {
- // setup any custom attributes
- // $attributes = array();
-
- // finalise input args object
- $args['show_default_option_sf'] = true;
- $input_args['options'] = $this->get_options( $args );
- $input_args['attributes'] = $attributes;
-
- $returnvar .= $this->create_input->radio( $input_args );
-
- }
-
- // $returnvar .= $this->create_input->generate_select($taxonomychildren, $field_name, $defaults, $values['all_items_label']);
-
- return $returnvar;
- }
-
- public function get_options( $args ) {
- $options = array();
-
- $show_option_all_sf = $args['show_option_all_sf'];
- $show_default_option_sf = $args['show_default_option_sf'];
-
- if ( ( isset( $show_option_all_sf ) ) && ( $show_default_option_sf == true ) ) {
- $default_option = new stdClass();
- $default_option->label = $show_option_all_sf;
- $default_option->attributes = array(
- 'class' => SF_CLASS_PRE . 'level-0 ' . SF_ITEM_CLASS_PRE . '0',
- );
- $default_option->value = '';
-
- array_push( $options, $default_option );
- }
-
- $startval = $args['ppp_min'];
- $endval = $args['ppp_max'];
- $step = $args['ppp_step'];
- $diff = $endval - $startval;
- $istep = ceil( $diff / $step );
-
- for ( $i = 0; $i <= ( $istep ); $i++ ) {
- $option_value = $startval + ( $i * $step );
- /*
- $option_top_value = ($option_value + $step - 1);
-
- if($option_top_value>$endval)
- {
- $option_top_value = $endval;
- }*/
-
- // $input_id = SF_INPUT_ID_PRE.sanitize_html_class($name."_".$option_value);
-
- $option_label = $option_value;// ." - ".$option_top_value;
-
- $option = new stdClass();
- $option->label = $option_label;
- $option->attributes = array(
- 'class' => SF_CLASS_PRE . 'level-0 ',
- );
- $option->value = $option_value;
-
- array_push( $options, $option );
-
- }
-
- return $options;
- }
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/reset.php b/wp/wp-content/plugins/search-filter-pro/public/includes/fields/reset.php
deleted file mode 100644
index 2cb4a75c..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/reset.php
+++ /dev/null
@@ -1,44 +0,0 @@
-current_query->get_field_values($field_name);
-
- $returnvar = '';
-
- // set defaults so no chance of any php errors when accessing un init vars
- $defaults = array(
- 'label' => __( 'Reset', $this->plugin_slug ),
- 'input_type' => 'link',
- 'submit_form' => 'always',
- );
-
- $values = array_replace( $defaults, $field_data );
-
- $searchterm = '';
- if ( $values['input_type'] == 'link' ) {
- $returnvar .= '' . $values['label'] . ' ';
- } else {
- $returnvar .= ' ';
- }
-
- return $returnvar;
- }
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/search.php b/wp/wp-content/plugins/search-filter-pro/public/includes/fields/search.php
deleted file mode 100644
index 2b3f55b3..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/search.php
+++ /dev/null
@@ -1,58 +0,0 @@
-current_query->get_search_term();
-
- $returnvar = '';
-
- if ( empty( $fields_defaults ) ) {
- $fields_defaults = '';
- }
-
- // set defaults so no chance of any php errors when accessing un init vars
- $defaults = array(
- 'placeholder' => __( 'Search …', $this->plugin_slug ),
- 'accessibility_label' => '',
- );
- $values = array_replace( $defaults, $field_data );
-
- $searchterm = '';
- if ( isset( $this->searchterm ) ) {
- $searchterm = esc_attr( $this->searchterm );
- }
-
- $attributes = array(
- 'placeholder' => $values['placeholder'],
- );
-
- $input_args = array(
- 'name' => $field_name,
- 'value' => $fields_defaults,
-
- 'accessibility_label' => $values['accessibility_label'],
- 'attributes' => $attributes,
- );
-
- $returnvar .= $this->create_input->text( $input_args );
-
- return $returnvar;
- }
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/sort_order.php b/wp/wp-content/plugins/search-filter-pro/public/includes/fields/sort_order.php
deleted file mode 100644
index ed517f45..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/sort_order.php
+++ /dev/null
@@ -1,174 +0,0 @@
-current_query->get_field_values( '_sf_sort_order' );
- // $fields_defaults = $this->current_query->get_field_values("sort_order");
-
- if ( count( $fields_defaults ) == 0 ) {
- $fields_defaults = array( '' );
- }
-
- $search_form_id = $this->sfid;
-
- $returnvar = '';
-
- // set defaults so no chance of any php errors when accessing un init vars
- $defaults = array(
- 'input_type' => 'select',
- 'all_items_label' => '',
- 'accessibility_label' => '',
- 'sort_options' => array(),
- );
-
- $values = array_replace( $defaults, $field_data );
-
- $args = array();
-
- $args = array( 'show_default_option_sf' => false );
-
- if ( $field_data['all_items_label'] == '' ) {
- if ( $values['input_type'] == 'select' ) {
- $args['show_option_all_sf'] = __( 'Sort Results By', $this->plugin_slug );
- } elseif ( $values['input_type'] == 'radio' ) {
- $args['show_option_all_sf'] = __( 'Default Sort Order', $this->plugin_slug );
- }
- } else {
- $args['show_option_all_sf'] = $field_data['all_items_label'];
- }
-
- $args['sort_options'] = $values['sort_options'];
-
- $attributes = array();
-
- /*
- if($values['combo_box']==1)
- {
- $attributes['data-combobox'] = '1';
- }*/
-
- $args['show_default_option_sf'] = true;
-
- $input_args = array(
- 'name' => $field_name,
- 'defaults' => $fields_defaults,
- 'attributes' => $attributes,
- 'options' => array(),
- );
-
- if ( $values['input_type'] == 'select' ) {
- $args['show_default_option_sf'] = true;
- $input_args['options'] = $this->get_options( $args );
- $input_args['attributes'] = $attributes;
- $input_args['accessibility_label'] = $values['accessibility_label'];
-
- $returnvar .= $this->create_input->select( $input_args );
- } elseif ( $values['input_type'] == 'radio' ) {
- // setup any custom attributes
- $attributes = array();
-
- // finalise input args object
- $args['show_default_option_sf'] = true;
- $input_args['options'] = $this->get_options( $args );
- $input_args['attributes'] = $attributes;
-
- $returnvar .= $this->create_input->radio( $input_args );
-
- }
-
- // $returnvar .= $this->create_input->generate_select($taxonomychildren, $field_name, $defaults, $values['all_items_label']);
-
- return $returnvar;
- }
-
- public function get_options( $args ) {
- $options = array();
-
- $show_option_all_sf = $args['show_option_all_sf'];
- $show_default_option_sf = $args['show_default_option_sf'];
-
- if ( ( isset( $show_option_all_sf ) ) && ( $show_default_option_sf == true ) ) {
- $default_option = new stdClass();
- $default_option->label = $show_option_all_sf;
- $default_option->attributes = array(
- 'class' => SF_CLASS_PRE . 'level-0 ' . SF_ITEM_CLASS_PRE . '0',
- );
- $default_option->value = '';
-
- array_push( $options, $default_option );
- }
-
- $no_sort_options = count( $args['sort_options'] );
- if ( $no_sort_options > 0 ) {
- foreach ( $args['sort_options'] as $sort_option ) {
- $sort_by = '';
- $sort_label = '';
- $sort_dir = '';
-
- $meta_key = '';
- $sort_type = '';
-
- if ( isset( $sort_option['sort_by'] ) ) {
- $sort_by = $sort_option['sort_by'];
-
- if ( $sort_by == 'meta_value' ) {
- if ( isset( $sort_option['meta_key'] ) ) {
- $sort_by = SF_META_PRE . $sort_option['meta_key'];
- }
-
- if ( isset( $sort_option['sort_type'] ) ) {
- if ( $sort_option['sort_type'] == 'numeric' ) {
- $sort_type = '+num';
- } elseif ( $sort_option['sort_type'] == 'alphabetic' ) {
- $sort_type = '+alpha';
- } elseif ( $sort_option['sort_type'] == 'date' ) {
- $sort_type = '+date';
- } elseif ( $sort_option['sort_type'] == 'datetime' ) {
- $sort_type = '+datetime';
- }
- /*
- else if($sort_option['sort_type']=="decimal")
- {
- $sort_type = "+decimal";
- }*/
- }
- }
- }
- if ( isset( $sort_option['sort_label'] ) ) {
- $sort_label = $sort_option['sort_label'];
- }
- if ( isset( $sort_option['sort_dir'] ) ) {
- $sort_dir = $sort_option['sort_dir'];
- }
-
- $option = new stdClass();
- $option->label = $sort_label;
- $option->attributes = array(
- 'class' => SF_CLASS_PRE . 'level-0 ',
- );
- $option->value = $sort_by . '+' . $sort_dir . $sort_type;
-
- array_push( $options, $option );
-
- }
- }
-
- return $options;
- }
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/submit.php b/wp/wp-content/plugins/search-filter-pro/public/includes/fields/submit.php
deleted file mode 100644
index 8e1c1d47..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/submit.php
+++ /dev/null
@@ -1,37 +0,0 @@
-current_query->get_field_values($field_name);
-
- $returnvar = '';
-
- // set defaults so no chance of any php errors when accessing un init vars
- $defaults = array(
- 'label' => __( 'Submit', $this->plugin_slug ),
- );
- $values = array_replace( $defaults, $field_data );
-
- // $searchterm = (esc_attr($this->searchterm));
- $searchterm = '';
- $returnvar .= ' ';
-
- return $returnvar;
- }
-}
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/taxonomy.php b/wp/wp-content/plugins/search-filter-pro/public/includes/fields/taxonomy.php
deleted file mode 100644
index 76f991df..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/fields/taxonomy.php
+++ /dev/null
@@ -1,390 +0,0 @@
-sfid;
-
- $returnvar = "";
-
- //set defaults so no chance of any php errors when accessing un init vars
- $defaults = array(
- 'taxonomy_name' => '',
- 'input_type' => '',
- 'heading' => '',
- 'all_items_label' => '',
- 'accessibility_label' => '',
- 'operator' => '',
- 'show_count' => '',
- 'hide_empty' => '',
- 'hierarchical' => '',
- 'drill_down' => '',
- 'order_by' => '',
- 'order_dir' => '',
- 'exclude_ids' => '',
- 'sync_include_exclude' => '',
- 'combo_box' => '',
- 'no_results_message' => ''
- );
-
- $values = array_replace($defaults, $field_data);
-
- $taxonomydata = get_taxonomy($values['taxonomy_name']);
-
- $field_name = SF_TAX_PRE . $values['taxonomy_name'];
-
- $fields_defaults = $this->current_query->get_field_values($field_name);
- if(count($fields_defaults)==0)
- {
- $fields_defaults = array("");
- }
-
- if(($values['all_items_label']=="")&&(isset($taxonomydata->labels->all_items)))
- {
- $values['all_items_label'] = $taxonomydata->labels->all_items;
- }
-
- //check the taxonomy exists
- if($taxonomydata)
- {
- $args = array(
- 'sf_name' => $field_name,
- 'sfid' => $search_form_id,
- 'taxonomy' => $values['taxonomy_name'],
- 'hierarchical' => (bool)$values['hierarchical'],
- 'child_of' => 0,
- 'echo' => false,
- 'hide_if_empty' => false,
- 'hide_empty' => (bool)$values['hide_empty'],
- 'show_option_none' => '',
- 'show_count' => (bool)$values['show_count'],
- 'show_option_all' => '',
- 'show_option_all_sf' => esc_attr($values['all_items_label']),
- 'show_default_option_sf' => false,
- 'show_count_format_sf' => "inline",
- 'elem_attr' => ""
- );
-
- if(($values['order_by']!="default")&&($values['order_by']!=""))
- {
- $args['orderby'] = $values['order_by'];
- $args['order'] = $values['order_dir'];
- }
-
- if($values['sync_include_exclude']==1)
- {
-
- //global $searchandfilter;
-
- if($searchandfilter->get($search_form_id)->settings('taxonomies_settings')!="")
- {
-
- if(is_array($searchandfilter->get($search_form_id)->settings('taxonomies_settings')))
- {
- $taxonomies_settings = $searchandfilter->get($search_form_id)->settings('taxonomies_settings');
-
- if($field_data['type']=="category")
- {
- if(isset($taxonomies_settings['category']))
- {
- if(isset($taxonomies_settings['category']['include_exclude']))
- {
- if($taxonomies_settings['category']['include_exclude']=="include")
- {
- $args['include'] = $taxonomies_settings['category']['ids'];
- }
- else
- {
-
-
- if($values['input_type']=="select")
- {
- if(!(bool)$values['hierarchical'])
- {//if not hierearchical exclude categories as normal
- $args['exclude'] = $taxonomies_settings['category']['ids'];
- }
- else
- {//else exclude category and its children when using hierarchical
- $args['exclude_tree'] = $taxonomies_settings['category']['ids'];
- }
- }
- else
- {
- $args['exclude'] = $taxonomies_settings['category']['ids'];
- }
- }
-
- }
- }
-
- }
- else if($field_data['type']=="tag")
- {
- if(isset($taxonomies_settings['post_tag']))
- {
- if(isset($taxonomies_settings['post_tag']['include_exclude']))
- {
- if($taxonomies_settings['post_tag']['include_exclude']=="include")
- {
- $args['include'] = $taxonomies_settings['post_tag']['ids'];
- }
- else
- {
- if($values['input_type']=="select")
- {
- if(!(bool)$values['hierarchical'])
- {//if not hierearchical exclude categories as normal
- $args['exclude'] = $taxonomies_settings['post_tag']['ids'];
- }
- else
- {//else exclude post_tag and its children when using hierarchical
- $args['exclude_tree'] = $taxonomies_settings['post_tag']['ids'];
- }
- }
- else
- {
- $args['exclude'] = $taxonomies_settings['post_tag']['ids'];
- }
- }
-
- }
- }
-
- }
- else if($field_data['type']=="taxonomy")
- {
- if(isset($taxonomies_settings[$values['taxonomy_name']]))
- {
- if(isset($taxonomies_settings[$values['taxonomy_name']]['include_exclude']))
- {
- if($taxonomies_settings[$values['taxonomy_name']]['include_exclude']=="include")
- {
- $args['include'] = $taxonomies_settings[$values['taxonomy_name']]['ids'];
- }
- else
- {
- if($values['input_type']=="select")
- {
- if(!(bool)$values['hierarchical'])
- {//if not hierearchical exclude categories as normal
- $args['exclude'] = $taxonomies_settings[$values['taxonomy_name']]['ids'];
- }
- else
- {//else exclude taxonomy and its children when using hierarchical
- $args['exclude_tree'] = $taxonomies_settings[$values['taxonomy_name']]['ids'];
- }
- }
- else
- {
- $args['exclude'] = $taxonomies_settings[$values['taxonomy_name']]['ids'];
- }
- }
- }
- }
- }
- }
- }
- }
- else
- {
-
- if($values['input_type']=="select")
- {
- if(!(bool)$values['hierarchical'])
- {//if not hierearchical exclude categories as normal
- $args['exclude'] = $values['exclude_ids'];
- }
- else
- {//else exclude category and its children when using hierarchical
- $args['exclude_tree'] = $values['exclude_ids'];
- }
- }
- else
- {
- $args['exclude'] = $values['exclude_ids'];
- }
- }
-
- /* setup defaults */
- $args['title_li'] = '';
- $args['defaults'] = "";
-
- if($values['input_type']=="select")
- {
- $attributes = array();
-
- if($values['combo_box']==1)
- {
- $attributes['data-combobox'] = '1';
-
- if(!empty($values['no_results_message'])){
- $attributes['data-combobox-nrm'] = $values['no_results_message'];
- }
-
- }
- $args['show_default_option_sf'] = true;
-
- $input_args = array(
- 'name' => SF_TAX_PRE.$values['taxonomy_name'],
- 'options' => $this->get_options($args),
- 'defaults' => $fields_defaults,
- 'attributes' => $attributes,
- 'accessibility_label' => $values['accessibility_label']
- );
-
- $returnvar .= $this->create_input->select($input_args);
- }
- else if($values['input_type']=="checkbox")
- {
- $attributes = array();
-
- $attributes['data-operator'] = $values['operator'];
- $args['show_count_format_sf'] = "html";
-
- $input_args = array(
- 'name' => SF_TAX_PRE.$values['taxonomy_name'],
- 'options' => $this->get_options($args),
- 'defaults' => $fields_defaults,
- 'attributes' => $attributes
- );
-
- $returnvar .= $this->create_input->checkbox($input_args);
- }
- else if($values['input_type']=="list")
- {
- //$args['elem_attr'] .= ' data-operator="'.esc_attr($values['operator']).'"';
- //$returnvar .= $this->create_input->generate_wp_list($args, $values['taxonomy_name'], $taxonomydata->labels);
- }
- else if($values['input_type']=="radio")
- {
- $attributes = array();
- $args['show_count_format_sf'] = "html";
- $args['show_default_option_sf'] = true;
-
- $input_args = array(
- 'name' => SF_TAX_PRE.$values['taxonomy_name'],
- 'options' => $this->get_options($args),
- 'defaults' => $fields_defaults,
- 'attributes' => $attributes
- );
-
- $returnvar .= $this->create_input->radio($input_args);
- }
- else if($values['input_type']=="multiselect")
- {
- $attributes = array();
-
- if($values['combo_box']==1)
- {
- $attributes['data-combobox'] = '1';
- if(!empty($values['no_results_message'])){
- $attributes['data-combobox-nrm'] = $values['no_results_message'];
- }
- }
-
- $attributes['data-placeholder'] = $values['all_items_label'];
- $attributes['data-operator'] = $values['operator'];
- $attributes['multiple'] = "multiple";
-
- $input_args = array(
- 'name' => SF_TAX_PRE.$values['taxonomy_name'],
- 'options' => $this->get_options($args),
- 'defaults' => $fields_defaults,
- 'attributes' => $attributes,
- 'accessibility_label' => $values['accessibility_label']
- );
-
- $returnvar .= $this->create_input->select($input_args);
- }
- }
-
- return $returnvar;
- }
-
- private function get_options($args)
- {
- //options is passed by ref, so when `wp_list_categories` is finished running, it will contain an object of all options for this field.
- $options = array();
-
- $options_obj = new Search_Filter_Taxonomy_Options();
- global $searchandfilter;
- //use a walker to silence output, and create a custom object which is stored in `$options`
-
- // @ todo - for efficency, figure out if we're using ustom post stati
- // if not using custom post stati, then use regular `hide_empty` (the WP query is more efficient)
- $args['walker'] = new Search_Filter_Taxonomy_Object_Walker($args['sf_name'], $options_obj);
- $args['sf_hide_empty'] = $args['hide_empty'];
- $args['hide_empty'] = false;
-
- $output = wp_list_categories($args); //nothing is returned here but `$options` is updated
- $options = $options_obj->get();
-
- return $options;
-
- }
-}
-
-class Search_Filter_TTT //TTT - taxonomy term templates
-{
- public static $term_templates = array();
-
- public static function get_template($taxonomy_name)
- {
- if(isset(self::$term_templates[$taxonomy_name])) {
- return self::$term_templates[$taxonomy_name];
- }
- else{
- return array();
- }
- }
- public static function add_templates($templates, $taxonomy_name)
- {
- self::$term_templates[$taxonomy_name] = $templates;
- }
- public static function add_template($template, $depth, $taxonomy_name)
- {
- if(!isset(self::$term_templates[$taxonomy_name]))
- {
- self::$term_templates[$taxonomy_name] = array();
- }
-
- self::$term_templates[$taxonomy_name][$depth] = $template;
-
- //echo "$taxonomy_name ( $depth ) \n";
- //echo $template." \n";
- //array_push(self::$term_templates[$taxonomy_name], $template);
- }
-}
-
-class Search_Filter_Taxonomy_Options {
-
- private $options = array();
-
- public function set($options)
- {
- $this->options = $options;
- }
- public function get()
- {
- return $this->options;
- }
-}
-
-
diff --git a/wp/wp-content/plugins/search-filter-pro/public/includes/index.php b/wp/wp-content/plugins/search-filter-pro/public/includes/index.php
deleted file mode 100644
index 8142269b..00000000
--- a/wp/wp-content/plugins/search-filter-pro/public/includes/index.php
+++ /dev/null
@@ -1 +0,0 @@
-
- * @license GPL-2.0+
- * @link http://example.com
- * @copyright 2014 Your Name or Company Name
- */
-
-// If this file is called directly, abort.
-if ( ! defined( 'ABSPATH' ) ) {
- die;
-}
-
-?>
-
-
diff --git a/wp/wp-content/plugins/search-filter-pro/search-filter-pro.php b/wp/wp-content/plugins/search-filter-pro/search-filter-pro.php
deleted file mode 100644
index cb84969e..00000000
--- a/wp/wp-content/plugins/search-filter-pro/search-filter-pro.php
+++ /dev/null
@@ -1,137 +0,0 @@
-activate( $network_wide );
-}
-
-/**
- * The code that runs during plugin deactivation.
- */
-function deactivate_search_filter( $network_wide ) {
- require_once plugin_dir_path( __FILE__ ) . 'includes/class-search-filter-deactivator.php';
- Search_Filter_Deactivator::deactivate( $network_wide );
-}
-
-register_activation_hook( __FILE__, 'activate_search_filter' );
-register_deactivation_hook( __FILE__, 'deactivate_search_filter' );
-
-if ( ( ! is_admin() ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'public/class-search-filter.php';
- add_action( 'plugins_loaded', array( 'Search_Filter', 'get_instance' ) );
-}
-
-
-/*
-----------------------------------------------------------------------------*
- * Dashboard and Administrative Functionality
- *----------------------------------------------------------------------------*/
-if ( is_admin() ) {
- require_once plugin_dir_path( __FILE__ ) . 'admin/class-search-filter-admin.php';
- add_action( 'plugins_loaded', array( 'Search_Filter_Admin', 'get_instance' ) );
-}
-
-if ( ! class_exists( 'Search_Filter_Register_Widget' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'includes/class-search-filter-register-widget.php';
-}
-if ( ! class_exists( 'Search_Filter_Post_Cache' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'includes/class-search-filter-post-cache.php';
-}
-
-if ( ! class_exists( 'Search_Filter_Wp_Cache' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'includes/class-search-filter-wp-cache.php';
-}
-if ( ! class_exists( 'Search_Filter_Wp_Data' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'includes/class-search-filter-wp-data.php';
-}
-if ( ! class_exists( 'Search_Filter_Helper' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'includes/class-search-filter-helper.php';
-}
-if ( ! class_exists( 'Search_Filter_Shared' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'includes/class-search-filter-shared.php';
-}
-if ( ! class_exists( 'Search_Filter_Third_Party' ) ) {
- require_once plugin_dir_path( __FILE__ ) . 'includes/class-search-filter-third-party.php';
-}
-
-
-if ( ! defined( 'SF_FPRE' ) ) {
- define( 'SF_FPRE', '_sf_' );
-}
-if ( ! defined( 'SF_TAX_PRE' ) ) {
- define( 'SF_TAX_PRE', '_sft_' );
-}
-if ( ! defined( 'SF_META_PRE' ) ) {
- define( 'SF_META_PRE', '_sfm_' );
-}
-if ( ! defined( 'SF_CLASS_PRE' ) ) {
- define( 'SF_CLASS_PRE', 'sf-' );
-}
-if ( ! defined( 'SF_INPUT_ID_PRE' ) ) {
- define( 'SF_INPUT_ID_PRE', 'sf' );
-}
-if ( ! defined( 'SF_FIELD_CLASS_PRE' ) ) {
- define( 'SF_FIELD_CLASS_PRE', SF_CLASS_PRE . 'field-' );
-}
-if ( ! defined( 'SF_ITEM_CLASS_PRE' ) ) {
- define( 'SF_ITEM_CLASS_PRE', SF_CLASS_PRE . 'item-' );
-}
-
-global $search_filter_post_cache;
-$search_filter_post_cache = new Search_Filter_Post_Cache();
-
-global $search_filter_third_party;
-$search_filter_third_party = new Search_Filter_Third_Party();
-
-global $search_filter_shared;
-$search_filter_shared = new Search_Filter_Shared();
diff --git a/wp/wp-content/plugins/search-filter-pro/templates/results-infinite-scroll.php b/wp/wp-content/plugins/search-filter-pro/templates/results-infinite-scroll.php
deleted file mode 100644
index ad44b44d..00000000
--- a/wp/wp-content/plugins/search-filter-pro/templates/results-infinite-scroll.php
+++ /dev/null
@@ -1,69 +0,0 @@
-have_posts() ) {
- ?>
-
- Found found_posts; ?> Results
-
- have_posts() ) {
- $query->the_post();
-
- ?>
-
-
-
-
- ';
- the_post_thumbnail( 'small' );
- echo '';
- }
- ?>
-
-
-
-
-
-
-
-
-
-
-
- End of Results
-
-
diff --git a/wp/wp-content/plugins/search-filter-pro/templates/results.php b/wp/wp-content/plugins/search-filter-pro/templates/results.php
deleted file mode 100644
index ae9e0df8..00000000
--- a/wp/wp-content/plugins/search-filter-pro/templates/results.php
+++ /dev/null
@@ -1,91 +0,0 @@
-have_posts() ) {
- ?>
-
- Found found_posts; ?> Results
- Page query['paged']; ?> of max_num_pages; ?>
-
-
-
- have_posts() ) {
- $query->the_post();
-
- ?>
-
-
-
-
- ';
- the_post_thumbnail( 'small' );
- echo '';
- }
- ?>
-
-
-
-
-
-
-
-
- Page query['paged']; ?> of max_num_pages; ?>
-
-
-
\ No newline at end of file
diff --git a/wp/wp-content/plugins/search-filter-pro/uninstall.php b/wp/wp-content/plugins/search-filter-pro/uninstall.php
deleted file mode 100644
index 16b5c818..00000000
--- a/wp/wp-content/plugins/search-filter-pro/uninstall.php
+++ /dev/null
@@ -1,106 +0,0 @@
-blogid;
-
- // Get all blogs in the network and activate plugin on each one
- $blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" );
- foreach ( $blog_ids as $blog_id ) {
- switch_to_blog( $blog_id );
- uninstall_search_filter_pro();
- restore_current_blog();
- }
-
-}
-else
-{
-
- //check for existence of caching database, if not install it
- uninstall_search_filter_pro();
-}
-
-function uninstall_search_filter_pro()
-{
-
- global $wpdb;
-
- $remove_all_data = Search_Filter_Helper::get_option( 'remove_all_data' );
-
- if($remove_all_data == 1) {
-
- delete_option( "search-filter-cache" );
- delete_option( 'search_filter_cache_speed' );
- delete_option( 'search_filter_cache_use_manual' );
- delete_option( 'search_filter_cache_use_background_processes' );
- delete_option( 'search_filter_cache_use_transients' );
- delete_option( 'search_filter_load_jquery_i18n' );
- delete_option( 'search_filter_lazy_load_js' );
- delete_option( 'search_filter_load_js_css' );
- delete_option( 'search_filter_combobox_script' );
- delete_option( 'search_filter_remove_all_data' );
-
- $cache_table_name = $wpdb->prefix . 'search_filter_cache';
- $term_results_table_name = $wpdb->prefix . 'search_filter_term_results';
-
- $wpdb->query("DROP TABLE IF EXISTS $cache_table_name");
- $wpdb->query("DROP TABLE IF EXISTS $term_results_table_name");
-
- $post_status = array('publish', 'pending', 'draft', 'auto-draft', 'future', 'private', 'inherit', 'trash');
-
- $search_form_query = new WP_Query('post_type=search-filter-widget&post_status=' . implode(",", $post_status) . '&posts_per_page=-1');
- $search_forms = $search_form_query->get_posts();
- foreach ($search_forms as $search_form) {
- wp_delete_post($search_form->ID, true);
- }
-
- Search_Filter_Wp_Cache::purge_all_transients();
- }
-
- // flush rewrite rules in order to remove the rewrite rule
- global $wp_rewrite;
- $wp_rewrite->flush_rules();
-
-}
-
diff --git a/wp/wp-content/plugins/search-filter-pro/wpml-config.xml b/wp/wp-content/plugins/search-filter-pro/wpml-config.xml
deleted file mode 100644
index 7c8467d5..00000000
--- a/wp/wp-content/plugins/search-filter-pro/wpml-config.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
- search-filter-widget
-
-
- _search-filter-fields
- _search-filter-settings
- _search-filter-results-url
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/app/index.asset.php b/wp/wp-content/plugins/woocommerce/assets/client/admin/app/index.asset.php
index d7c157e9..ebb5bdaf 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/app/index.asset.php
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/app/index.asset.php
@@ -1 +1 @@
- array('lodash', 'moment', 'react', 'react-dom', 'wc-admin-layout', 'wc-components', 'wc-csv', 'wc-currency', 'wc-customer-effort-score', 'wc-date', 'wc-experimental', 'wc-explat', 'wc-navigation', 'wc-notices', 'wc-number', 'wc-product-editor', 'wc-settings', 'wc-store-data', 'wc-tracks', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-data-controls', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-warning'), 'version' => 'f00ef85f3b4afef9c6cf6452b90c1fbe');
\ No newline at end of file
+ array('lodash', 'moment', 'react', 'react-dom', 'wc-admin-layout', 'wc-components', 'wc-csv', 'wc-currency', 'wc-customer-effort-score', 'wc-date', 'wc-experimental', 'wc-explat', 'wc-navigation', 'wc-notices', 'wc-number', 'wc-product-editor', 'wc-settings', 'wc-store-data', 'wc-tracks', 'wp-a11y', 'wp-api-fetch', 'wp-blob', 'wp-block-editor', 'wp-block-library', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-data-controls', 'wp-date', 'wp-deprecated', 'wp-dom', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-media-utils', 'wp-notices', 'wp-plugins', 'wp-preferences', 'wp-primitives', 'wp-private-apis', 'wp-router', 'wp-url', 'wp-warning'), 'version' => '1d92f73a19c8c25cae96cf62ef956f7e');
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/app/index.js b/wp/wp-content/plugins/woocommerce/assets/client/admin/app/index.js
index 698504f3..42dc3e00 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/app/index.js
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/app/index.js
@@ -1,2 +1,2 @@
/*! For license information please see index.js.LICENSE.txt */
-(()=>{var e,t,n,o,r={75283:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var o=n(99196),r=n(45229);function a(e,t){let n,r,i=[];for(let o=0;o{"use strict";function o(e){return e.startsWith("{{/")?{type:"componentClose",value:e.replace(/\W/g,"")}:e.endsWith("/}}")?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.startsWith("{{")?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}function r(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(o)}n.d(t,{Z:()=>r})},23374:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var o=n(69307);const r=function(e){let{icon:t,size:n=24,...r}=e;return(0,o.cloneElement)(t,{width:n,height:n,...r})}},34200:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(69307),r=n(70444);const a=(0,o.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(r.Path,{fillRule:"evenodd",d:"M5 5.5h14a.5.5 0 01.5.5v1.5a.5.5 0 01-.5.5H5a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM4 9.232A2 2 0 013 7.5V6a2 2 0 012-2h14a2 2 0 012 2v1.5a2 2 0 01-1 1.732V18a2 2 0 01-2 2H6a2 2 0 01-2-2V9.232zm1.5.268V18a.5.5 0 00.5.5h12a.5.5 0 00.5-.5V9.5h-13z",clipRule:"evenodd"}))},47642:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(69307),r=n(70444);const a=(0,o.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(r.Path,{d:"M16.7 7.1l-6.3 8.5-3.3-2.5-.9 1.2 4.5 3.4L17.9 8z"}))},70048:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(69307),r=n(70444);const a=(0,o.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(r.Path,{d:"M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z"}))},28601:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(69307),r=n(70444);const a=(0,o.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(r.Path,{d:"M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z"}))},70261:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(69307),r=n(70444);const a=(0,o.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(r.Path,{d:"M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"}))},12532:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(69307),r=n(70444);const a=(0,o.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(r.Path,{d:"M18.2 17c0 .7-.6 1.2-1.2 1.2H7c-.7 0-1.2-.6-1.2-1.2V7c0-.7.6-1.2 1.2-1.2h3.2V4.2H7C5.5 4.2 4.2 5.5 4.2 7v10c0 1.5 1.2 2.8 2.8 2.8h10c1.5 0 2.8-1.2 2.8-2.8v-3.6h-1.5V17zM14.9 3v1.5h3.7l-6.4 6.4 1.1 1.1 6.4-6.4v3.7h1.5V3h-6.3z"}))},91250:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(69307),r=n(70444);const a=(0,o.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(r.Path,{d:"M12 4.75a7.25 7.25 0 100 14.5 7.25 7.25 0 000-14.5zM3.25 12a8.75 8.75 0 1117.5 0 8.75 8.75 0 01-17.5 0zM12 8.75a1.5 1.5 0 01.167 2.99c-.465.052-.917.44-.917 1.01V14h1.5v-.845A3 3 0 109 10.25h1.5a1.5 1.5 0 011.5-1.5zM11.25 15v1.5h1.5V15h-1.5z"}))},89015:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(69307),r=n(70444);const a=(0,o.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(r.Path,{d:"M7 5.5h10a.5.5 0 01.5.5v12a.5.5 0 01-.5.5H7a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM17 4H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V6a2 2 0 00-2-2zm-1 3.75H8v1.5h8v-1.5zM8 11h8v1.5H8V11zm6 3.25H8v1.5h6v-1.5z"}))},72456:(e,t,n)=>{"use strict";n.d(t,{Amex:()=>m,ApplePay:()=>u,CB:()=>h,GooglePay:()=>V,JCB:()=>y,Loader:()=>ee,MasterCard:()=>c,SetupRequired:()=>R,UnionPay:()=>H,Visa:()=>l,WCPayBanner:()=>N,WCPayBannerBody:()=>M,WCPayBannerFooter:()=>k,WCPayBannerImageCut:()=>L,WCPayBenefits:()=>O,WooOnboardingTask:()=>z,WooOnboardingTaskListHeader:()=>B,WooOnboardingTaskListItem:()=>Z,WooPaymentGatewayConfigure:()=>D,WooPaymentGatewaySetup:()=>j,findCountryOption:()=>Q,getCountry:()=>q});var o=n(55609),r=n(14812),a=n(69307),i=n(86020),s=n(65736);const l=()=>(0,a.createElement)("svg",{width:"51",height:"35",viewBox:"0 0 51 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.5",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{d:"M22.6435 24.004H19.248L21.3718 11.7534H24.7671L22.6435 24.004Z",fill:"#15195A"}),(0,a.createElement)("path",{d:"M34.952 12.0528C34.2823 11.8049 33.22 11.5312 31.9066 11.5312C28.5534 11.5312 26.1922 13.1993 26.1777 15.5842C26.1499 17.3437 27.8683 18.321 29.1536 18.9077C30.4672 19.5072 30.9138 19.8985 30.9138 20.4329C30.9004 21.2536 29.8522 21.6319 28.8747 21.6319C27.5191 21.6319 26.7927 21.4369 25.6889 20.9803L25.2417 20.7845L24.7666 23.5345C25.563 23.873 27.0302 24.1733 28.5534 24.1865C32.1162 24.1865 34.4356 22.5442 34.4631 20.0028C34.4767 18.6082 33.5693 17.5396 31.613 16.6665C30.4254 16.1059 29.6981 15.728 29.6981 15.1544C29.7121 14.6331 30.3133 14.099 31.6539 14.099C32.7577 14.0729 33.5687 14.3204 34.1831 14.5681L34.4902 14.6982L34.952 12.0528Z",fill:"#15195A"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M41.0301 11.7534H43.6565L46.3957 24.0039H43.2519C43.2519 24.0039 42.9442 22.5963 42.8467 22.1662H38.4873C38.3612 22.4919 37.7747 24.0039 37.7747 24.0039H34.2119L39.2554 12.7699C39.6049 11.9748 40.2202 11.7534 41.0301 11.7534ZM40.8208 16.2365C40.8208 16.2365 39.7448 18.9603 39.4652 19.6641H42.2875C42.1478 19.0516 41.5048 16.1192 41.5048 16.1192L41.2676 15.0636C41.1676 15.3355 41.0231 15.7092 40.9256 15.9612C40.8596 16.1321 40.8151 16.2471 40.8208 16.2365Z",fill:"#15195A"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.53636 11.7534H9.99929C10.7398 11.7792 11.3406 12.0008 11.5361 12.7832L12.7233 18.4113C12.7234 18.4118 12.7236 18.4124 12.7238 18.4129L13.0871 20.1072L16.4124 11.7534H20.0028L14.6657 23.991H11.0752L8.04881 13.3464C7.00461 12.7769 5.81289 12.3188 4.48047 12.0009L4.53636 11.7534Z",fill:"#15195A"})),c=()=>(0,a.createElement)("svg",{width:"51",height:"35",viewBox:"0 0 51 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.5",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M18.6846 27.0292V28.3215V29.6137H18.1154V29.2999C17.9349 29.5327 17.661 29.6787 17.2886 29.6787C16.5546 29.6787 15.9791 29.1112 15.9791 28.3215C15.9791 27.5324 16.5546 26.9642 17.2886 26.9642C17.661 26.9642 17.9349 27.1103 18.1154 27.343V27.0292H18.6846ZM17.3594 27.494C16.8667 27.494 16.5652 27.8672 16.5652 28.3215C16.5652 28.7757 16.8667 29.1489 17.3594 29.1489C17.8302 29.1489 18.148 28.7918 18.148 28.3215C18.148 27.8511 17.8302 27.494 17.3594 27.494ZM37.9186 28.3215C37.9186 27.8672 38.2201 27.494 38.7128 27.494C39.1842 27.494 39.5014 27.8511 39.5014 28.3215C39.5014 28.7918 39.1842 29.1489 38.7128 29.1489C38.2201 29.1489 37.9186 28.7757 37.9186 28.3215ZM40.0386 25.9913V28.3215V29.6137H39.4688V29.2999C39.2882 29.5327 39.0143 29.6787 38.642 29.6787C37.9079 29.6787 37.3325 29.1112 37.3325 28.3215C37.3325 27.5324 37.9079 26.9642 38.642 26.9642C39.0143 26.9642 39.2882 27.1103 39.4688 27.343V25.9913H40.0386ZM25.7496 27.4674C26.1163 27.4674 26.352 27.6945 26.4122 28.0943H25.0538C25.1146 27.7211 25.3441 27.4674 25.7496 27.4674ZM24.4571 28.3215C24.4571 27.5157 24.9937 26.9642 25.7609 26.9642C26.4943 26.9642 26.9983 27.5157 27.0039 28.3215C27.0039 28.397 26.9983 28.4675 26.9926 28.5375L25.0488 28.5375C25.1309 29.0029 25.465 29.1706 25.8317 29.1706C26.0944 29.1706 26.374 29.0728 26.5933 28.9001L26.8723 29.3167C26.5545 29.5815 26.1934 29.6787 25.7991 29.6787C25.0156 29.6787 24.4571 29.1434 24.4571 28.3215ZM32.6337 28.3215C32.6337 27.8672 32.9353 27.494 33.4279 27.494C33.8987 27.494 34.2165 27.8511 34.2165 28.3215C34.2165 28.7918 33.8987 29.1489 33.4279 29.1489C32.9353 29.1489 32.6337 28.7757 32.6337 28.3215ZM34.7529 27.0292V28.3215V29.6137H34.1837V29.2999C34.0026 29.5327 33.7293 29.6787 33.3569 29.6787C32.6229 29.6787 32.0475 29.1112 32.0475 28.3215C32.0475 27.5324 32.6229 26.9642 33.3569 26.9642C33.7293 26.9642 34.0026 27.1103 34.1837 27.343V27.0292H34.7529ZM29.4191 28.3215C29.4191 29.1056 29.972 29.6787 30.8157 29.6787C31.21 29.6787 31.4726 29.5921 31.7572 29.3705L31.4839 28.9162C31.2701 29.0679 31.0457 29.1489 30.7988 29.1489C30.3443 29.1434 30.0102 28.8191 30.0102 28.3215C30.0102 27.8239 30.3443 27.4996 30.7988 27.494C31.0457 27.494 31.2701 27.5751 31.4839 27.7267L31.7572 27.2724C31.4726 27.0509 31.21 26.9642 30.8157 26.9642C29.972 26.9642 29.4191 27.5373 29.4191 28.3215ZM36.0674 27.3431C36.2153 27.1159 36.4291 26.9643 36.7575 26.9643C36.8729 26.9643 37.0371 26.986 37.1631 27.0349L36.9876 27.5646C36.8672 27.5157 36.7469 27.4997 36.6315 27.4997C36.2592 27.4997 36.073 27.7373 36.073 28.165V29.6138H35.5032V27.0293H36.0674V27.3431ZM21.4996 27.2347C21.2257 27.0564 20.8483 26.9642 20.4321 26.9642C19.7689 26.9642 19.342 27.278 19.342 27.7917C19.342 28.2132 19.6599 28.4731 20.2453 28.5542L20.5142 28.5919C20.8264 28.6352 20.9737 28.7163 20.9737 28.8624C20.9737 29.0623 20.7656 29.1762 20.377 29.1762C19.9827 29.1762 19.6981 29.0518 19.5063 28.9057L19.238 29.3433C19.5502 29.5704 19.9444 29.6787 20.3713 29.6787C21.1273 29.6787 21.5654 29.3272 21.5654 28.8352C21.5654 28.3809 21.2207 28.1432 20.6509 28.0621L20.3826 28.0238C20.1363 27.9916 19.9388 27.9433 19.9388 27.77C19.9388 27.5806 20.125 27.4674 20.4371 27.4674C20.7712 27.4674 21.0947 27.5918 21.2533 27.689L21.4996 27.2347ZM28.1542 27.3431C28.3015 27.1159 28.5152 26.9643 28.8437 26.9643C28.959 26.9643 29.1233 26.986 29.2493 27.0349L29.0738 27.5646C28.9534 27.5157 28.833 27.4997 28.7177 27.4997C28.3454 27.4997 28.1592 27.7373 28.1592 28.165V29.6138H27.59V27.0293L28.1542 27.0293V27.3431ZM23.9862 27.0292H23.0553V26.2451H22.4799V27.0292H21.949V27.5429H22.4799V28.7219C22.4799 29.3216 22.7156 29.6787 23.3888 29.6787C23.6358 29.6787 23.9204 29.6032 24.1009 29.4788L23.9367 28.9973C23.7668 29.0945 23.5806 29.1434 23.4327 29.1434C23.1481 29.1434 23.0553 28.9701 23.0553 28.7108V27.5429H23.9862V27.0292ZM15.4758 27.9917V29.6138H14.9003V28.1755C14.9003 27.7373 14.7142 27.4941 14.3255 27.4941C13.9475 27.4941 13.6849 27.7324 13.6849 28.1811V29.6138H13.1095V28.1755C13.1095 27.7373 12.9183 27.4941 12.5403 27.4941C12.151 27.4941 11.899 27.7324 11.899 28.1811V29.6138H11.3242V27.0293H11.894V27.348C12.1078 27.0454 12.3811 26.9643 12.6606 26.9643C13.0606 26.9643 13.3451 27.1376 13.5257 27.4242C13.767 27.0615 14.1118 26.9587 14.4459 26.9643C15.0815 26.9699 15.4758 27.3808 15.4758 27.9917Z",fill:"#231F20"}),(0,a.createElement)("path",{d:"M29.9381 22.6376H21.3115V7.33105H29.9381V22.6376Z",fill:"#FF5F00"}),(0,a.createElement)("path",{d:"M21.8586 14.9846C21.8586 11.8796 23.331 9.11372 25.624 7.33129C23.9472 6.02789 21.831 5.24994 19.5311 5.24994C14.0864 5.24994 9.67285 9.60822 9.67285 14.9846C9.67285 20.361 14.0864 24.7192 19.5311 24.7192C21.831 24.7192 23.9472 23.9413 25.624 22.6379C23.331 20.8555 21.8586 18.0896 21.8586 14.9846Z",fill:"#EB001B"}),(0,a.createElement)("path",{d:"M41.5758 14.9846C41.5758 20.361 37.1622 24.7192 31.7175 24.7192C29.4177 24.7192 27.3014 23.9413 25.624 22.6379C27.9176 20.8555 29.3901 18.0896 29.3901 14.9846C29.3901 11.8796 27.9176 9.11372 25.624 7.33129C27.3014 6.02789 29.4177 5.24994 31.7175 5.24994C37.1622 5.24994 41.5758 9.60822 41.5758 14.9846Z",fill:"#F79E1B"})),m=()=>(0,a.createElement)("svg",{width:"52",height:"35",viewBox:"0 0 52 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"1.18945",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"#006FCF",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.1205 25.2823V18.0771H19.3189L20.1985 19.1441L21.1072 18.0771H50.8653V24.7854C50.8653 24.7854 50.0871 25.2751 49.187 25.2823H32.7093L31.7176 24.1465V25.2823H28.4679V23.3435C28.4679 23.3435 28.0239 23.6141 27.0642 23.6141H25.9581V25.2823H21.0376L20.1593 24.1924L19.2675 25.2823H11.1205ZM1.56836 12.6465L3.41294 8.63574H6.60294L7.64976 10.8824V8.63574H11.6152L12.2384 10.2596L12.8425 8.63574H30.6434V9.4521C30.6434 9.4521 31.5792 8.63574 33.1171 8.63574L38.8928 8.65457L39.9215 10.8718V8.63574H43.24L44.1534 9.90939V8.63574H47.5023V15.841H44.1534L43.2781 14.5632V15.841H38.4025L37.9121 14.7052H36.6014L36.1191 15.841H32.8126C31.4893 15.841 30.6434 15.0413 30.6434 15.0413V15.841H25.658L24.6685 14.7052V15.841H6.13036L5.64039 14.7052H4.33383L3.84732 15.841H1.56836V12.6465ZM1.5779 14.9189L4.06583 9.52391H5.95199L8.43755 14.9189H6.7821L6.32542 13.8386H3.65672L3.19767 14.9189H1.5779ZM5.79982 12.6674L4.98636 10.7795L4.17053 12.6674H5.79982ZM8.60869 14.9182V9.52317L10.9105 9.53115L12.2493 13.0095L13.556 9.52317H15.8394V14.9182H14.3933V10.9429L12.8603 14.9182H11.592L10.0548 10.9429V14.9182H8.60869ZM16.8289 14.9182V9.52317H21.5479V10.73H18.2902V11.6528H21.4717V12.7886H18.2902V13.7469H21.5479V14.9182H16.8289ZM22.3851 14.9189V9.52391H25.6033C26.6696 9.52391 27.625 10.1389 27.625 11.2742C27.625 12.2447 26.8195 12.8698 26.0385 12.9313L27.9413 14.9189H26.1741L24.4402 13.0023H23.8313V14.9189H22.3851ZM25.4843 10.7306H23.8313V11.8664H25.5057C25.7956 11.8664 26.1694 11.6569 26.1694 11.2985C26.1694 11.0199 25.8809 10.7306 25.4843 10.7306ZM29.692 14.9182H28.2154V9.52317H29.692V14.9182ZM33.1931 14.9182H32.8744C31.3323 14.9182 30.396 13.7851 30.396 12.2429C30.396 10.6626 31.3218 9.52317 33.2692 9.52317H34.8676V10.8009H33.2108C32.4202 10.8009 31.8611 11.3763 31.8611 12.2562C31.8611 13.301 32.5004 13.7398 33.4215 13.7398H33.802L33.1931 14.9182ZM33.8521 14.9189L36.34 9.52391H38.2262L40.7117 14.9189H39.0563L38.5996 13.8386H35.9309L35.4719 14.9189H33.8521ZM38.074 12.6674L37.2605 10.7795L36.4447 12.6674H38.074ZM40.8805 14.9182V9.52317H42.7191L45.0667 12.9128V9.52317H46.5128V14.9182H44.7337L42.3267 11.4398V14.9182H40.8805ZM12.1099 24.3594V18.9643H16.8289V20.1711H13.5713V21.0939H16.7528V22.2297H13.5713V23.1881H16.8289V24.3594H12.1099ZM35.2329 24.3594V18.9643H39.9519V20.1711H36.6943V21.0939H39.8606V22.2297H36.6943V23.1881H39.9519V24.3594H35.2329ZM17.0121 24.3594L19.3097 21.6951L16.9574 18.9643H18.7793L20.1803 20.6525L21.586 18.9643H23.3366L21.0151 21.6618L23.317 24.3594H21.4953L20.1351 22.6978L18.8079 24.3594H17.0121ZM23.4887 24.3603V18.9653H26.6831C27.9938 18.9653 28.7595 19.7531 28.7595 20.7799C28.7595 22.0193 27.7832 22.6566 26.4952 22.6566H24.9729V24.3603H23.4887ZM26.5761 20.1853H24.973V21.4276H26.5714C26.9937 21.4276 27.2897 21.1665 27.2897 20.8064C27.2897 20.4232 26.9922 20.1853 26.5761 20.1853ZM29.3875 24.3594V18.9643H32.6056C33.672 18.9643 34.6274 19.5793 34.6274 20.7146C34.6274 21.6851 33.8218 22.3102 33.0409 22.3717L34.9437 24.3594H33.1765L31.4426 22.4427H30.8337V24.3594H29.3875ZM32.4867 20.171H30.8337V21.3068H32.5082C32.798 21.3068 33.1718 21.0974 33.1718 20.7389C33.1718 20.4603 32.8833 20.171 32.4867 20.171ZM40.6217 24.3594V23.1881H43.5159C43.9441 23.1881 44.1295 22.9722 44.1295 22.7355C44.1295 22.5087 43.9447 22.2794 43.5159 22.2794H42.208C41.0712 22.2794 40.4381 21.6334 40.4381 20.6636C40.4381 19.7985 41.0178 18.9643 42.7072 18.9643H45.5233L44.9144 20.1782H42.4788C42.0132 20.1782 41.8699 20.4061 41.8699 20.6237C41.8699 20.8473 42.047 21.0939 42.4027 21.0939H43.7727C45.04 21.0939 45.5899 21.7644 45.5899 22.6424C45.5899 23.5863 44.9772 24.3594 43.7038 24.3594H40.6217ZM45.7176 24.3594V23.1881H48.6118C49.04 23.1881 49.2254 22.9722 49.2254 22.7355C49.2254 22.5087 49.0406 22.2794 48.6118 22.2794H47.3039C46.1671 22.2794 45.534 21.6334 45.534 20.6636C45.534 19.7985 46.1138 18.9643 47.8031 18.9643H50.6192L50.0103 20.1782H47.5747C47.1092 20.1782 46.9658 20.4061 46.9658 20.6237C46.9658 20.8473 47.1429 21.0939 47.4986 21.0939H48.8687C50.1359 21.0939 50.6858 21.7644 50.6858 22.6424C50.6858 23.5863 50.0731 24.3594 48.7997 24.3594H45.7176Z",fill:"white"})),u=()=>(0,a.createElement)("svg",{width:"52",height:"35",viewBox:"0 0 52 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.878906",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M15.8352 13.0607C15.4642 13.5024 14.8707 13.8507 14.2771 13.8009C14.2029 13.2038 14.4935 12.5693 14.8336 12.1774C15.2045 11.7233 15.8537 11.3999 16.3792 11.375C16.4411 11.997 16.1999 12.6066 15.8352 13.0607ZM16.373 13.9192C15.8501 13.8889 15.373 14.0774 14.9876 14.2297C14.7396 14.3277 14.5296 14.4106 14.3698 14.4106C14.1905 14.4106 13.9718 14.3232 13.7263 14.2251C13.4046 14.0965 13.0367 13.9495 12.651 13.9565C11.7669 13.969 10.9446 14.4728 10.4933 15.2753C9.56588 16.8801 10.2522 19.2563 11.1486 20.5626C11.5876 21.2095 12.1131 21.9186 12.8056 21.8937C13.1102 21.8822 13.3294 21.7886 13.5562 21.6918C13.8173 21.5803 14.0885 21.4645 14.512 21.4645C14.9208 21.4645 15.1802 21.5773 15.4292 21.6856C15.6659 21.7885 15.8933 21.8874 16.2308 21.8813C16.948 21.8689 17.3993 21.2344 17.8383 20.5875C18.312 19.8931 18.5202 19.2155 18.5518 19.1127L18.5555 19.1008C18.5547 19.1 18.5488 19.0973 18.5385 19.0926C18.3802 19.0196 17.1698 18.4621 17.1582 16.9672C17.1465 15.7124 18.1182 15.0767 18.2712 14.9766L18.2712 14.9766C18.2805 14.9705 18.2868 14.9664 18.2896 14.9642C17.6713 14.0436 16.7068 13.9441 16.373 13.9192ZM21.3377 21.8128V12.1153H24.9546C26.8217 12.1153 28.1263 13.4091 28.1263 15.3001C28.1263 17.1911 26.797 18.4974 24.9051 18.4974H22.8339V21.8128H21.3377ZM22.8339 13.3841H24.5589C25.8572 13.3841 26.5991 14.0808 26.5991 15.3062C26.5991 16.5317 25.8572 17.2346 24.5527 17.2346H22.8339V13.3841ZM33.0661 20.6496C32.6704 21.4085 31.7986 21.8874 30.8589 21.8874C29.4678 21.8874 28.4971 21.0539 28.4971 19.7974C28.4971 18.5533 29.4368 17.838 31.1742 17.7322L33.0413 17.6203V17.0853C33.0413 16.2953 32.5282 15.8661 31.6131 15.8661C30.8589 15.8661 30.3086 16.258 30.1973 16.8552H28.8495C28.8928 15.5986 30.0675 14.6842 31.6564 14.6842C33.369 14.6842 34.4819 15.5862 34.4819 16.9858V21.8128H33.097V20.6496H33.0661ZM31.2609 20.7368C30.4633 20.7368 29.9563 20.3511 29.9563 19.7602C29.9563 19.1506 30.4448 18.796 31.3784 18.74L33.0415 18.6343V19.1817C33.0415 20.0898 32.2748 20.7368 31.2609 20.7368ZM39.0756 22.1922C38.4759 23.8903 37.7897 24.4502 36.3306 24.4502C36.2193 24.4502 35.8483 24.4377 35.7617 24.4129V23.2496C35.8545 23.2621 36.0832 23.2745 36.2007 23.2745C36.8623 23.2745 37.2332 22.9946 37.462 22.2668L37.598 21.8376L35.0631 14.7775H36.6273L38.3894 20.5065H38.4203L40.1823 14.7775H41.7033L39.0756 22.1922Z",fill:"black"})),d=()=>(0,a.createElement)("svg",{width:"52",height:"35",viewBox:"0 0 52 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"1.18945",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"#006FCF",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.1205 25.2823V18.0771H19.3189L20.1985 19.1441L21.1072 18.0771H50.8653V24.7854C50.8653 24.7854 50.0871 25.2751 49.187 25.2823H32.7093L31.7176 24.1465V25.2823H28.4679V23.3435C28.4679 23.3435 28.0239 23.6141 27.0642 23.6141H25.9581V25.2823H21.0376L20.1593 24.1924L19.2675 25.2823H11.1205ZM1.56836 12.6465L3.41294 8.63574H6.60294L7.64976 10.8824V8.63574H11.6152L12.2384 10.2596L12.8425 8.63574H30.6434V9.4521C30.6434 9.4521 31.5792 8.63574 33.1171 8.63574L38.8928 8.65457L39.9215 10.8718V8.63574H43.24L44.1534 9.90939V8.63574H47.5023V15.841H44.1534L43.2781 14.5632V15.841H38.4025L37.9121 14.7052H36.6014L36.1191 15.841H32.8126C31.4893 15.841 30.6434 15.0413 30.6434 15.0413V15.841H25.658L24.6685 14.7052V15.841H6.13036L5.64039 14.7052H4.33383L3.84732 15.841H1.56836V12.6465ZM1.5779 14.9189L4.06583 9.52391H5.95199L8.43755 14.9189H6.7821L6.32542 13.8386H3.65672L3.19767 14.9189H1.5779ZM5.79982 12.6674L4.98636 10.7795L4.17053 12.6674H5.79982ZM8.60869 14.9182V9.52317L10.9105 9.53115L12.2493 13.0095L13.556 9.52317H15.8394V14.9182H14.3933V10.9429L12.8603 14.9182H11.592L10.0548 10.9429V14.9182H8.60869ZM16.8289 14.9182V9.52317H21.5479V10.73H18.2902V11.6528H21.4717V12.7886H18.2902V13.7469H21.5479V14.9182H16.8289ZM22.3851 14.9189V9.52391H25.6033C26.6696 9.52391 27.625 10.1389 27.625 11.2742C27.625 12.2447 26.8195 12.8698 26.0385 12.9313L27.9413 14.9189H26.1741L24.4402 13.0023H23.8313V14.9189H22.3851ZM25.4843 10.7306H23.8313V11.8664H25.5057C25.7956 11.8664 26.1694 11.6569 26.1694 11.2985C26.1694 11.0199 25.8809 10.7306 25.4843 10.7306ZM29.692 14.9182H28.2154V9.52317H29.692V14.9182ZM33.1931 14.9182H32.8744C31.3323 14.9182 30.396 13.7851 30.396 12.2429C30.396 10.6626 31.3218 9.52317 33.2692 9.52317H34.8676V10.8009H33.2108C32.4202 10.8009 31.8611 11.3763 31.8611 12.2562C31.8611 13.301 32.5004 13.7398 33.4215 13.7398H33.802L33.1931 14.9182ZM33.8521 14.9189L36.34 9.52391H38.2262L40.7117 14.9189H39.0563L38.5996 13.8386H35.9309L35.4719 14.9189H33.8521ZM38.074 12.6674L37.2605 10.7795L36.4447 12.6674H38.074ZM40.8805 14.9182V9.52317H42.7191L45.0667 12.9128V9.52317H46.5128V14.9182H44.7337L42.3267 11.4398V14.9182H40.8805ZM12.1099 24.3594V18.9643H16.8289V20.1711H13.5713V21.0939H16.7528V22.2297H13.5713V23.1881H16.8289V24.3594H12.1099ZM35.2329 24.3594V18.9643H39.9519V20.1711H36.6943V21.0939H39.8606V22.2297H36.6943V23.1881H39.9519V24.3594H35.2329ZM17.0121 24.3594L19.3097 21.6951L16.9574 18.9643H18.7793L20.1803 20.6525L21.586 18.9643H23.3366L21.0151 21.6618L23.317 24.3594H21.4953L20.1351 22.6978L18.8079 24.3594H17.0121ZM23.4887 24.3603V18.9653H26.6831C27.9938 18.9653 28.7595 19.7531 28.7595 20.7799C28.7595 22.0193 27.7832 22.6566 26.4952 22.6566H24.9729V24.3603H23.4887ZM26.5761 20.1853H24.973V21.4276H26.5714C26.9937 21.4276 27.2897 21.1665 27.2897 20.8064C27.2897 20.4232 26.9922 20.1853 26.5761 20.1853ZM29.3875 24.3594V18.9643H32.6056C33.672 18.9643 34.6274 19.5793 34.6274 20.7146C34.6274 21.6851 33.8218 22.3102 33.0409 22.3717L34.9437 24.3594H33.1765L31.4426 22.4427H30.8337V24.3594H29.3875ZM32.4867 20.171H30.8337V21.3068H32.5082C32.798 21.3068 33.1718 21.0974 33.1718 20.7389C33.1718 20.4603 32.8833 20.171 32.4867 20.171ZM40.6217 24.3594V23.1881H43.5159C43.9441 23.1881 44.1295 22.9722 44.1295 22.7355C44.1295 22.5087 43.9447 22.2794 43.5159 22.2794H42.208C41.0712 22.2794 40.4381 21.6334 40.4381 20.6636C40.4381 19.7985 41.0178 18.9643 42.7072 18.9643H45.5233L44.9144 20.1782H42.4788C42.0132 20.1782 41.8699 20.4061 41.8699 20.6237C41.8699 20.8473 42.047 21.0939 42.4027 21.0939H43.7727C45.04 21.0939 45.5899 21.7644 45.5899 22.6424C45.5899 23.5863 44.9772 24.3594 43.7038 24.3594H40.6217ZM45.7176 24.3594V23.1881H48.6118C49.04 23.1881 49.2254 22.9722 49.2254 22.7355C49.2254 22.5087 49.0406 22.2794 48.6118 22.2794H47.3039C46.1671 22.2794 45.534 21.6334 45.534 20.6636C45.534 19.7985 46.1138 18.9643 47.8031 18.9643H50.6192L50.0103 20.1782H47.5747C47.1092 20.1782 46.9658 20.4061 46.9658 20.6237C46.9658 20.8473 47.1429 21.0939 47.4986 21.0939H48.8687C50.1359 21.0939 50.6858 21.7644 50.6858 22.6424C50.6858 23.5863 50.0731 24.3594 48.7997 24.3594H45.7176Z",fill:"white"})),p=()=>(0,a.createElement)("svg",{width:"52",height:"35",viewBox:"0 0 52 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.878906",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M15.8352 13.0607C15.4642 13.5024 14.8707 13.8507 14.2771 13.8009C14.2029 13.2038 14.4935 12.5693 14.8336 12.1774C15.2045 11.7233 15.8537 11.3999 16.3792 11.375C16.4411 11.997 16.1999 12.6066 15.8352 13.0607ZM16.373 13.9192C15.8501 13.8889 15.373 14.0774 14.9876 14.2297C14.7396 14.3277 14.5296 14.4106 14.3698 14.4106C14.1905 14.4106 13.9718 14.3232 13.7263 14.2251C13.4046 14.0965 13.0367 13.9495 12.651 13.9565C11.7669 13.969 10.9446 14.4728 10.4933 15.2753C9.56588 16.8801 10.2522 19.2563 11.1486 20.5626C11.5876 21.2095 12.1131 21.9186 12.8056 21.8937C13.1102 21.8822 13.3294 21.7886 13.5562 21.6918C13.8173 21.5803 14.0885 21.4645 14.512 21.4645C14.9208 21.4645 15.1802 21.5773 15.4292 21.6856C15.6659 21.7885 15.8933 21.8874 16.2308 21.8813C16.948 21.8689 17.3993 21.2344 17.8383 20.5875C18.312 19.8931 18.5202 19.2155 18.5518 19.1127L18.5555 19.1008C18.5547 19.1 18.5488 19.0973 18.5385 19.0926C18.3802 19.0196 17.1698 18.4621 17.1582 16.9672C17.1465 15.7124 18.1182 15.0767 18.2712 14.9766L18.2712 14.9766C18.2805 14.9705 18.2868 14.9664 18.2896 14.9642C17.6713 14.0436 16.7068 13.9441 16.373 13.9192ZM21.3377 21.8128V12.1153H24.9546C26.8217 12.1153 28.1263 13.4091 28.1263 15.3001C28.1263 17.1911 26.797 18.4974 24.9051 18.4974H22.8339V21.8128H21.3377ZM22.8339 13.3841H24.5589C25.8572 13.3841 26.5991 14.0808 26.5991 15.3062C26.5991 16.5317 25.8572 17.2346 24.5527 17.2346H22.8339V13.3841ZM33.0661 20.6496C32.6704 21.4085 31.7986 21.8874 30.8589 21.8874C29.4678 21.8874 28.4971 21.0539 28.4971 19.7974C28.4971 18.5533 29.4368 17.838 31.1742 17.7322L33.0413 17.6203V17.0853C33.0413 16.2953 32.5282 15.8661 31.6131 15.8661C30.8589 15.8661 30.3086 16.258 30.1973 16.8552H28.8495C28.8928 15.5986 30.0675 14.6842 31.6564 14.6842C33.369 14.6842 34.4819 15.5862 34.4819 16.9858V21.8128H33.097V20.6496H33.0661ZM31.2609 20.7368C30.4633 20.7368 29.9563 20.3511 29.9563 19.7602C29.9563 19.1506 30.4448 18.796 31.3784 18.74L33.0415 18.6343V19.1817C33.0415 20.0898 32.2748 20.7368 31.2609 20.7368ZM39.0756 22.1922C38.4759 23.8903 37.7897 24.4502 36.3306 24.4502C36.2193 24.4502 35.8483 24.4377 35.7617 24.4129V23.2496C35.8545 23.2621 36.0832 23.2745 36.2007 23.2745C36.8623 23.2745 37.2332 22.9946 37.462 22.2668L37.598 21.8376L35.0631 14.7775H36.6273L38.3894 20.5065H38.4203L40.1823 14.7775H41.7033L39.0756 22.1922Z",fill:"black"})),h=()=>(0,a.createElement)("svg",{width:"52",height:"35",viewBox:"0 0 52 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"1.18945",y:"0.5",width:"49.6897",height:"34",rx:"2.5",fill:"url(#paint0_linear)",stroke:"#F1F1F1"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M19.7636 16.9816H26.6269C26.5657 15.4963 26.2201 13.9649 25.1717 12.9813C23.9229 11.8096 21.7355 11.375 19.781 11.375C17.7466 11.375 15.4968 11.8517 14.2414 13.1088C13.1588 14.1918 12.9248 15.9341 12.9248 17.4997C12.9248 19.1395 13.3827 21.0469 14.5571 22.1456C15.8059 23.3147 17.8294 23.625 19.781 23.625C21.6767 23.625 23.7302 23.2746 24.9718 22.1647C26.2099 21.0561 26.6377 19.1888 26.6377 17.4997V17.4918H19.7636V16.9816ZM27.0876 17.4921V23.3511H36.6352V23.3432C38.0322 23.267 39.1436 22.0059 39.1436 20.4575C39.1436 18.9084 38.0322 17.5664 36.6352 17.4895V17.4921H27.0876ZM36.5263 11.6203C37.8879 11.6203 38.9687 12.8032 38.9687 14.2957C38.9687 15.7087 37.9762 16.8626 36.7135 16.9816H27.0873V11.6118H36.2251C36.2813 11.6049 36.3468 11.6097 36.4108 11.6144C36.4508 11.6174 36.4901 11.6203 36.5263 11.6203Z",fill:"#FEFEFE"}),(0,a.createElement)("defs",null,(0,a.createElement)("linearGradient",{id:"paint0_linear",x1:"14.4385",y1:"-4.43215",x2:"2.09335",y2:"33.4202",gradientUnits:"userSpaceOnUse"},(0,a.createElement)("stop",{stopColor:"#222E72"}),(0,a.createElement)("stop",{offset:"0.591647",stopColor:"#40CBFF"}),(0,a.createElement)("stop",{offset:"1",stopColor:"#3CB792"})))),C=()=>(0,a.createElement)("svg",{width:"52",height:"35",viewBox:"0 0 52 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.878906",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M17.1461 17.7823C17.1461 19.9191 18.8322 21.576 21.0021 21.576C21.6154 21.576 22.141 21.456 22.7888 21.1524V19.4832C22.2192 20.0506 21.7145 20.2795 21.0685 20.2795C19.6332 20.2795 18.6146 19.2439 18.6146 17.7717C18.6146 16.376 19.6654 15.2751 21.0021 15.2751C21.6818 15.2751 22.1963 15.5163 22.7888 16.0929V14.4246C22.1633 14.1089 21.649 13.978 21.0357 13.978C18.8768 13.978 17.1461 15.6685 17.1461 17.7823ZM13.4892 16.0168C13.4892 16.4097 13.7401 16.6173 14.5953 16.9321C16.2163 17.5222 16.6967 18.0449 16.6967 19.2001C16.6967 20.6072 15.6577 21.5872 14.177 21.5872C13.0926 21.5872 12.304 21.1622 11.6475 20.2031L12.5682 19.3209C12.8962 19.9523 13.4437 20.2907 14.1234 20.2907C14.7593 20.2907 15.2298 19.8542 15.2298 19.2653C15.2298 18.96 15.0873 18.6979 14.8025 18.5128C14.6594 18.4252 14.3754 18.2949 13.8174 18.0988C12.479 17.6197 12.0201 17.1068 12.0201 16.1053C12.0201 14.9155 13.006 14.0224 14.2987 14.0224C15.0997 14.0224 15.8327 14.2948 16.4455 14.8282L15.6998 15.7997C15.3286 15.3857 14.9775 15.211 14.5507 15.211C13.9366 15.211 13.4892 15.559 13.4892 16.0168ZM9.68583 21.4123H11.1109V14.1424H9.68583V21.4123ZM6.77288 19.6035C6.32524 20.006 5.74353 20.1815 4.82283 20.1815H4.44039V15.374H4.82283C5.74353 15.374 6.30238 15.538 6.77288 15.9621C7.26569 16.3986 7.56205 17.0755 7.56205 17.7717C7.56205 18.4697 7.26569 19.1671 6.77288 19.6035ZM5.10834 14.1424H3.0166V21.4121H5.09733C6.20374 21.4121 7.0025 21.1525 7.70389 20.5728C8.53737 19.8867 9.03017 18.8523 9.03017 17.7824C9.03017 15.6369 7.41938 14.1424 5.10834 14.1424ZM32.1394 14.1424L34.0875 19.0255L36.061 14.1424H37.6057L34.4496 21.5988H33.6828L30.5826 14.1424H32.1394ZM38.2501 21.4122H42.2913V20.1815H39.6741V18.2191H42.1951V16.9878H39.6741V15.3742H42.2913V14.1424H38.2501V21.4122ZM44.6585 17.4893H45.0748C45.9851 17.4893 46.4674 17.0958 46.4674 16.365C46.4674 15.6575 45.9851 15.2876 45.0974 15.2876H44.6585V17.4893ZM45.3485 14.1422C46.9918 14.1422 47.9339 14.9275 47.9339 16.2886C47.9339 17.4016 47.3429 18.1325 46.2695 18.3496L48.5695 21.4121H46.817L44.8447 18.4917H44.6587V21.4121H43.2353V14.1422H45.3485Z",fill:"#1D1D1B"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M30.415 19.8859C31.5716 18.0862 31.0433 15.6953 29.235 14.5445C27.4267 13.3937 25.0236 13.9191 23.867 15.7188C22.7107 17.518 23.2391 19.9096 25.0474 21.0604C26.8557 22.2112 29.2587 21.6851 30.415 19.8859Z",fill:"url(#paint0_linear)"}),(0,a.createElement)("defs",null,(0,a.createElement)("linearGradient",{id:"paint0_linear",x1:"32.5088",y1:"16.6279",x2:"25.9795",y2:"12.4317",gradientUnits:"userSpaceOnUse"},(0,a.createElement)("stop",{stopColor:"#F6A000"}),(0,a.createElement)("stop",{offset:"0.623918",stopColor:"#E47E02"}),(0,a.createElement)("stop",{offset:"1",stopColor:"#D36002"})))),g=()=>(0,a.createElement)("svg",{width:"64",height:"40",viewBox:"0 0 64 40",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("path",{d:"M0 4C0 1.79086 1.79086 0 4 0H60C62.2091 0 64 1.79086 64 4V36C64 38.2091 62.2091 40 60 40H4C1.79086 40 0 38.2091 0 36V4Z",fill:"white"}),(0,a.createElement)("path",{d:"M12 11C12 8.79086 13.7909 7 16 7H48.8571C51.0663 7 52.8571 8.79086 52.8571 11V29C52.8571 31.2091 51.0663 33 48.8571 33H16C13.7909 33 12 31.2091 12 29V11Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M48.8571 9H16C14.8954 9 14 9.89543 14 11V29C14 30.1046 14.8954 31 16 31H48.8571C49.9617 31 50.8571 30.1046 50.8571 29V11C50.8571 9.89543 49.9617 9 48.8571 9ZM16 7C13.7909 7 12 8.79086 12 11V29C12 31.2091 13.7909 33 16 33H48.8571C51.0663 33 52.8571 31.2091 52.8571 29V11C52.8571 8.79086 51.0663 7 48.8571 7H16Z",fill:"#0F3365"}),(0,a.createElement)("path",{d:"M32.4285 7H48.857C51.0662 7 52.857 8.79086 52.857 11V29C52.857 31.2091 51.0662 33 48.857 33H32.4285V7Z",fill:"#0F3365"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M35.2142 28.1058H39.4694V22.1896H39.5169C40.3211 23.4859 41.9291 23.966 43.4183 23.966C47.083 23.966 49.0452 21.2899 49.0452 18.0698C49.0452 15.4361 47.1788 12.5715 43.7737 12.5715C41.8349 12.5715 40.0373 13.2615 39.1865 14.7878H39.139V12.8223H35.2142V28.1058ZM44.648 18.1539C44.648 19.8896 43.6784 21.0808 42.0716 21.0808C40.6524 21.0808 39.4691 19.8896 39.4691 18.2999C39.4691 16.6696 40.5103 15.4567 42.0716 15.4567C43.7259 15.4567 44.648 16.7105 44.648 18.1539Z",fill:"#FFFFFE"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M29.6351 12.8223H25.7804V14.7871H25.7341C24.8353 13.4496 23.369 12.5715 21.549 12.5715C17.7192 12.5715 15.9929 14.9962 15.9929 18.2372C15.9929 21.4584 18.0972 23.7145 21.4785 23.7145C23.1807 23.7145 24.5991 23.1307 25.615 21.8537H25.6629V22.4404C25.6629 24.573 24.3395 25.5971 21.8802 25.5971C20.1068 25.5971 19.0193 25.2629 17.7192 24.6984L17.5059 27.6676C18.4993 27.98 20.1781 28.3572 22.2111 28.3572C27.1762 28.3572 29.6351 26.9139 29.6351 22.4404V12.8223ZM20.3904 18.1742C20.3904 16.6902 21.218 15.4567 22.8022 15.4567C24.7169 15.4567 25.521 16.8146 25.521 18.0278C25.521 19.7012 24.3148 20.83 22.8022 20.83C21.5255 20.83 20.3904 19.8672 20.3904 18.1742Z",fill:"#D8232A"}),(0,a.createElement)("path",{d:"M4 1H60V-1H4V1ZM63 4V36H65V4H63ZM60 39H4V41H60V39ZM1 36V4H-1V36H1ZM4 39C2.34315 39 1 37.6569 1 36H-1C-1 38.7614 1.23858 41 4 41V39ZM63 36C63 37.6569 61.6569 39 60 39V41C62.7614 41 65 38.7614 65 36H63ZM60 1C61.6569 1 63 2.34315 63 4H65C65 1.23858 62.7614 -1 60 -1V1ZM4 -1C1.23858 -1 -1 1.23858 -1 4H1C1 2.34315 2.34315 1 4 1V-1Z",fill:"#DDDDDD"})),f=()=>(0,a.createElement)("svg",{width:"84",height:"58",viewBox:"0 0 84 58",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.5",y:"0.5",width:"83",height:"57",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M40.4322 34.9714V28.4303V28.429H43.9665C45.4236 28.4299 46.6482 27.9715 47.6403 27.0538C48.6429 26.1828 49.2035 24.9306 49.175 23.6253C49.1948 22.3273 48.6353 21.0844 47.6403 20.2162C46.6569 19.2935 45.3343 18.7901 43.9665 18.8178H38.293V34.9714H40.4322ZM40.4322 26.4454V20.8065V20.8052H44.0196C44.8192 20.7834 45.59 21.0956 46.1362 21.6624C46.6859 22.1807 46.996 22.8927 46.996 23.6363C46.996 24.3799 46.6859 25.0919 46.1362 25.6102C45.5833 26.1651 44.8149 26.4683 44.0196 26.4454H40.4322Z",fill:"#5F6368"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M57.8487 24.7879C56.9337 23.9682 55.6856 23.5583 54.1045 23.5583C52.0733 23.5583 50.5396 24.2801 49.5032 25.7236L51.3873 26.8746C52.0835 25.8968 53.0291 25.4079 54.2241 25.4079C54.9859 25.3992 55.7231 25.6693 56.2888 26.1644C56.8529 26.6168 57.1773 27.2912 57.1724 28.0011V28.4754C56.3504 28.0243 55.3043 27.7987 54.034 27.7987C52.5459 27.8005 51.3563 28.139 50.4652 28.8144C49.5741 29.4898 49.1285 30.3993 49.1285 31.543C49.1091 32.5844 49.5748 33.5787 50.3961 34.2496C51.2411 34.9714 52.2912 35.3323 53.5464 35.3323C55.0168 35.3323 56.1949 34.7007 57.0807 33.4376H57.1738V34.9714H59.2199V28.1596C59.2208 26.7315 58.7638 25.6076 57.8487 24.7879ZM52.0464 32.9414C51.5983 32.6281 51.334 32.1239 51.3369 31.5881C51.3369 30.9862 51.6279 30.4848 52.2138 30.0723C52.794 29.6659 53.5186 29.4627 54.3876 29.4627C55.5808 29.4627 56.5108 29.7205 57.1778 30.236C57.1778 31.1073 56.8235 31.8665 56.1149 32.5135C55.4766 33.1327 54.6113 33.4813 53.7086 33.4827C53.1068 33.4937 52.5195 33.3024 52.0464 32.9414Z",fill:"#5F6368"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M70.9654 23.9192L63.8223 39.8434H61.6141L64.2648 34.2716L59.5679 23.9192H61.8931L65.2879 31.8588H65.3344L68.6362 23.9192H70.9654Z",fill:"#5F6368"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M31.7877 27.0203C31.7885 26.3879 31.7333 25.7566 31.6229 25.1333H22.6011V28.7074H27.7684C27.5547 29.8609 26.8645 30.8797 25.8577 31.5275V33.8475H28.9416C30.7473 32.2325 31.7877 29.8442 31.7877 27.0203Z",fill:"#4285F4"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M22.6012 36.0889C25.1828 36.0889 27.3566 35.2666 28.9417 33.8488L25.8578 31.5288C24.9995 32.0933 23.894 32.4156 22.6012 32.4156C20.1059 32.4156 17.988 30.7838 17.2306 28.585H14.0537V30.9759C15.6776 34.1104 18.9848 36.0887 22.6012 36.0889Z",fill:"#34A853"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M17.2307 28.585C16.8303 27.4328 16.8303 26.185 17.2307 25.0328V22.6419H14.0538C12.6956 25.2637 12.6956 28.3541 14.0538 30.9759L17.2307 28.585Z",fill:"#FBBC04"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M22.6012 21.2022C23.9655 21.1806 25.2837 21.6806 26.271 22.5942L29.0015 19.9456C27.2701 18.368 24.9764 17.502 22.6012 17.5289C18.9848 17.529 15.6776 19.5074 14.0537 22.6419L17.2306 25.0328C17.988 22.834 20.1059 21.2022 22.6012 21.2022Z",fill:"#EA4335"})),y=()=>(0,a.createElement)("svg",{width:"51",height:"35",viewBox:"0 0 51 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.878906",y:"0.5",width:"49",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M33.473 17.5973H33.494H33.5346H33.5752H33.6158H33.6564H33.697H33.7376H33.7782H33.8188H33.8594H33.9H33.9406H33.9812H34.0218H34.0624H34.103H34.1436H34.1842H34.2248H34.2654H34.306H34.3466H34.3872H34.4278H34.4684H34.509H34.5496H34.5902H34.6308H34.6714H34.712H34.7527H34.7932H34.8338H34.8745H34.915H34.9556H34.9963H35.0368H35.0774H35.1181H35.1586H35.1992H35.2399H35.2805H35.321H35.3617H35.4023H35.4428H35.4835H35.5241H35.5646H35.6053H35.6459H35.6864H35.7271H35.7677H35.8083H35.8489H35.8895H35.9233L35.9301 17.5975C35.9426 17.5978 35.9563 17.5984 35.9707 17.5991C35.9837 17.5999 35.9973 17.6008 36.0113 17.6018C36.0246 17.6028 36.0383 17.604 36.0519 17.6052C36.0656 17.6065 36.0792 17.6079 36.0925 17.6093C36.1064 17.6109 36.1201 17.6126 36.1331 17.6143C36.1476 17.6163 36.1613 17.6183 36.1737 17.6205C36.1826 17.622 36.1909 17.6235 36.1982 17.6251L36.2143 17.6288C36.2279 17.632 36.2414 17.6354 36.2549 17.6392C36.2685 17.643 36.282 17.647 36.2955 17.6513C36.3091 17.6557 36.3227 17.6603 36.3361 17.6653C36.3497 17.6702 36.3632 17.6755 36.3767 17.681C36.3903 17.6866 36.4039 17.6926 36.4173 17.6987C36.431 17.705 36.4445 17.7116 36.4579 17.7185C36.4716 17.7254 36.4851 17.7328 36.4985 17.7403C36.5122 17.7481 36.5257 17.7562 36.5391 17.7646C36.5528 17.7732 36.5664 17.7821 36.5797 17.7913C36.5934 17.8008 36.607 17.8105 36.6203 17.8206C36.634 17.8311 36.6476 17.8419 36.6609 17.8531C36.6747 17.8646 36.6882 17.8766 36.7015 17.8889C36.7154 17.9017 36.7289 17.9148 36.7421 17.9284C36.7561 17.9426 36.7695 17.9574 36.7827 17.9725C36.7967 17.9885 36.8102 18.005 36.8233 18.0219C36.8374 18.0401 36.8509 18.0587 36.8639 18.0779C36.8781 18.0989 36.8917 18.1205 36.9045 18.1426C36.919 18.1675 36.9325 18.1932 36.9451 18.2196C36.96 18.2508 36.9736 18.283 36.9857 18.3161C37.002 18.3606 37.0156 18.4067 37.0263 18.4544C37.0449 18.5369 37.0549 18.6238 37.0549 18.7145C37.0549 18.8057 37.0449 18.893 37.0263 18.9758C37.0156 19.0235 37.002 19.0698 36.9857 19.1143C36.9736 19.1476 36.96 19.1798 36.9451 19.2111C36.9325 19.2375 36.919 19.2632 36.9045 19.2882C36.8917 19.3103 36.8782 19.3319 36.8639 19.3529C36.8509 19.3721 36.8374 19.3908 36.8233 19.409C36.8102 19.4259 36.7967 19.4423 36.7827 19.4584C36.7695 19.4734 36.756 19.4881 36.7421 19.5024C36.7289 19.516 36.7153 19.5291 36.7015 19.5419C36.6882 19.5541 36.6747 19.566 36.6609 19.5775C36.6476 19.5886 36.6341 19.5995 36.6203 19.6099C36.607 19.62 36.5934 19.6297 36.5797 19.6391C36.5664 19.6483 36.5528 19.6572 36.5391 19.6657C36.5257 19.674 36.5122 19.6821 36.4985 19.6898C36.4851 19.6974 36.4716 19.7046 36.4579 19.7116C36.4445 19.7184 36.431 19.7249 36.4173 19.7312C36.4039 19.7373 36.3903 19.7432 36.3767 19.7488C36.3632 19.7542 36.3497 19.7595 36.3361 19.7644C36.3227 19.7692 36.3091 19.7738 36.2955 19.7781C36.282 19.7824 36.2685 19.7863 36.2549 19.7901C36.2414 19.7937 36.2279 19.7971 36.2143 19.8003L36.1982 19.8039C36.1909 19.8056 36.1826 19.8073 36.1737 19.8089C36.1613 19.8111 36.1476 19.8132 36.1331 19.8152C36.1201 19.8169 36.1064 19.8186 36.0925 19.8202C36.0792 19.8217 36.0656 19.823 36.0519 19.8243C36.0383 19.8255 36.0246 19.8266 36.0113 19.8276C35.9973 19.8286 35.9837 19.8295 35.9707 19.8301C35.9563 19.8309 35.9426 19.8314 35.9301 19.8317L35.9083 19.832H35.8895H35.8489H35.8083H35.7677H35.7271H35.6864H35.6459H35.6053H35.5646H35.5241H35.4835H35.4428H35.4023H35.3617H35.321H35.2805H35.2399H35.1992H35.1586H35.1181H35.0774H35.0368H34.9963H34.9556H34.915H34.8745H34.8338H34.7932H34.7527H34.712H34.6714H34.6308H34.5902H34.5496H34.509H34.4684H34.4278H34.3872H34.3466H34.306H34.2654H34.2248H34.1842H34.1436H34.103H34.0624H34.0218H33.9812H33.9406H33.9H33.8594H33.8188H33.7782H33.7376H33.697H33.6564H33.6158H33.5752H33.5346H33.494H33.473V17.5973ZM36.7423 15.0681C36.7586 15.1431 36.7673 15.2226 36.7673 15.3062C36.7673 15.3898 36.7586 15.4691 36.7423 15.5441C36.7318 15.5923 36.7181 15.6385 36.7016 15.6829C36.6896 15.7153 36.676 15.7467 36.661 15.7769C36.6485 15.8023 36.6349 15.8269 36.6204 15.8508C36.6076 15.8718 36.594 15.8923 36.5798 15.9122C36.5668 15.9303 36.5533 15.9478 36.5392 15.9649C36.5261 15.9807 36.5126 15.9961 36.4986 16.011C36.4855 16.0251 36.472 16.0387 36.4581 16.0518C36.4448 16.0644 36.4313 16.0765 36.4174 16.0883C36.4042 16.0996 36.3906 16.1104 36.3768 16.121C36.3636 16.1311 36.35 16.1409 36.3363 16.1504C36.3229 16.1596 36.3094 16.1684 36.2956 16.1769C36.2823 16.1852 36.2687 16.1931 36.255 16.2007C36.2417 16.2082 36.2281 16.2154 36.2145 16.2222C36.2011 16.2289 36.1875 16.2353 36.1738 16.2415C36.1604 16.2475 36.1469 16.2532 36.1332 16.2586C36.1198 16.2639 36.1063 16.269 36.0926 16.2737C36.0792 16.2784 36.0657 16.2829 36.0521 16.287C36.0386 16.2911 36.0251 16.295 36.0114 16.2985C35.998 16.3021 35.9845 16.3053 35.9708 16.3083C35.9574 16.3113 35.9439 16.3139 35.9303 16.3164L35.9204 16.3182C35.9125 16.3195 35.902 16.3211 35.8896 16.3227C35.8777 16.3242 35.8639 16.3258 35.849 16.3273C35.8362 16.3286 35.8225 16.3299 35.8085 16.3311C35.7952 16.3322 35.7815 16.3332 35.7678 16.334C35.7542 16.3349 35.7405 16.3357 35.7272 16.3362C35.7132 16.3368 35.6995 16.3372 35.6867 16.3372L35.6802 16.3373H35.6461H35.6054H35.5648H35.5243H35.4836H35.443H35.4025H35.3619H35.3212H35.2807H35.2401H35.1994H35.1589H35.1183H35.0776H35.037H34.9965H34.9559H34.9152H34.8747H34.8341H34.7934H34.7529H34.7123H34.6716H34.6311H34.5905H34.5499H34.5092H34.4687H34.4281H34.3874H34.3469H34.3063H34.2657H34.2251H34.1845H34.1439H34.1033H34.0627H34.0221H33.9814H33.9409H33.9003H33.8597H33.8191H33.7785H33.7379H33.6973H33.6567H33.6161H33.5754H33.5349H33.4943H33.473V14.2751H33.4943H33.5349H33.5754H33.6161H33.6567H33.6973H33.7379H33.7785H33.8191H33.8597H33.9003H33.9409H33.9814H34.0221H34.0627H34.1033H34.1439H34.1845H34.2251H34.2657H34.3063H34.3469H34.3874H34.4281H34.4687H34.5092H34.5499H34.5905H34.6311H34.6716H34.7123H34.7529H34.7934H34.8341H34.8747H34.9152H34.9559H34.9965H35.037H35.0776H35.1183H35.1589H35.1994H35.2401H35.2807H35.3212H35.3619H35.4025H35.443H35.4836H35.5243H35.5648H35.6054H35.6461H35.6867H35.7037L35.7272 14.2759C35.7405 14.2764 35.7542 14.2772 35.7678 14.2781C35.7815 14.279 35.7952 14.28 35.8085 14.2811C35.8225 14.2822 35.8362 14.2835 35.849 14.2848C35.8639 14.2862 35.8777 14.2877 35.8896 14.2891C35.902 14.2905 35.9125 14.2919 35.9204 14.293L35.9303 14.2948C35.9439 14.2972 35.9574 14.3 35.9708 14.303C35.9845 14.306 35.998 14.3093 36.0114 14.3129C36.0251 14.3165 36.0386 14.3203 36.0521 14.3245C36.0657 14.3287 36.0792 14.3331 36.0926 14.3378C36.1063 14.3427 36.1198 14.3477 36.1332 14.3531C36.1469 14.3585 36.1604 14.3643 36.1738 14.3703C36.1875 14.3765 36.2011 14.3829 36.2145 14.3896C36.2281 14.3965 36.2417 14.4036 36.255 14.4111C36.2687 14.4187 36.2823 14.4267 36.2956 14.435C36.3094 14.4435 36.3229 14.4523 36.3363 14.4615C36.35 14.4709 36.3636 14.4808 36.3768 14.491C36.3906 14.5015 36.4042 14.5124 36.4174 14.5237C36.4313 14.5355 36.4448 14.5476 36.4581 14.5602C36.472 14.5733 36.4855 14.5869 36.4986 14.601C36.5126 14.6159 36.5261 14.6313 36.5392 14.6471C36.5533 14.6642 36.5668 14.6818 36.5798 14.6999C36.594 14.7197 36.6076 14.7402 36.6204 14.7613C36.6349 14.7851 36.6485 14.8097 36.661 14.8351C36.676 14.8654 36.6896 14.8968 36.7016 14.9292C36.7181 14.9736 36.7318 15.0199 36.7423 15.0681ZM41.7774 4.375H41.7941L41.794 25.5542C41.794 25.6807 41.7882 25.8059 41.7774 25.9296C41.7679 26.0385 41.7543 26.1462 41.7368 26.2526C41.725 26.324 41.7115 26.3948 41.6962 26.465C41.6838 26.5221 41.6703 26.5789 41.6556 26.6351C41.6429 26.6836 41.6293 26.7318 41.615 26.7796C41.602 26.8228 41.5886 26.8658 41.5744 26.9085C41.5614 26.9472 41.5478 26.9855 41.5338 27.0237C41.5207 27.0593 41.5071 27.0946 41.4932 27.1297C41.48 27.1627 41.4665 27.1954 41.4526 27.228C41.4394 27.2588 41.4258 27.2895 41.4119 27.3199C41.3987 27.3489 41.3852 27.3778 41.3714 27.4064C41.3581 27.4339 41.3446 27.4612 41.3307 27.4883C41.3175 27.5143 41.3039 27.5402 41.2901 27.5659C41.2769 27.5906 41.2632 27.615 41.2495 27.6394C41.2362 27.663 41.2227 27.6865 41.2089 27.7098C41.1956 27.7325 41.182 27.755 41.1683 27.7775C41.1549 27.7993 41.1414 27.8211 41.1277 27.8427C41.1144 27.8635 41.1007 27.8842 41.0871 27.9049C41.0737 27.9249 41.0601 27.9448 41.0465 27.9647C41.0331 27.9841 41.0195 28.0036 41.0058 28.0228C40.9924 28.0416 40.979 28.0603 40.9653 28.0789C40.9519 28.097 40.9383 28.1148 40.9246 28.1327C40.9112 28.1503 40.8977 28.1678 40.884 28.1852C40.8706 28.2022 40.8571 28.2191 40.8434 28.2359C40.83 28.2523 40.8164 28.2686 40.8028 28.2849C40.7893 28.3009 40.7759 28.3171 40.7622 28.3329C40.7488 28.3484 40.7352 28.3637 40.7216 28.379C40.7082 28.3941 40.6946 28.4091 40.681 28.424C40.6675 28.4387 40.6541 28.4534 40.6404 28.4679C40.627 28.4821 40.6134 28.4961 40.5998 28.5102C40.5863 28.5241 40.5729 28.5382 40.5592 28.5519C40.5458 28.5654 40.5321 28.5786 40.5186 28.5919C40.5051 28.605 40.4916 28.6182 40.4779 28.6313C40.4645 28.644 40.451 28.6567 40.4374 28.6693C40.4239 28.6818 40.4103 28.6942 40.3967 28.7065C40.3833 28.7187 40.3698 28.7308 40.3561 28.7428C40.3427 28.7546 40.3291 28.7664 40.3155 28.7781C40.302 28.7896 40.2886 28.8012 40.2749 28.8126C40.2615 28.8239 40.2479 28.8349 40.2343 28.846C40.2208 28.857 40.2073 28.8681 40.1937 28.8789C40.1803 28.8896 40.1667 28.9001 40.1531 28.9106C40.1396 28.9211 40.1261 28.9316 40.1125 28.942C40.0991 28.9521 40.0854 28.9621 40.0719 28.9721C40.0583 28.9821 40.0449 28.9921 40.0313 29.002C40.0178 29.0117 40.0042 29.0211 39.9907 29.0306C39.9771 29.0401 39.9637 29.0496 39.95 29.059C39.9366 29.0682 39.923 29.0772 39.9095 29.0862C39.896 29.0953 39.8825 29.1043 39.8688 29.1132C39.8554 29.122 39.8418 29.1306 39.8282 29.1392C39.8147 29.1477 39.8012 29.1563 39.7876 29.1647C39.7742 29.1731 39.7606 29.1813 39.747 29.1895L39.7064 29.2137C39.6929 29.2216 39.6794 29.2295 39.6658 29.2373C39.6524 29.2451 39.6388 29.2526 39.6252 29.2602C39.6117 29.2678 39.5982 29.2754 39.5846 29.2828C39.5711 29.2901 39.5575 29.2972 39.544 29.3044C39.5304 29.3115 39.517 29.3189 39.5034 29.326C39.4899 29.3329 39.4763 29.3395 39.4628 29.3463C39.4492 29.3531 39.4358 29.36 39.4221 29.3666C39.4087 29.3732 39.3951 29.3796 39.3816 29.3861L39.3409 29.4052L39.3003 29.4237C39.2868 29.4298 39.2733 29.4357 39.2597 29.4416C39.2462 29.4475 39.2327 29.4536 39.2191 29.4593C39.2057 29.4651 39.1921 29.4704 39.1785 29.476C39.165 29.4816 39.1515 29.4873 39.1379 29.4927C39.1244 29.4981 39.1109 29.5032 39.0973 29.5085C39.0838 29.5137 39.0703 29.5189 39.0567 29.524L39.0161 29.5391C39.0026 29.544 38.989 29.5487 38.9755 29.5535C38.9619 29.5583 38.9485 29.5632 38.9349 29.5679C38.9214 29.5724 38.9078 29.5767 38.8942 29.5811L38.8537 29.5944C38.8402 29.5987 38.8266 29.6028 38.813 29.607L38.7724 29.6192C38.7589 29.6232 38.7454 29.6273 38.7318 29.6311C38.7184 29.635 38.7048 29.6385 38.6912 29.6422C38.6777 29.6459 38.6642 29.6497 38.6506 29.6533L38.61 29.6636L38.5694 29.6735L38.5288 29.6833C38.5153 29.6864 38.5017 29.6892 38.4882 29.6922C38.4746 29.6952 38.4611 29.6983 38.4476 29.7011L38.407 29.7093L38.3663 29.7171C38.3528 29.7196 38.3393 29.7224 38.3257 29.7248C38.3123 29.7272 38.2987 29.7293 38.2851 29.7316L38.2445 29.7383L38.2039 29.7445L38.1633 29.7502C38.1498 29.7521 38.1363 29.7542 38.1227 29.7559C38.1092 29.7577 38.0956 29.759 38.0821 29.7606C38.0686 29.7622 38.0551 29.7638 38.0415 29.7653C38.028 29.7667 38.0145 29.7682 38.0009 29.7695C37.9874 29.7709 37.9738 29.772 37.9603 29.7732C37.9467 29.7744 37.9332 29.7757 37.9197 29.7768C37.9062 29.7778 37.8926 29.7787 37.8791 29.7796L37.8384 29.7822C37.8249 29.783 37.8114 29.784 37.7978 29.7847C37.7844 29.7854 37.7708 29.7857 37.7572 29.7863L37.7166 29.7878L37.676 29.7889C37.6625 29.7892 37.649 29.7892 37.6354 29.7894L37.5948 29.7899L37.5864 29.79H37.5542H37.5136H37.473H37.4324H37.3917H37.3512H37.3105H37.2699H37.2293H37.1887H37.1481H37.1075H37.0669H37.0263H36.9857H36.9451H36.9045H36.8638H36.8233H36.7826H36.742H36.7014H36.6608H36.6202H36.5796H36.539H36.4984H36.4578H36.4172H36.3766H36.3359H36.2954H36.2547H36.2141H36.1735H36.1329H36.0923H36.0517H36.0111H35.9705H35.9299H35.8893H35.8487H35.808H35.7675H35.7268H35.6862H35.6456H35.605H35.5644H35.5238H35.4832H35.4426H35.402H35.3614H35.3208H35.2801H35.2396H35.1989H35.1583H35.1177H35.0771H35.0365H34.9959H34.9553H34.9147H34.8741H34.8335H34.7929H34.7522H34.7117H34.671H34.6304H34.5898H34.5492H34.5086H34.468H34.4274H34.3868H34.3462H34.3056H34.265H34.2243H34.1838H34.1431H34.1025H34.0619H34.0213H33.9807H33.9401H33.8995H33.8589H33.8183H33.7777H33.7371H33.6964H33.6559H33.6152H33.5746H33.534H33.4934H33.4528H33.4122H33.3716H33.331H33.2904H33.2498H33.2092H33.1685H33.128H33.0873H33.0467H33.0061H32.9655H32.9249H32.8843H32.8437H32.8031H32.7625H32.7219H32.6813H32.6406H32.6H32.5594H32.5188H32.4782H32.4376H32.397H32.3564H32.3158H32.2752H32.2346H32.194H32.1534H32.1127H32.0721H32.0315H31.9909H31.9503H31.9097H31.8691H31.8285H31.7879H31.7473H31.7067H31.666H31.6255H31.5848H31.5442H31.5036H31.416V21.1545H31.5036H31.5442H31.5848H31.6255H31.666H31.7067H31.7473H31.7879H31.8285H31.8691H31.9097H31.9503H31.9909H32.0315H32.0721H32.1127H32.1534H32.194H32.2346H32.2752H32.3158H32.3564H32.397H32.4376H32.4782H32.5188H32.5594H32.6H32.6406H32.6813H32.7219H32.7625H32.8031H32.8437H32.8843H32.9249H32.9655H33.0061H33.0467H33.0873H33.128H33.1685H33.2092H33.2498H33.2904H33.331H33.3716H33.4122H33.4528H33.4934H33.534H33.5746H33.6152H33.6559H33.6964H33.7371H33.7777H33.8183H33.8589H33.8995H33.9401H33.9807H34.0213H34.0619H34.1025H34.1431H34.1838H34.2243H34.265H34.3056H34.3462H34.3868H34.4274H34.468H34.5086H34.5492H34.5898H34.6304H34.671H34.7117H34.7522H34.7929H34.8335H34.8741H34.9147H34.9553H34.9959H35.0365H35.0771H35.1177H35.1583H35.1989H35.2396H35.2801H35.3208H35.3614H35.402H35.4426H35.4832H35.5238H35.5644H35.605H35.6456H35.6862H35.7268H35.7675H35.808H35.8487H35.8893H35.9299H35.9705H36.0111H36.0517H36.0923H36.1329H36.1735H36.2141H36.2547H36.2954H36.3359H36.3766H36.4172H36.4578H36.4984H36.539H36.5796H36.6202H36.6608H36.7014H36.742H36.7826H36.8233H36.8638H36.9045H36.9451H36.9857H37.0263H37.0669H37.1075H37.1481H37.1887H37.2293H37.2699H37.3105H37.3512H37.3917H37.4324H37.473H37.5136H37.5542H37.5948H37.6354H37.676H37.7166H37.7572H37.7978H37.8384H37.8791H37.9197H37.9412L37.9603 21.1543L38.0009 21.154L38.0415 21.1532C38.0551 21.1528 38.0686 21.1526 38.0821 21.1521C38.0957 21.1517 38.1092 21.151 38.1227 21.1504L38.1633 21.1485L38.2039 21.146L38.2445 21.1432L38.2851 21.14L38.3257 21.1363C38.3393 21.135 38.3529 21.1337 38.3663 21.1323C38.3799 21.1309 38.3934 21.1293 38.407 21.1277L38.4476 21.1227C38.4611 21.1209 38.4747 21.1192 38.4882 21.1173C38.5018 21.1154 38.5153 21.1133 38.5288 21.1113C38.5424 21.1092 38.5559 21.1072 38.5694 21.105L38.61 21.0981L38.6506 21.0908C38.6642 21.0882 38.6778 21.0858 38.6912 21.0831C38.7048 21.0804 38.7183 21.0775 38.7318 21.0746L38.7724 21.0658C38.786 21.0627 38.7996 21.0597 38.813 21.0565C38.8267 21.0533 38.8402 21.0498 38.8537 21.0465C38.8672 21.0431 38.8808 21.0396 38.8942 21.0361C38.9078 21.0325 38.9214 21.0288 38.9349 21.0251C38.9485 21.0213 38.962 21.0174 38.9755 21.0134C38.9891 21.0095 39.0026 21.0054 39.0161 21.0013L39.0567 20.9885C39.0703 20.9841 39.0838 20.9796 39.0973 20.975C39.1109 20.9704 39.1245 20.9658 39.1379 20.961C39.1515 20.9562 39.1651 20.9514 39.1785 20.9464C39.1922 20.9413 39.2056 20.9361 39.2191 20.9308C39.2327 20.9256 39.2463 20.9202 39.2597 20.9147C39.2733 20.9092 39.2869 20.9037 39.3003 20.898C39.314 20.8923 39.3275 20.8864 39.3409 20.8804C39.3546 20.8744 39.3681 20.8682 39.3816 20.862C39.3951 20.8557 39.4087 20.8493 39.4221 20.8429C39.4357 20.8363 39.4493 20.8297 39.4628 20.823C39.4764 20.8161 39.4899 20.8091 39.5034 20.802C39.517 20.7949 39.5305 20.7875 39.544 20.7801C39.5576 20.7727 39.5712 20.7651 39.5846 20.7574C39.5982 20.7496 39.6118 20.7417 39.6252 20.7337C39.6388 20.7256 39.6524 20.7174 39.6658 20.709C39.6795 20.7004 39.693 20.6917 39.7064 20.683C39.7201 20.674 39.7336 20.6649 39.747 20.6558C39.7607 20.6464 39.7742 20.6369 39.7876 20.6274C39.8013 20.6176 39.8148 20.6077 39.8282 20.5976C39.8419 20.5874 39.8555 20.577 39.8688 20.5665C39.8825 20.5558 39.8961 20.5449 39.9095 20.5339C39.9232 20.5226 39.9367 20.5112 39.95 20.4996C39.9638 20.4878 39.9773 20.4757 39.9907 20.4636C40.0044 20.451 40.0179 20.4383 40.0313 20.4255C40.045 20.4123 40.0586 20.3989 40.0719 20.3854C40.0857 20.3714 40.0992 20.3572 40.1125 20.3428C40.1263 20.328 40.1398 20.3129 40.1531 20.2977C40.1669 20.2819 40.1805 20.2658 40.1937 20.2496C40.2075 20.2327 40.2211 20.2156 40.2343 20.1983C40.2481 20.1801 40.2618 20.1618 40.2749 20.1432C40.2889 20.1235 40.3023 20.1034 40.3155 20.0831C40.3295 20.0616 40.343 20.0399 40.3561 20.0179C40.3702 19.9942 40.3837 19.9701 40.3967 19.9458C40.4109 19.9193 40.4245 19.8926 40.4374 19.8654C40.4517 19.835 40.4652 19.8041 40.4779 19.7728C40.4926 19.7368 40.5061 19.7004 40.5186 19.6634C40.5338 19.6177 40.5473 19.5711 40.5592 19.5237C40.5765 19.4544 40.5901 19.3833 40.5998 19.3104C40.6116 19.222 40.6178 19.1312 40.6178 19.0378C40.6178 18.9469 40.6116 18.8586 40.5998 18.7728C40.5901 18.7024 40.5765 18.6337 40.5592 18.5668C40.5473 18.5213 40.5338 18.4766 40.5186 18.4327C40.5061 18.3968 40.4926 18.3613 40.4779 18.3266C40.4653 18.2964 40.4517 18.2667 40.4374 18.2375C40.4245 18.2112 40.4109 18.1853 40.3967 18.1598C40.3837 18.1363 40.3702 18.113 40.3561 18.0901C40.3431 18.0689 40.3295 18.0479 40.3155 18.0273C40.3024 18.0078 40.2889 17.9884 40.2749 17.9694C40.2618 17.9514 40.2482 17.9337 40.2343 17.9163C40.2211 17.8995 40.2075 17.883 40.1937 17.8667C40.1804 17.851 40.1669 17.8355 40.1531 17.8202C40.1398 17.8055 40.1263 17.791 40.1125 17.7767C40.0992 17.7628 40.0856 17.7492 40.0719 17.7357C40.0586 17.7226 40.045 17.7097 40.0313 17.697C40.0179 17.6846 40.0044 17.6724 39.9907 17.6604C39.9773 17.6486 39.9638 17.637 39.95 17.6255C39.9367 17.6143 39.9232 17.6033 39.9095 17.5924C39.8961 17.5817 39.8825 17.5712 39.8688 17.5608C39.8554 17.5507 39.8419 17.5407 39.8282 17.5307C39.8148 17.5211 39.8013 17.5115 39.7876 17.502C39.7742 17.4928 39.7607 17.4836 39.747 17.4745C39.7336 17.4657 39.7201 17.4569 39.7064 17.4482C39.693 17.4398 39.6795 17.4314 39.6658 17.4231C39.6524 17.415 39.6389 17.407 39.6252 17.3991C39.6118 17.3913 39.5982 17.3837 39.5846 17.3761C39.5712 17.3687 39.5576 17.3614 39.544 17.3541C39.5305 17.347 39.517 17.3399 39.5034 17.333C39.4899 17.3261 39.4764 17.3193 39.4628 17.3126C39.4493 17.3061 39.4358 17.2995 39.4221 17.2931C39.4087 17.2868 39.3951 17.2807 39.3816 17.2746C39.3681 17.2685 39.3546 17.2626 39.3409 17.2567C39.3275 17.251 39.3139 17.2453 39.3003 17.2396C39.2868 17.2341 39.2734 17.2285 39.2597 17.2231C39.2463 17.2178 39.2327 17.2126 39.2191 17.2074C39.2057 17.2023 39.1921 17.1974 39.1785 17.1925C39.165 17.1876 39.1515 17.1828 39.1379 17.1781C39.1244 17.1734 39.1109 17.1688 39.0973 17.1642C39.0838 17.1598 39.0703 17.1554 39.0567 17.1511C39.0432 17.1468 39.0296 17.1427 39.0161 17.1386L38.9755 17.1266C38.962 17.1227 38.9485 17.1188 38.9349 17.1151C38.9214 17.1114 38.9078 17.1078 38.8942 17.1043C38.8808 17.1008 38.8672 17.0974 38.8537 17.094C38.8402 17.0906 38.8266 17.0873 38.813 17.0841C38.7996 17.0809 38.786 17.0779 38.7724 17.0748C38.759 17.0718 38.7454 17.069 38.7318 17.0661C38.7183 17.0633 38.7048 17.0604 38.6912 17.0577L38.6506 17.0499L38.61 17.0426C38.5965 17.0403 38.583 17.0379 38.5694 17.0357L38.5288 17.0292C38.5153 17.0272 38.5017 17.0252 38.4882 17.0233L38.4476 17.0178L38.407 17.0126L38.3663 17.008L38.3257 17.0037L38.2851 16.9999L38.2445 16.9965L38.207 16.9936L38.207 16.9446L38.2445 16.9387L38.2851 16.932C38.2987 16.9296 38.3123 16.9273 38.3257 16.9248L38.3663 16.9169C38.38 16.9142 38.3935 16.9114 38.407 16.9085L38.4476 16.8996C38.4611 16.8965 38.4747 16.8934 38.4882 16.8902C38.5018 16.8869 38.5153 16.8834 38.5288 16.8799C38.5424 16.8764 38.5559 16.8728 38.5694 16.8691C38.583 16.8654 38.5965 16.8616 38.61 16.8577C38.6236 16.8538 38.6372 16.8498 38.6506 16.8457C38.6642 16.8416 38.6778 16.8373 38.6912 16.833C38.7049 16.8286 38.7184 16.824 38.7318 16.8195C38.7455 16.8148 38.759 16.81 38.7724 16.8052C38.7861 16.8003 38.7996 16.7954 38.813 16.7903C38.8267 16.7852 38.8402 16.7799 38.8537 16.7746C38.8673 16.7692 38.8808 16.7637 38.8942 16.7581C38.9079 16.7524 38.9214 16.7467 38.9349 16.7408C38.9485 16.7348 38.962 16.7287 38.9755 16.7225C38.9891 16.7162 39.0026 16.7098 39.0161 16.7033C39.0297 16.6967 39.0433 16.6899 39.0567 16.6831C39.0703 16.6761 39.0839 16.6691 39.0973 16.662C39.111 16.6547 39.1245 16.6472 39.1379 16.6398C39.1516 16.6321 39.1651 16.6243 39.1785 16.6165C39.1922 16.6084 39.2057 16.6003 39.2191 16.592C39.2328 16.5836 39.2463 16.575 39.2597 16.5664C39.2734 16.5575 39.2869 16.5485 39.3003 16.5394C39.314 16.53 39.3276 16.5206 39.3409 16.511C39.3547 16.5012 39.3682 16.4912 39.3816 16.4812C39.3953 16.4708 39.4088 16.4604 39.4221 16.4498C39.4359 16.4389 39.4494 16.4279 39.4628 16.4167C39.4765 16.4052 39.49 16.3935 39.5034 16.3817C39.5172 16.3695 39.5307 16.3571 39.544 16.3446C39.5577 16.3317 39.5713 16.3186 39.5846 16.3054C39.5984 16.2917 39.6119 16.2779 39.6252 16.2639C39.639 16.2493 39.6526 16.2345 39.6658 16.2195C39.6796 16.2039 39.6932 16.1881 39.7064 16.1721C39.7203 16.1554 39.7338 16.1385 39.747 16.1214C39.7609 16.1033 39.7745 16.085 39.7876 16.0665C39.8016 16.0469 39.8151 16.027 39.8282 16.007C39.8422 15.9856 39.8558 15.9639 39.8688 15.942C39.8829 15.9183 39.8965 15.8942 39.9095 15.8699C39.9237 15.8432 39.9372 15.8162 39.95 15.7888C39.9645 15.7581 39.978 15.7268 39.9907 15.6953C40.0054 15.6586 40.0189 15.6214 40.0313 15.5836C40.0467 15.5362 40.0603 15.488 40.0719 15.4393C40.0906 15.3601 40.1042 15.2793 40.1125 15.1971C40.1191 15.1322 40.1225 15.0665 40.1225 15.0001C40.1225 14.93 40.1191 14.8616 40.1125 14.795C40.1041 14.7098 40.0905 14.6275 40.0719 14.5481C40.0603 14.4985 40.0467 14.45 40.0313 14.4027C40.0189 14.3648 40.0054 14.3277 39.9907 14.2913C39.978 14.26 39.9644 14.2292 39.95 14.199C39.9372 14.172 39.9236 14.1455 39.9095 14.1194C39.8965 14.0955 39.8829 14.072 39.8688 14.0488C39.8557 14.0273 39.8422 14.0061 39.8282 13.9852C39.8151 13.9656 39.8015 13.9464 39.7876 13.9274C39.7745 13.9095 39.7609 13.8917 39.747 13.8743C39.7338 13.8576 39.7203 13.8411 39.7064 13.8249C39.6932 13.8095 39.6796 13.7943 39.6658 13.7793C39.6526 13.7649 39.639 13.7506 39.6252 13.7366C39.6119 13.723 39.5984 13.7097 39.5846 13.6965C39.5713 13.6837 39.5577 13.6711 39.544 13.6587C39.5307 13.6466 39.5171 13.6347 39.5034 13.623C39.49 13.6116 39.4765 13.6004 39.4628 13.5893C39.4494 13.5785 39.4359 13.5678 39.4221 13.5574C39.4088 13.5471 39.3952 13.5371 39.3816 13.5272C39.3682 13.5174 39.3546 13.5079 39.3409 13.4984C39.3275 13.4892 39.314 13.4801 39.3003 13.4711C39.2869 13.4623 39.2734 13.4537 39.2597 13.4451C39.2463 13.4367 39.2328 13.4285 39.2191 13.4204C39.2057 13.4124 39.1922 13.4045 39.1785 13.3968C39.1651 13.3891 39.1516 13.3816 39.1379 13.3742C39.1245 13.3669 39.111 13.3598 39.0973 13.3527C39.0839 13.3458 39.0703 13.339 39.0567 13.3322C39.0432 13.3256 39.0297 13.319 39.0161 13.3126C39.0026 13.3062 38.9891 13.2999 38.9755 13.2938C38.962 13.2878 38.9485 13.282 38.9349 13.2761C38.9214 13.2704 38.9078 13.2647 38.8942 13.2591C38.8808 13.2536 38.8672 13.2482 38.8537 13.2429C38.8402 13.2376 38.8267 13.2324 38.813 13.2273C38.7996 13.2223 38.7861 13.2174 38.7724 13.2126C38.759 13.2078 38.7454 13.2031 38.7318 13.1985C38.7184 13.194 38.7048 13.1895 38.6912 13.1852C38.6778 13.1808 38.6642 13.1766 38.6506 13.1724C38.6371 13.1683 38.6236 13.1641 38.61 13.1602C38.5965 13.1563 38.583 13.1525 38.5694 13.1488C38.5559 13.1451 38.5424 13.1415 38.5288 13.1379L38.4882 13.1275C38.4747 13.1242 38.4612 13.1209 38.4476 13.1177C38.4341 13.1145 38.4206 13.1115 38.407 13.1085L38.3663 13.0998C38.3528 13.097 38.3394 13.0941 38.3257 13.0915C38.3123 13.0888 38.2987 13.0864 38.2851 13.0839L38.2445 13.0767C38.231 13.0744 38.2175 13.0721 38.2039 13.0699L38.1633 13.0637L38.1227 13.0579L38.0821 13.0525L38.0415 13.0477L38.0009 13.0433L37.9603 13.0392L37.9197 13.0356L37.8791 13.0324L37.8384 13.0295L37.7978 13.0272L37.7817 13.0263L37.7572 13.0247L37.7166 13.0223L37.676 13.0201L37.6354 13.0179L37.5948 13.016L37.5542 13.0142L37.5136 13.0127L37.473 13.0114L37.4324 13.0105L37.3917 13.01L37.3694 13.0099H37.3512H37.3105H37.2699H37.2293H37.1887H37.1481H37.1075H37.0669H37.0263H36.9857H36.9451H36.9045H36.8638H36.8233H36.7826H36.742H36.7014H36.6608H36.6202H36.5796H36.539H36.4984H36.4578H36.4172H36.3766H36.3359H36.2954H36.2547H36.2141H36.1735H36.1329H36.0923H36.0517H36.0111H35.9705H35.9299H35.8893H35.8487H35.808H35.7675H35.7268H35.6862H35.6456H35.605H35.5644H35.5238H35.4832H35.4426H35.402H35.3614H35.3208H35.2801H35.2396H35.1989H35.1583H35.1177H35.0771H35.0365H34.9959H34.9553H34.9147H34.8741H34.8335H34.7929H34.7522H34.7117H34.671H34.6304H34.5898H34.5492H34.5086H34.468H34.4274H34.3868H34.3462H34.3056H34.265H34.2243H34.1838H34.1431H34.1025H34.0619H34.0213H33.9807H33.9401H33.8995H33.8589H33.8183H33.7777H33.7371H33.6964H33.6559H33.6152H33.5746H33.534H33.4934H33.4528H33.4122H33.3716H33.331H33.2904H33.2498H33.2092H33.1685H33.128H33.0873H33.0467H33.0061H32.9655H32.9249H32.8843H32.8437H32.8031H32.7625H32.7219H32.6813H32.6406H32.6H32.5594H32.5188H32.4782H32.4376H32.397H32.3564H32.3158H32.2752H32.2346H32.194H32.1534H32.1127H32.0721H32.0315H31.9909H31.9503H31.9097H31.8691H31.8285H31.7879H31.7473H31.7067H31.666H31.6255H31.5848H31.5442H31.5036H31.416V8.61119C31.416 8.31526 31.4463 8.02649 31.5036 7.74768C31.5159 7.68797 31.5295 7.62877 31.5442 7.57005C31.5569 7.5198 31.5705 7.46992 31.5848 7.42041C31.5977 7.37619 31.6112 7.33227 31.6255 7.28866C31.6385 7.24881 31.6519 7.20917 31.666 7.16986C31.6791 7.1334 31.6926 7.09714 31.7067 7.06115C31.7198 7.02754 31.7333 6.99409 31.7473 6.96092C31.7605 6.92961 31.774 6.89843 31.7879 6.8675C31.8011 6.83812 31.8147 6.80894 31.8285 6.77994C31.8417 6.75225 31.8553 6.72477 31.8691 6.69742C31.8824 6.67113 31.896 6.64504 31.9097 6.61905C31.923 6.594 31.9365 6.56913 31.9503 6.5444C31.9636 6.5204 31.9772 6.49662 31.9909 6.47293C32.0043 6.44996 32.0178 6.42708 32.0315 6.40441C32.0449 6.38242 32.0584 6.3606 32.0721 6.33888C32.0854 6.31784 32.0991 6.297 32.1127 6.27622C32.1261 6.25589 32.1396 6.23563 32.1534 6.21554C32.1668 6.19585 32.1802 6.17616 32.194 6.15671C32.2073 6.13787 32.2209 6.11927 32.2346 6.10066C32.2479 6.08236 32.2615 6.0642 32.2752 6.04614C32.2887 6.02835 32.3021 6.01049 32.3158 5.99294C32.3291 5.97586 32.3428 5.95905 32.3564 5.94218C32.3698 5.92554 32.3833 5.90904 32.397 5.89264C32.4105 5.87644 32.4239 5.86024 32.4376 5.84425C32.451 5.82866 32.4646 5.81335 32.4782 5.79796C32.4917 5.78271 32.5051 5.76743 32.5188 5.75239C32.5322 5.73765 32.5458 5.72304 32.5594 5.70847C32.5729 5.6941 32.5864 5.67984 32.6 5.66564C32.6135 5.65164 32.627 5.63765 32.6406 5.62382C32.6541 5.61024 32.6677 5.59685 32.6813 5.58347C32.6948 5.57015 32.7082 5.5567 32.7219 5.54358C32.7352 5.53074 32.7489 5.5182 32.7625 5.50553C32.776 5.49292 32.7894 5.48028 32.8031 5.46785C32.8165 5.45561 32.8301 5.44362 32.8437 5.43159C32.8572 5.41963 32.8707 5.40767 32.8843 5.39587C32.8978 5.38425 32.9113 5.3728 32.9249 5.36134C32.9384 5.34999 32.9519 5.33868 32.9655 5.32749C32.979 5.31641 32.9925 5.30547 33.0061 5.29459L33.0467 5.26243L33.0873 5.23112C33.1008 5.22085 33.1144 5.21066 33.128 5.20056C33.1414 5.19056 33.1549 5.1806 33.1685 5.17074L33.2092 5.1417C33.2226 5.13218 33.2362 5.12272 33.2498 5.11337L33.2904 5.08568L33.331 5.05875C33.3445 5.0499 33.358 5.04109 33.3716 5.03242L33.4122 5.00687C33.4257 4.99843 33.4392 4.98999 33.4528 4.98172C33.4663 4.97352 33.4799 4.96556 33.4934 4.95753C33.507 4.9495 33.5204 4.9414 33.534 4.93354C33.5474 4.92578 33.5611 4.91829 33.5746 4.91067C33.5882 4.90304 33.6016 4.89528 33.6152 4.88783C33.6287 4.88047 33.6423 4.87336 33.6559 4.86614C33.6694 4.85892 33.6828 4.85167 33.6964 4.84459C33.7099 4.83757 33.7235 4.83076 33.7371 4.82392C33.7506 4.81711 33.7641 4.81026 33.7777 4.80359L33.8183 4.78383C33.8318 4.77736 33.8453 4.77106 33.8589 4.76472C33.8724 4.75842 33.8859 4.75201 33.8995 4.74585C33.913 4.73975 33.9266 4.73392 33.9401 4.72795C33.9536 4.72199 33.9671 4.71592 33.9807 4.7101C33.9942 4.70434 34.0078 4.69885 34.0213 4.69322C34.0348 4.68763 34.0483 4.68197 34.0619 4.67651L34.1025 4.66042L34.1431 4.64487C34.1567 4.63972 34.1702 4.6345 34.1838 4.62952C34.1972 4.62457 34.2108 4.61993 34.2243 4.61511C34.2379 4.6103 34.2514 4.60539 34.265 4.60071C34.2784 4.59607 34.292 4.5917 34.3056 4.58719L34.3462 4.57394C34.3597 4.56961 34.3732 4.56523 34.3868 4.56103C34.4003 4.55686 34.4139 4.55293 34.4274 4.5489C34.4409 4.54484 34.4544 4.54063 34.468 4.53674C34.4815 4.53287 34.4951 4.52928 34.5086 4.52555C34.5221 4.52183 34.5356 4.51807 34.5492 4.51447L34.5898 4.5039C34.6033 4.50048 34.6169 4.49723 34.6304 4.49394C34.644 4.49065 34.6574 4.48713 34.671 4.48398C34.6845 4.48086 34.6981 4.47801 34.7117 4.475L34.7522 4.46608L34.7929 4.45765C34.8063 4.45494 34.8199 4.45239 34.8335 4.44982C34.847 4.44721 34.8605 4.44443 34.8741 4.44196C34.8876 4.43948 34.9012 4.43738 34.9147 4.43508L34.9553 4.4283C34.9688 4.42613 34.9824 4.4239 34.9959 4.42186C35.0094 4.41983 35.023 4.41803 35.0365 4.41614C35.0501 4.41424 35.0635 4.41217 35.0771 4.41041C35.0906 4.40865 35.1042 4.40709 35.1177 4.40546L35.1583 4.40079C35.1719 4.3993 35.1854 4.39764 35.1989 4.39628C35.2124 4.39492 35.226 4.39387 35.2396 4.39265L35.2801 4.38903L35.3208 4.38595C35.3343 4.38496 35.3478 4.38418 35.3614 4.38334C35.3749 4.38252 35.3884 4.38147 35.402 4.38076C35.4155 4.38005 35.4291 4.37964 35.4426 4.37907L35.4832 4.37754C35.4968 4.3771 35.5103 4.37652 35.5238 4.37622C35.5373 4.37591 35.5509 4.37588 35.5644 4.37568C35.5779 4.37547 35.5915 4.37524 35.605 4.37517L35.6152 4.37503H35.6456H35.6862H35.7268H35.7675H35.808H35.8487H35.8893H35.9299H35.9705H36.0111H36.0517H36.0923H36.1329H36.1735H36.2141H36.2547H36.2954H36.3359H36.3766H36.4172H36.4578H36.4984H36.539H36.5796H36.6202H36.6608H36.7014H36.742H36.7826H36.8233H36.8638H36.9045H36.9451H36.9857H37.0263H37.0669H37.1075H37.1481H37.1887H37.2293H37.2699H37.3105H37.3512H37.3917H37.4324H37.473H37.5136H37.5542H37.5948H37.6354H37.676H37.7166H37.7572H37.7978H37.8384H37.8791H37.9197H37.9603H38.0009H38.0415H38.0821H38.1227H38.1633H38.2039H38.2445H38.2851H38.3257H38.3663H38.407H38.4476H38.4882H38.5288H38.5694H38.61H38.6506H38.6912H38.7318H38.7724H38.813H38.8537H38.8942H38.9349H38.9755H39.0161H39.0567H39.0973H39.1379H39.1785H39.2191H39.2597H39.3003H39.3409H39.3816H39.4221H39.4628H39.5034H39.544H39.5846H39.6252H39.6658H39.7064H39.747H39.7876H39.8282H39.8688H39.9095H39.95H39.9907H40.0313H40.0719H40.1125H40.1531H40.1937H40.2343H40.2749H40.3155H40.3561H40.3967H40.4374H40.4779H40.5186H40.5592H40.5998H40.6404H40.681H40.7216H40.7622H40.8028H40.8434H40.884H40.9246H40.9653H41.0058H41.0465H41.0871H41.1277H41.1683H41.2089H41.2495H41.2901H41.3307H41.3714H41.4119H41.4526H41.4932H41.5338H41.5744H41.615H41.6556H41.6962H41.7368H41.7774V4.375Z",fill:"#54B230"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.1377 19.0723V8.61115C8.1377 8.31608 8.16772 8.02805 8.22476 7.74998C8.23702 7.69027 8.25061 7.63111 8.26532 7.57235C8.27791 7.52203 8.29147 7.47212 8.30584 7.42254C8.31867 7.37836 8.3322 7.33451 8.34637 7.29093C8.35936 7.25105 8.37279 7.21133 8.38692 7.17196C8.40001 7.13553 8.41341 7.09931 8.42744 7.06336C8.44054 7.02974 8.45407 6.99623 8.468 6.96302C8.48116 6.93171 8.49466 6.9006 8.50852 6.8697C8.52172 6.84032 8.53525 6.81118 8.54904 6.78217C8.56224 6.75445 8.57583 6.72694 8.5896 6.69956C8.60283 6.67326 8.61636 6.64717 8.63012 6.62121C8.64338 6.59617 8.65691 6.5713 8.67064 6.54656C8.68394 6.52261 8.69744 6.49879 8.7112 6.47513C8.72453 6.45216 8.73796 6.42925 8.75172 6.40655C8.76505 6.38459 8.77858 6.3628 8.79228 6.34112C8.80554 6.32011 8.81917 6.29923 8.8328 6.27846C8.84616 6.25813 8.85963 6.23787 8.87332 6.21777C8.88679 6.19805 8.90011 6.17836 8.91388 6.15888C8.92717 6.14007 8.94081 6.1215 8.9544 6.1029C8.9678 6.0846 8.98129 6.06644 8.99496 6.04838C9.00839 6.03062 9.02178 6.01273 9.03548 5.99518C9.04881 5.97813 9.06244 5.96136 9.076 5.94452C9.0894 5.92788 9.10289 5.91131 9.11656 5.89487C9.12999 5.87871 9.14342 5.86258 9.15708 5.84662C9.17044 5.831 9.18404 5.81565 9.19764 5.80023C9.21107 5.78495 9.2245 5.7697 9.23816 5.75466C9.25152 5.73992 9.26512 5.72538 9.27868 5.71084C9.29211 5.69644 9.30561 5.68217 9.31924 5.66798C9.33267 5.65398 9.34613 5.63999 9.35976 5.62616C9.37316 5.61257 9.38675 5.59919 9.40032 5.5858C9.41381 5.57249 9.42717 5.55907 9.44084 5.54595C9.4542 5.53311 9.46783 5.52057 9.48136 5.5079C9.49486 5.49526 9.50825 5.48259 9.52192 5.47015C9.53531 5.45795 9.54891 5.44599 9.56244 5.43396C9.57594 5.422 9.58936 5.41 9.603 5.39821C9.61642 5.38659 9.62995 5.37517 9.64352 5.36372C9.65695 5.35237 9.67044 5.34101 9.68404 5.32983C9.69747 5.31878 9.71103 5.30784 9.7246 5.29693C9.73806 5.28612 9.75152 5.27541 9.76512 5.26477C9.77855 5.25423 9.79211 5.24383 9.80567 5.23346C9.81914 5.22319 9.83263 5.21296 9.8462 5.20286L9.88672 5.17311C9.90018 5.16332 9.91368 5.15359 9.92728 5.14397C9.9407 5.13445 9.95423 5.12503 9.9678 5.11567C9.98126 5.10635 9.99476 5.0971 10.0083 5.08795C10.0218 5.07891 10.0353 5.07 10.0489 5.06108C10.0623 5.05224 10.0758 5.04333 10.0894 5.03462C10.1028 5.02601 10.1164 5.01761 10.13 5.00914C10.1435 5.0007 10.1569 4.99216 10.1705 4.98389C10.1839 4.97573 10.1975 4.9678 10.211 4.95977C10.2245 4.95173 10.2379 4.94357 10.2516 4.93567C10.265 4.92791 10.2786 4.92049 10.2921 4.91287C10.3056 4.90524 10.319 4.89752 10.3326 4.89003C10.3461 4.88264 10.3596 4.87553 10.3732 4.86831C10.3867 4.86109 10.4001 4.85384 10.4137 4.84676C10.4271 4.83974 10.4407 4.83286 10.4542 4.82598L10.4948 4.80572C10.5083 4.79905 10.5217 4.79237 10.5353 4.78586C10.5488 4.77939 10.5623 4.77312 10.5758 4.76679C10.5894 4.76045 10.6028 4.75398 10.6164 4.74781C10.6298 4.74168 10.6434 4.73592 10.6569 4.72995C10.6704 4.72399 10.6839 4.71792 10.6974 4.71209C10.7109 4.70633 10.7245 4.70078 10.738 4.69515L10.7785 4.67848L10.819 4.66228L10.8596 4.64676C10.8731 4.64161 10.8865 4.63629 10.9001 4.63128C10.9135 4.62633 10.9272 4.62172 10.9407 4.61691C10.9542 4.6121 10.9676 4.60722 10.9812 4.60254L11.0217 4.58889L11.0623 4.57564C11.0758 4.5713 11.0892 4.56686 11.1028 4.56266C11.1162 4.55849 11.1298 4.55453 11.1433 4.55049C11.1568 4.54643 11.1703 4.54229 11.1839 4.53836C11.1973 4.53447 11.2109 4.53084 11.2244 4.52708L11.265 4.516C11.2784 4.51241 11.2919 4.50875 11.3055 4.50529C11.3189 4.50183 11.3325 4.49868 11.346 4.49536C11.3595 4.49204 11.373 4.48858 11.3866 4.4854C11.4 4.48225 11.4136 4.4793 11.4271 4.47628L11.4676 4.46741C11.4811 4.46449 11.4946 4.46154 11.5082 4.4588C11.5216 4.45609 11.5352 4.45358 11.5487 4.45097C11.5622 4.44836 11.5757 4.44565 11.5892 4.44318C11.6027 4.4407 11.6162 4.43847 11.6298 4.43613L11.6703 4.42935C11.6838 4.42718 11.6973 4.42485 11.7108 4.42278C11.7243 4.42071 11.7379 4.41898 11.7514 4.41705C11.7648 4.41515 11.7783 4.41312 11.7919 4.41133L11.8324 4.40621L11.873 4.40157C11.8865 4.40004 11.8999 4.39828 11.9135 4.39689C11.927 4.3955 11.9405 4.39448 11.954 4.39323L11.9946 4.38964C12.0081 4.38849 12.0216 4.38737 12.0351 4.38639C12.0486 4.3854 12.0621 4.38462 12.0757 4.38378C12.0892 4.38293 12.1027 4.38195 12.1162 4.3812C12.1297 4.38046 12.1432 4.37995 12.1567 4.37934L12.1973 4.37778C12.2108 4.3773 12.2242 4.37659 12.2378 4.37625C12.2513 4.37591 12.2648 4.37595 12.2783 4.37575C12.2918 4.37554 12.3053 4.3753 12.3189 4.37524L12.3594 4.375H12.3999H12.4405H12.481H12.5215H12.5621H12.6026H12.6431H12.6837H12.7242H12.7647H12.8053H12.8458H12.8863H12.9269H12.9674H13.008H13.0485H13.089H13.1296H13.1701H13.2107H13.2512H13.2917H13.3323H13.3728H13.4133H13.4539H13.4944H13.5349H13.5755H13.616H13.6565H13.6971H13.7376H13.7781H13.8187H13.8592H13.8997H13.9403H13.9808H14.0213H14.0619H14.1024H14.143H14.1835H14.224H14.2646H14.3051H14.3457H14.3862H14.4267H14.4673H14.5078H14.5483H14.5889H14.6294H14.6699H14.7105H14.751H14.7915H14.8321H14.8726H14.9131H14.9537H14.9942H15.0347H15.0753H15.1158H15.1563H15.1969H15.2374H15.278H15.3185H15.359H15.3996H15.4401H15.4807H15.5212H15.5617H15.6023H15.6428H15.6833H15.7239H15.7644H15.8049H15.8455H15.886H15.9265H15.9671H16.0076H16.0481H16.0887H16.1292H16.1697H16.2103H16.2508H16.2914H16.3319H16.3724H16.413H16.4535H16.494H16.5346H16.5751H16.6157H16.6562H16.6967H16.7373H16.7778H16.8183H16.8589H16.8994H16.9399H16.9805H17.021H17.0615H17.1021H17.1426H17.1831H17.2237H17.2642H17.3047H17.3453H17.3858H17.4264H17.4669H17.5074H17.548H17.5885H17.629H17.6696H17.7101H17.7506H17.7912H17.8317H17.8722H17.9128H17.9533H17.9938H18.0344H18.0749H18.1154H18.156H18.1965H18.237H18.2776H18.3181H18.3586H18.3992H18.4397H18.4803H18.5147V25.5542C18.5147 25.7384 18.5029 25.9199 18.4803 26.098C18.4694 26.1837 18.4556 26.2685 18.4397 26.3525C18.4276 26.4165 18.4141 26.4799 18.3992 26.5427C18.3866 26.5957 18.3732 26.6483 18.3586 26.7005C18.3459 26.7463 18.3323 26.7917 18.3181 26.8368C18.3052 26.8777 18.2917 26.9182 18.2776 26.9586C18.2646 26.9959 18.2511 27.033 18.237 27.0698C18.224 27.1042 18.2105 27.1384 18.1965 27.1723C18.1834 27.2043 18.1699 27.2361 18.156 27.2676C18.1428 27.2976 18.1293 27.3273 18.1154 27.357C18.1023 27.3852 18.0887 27.4132 18.0749 27.4411C18.0617 27.4679 18.0482 27.4945 18.0344 27.5209C18.0211 27.5463 18.0076 27.5717 17.9938 27.5968C17.9805 27.6211 17.9671 27.6454 17.9533 27.6694C17.94 27.6926 17.9265 27.7156 17.9128 27.7385C17.8995 27.7607 17.8859 27.7826 17.8722 27.8045C17.8589 27.8259 17.8454 27.8471 17.8317 27.8682C17.8183 27.8889 17.8049 27.9095 17.7912 27.9298C17.7778 27.9496 17.7643 27.9692 17.7506 27.9887C17.7373 28.0078 17.7238 28.0267 17.7101 28.0456C17.6967 28.0641 17.6832 28.0826 17.6696 28.1009C17.6562 28.1188 17.6427 28.1365 17.629 28.1542C17.6157 28.1714 17.6021 28.1885 17.5885 28.2056C17.5751 28.2224 17.5616 28.2392 17.548 28.2558C17.5346 28.2721 17.521 28.2881 17.5074 28.3041C17.494 28.3199 17.4805 28.3356 17.4669 28.3512C17.4534 28.3665 17.44 28.382 17.4264 28.3972C17.413 28.412 17.3994 28.4266 17.3858 28.4413C17.3723 28.4558 17.359 28.4704 17.3453 28.4847C17.3319 28.4988 17.3183 28.5126 17.3047 28.5265C17.2913 28.5402 17.2778 28.5539 17.2642 28.5674C17.2508 28.5808 17.2373 28.5941 17.2237 28.6073C17.2103 28.6203 17.1967 28.6331 17.1831 28.6459C17.1697 28.6586 17.1562 28.6713 17.1426 28.6839C17.1292 28.6962 17.1156 28.7082 17.1021 28.7204C17.0886 28.7325 17.0752 28.7447 17.0615 28.7566C17.0482 28.7682 17.0345 28.7796 17.021 28.7911C17.0075 28.8026 16.9941 28.8142 16.9805 28.8255C16.9671 28.8366 16.9535 28.8475 16.9399 28.8584C16.9264 28.8693 16.913 28.8803 16.8994 28.8911C16.886 28.9016 16.8724 28.9119 16.8589 28.9223C16.8454 28.9327 16.832 28.9431 16.8183 28.9533C16.8049 28.9634 16.7913 28.9732 16.7778 28.9831C16.7643 28.993 16.7509 29.003 16.7373 29.0127C16.7239 29.0222 16.7103 29.0316 16.6967 29.041C16.6832 29.0504 16.6698 29.0599 16.6562 29.0692C16.6428 29.0782 16.6292 29.0871 16.6157 29.096C16.6021 29.105 16.5887 29.1141 16.5751 29.1229C16.5617 29.1315 16.5481 29.1398 16.5346 29.1484C16.5211 29.1569 16.5076 29.1655 16.494 29.1738C16.4806 29.1821 16.467 29.1901 16.4535 29.1981C16.44 29.2062 16.4266 29.2143 16.413 29.2223C16.3995 29.2301 16.386 29.2377 16.3724 29.2454C16.359 29.2531 16.3455 29.2608 16.3319 29.2682C16.3184 29.2757 16.3049 29.2831 16.2914 29.2904L16.2508 29.3119C16.2373 29.319 16.2239 29.3261 16.2103 29.333C16.1968 29.3399 16.1833 29.3466 16.1697 29.3533C16.1562 29.36 16.1428 29.367 16.1292 29.3735C16.1158 29.38 16.1022 29.3862 16.0887 29.3926C16.0752 29.399 16.0617 29.4054 16.0481 29.4117C16.0347 29.4178 16.0211 29.4237 16.0076 29.4298L15.9671 29.4476L15.9265 29.4649C15.9131 29.4706 15.8995 29.4761 15.886 29.4816C15.8725 29.4871 15.859 29.4928 15.8455 29.4982C15.832 29.5035 15.8185 29.5085 15.8049 29.5136C15.7914 29.5188 15.778 29.5241 15.7644 29.5292C15.7509 29.5342 15.7374 29.539 15.7239 29.5438L15.6833 29.5582L15.6428 29.5722C15.6293 29.5767 15.6158 29.5811 15.6023 29.5854C15.5887 29.5899 15.5753 29.5944 15.5617 29.5987C15.5483 29.6029 15.5347 29.6068 15.5212 29.6109L15.4807 29.6231L15.4401 29.6347C15.4266 29.6385 15.4131 29.6421 15.3996 29.6457C15.386 29.6494 15.3726 29.6533 15.359 29.6567C15.3456 29.6602 15.332 29.6633 15.3185 29.6667C15.305 29.6701 15.2915 29.6734 15.278 29.6767L15.2374 29.6861L15.1969 29.695C15.1834 29.6979 15.1699 29.7011 15.1563 29.7039C15.1429 29.7067 15.1293 29.709 15.1158 29.7117C15.1023 29.7143 15.0888 29.717 15.0753 29.7195L15.0347 29.7269C15.0213 29.7292 15.0077 29.7314 14.9942 29.7336C14.9807 29.7358 14.9672 29.7383 14.9537 29.7404C14.9402 29.7425 14.9267 29.7442 14.9131 29.7462L14.8726 29.7519C14.8591 29.7538 14.8456 29.7556 14.8321 29.7573C14.8186 29.759 14.805 29.7604 14.7915 29.762C14.778 29.7635 14.7645 29.7652 14.751 29.7667C14.7375 29.7681 14.724 29.7693 14.7105 29.7706L14.6699 29.7742C14.6564 29.7754 14.6429 29.7768 14.6294 29.7778C14.6159 29.7788 14.6024 29.7795 14.5889 29.7804L14.5483 29.783L14.5078 29.7851C14.4943 29.7858 14.4808 29.7862 14.4673 29.7867C14.4537 29.7872 14.4402 29.7878 14.4267 29.7883C14.4132 29.7886 14.3997 29.7888 14.3862 29.789L14.3457 29.7895C14.3331 29.7896 14.3207 29.79 14.3081 29.79H14.2646H14.224H14.1835H14.143H14.1024H14.0619H14.0213H13.9808H13.9403H13.8997H13.8592H13.8187H13.7781H13.7376H13.6971H13.6565H13.616H13.5755H13.5349H13.4944H13.4539H13.4133H13.3728H13.3323H13.2917H13.2512H13.2107H13.1701H13.1296H13.089H13.0485H13.008H12.9674H12.9269H12.8863H12.8458H12.8053H12.7647H12.7242H12.6837H12.6431H12.6026H12.5621H12.5215H12.481H12.4405H12.3999H12.3594H12.3189H12.2783H12.2378H12.1973H12.1567H12.1162H12.0757H12.0351H11.9946H11.954H11.9135H11.873H11.8324H11.7919H11.7514H11.7108H11.6703H11.6298H11.5892H11.5487H11.5082H11.4676H11.4271H11.3866H11.346H11.3055H11.265H11.2244H11.1839H11.1433H11.1028H11.0623H11.0217H10.9812H10.9407H10.9001H10.8596H10.819H10.7785H10.738H10.6974H10.6569H10.6164H10.5758H10.5353H10.4948H10.4542H10.4137H10.3732H10.3326H10.2921H10.2516H10.211H10.1705H10.13H10.0894H10.0489H10.0083H9.9678H9.92728H9.88672H9.8462H9.80567H9.76512H9.7246H9.68404H9.64352H9.603H9.56244H9.52192H9.48136H9.44084H9.40032H9.35976H9.31924H9.27868H9.23816H9.19764H9.15708H9.11656H9.076H9.03548H8.99496H8.9544H8.91388H8.87332H8.8328H8.79228H8.75172H8.7112H8.67064H8.63012H8.5896H8.54904H8.50852H8.468H8.42744H8.38692H8.34637H8.30584H8.26532H8.22476H8.1377V20.8632C8.1377 20.8632 8.16765 20.8715 8.22476 20.886L8.26532 20.8962L8.30584 20.9062L8.34637 20.916L8.38692 20.9256L8.42744 20.9351L8.468 20.9445L8.50852 20.9537L8.54904 20.9628L8.5896 20.9717L8.63012 20.9805L8.67064 20.9893L8.7112 20.9979L8.75172 21.0064L8.79228 21.0147L8.8328 21.023L8.87332 21.0311L8.91388 21.0392L8.9544 21.0471L8.99496 21.055L9.03548 21.0628L9.076 21.0704L9.11656 21.078L9.15708 21.0854L9.19764 21.0928L9.23816 21.1001L9.27868 21.1072L9.31924 21.1143L9.35976 21.1212L9.40032 21.1281L9.44084 21.1349L9.48136 21.1416L9.52192 21.1482L9.56244 21.1547L9.603 21.1612L9.64352 21.1675L9.68404 21.1738L9.7246 21.1799L9.76512 21.186L9.80567 21.1919L9.8462 21.1978L9.88672 21.2036L9.92728 21.2093L9.9678 21.2149L10.0083 21.2205L10.0489 21.2259L10.0894 21.2313L10.13 21.2366L10.1705 21.2417L10.211 21.2468L10.2516 21.2518L10.2921 21.2568L10.3326 21.2615L10.3732 21.2663L10.4137 21.2709L10.4542 21.2755L10.4948 21.28L10.5353 21.2844L10.5758 21.2887L10.6164 21.2929L10.6569 21.297L10.6974 21.301L10.738 21.305L10.7785 21.3089L10.819 21.3126L10.8596 21.3164L10.9001 21.3199L10.9407 21.3234L10.9812 21.3269L11.0217 21.3302L11.0623 21.3335L11.1028 21.3366L11.1433 21.3397L11.1839 21.3426L11.2244 21.3455L11.265 21.3483L11.3055 21.351L11.346 21.3536L11.3866 21.3562L11.4271 21.3586L11.4676 21.361L11.5082 21.3632L11.5487 21.3654L11.5892 21.3675L11.6298 21.3694L11.6703 21.3713L11.7108 21.3731L11.7514 21.3748L11.7919 21.3765L11.8324 21.3779L11.873 21.3793L11.9135 21.3807L11.954 21.3819L11.9946 21.3831L12.0351 21.3841L12.0757 21.385L12.1162 21.386L12.1567 21.3867L12.1973 21.3873L12.2378 21.388L12.2783 21.3884L12.3189 21.3888L12.3594 21.3891L12.3999 21.3892L12.4405 21.3893L12.481 21.3893L12.5215 21.389L12.5621 21.3888L12.6026 21.3885L12.6431 21.3883L12.6837 21.3875L12.7242 21.3868L12.7647 21.3861L12.8053 21.3853L12.8458 21.3843L12.8863 21.383L12.9269 21.3818L12.9674 21.3805L13.008 21.3791L13.0485 21.3773L13.089 21.3756L13.1296 21.3737L13.1701 21.3719L13.2107 21.3697L13.2512 21.3673L13.2917 21.3649L13.3323 21.3626L13.3728 21.3599L13.4133 21.3569L13.4539 21.354L13.4944 21.3511L13.5349 21.3478L13.5755 21.3443L13.616 21.3408L13.6565 21.3372L13.6971 21.3334L13.7376 21.3292L13.7781 21.3251L13.8187 21.3209L13.8592 21.3164L13.8997 21.3116L13.9403 21.3068L13.9808 21.302L14.0213 21.2967L14.0619 21.2912L14.1024 21.2858L14.143 21.2802C14.1566 21.2782 14.1699 21.2761 14.1835 21.2741L14.224 21.2679L14.2646 21.2618L14.3051 21.2553C14.3187 21.2531 14.3321 21.2507 14.3457 21.2484L14.3862 21.2416C14.3996 21.2393 14.4134 21.2371 14.4267 21.2347C14.4404 21.2323 14.4537 21.2296 14.4673 21.2271L14.5078 21.2195L14.5483 21.2119L14.5889 21.2039C14.6025 21.2012 14.6159 21.1983 14.6294 21.1955L14.6699 21.1871L14.7105 21.1785C14.7242 21.1756 14.7374 21.1724 14.751 21.1694L14.7915 21.1601C14.805 21.157 14.8187 21.1541 14.8321 21.151C14.8458 21.1477 14.8591 21.1443 14.8726 21.141L14.9131 21.1309C14.9266 21.1276 14.9403 21.1243 14.9537 21.1209C14.9673 21.1174 14.9807 21.1138 14.9942 21.1102L15.0347 21.0993C15.0482 21.0956 15.0619 21.0921 15.0753 21.0883C15.0889 21.0846 15.1023 21.0806 15.1158 21.0768L15.1563 21.065C15.1698 21.061 15.1835 21.0571 15.1969 21.0531L15.2374 21.0406L15.278 21.0278C15.2914 21.0235 15.3052 21.0193 15.3185 21.015L15.359 21.0014L15.3996 20.9876C15.413 20.9829 15.4268 20.9784 15.4401 20.9737C15.4538 20.9689 15.4671 20.9638 15.4807 20.9589L15.5212 20.9441C15.5347 20.939 15.5483 20.9341 15.5617 20.9289C15.5754 20.9237 15.5887 20.9183 15.6023 20.913C15.6158 20.9077 15.6294 20.9024 15.6428 20.897L15.6833 20.8804L15.7239 20.8632C15.7373 20.8575 15.7511 20.852 15.7644 20.8461C15.7781 20.8401 15.7914 20.8339 15.8049 20.8278L15.8455 20.8094L15.886 20.7904C15.8996 20.784 15.9131 20.7774 15.9265 20.7708C15.94 20.7642 15.9538 20.7577 15.9671 20.751C15.9808 20.7441 15.9941 20.737 16.0076 20.73C16.0211 20.723 16.0348 20.7161 16.0481 20.7091C16.0618 20.7018 16.0752 20.6944 16.0887 20.687C16.1023 20.6796 16.1158 20.6721 16.1292 20.6646C16.1428 20.6569 16.1563 20.6492 16.1697 20.6415C16.1834 20.6336 16.1969 20.6255 16.2103 20.6175C16.2239 20.6094 16.2375 20.6013 16.2508 20.5931C16.2645 20.5847 16.2779 20.5761 16.2914 20.5676C16.3049 20.559 16.3186 20.5504 16.3319 20.5417C16.3456 20.5328 16.359 20.5236 16.3724 20.5145C16.386 20.5053 16.3996 20.4963 16.413 20.487C16.4267 20.4774 16.44 20.4677 16.4535 20.458C16.4671 20.4482 16.4807 20.4384 16.494 20.4286C16.5077 20.4184 16.5211 20.408 16.5346 20.3977C16.5482 20.3872 16.5618 20.3767 16.5751 20.3661C16.5888 20.3552 16.6023 20.3442 16.6157 20.3331C16.6293 20.3218 16.6428 20.3104 16.6562 20.299C16.6698 20.2873 16.6834 20.2757 16.6967 20.2639C16.7105 20.2517 16.7238 20.2393 16.7373 20.2269C16.7508 20.2144 16.7645 20.2019 16.7778 20.1892C16.7915 20.176 16.805 20.1627 16.8183 20.1493C16.832 20.1356 16.8455 20.1218 16.8589 20.108C16.8725 20.0938 16.8861 20.0797 16.8994 20.0653C16.9132 20.0503 16.9265 20.0351 16.9399 20.0199C16.9537 20.0043 16.9672 19.9885 16.9805 19.9727C16.9942 19.9564 17.0078 19.9401 17.021 19.9236C17.0347 19.9064 17.0483 19.8892 17.0615 19.8718C17.0754 19.8536 17.0888 19.8352 17.1021 19.8168C17.1159 19.7976 17.1293 19.7783 17.1426 19.7589C17.1564 19.7386 17.1699 19.7182 17.1831 19.6976C17.197 19.6761 17.2105 19.6543 17.2237 19.6324C17.2375 19.6093 17.2511 19.5861 17.2642 19.5627C17.2781 19.5378 17.2916 19.5128 17.3047 19.4876C17.3187 19.4606 17.3322 19.4335 17.3453 19.4061C17.3594 19.3767 17.3728 19.3471 17.3858 19.3172C17.3999 19.2847 17.4135 19.2521 17.4264 19.2191C17.4406 19.1827 17.4541 19.1461 17.4669 19.1091C17.4814 19.0672 17.4948 19.0248 17.5074 18.982C17.5222 18.9321 17.5356 18.8816 17.548 18.8307C17.5632 18.7675 17.5768 18.7036 17.5885 18.639C17.6059 18.5428 17.6193 18.4451 17.629 18.346C17.6426 18.208 17.6493 18.0674 17.6493 17.9246V13.01H17.5885H17.548H17.5074H17.4669H17.4264H17.3858H17.3453H17.3047H17.2642H17.2237H17.1831H17.1426H17.1021H17.0615H17.021H16.9805H16.9399H16.8994H16.8589H16.8183H16.7778H16.7373H16.6967H16.6562H16.6157H16.5751H16.5346H16.494H16.4535H16.413H16.3724H16.3319H16.2914H16.2508H16.2103H16.1697H16.1292H16.0887H16.0481H16.0076H15.9671H15.9265H15.886H15.8455H15.8049H15.7644H15.7239H15.6833H15.6428H15.6023H15.5617H15.5212H15.4807H15.4401H15.3996H15.359H15.3185H15.278H15.2374H15.1969H15.1563H15.1158H15.0753H15.0347H14.9942H14.9537H14.9131H14.8726H14.8321H14.7915H14.751H14.7105H14.6699H14.6294H14.5889H14.5483H14.5078H14.4673H14.4267H14.3862H14.3457H14.3051H14.2646H14.224H14.1835H14.143H14.1024H14.0619L14.0312 17.9246C14.0312 18.0016 14.0278 18.0773 14.0213 18.1515C14.0131 18.2461 13.9995 18.3383 13.9808 18.4279C13.9693 18.4833 13.9557 18.5377 13.9403 18.591C13.928 18.6335 13.9145 18.6753 13.8997 18.7164C13.8872 18.7514 13.8736 18.7858 13.8592 18.8198C13.8464 18.8501 13.8329 18.8799 13.8187 18.9093C13.8057 18.9361 13.7923 18.9626 13.7781 18.9885C13.7652 19.0125 13.7516 19.0359 13.7376 19.0592C13.7245 19.081 13.711 19.1026 13.6971 19.1238C13.6839 19.1438 13.6704 19.1634 13.6565 19.1828C13.6433 19.2013 13.6299 19.2196 13.616 19.2376C13.6028 19.2547 13.5893 19.2714 13.5755 19.288C13.5622 19.3039 13.5487 19.3196 13.5349 19.3351C13.5217 19.35 13.5082 19.3647 13.4944 19.3792C13.4811 19.3931 13.4676 19.407 13.4539 19.4206C13.4406 19.4337 13.4271 19.4467 13.4133 19.4594C13.4 19.4718 13.3865 19.4839 13.3728 19.4958C13.3595 19.5075 13.346 19.519 13.3323 19.5302C13.3189 19.5412 13.3054 19.552 13.2917 19.5627C13.2784 19.5731 13.2648 19.5833 13.2512 19.5934C13.2378 19.6032 13.2243 19.6129 13.2107 19.6224C13.1973 19.6318 13.1838 19.6409 13.1701 19.65C13.1567 19.6588 13.1432 19.6674 13.1296 19.676C13.1162 19.6843 13.1027 19.6925 13.089 19.7006C13.0757 19.7085 13.0621 19.7162 13.0485 19.7239C13.0351 19.7314 13.0216 19.7386 13.008 19.7459C12.9946 19.753 12.9811 19.76 12.9674 19.7668C12.954 19.7735 12.9405 19.7801 12.9269 19.7866C12.9135 19.793 12.9 19.7993 12.8863 19.8055C12.8729 19.8115 12.8595 19.8175 12.8458 19.8232C12.8325 19.8289 12.8189 19.8344 12.8053 19.8399C12.7919 19.8453 12.7783 19.8505 12.7647 19.8557C12.7513 19.8608 12.7379 19.8657 12.7242 19.8706C12.7108 19.8754 12.6973 19.8802 12.6837 19.8848C12.6703 19.8893 12.6567 19.8937 12.6431 19.898C12.6298 19.9022 12.6162 19.9063 12.6026 19.9103C12.5892 19.9143 12.5757 19.9183 12.5621 19.922C12.5486 19.9258 12.5351 19.9295 12.5215 19.933C12.5081 19.9365 12.4946 19.9399 12.481 19.9432C12.4676 19.9464 12.4541 19.9495 12.4405 19.9526C12.427 19.9556 12.4135 19.9586 12.3999 19.9614C12.3865 19.9642 12.373 19.967 12.3594 19.9696C12.346 19.9722 12.3324 19.9746 12.3189 19.977C12.3054 19.9794 12.2919 19.9817 12.2783 19.9839L12.2378 19.9902C12.2244 19.9921 12.2108 19.9939 12.1973 19.9957C12.1838 19.9975 12.1703 19.9993 12.1567 20.0009L12.1162 20.0054C12.1028 20.0068 12.0892 20.008 12.0757 20.0093C12.0622 20.0105 12.0487 20.0118 12.0351 20.0128C12.0217 20.0139 12.0082 20.0148 11.9946 20.0157C11.9811 20.0165 11.9676 20.0173 11.954 20.018C11.9405 20.0187 11.9271 20.0194 11.9135 20.02C11.9001 20.0205 11.8865 20.0208 11.873 20.0212L11.8324 20.0222C11.819 20.0224 11.8055 20.0225 11.7919 20.0226L11.7514 20.0226L11.7108 20.0223L11.6703 20.0218L11.6298 20.0209L11.5892 20.0198L11.5487 20.0185L11.5082 20.0168L11.4676 20.0149L11.4271 20.0129L11.3866 20.0104L11.346 20.0078L11.3055 20.0049L11.265 20.0017L11.2244 19.9983L11.1839 19.9946L11.1433 19.9907L11.1028 19.9865L11.0623 19.9821L11.0217 19.9775L10.9812 19.9725L10.9407 19.9674L10.9001 19.962L10.8596 19.9563L10.819 19.9504L10.7785 19.9443L10.738 19.9379L10.6974 19.9313L10.6569 19.9244L10.6164 19.9173L10.5758 19.91L10.5353 19.9024L10.4948 19.8946L10.4542 19.8866L10.4137 19.8783L10.3732 19.8698L10.3326 19.8611L10.2921 19.8521L10.2516 19.8429L10.211 19.8335L10.1705 19.8238L10.13 19.8139L10.0894 19.8038L10.0489 19.7936L10.0083 19.7829L9.9678 19.7722L9.92728 19.7612L9.88672 19.75L9.8462 19.7386L9.80567 19.7269L9.76512 19.7151L9.7246 19.703L9.68404 19.6907L9.64352 19.6782L9.603 19.6654L9.56244 19.6525L9.52192 19.6394L9.48136 19.6261L9.44084 19.6125L9.40032 19.5987L9.35976 19.5847L9.31924 19.5706L9.27868 19.5562L9.23816 19.5416L9.19764 19.5269L9.15708 19.5118L9.11656 19.4967L9.076 19.4813L9.03548 19.4657L8.99496 19.4499L8.9544 19.434L8.91388 19.4178L8.87332 19.4014L8.8328 19.3849L8.79228 19.3682L8.75172 19.3513L8.7112 19.3341L8.67064 19.3168L8.63012 19.2993L8.5896 19.2817L8.54904 19.2637L8.50852 19.2457L8.468 19.2275L8.42744 19.2091L8.38692 19.1905L8.34637 19.1717L8.30584 19.1528L8.26532 19.1336L8.22476 19.1144C8.19572 19.1004 8.16671 19.0864 8.1377 19.0723Z",fill:"#006CB9"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M19.8644 14.0838C19.8348 14.1079 19.8057 14.1321 19.7773 14.1567V8.61115C19.7773 8.31625 19.8074 8.02839 19.8644 7.75042C19.8766 7.69075 19.8902 7.63162 19.9049 7.57289C19.9175 7.52251 19.9311 7.47253 19.9455 7.42288C19.9583 7.37866 19.9718 7.33475 19.986 7.29114C19.999 7.25129 20.0124 7.21164 20.0265 7.17233C20.0396 7.1359 20.0531 7.09965 20.0671 7.06369C20.0802 7.03008 20.0937 6.99663 20.1076 6.96343C20.1208 6.93212 20.1343 6.90101 20.1481 6.87007C20.1613 6.84069 20.1749 6.81152 20.1887 6.78251C20.2019 6.75479 20.2154 6.72734 20.2292 6.69997C20.2424 6.67367 20.256 6.64758 20.2698 6.62159C20.283 6.59655 20.2966 6.57167 20.3103 6.54694C20.3236 6.52298 20.3371 6.49912 20.3508 6.47547C20.3642 6.4525 20.3776 6.42963 20.3914 6.40692C20.4047 6.385 20.4182 6.36321 20.4319 6.34156C20.4452 6.32048 20.4588 6.29964 20.4725 6.27883C20.4858 6.25847 20.4993 6.23824 20.513 6.21814C20.5264 6.19842 20.5398 6.1787 20.5535 6.15925C20.5668 6.14041 20.5805 6.12188 20.5941 6.10331C20.6074 6.08501 20.6209 6.06681 20.6346 6.04875C20.648 6.03096 20.6614 6.01314 20.6751 5.99558C20.6884 5.97854 20.7021 5.96173 20.7157 5.94489C20.7291 5.92825 20.7426 5.91168 20.7562 5.89528C20.7696 5.87908 20.7831 5.86295 20.7968 5.84699C20.8101 5.83141 20.8237 5.81602 20.8373 5.80064C20.8507 5.78539 20.8642 5.77007 20.8778 5.75499C20.8912 5.74025 20.9048 5.72568 20.9183 5.71115C20.9317 5.69678 20.9453 5.68251 20.9589 5.66832C20.9723 5.65432 20.9858 5.64033 20.9994 5.6265C21.0128 5.61295 21.0264 5.59956 21.0399 5.58618C21.0534 5.57286 21.0668 5.55944 21.0805 5.54629C21.0938 5.53345 21.1075 5.52091 21.121 5.50824C21.1345 5.4956 21.1479 5.48293 21.1616 5.47049C21.175 5.45829 21.1886 5.4463 21.2021 5.43427C21.2156 5.42227 21.229 5.41031 21.2426 5.39852C21.2561 5.38689 21.2696 5.37548 21.2832 5.36402C21.2966 5.35267 21.3101 5.34132 21.3237 5.3301C21.3372 5.31906 21.3507 5.30811 21.3642 5.29723C21.3777 5.28642 21.3912 5.27568 21.4048 5.26504C21.4182 5.25454 21.4318 5.24413 21.4453 5.23377C21.4588 5.2235 21.4723 5.21326 21.4858 5.20317C21.4993 5.19314 21.5128 5.18324 21.5264 5.17338C21.5399 5.16362 21.5534 5.15386 21.5669 5.14424C21.5804 5.13472 21.5939 5.12533 21.6075 5.11594C21.6209 5.10663 21.6344 5.09734 21.648 5.08819C21.6614 5.07914 21.675 5.07023 21.6886 5.06132C21.702 5.05244 21.7155 5.04356 21.7291 5.03486C21.7425 5.02625 21.7561 5.01785 21.7696 5.00937C21.7831 5.00094 21.7966 4.9924 21.8102 4.98413C21.8236 4.97593 21.8372 4.968 21.8507 4.95997C21.8642 4.95194 21.8776 4.94374 21.8912 4.93588C21.9046 4.92812 21.9183 4.92066 21.9318 4.91304C21.9453 4.90541 21.9587 4.89772 21.9723 4.89027C21.9857 4.88288 21.9993 4.87576 22.0128 4.86851C22.0263 4.86129 22.0398 4.85404 22.0534 4.84696L22.0939 4.82619L22.1345 4.80589C22.1479 4.79925 22.1614 4.79254 22.175 4.78603C22.1885 4.77956 22.202 4.77329 22.2156 4.76696C22.2291 4.76065 22.2425 4.75415 22.2561 4.74798C22.2695 4.74185 22.2831 4.73609 22.2966 4.73012C22.3101 4.72416 22.3236 4.71809 22.3372 4.71226C22.3506 4.7065 22.3641 4.70091 22.3777 4.69529L22.4182 4.67862C22.4317 4.67316 22.4452 4.6677 22.4588 4.66238C22.4722 4.6571 22.4858 4.65202 22.4993 4.64686C22.5128 4.64171 22.5262 4.63639 22.5398 4.63138C22.5533 4.62643 22.5669 4.62182 22.5804 4.61701C22.5939 4.6122 22.6073 4.60732 22.6209 4.60264C22.6344 4.59797 22.6479 4.59349 22.6615 4.58899L22.702 4.57574C22.7155 4.5714 22.729 4.56696 22.7425 4.56273C22.756 4.55856 22.7696 4.55463 22.7831 4.5506C22.7966 4.54653 22.8101 4.54236 22.8236 4.53843C22.8371 4.53453 22.8506 4.53091 22.8641 4.52715L22.9047 4.51607C22.9182 4.51247 22.9317 4.50881 22.9452 4.50536C22.9587 4.50194 22.9722 4.49872 22.9857 4.4954C22.9992 4.49208 23.0127 4.48862 23.0263 4.48543C23.0398 4.48228 23.0533 4.47933 23.0668 4.47632L23.1074 4.46744C23.1209 4.46456 23.1343 4.46158 23.1479 4.45883C23.1614 4.45609 23.1749 4.45361 23.1885 4.45101C23.202 4.4484 23.2154 4.44565 23.229 4.44318L23.2695 4.43613L23.3101 4.42939C23.3236 4.42718 23.337 4.42485 23.3506 4.42278C23.3641 4.42071 23.3776 4.41898 23.3911 4.41705C23.4046 4.41515 23.4181 4.41316 23.4317 4.41136L23.4722 4.40624L23.5127 4.40157C23.5263 4.40004 23.5397 4.39828 23.5533 4.39689C23.5668 4.3955 23.5803 4.39448 23.5938 4.39323L23.6344 4.38964C23.6479 4.38849 23.6614 4.38737 23.6749 4.38639C23.6884 4.3854 23.7019 4.38462 23.7154 4.38378C23.7289 4.38293 23.7424 4.38195 23.756 4.3812C23.7695 4.38046 23.783 4.37995 23.7965 4.37934L23.837 4.37778C23.8506 4.3773 23.864 4.37659 23.8776 4.37625C23.8911 4.37591 23.9046 4.37595 23.9181 4.37575C23.9317 4.37554 23.9452 4.3753 23.9587 4.37524L23.9766 4.375H23.9992H24.0398H24.0803H24.1208H24.1614H24.2019H24.2424H24.283H24.3235H24.364H24.4046H24.4451H24.4856H24.5262H24.5667H24.6073H24.6478H24.6884H24.7289H24.7694H24.81H24.8505H24.891H24.9316H24.9721H25.0127H25.0532H25.0937H25.1343H25.1748H25.2153H25.2559H25.2964H25.3369H25.3775H25.418H25.4585H25.4991H25.5396H25.5802H25.6207H25.6613H25.7018H25.7423H25.7829H25.8234H25.8639H25.9045H25.945H25.9855H26.0261H26.0666H26.1072H26.1477H26.1882H26.2288H26.2693H26.3099H26.3504H26.3909H26.4315H26.472H26.5125H26.5531H26.5936H26.6342H26.6747H26.7152H26.7558H26.7963H26.8368H26.8774H26.9179H26.9584H26.999H27.0395H27.0801H27.1206H27.1612H27.2017H27.2422H27.2828H27.3233H27.3638H27.4044H27.4449H27.4854H27.526H27.5665H27.6071H27.6476H27.6882H27.7287H27.7692H27.8098H27.8503H27.8908H27.9314H27.9719H28.0124H28.053H28.0935H28.1341H28.1746H28.2151H28.2557H28.2962H28.3367H28.3773H28.4178H28.4583H28.4989H28.5394H28.58H28.6205H28.661H28.7016H28.7421H28.7827H28.8232H28.8637H28.9043H28.9448H28.9853H29.0259H29.0664H29.107H29.1475H29.1881H29.2286H29.2691H29.3097H29.3502H29.3907H29.4313H29.4718H29.5123H29.5529H29.5934H29.6339H29.6745H29.715H29.7556H29.7961H29.8366H29.8772H29.9177H29.9582H29.9988H30.0393H30.0799H30.1204H30.1548V25.5542C30.1548 25.7384 30.1431 25.9197 30.1204 26.0977C30.1095 26.1834 30.0958 26.2682 30.0799 26.3522C30.0678 26.4161 30.0543 26.4796 30.0393 26.5425C30.0267 26.5954 30.0133 26.6481 29.9988 26.7003C29.986 26.746 29.9725 26.7915 29.9582 26.8366C29.9454 26.8775 29.9318 26.918 29.9177 26.9583C29.9047 26.9956 29.8912 27.0327 29.8772 27.0696C29.8641 27.1039 29.8506 27.1381 29.8366 27.172C29.8235 27.204 29.81 27.2358 29.7961 27.2674C29.7829 27.2973 29.7694 27.3271 29.7556 27.3567C29.7423 27.3849 29.7288 27.413 29.715 27.4409C29.7018 27.4676 29.6883 27.4942 29.6745 27.5207C29.6612 27.5461 29.6477 27.5715 29.6339 27.5966C29.6206 27.621 29.6072 27.6452 29.5934 27.6692C29.5801 27.6924 29.5666 27.7154 29.5529 27.7382C29.5396 27.7604 29.526 27.7824 29.5123 27.8043C29.499 27.8256 29.4855 27.8469 29.4718 27.868C29.4584 27.8886 29.445 27.9093 29.4313 27.9296C29.4179 27.9494 29.4044 27.969 29.3907 27.9885C29.3774 28.0076 29.3638 28.0265 29.3502 28.0453C29.3368 28.0639 29.3233 28.0824 29.3097 28.1007C29.2963 28.1185 29.2828 28.1362 29.2691 28.1539C29.2558 28.1712 29.2422 28.1883 29.2286 28.2053C29.2151 28.2222 29.2017 28.239 29.1881 28.2556C29.1747 28.2718 29.1611 28.2879 29.1475 28.3039C29.1341 28.3197 29.1206 28.3353 29.107 28.3509C29.0935 28.3663 29.0801 28.3817 29.0664 28.3969C29.0531 28.4118 29.0394 28.4264 29.0259 28.441C29.0124 28.4556 28.999 28.4702 28.9853 28.4845C28.9719 28.4986 28.9584 28.5124 28.9448 28.5263C28.9314 28.54 28.9179 28.5536 28.9043 28.5672C28.8909 28.5806 28.8774 28.5939 28.8637 28.6071C28.8503 28.62 28.8368 28.6329 28.8232 28.6457C28.8097 28.6584 28.7963 28.6712 28.7827 28.6837C28.7693 28.696 28.7557 28.7081 28.7421 28.7202C28.7286 28.7323 28.7152 28.7445 28.7016 28.7564C28.6882 28.7681 28.6746 28.7795 28.661 28.791C28.6475 28.8025 28.6341 28.814 28.6205 28.8253C28.6071 28.8364 28.5935 28.8472 28.58 28.8582C28.5665 28.8691 28.5531 28.8801 28.5394 28.8909C28.526 28.9014 28.5124 28.9117 28.4989 28.9221C28.4854 28.9325 28.472 28.9429 28.4583 28.9532C28.445 28.9632 28.4314 28.9731 28.4178 28.983C28.4043 28.9928 28.3909 29.0028 28.3773 29.0125C28.3639 29.0221 28.3503 29.0314 28.3367 29.0408C28.3232 29.0502 28.3098 29.0597 28.2962 29.069C28.2828 29.0781 28.2692 29.0869 28.2557 29.0959C28.2422 29.1048 28.2288 29.1139 28.2151 29.1227C28.2017 29.1314 28.1881 29.1397 28.1746 29.1482C28.1611 29.1567 28.1477 29.1653 28.1341 29.1737C28.1206 29.1819 28.107 29.1899 28.0935 29.198C28.08 29.206 28.0666 29.2142 28.053 29.2221C28.0395 29.2299 28.026 29.2376 28.0124 29.2453L27.9719 29.2681L27.9314 29.2902L27.8908 29.3118C27.8773 29.3188 27.8639 29.326 27.8503 29.3329C27.8368 29.3398 27.8233 29.3465 27.8098 29.3532C27.7963 29.3599 27.7828 29.3668 27.7692 29.3734C27.7558 29.3799 27.7422 29.3861 27.7287 29.3925C27.7152 29.3988 27.7017 29.4053 27.6882 29.4115C27.6747 29.4177 27.6611 29.4236 27.6476 29.4297L27.6071 29.4475L27.5665 29.4648L27.526 29.4815C27.5125 29.487 27.499 29.4927 27.4854 29.4981C27.472 29.5034 27.4584 29.5084 27.4449 29.5135C27.4314 29.5187 27.418 29.524 27.4044 29.5291C27.3909 29.5341 27.3774 29.5389 27.3638 29.5437L27.3233 29.5581L27.2828 29.5721C27.2693 29.5766 27.2557 29.5809 27.2422 29.5853C27.2287 29.5898 27.2152 29.5944 27.2017 29.5986C27.1883 29.6028 27.1747 29.6067 27.1612 29.6108L27.1206 29.623L27.0801 29.6346C27.0666 29.6384 27.0531 29.642 27.0395 29.6456C27.026 29.6493 27.0126 29.6532 26.999 29.6567C26.9855 29.6602 26.972 29.6633 26.9584 29.6666C26.945 29.67 26.9315 29.6734 26.9179 29.6766L26.8774 29.686L26.8368 29.6949C26.8233 29.6978 26.8099 29.701 26.7963 29.7038C26.7829 29.7066 26.7693 29.709 26.7558 29.7116L26.7152 29.7194L26.6747 29.7268C26.6612 29.7292 26.6477 29.7313 26.6342 29.7336C26.6206 29.7358 26.6072 29.7382 26.5936 29.7403C26.5802 29.7424 26.5666 29.7442 26.5531 29.7462L26.5125 29.7519C26.499 29.7537 26.4855 29.7556 26.472 29.7573C26.4585 29.759 26.445 29.7604 26.4315 29.762C26.418 29.7635 26.4045 29.7652 26.3909 29.7666C26.3775 29.7681 26.3639 29.7693 26.3504 29.7706L26.3099 29.7742C26.2963 29.7754 26.2829 29.7768 26.2693 29.7778C26.2559 29.7788 26.2423 29.7795 26.2288 29.7804L26.1882 29.783L26.1477 29.7851C26.1342 29.7858 26.1207 29.7862 26.1072 29.7867C26.0936 29.7872 26.0802 29.7878 26.0666 29.7882C26.0532 29.7886 26.0396 29.7887 26.0261 29.789L25.9855 29.7895C25.9729 29.7896 25.9604 29.79 25.9477 29.79H25.945H25.9045H25.8639H25.8234H25.7829H25.7423H25.7018H25.6613H25.6207H25.5802H25.5396H25.4991H25.4585H25.418H25.3775H25.3369H25.2964H25.2559H25.2153H25.1748H25.1343H25.0937H25.0532H25.0127H24.9721H24.9316H24.891H24.8505H24.81H24.7694H24.7289H24.6884H24.6478H24.6073H24.5667H24.5262H24.4856H24.4451H24.4046H24.364H24.3235H24.283H24.2424H24.2019H24.1614H24.1208H24.0803H24.0398H23.9992H23.9587H23.9181H23.8776H23.837H23.7965H23.756H23.7154H23.6749H23.6344H23.5938H23.5533H23.5127H23.4722H23.4317H23.3911H23.3506H23.3101H23.2695H23.229H23.1885H23.1479H23.1074H23.0668H23.0263H22.9857H22.9452H22.9047H22.8641H22.8236H22.7831H22.7425H22.702H22.6615H22.6209H22.5804H22.5398H22.4993H22.4588H22.4182H22.3777H22.3372H22.2966H22.2561H22.2156H22.175H22.1345H22.0939H22.0534H22.0128H21.9723H21.9318H21.8912H21.8507H21.8102H21.7696H21.7291H21.6886H21.648H21.6075H21.5669H21.5264H21.4858H21.4453H21.4048H21.3642H21.3237H21.2832H21.2426H21.2021H21.1616H21.121H21.0805H21.0399H20.9994H20.9589H20.9183H20.8778H20.8373H20.7968H20.7562H20.7157H20.6751H20.6346H20.5941H20.5535H20.513H20.4725H20.4319H20.3914H20.3508H20.3103H20.2698H20.2292H20.1887H20.1481H20.1076H20.0671H20.0265H19.986H19.9455H19.9049H19.8644H19.7773V20.01C19.8057 20.0345 19.8348 20.0588 19.8644 20.0828C19.8778 20.0937 19.8913 20.1046 19.9049 20.1153C19.9183 20.126 19.9318 20.1366 19.9455 20.1471C19.9589 20.1575 19.9723 20.1679 19.986 20.1782C19.9994 20.1882 20.013 20.1982 20.0265 20.2081C20.0399 20.218 20.0535 20.2277 20.0671 20.2375C20.0805 20.2471 20.094 20.2566 20.1076 20.2662L20.1481 20.2941C20.1615 20.3032 20.1751 20.3123 20.1887 20.3213L20.2292 20.3479C20.2426 20.3567 20.2561 20.3654 20.2698 20.374C20.2831 20.3825 20.2967 20.3909 20.3103 20.3993L20.3508 20.4241C20.3643 20.4323 20.3778 20.4404 20.3914 20.4484C20.4048 20.4564 20.4183 20.4642 20.4319 20.472L20.4725 20.4952L20.513 20.5178L20.5535 20.5399C20.567 20.5471 20.5804 20.5545 20.5941 20.5617C20.6074 20.5687 20.621 20.5757 20.6346 20.5827L20.6751 20.6034L20.7157 20.6237L20.7562 20.6434C20.7697 20.6499 20.7831 20.6565 20.7968 20.6629L20.8373 20.6818L20.8778 20.7004L20.9183 20.7185L20.9589 20.7363L20.9994 20.7538L21.0399 20.7708L21.0805 20.7875L21.121 20.8038L21.1616 20.8199L21.2021 20.8354C21.2156 20.8406 21.229 20.8458 21.2426 20.8509L21.2832 20.8657C21.2967 20.8707 21.3101 20.8757 21.3237 20.8806C21.3371 20.8854 21.3507 20.8901 21.3642 20.8948L21.4048 20.909L21.4453 20.9227C21.4588 20.9272 21.4722 20.9319 21.4858 20.9364C21.4992 20.9408 21.5129 20.9451 21.5264 20.9494L21.5669 20.9625L21.6075 20.9751L21.648 20.9876L21.6886 20.9996L21.7291 21.0115L21.7696 21.0231L21.8102 21.0345L21.8507 21.0456L21.8912 21.0565L21.9318 21.0672L21.9723 21.0776L22.0128 21.0879L22.0534 21.0978L22.0939 21.1077L22.1345 21.1171L22.175 21.1264L22.2156 21.1355L22.2561 21.1444L22.2966 21.1532L22.3372 21.1616L22.3777 21.17L22.4182 21.178L22.4588 21.186L22.4993 21.1937L22.5398 21.2012L22.5804 21.2087L22.6209 21.2158L22.6615 21.2228L22.702 21.2296L22.7425 21.2363L22.7831 21.2429L22.8236 21.2491L22.8641 21.2553L22.9047 21.2613L22.9452 21.2671L22.9857 21.2728L23.0263 21.2782L23.0668 21.2836L23.1074 21.2888L23.1479 21.2938L23.1885 21.2988L23.229 21.3035L23.2695 21.3081L23.3101 21.3126L23.3506 21.3168L23.3911 21.321L23.4317 21.3251L23.4722 21.3289L23.5127 21.3328L23.5533 21.3363L23.5938 21.3398L23.6344 21.3433L23.6749 21.3464L23.7154 21.3495L23.756 21.3526L23.7965 21.3554L23.837 21.3581L23.8776 21.3608L23.9181 21.3632L23.9587 21.3656L23.9992 21.3679L24.0398 21.3699L24.0803 21.3719L24.1208 21.3739L24.1614 21.3756L24.2019 21.3773L24.2424 21.3789L24.283 21.3803L24.3235 21.3816L24.364 21.3829L24.4046 21.384L24.4451 21.385L24.4856 21.386L24.5262 21.3867L24.5667 21.3874L24.6073 21.3881L24.6478 21.3885L24.6884 21.3889L24.7289 21.3892L24.7694 21.3894L24.81 21.3895L24.8505 21.3895L24.891 21.3894L24.9316 21.3892L24.9721 21.389L25.0127 21.3886L25.0532 21.3881L25.0937 21.3876L25.1343 21.387L25.1748 21.3862L25.2153 21.3853L25.2559 21.3845L25.2964 21.3834L25.3369 21.3823L25.3775 21.3812L25.418 21.38L25.4585 21.3785L25.4991 21.3771L25.5396 21.3757L25.5802 21.374L25.6207 21.3723L25.6613 21.3706L25.6811 21.3698L25.7018 21.3688L25.7423 21.3668L25.7829 21.3646L25.8234 21.3624L25.8639 21.3599L25.9045 21.3574L25.945 21.3547L25.9855 21.3519L26.0261 21.3489L26.0666 21.3458L26.1072 21.3426L26.1477 21.3393L26.1882 21.3358L26.2288 21.3322L26.2693 21.3285L26.3099 21.3246L26.3504 21.3207L26.3909 21.3166L26.4315 21.3125L26.472 21.3082L26.5125 21.3038L26.5531 21.2993L26.5936 21.2947L26.6342 21.29L26.6747 21.2852L26.7152 21.2803L26.7558 21.2753L26.7963 21.2701L26.8368 21.2649L26.8774 21.2597L26.9179 21.2542L26.9584 21.2487L26.999 21.2431L27.0395 21.2374L27.0801 21.2317L27.1206 21.2258L27.1612 21.2198L27.2017 21.2137L27.2422 21.2076L27.2828 21.2014L27.3233 21.1951L27.3638 21.1887L27.4044 21.1822L27.4449 21.1756L27.4854 21.169L27.526 21.1622L27.5665 21.1554L27.6071 21.1485L27.6476 21.1415L27.6882 21.1344L27.7287 21.1273L27.7692 21.12L27.8098 21.1127L27.8503 21.1053L27.8908 21.0979L27.9314 21.0903L27.9719 21.0826L28.0124 21.0749L28.053 21.0671L28.0935 21.0593L28.1341 21.0513L28.1746 21.0433L28.2151 21.0352L28.2557 21.027L28.2962 21.0187L28.3367 21.0103L28.3773 21.0019L28.4178 20.9934L28.4583 20.9848L28.4989 20.976L28.5394 20.9673L28.58 20.9584L28.6205 20.9495L28.661 20.9404L28.7016 20.9313L28.7421 20.9221L28.7827 20.9127L28.8232 20.9033L28.8637 20.8937L28.9043 20.884L28.9448 20.8741L28.9851 20.8641V19.0723L28.9448 19.0925L28.9043 19.1127L28.8637 19.1326L28.8232 19.1524L28.7827 19.1721L28.7421 19.1915L28.7016 19.2107L28.661 19.2297L28.6205 19.2485L28.58 19.2672L28.5394 19.2856L28.4989 19.3038L28.4583 19.3217L28.4178 19.3395L28.3773 19.3571L28.3367 19.3744L28.2962 19.3916L28.2557 19.4085L28.2151 19.4252L28.1746 19.4417L28.1341 19.4579L28.0935 19.474L28.053 19.4897L28.0124 19.5053L27.9719 19.5207L27.9314 19.5358L27.8908 19.5506L27.8503 19.5653L27.8098 19.5797L27.7692 19.5939L27.7287 19.6079L27.6882 19.6216L27.6476 19.6351L27.6071 19.6484L27.5665 19.6614L27.526 19.6742L27.4854 19.6868L27.4449 19.6991L27.4044 19.7112L27.3638 19.7231L27.3233 19.7347L27.2828 19.7461L27.2422 19.7573L27.2017 19.7682L27.1612 19.7789L27.1206 19.7894L27.0801 19.7996L27.0395 19.8096L26.999 19.8195L26.9584 19.829L26.9179 19.8383L26.8774 19.8474L26.8368 19.8563L26.7963 19.8649L26.7558 19.8733L26.7152 19.8815L26.6747 19.8895L26.6342 19.8972L26.5936 19.9047L26.5531 19.912L26.5125 19.919L26.472 19.9258L26.4315 19.9324L26.3909 19.9389L26.3504 19.945L26.3099 19.9509L26.2693 19.9567L26.2288 19.9622L26.1882 19.9674L26.1477 19.9725L26.1072 19.9774L26.0666 19.982L26.0261 19.9864L25.9855 19.9906L25.945 19.9946L25.9045 19.9984L25.8639 20.002L25.8234 20.0053L25.7988 20.0072L25.7829 20.0083L25.7423 20.0111L25.7018 20.0138L25.6613 20.016L25.6207 20.0181L25.5802 20.02L25.5396 20.0213L25.4991 20.0226L25.4585 20.0235L25.418 20.0241L25.3775 20.0246C25.3639 20.0247 25.3505 20.0245 25.3369 20.0245L25.2964 20.0243L25.2559 20.0237L25.2153 20.0228L25.1748 20.0218C25.1612 20.0213 25.1478 20.0207 25.1343 20.0201C25.1208 20.0196 25.1072 20.0191 25.0937 20.0185L25.0532 20.0162L25.0127 20.0138L24.9721 20.0109L24.9316 20.0077C24.9181 20.0066 24.9045 20.0056 24.891 20.0044C24.8774 20.0031 24.864 20.0016 24.8505 20.0003L24.81 19.9962L24.7694 19.9914L24.7289 19.9865L24.6884 19.9811L24.6478 19.9753C24.6343 19.9733 24.6207 19.9714 24.6073 19.9692C24.5937 19.9671 24.5802 19.9648 24.5667 19.9625C24.5532 19.9602 24.5396 19.9581 24.5262 19.9557C24.5126 19.9533 24.4992 19.9506 24.4856 19.9481C24.4721 19.9455 24.4585 19.9431 24.4451 19.9404C24.4315 19.9377 24.4181 19.9347 24.4046 19.9319C24.3911 19.929 24.3775 19.9263 24.364 19.9233C24.3504 19.9203 24.337 19.9171 24.3235 19.9139L24.283 19.9043C24.2694 19.901 24.2559 19.8975 24.2424 19.894C24.2289 19.8905 24.2153 19.8871 24.2019 19.8835C24.1883 19.8798 24.1748 19.876 24.1614 19.8722C24.1478 19.8684 24.1342 19.8645 24.1208 19.8605C24.1072 19.8565 24.0937 19.8523 24.0803 19.8482C24.0667 19.844 24.0532 19.8398 24.0398 19.8354C24.0262 19.831 24.0127 19.8265 23.9992 19.8219C23.9857 19.8174 23.9721 19.8128 23.9587 19.8081C23.9451 19.8033 23.9316 19.7983 23.9181 19.7934C23.9046 19.7884 23.891 19.7835 23.8776 19.7784C23.864 19.7731 23.8505 19.7677 23.837 19.7623C23.8235 19.7569 23.8099 19.7516 23.7965 19.7461C23.7829 19.7404 23.7695 19.7345 23.756 19.7287C23.7424 19.7228 23.7288 19.717 23.7154 19.711C23.7018 19.7049 23.6884 19.6985 23.6749 19.6922C23.6613 19.6858 23.6478 19.6794 23.6344 19.6729C23.6208 19.6663 23.6072 19.6595 23.5938 19.6527C23.5802 19.6458 23.5667 19.6388 23.5533 19.6317C23.5397 19.6246 23.5261 19.6175 23.5127 19.6101C23.4991 19.6027 23.4857 19.5949 23.4722 19.5872C23.4587 19.5795 23.4451 19.5718 23.4317 19.5638C23.418 19.5557 23.4046 19.5474 23.3911 19.5392C23.3775 19.5307 23.364 19.5221 23.3506 19.5135C23.337 19.5048 23.3234 19.4962 23.3101 19.4872C23.2964 19.4781 23.283 19.4686 23.2695 19.4592C23.2559 19.4498 23.2424 19.4401 23.229 19.4304C23.2154 19.4206 23.2018 19.4107 23.1885 19.4006C23.1748 19.3902 23.1613 19.3796 23.1479 19.369C23.1343 19.3582 23.1208 19.3474 23.1074 19.3364C23.0938 19.3252 23.0802 19.314 23.0668 19.3025C23.0531 19.2907 23.0397 19.2787 23.0263 19.2666C23.0126 19.2543 22.9991 19.2419 22.9857 19.2293C22.9721 19.2164 22.9585 19.2035 22.9452 19.1904C22.9316 19.1769 22.918 19.1635 22.9047 19.1498C22.8909 19.1356 22.8775 19.1212 22.8641 19.1067C22.8504 19.0918 22.8369 19.0767 22.8236 19.0615C22.8099 19.0458 22.7964 19.03 22.7831 19.014C22.7694 18.9976 22.7558 18.9809 22.7425 18.9641C22.7288 18.9467 22.7152 18.929 22.702 18.9112C22.6883 18.8928 22.6747 18.8742 22.6615 18.8553C22.6477 18.8357 22.6341 18.8159 22.6209 18.7958C22.6071 18.7748 22.5936 18.7536 22.5804 18.7321C22.5665 18.7096 22.553 18.6868 22.5398 18.6638C22.5259 18.6396 22.5125 18.615 22.4993 18.5902C22.4853 18.5638 22.4719 18.5371 22.4588 18.5101C22.4448 18.4814 22.4313 18.4523 22.4182 18.4228C22.4042 18.3911 22.3906 18.3592 22.3777 18.3266C22.3634 18.2907 22.3501 18.254 22.3372 18.217C22.3228 18.176 22.3093 18.1344 22.2966 18.0921C22.282 18.0431 22.2684 17.9933 22.2561 17.9426C22.2407 17.8795 22.2273 17.8151 22.2156 17.7495C22.1981 17.6522 22.1845 17.5523 22.175 17.4496C22.1641 17.331 22.1585 17.2089 22.1585 17.0832C22.1585 16.9574 22.1641 16.8352 22.175 16.7165C22.1845 16.6138 22.1981 16.5138 22.2156 16.4165C22.2273 16.3509 22.2407 16.2864 22.2561 16.2233C22.2684 16.1726 22.282 16.1228 22.2966 16.0737C22.3093 16.0314 22.3228 15.9898 22.3372 15.9487C22.3501 15.9117 22.3634 15.8751 22.3777 15.8391C22.3906 15.8065 22.4042 15.7745 22.4182 15.7428C22.4313 15.7133 22.4448 15.6842 22.4588 15.6555C22.4719 15.6285 22.4853 15.6017 22.4993 15.5754C22.5125 15.5506 22.5259 15.526 22.5398 15.5017C22.553 15.4787 22.5665 15.4559 22.5804 15.4334C22.5936 15.4119 22.6071 15.3907 22.6209 15.3697C22.6341 15.3496 22.6477 15.3298 22.6615 15.3101C22.6747 15.2912 22.6883 15.2726 22.702 15.2542C22.7152 15.2363 22.7288 15.2188 22.7425 15.2013C22.7558 15.1845 22.7694 15.1678 22.7831 15.1514C22.7964 15.1353 22.8099 15.1195 22.8236 15.1039C22.8369 15.0886 22.8504 15.0735 22.8641 15.0586C22.8775 15.0441 22.8909 15.0296 22.9047 15.0155C22.918 15.0018 22.9316 14.9883 22.9452 14.9749C22.9585 14.9618 22.9721 14.9488 22.9857 14.936C22.9991 14.9234 23.0126 14.9109 23.0263 14.8986C23.0397 14.8865 23.0531 14.8745 23.0668 14.8627C23.0802 14.8512 23.0938 14.8401 23.1074 14.8288C23.1208 14.8178 23.1343 14.8069 23.1479 14.7962C23.1613 14.7855 23.1748 14.7749 23.1885 14.7646C23.2018 14.7545 23.2154 14.7446 23.229 14.7347C23.2424 14.725 23.2559 14.7154 23.2695 14.7059C23.283 14.6965 23.2964 14.6871 23.3101 14.6779C23.3234 14.669 23.337 14.6603 23.3506 14.6516C23.364 14.6429 23.3775 14.6344 23.3911 14.626C23.4046 14.6177 23.418 14.6094 23.4317 14.6013C23.4451 14.5934 23.4587 14.5856 23.4722 14.5779C23.4857 14.5702 23.4991 14.5625 23.5127 14.555C23.5261 14.5476 23.5397 14.5405 23.5533 14.5334C23.5667 14.5263 23.5802 14.5193 23.5938 14.5123C23.6072 14.5055 23.6208 14.4988 23.6344 14.4921C23.6478 14.4856 23.6613 14.4792 23.6749 14.4729C23.6884 14.4666 23.7018 14.4602 23.7154 14.4541C23.7288 14.448 23.7424 14.4422 23.756 14.4364C23.7695 14.4305 23.7829 14.4246 23.7965 14.419C23.8099 14.4134 23.8235 14.4081 23.837 14.4027C23.8505 14.3973 23.864 14.3919 23.8776 14.3867C23.891 14.3815 23.9046 14.3766 23.9181 14.3717C23.9316 14.3667 23.9451 14.3617 23.9587 14.3569C23.9721 14.3522 23.9857 14.3476 23.9992 14.3431C24.0127 14.3385 24.0262 14.334 24.0398 14.3296C24.0532 14.3252 24.0667 14.321 24.0803 14.3168C24.0937 14.3127 24.1072 14.3085 24.1208 14.3045L24.1614 14.2928C24.1748 14.289 24.1883 14.2852 24.2019 14.2815C24.2153 14.2779 24.2289 14.2744 24.2424 14.2709C24.2559 14.2675 24.2694 14.264 24.283 14.2606L24.3235 14.2511C24.337 14.2479 24.3504 14.2447 24.364 14.2417C24.3775 14.2387 24.3911 14.2359 24.4046 14.2331C24.4181 14.2302 24.4315 14.2272 24.4451 14.2245C24.4585 14.2218 24.4721 14.2194 24.4856 14.2169C24.4992 14.2144 24.5126 14.2117 24.5262 14.2092C24.5396 14.2068 24.5532 14.2047 24.5667 14.2025C24.5802 14.2002 24.5937 14.1979 24.6073 14.1957L24.6478 14.1897L24.6884 14.1838L24.7289 14.1784L24.7694 14.1735L24.81 14.1687L24.8505 14.1646C24.864 14.1633 24.8774 14.1618 24.891 14.1605C24.9045 14.1593 24.9181 14.1583 24.9316 14.1572L24.9721 14.154L25.0127 14.1512L25.0532 14.1487L25.0937 14.1464C25.1072 14.1458 25.1208 14.1453 25.1343 14.1448C25.1478 14.1442 25.1612 14.1436 25.1748 14.1431L25.2153 14.1421L25.2559 14.1412L25.2964 14.1406L25.3369 14.1405C25.3505 14.1404 25.3639 14.1402 25.3775 14.1403L25.418 14.1408L25.4585 14.1414L25.4991 14.1423L25.5396 14.1436L25.5802 14.145L25.6207 14.1469L25.6613 14.1489L25.7018 14.1511L25.7423 14.1538L25.7829 14.1566L25.7988 14.1577L25.8234 14.1596L25.8639 14.1629L25.9045 14.1664L25.945 14.1701L25.9855 14.174L26.0261 14.1782L26.0666 14.1826L26.1072 14.1871L26.1477 14.1919L26.1882 14.1969L26.2288 14.2021L26.2693 14.2075L26.3099 14.2132L26.3504 14.219L26.3909 14.2251L26.4315 14.2314L26.472 14.238L26.5125 14.2447L26.5531 14.2517L26.5936 14.2589L26.6342 14.2663L26.6747 14.274L26.7152 14.2819L26.7558 14.29L26.7963 14.2983L26.8368 14.3069L26.8774 14.3157L26.9179 14.3247L26.9584 14.3339L26.999 14.3434L27.0395 14.3532L27.0801 14.3631L27.1206 14.3733L27.1612 14.3837L27.2017 14.3944L27.2422 14.4053L27.2828 14.4164L27.3233 14.4278L27.3638 14.4394L27.4044 14.4513L27.4449 14.4634L27.4854 14.4757L27.526 14.4883L27.5665 14.501L27.6071 14.5141L27.6476 14.5274L27.6882 14.5409L27.7287 14.5546L27.7692 14.5686L27.8098 14.5828L27.8503 14.5973L27.8908 14.612L27.9314 14.6269L27.9719 14.6421L28.0124 14.6575L28.053 14.6732L28.0935 14.689L28.1341 14.7051L28.1746 14.7215L28.2151 14.738L28.2557 14.7548L28.2962 14.7719L28.3367 14.7891L28.3773 14.8066L28.4178 14.8243L28.4583 14.8422L28.4989 14.8603L28.5394 14.8787L28.58 14.8973L28.6205 14.916L28.661 14.935L28.7016 14.9542L28.7421 14.9736L28.7827 14.9932L28.8232 15.013L28.8637 15.033L28.9043 15.0531L28.9448 15.0735L28.9851 15.0939V13.3008L28.9448 13.2908L28.9043 13.2809L28.8637 13.2712L28.8232 13.2617L28.7827 13.2522L28.7421 13.2429L28.7016 13.2336L28.661 13.2245L28.6205 13.2155L28.58 13.2065L28.5394 13.1976L28.4989 13.1889L28.4583 13.1802L28.4178 13.1716L28.3773 13.1631L28.3367 13.1546L28.2962 13.1463L28.2557 13.138L28.2151 13.1298L28.1746 13.1217L28.1341 13.1137L28.0935 13.1057L28.053 13.0979L28.0124 13.0901L27.9719 13.0824L27.9314 13.0747L27.8908 13.0672L27.8503 13.0597L27.8098 13.0523L27.7692 13.045L27.7287 13.0378L27.6882 13.0307L27.6476 13.0236L27.6071 13.0166L27.5665 13.0097L27.526 13.0029L27.4854 12.9962L27.4449 12.9895L27.4044 12.983L27.3638 12.9765L27.3233 12.9701L27.2828 12.9638L27.2422 12.9576L27.2017 12.9514L27.1612 12.9454L27.1206 12.9394L27.0801 12.9336L27.0395 12.9278L26.999 12.9222L26.9584 12.9166L26.9179 12.9111L26.8774 12.9057L26.8368 12.9004L26.7963 12.8952L26.7558 12.8901L26.7152 12.8851L26.6747 12.8802L26.6342 12.8754L26.5936 12.8707L26.5531 12.8661L26.5125 12.8616L26.472 12.8573L26.4315 12.853L26.3909 12.8489L26.3504 12.8448L26.3099 12.8409L26.2693 12.837L26.2288 12.8334L26.1882 12.8298L26.1477 12.8263L26.1072 12.823L26.0666 12.8198L26.0261 12.8168L25.9855 12.8138L25.945 12.811L25.9045 12.8083L25.8639 12.8058L25.8234 12.8034L25.7829 12.8011L25.7423 12.799L25.7018 12.797L25.6811 12.796L25.6613 12.7952L25.6207 12.7935L25.5802 12.7918L25.5396 12.7901L25.4991 12.7887L25.4585 12.7873L25.418 12.7859L25.3775 12.7846L25.3369 12.7835L25.2964 12.7824L25.2559 12.7813L25.2153 12.7805L25.1748 12.7797L25.1343 12.7788L25.0937 12.7783L25.0532 12.7777L25.0127 12.7772L24.9721 12.7769L24.9316 12.7767L24.891 12.7764L24.8505 12.7763L24.81 12.7764L24.7694 12.7764L24.7289 12.7766L24.6884 12.777L24.6478 12.7774L24.6073 12.7778L24.5667 12.7785L24.5262 12.7792L24.4856 12.7799L24.4451 12.7809L24.4046 12.7819L24.364 12.7829L24.3235 12.7842L24.283 12.7856L24.2424 12.787L24.2019 12.7886L24.1614 12.7903L24.1208 12.792L24.0803 12.794L24.0398 12.796L23.9992 12.798L23.9587 12.8003L23.9181 12.8027L23.8776 12.8051L23.837 12.8078L23.7965 12.8105L23.756 12.8133L23.7154 12.8164L23.6749 12.8195L23.6344 12.8227L23.5938 12.8261L23.5533 12.8295L23.5127 12.8332L23.4722 12.837L23.4317 12.8408L23.3911 12.8449L23.3506 12.8491L23.3101 12.8533L23.2695 12.8579L23.229 12.8625L23.1885 12.8672L23.1479 12.8722L23.1074 12.8772L23.0668 12.8824L23.0263 12.8878L22.9857 12.8932L22.9452 12.8989L22.9047 12.9047L22.8641 12.9107L22.8236 12.9169L22.7831 12.9231L22.7425 12.9297L22.702 12.9364L22.6615 12.9432L22.6209 12.9502L22.5804 12.9573L22.5398 12.9648L22.4993 12.9723L22.4588 12.9801L22.4182 12.988L22.3777 12.996L22.3372 13.0045L22.2966 13.0129L22.2561 13.0216L22.2156 13.0306L22.175 13.0396L22.1345 13.049L22.0939 13.0584L22.0534 13.0683L22.0128 13.0782L21.9723 13.0885L21.9318 13.0989L21.8912 13.1096L21.8507 13.1205L21.8102 13.1316L21.7696 13.1431L21.7291 13.1546L21.6886 13.1666L21.648 13.1786L21.6075 13.1911L21.5669 13.2037L21.5264 13.2168C21.5129 13.2212 21.4992 13.2254 21.4858 13.2299L21.4453 13.2435C21.4318 13.2481 21.4182 13.2525 21.4048 13.2572L21.3642 13.2714L21.3237 13.2857C21.3101 13.2905 21.2967 13.2956 21.2832 13.3005C21.2696 13.3055 21.256 13.3104 21.2426 13.3154L21.2021 13.3309C21.1886 13.3361 21.175 13.3412 21.1616 13.3464L21.121 13.3625L21.0805 13.3788L21.0399 13.3956L20.9994 13.4126L20.9589 13.43L20.9183 13.4478L20.8778 13.4659L20.8373 13.4846L20.7968 13.5034C20.7831 13.5099 20.7697 13.5164 20.7562 13.523L20.7157 13.5427L20.6751 13.563L20.6346 13.5837C20.621 13.5908 20.6074 13.5977 20.5941 13.6048C20.5804 13.612 20.567 13.6193 20.5535 13.6266L20.513 13.6487L20.4725 13.6713C20.4588 13.679 20.4454 13.6867 20.4319 13.6945C20.4183 13.7023 20.4048 13.7101 20.3914 13.7181C20.3778 13.7261 20.3643 13.7342 20.3508 13.7424C20.3372 13.7506 20.3237 13.7589 20.3103 13.7672C20.2967 13.7756 20.2831 13.784 20.2698 13.7925C20.2561 13.8012 20.2426 13.8099 20.2292 13.8186L20.1887 13.8453C20.1751 13.8543 20.1615 13.8633 20.1481 13.8724L20.1076 13.9004C20.094 13.91 20.0805 13.9195 20.0671 13.9291C20.0535 13.9389 20.0399 13.9487 20.0265 13.9585C20.013 13.9685 19.9994 13.9784 19.986 13.9885C19.9723 13.9988 19.9589 14.0091 19.9455 14.0195C19.9318 14.0301 19.9183 14.0407 19.9049 14.0513C19.8913 14.0621 19.8778 14.0729 19.8644 14.0839V14.0838Z",fill:"#E10238"})),w=()=>(0,a.createElement)("svg",{width:"51",height:"35",viewBox:"0 0 51 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.5",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M18.6846 27.0292V28.3215V29.6137H18.1154V29.2999C17.9349 29.5327 17.661 29.6787 17.2886 29.6787C16.5546 29.6787 15.9791 29.1112 15.9791 28.3215C15.9791 27.5324 16.5546 26.9642 17.2886 26.9642C17.661 26.9642 17.9349 27.1103 18.1154 27.343V27.0292H18.6846ZM17.3594 27.494C16.8667 27.494 16.5652 27.8672 16.5652 28.3215C16.5652 28.7757 16.8667 29.1489 17.3594 29.1489C17.8302 29.1489 18.148 28.7918 18.148 28.3215C18.148 27.8511 17.8302 27.494 17.3594 27.494ZM37.9186 28.3215C37.9186 27.8672 38.2201 27.494 38.7128 27.494C39.1842 27.494 39.5014 27.8511 39.5014 28.3215C39.5014 28.7918 39.1842 29.1489 38.7128 29.1489C38.2201 29.1489 37.9186 28.7757 37.9186 28.3215ZM40.0386 25.9913V28.3215V29.6137H39.4688V29.2999C39.2882 29.5327 39.0143 29.6787 38.642 29.6787C37.9079 29.6787 37.3325 29.1112 37.3325 28.3215C37.3325 27.5324 37.9079 26.9642 38.642 26.9642C39.0143 26.9642 39.2882 27.1103 39.4688 27.343V25.9913H40.0386ZM25.7496 27.4674C26.1163 27.4674 26.352 27.6945 26.4122 28.0943H25.0538C25.1146 27.7211 25.3441 27.4674 25.7496 27.4674ZM24.4571 28.3215C24.4571 27.5157 24.9937 26.9642 25.7609 26.9642C26.4943 26.9642 26.9983 27.5157 27.0039 28.3215C27.0039 28.397 26.9983 28.4675 26.9926 28.5375L25.0488 28.5375C25.1309 29.0029 25.465 29.1706 25.8317 29.1706C26.0944 29.1706 26.374 29.0728 26.5933 28.9001L26.8723 29.3167C26.5545 29.5815 26.1934 29.6787 25.7991 29.6787C25.0156 29.6787 24.4571 29.1434 24.4571 28.3215ZM32.6337 28.3215C32.6337 27.8672 32.9353 27.494 33.4279 27.494C33.8987 27.494 34.2165 27.8511 34.2165 28.3215C34.2165 28.7918 33.8987 29.1489 33.4279 29.1489C32.9353 29.1489 32.6337 28.7757 32.6337 28.3215ZM34.7529 27.0292V28.3215V29.6137H34.1837V29.2999C34.0026 29.5327 33.7293 29.6787 33.3569 29.6787C32.6229 29.6787 32.0475 29.1112 32.0475 28.3215C32.0475 27.5324 32.6229 26.9642 33.3569 26.9642C33.7293 26.9642 34.0026 27.1103 34.1837 27.343V27.0292H34.7529ZM29.4191 28.3215C29.4191 29.1056 29.972 29.6787 30.8157 29.6787C31.21 29.6787 31.4726 29.5921 31.7572 29.3705L31.4839 28.9162C31.2701 29.0679 31.0457 29.1489 30.7988 29.1489C30.3443 29.1434 30.0102 28.8191 30.0102 28.3215C30.0102 27.8239 30.3443 27.4996 30.7988 27.494C31.0457 27.494 31.2701 27.5751 31.4839 27.7267L31.7572 27.2724C31.4726 27.0509 31.21 26.9642 30.8157 26.9642C29.972 26.9642 29.4191 27.5373 29.4191 28.3215ZM36.0674 27.3431C36.2153 27.1159 36.4291 26.9643 36.7575 26.9643C36.8729 26.9643 37.0371 26.986 37.1631 27.0349L36.9876 27.5646C36.8672 27.5157 36.7469 27.4997 36.6315 27.4997C36.2592 27.4997 36.073 27.7373 36.073 28.165V29.6138H35.5032V27.0293H36.0674V27.3431ZM21.4996 27.2347C21.2257 27.0564 20.8483 26.9642 20.4321 26.9642C19.7689 26.9642 19.342 27.278 19.342 27.7917C19.342 28.2132 19.6599 28.4731 20.2453 28.5542L20.5142 28.5919C20.8264 28.6352 20.9737 28.7163 20.9737 28.8624C20.9737 29.0623 20.7656 29.1762 20.377 29.1762C19.9827 29.1762 19.6981 29.0518 19.5063 28.9057L19.238 29.3433C19.5502 29.5704 19.9444 29.6787 20.3713 29.6787C21.1273 29.6787 21.5654 29.3272 21.5654 28.8352C21.5654 28.3809 21.2207 28.1432 20.6509 28.0621L20.3826 28.0238C20.1363 27.9916 19.9388 27.9433 19.9388 27.77C19.9388 27.5806 20.125 27.4674 20.4371 27.4674C20.7712 27.4674 21.0947 27.5918 21.2533 27.689L21.4996 27.2347ZM28.1542 27.3431C28.3015 27.1159 28.5152 26.9643 28.8437 26.9643C28.959 26.9643 29.1233 26.986 29.2493 27.0349L29.0738 27.5646C28.9534 27.5157 28.833 27.4997 28.7177 27.4997C28.3454 27.4997 28.1592 27.7373 28.1592 28.165V29.6138H27.59V27.0293L28.1542 27.0293V27.3431ZM23.9862 27.0292H23.0553V26.2451H22.4799V27.0292H21.949V27.5429H22.4799V28.7219C22.4799 29.3216 22.7156 29.6787 23.3888 29.6787C23.6358 29.6787 23.9204 29.6032 24.1009 29.4788L23.9367 28.9973C23.7668 29.0945 23.5806 29.1434 23.4327 29.1434C23.1481 29.1434 23.0553 28.9701 23.0553 28.7108V27.5429H23.9862V27.0292ZM15.4758 27.9917V29.6138H14.9003V28.1755C14.9003 27.7373 14.7142 27.4941 14.3255 27.4941C13.9475 27.4941 13.6849 27.7324 13.6849 28.1811V29.6138H13.1095V28.1755C13.1095 27.7373 12.9183 27.4941 12.5403 27.4941C12.151 27.4941 11.899 27.7324 11.899 28.1811V29.6138H11.3242V27.0293H11.894V27.348C12.1078 27.0454 12.3811 26.9643 12.6606 26.9643C13.0606 26.9643 13.3451 27.1376 13.5257 27.4242C13.767 27.0615 14.1118 26.9587 14.4459 26.9643C15.0815 26.9699 15.4758 27.3808 15.4758 27.9917Z",fill:"#231F20"}),(0,a.createElement)("path",{d:"M29.9381 22.6376H21.3115V7.33105H29.9381V22.6376Z",fill:"#FF5F00"}),(0,a.createElement)("path",{d:"M21.8586 14.9846C21.8586 11.8796 23.331 9.11372 25.624 7.33129C23.9472 6.02789 21.831 5.24994 19.5311 5.24994C14.0864 5.24994 9.67285 9.60822 9.67285 14.9846C9.67285 20.361 14.0864 24.7192 19.5311 24.7192C21.831 24.7192 23.9472 23.9413 25.624 22.6379C23.331 20.8555 21.8586 18.0896 21.8586 14.9846Z",fill:"#EB001B"}),(0,a.createElement)("path",{d:"M41.5758 14.9846C41.5758 20.361 37.1622 24.7192 31.7175 24.7192C29.4177 24.7192 27.3014 23.9413 25.624 22.6379C27.9176 20.8555 29.3901 18.0896 29.3901 14.9846C29.3901 11.8796 27.9176 9.11372 25.624 7.33129C27.3014 6.02789 29.4177 5.24994 31.7175 5.24994C37.1622 5.24994 41.5758 9.60822 41.5758 14.9846Z",fill:"#F79E1B"})),H=()=>(0,a.createElement)("svg",{width:"52",height:"35",viewBox:"0 0 52 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.878906",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M44.0545 5.25735L34.3353 5.25488C34.3341 5.25488 34.3328 5.25488 34.3328 5.25488C34.3253 5.25488 34.3179 5.2562 34.3106 5.2562C32.9754 5.29641 31.3124 6.34915 31.0096 7.64726L26.4132 27.6401C26.1104 28.9503 26.9343 30.0165 28.2599 30.0361H38.4703C39.7756 29.9726 41.044 28.932 41.3417 27.6486L45.9382 7.65564C46.2459 6.33208 45.402 5.25735 44.0545 5.25735Z",fill:"#01798A"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M26.4134 27.6401L31.0097 7.64729C31.3126 6.34917 32.9755 5.29643 34.3107 5.25622L30.4464 5.25376L23.484 5.25244C22.1451 5.27936 20.4605 6.33949 20.1577 7.64729L15.5601 27.6401C15.2561 28.9503 16.0813 30.0165 17.4059 30.0361H28.26C26.9345 30.0165 26.1105 28.9503 26.4134 27.6401",fill:"#024381"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M15.5602 27.64L20.1578 7.64714C20.4606 6.33934 22.1452 5.27922 23.4841 5.2523L14.5649 5.25C13.2185 5.25 11.4923 6.32227 11.1846 7.64714L6.58694 27.64C6.55896 27.762 6.54344 27.8815 6.53418 27.9986V28.3695C6.62418 29.3246 7.36619 30.0201 8.43278 30.036H17.406C16.0814 30.0163 15.2562 28.9502 15.5602 27.64Z",fill:"#DD0228"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M23.6716 19.8205H23.8404C23.9955 19.8205 24.0999 19.7693 24.1488 19.668L24.5874 19.0227H25.762L25.5171 19.4472H26.9254L26.7467 20.0975H25.0709C24.8779 20.3829 24.6403 20.5171 24.3547 20.5012H23.4818L23.6716 19.8205H23.6716ZM23.4788 20.7527H26.5643L26.3676 21.4591H25.1268L24.9374 22.1409H26.1449L25.9482 22.8473H24.7407L24.4602 23.8548C24.3908 24.0232 24.4821 24.099 24.7327 24.0818H25.7168L25.5345 24.7382H23.6451C23.287 24.7382 23.1641 24.5368 23.2765 24.1331L23.6351 22.8473H22.8633L23.0593 22.1409H23.8313L24.0205 21.4591H23.2827L23.4788 20.7527H23.4788ZM28.4035 19.018L28.355 19.4315C28.355 19.4315 28.937 19.002 29.4656 19.002H31.4189L30.6719 21.6601C30.61 21.964 30.3443 22.1151 29.8752 22.1151H27.6612L27.1426 23.9817C27.1128 24.0817 27.155 24.133 27.2667 24.133H27.7023L27.5422 24.7124H26.4347C26.0096 24.7124 25.8328 24.5867 25.903 24.3343L27.3684 19.018H28.4035H28.4035ZM30.0576 19.7693H28.3141L28.1056 20.4866C28.1056 20.4866 28.3959 20.2805 28.8811 20.2731C29.365 20.2657 29.9173 20.2731 29.9173 20.2731L30.0576 19.7693ZM29.4261 21.4333C29.555 21.4504 29.6271 21.4003 29.6358 21.282L29.7425 20.9039H27.9964L27.85 21.4333H29.4261ZM28.2483 22.2921H29.2547L29.236 22.7203H29.504C29.6394 22.7203 29.7065 22.6776 29.7065 22.5935L29.7858 22.3166H30.6223L30.5106 22.7203C30.4161 23.057 30.1656 23.2327 29.7586 23.2499H29.2225L29.22 23.9817C29.2101 24.0989 29.318 24.1587 29.54 24.1587H30.0439L29.8813 24.7381H28.6727C28.3339 24.754 28.1678 24.5953 28.1713 24.2587L28.2483 22.2921V22.2921Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M16.0529 15.4764C15.9164 16.1339 15.6 16.639 15.1091 16.9976C14.6227 17.3502 13.9954 17.527 13.2273 17.527C12.5044 17.527 11.9745 17.3465 11.6364 16.9841C11.4018 16.7267 11.2852 16.3998 11.2852 16.0045C11.2852 15.8411 11.3051 15.6654 11.3448 15.4764L12.1631 11.5972H13.3991L12.5919 15.4325C12.5671 15.5386 12.5571 15.6374 12.5584 15.7265C12.5571 15.9229 12.6068 16.0839 12.7073 16.2095C12.8537 16.3962 13.0914 16.4889 13.4221 16.4889C13.8024 16.4889 14.1158 16.3974 14.359 16.2132C14.6022 16.0302 14.761 15.7704 14.8324 15.4325L15.6422 11.5972H16.8719L16.0529 15.4764Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M21.2436 13.9502H22.2116L21.4534 17.4123H20.4873L21.2436 13.9502ZM21.5482 12.689H22.5248L22.3424 13.5293H21.3659L21.5482 12.689Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M23.0688 17.1487C22.8156 16.9109 22.6878 16.59 22.6865 16.1826C22.6865 16.113 22.6908 16.0338 22.7002 15.9471C22.7095 15.8592 22.7214 15.7739 22.738 15.6946C22.8528 15.1323 23.0973 14.6858 23.4739 14.3564C23.8499 14.0258 24.3036 13.8599 24.8347 13.8599C25.2696 13.8599 25.6145 13.9794 25.8672 14.2185C26.1196 14.4589 26.2462 14.7833 26.2462 15.1957C26.2462 15.2664 26.2407 15.3481 26.2313 15.436C26.2201 15.525 26.2066 15.6104 26.1909 15.6946C26.0787 16.2484 25.8349 16.69 25.4583 17.0134C25.0816 17.3391 24.6293 17.5012 24.1019 17.5012C23.6651 17.5012 23.3213 17.3841 23.0688 17.1487M24.9136 16.4631C25.0843 16.2814 25.2065 16.0056 25.2809 15.6385C25.2921 15.5812 25.302 15.5214 25.3082 15.4616C25.3143 15.403 25.3168 15.3482 25.3168 15.2981C25.3168 15.0846 25.2616 14.9188 25.1506 14.8016C25.0402 14.6833 24.8832 14.6248 24.6804 14.6248C24.4122 14.6248 24.1939 14.7174 24.0227 14.9029C23.8501 15.0884 23.7279 15.3689 23.6509 15.7422C23.6404 15.7995 23.6317 15.8569 23.6237 15.913C23.6175 15.9703 23.6157 16.024 23.6168 16.0728C23.6168 16.285 23.6721 16.4485 23.7831 16.5644C23.8935 16.6803 24.0498 16.7376 24.2553 16.7376C24.5246 16.7376 24.743 16.6461 24.9136 16.4631Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M32.5262 19.8496L32.7596 19.0421H33.9397L33.8888 19.3385C33.8888 19.3385 34.4918 19.0421 34.9261 19.0421C35.3606 19.0421 36.3854 19.0421 36.3854 19.0421L36.1535 19.8496H35.9239L34.8231 23.6582H35.0527L34.8343 24.4146H34.6047L34.5092 24.7427H33.3664L33.4617 24.4146H31.207L31.4268 23.6582H31.6527L32.7544 19.8496H32.5262H32.5262ZM33.7993 19.8498L33.4989 20.8805C33.4989 20.8805 34.0128 20.6866 34.4558 20.6318C34.5536 20.2718 34.6815 19.8498 34.6815 19.8498H33.7993V19.8498ZM33.3598 21.3637L33.0585 22.4433C33.0585 22.4433 33.628 22.1676 34.0188 22.1444C34.1317 21.7271 34.2447 21.3637 34.2447 21.3637H33.3598V21.3637ZM33.5808 23.6583L33.8067 22.8751H32.9258L32.6987 23.6583H33.5808ZM36.4352 18.9922H37.5447L37.5918 19.3946C37.5844 19.4971 37.6463 19.546 37.7779 19.546H37.9739L37.7756 20.2279H36.9601C36.6487 20.2437 36.4886 20.1267 36.4738 19.8741L36.4352 18.9922ZM36.1102 20.4548H39.7039L39.493 21.1868H38.3488L38.1526 21.8673H39.2957L39.0835 22.5981H37.8104L37.5224 23.0264H38.1455L38.2894 23.8839C38.3066 23.9693 38.3836 24.0108 38.5151 24.0108H38.7086L38.5053 24.717H37.8202C37.4653 24.7342 37.2818 24.6171 37.2667 24.3646L37.1016 23.5814L36.5346 24.4146C36.4005 24.65 36.1945 24.7599 35.9167 24.7427H34.8705L35.074 24.0363H35.4004C35.5345 24.0363 35.646 23.9778 35.7465 23.8595L36.634 22.5981H35.4898L35.7018 21.8673H36.9428L37.1402 21.1868H35.898L36.1102 20.4548Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M17.1915 13.9492H18.0645L17.9647 14.4493L18.0899 14.3066C18.3729 14.009 18.7166 13.8613 19.1224 13.8613C19.4898 13.8613 19.7547 13.9663 19.921 14.1773C20.0847 14.3884 20.1294 14.6799 20.0519 15.0544L19.571 17.4137H18.6738L19.1081 15.2752C19.1529 15.0544 19.1405 14.8897 19.0715 14.7836C19.0033 14.6774 18.873 14.625 18.685 14.625C18.4542 14.625 18.26 14.6957 18.1017 14.8361C17.9429 14.9776 17.8381 15.174 17.7865 15.424L17.3863 17.4137H16.4873L17.1915 13.9492Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M27.2021 13.9492H28.0758L27.9767 14.4493L28.1006 14.3066C28.3837 14.009 28.7287 13.8613 29.1332 13.8613C29.5005 13.8613 29.766 13.9663 29.931 14.1773C30.0937 14.3884 30.1408 14.6799 30.0614 15.0544L29.5823 17.4137H28.6839L29.1184 15.2752C29.1629 15.0544 29.1506 14.8897 29.0823 14.7836C29.0115 14.6774 28.8836 14.625 28.6964 14.625C28.4655 14.625 28.272 14.6957 28.1119 14.8361C27.953 14.9776 27.8476 15.174 27.798 15.424L27.396 17.4137H26.498L27.2021 13.9492",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M31.5212 11.8018H34.0577C34.5454 11.8018 34.9225 11.9104 35.1818 12.1238C35.44 12.3398 35.5692 12.6497 35.5692 13.0534V13.0656C35.5692 13.1424 35.564 13.229 35.5567 13.3229C35.5441 13.4157 35.5279 13.5095 35.5071 13.6072C35.3954 14.1415 35.1359 14.571 34.7352 14.8967C34.333 15.2211 33.8567 15.3846 33.3082 15.3846H31.9479L31.5274 17.4133H30.3496L31.5212 11.8018M32.1554 14.4087H33.2835C33.5776 14.4087 33.8108 14.3415 33.9809 14.2086C34.1497 14.0744 34.2614 13.8695 34.3234 13.5914C34.3332 13.54 34.3394 13.4937 34.3469 13.451C34.3508 13.4108 34.3556 13.3704 34.3556 13.3315C34.3556 13.1326 34.2838 12.9887 34.1397 12.8984C33.9958 12.8068 33.7701 12.763 33.4572 12.763H32.4991L32.1554 14.4087",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M40.8406 18.0833C40.4683 18.8615 40.1135 19.3152 39.9051 19.5263C39.6964 19.735 39.2833 20.2205 38.2881 20.1839L38.3737 19.5898C39.2112 19.3361 39.6642 18.1929 39.9223 17.6867L39.6146 13.9587L40.2624 13.9502H40.8059L40.8643 16.2888L41.8829 13.9502H42.9143L40.8406 18.0833Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M37.9561 14.232L37.5464 14.509C37.1183 14.1796 36.7274 13.9759 35.9731 14.3199C34.9454 14.7883 34.0868 18.381 36.9161 17.1976L37.0774 17.3855L38.1905 17.4135L38.9215 14.1491L37.9561 14.232M37.3233 16.0168C37.1445 16.5353 36.7451 16.8781 36.4324 16.7805C36.1196 16.6853 36.008 16.1851 36.1891 15.6655C36.3678 15.1458 36.7698 14.8042 37.08 14.9018C37.3927 14.997 37.5056 15.4971 37.3233 16.0168Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M34.3328 5.26107L30.4463 5.25342L34.3106 5.26981C34.318 5.26981 34.3253 5.26107 34.3328 5.26107",fill:"#E02F41"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M30.4467 5.27406L23.5378 5.25C23.5204 5.25 23.5024 5.25765 23.4844 5.26531L30.4467 5.27406",fill:"#2E4F7D"})),_=()=>(0,a.createElement)("svg",{width:"51",height:"35",viewBox:"0 0 51 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.5",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{d:"M22.6435 24.004H19.248L21.3718 11.7534H24.7671L22.6435 24.004Z",fill:"#15195A"}),(0,a.createElement)("path",{d:"M34.952 12.0528C34.2823 11.8049 33.22 11.5312 31.9066 11.5312C28.5534 11.5312 26.1922 13.1993 26.1777 15.5842C26.1499 17.3437 27.8683 18.321 29.1536 18.9077C30.4672 19.5072 30.9138 19.8985 30.9138 20.4329C30.9004 21.2536 29.8522 21.6319 28.8747 21.6319C27.5191 21.6319 26.7927 21.4369 25.6889 20.9803L25.2417 20.7845L24.7666 23.5345C25.563 23.873 27.0302 24.1733 28.5534 24.1865C32.1162 24.1865 34.4356 22.5442 34.4631 20.0028C34.4767 18.6082 33.5693 17.5396 31.613 16.6665C30.4254 16.1059 29.6981 15.728 29.6981 15.1544C29.7121 14.6331 30.3133 14.099 31.6539 14.099C32.7577 14.0729 33.5687 14.3204 34.1831 14.5681L34.4902 14.6982L34.952 12.0528Z",fill:"#15195A"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M41.0301 11.7534H43.6565L46.3957 24.0039H43.2519C43.2519 24.0039 42.9442 22.5963 42.8467 22.1662H38.4873C38.3612 22.4919 37.7747 24.0039 37.7747 24.0039H34.2119L39.2554 12.7699C39.6049 11.9748 40.2202 11.7534 41.0301 11.7534ZM40.8208 16.2365C40.8208 16.2365 39.7448 18.9603 39.4652 19.6641H42.2875C42.1478 19.0516 41.5048 16.1192 41.5048 16.1192L41.2676 15.0636C41.1676 15.3355 41.0231 15.7092 40.9256 15.9612C40.8596 16.1321 40.8151 16.2471 40.8208 16.2365Z",fill:"#15195A"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.53636 11.7534H9.99929C10.7398 11.7792 11.3406 12.0008 11.5361 12.7832L12.7233 18.4113C12.7234 18.4118 12.7236 18.4124 12.7238 18.4129L13.0871 20.1072L16.4124 11.7534H20.0028L14.6657 23.991H11.0752L8.04881 13.3464C7.00461 12.7769 5.81289 12.3188 4.48047 12.0009L4.53636 11.7534Z",fill:"#15195A"})),v=()=>(0,a.createElement)("svg",{width:"64",height:"40",viewBox:"0 0 64 40",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.5",y:"0.5",width:"63",height:"39",rx:"3.5",fill:"#7F54B3"}),(0,a.createElement)("g",{clipPath:"url(#clip0_1424_5139)"},(0,a.createElement)("path",{d:"M38.0384 16.1863H40.6738C41.604 16.1863 42.3496 16.4077 42.9106 16.8507C43.4716 17.2936 43.7521 17.8768 43.7521 18.6002C43.7521 19.3606 43.4642 19.9585 42.8958 20.3867C42.3274 20.8148 41.5375 21.0363 40.5262 21.0363H40.1571V24.0112H38.0237V16.1863H38.0384ZM40.1645 17.6848V19.5303C40.6443 19.523 40.9986 19.4491 41.2201 19.3015C41.449 19.1539 41.5597 18.925 41.5597 18.615C41.5597 18.2754 41.449 18.0392 41.2275 17.9063C41.0134 17.766 40.6591 17.6922 40.1645 17.6848Z",fill:"white"}),(0,a.createElement)("path",{d:"M50.3739 24.0039H48.1593L47.7975 22.6972H45.546L45.1769 24.0039H43.0066L45.4943 16.1789H47.8861L50.3739 24.0039ZM47.3915 21.2947C47.0741 20.1283 46.8305 19.021 46.6755 17.9727H46.6459C46.4762 19.0579 46.2399 20.1652 45.9373 21.2947H47.3915Z",fill:"white"}),(0,a.createElement)("path",{d:"M49.0967 16.1863H51.4885C52.02 17.3083 52.4038 18.1794 52.6401 18.7848H52.6696C52.9058 18.1573 53.2897 17.2936 53.8064 16.1863H56.2499L53.7326 20.4679V24.0039H51.577V20.4679L49.0967 16.1863Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M33.0704 13.071H10.3559C8.91636 13.071 7.75 14.2374 7.75 15.6695V24.336C7.75 25.7682 8.91636 26.9345 10.3485 26.9345H21.1115L26.0353 29.6733L24.9206 26.9345H33.0704C34.5025 26.9345 35.6689 25.7682 35.6689 24.336V15.6695C35.6689 14.2374 34.5025 13.071 33.0704 13.071ZM9.87596 15.0716C9.59544 15.079 9.33707 15.2118 9.1599 15.4259C8.99012 15.6474 8.92368 15.9279 8.98274 16.2084C9.6545 20.49 10.282 23.3764 10.8652 24.8675C11.0792 25.4138 11.345 25.6722 11.655 25.65C12.1275 25.6131 12.7033 24.9561 13.3751 23.6643C13.5241 23.3661 13.7058 23.0039 13.9191 22.5789L13.9199 22.5772L13.9204 22.5763L13.9207 22.5757L13.9208 22.5755C14.2247 21.9699 14.5925 21.2368 15.0212 20.3793C15.6413 22.5274 16.4829 24.1441 17.5459 25.2293C17.8486 25.5319 18.1439 25.6722 18.4465 25.65C18.7049 25.6353 18.9411 25.4729 19.0518 25.2366C19.1626 25.0078 19.2142 24.7494 19.1847 24.4911C19.1109 23.4502 19.2216 21.9959 19.5021 20.143C19.79 18.2237 20.1591 16.8506 20.6021 16.0239C20.6907 15.8615 20.7276 15.6695 20.7128 15.4776C20.698 15.2192 20.5725 14.9756 20.3658 14.8206C20.1665 14.6508 19.9082 14.5696 19.6498 14.5917C19.325 14.6065 19.0371 14.7984 18.8968 15.0937C18.1955 16.3856 17.6935 18.4821 17.3909 21.3758C16.911 20.1135 16.5493 18.8069 16.3131 17.4781C16.1876 16.799 15.8776 16.4815 15.3756 16.5185C15.0286 16.5406 14.7481 16.7694 14.5193 17.1976L12.0168 21.9516C11.6107 20.2907 11.2269 18.268 10.8725 15.891C10.784 15.3078 10.4518 15.0347 9.87596 15.0716ZM26.53 17.2197C26.1461 16.5332 25.4817 16.046 24.7066 15.8984C24.4999 15.8541 24.2932 15.8319 24.0865 15.8319C22.994 15.8319 22.1008 16.4003 21.4068 17.5372C20.8163 18.5042 20.5062 19.6189 20.521 20.7484C20.521 21.6268 20.7056 22.3798 21.0673 23.0073C21.4511 23.6938 22.1155 24.181 22.8906 24.3287C23.0973 24.3729 23.304 24.3951 23.5107 24.3951C24.6106 24.3951 25.5039 23.8267 26.1904 22.6898C26.781 21.7154 27.091 20.6007 27.0763 19.4565C27.0763 18.578 26.8917 17.8325 26.53 17.2197ZM25.0905 20.3866C24.9355 21.1322 24.6476 21.6933 24.2194 22.0771C23.8872 22.3798 23.5772 22.4979 23.2966 22.4462C23.0161 22.3946 22.7947 22.1436 22.6249 21.708C22.4994 21.3758 22.4256 21.0289 22.4256 20.6672C22.4256 20.3866 22.4551 20.1061 22.5068 19.833C22.6175 19.3458 22.8168 18.8881 23.1121 18.4747C23.4886 17.921 23.8872 17.6848 24.3006 17.7734C24.5811 17.8325 24.8026 18.0761 24.9724 18.5116C25.0979 18.8438 25.1717 19.1908 25.1717 19.5451C25.1717 19.8256 25.1495 20.1061 25.0905 20.3866ZM31.8524 15.8984C32.6275 16.046 33.2919 16.5332 33.6757 17.2197C34.0374 17.8325 34.222 18.578 34.222 19.4565C34.2367 20.6007 33.9267 21.7154 33.3361 22.6898C32.6496 23.8267 31.7564 24.3951 30.6565 24.3951C30.4498 24.3951 30.2431 24.3729 30.0364 24.3287C29.2613 24.181 28.5969 23.6938 28.213 23.0073C27.8513 22.3798 27.6667 21.6268 27.6667 20.7484C27.652 19.6189 27.962 18.5042 28.5526 17.5372C29.2465 16.4003 30.1397 15.8319 31.2323 15.8319C31.439 15.8319 31.6457 15.8541 31.8524 15.8984ZM31.3651 22.0771C31.7933 21.6933 32.0812 21.1322 32.2362 20.3866C32.2953 20.1061 32.3174 19.8256 32.3174 19.5451C32.3174 19.1908 32.2436 18.8438 32.1181 18.5116C31.9483 18.0761 31.7269 17.8325 31.4463 17.7734C31.0329 17.6848 30.6343 17.921 30.2578 18.4747C29.9626 18.8881 29.7632 19.3458 29.6525 19.833C29.6008 20.1061 29.5713 20.3866 29.5713 20.6672C29.5713 21.0289 29.6451 21.3758 29.7706 21.708C29.9404 22.1436 30.1619 22.3946 30.4424 22.4462C30.7229 22.4979 31.0329 22.3798 31.3651 22.0771Z",fill:"white"})),(0,a.createElement)("defs",null,(0,a.createElement)("clipPath",{id:"clip0_1424_5139"},(0,a.createElement)("rect",{width:"48.5",height:"30.9953",fill:"white",transform:"translate(7.75 4.50232)"})))),E=()=>(0,a.createElement)("svg",{width:"294",height:"275",viewBox:"0 0 294 275",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("g",{clipPath:"url(#clip0_255_63852)"},(0,a.createElement)("path",{d:"M0.5 10C0.5 4.47716 4.97715 0 10.5 0H725.5C731.023 0 735.5 4.47715 735.5 10V332H0.5V10Z",fill:"#F6F7F7"}),(0,a.createElement)("circle",{cx:"17.5",cy:"14",r:"5",fill:"#D94F4F"}),(0,a.createElement)("circle",{cx:"35.5",cy:"14",r:"5",fill:"#F0B849"}),(0,a.createElement)("circle",{cx:"53.5",cy:"14",r:"5",fill:"#4AB866"}),(0,a.createElement)("rect",{x:"3.5",y:"28",width:"287",height:"304",fill:"white"}),(0,a.createElement)("line",{x1:"27.5",y1:"95.5",x2:"270.5",y2:"95.5",stroke:"#DCDCDE"}),(0,a.createElement)("line",{x1:"49.5",y1:"157.5",x2:"253.5",y2:"157.5",stroke:"#DCDCDE"}),(0,a.createElement)("line",{x1:"49.5",y1:"198.5",x2:"253.5",y2:"198.5",stroke:"#DCDCDE"}),(0,a.createElement)("rect",{x:"28",y:"116.5",width:"242",height:"127",rx:"9.5",stroke:"#DCDCDE"}),(0,a.createElement)("path",{d:"M50.3984 135.954V143H52.8154C54.9102 143 56.1406 141.696 56.1406 139.475C56.1406 137.258 54.9053 135.954 52.8154 135.954H50.3984ZM51.2773 136.745H52.7568C54.3193 136.745 55.2422 137.761 55.2422 139.484C55.2422 141.203 54.3291 142.209 52.7568 142.209H51.2773V136.745ZM61.043 141.638C60.8232 142.102 60.3643 142.351 59.6855 142.351C58.792 142.351 58.2109 141.691 58.167 140.651V140.612H61.9512V140.29C61.9512 138.654 61.0869 137.644 59.666 137.644C58.2207 137.644 57.293 138.718 57.293 140.373C57.293 142.038 58.2061 143.093 59.666 143.093C60.8184 143.093 61.6387 142.536 61.8828 141.638H61.043ZM59.6562 138.386C60.4912 138.386 61.0479 139.001 61.0674 139.934H58.167C58.2305 139.001 58.8164 138.386 59.6562 138.386ZM65.833 137.644C65.1152 137.644 64.4854 138.01 64.1484 138.615H64.0703V137.736H63.2695V144.758H64.1094V142.209H64.1875C64.4756 142.766 65.0811 143.093 65.833 143.093C67.1709 143.093 68.0449 142.014 68.0449 140.368C68.0449 138.713 67.1758 137.644 65.833 137.644ZM65.6328 142.336C64.6855 142.336 64.085 141.574 64.085 140.368C64.085 139.157 64.6855 138.4 65.6377 138.4C66.5996 138.4 67.1758 139.138 67.1758 140.368C67.1758 141.599 66.5996 142.336 65.6328 142.336ZM71.5264 143.093C73.0254 143.093 73.9531 142.058 73.9531 140.368C73.9531 138.674 73.0254 137.644 71.5264 137.644C70.0273 137.644 69.0996 138.674 69.0996 140.368C69.0996 142.058 70.0273 143.093 71.5264 143.093ZM71.5264 142.336C70.5303 142.336 69.9688 141.613 69.9688 140.368C69.9688 139.118 70.5303 138.4 71.5264 138.4C72.5225 138.4 73.084 139.118 73.084 140.368C73.084 141.613 72.5225 142.336 71.5264 142.336ZM75.1494 139.177C75.1494 139.938 75.5986 140.363 76.585 140.603L77.4883 140.822C78.0498 140.959 78.3232 141.203 78.3232 141.564C78.3232 142.048 77.8154 142.385 77.1074 142.385C76.4336 142.385 76.0137 142.102 75.8721 141.657H75.0078C75.1006 142.531 75.9062 143.093 77.0781 143.093C78.2744 143.093 79.1875 142.443 79.1875 141.501C79.1875 140.744 78.709 140.314 77.7178 140.075L76.9072 139.88C76.2871 139.729 75.9941 139.504 75.9941 139.143C75.9941 138.674 76.4824 138.356 77.1074 138.356C77.7422 138.356 78.1523 138.635 78.2646 139.055H79.0947C78.9824 138.19 78.2158 137.644 77.1123 137.644C75.9941 137.644 75.1494 138.303 75.1494 139.177ZM80.9453 136.721C81.2676 136.721 81.5312 136.457 81.5312 136.135C81.5312 135.812 81.2676 135.549 80.9453 135.549C80.623 135.549 80.3594 135.812 80.3594 136.135C80.3594 136.457 80.623 136.721 80.9453 136.721ZM80.5254 143H81.3652V137.736H80.5254V143ZM83.3184 136.374V137.736H82.4688V138.439H83.3184V141.633C83.3184 142.639 83.7529 143.039 84.8369 143.039C85.0029 143.039 85.1641 143.02 85.3301 142.99V142.282C85.1738 142.297 85.0908 142.302 84.9395 142.302C84.3926 142.302 84.1582 142.038 84.1582 141.418V138.439H85.3301V137.736H84.1582V136.374H83.3184Z",fill:"#2C3338"}),(0,a.createElement)("path",{d:"M126.459 143.708H127.045V142.863C128.197 142.775 129.154 142.136 129.154 140.959C129.154 139.934 128.451 139.416 127.196 139.113L127.045 139.079V136.857C127.704 136.94 128.173 137.326 128.236 137.985H129.086C129.052 136.906 128.173 136.193 127.045 136.091V135.246H126.459V136.096C125.302 136.198 124.477 136.892 124.477 137.941C124.477 138.903 125.131 139.445 126.347 139.738L126.459 139.768V142.097C125.614 142.004 125.238 141.54 125.15 140.93H124.301C124.335 142.067 125.297 142.756 126.459 142.858V143.708ZM125.326 137.883C125.326 137.409 125.717 136.96 126.459 136.862V138.938C125.619 138.732 125.326 138.361 125.326 137.883ZM127.074 139.914C128.041 140.148 128.305 140.49 128.305 141.027C128.305 141.589 127.953 142.033 127.045 142.102V139.909L127.074 139.914ZM132.25 139.753H133.124C134.115 139.753 134.726 140.261 134.726 141.076C134.726 141.867 134.066 142.399 133.139 142.399C132.23 142.399 131.596 141.926 131.518 141.184H130.668C130.731 142.38 131.718 143.166 133.148 143.166C134.55 143.166 135.629 142.282 135.629 141.101C135.629 140.119 135.023 139.499 134.11 139.353V139.274C134.833 139.064 135.36 138.503 135.365 137.653C135.37 136.667 134.569 135.788 133.178 135.788C131.752 135.788 130.878 136.633 130.79 137.78H131.645C131.718 136.989 132.27 136.555 133.119 136.555C133.969 136.555 134.472 137.092 134.472 137.751C134.472 138.483 133.896 139.001 133.085 139.001H132.25V139.753ZM139.384 143.166C140.824 143.166 141.806 142.17 141.806 140.72C141.806 139.323 140.829 138.396 139.647 138.396C138.944 138.396 138.422 138.61 138.08 139.035H138.002L138.222 136.74H141.444V135.954H137.533L137.128 139.982H137.953C138.231 139.46 138.759 139.152 139.428 139.152C140.316 139.152 140.927 139.792 140.927 140.744C140.927 141.73 140.316 142.395 139.394 142.395C138.563 142.395 137.958 141.892 137.88 141.14H137.016C137.094 142.346 138.051 143.166 139.384 143.166ZM143.188 137.941H144.037C144.037 137.106 144.599 136.555 145.443 136.555C146.273 136.555 146.776 137.111 146.776 137.858C146.776 138.479 146.513 138.845 145.614 139.816L143.231 142.395V143H147.792V142.209H144.452V142.131L146.054 140.476C147.323 139.162 147.675 138.576 147.675 137.766C147.675 136.623 146.732 135.788 145.502 135.788C144.154 135.788 143.188 136.687 143.188 137.941ZM149.828 143.049C150.18 143.049 150.463 142.761 150.463 142.414C150.463 142.062 150.18 141.779 149.828 141.779C149.481 141.779 149.193 142.062 149.193 142.414C149.193 142.761 149.481 143.049 149.828 143.049ZM153.959 143.161C155.683 143.161 156.669 141.774 156.669 139.353C156.669 136.955 155.536 135.788 154.018 135.788C152.572 135.788 151.547 136.799 151.547 138.215C151.547 139.582 152.519 140.573 153.861 140.573C154.701 140.573 155.39 140.173 155.736 139.489H155.814C155.766 141.364 155.116 142.38 153.969 142.38C153.275 142.38 152.738 141.994 152.553 141.359H151.649C151.869 142.468 152.763 143.161 153.959 143.161ZM154.018 139.812C153.085 139.812 152.436 139.147 152.436 138.186C152.436 137.263 153.124 136.56 154.027 136.56C154.931 136.56 155.619 137.272 155.619 138.215C155.619 139.147 154.95 139.812 154.018 139.812ZM160.336 143.161C162.06 143.161 163.046 141.774 163.046 139.353C163.046 136.955 161.913 135.788 160.395 135.788C158.949 135.788 157.924 136.799 157.924 138.215C157.924 139.582 158.896 140.573 160.238 140.573C161.078 140.573 161.767 140.173 162.113 139.489H162.191C162.143 141.364 161.493 142.38 160.346 142.38C159.652 142.38 159.115 141.994 158.93 141.359H158.026C158.246 142.468 159.14 143.161 160.336 143.161ZM160.395 139.812C159.462 139.812 158.812 139.147 158.812 138.186C158.812 137.263 159.501 136.56 160.404 136.56C161.308 136.56 161.996 137.272 161.996 138.215C161.996 139.147 161.327 139.812 160.395 139.812Z",fill:"#2C3338"}),(0,a.createElement)("rect",{x:"196",y:"132",width:"43",height:"14",rx:"7",fill:"#B8E6BF"}),(0,a.createElement)("path",{d:"M209.719 136.363V142H210.422V139.988H211.84C212.898 139.988 213.652 139.242 213.652 138.188C213.652 137.113 212.914 136.363 211.848 136.363H209.719ZM210.422 136.988H211.664C212.48 136.988 212.93 137.414 212.93 138.188C212.93 138.934 212.465 139.363 211.664 139.363H210.422V136.988ZM215.734 142.074C216.297 142.074 216.758 141.828 217.031 141.379H217.094V142H217.734V139.117C217.734 138.242 217.16 137.715 216.133 137.715C215.234 137.715 214.57 138.16 214.48 138.836H215.16C215.254 138.504 215.605 138.312 216.109 138.312C216.738 138.312 217.062 138.598 217.062 139.117V139.5L215.848 139.574C214.867 139.633 214.312 140.066 214.312 140.82C214.312 141.59 214.918 142.074 215.734 142.074ZM215.859 141.484C215.371 141.484 215.008 141.234 215.008 140.805C215.008 140.383 215.289 140.16 215.93 140.117L217.062 140.043V140.43C217.062 141.031 216.551 141.484 215.859 141.484ZM219.328 136.977C219.586 136.977 219.797 136.766 219.797 136.508C219.797 136.25 219.586 136.039 219.328 136.039C219.07 136.039 218.859 136.25 218.859 136.508C218.859 136.766 219.07 136.977 219.328 136.977ZM218.992 142H219.664V137.789H218.992V142ZM222.504 142.074C223.086 142.074 223.586 141.797 223.852 141.328H223.914V142H224.555V136.117H223.883V138.453H223.824C223.586 137.992 223.09 137.715 222.504 137.715C221.434 137.715 220.734 138.574 220.734 139.895C220.734 141.219 221.426 142.074 222.504 142.074ZM222.66 138.32C223.422 138.32 223.898 138.93 223.898 139.895C223.898 140.867 223.426 141.469 222.66 141.469C221.891 141.469 221.43 140.879 221.43 139.895C221.43 138.914 221.895 138.32 222.66 138.32Z",fill:"#00450C"}),(0,a.createElement)("rect",{x:"192.5",y:"173",width:"50",height:"10",rx:"5",fill:"#B8E6BF"}),(0,a.createElement)("rect",{x:"49.5",y:"174",width:"50",height:"8",rx:"2",fill:"#DCDCDE"}),(0,a.createElement)("rect",{x:"132.5",y:"170",width:"22.7796",height:"16",rx:"4",fill:"#F6F7F7"}),(0,a.createElement)("path",{d:"M143.507 182.856C144.227 182.856 144.869 182.747 145.435 182.528C146.004 182.305 146.451 181.981 146.774 181.558C147.103 181.129 147.267 180.612 147.267 180.006V179.992C147.267 179.24 147.025 178.659 146.542 178.249C146.063 177.839 145.357 177.529 144.423 177.319L143.404 177.094C142.853 176.966 142.454 176.809 142.208 176.622C141.962 176.435 141.839 176.201 141.839 175.918V175.904C141.839 175.695 141.903 175.508 142.03 175.344C142.158 175.18 142.347 175.05 142.598 174.954C142.848 174.858 143.158 174.811 143.527 174.811C143.855 174.811 144.147 174.861 144.402 174.961C144.658 175.061 144.865 175.209 145.024 175.405C145.184 175.597 145.28 175.836 145.312 176.123L145.318 176.137L147.13 176.13L147.137 176.123C147.114 175.544 146.948 175.043 146.638 174.619C146.332 174.191 145.911 173.86 145.373 173.628C144.84 173.396 144.215 173.279 143.5 173.279C142.816 173.279 142.206 173.391 141.668 173.614C141.13 173.833 140.706 174.15 140.396 174.564C140.087 174.979 139.932 175.476 139.932 176.055V176.068C139.932 176.802 140.169 177.381 140.643 177.805C141.117 178.229 141.8 178.541 142.693 178.741L143.712 178.974C144.332 179.11 144.76 179.27 144.997 179.452C145.239 179.63 145.359 179.878 145.359 180.197V180.211C145.359 180.439 145.291 180.637 145.154 180.806C145.022 180.974 144.822 181.104 144.553 181.195C144.284 181.282 143.944 181.325 143.534 181.325C143.142 181.325 142.812 181.275 142.543 181.175C142.274 181.075 142.062 180.931 141.907 180.744C141.757 180.553 141.659 180.327 141.613 180.067V180.061H139.788L139.781 180.067C139.804 180.664 139.977 181.17 140.301 181.585C140.629 182 141.069 182.316 141.62 182.535C142.176 182.749 142.805 182.856 143.507 182.856ZM143.151 183.971H143.938V172.145H143.151V183.971Z",fill:"#C3C4C7"}),(0,a.createElement)("rect",{x:"192.5",y:"214",width:"50",height:"10",rx:"5",fill:"#B8E6BF"}),(0,a.createElement)("rect",{x:"49.5",y:"215",width:"50",height:"8",rx:"2",fill:"#DCDCDE"}),(0,a.createElement)("rect",{x:"132.5",y:"211",width:"22.7796",height:"16",rx:"4",fill:"#F6F7F7"}),(0,a.createElement)("path",{d:"M145.879 223.856C146.143 223.856 146.403 223.847 146.658 223.829C146.913 223.806 147.13 223.774 147.308 223.733V222.072C147.139 222.104 146.927 222.129 146.672 222.147C146.417 222.161 146.177 222.168 145.954 222.168C145.444 222.168 144.983 222.106 144.573 221.983C144.168 221.856 143.819 221.664 143.527 221.409C143.24 221.149 143.019 220.826 142.864 220.438C142.709 220.051 142.632 219.595 142.632 219.071V219.064C142.632 218.545 142.707 218.091 142.857 217.704C143.012 217.317 143.233 216.995 143.521 216.74C143.812 216.48 144.159 216.287 144.56 216.159C144.961 216.027 145.41 215.961 145.906 215.961C146.148 215.961 146.392 215.972 146.638 215.995C146.884 216.018 147.098 216.048 147.28 216.084V214.437C147.103 214.386 146.879 214.348 146.61 214.32C146.341 214.293 146.082 214.279 145.831 214.279C145.065 214.279 144.364 214.38 143.726 214.58C143.092 214.781 142.543 215.081 142.078 215.482C141.613 215.883 141.253 216.382 140.998 216.979C140.747 217.576 140.622 218.269 140.622 219.058V219.064C140.622 219.857 140.747 220.555 140.998 221.156C141.253 221.753 141.613 222.252 142.078 222.653C142.548 223.05 143.104 223.351 143.746 223.556C144.389 223.756 145.1 223.856 145.879 223.856ZM139.46 220.425H146.542V219.639H139.46V220.425ZM139.46 218.531H146.542V217.745H139.46V218.531Z",fill:"#C3C4C7"}),(0,a.createElement)("path",{fill:"#7F54B3",fillRule:"evenodd",d:"M33.24 50.42H62.2a3.32 3.32 0 0 1 3.31 3.31v11.05a3.32 3.32 0 0 1-3.3 3.3H51.8l1.43 3.5-6.28-3.5H33.23a3.32 3.32 0 0 1-3.3-3.3V53.73c0-1.82 1.48-3.3 3.31-3.3Z",clipRule:"evenodd"}),(0,a.createElement)("path",{fill:"#fff",d:"M31.72 53.42c.23-.27.55-.44.91-.45.74-.05 1.16.3 1.27 1.04.45 3.03.94 5.61 1.46 7.73l3.19-6.06c.3-.55.65-.84 1.1-.87.63-.04 1.03.36 1.19 1.23.3 1.7.76 3.36 1.37 4.96.39-3.68 1.02-6.36 1.92-8 .18-.38.54-.62.96-.64.33-.03.66.07.91.29.26.2.42.5.44.84.02.24-.03.49-.14.7-.56 1.05-1.03 2.8-1.4 5.24-.36 2.36-.5 4.22-.4 5.54.03.33-.03.66-.17.95-.14.3-.45.51-.78.53-.38.03-.76-.15-1.14-.53-1.36-1.39-2.43-3.45-3.22-6.19l-2.1 4.2c-.85 1.64-1.59 2.47-2.2 2.52-.39.03-.72-.3-1-1-.74-1.9-1.54-5.57-2.4-11.03-.07-.35.01-.72.23-1ZM62.96 55.7a3.4 3.4 0 0 0-2.32-1.68 3.77 3.77 0 0 0-.8-.08c-1.38 0-2.52.72-3.4 2.17a7.67 7.67 0 0 0-1.13 4.1c0 1.11.23 2.07.7 2.87a3.4 3.4 0 0 0 2.32 1.69c.26.05.52.08.79.08 1.4 0 2.54-.72 3.41-2.17a7.74 7.74 0 0 0 1.13-4.12c0-1.11-.24-2.06-.7-2.85Zm-1.83 4.04c-.2.95-.57 1.67-1.11 2.16-.42.38-.82.53-1.18.47-.35-.08-.64-.39-.85-.94a3.74 3.74 0 0 1-.26-1.33 4.78 4.78 0 0 1 .87-2.8c.49-.7 1-1 1.52-.89.36.08.64.39.86.94.16.43.25.87.25 1.32 0 .36-.03.72-.1 1.07ZM53.86 55.7a3.4 3.4 0 0 0-2.33-1.68 3.76 3.76 0 0 0-.79-.08c-1.39 0-2.53.72-3.41 2.17a7.67 7.67 0 0 0-1.13 4.1c0 1.11.23 2.07.7 2.87a3.4 3.4 0 0 0 2.32 1.69c.26.05.52.08.79.08 1.4 0 2.54-.72 3.41-2.17a7.84 7.84 0 0 0 1.14-4.12c0-1.12-.23-2.07-.7-2.86Zm-1.84 4.04a3.8 3.8 0 0 1-1.1 2.16c-.43.38-.83.53-1.18.47-.36-.08-.64-.39-.86-.94a3.74 3.74 0 0 1-.25-1.33c0-.36.03-.71.1-1.06.14-.62.4-1.2.77-1.73.48-.7.99-1 1.51-.9.36.08.64.39.86.94.16.43.26.87.26 1.32 0 .36-.04.72-.1 1.07Z"}),(0,a.createElement)("path",{fill:"#000",d:"M68.52 54.4h3.36c1.19 0 2.14.27 2.85.84a2.7 2.7 0 0 1 1.07 2.23 2.7 2.7 0 0 1-1.09 2.27c-.72.55-1.73.83-3.02.83h-.47v3.8H68.5v-9.98h.02Zm2.71 1.9v2.35c.61 0 1.07-.1 1.35-.29.29-.19.43-.48.43-.87 0-.44-.14-.74-.42-.9a2.64 2.64 0 0 0-1.36-.29ZM84.24 64.36h-2.82l-.46-1.66h-2.87l-.47 1.66h-2.77l3.17-9.97h3.05l3.17 9.97Zm-3.8-3.46c-.4-1.48-.71-2.9-.91-4.23h-.04c-.21 1.38-.52 2.8-.9 4.23h1.85ZM82.62 54.4h3.04a55.3 55.3 0 0 1 1.47 3.3h.04c.3-.8.79-1.9 1.45-3.3h3.11l-3.2 5.45v4.5h-2.75v-4.5l-3.16-5.46ZM92.58 54.4h3.43c.5 2.15.88 3.99 1.16 5.54l.3-1.54c.11-.6.24-1.19.38-1.76l.53-2.24h3.5l1.36 9.97h-2.7l-.72-6.86-1.67 6.86H96.3l-1.75-6.86-.7 6.86h-2.57l1.29-9.98ZM104.06 54.4h5.5v2.1h-2.78v1.84h2.4v2.07h-2.4v1.82h2.79v2.12h-5.51V54.4ZM110.58 54.4h2.73l3.46 5.74-.1-1.07v-4.68h2.72v9.97h-2.78l-3.38-5.66.07 1.24v4.42h-2.71V54.4h-.01ZM120.1 54.4h6.49v2.27h-1.87v7.7h-2.75v-7.7h-1.85v-2.28h-.01ZM127.7 64.18v-2.33c.86.42 1.58.63 2.17.63.34 0 .61-.07.81-.23.2-.16.3-.37.3-.62 0-.2-.08-.39-.24-.57a4.05 4.05 0 0 0-.82-.63 9 9 0 0 1-2.04-1.66 2.65 2.65 0 0 1-.63-1.73c0-.86.33-1.56.98-2.1a3.8 3.8 0 0 1 2.53-.82c.76 0 1.52.14 2.27.41v2.23a5.08 5.08 0 0 0-1.96-.55c-.34 0-.6.06-.8.2-.19.14-.28.33-.28.57 0 .41.45.88 1.35 1.4.54.32 1.08.75 1.64 1.32a2.68 2.68 0 0 1-.26 4.08c-.72.56-1.63.85-2.74.85-.77-.01-1.53-.16-2.28-.45Z"})),(0,a.createElement)("defs",null,(0,a.createElement)("clipPath",{id:"clip0_255_63852"},(0,a.createElement)("path",{d:"M0.5 0H283.5C289.023 0 293.5 4.47715 293.5 10V275H0.5V0Z",fill:"white"})),(0,a.createElement)("clipPath",{id:"clip1_255_63852"},(0,a.createElement)("rect",{width:"120",height:"39.7959",fill:"white",transform:"translate(27.5 45)"})))),L=()=>(0,a.createElement)("svg",{width:"310",height:"282",viewBox:"0 0 310 282",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("g",{filter:"url(#filter0_d_5851_4204)"},(0,a.createElement)("path",{d:"M16 30C16 24.4772 20.4772 20 26 20H309V48H16V30Z",fill:"#F2EDFF"}),(0,a.createElement)("path",{d:"M16 48H309V260H26C20.4771 260 16 255.523 16 250V48Z",fill:"white"})),(0,a.createElement)("path",{d:"M43.5 119C43.5 113.753 47.7533 109.5 53 109.5H309.5V236.5H53C47.7533 236.5 43.5 232.247 43.5 227V119Z",fill:"white",stroke:"#DCDCDE"}),(0,a.createElement)("path",{d:"M65.8545 134V126.954H68.6279C70.7227 126.954 71.9336 128.219 71.9336 130.426V130.436C71.9336 132.711 70.7373 134 68.6279 134H65.8545ZM67.3291 132.784H68.3936C69.6973 132.784 70.4297 131.964 70.4297 130.46V130.45C70.4297 129 69.6729 128.17 68.3936 128.17H67.3291V132.784ZM75.5566 134.112C73.9209 134.112 72.9297 133.043 72.9297 131.319V131.314C72.9297 129.605 73.9307 128.507 75.498 128.507C77.0654 128.507 78.042 129.581 78.042 131.207V131.651H74.3408C74.3555 132.535 74.8291 133.048 75.5859 133.048C76.2109 133.048 76.5576 132.716 76.6553 132.511L76.6699 132.481H77.998L77.9883 132.53C77.8223 133.204 77.1289 134.112 75.5566 134.112ZM75.5225 129.576C74.9023 129.576 74.4434 129.996 74.3555 130.758H76.6748C76.5869 129.977 76.1426 129.576 75.5225 129.576ZM79.209 135.782V128.624H80.6348V129.454H80.7227C81.001 128.878 81.5723 128.536 82.334 128.536C83.6768 128.536 84.5166 129.591 84.5166 131.305V131.314C84.5166 133.043 83.6963 134.083 82.334 134.083C81.5967 134.083 80.9961 133.727 80.7227 133.141H80.6348V135.782H79.209ZM81.8457 132.901C82.5977 132.901 83.0664 132.301 83.0664 131.314V131.305C83.0664 130.318 82.6025 129.718 81.8457 129.718C81.0938 129.718 80.6201 130.318 80.6201 131.305V131.314C80.6201 132.301 81.0986 132.901 81.8457 132.901ZM88.0713 134.112C86.416 134.112 85.4199 133.062 85.4199 131.314V131.305C85.4199 129.571 86.4307 128.507 88.0713 128.507C89.7119 128.507 90.7227 129.566 90.7227 131.305V131.314C90.7227 133.067 89.7266 134.112 88.0713 134.112ZM88.0713 132.994C88.8281 132.994 89.2627 132.374 89.2627 131.314V131.305C89.2627 130.255 88.8232 129.625 88.0713 129.625C87.3145 129.625 86.8799 130.255 86.8799 131.305V131.314C86.8799 132.374 87.3096 132.994 88.0713 132.994ZM94.0234 134.112C92.5635 134.112 91.7334 133.458 91.6309 132.535L91.626 132.516H93.0273L93.0371 132.535C93.1494 132.867 93.4766 133.106 94.0381 133.106C94.585 133.106 94.9561 132.872 94.9561 132.516V132.506C94.9561 132.218 94.7412 132.037 94.1943 131.915L93.2959 131.725C92.2705 131.505 91.7627 131.002 91.7627 130.196V130.191C91.7627 129.181 92.6611 128.507 94.0039 128.507C95.415 128.507 96.1963 129.21 96.2549 130.074V130.094H94.9316L94.9268 130.069C94.8486 129.781 94.5312 129.513 93.999 129.513C93.5059 129.513 93.1543 129.742 93.1543 130.104V130.108C93.1543 130.396 93.3545 130.562 93.9111 130.685L94.8047 130.875C95.8789 131.104 96.3818 131.554 96.3818 132.35V132.354C96.3818 133.419 95.4004 134.112 94.0234 134.112ZM98.2764 127.799C97.8369 127.799 97.4707 127.447 97.4707 127.008C97.4707 126.563 97.8369 126.212 98.2764 126.212C98.7158 126.212 99.0771 126.563 99.0771 127.008C99.0771 127.447 98.7158 127.799 98.2764 127.799ZM97.5586 134V128.624H98.9844V134H97.5586ZM102.651 134.02C101.343 134.02 100.815 133.595 100.815 132.55V129.698H99.9854V128.624H100.815V127.34H102.256V128.624H103.364V129.698H102.256V132.223C102.256 132.706 102.461 132.921 102.944 132.921C103.13 132.921 103.228 132.911 103.364 132.896V133.956C103.188 133.99 102.925 134.02 102.651 134.02Z",fill:"#2C3338"}),(0,a.createElement)("path",{d:"M142.11 134.693V133.893C140.738 133.814 139.742 133.121 139.703 131.905L139.708 131.9H141.012V131.905C141.095 132.403 141.441 132.726 142.11 132.789V131.036L141.783 130.958C140.509 130.67 139.811 130.099 139.811 129.049V129.039C139.811 127.877 140.768 127.145 142.11 127.066V126.246H142.672V127.066C144.024 127.169 144.908 127.94 144.957 129.088L144.952 129.093L143.658 129.098L143.653 129.088C143.585 128.565 143.219 128.253 142.672 128.17V129.869L143.019 129.942C144.352 130.245 145.05 130.782 145.05 131.852V131.861C145.05 133.077 144.059 133.795 142.672 133.888V134.693H142.11ZM141.173 128.941C141.173 129.317 141.451 129.562 142.11 129.737V128.165C141.495 128.233 141.173 128.536 141.173 128.932V128.941ZM143.688 131.998C143.688 131.573 143.429 131.354 142.672 131.163V132.794C143.351 132.73 143.688 132.447 143.688 132.008V131.998ZM149.063 134.156C147.472 134.156 146.422 133.302 146.324 132.042L146.319 131.979H147.73L147.735 132.032C147.799 132.579 148.302 132.97 149.063 132.97C149.815 132.97 150.309 132.55 150.309 131.954V131.944C150.309 131.271 149.806 130.899 148.951 130.899H148.146V129.85H148.932C149.674 129.85 150.152 129.459 150.152 128.888V128.878C150.152 128.292 149.747 127.931 149.054 127.931C148.36 127.931 147.896 128.307 147.838 128.893L147.833 128.937H146.476L146.48 128.878C146.583 127.618 147.574 126.798 149.054 126.798C150.567 126.798 151.544 127.56 151.544 128.683V128.692C151.544 129.571 150.899 130.143 150.074 130.313V130.343C151.124 130.44 151.808 131.046 151.808 132.003V132.013C151.808 133.292 150.709 134.156 149.063 134.156ZM155.792 134.181C154.283 134.181 153.287 133.282 153.204 132.105L153.199 132.037H154.537L154.547 132.071C154.649 132.589 155.133 133.004 155.797 133.004C156.554 133.004 157.081 132.472 157.081 131.715V131.705C157.081 130.953 156.549 130.431 155.802 130.431C155.445 130.431 155.143 130.533 154.908 130.733C154.776 130.841 154.659 130.973 154.581 131.124H153.316L153.644 126.954H158.048V128.126H154.791L154.615 130.133H154.703C154.986 129.659 155.533 129.366 156.207 129.366C157.521 129.366 158.468 130.333 158.468 131.676V131.686C158.468 133.17 157.374 134.181 155.792 134.181ZM159.762 134V133.009L162.032 130.768C163.023 129.806 163.292 129.449 163.292 128.956V128.941C163.292 128.341 162.882 127.921 162.208 127.921C161.52 127.921 161.046 128.38 161.046 129.049V129.073H159.684L159.679 129.054C159.679 127.701 160.733 126.773 162.276 126.773C163.727 126.773 164.742 127.604 164.742 128.819V128.834C164.742 129.635 164.327 130.299 163.043 131.485L161.739 132.701V132.813H164.845V134H159.762ZM167.145 134.122C166.646 134.122 166.285 133.756 166.285 133.272C166.285 132.789 166.646 132.428 167.145 132.428C167.647 132.428 168.004 132.789 168.004 133.272C168.004 133.756 167.647 134.122 167.145 134.122ZM171.783 126.769C173.414 126.769 174.693 127.931 174.693 130.406V130.416C174.693 132.774 173.58 134.176 171.773 134.176C170.411 134.176 169.4 133.37 169.181 132.267L169.171 132.223H170.616L170.631 132.267C170.802 132.706 171.202 133.004 171.769 133.004C172.789 133.004 173.238 132.003 173.292 130.719C173.292 130.67 173.292 130.616 173.292 130.562H173.194C172.94 131.104 172.354 131.593 171.378 131.593C170.006 131.593 169.083 130.616 169.083 129.283V129.273C169.083 127.833 170.196 126.769 171.783 126.769ZM171.783 130.504C172.511 130.504 173.072 129.986 173.072 129.259V129.249C173.072 128.512 172.511 127.94 171.793 127.94C171.08 127.94 170.509 128.502 170.509 129.22V129.229C170.509 129.972 171.046 130.504 171.783 130.504ZM178.619 126.769C180.25 126.769 181.529 127.931 181.529 130.406V130.416C181.529 132.774 180.416 134.176 178.609 134.176C177.247 134.176 176.236 133.37 176.017 132.267L176.007 132.223H177.452L177.467 132.267C177.638 132.706 178.038 133.004 178.604 133.004C179.625 133.004 180.074 132.003 180.128 130.719C180.128 130.67 180.128 130.616 180.128 130.562H180.03C179.776 131.104 179.19 131.593 178.214 131.593C176.842 131.593 175.919 130.616 175.919 129.283V129.273C175.919 127.833 177.032 126.769 178.619 126.769ZM178.619 130.504C179.347 130.504 179.908 129.986 179.908 129.259V129.249C179.908 128.512 179.347 127.94 178.629 127.94C177.916 127.94 177.345 128.502 177.345 129.22V129.229C177.345 129.972 177.882 130.504 178.619 130.504Z",fill:"#2C3338"}),(0,a.createElement)("rect",{x:"211.5",y:"123",width:"44",height:"14",rx:"7",fill:"#B8E6BF"}),(0,a.createElement)("path",{d:"M225.184 133V127.363H227.508C228.695 127.363 229.488 128.129 229.488 129.289V129.297C229.488 130.457 228.695 131.223 227.508 131.223H226.363V133H225.184ZM227.219 128.297H226.363V130.301H227.219C227.895 130.301 228.293 129.941 228.293 129.301V129.293C228.293 128.652 227.895 128.297 227.219 128.297ZM231.477 133.066C230.656 133.066 230.074 132.559 230.074 131.777V131.77C230.074 130.996 230.672 130.543 231.742 130.48L232.781 130.418V130.062C232.781 129.691 232.527 129.48 232.059 129.48C231.648 129.48 231.387 129.625 231.297 129.879L231.289 129.895H230.234L230.238 129.859C230.328 129.105 231.039 128.605 232.121 128.605C233.262 128.605 233.906 129.145 233.906 130.062V133H232.781V132.43H232.711C232.492 132.828 232.039 133.066 231.477 133.066ZM231.188 131.707C231.188 132.035 231.465 132.234 231.859 132.234C232.387 132.234 232.781 131.887 232.781 131.434V131.117L231.914 131.172C231.426 131.203 231.188 131.387 231.188 131.699V131.707ZM235.605 128.039C235.254 128.039 234.961 127.758 234.961 127.406C234.961 127.051 235.254 126.77 235.605 126.77C235.957 126.77 236.246 127.051 236.246 127.406C236.246 127.758 235.957 128.039 235.605 128.039ZM235.031 133V128.699H236.172V133H235.031ZM238.855 133.066C237.781 133.066 237.109 132.227 237.109 130.852V130.844C237.109 129.461 237.766 128.629 238.855 128.629C239.445 128.629 239.926 128.918 240.141 129.387H240.211V127.055H241.352V133H240.211V132.332H240.141C239.918 132.797 239.461 133.066 238.855 133.066ZM239.242 132.121C239.848 132.121 240.223 131.645 240.223 130.855V130.848C240.223 130.059 239.844 129.574 239.242 129.574C238.641 129.574 238.27 130.059 238.27 130.844V130.852C238.27 131.645 238.641 132.121 239.242 132.121Z",fill:"#00450C"}),(0,a.createElement)("rect",{x:"208",y:"165",width:"50",height:"8",rx:"4",fill:"#B8E6BF"}),(0,a.createElement)("rect",{x:"65",y:"165",width:"50",height:"8",rx:"4",fill:"#DCDCDE"}),(0,a.createElement)("rect",{x:"148",y:"161",width:"22.7796",height:"16",rx:"4",fill:"#F2EDFF"}),(0,a.createElement)("path",{d:"M159.007 173.856C158.305 173.856 157.676 173.749 157.12 173.535C156.569 173.316 156.129 173 155.801 172.585C155.477 172.17 155.304 171.664 155.281 171.067L155.288 171.061H157.113V171.067C157.159 171.327 157.257 171.553 157.407 171.744C157.562 171.931 157.774 172.075 158.043 172.175C158.312 172.275 158.642 172.325 159.034 172.325C159.444 172.325 159.784 172.282 160.053 172.195C160.322 172.104 160.522 171.974 160.654 171.806C160.791 171.637 160.859 171.439 160.859 171.211V171.197C160.859 170.878 160.739 170.63 160.497 170.452C160.26 170.27 159.832 170.11 159.212 169.974L158.193 169.741C157.601 169.609 157.1 169.427 156.689 169.194C156.279 168.962 155.967 168.673 155.753 168.326C155.539 167.975 155.432 167.556 155.432 167.068V167.055C155.432 166.476 155.587 165.979 155.896 165.564C156.206 165.15 156.63 164.833 157.168 164.614C157.706 164.391 158.316 164.279 159 164.279C159.715 164.279 160.34 164.396 160.873 164.628C161.411 164.86 161.832 165.191 162.138 165.619C162.448 166.043 162.614 166.544 162.637 167.123L162.63 167.13L160.818 167.137L160.812 167.123C160.78 166.836 160.684 166.597 160.524 166.405C160.365 166.209 160.158 166.061 159.902 165.961C159.647 165.861 159.355 165.811 159.027 165.811C158.658 165.811 158.348 165.858 158.098 165.954C157.847 166.05 157.658 166.18 157.53 166.344C157.403 166.508 157.339 166.695 157.339 166.904V166.918C157.339 167.105 157.394 167.271 157.503 167.417C157.612 167.563 157.781 167.69 158.009 167.8C158.237 167.909 158.535 168.007 158.904 168.094L159.923 168.319C160.857 168.529 161.563 168.839 162.042 169.249C162.525 169.659 162.767 170.24 162.767 170.992V171.006C162.767 171.612 162.603 172.129 162.274 172.558C161.951 172.981 161.504 173.305 160.935 173.528C160.369 173.747 159.727 173.856 159.007 173.856ZM158.651 174.971V163.145H159.438V174.971H158.651Z",fill:"#674399"}),(0,a.createElement)("rect",{x:"65",y:"206",width:"50",height:"8",rx:"4",fill:"#DCDCDE"}),(0,a.createElement)("rect",{x:"208",y:"206",width:"50",height:"8",rx:"4",fill:"#B8E6BF"}),(0,a.createElement)("rect",{x:"148",y:"202",width:"22.7796",height:"16",rx:"4",fill:"#F2EDFF"}),(0,a.createElement)("path",{d:"M161.379 214.856C160.6 214.856 159.889 214.756 159.246 214.556C158.604 214.351 158.048 214.05 157.578 213.653C157.113 213.252 156.753 212.753 156.498 212.156C156.247 211.555 156.122 210.857 156.122 210.064V210.058C156.122 209.269 156.247 208.576 156.498 207.979C156.753 207.382 157.113 206.883 157.578 206.482C158.043 206.081 158.592 205.781 159.226 205.58C159.864 205.38 160.565 205.279 161.331 205.279C161.582 205.279 161.841 205.293 162.11 205.32C162.379 205.348 162.603 205.386 162.78 205.437V207.084C162.598 207.048 162.384 207.018 162.138 206.995C161.892 206.972 161.648 206.961 161.406 206.961C160.91 206.961 160.461 207.027 160.06 207.159C159.659 207.287 159.312 207.48 159.021 207.74C158.733 207.995 158.512 208.317 158.357 208.704C158.207 209.091 158.132 209.545 158.132 210.064V210.071C158.132 210.595 158.209 211.051 158.364 211.438C158.519 211.826 158.74 212.149 159.027 212.409C159.319 212.664 159.668 212.856 160.073 212.983C160.483 213.106 160.944 213.168 161.454 213.168C161.677 213.168 161.917 213.161 162.172 213.147C162.427 213.129 162.639 213.104 162.808 213.072V214.733C162.63 214.774 162.413 214.806 162.158 214.829C161.903 214.847 161.643 214.856 161.379 214.856ZM154.96 211.425V210.639H162.042V211.425H154.96ZM154.96 209.531V208.745H162.042V209.531H154.96Z",fill:"#674399"}),(0,a.createElement)("path",{d:"M65 148.5H309",stroke:"#DCDCDE"}),(0,a.createElement)("path",{d:"M65 189.5H309",stroke:"#DCDCDE"}),(0,a.createElement)("path",{d:"M84.1484 75.0801H87.5495C88.7499 75.0801 89.7121 75.3659 90.4362 75.9375C91.1602 76.5091 91.5222 77.2617 91.5222 78.1954C91.5222 79.1766 91.1507 79.9483 90.4171 80.5008C89.6835 81.0534 88.6642 81.3392 87.359 81.3392H86.8827V85.1785H84.1294V75.0801H84.1484ZM86.8922 77.014V79.3957C87.5114 79.3862 87.9687 79.2909 88.2545 79.1004C88.5499 78.9099 88.6928 78.6145 88.6928 78.2144C88.6928 77.7762 88.5499 77.4713 88.264 77.2998C87.9878 77.1188 87.5305 77.0235 86.8922 77.014Z",fill:"black"}),(0,a.createElement)("path",{d:"M100.068 85.1785H97.2098L96.743 83.4923H93.8373L93.361 85.1785H90.5601L93.7706 75.0801H96.8573L100.068 85.1785ZM96.219 81.6727C95.8094 80.1674 95.495 78.7384 95.2949 77.3856H95.2568C95.0377 78.786 94.7328 80.215 94.3422 81.6727H96.219Z",fill:"black"}),(0,a.createElement)("path",{d:"M98.4194 75.0801H101.506C102.192 76.5282 102.687 77.6523 102.992 78.4335H103.03C103.335 77.6237 103.831 76.5091 104.498 75.0801H107.651L104.402 80.6057V85.169H101.62V80.6057L98.4194 75.0801Z",fill:"black"}),(0,a.createElement)("path",{d:"M108.508 75.0801H111.986C112.481 77.2617 112.872 79.129 113.157 80.7009L113.453 79.1385C113.577 78.5288 113.7 77.9381 113.843 77.357L114.377 75.0896H117.921L119.302 85.1881H116.578L115.844 78.243L114.148 85.1881H112.29L110.509 78.2335L109.804 85.1881H107.203L108.508 75.0801Z",fill:"black"}),(0,a.createElement)("path",{d:"M120.131 75.0801H125.695V77.2236H122.885V79.0814H125.323V81.1773H122.885V83.0159H125.714V85.169H120.131V75.0801Z",fill:"black"}),(0,a.createElement)("path",{d:"M126.733 75.0801H129.506L133.002 80.901L132.907 79.8149V75.0801H135.66V85.1785H132.84L129.42 79.4434L129.496 80.7009V85.1785H126.743V75.0801H126.733Z",fill:"black"}),(0,a.createElement)("path",{d:"M136.384 75.0801H142.948V77.3856H141.052V85.1785H138.271V77.3856H136.394V75.0801H136.384Z",fill:"black"}),(0,a.createElement)("path",{d:"M144.072 84.9879V82.6348C144.939 83.054 145.673 83.2731 146.273 83.2731C146.616 83.2731 146.892 83.1969 147.092 83.0349C147.292 82.873 147.387 82.6634 147.387 82.4061C147.387 82.2061 147.311 82.0155 147.149 81.8345C146.987 81.6535 146.711 81.4439 146.32 81.1962C145.368 80.5865 144.682 80.0244 144.253 79.51C143.824 78.986 143.615 78.4049 143.615 77.7666C143.615 76.8901 143.948 76.1851 144.606 75.6325C145.263 75.08 146.12 74.8037 147.168 74.8037C147.94 74.8037 148.712 74.9466 149.474 75.2229V77.4808C148.654 77.1092 147.997 76.9187 147.483 76.9187C147.14 76.9187 146.873 76.9854 146.682 77.1283C146.482 77.2712 146.387 77.4617 146.387 77.6999C146.387 78.1191 146.844 78.5954 147.759 79.1289C148.302 79.4433 148.855 79.8815 149.417 80.4531C149.979 81.0247 150.255 81.6726 150.255 82.4252C150.255 83.3017 149.893 84.0162 149.159 84.5878C148.426 85.1594 147.502 85.4452 146.378 85.4452C145.596 85.4357 144.834 85.2832 144.072 84.9879Z",fill:"black"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M48.4225 71.0597H77.7367C79.5849 71.0597 81.0901 72.5649 81.0901 74.4131V85.5977C81.0901 87.4459 79.5849 88.9511 77.7367 88.9511H67.219L68.6576 92.4856L62.3032 88.9511H48.413C46.5648 88.9511 45.0596 87.4459 45.0596 85.5977V74.4131C45.0596 72.5649 46.5648 71.0597 48.4225 71.0597Z",fill:"#7F54B3"}),(0,a.createElement)("path",{d:"M46.8795 74.0987C47.1081 73.8224 47.4415 73.651 47.8036 73.6414C48.5467 73.5938 48.9754 73.9463 49.0897 74.6989C49.547 77.7666 50.0424 80.3769 50.5664 82.5205L53.796 76.3852C54.0913 75.8326 54.4533 75.5373 54.9011 75.5087C55.5489 75.4611 55.949 75.8707 56.111 76.7472C56.4158 78.462 56.8827 80.1483 57.5019 81.7774C57.8925 78.0428 58.5403 75.3372 59.4454 73.67C59.6264 73.2889 59.9979 73.0412 60.4171 73.0222C60.7506 72.9936 61.084 73.0984 61.3412 73.3175C61.608 73.5176 61.7699 73.832 61.789 74.1654C61.808 74.4131 61.7604 74.6608 61.6461 74.8704C61.0745 75.9374 60.5981 77.7094 60.2266 80.1864C59.8646 82.5776 59.7217 84.4544 59.8169 85.7977C59.855 86.1311 59.7883 86.4646 59.6454 86.7599C59.5025 87.0648 59.1977 87.2744 58.8642 87.2934C58.4736 87.322 58.0926 87.141 57.702 86.7504C56.3301 85.3499 55.244 83.2636 54.4438 80.4912C53.5006 82.3776 52.7861 83.7971 52.3193 84.7307C51.4524 86.3979 50.7093 87.2458 50.0995 87.2934C49.6994 87.322 49.3564 86.9886 49.0802 86.2836C48.3275 84.3591 47.5178 80.6341 46.6508 75.1086C46.5746 74.7466 46.6603 74.3845 46.8795 74.0987Z",fill:"white"}),(0,a.createElement)("path",{d:"M69.296 76.4139C68.8006 75.5279 67.9432 74.8991 66.9429 74.7085C66.6762 74.6514 66.4094 74.6228 66.1426 74.6228C64.7327 74.6228 63.5799 75.3564 62.6844 76.8235C61.9223 78.0715 61.5221 79.5101 61.5412 80.9677C61.5412 82.1014 61.7794 83.0731 62.2462 83.8829C62.7416 84.7689 63.599 85.3977 64.5993 85.5882C64.8661 85.6454 65.1328 85.6739 65.3996 85.6739C66.8191 85.6739 67.9718 84.9404 68.8578 83.4732C69.6199 82.2157 70.0201 80.7771 70.001 79.3005C70.001 78.1668 69.7629 77.2046 69.296 76.4139ZM67.4383 80.5009C67.2382 81.4631 66.8667 82.1871 66.3141 82.6825C65.8854 83.0731 65.4853 83.2255 65.1233 83.1589C64.7613 83.0922 64.4754 82.7683 64.2563 82.2062C64.0944 81.7775 63.9991 81.3297 63.9991 80.8629C63.9991 80.5009 64.0372 80.1388 64.1039 79.7864C64.2468 79.1576 64.504 78.5669 64.8851 78.0334C65.371 77.3189 65.8854 77.014 66.4189 77.1284C66.7809 77.2046 67.0667 77.519 67.2859 78.081C67.4478 78.5098 67.5431 78.9575 67.5431 79.4148C67.5431 79.7768 67.5145 80.1388 67.4383 80.5009Z",fill:"white"}),(0,a.createElement)("path",{d:"M78.5182 76.4139C78.0228 75.5279 77.1654 74.8991 76.1651 74.7085C75.8983 74.6514 75.6316 74.6228 75.3648 74.6228C73.9548 74.6228 72.8021 75.3564 71.9066 76.8235C71.1444 78.0715 70.7443 79.5101 70.7633 80.9677C70.7633 82.1014 71.0015 83.0731 71.4683 83.8829C71.9637 84.7689 72.8211 85.3977 73.8215 85.5882C74.0882 85.6454 74.355 85.6739 74.6217 85.6739C76.0412 85.6739 77.194 84.9404 78.08 83.4732C78.8421 82.2157 79.2422 80.7771 79.2232 79.3005C79.2232 78.1668 78.985 77.2046 78.5182 76.4139ZM76.6605 80.5009C76.4604 81.4631 76.0889 82.1871 75.5363 82.6825C75.1076 83.0731 74.7075 83.2255 74.3454 83.1589C73.9834 83.0922 73.6976 82.7683 73.4785 82.2062C73.3165 81.7775 73.2213 81.3297 73.2213 80.8629C73.2213 80.5009 73.2594 80.1388 73.3261 79.7864C73.469 79.1576 73.7262 78.5669 74.1073 78.0334C74.5931 77.3189 75.1076 77.014 75.6411 77.1284C76.0031 77.2046 76.2889 77.519 76.508 78.081C76.67 78.5098 76.7653 78.9575 76.7653 79.4148C76.7653 79.7768 76.7367 80.1388 76.6605 80.5009Z",fill:"white"}),(0,a.createElement)("circle",{cx:"34.2526",cy:"34.2526",r:"2.25264",fill:"#DFD1FB"}),(0,a.createElement)("circle",{cx:"42.758",cy:"34.2526",r:"2.25264",fill:"#DFD1FB"}),(0,a.createElement)("circle",{cx:"51.2634",cy:"34.2526",r:"2.25264",fill:"#DFD1FB"}),(0,a.createElement)("defs",null,(0,a.createElement)("filter",{id:"filter0_d_5851_4204",x:"0",y:"4",width:"325",height:"272",filterUnits:"userSpaceOnUse",colorInterpolationFilters:"sRGB"},(0,a.createElement)("feFlood",{floodOpacity:"0",result:"BackgroundImageFix"}),(0,a.createElement)("feColorMatrix",{in:"SourceAlpha",type:"matrix",values:"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",result:"hardAlpha"}),(0,a.createElement)("feOffset",null),(0,a.createElement)("feGaussianBlur",{stdDeviation:"8"}),(0,a.createElement)("feComposite",{in2:"hardAlpha",operator:"out"}),(0,a.createElement)("feColorMatrix",{type:"matrix",values:"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.08 0"}),(0,a.createElement)("feBlend",{mode:"normal",in2:"BackgroundImageFix",result:"effect1_dropShadow_5851_4204"}),(0,a.createElement)("feBlend",{mode:"normal",in:"SourceGraphic",in2:"effect1_dropShadow_5851_4204",result:"shape"})))),b=e=>{let{isWooPayEligible:t=!1}=e;return(0,a.createElement)("div",{className:"woocommerce-recommended-payments-banner__footer_icon_container"},(0,a.createElement)(_,null),(0,a.createElement)(w,null),(0,a.createElement)(d,null),t&&(0,a.createElement)(v,null),(0,a.createElement)(p,null),(0,a.createElement)(f,null),(0,a.createElement)(h,null),(0,a.createElement)(g,null),(0,a.createElement)(C,null),(0,a.createElement)(H,null),(0,a.createElement)(y,null),(0,a.createElement)(r.Text,{variant:"caption",as:"p",size:"12",lineHeight:"16px"},(0,s.__)("& more.","woocommerce")))},k=e=>{let{isWooPayEligible:t}=e;return(0,a.createElement)(o.CardFooter,{className:"woocommerce-recommended-payments-banner__footer"},(0,a.createElement)("div",null,(0,a.createElement)(r.Text,{variant:"caption",as:"p",size:"12",lineHeight:"16px"},(0,s.__)("WooPayments is pre-integrated with popular payment options:","woocommerce"))),(0,a.createElement)(b,{isWooPayEligible:t}))},S=e=>{let{actionButton:t,isWooPayEligible:n}=e;const o={tosLink:(0,a.createElement)(i.Link,{href:"https://wordpress.com/tos/",type:"external",target:"_blank"},(0,a.createElement)(a.Fragment,null)),privacyLink:(0,a.createElement)(i.Link,{href:"https://automattic.com/privacy/",type:"external",target:"_blank"},(0,a.createElement)(a.Fragment,null)),woopayMerchantTerms:(0,a.createElement)(i.Link,{href:"https://wordpress.com/tos/#more-woopay-specifically",type:"external",target:"_blank"},(0,a.createElement)(a.Fragment,null))};return(0,a.createElement)("div",{className:"woocommerce-recommended-payments-banner__text_container"},(0,a.createElement)(r.Text,{className:"woocommerce-recommended-payments__header-title",variant:"title.small",as:"p",size:"24",lineHeight:"28px",padding:"0 20px 0 0"},(0,s.__)("Payments made simple, designed exclusively for WooCommerce stores.","woocommerce")),(0,a.createElement)(r.Text,{className:"woocommerce-recommended-payments__header-heading",variant:"caption",as:"p",size:"12",lineHeight:"16px"},n?(0,a.createInterpolateElement)((0,s.__)("By using WooPayments you agree to the Terms of Service (including WooPay merchant terms ) and acknowledge that you have read our Privacy Policy .","woocommerce"),o):(0,a.createInterpolateElement)((0,s.__)("By using WooPayments you agree to the Terms of Service and acknowledge that you have read our Privacy Policy .","woocommerce"),o)),t)},M=e=>{let{actionButton:t,textPosition:n,bannerImage:r=(0,a.createElement)(E,null),isWooPayEligible:i}=e;return(0,a.createElement)(o.CardBody,{className:"woocommerce-recommended-payments-banner__body"},"left"===n?(0,a.createElement)(a.Fragment,null,(0,a.createElement)(S,{actionButton:t,isWooPayEligible:i}),(0,a.createElement)("div",{className:"woocommerce-recommended-payments-banner__image_container"},r)):(0,a.createElement)(a.Fragment,null,(0,a.createElement)("div",{className:"woocommerce-recommended-payments-banner__image_container"},r),(0,a.createElement)(S,{actionButton:t,isWooPayEligible:i})))},N=e=>{let{children:t}=e;return(0,a.createElement)(o.Card,{size:"medium",className:"woocommerce-recommended-payments-banner"},t)},x=()=>(0,a.createElement)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("mask",{id:"mask0_5908_1374",style:{maskType:"luminance"},maskUnits:"userSpaceOnUse",x:"2",y:"4",width:"20",height:"16"},(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M20 4H4C2.895 4 2 4.895 2 6V18C2 19.105 2.895 20 4 20H20C21.105 20 22 19.105 22 18V6C22 4.895 21.105 4 20 4ZM20 6V8H4V6H20ZM4 12V18H20V12H4ZM6 14H13V16H6V14ZM18 14H15V16H18V14Z",fill:"white"})),(0,a.createElement)("g",{mask:"url(#mask0_5908_1374)"},(0,a.createElement)("rect",{width:"24",height:"24",fill:"#674399"}))),T=()=>(0,a.createElement)("svg",{width:"25",height:"24",viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("mask",{id:"mask0_5908_1702",style:{maskType:"luminance"},maskUnits:"userSpaceOnUse",x:"2",y:"2",width:"21",height:"20"},(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.3335 12C2.3335 6.477 6.8105 2 12.3335 2C17.8565 2 22.3335 6.477 22.3335 12C22.3335 17.523 17.8565 22 12.3335 22C6.8105 22 2.3335 17.523 2.3335 12ZM15.3335 17L14.3335 18L12.3335 20C15.5725 20 18.3625 18.061 19.6195 15.286L19.3335 15H17.3335L16.3335 14V12L18.3335 10H20.0695C19.7675 8.834 19.2155 7.767 18.4635 6.87L15.3335 10L14.3335 9V7L15.3335 6V4.589C14.4065 4.212 13.3945 4 12.3335 4C11.2725 4 10.2605 4.212 9.3335 4.589V5L10.3335 6H12.3335V8L9.3335 11H7.3335V13H5.3335L4.3335 12C4.3335 16.072 7.3935 19.436 11.3335 19.931V18L9.3335 16V13H12.3335L13.3335 14V15H15.3335V17Z",fill:"white"})),(0,a.createElement)("g",{mask:"url(#mask0_5908_1702)"},(0,a.createElement)("rect",{x:"0.333496",width:"24",height:"24",fill:"#674399"}))),A=()=>(0,a.createElement)("svg",{width:"25",height:"24",viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("mask",{id:"mask0_5908_1139",style:{maskType:"luminance"},maskUnits:"userSpaceOnUse",x:"3",y:"2",width:"19",height:"19"},(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M21.6665 6V19C21.6665 20.104 20.7705 21 19.6665 21H5.6665C4.5625 21 3.6665 20.104 3.6665 19V6C3.6665 4.896 4.5625 4 5.6665 4H6.6665V2H8.6665V4H16.6665V2H18.6665V4H19.6665C20.7705 4 21.6665 4.896 21.6665 6ZM11.1645 18.001L7.4595 14.296L8.8745 12.881L11.1685 15.175L16.4615 9.882L17.8765 11.297L11.1645 18.001ZM5.6665 8H19.6665V19H5.6665V8Z",fill:"white"})),(0,a.createElement)("g",{mask:"url(#mask0_5908_1139)"},(0,a.createElement)("rect",{x:"0.666504",width:"24",height:"24",fill:"#674399"}))),I=()=>(0,a.createElement)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("mask",{id:"mask0_5908_3242",style:{maskType:"luminance"},maskUnits:"userSpaceOnUse",x:"3",y:"4",width:"18",height:"18"},(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M18.192 4H5.79578C4.24399 4 2.98777 5.26853 3.00009 6.80801V16.168C3.00009 17.7198 4.2563 18.9761 5.8081 18.9761H11.1676L16.4757 21.9319L15.2687 18.9761H18.192C19.7438 18.9761 21 17.7198 21 16.168V6.80801C21 5.25622 19.7438 4 18.192 4ZM7.53039 7.19611C7.2535 7.21589 7.04582 7.31478 6.90738 7.50268C6.76893 7.68068 6.71948 7.90813 6.74915 8.16525C7.33261 11.8737 7.87651 14.3756 8.38086 15.6711C8.57864 16.1458 8.80609 16.3732 9.0731 16.3535C9.48844 16.3238 9.9829 15.7502 10.5664 14.6327C10.8729 13.9998 11.3476 13.0505 11.9904 11.7847C12.5244 13.6537 13.2562 15.058 14.1759 15.9974C14.433 16.2645 14.7 16.3831 14.9571 16.3633C15.1846 16.3436 15.3626 16.2249 15.4813 16.0073C15.5801 15.8194 15.6197 15.6019 15.5999 15.3547C15.5406 14.4547 15.6296 13.1988 15.8768 11.5869C16.1339 9.92551 16.4504 8.72893 16.8361 8.01691C16.9152 7.86857 16.9448 7.72024 16.935 7.54223C16.9152 7.31478 16.8163 7.12689 16.6284 6.97855C16.4405 6.83021 16.2328 6.76099 16.0054 6.78077C15.7186 6.80055 15.501 6.939 15.3527 7.21589C14.7396 8.33336 14.3045 10.1431 14.0473 12.6549C13.6715 11.7056 13.3551 10.5881 13.1079 9.27283C12.9991 8.68937 12.7321 8.41248 12.297 8.44214C12.0003 8.46192 11.7531 8.65971 11.5553 9.03549L9.38955 13.1593C9.03354 11.7253 8.69731 9.97496 8.39075 7.90813C8.32152 7.3939 8.03474 7.15656 7.53039 7.19611Z",fill:"white"})),(0,a.createElement)("g",{mask:"url(#mask0_5908_3242)"},(0,a.createElement)("rect",{width:"24",height:"24",fill:"#674399"}))),O=e=>{let{isWooPayEligible:t=!1}=e;return(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits",align:"top"},(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits-benefit"},(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits-benefit-icon-container"},(0,a.createElement)(x,null)),(0,a.createElement)(r.Text,{as:"p"},(0,s.__)("Offer your customers card payments, iDeal, and the ability to sell in-person with Woo mobile app.","woocommerce"))),(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits-benefit"},(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits-benefit-icon-container"},(0,a.createElement)(T,null)),(0,a.createElement)(r.Text,{as:"p"},(0,s.__)("Sell to international markets and accept more than 135 currencies with local payment methods.","woocommerce"))),(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits-benefit"},(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits-benefit-icon-container"},(0,a.createElement)(A,null)),(0,a.createElement)(r.Text,{as:"p"},(0,s.__)("Earn and manage recurring revenue and get automatic deposits into your nominated bank account.","woocommerce"))),t&&(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits-benefit"},(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits-benefit-icon-container"},(0,a.createElement)(I,null)),(0,a.createElement)(r.Text,{as:"p"},(0,s.__)("Boost conversions with WooPay, a new express checkout feature included in WooPayments.","woocommerce"))))};var P=n(59838);const R=()=>(0,a.createElement)("span",{className:"woocommerce-task-payment__setup_required"},(0,a.createElement)(P.Z,null),(0,a.createElement)(r.Text,{variant:"small",size:"14",lineHeight:"20px"},(0,s.__)("Setup required","woocommerce"))),V=()=>(0,a.createElement)("svg",{width:"36",height:"25",viewBox:"0 0 36 25",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"1.41431",y:"1",width:"33.7586",height:"23",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{d:"M17.645 14.9708V12.2642V12.2636H19.1074C19.7104 12.264 20.2171 12.0743 20.6276 11.6946C21.0425 11.3342 21.2745 10.816 21.2627 10.2759C21.2709 9.73881 21.0393 9.22448 20.6276 8.86525C20.2207 8.48344 19.6734 8.27511 19.1074 8.28658H16.7598V14.9708H17.645ZM17.6451 11.4427V9.10938V9.10885H19.1295C19.4604 9.09983 19.7793 9.22898 20.0054 9.46351C20.2328 9.678 20.3611 9.97262 20.3611 10.2803C20.3611 10.588 20.2328 10.8826 20.0054 11.0971C19.7766 11.3267 19.4586 11.4522 19.1295 11.4427H17.6451Z",fill:"#5F6368"}),(0,a.createElement)("path",{d:"M24.8518 10.7568C24.4731 10.4176 23.9567 10.248 23.3024 10.248C22.462 10.248 21.8273 10.5467 21.3985 11.144L22.1781 11.6203C22.4662 11.2157 22.8574 11.0134 23.3519 11.0134C23.6672 11.0098 23.9722 11.1216 24.2063 11.3264C24.4397 11.5136 24.5739 11.7927 24.5719 12.0864V12.2827C24.2318 12.096 23.7989 12.0027 23.2733 12.0027C22.6575 12.0034 22.1652 12.1435 21.7965 12.423C21.4278 12.7024 21.2434 13.0788 21.2434 13.552C21.2354 13.983 21.4281 14.3944 21.7679 14.672C22.1176 14.9707 22.5521 15.12 23.0715 15.12C23.68 15.12 24.1674 14.8587 24.534 14.336H24.5725V14.9707H25.4192V12.152C25.4195 11.5611 25.2304 11.096 24.8518 10.7568ZM22.4508 14.1307C22.2654 14.0011 22.156 13.7924 22.1572 13.5707C22.1572 13.3216 22.2776 13.1142 22.5201 12.9435C22.7602 12.7753 23.06 12.6912 23.4196 12.6912C23.9133 12.6912 24.2982 12.7979 24.5742 13.0112C24.5742 13.3718 24.4276 13.6859 24.1343 13.9536C23.8702 14.2099 23.5122 14.3541 23.1386 14.3547C22.8896 14.3592 22.6466 14.2801 22.4508 14.1307Z",fill:"#5F6368"}),(0,a.createElement)("path",{d:"M30.2792 10.3975L27.3235 16.9868H26.4097L27.5065 14.6812L25.563 10.3975H26.5251L27.9299 13.6828H27.9491L29.3154 10.3975H30.2792Z",fill:"#5F6368"}),(0,a.createElement)("path",{d:"M14.0677 11.6812C14.068 11.4195 14.0452 11.1583 13.9995 10.9004H10.2664V12.3793H12.4045C12.3161 12.8566 12.0305 13.2782 11.6139 13.5463V14.5063H12.89C13.6372 13.838 14.0677 12.8497 14.0677 11.6812Z",fill:"#4285F4"}),(0,a.createElement)("path",{d:"M10.2666 15.4332C11.3349 15.4332 12.2344 15.0929 12.8903 14.5063L11.6142 13.5463C11.259 13.7799 10.8016 13.9132 10.2666 13.9132C9.23409 13.9132 8.35771 13.238 8.04432 12.3281H6.72974V13.3175C7.40168 14.6145 8.77018 15.4331 10.2666 15.4332Z",fill:"#34A853"}),(0,a.createElement)("path",{d:"M8.04421 12.3283C7.87853 11.8516 7.87853 11.3353 8.04421 10.8585V9.86914H6.72962C6.1676 10.954 6.1676 12.2328 6.72962 13.3177L8.04421 12.3283Z",fill:"#FBBC04"}),(0,a.createElement)("path",{d:"M10.2666 9.27318C10.8312 9.26424 11.3766 9.47114 11.7852 9.84918L12.915 8.75318C12.1986 8.10042 11.2495 7.74205 10.2666 7.75318C8.77018 7.75325 7.40168 8.57187 6.72974 9.86892L8.04432 10.8582C8.35771 9.94838 9.23409 9.27318 10.2666 9.27318Z",fill:"#EA4335"})),j=e=>{let{id:t,...n}=e;return(0,a.createElement)(o.Fill,{name:"woocommerce_payment_gateway_setup_"+t,...n})};j.Slot=e=>{let{id:t,fillProps:n}=e;return(0,a.createElement)(o.Slot,{name:"woocommerce_payment_gateway_setup_"+t,fillProps:n})};const D=e=>{let{id:t,...n}=e;return(0,a.createElement)(o.Fill,{name:"woocommerce_payment_gateway_configure_"+t,...n})};D.Slot=e=>{let{id:t,fillProps:n}=e;return(0,a.createElement)(o.Slot,{name:"woocommerce_payment_gateway_configure_"+t,fillProps:n})};const Z=e=>{let{id:t,...n}=e;return(0,a.createElement)(o.Fill,{name:"woocommerce_onboarding_task_list_item_"+t,...n})};Z.Slot=e=>{let{id:t,fillProps:n}=e;return(0,a.createElement)(o.Slot,{name:"woocommerce_onboarding_task_list_item_"+t,fillProps:n})};const B=e=>{let{id:t,...n}=e;return(0,a.createElement)(o.Fill,{name:"woocommerce_onboarding_task_list_header_"+t,...n})};B.Slot=e=>{let{id:t,fillProps:n}=e;return(0,a.createElement)(o.Slot,{name:"woocommerce_onboarding_task_list_header_"+t,fillProps:n})};var F=n(14599);const z=e=>{let{id:t,...n}=e;return(0,a.createElement)(o.Fill,{name:"woocommerce_onboarding_task_"+t,...n})};z.Slot=e=>{let{id:t,fillProps:n}=e;return(0,a.useEffect)((()=>{(async(e,t)=>{const n=wp.data.select("wc/admin/plugins").getActivePlugins(),o=wp.data.select("wc/admin/plugins").getInstalledPlugins(),r=wp.data.select("wc/admin/plugins").isJetpackConnected()||!1;(0,F.recordEvent)("task_view",{task_name:e,variant:void 0,wcs_installed:o.includes("woocommerce-services"),wcs_active:n.includes("woocommerce-services"),jetpack_installed:o.includes("jetpack"),jetpack_active:n.includes("jetpack"),jetpack_connected:r})})(t)}),[t]),(0,a.createElement)(o.Slot,{name:"woocommerce_onboarding_task_"+t,fillProps:n})};var W=n(61055),U=n.n(W);const G={PH:{"National Capital Region":(0,s.__)("Metro Manila","woocommerce")},IT:{Rome:(0,s.__)("Roma","woocommerce")}},Y=e=>{let{country_short:t,region:n="",city:o=""}=e;if(!t)return null;const r=G[t];if(!r)return null;const a=r[n];if(a)return a;return r[o]||null},Q=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.7;if(!t)return null;let o=null,r=n;const a=Y(t);for(const n of e){if(n.key===t.country_short)return n;if(n.key.split(":")[0]===t.country_short&&n.label.includes("—")){const e=n.label.split("—")[1].trim();if(a===e)return n;if(0===e.localeCompare(t.region||"","en",{sensitivity:"base"})||0===e.localeCompare(t.city||"","en",{sensitivity:"base"}))return n;const i=Math.max(U().compareTwoStrings(e,t.region||""),U().compareTwoStrings(e,t.city||""));i>=r&&(o=n,r=i)}}return o},q=e=>{var t;return null!==(t=null==e?void 0:e.split(":")[0])&&void 0!==t?t:void 0};var J=n(83849),K=n.n(J),X=n(99196);const $=e=>{let{className:t="",percent:n=0,color:o="#674399",bgcolor:r="var(--wp-admin-theme-color)"}=e;const a={backgroundColor:r},i={backgroundColor:o,width:`${n}%`,display:0===n?"none":"inherit"};return(0,X.createElement)("div",{className:`woocommerce-onboarding-progress-bar ${t}`},(0,X.createElement)("div",{className:"woocommerce-onboarding-progress-bar__container",style:a},(0,X.createElement)("div",{className:"woocommerce-onboarding-progress-bar__filler",style:i})))},ee=e=>{let{children:t,className:n}=e;return(0,a.createElement)("div",{className:K()("woocommerce-onboarding-loader",n)},t)};ee.Layout=e=>{let{children:t,className:n}=e;return(0,a.createElement)("div",{className:K()("woocommerce-onboarding-loader-wrapper",n)},(0,a.createElement)("div",{className:K()("woocommerce-onboarding-loader-container",n)},t))},ee.Illustration=e=>{let{children:t}=e;return(0,a.createElement)(a.Fragment,null,t)},ee.Title=e=>{let{children:t,className:n}=e;return(0,a.createElement)("h1",{className:K()("woocommerce-onboarding-loader__title",n)},t)},ee.ProgressBar=e=>{let{progress:t,className:n}=e;return(0,a.createElement)($,{className:K()("progress-bar",n),percent:null!=t?t:0,color:"var(--wp-admin-theme-color)",bgcolor:"#E0E0E0"})},ee.Subtext=e=>{let{children:t,className:n}=e;return(0,a.createElement)("p",{className:K()("woocommerce-onboarding-loader__paragraph",n)},t)},ee.Sequence=e=>{let{interval:t,shouldLoop:n=!0,children:o,onChange:r=(()=>{})}=e;const[i,s]=(0,a.useState)(0),l=a.Children.count(o);(0,a.useEffect)((()=>{const e=setInterval((()=>{s((t=>{const o=t+1;if(n){const e=o%l;return r(e),e}return oclearInterval(e)}),[t,o,n,l]);const c=a.Children.toArray(o)[i];return(0,a.createElement)(a.Fragment,null,c)}},92342:(e,t,n)=>{"use strict";n.d(t,{z:()=>m,T:()=>p});var o=n(69307),r=n(55609),a=n(9818),i=n(65736),s=n(67221),l=n(14599);const c=()=>(0,o.createElement)(o.Fragment,null,(0,o.createElement)("svg",{className:"woocommerce-layout__activity-panel-tab-icon",width:"24",height:"24",viewBox:"3 3 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,o.createElement)("path",{d:"M13.8053 15.3982C13.8053 15.7965 13.4867 16.1947 13.0089 16.1947H6.79646C6.55752 16.1947 6.39823 16.115 6.23894 15.9558C6.07965 15.7965 6 15.6372 6 15.3982V6.79646C6 6.63717 6.15929 6.39823 6.23894 6.23894C6.39823 6.07965 6.55752 6 6.79646 6H13.0089C13.4071 6 13.8053 6.31858 13.8053 6.79646V15.3982Z",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),(0,o.createElement)("path",{d:"M23.9203 10.6195C23.9203 11.0177 23.6017 11.4159 23.1238 11.4159H16.9115C16.6725 11.4159 16.5132 11.3363 16.3539 11.177C16.1946 11.0177 16.115 10.8584 16.115 10.6195V6.79646C16.115 6.39823 16.4336 6 16.9115 6H23.1238C23.5221 6 23.9203 6.31858 23.9203 6.79646V10.6195Z",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),(0,o.createElement)("path",{d:"M13.8053 23.2035C13.8053 23.4424 13.7257 23.6017 13.5664 23.761C13.4071 23.9203 13.2478 23.9999 13.0089 23.9999H6.79646C6.39823 23.9999 6 23.6813 6 23.2035V19.3804C6 19.1415 6.07965 18.9822 6.23894 18.8229C6.39823 18.6636 6.55752 18.584 6.79646 18.584H13.0089C13.4071 18.584 13.8053 18.9026 13.8053 19.3804V23.2035Z",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),(0,o.createElement)("path",{d:"M16.9912 23.9999C16.7522 23.9999 16.5929 23.9202 16.4336 23.7609C16.2743 23.6016 16.1947 23.4423 16.1947 23.2034V14.6016C16.1947 14.3627 16.2743 14.2034 16.4336 14.0441C16.5929 13.8848 16.7522 13.8052 16.9912 13.8052H23.2036C23.4425 13.8052 23.6018 13.8848 23.7611 14.0441C23.9204 14.2034 24 14.3627 24 14.6016V23.2034C24 23.6016 23.6814 23.9999 23.2036 23.9999H16.9912Z",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})),(0,i.__)("Display","woocommerce")),{Fill:m,Slot:u}=(0,r.createSlotFill)("DisplayOptions");m.Slot=u;const d=[{value:"single_column",label:(0,o.createElement)(o.Fragment,null,(0,o.createElement)((()=>(0,o.createElement)("svg",{className:"woocommerce-layout__activity-panel-tab-icon",width:"12",height:"14",viewBox:"0 0 12 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,o.createElement)("rect",{x:"0.5",y:"0.5",width:"11",height:"13",strokeWidth:"1"}))),null),(0,i.__)("Single column","woocommerce"))},{value:"two_columns",label:(0,o.createElement)(o.Fragment,null,(0,o.createElement)((()=>(0,o.createElement)("svg",{className:"woocommerce-layout__activity-panel-tab-icon",width:"18",height:"14",viewBox:"0 0 18 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,o.createElement)("rect",{x:"0.5",y:"0.5",width:"7",height:"13",strokeWidth:"1"}),(0,o.createElement)("rect",{x:"9.5",y:"0.5",width:"7",height:"13",strokeWidth:"1"}))),null),(0,i.__)("Two columns","woocommerce"))}],p=()=>{const{defaultHomescreenLayout:e,taskListComplete:t,isTaskListHidden:n}=(0,a.useSelect)((e=>{const{getOption:t}=e(s.OPTIONS_STORE_NAME),{getTaskList:n}=e(s.ONBOARDING_STORE_NAME),o=n("setup");return{defaultHomescreenLayout:t("woocommerce_default_homepage_layout")||"single_column",taskListComplete:null==o?void 0:o.isComplete,isTaskListHidden:null==o?void 0:o.isHidden}})),{updateUserPreferences:m,homepage_layout:p}=(0,s.useUserPreferences)(),h=t||n||window.wcAdminFeatures.analytics;return(0,o.createElement)(u,null,(t=>0!==t.length||h?(0,o.createElement)(r.DropdownMenu,{icon:(0,o.createElement)(c,null),label:(0,i.__)("Display options","woocommerce"),toggleProps:{className:"woocommerce-layout__activity-panel-tab display-options",onClick:()=>(0,l.recordEvent)("homescreen_display_click")},popoverProps:{className:"woocommerce-layout__activity-panel-popover"}},(n=>{let{onClose:a}=n;return(0,o.createElement)(o.Fragment,null,t,h?(0,o.createElement)(r.MenuGroup,{className:"woocommerce-layout__homescreen-display-options",label:(0,i.__)("Layout","woocommerce")},(0,o.createElement)(r.MenuItemsChoice,{choices:d,onSelect:e=>{m({homepage_layout:e}),a(),(0,l.recordEvent)("homescreen_display_option",{display_option:e})},value:p||e})):null)})):null))}},30554:(e,t,n)=>{"use strict";n.d(t,{$Q:()=>w,vn:()=>H});var o=n(69307),r=n(65736),a=n(14812),i=n(14599),s=n(86020),l=n(9818),c=n(67221),m=n(70444);const u=(0,o.createElement)(m.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,o.createElement)(m.Path,{d:"M18 4H6c-1.1 0-2 .9-2 2v12.9c0 .6.5 1.1 1.1 1.1.3 0 .5-.1.8-.3L8.5 17H18c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 11c0 .3-.2.5-.5.5H7.9l-2.4 2.4V6c0-.3.2-.5.5-.5h12c.3 0 .5.2.5.5v9z"}));var d=n(89015),p=n(34200),h=n(55609),C=n(10431),g=n(22983),f=n(14138);const y=()=>(0,o.createElement)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,o.createElement)("path",{d:"M0 0h24v24H0z",fill:"none"}),(0,o.createElement)("path",{d:"M12 22c1.1 0 2-.9 2-2h-4c0 1.1.9 2 2 2zm6-6v-5c0-3.07-1.63-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.64 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2zm-2 1H8v-6c0-2.48 1.51-4.5 4-4.5s4 2.02 4 4.5v6z"})),w="AbbreviatedNotification",H=e=>{let{thingsToDoNextCount:t}=e;const{ordersToProcessCount:n,reviewsToModerateCount:m,stockNoticesCount:H,isSetupTaskListHidden:_,isExtendedTaskListHidden:v}=(0,l.useSelect)((e=>{var t,n;const{getTaskList:o}=e(c.ONBOARDING_STORE_NAME),r=(0,g.sg)(e);return{ordersToProcessCount:(0,g.xX)(e,r),reviewsToModerateCount:(0,f.Vh)(e),stockNoticesCount:(0,g.ae)(e),isSetupTaskListHidden:null===(t=o("setup"))||void 0===t?void 0:t.isHidden,isExtendedTaskListHidden:null===(n=o("extended"))||void 0===n?void 0:n.isHidden}})),E=e=>{(0,i.recordEvent)("activity_panel_click",{task:e})},{Slot:L}=(0,h.createSlotFill)(w),b=(0,C.isWCAdmin)();return(0,o.createElement)("div",{className:"woocommerce-abbreviated-notifications"},t>0&&!v&&(0,o.createElement)(s.AbbreviatedCard,{className:"woocommerce-abbreviated-notification",icon:(0,o.createElement)(y,null),href:"admin.php?page=wc-admin#extended_task_list",onClick:()=>E("thingsToDoNext"),type:b?"wc-admin":"wp-admin"},(0,o.createElement)(a.Text,{as:"h3"},(0,r.__)("Things to do next","woocommerce")),(0,o.createElement)(a.Text,{as:"p"},(0,r.sprintf)((0,r._n)("You have %d new thing to do","You have %d new things to do",t,"woocommerce"),t))),n>0&&_&&(0,o.createElement)(s.AbbreviatedCard,{className:"woocommerce-abbreviated-notification",icon:d.Z,href:"admin.php?page=wc-admin&opened_panel=orders-panel",onClick:()=>E("ordersToProcess"),type:b?"wc-admin":"wp-admin"},(0,o.createElement)(a.Text,{as:"h3"},(0,r.__)("Orders to fulfill","woocommerce")),(0,o.createElement)(a.Text,null,(0,r.sprintf)((0,r._n)("You have %d order to fulfill","You have %d orders to fulfill",n,"woocommerce"),n))),m>0&&_&&(0,o.createElement)(s.AbbreviatedCard,{className:"woocommerce-abbreviated-notification",icon:u,href:"admin.php?page=wc-admin&opened_panel=reviews-panel",onClick:()=>E("reviewsToModerate"),type:b?"wc-admin":"wp-admin"},(0,o.createElement)(a.Text,{as:"h3"},(0,r.__)("Reviews to moderate","woocommerce")),(0,o.createElement)(a.Text,null,(0,r.sprintf)((0,r._n)("You have %d review to moderate","You have %d reviews to moderate",m,"woocommerce"),m))),H>0&&_&&(0,o.createElement)(s.AbbreviatedCard,{className:"woocommerce-abbreviated-notification",icon:p.Z,href:"admin.php?page=wc-admin&opened_panel=stock-panel",onClick:()=>E("stockNotices"),type:b?"wc-admin":"wp-admin"},(0,o.createElement)(a.Text,{as:"h3"},(0,r.__)("Inventory to review","woocommerce")),(0,o.createElement)(a.Text,null,(0,r.__)("You have inventory to review and update","woocommerce"))),!v&&(0,o.createElement)(L,null))}},18210:(e,t,n)=>{"use strict";n.d(t,{Z:()=>y});var o=n(65736),r=n(92694),a=n(69307),i=n(73463);const s=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(3994)]).then(n.bind(n,38304)))),l=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(8758),n.e(6824)]).then(n.bind(n,57267)))),c=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(8758),n.e(9456)]).then(n.bind(n,62365)))),m=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(9616),n.e(3576)]).then(n.bind(n,9033)))),u=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(8758),n.e(185)]).then(n.bind(n,95084)))),d=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(4011)]).then(n.bind(n,15523)))),p=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(9792)]).then(n.bind(n,88414)))),h=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(4854)]).then(n.bind(n,54536)))),C=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(2502)]).then(n.bind(n,51734)))),g=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(3700)]).then(n.bind(n,60455)))),f=(0,i.O3)("manageStock","no"),y=()=>{const e=[{report:"revenue",title:(0,o.__)("Revenue","woocommerce"),component:s,navArgs:{id:"woocommerce-analytics-revenue"}},{report:"products",title:(0,o.__)("Products","woocommerce"),component:l,navArgs:{id:"woocommerce-analytics-products"}},{report:"variations",title:(0,o.__)("Variations","woocommerce"),component:c,navArgs:{id:"woocommerce-analytics-variations"}},{report:"orders",title:(0,o.__)("Orders","woocommerce"),component:m,navArgs:{id:"woocommerce-analytics-orders"}},{report:"categories",title:(0,o.__)("Categories","woocommerce"),component:u,navArgs:{id:"woocommerce-analytics-categories"}},{report:"coupons",title:(0,o.__)("Coupons","woocommerce"),component:d,navArgs:{id:"woocommerce-analytics-coupons"}},{report:"taxes",title:(0,o.__)("Taxes","woocommerce"),component:p,navArgs:{id:"woocommerce-analytics-taxes"}},"yes"===f?{report:"stock",title:(0,o.__)("Stock","woocommerce"),component:C,navArgs:{id:"woocommerce-analytics-stock"}}:null,{report:"customers",title:(0,o.__)("Customers","woocommerce"),component:g},{report:"downloads",title:(0,o.__)("Downloads","woocommerce"),component:h,navArgs:{id:"woocommerce-analytics-downloads"}}].filter(Boolean);return(0,r.applyFilters)("woocommerce_admin_reports_list",e)}},49850:(e,t,n)=>{"use strict";n.d(t,{ex:()=>u,vc:()=>g});var o=n(69307),r=n(65736),a=n(92694),i=n(75283),s=n(86020),l=n(67221),c=n(81921);var m=n(73463);const u=["processing","on-hold"],d=["completed","processing","refunded","cancelled","failed","pending","on-hold"],p=Object.keys(m.rq).filter((e=>"refunded"!==e)).map((e=>({value:e,label:m.rq[e],description:(0,r.sprintf)((0,r.__)("Exclude the %s status from reports","woocommerce"),m.rq[e])}))),h=(0,m.O3)("unregisteredOrderStatuses",{}),C=[{key:"defaultStatuses",options:p.filter((e=>d.includes(e.value)))},{key:"customStatuses",label:(0,r.__)("Custom Statuses","woocommerce"),options:p.filter((e=>!d.includes(e.value)))},{key:"unregisteredStatuses",label:(0,r.__)("Unregistered Statuses","woocommerce"),options:Object.keys(h).map((e=>({value:e,label:e,description:(0,r.sprintf)((0,r.__)("Exclude the %s status from reports","woocommerce"),e)})))}],g=(0,a.applyFilters)("woocommerce_admin_analytics_settings",{woocommerce_excluded_report_order_statuses:{label:(0,r.__)("Excluded statuses:","woocommerce"),inputType:"checkboxGroup",options:C,helpText:(0,i.Z)({mixedString:(0,r.__)("Orders with these statuses are excluded from the totals in your reports. The {{strong}}Refunded{{/strong}} status can not be excluded.","woocommerce"),components:{strong:(0,o.createElement)("strong",null)}}),defaultValue:["pending","cancelled","failed"]},woocommerce_actionable_order_statuses:{label:(0,r.__)("Actionable statuses:","woocommerce"),inputType:"checkboxGroup",options:C,helpText:(0,r.__)("Orders with these statuses require action on behalf of the store admin. These orders will show up in the Home Screen - Orders task.","woocommerce"),defaultValue:u},woocommerce_default_date_range:{name:"woocommerce_default_date_range",label:(0,r.__)("Default date range:","woocommerce"),inputType:"component",component:e=>{let{value:t,onChange:n}=e;const{wcAdminSettings:r}=(0,l.useSettings)("wc_admin",["wcAdminSettings"]),{woocommerce_default_date_range:a}=r,i=Object.fromEntries(new URLSearchParams(t.replace(/&/g,"&"))),{period:m,compare:u,before:d,after:p}=(0,c.getDateParamsFromQuery)(i,a),{primary:h,secondary:C}=(0,c.getCurrentDates)(i,a),g={period:m,compare:u,before:d,after:p,primaryDate:h,secondaryDate:C};return(0,o.createElement)(s.DateRangeFilterPicker,{query:i,onRangeSelect:e=>{n({target:{name:"woocommerce_default_date_range",value:new URLSearchParams(e).toString()}})},dateQuery:g,isoDateFormat:c.isoDateFormat})},helpText:(0,r.__)("Select a default date range. When no range is selected, reports will be viewed by the default date range.","woocommerce"),defaultValue:"period=month&compare=previous_year"},woocommerce_date_type:{name:"woocommerce_date_type",label:(0,r.__)("Date type:","woocommerce"),inputType:"select",options:[{label:(0,r.__)("Select a date type","woocommerce"),value:"",disabled:!0},{label:(0,r.__)("Date created","woocommerce"),value:"date_created",key:"date_created"},{label:(0,r.__)("Date paid","woocommerce"),value:"date_paid",key:"date_paid"},{label:(0,r.__)("Date completed","woocommerce"),value:"date_completed",key:"date_completed"}],helpText:(0,r.__)("Database date field considered for Revenue and Orders reports","woocommerce")}})},64214:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var o=n(69307),r=n(65736),a=n(55609),i=n(94333),s=n(7862),l=n.n(s),c=n(9818),m=n(67221);class u extends o.Component{constructor(e){super(e),this.state={isAwaitingRedirect:!1,isRedirecting:!1},this.connectJetpack=this.connectJetpack.bind(this),e.setIsPending(!1)}componentDidUpdate(e){const{createNotice:t,error:n,onError:o,isRequesting:r}=this.props;n&&n!==e.error&&(o&&o(),t("error",n)),!this.state.isAwaitingRedirect||this.state.isRedirecting||r||n||this.setState({isRedirecting:!0},(()=>{window.location=this.props.jetpackAuthUrl}))}connectJetpack(){const{onConnect:e}=this.props;e&&e(),this.setState({isAwaitingRedirect:!0})}render(){const{error:e,onSkip:t,skipText:n,onAbort:i,abortText:s}=this.props;return(0,o.createElement)(o.Fragment,null,e?(0,o.createElement)(a.Button,{isPrimary:!0,onClick:()=>window.location.reload()},(0,r.__)("Retry","woocommerce")):(0,o.createElement)(a.Button,{isBusy:this.state.isAwaitingRedirect,isPrimary:!0,onClick:this.connectJetpack},(0,r.__)("Connect","woocommerce")),t&&(0,o.createElement)(a.Button,{onClick:t},n||(0,r.__)("No thanks","woocommerce")),i&&(0,o.createElement)(a.Button,{onClick:i},s||(0,r.__)("Abort","woocommerce")))}}u.propTypes={createNotice:l().func.isRequired,error:l().string,isRequesting:l().bool,jetpackAuthUrl:l().string,onConnect:l().func,onError:l().func,onSkip:l().func,redirectUrl:l().string,skipText:l().string,setIsPending:l().func,onAbort:l().func,abortText:l().string},u.defaultProps={setIsPending:()=>{}};const d=(0,i.compose)((0,c.withSelect)(((e,t)=>{var n;const{getJetpackAuthUrl:o,isResolving:a}=e(m.ONBOARDING_STORE_NAME),i={redirectUrl:t.redirectUrl||window.location.href,from:"woocommerce-services"},s=o(i),l=a("getJetpackAuthUrl",[i]);let c;return a||s||(c=(0,r.__)("Error requesting connection URL.","woocommerce")),null!=s&&null!==(n=s.errors)&&void 0!==n&&n.length&&(c=null==s?void 0:s.errors[0]),{error:c,isRequesting:l,jetpackAuthUrl:s.url}})),(0,c.withDispatch)((e=>{const{createNotice:t}=e("core/notices");return{createNotice:t}})))(u)},11891:(e,t,n)=>{"use strict";n.d(t,{IO:()=>g,Yt:()=>p});var o=n(5267),r=n(69307),a=n(65736),i=n(67221),s=n(22629),l=n(92819),c=n(86020),m=n(55609),u=n(9818);const d=["addressLine1","addressLine2","city","countryState","postCode"];function p(){return e=>{const t={};return e.countryState.trim().length||(t.countryState=(0,a.__)("Please select a country / region","woocommerce")),t}}const h=e=>e.replace(/\s/g,"").toLowerCase(),C=(e,t)=>n=>{const o=e?n.key.split(":"):n.label.split("—");if(o.length<=1)return!1;const r=o[1];if(r.includes("/")){const e=r.split("/");return h(e[0])===t||h(e[1])===t}if(r.includes("(")&&r.includes(")")){const e=r.replace(")","").split("(");return h(e[0])===t||h(e[1])===t}return h(r)===t};function g(e){var t,n,p,g,f,y;let{getInputProps:w,setValue:H}=e;const _=w("countryState").value,{locale:v,hasFinishedResolution:E,countries:L,loadingCountries:b}=(0,u.useSelect)((e=>{const{getLocale:t,getCountries:n,hasFinishedResolution:o}=e(i.COUNTRIES_STORE_NAME);return{locale:t(_),countries:n(),loadingCountries:!o("getCountries"),hasFinishedResolution:o("getLocales")}})),k=(0,r.useMemo)((()=>function(e){return e.reduce(((e,t)=>{if(!t.states.length)return e.push({key:t.code,label:(0,s.decodeEntities)(t.name)}),e;const n=t.states.map((e=>({key:t.code+":"+e.code,label:(0,s.decodeEntities)(t.name)+" — "+(0,s.decodeEntities)(e.name)})));return e.push(...n),e}),[])}(L)),[L]),S=function(e,t,n){const[o,a]=(0,r.useState)(""),[i,s]=(0,r.useState)(""),c=(0,r.useRef)();return(0,r.useEffect)((()=>{if(!c.current){const n=e.find((e=>e.key===t)),r=n?n.label.split(/\u2013|\u2014|\-/):[],l=(r[0]||"").trim(),c=(r[1]||"").trim();l===o&&c===i||(a(l),s(c))}c.current=!1}),[t,e]),(0,r.useEffect)((()=>{if(void 0===c.current)return;if(!o&&!i&&t)return c.current=!0,void n("countryState","");const r=new RegExp((0,l.escapeRegExp)(o),"i"),a=o.length<3,s=i.length<3&&!!i.match(/^[\w]+$/);let m=[];o.length&&i.length?(m=e.filter((e=>r.test(a?e.key:e.label))),m.length||(m=[...e]),m.length>1&&(m=m.filter(C(s,h(i))))):o.length?m=e.filter((e=>r.test(a?e.key:e.label))):i.length&&(m=e.filter(C(s,h(i)))),1===m.length&&t!==m[0].key&&(c.current=!0,n("countryState",m[0].key))}),[o,i,e,n]),(0,r.createElement)(r.Fragment,null,(0,r.createElement)("input",{onChange:e=>a(e.target.value),value:o,name:"country",type:"text",className:"woocommerce-select-control__autofill-input",tabIndex:-1,autoComplete:"country"}),(0,r.createElement)("input",{onChange:e=>s(e.target.value),value:i,name:"state",type:"text",className:"woocommerce-select-control__autofill-input",tabIndex:-1,autoComplete:"address-level1"}))}(k,_,H);return(0,r.useEffect)((()=>{v&&d.forEach((e=>{var t,n;const o=e.replace(/(address)Line([0-9])/,"$1$2").toLowerCase(),r=w(e);var a;a=o,v.hasOwnProperty(a)&&null!==(t=v[o])&&void 0!==t&&t.hidden&&(null===(n=r.value)||void 0===n?void 0:n.length)>0&&H(e,"")}))}),[_,v]),!E||b?(0,r.createElement)(m.Spinner,null):(0,r.createElement)("div",{className:"woocommerce-store-address-fields"},(0,r.createElement)(c.SelectControl,(0,o.Z)({label:(0,a.__)("Country / Region","woocommerce")+" *",required:!0,autoComplete:"new-password",getSearchExpression:e=>new RegExp("(^"+e+"| — ("+e+"))","i"),options:k,excludeSelectedOptions:!1,showAllOnFocus:!0,isSearchable:!0},w("countryState"),{controlClassName:w("countryState").className}),S),!(null!=v&&null!==(t=v.address_1)&&void 0!==t&&t.hidden)&&(0,r.createElement)(c.TextControl,(0,o.Z)({label:(null==v||null===(n=v.address_1)||void 0===n?void 0:n.label)||(0,a.__)("Address","woocommerce"),autoComplete:"address-line1"},w("addressLine1"))),!(null!=v&&null!==(p=v.postcode)&&void 0!==p&&p.hidden)&&(0,r.createElement)(c.TextControl,(0,o.Z)({label:(null==v||null===(g=v.postcode)||void 0===g?void 0:g.label)||(0,a.__)("Post code","woocommerce"),autoComplete:"postal-code"},w("postCode"))),!(null!=v&&null!==(f=v.city)&&void 0!==f&&f.hidden)&&(0,r.createElement)(c.TextControl,(0,o.Z)({label:(null==v||null===(y=v.city)||void 0===y?void 0:y.label)||(0,a.__)("City","woocommerce")},w("city"),{autoComplete:"address-level2"})))}},82580:(e,t,n)=>{"use strict";n.d(t,{jt:()=>l,so:()=>a,w:()=>i}),n(22629);var o=n(92819),r=n(73463);function a(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e?e.split(":")[0]:null}function i(e){let t=a(e);const n=(0,o.without)((0,r.O3)("onboarding",{euCountries:[]}).euCountries,"GB");return null!==t&&n.includes(t)&&(t="EU"),t}function s(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0;const r=[];if(!o)return r;const a=e.product_types||[];return a.forEach((e=>{o[e]&&o[e].product&&(t||!n.includes(o[e].slug))&&r.push(o[e])})),r}function l(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3?arguments[3]:void 0;const r=s(t,n,o,e),a=r.map((e=>e.id||e.product));return a}},22983:(e,t,n)=>{"use strict";n.d(t,{Ox:()=>s,ae:()=>l,sg:()=>i,xX:()=>a});var o=n(67221),r=n(49850);function a(e,t){const{getItemsTotalCount:n,getItemsError:r,isResolving:a}=e(o.ITEMS_STORE_NAME);if(!t.length)return 0;const i={page:1,per_page:1,status:t,_fields:["id"]},s=n("orders",i,null),l=Boolean(r("orders",i)),c=a("getItemsTotalCount",["orders",i,null]);return l||c?null:s}function i(e){const{getSetting:t}=e(o.SETTINGS_STORE_NAME),{woocommerce_actionable_order_statuses:n=r.ex}=t("wc_admin","wcAdminSettings",{});return n}const s={status:"publish"};function l(e){const{getItemsTotalCount:t,getItemsError:n,isResolving:r}=e(o.ITEMS_STORE_NAME),a=null,i=t("products/count-low-in-stock",s,a),l=Boolean(n("products/count-low-in-stock",s)),c=r("getItemsTotalCount",["products/count-low-in-stock",s,a]);return l||c&&i===a?null:i}},14138:(e,t,n)=>{"use strict";n.d(t,{Vh:()=>i,X6:()=>r,wY:()=>a});var o=n(67221);const r=5,a={page:1,per_page:1,status:"hold",_embed:1,_fields:["id"]};function i(e){const{getReviewsTotalCount:t,getReviewsError:n,isResolving:r}=e(o.REVIEWS_STORE_NAME),i=t(a),s=Boolean(n(a)),l=r("getReviewsTotalCount",[a]);return s||l&&void 0===i?null:i}},23322:(e,t,n)=>{"use strict";n.d(t,{fs:()=>i,kS:()=>s,r7:()=>m});var o=n(92819),r=n(49248),a=n.n(r);function i(e,t){return(0,o.filter)(e,(e=>{const{is_deleted:n,date_created_gmt:o,status:r}=e;if(!n)return(!t||!o||new Date(o+"Z").getTime()>t)&&"unactioned"===r})).length}function s(e){return(0,o.filter)(e,(e=>{const{is_deleted:t}=e;return!t})).length>0}const l=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:" ",o=e.slice(0,t);if(e.indexOf(n,t)!==t){const e=o.lastIndexOf(n);e>-1&&(o=o.slice(0,e))}return o.join("")},c=(e,t)=>{const n=document.createElement("div"),o=Array.from(e.childNodes),r=new(a());let i=0;for(let e=0;e{const n=document.createElement("div"),o=new(a());return n.innerHTML=e,o.splitGraphemes(n.textContent).length>t?c(n,t).innerHTML+"...":e}},74816:(e,t,n)=>{"use strict";n.d(t,{E:()=>s});var o=n(69307),r=n(65736),a=n(55609),i=n(14812);const s=()=>(0,o.createElement)("div",{className:"woocommerce-layout__no-match"},(0,o.createElement)(a.Card,null,(0,o.createElement)(a.CardBody,null,(0,o.createElement)(i.Text,null,(0,r.__)("Sorry, you are not allowed to access this page.","woocommerce")))))},25753:(e,t,n)=>{"use strict";n.d(t,{C:()=>a});var o=n(96483),r=n(74617);const a=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{pathname:n,search:a}=window.location,i=(0,r.getSetting)("connectNonce","");return t={"wccom-site":(0,r.getSetting)("siteUrl"),"wccom-back":n+a,"wccom-woo-version":(0,r.getSetting)("wcVersion"),"wccom-connect-nonce":i,...t},(0,o.addQueryArgs)(e,t)}},34704:(e,t,n)=>{"use strict";n.d(t,{a:()=>r});var o=n(9818);function r(e){const{createNotice:t}=(0,o.dispatch)("core/notices");e.error_data&&e.errors&&Object.keys(e.errors).length?Object.keys(e.errors).forEach((n=>{t("error",e.errors[n].join(" "))})):e.message&&t(e.code?"error":"success",e.message)}},32008:(e,t,n)=>{"use strict";n.d(t,{ZP:()=>i});var o=n(74944);const r=["a","b","em","i","strong","p","br"],a=["target","href","rel","name","download"],i=e=>({__html:(0,o.sanitize)(e,{ALLOWED_TAGS:r,ALLOWED_ATTR:a})})},90523:(e,t,n)=>{"use strict";n.d(t,{j:()=>o});const o=e=>e&&1===e.filter((e=>0===e.id.indexOf("woocommerce_payments"))).length},74693:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});var o=n(69307);const r=()=>(0,o.createElement)("svg",{width:"16",height:"17",viewBox:"0 0 16 17",xmlns:"http://www.w3.org/2000/svg"},(0,o.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.68822 12.625L1.5 13.8145L1.5 1.5L14.5 1.5L14.5 12.625L2.68822 12.625ZM3.31 14.125L15 14.125C15.5523 14.125 16 13.6773 16 13.125L16 1C16 0.447717 15.5523 0 15 0H1C0.447717 0 0 0.447716 0 1V15.5247C0 15.8173 0.161234 16.086 0.419354 16.2237C0.727111 16.3878 1.10601 16.3313 1.35252 16.0845L3.31 14.125ZM12 5.99997H4V4.49997H12V5.99997ZM4 9.99997H9V8.49997H4V9.99997Z",fill:"currentColor"}))},3816:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var o=n(69307),r=n(65736),a=n(94333),i=n(9818),s=n(75283),l=n(55609),c=n(86020),m=n(67221),u=n(73516);class d extends o.Component{constructor(e){super(e),this.state={isLoadingScripts:!1,isRequestStarted:!1,selectedAction:null}}async componentDidUpdate(e,t){const{hasErrors:n,isRequesting:o,onClose:a,onContinue:i,createNotice:s}=this.props,{isLoadingScripts:l,isRequestStarted:c}=this.state;if(!c)return;const m=!o&&!l&&(e.isRequesting||t.isLoadingScripts)&&!n,u=!o&&e.isRequesting&&n;m&&(a(),i()),u&&(s("error",(0,r.__)("There was a problem updating your preferences","woocommerce")),a())}updateTracking(e){let{allowTracking:t}=e;const{updateOptions:n}=this.props;t&&"function"==typeof window.wcTracks.enable?(this.setState({isLoadingScripts:!0}),window.wcTracks.enable((()=>{this._isMounted&&((0,u.initializeExPlat)(),this.setState({isLoadingScripts:!1}))}))):t||(window.wcTracks.isEnabled=!1);const o=t?"yes":"no";this.setState({isRequestStarted:!0}),n({woocommerce_allow_tracking:o})}componentDidMount(){this._isMounted=!0}componentWillUnmount(){this._isMounted=!1}render(){const{allowTracking:e,isResolving:t,onClose:n,onContinue:a}=this.props;if(t)return null;if(e)return n(),a(),null;const{isRequesting:i,title:m=(0,r.__)("Build a better WooCommerce","woocommerce"),message:u=(0,s.Z)({mixedString:(0,r.__)("Get improved features and faster fixes by sharing non-sensitive data via {{link}}usage tracking{{/link}} that shows us how WooCommerce is used. No personal data is tracked or stored.","woocommerce"),components:{link:(0,o.createElement)(c.Link,{href:"https://woo.com/usage-tracking?utm_medium=product",target:"_blank",type:"external"})}}),dismissActionText:d=(0,r.__)("No thanks","woocommerce"),acceptActionText:p=(0,r.__)("Yes, count me in!","woocommerce")}=this.props,{isRequestStarted:h,selectedAction:C}=this.state,g=h&&i;return(0,o.createElement)(l.Modal,{title:m,isDismissible:this.props.isDismissible,onRequestClose:()=>this.props.onClose(),className:"woocommerce-usage-modal"},(0,o.createElement)("div",{className:"woocommerce-usage-modal__wrapper"},(0,o.createElement)("div",{className:"woocommerce-usage-modal__message"},u),(0,o.createElement)("div",{className:"woocommerce-usage-modal__actions"},(0,o.createElement)(l.Button,{isSecondary:!0,isBusy:g&&"dismiss"===C,disabled:g&&"accept"===C,onClick:()=>{this.setState({selectedAction:"dismiss"}),this.updateTracking({allowTracking:!1})}},d),(0,o.createElement)(l.Button,{isPrimary:!0,isBusy:g&&"accept"===C,disabled:g&&"dismiss"===C,onClick:()=>{this.setState({selectedAction:"accept"}),this.updateTracking({allowTracking:!0})}},p))))}}const p=(0,a.compose)((0,i.withSelect)((e=>{const{getOption:t,getOptionsUpdatingError:n,isOptionsUpdating:o,hasFinishedResolution:r}=e(m.OPTIONS_STORE_NAME);return{allowTracking:"yes"===t("woocommerce_allow_tracking"),isRequesting:Boolean(o()),isResolving:!r("getOption",["woocommerce_allow_tracking"])||void 0===t("woocommerce_allow_tracking"),hasErrors:Boolean(n())}})),(0,i.withDispatch)((e=>{const{createNotice:t}=e("core/notices"),{updateOptions:n}=e(m.OPTIONS_STORE_NAME);return{createNotice:t,updateOptions:n}})))(d)},36437:(e,t,n)=>{"use strict";n.d(t,{O:()=>l});var o=n(69307),r=n(14812),a=n(75283),i=n(65736),s=n(86020);const l=e=>{let{buttonText:t}=e;return(0,o.createElement)(r.Text,{variant:"caption",className:"woocommerce-task__caption is-tos",size:"12",lineHeight:"16px",style:{display:"block"}},(0,a.Z)({mixedString:(0,i.sprintf)((0,i.__)('By clicking "%s," you agree to our {{tosLink}}Terms of Service{{/tosLink}} and have read our {{privacyPolicyLink}}Privacy Policy{{/privacyPolicyLink}}.',"woocommerce"),t),components:{tosLink:(0,o.createElement)(s.Link,{href:"https://wordpress.com/tos/",target:"_blank",type:"external"},(0,o.createElement)(o.Fragment,null)),privacyPolicyLink:(0,o.createElement)(s.Link,{href:"https://automattic.com/privacy/",target:"_blank",type:"external"},(0,o.createElement)(o.Fragment,null))}}))}},52260:(e,t,n)=>{"use strict";n.r(t),n.d(t,{UsageModal:()=>c,default:()=>m});var o=n(69307),r=n(65736),a=n(10431),i=n(75283),s=n(86020),l=n(3816);const c=()=>{const e="1"===(0,a.getQuery)()["wcpay-connection-success"],[t,n]=(0,o.useState)(e);if(!t)return null;const c=()=>{n(!1),(0,a.updateQueryString)({"wcpay-connection-success":void 0})},m=(0,r.__)("Help us build a better WooPayments experience","woocommerce"),u=(0,i.Z)({mixedString:(0,r.__)("By agreeing to share non-sensitive {{link}}usage data{{/link}}, you’ll help us improve features and optimize the WooPayments experience. You can opt out at any time.","woocommerce"),components:{link:(0,o.createElement)(s.Link,{href:"https://woo.com/usage-tracking?utm_medium=product",target:"_blank",type:"external"})}});return(0,o.createElement)(l.Z,{isDismissible:!1,title:m,message:u,acceptActionText:(0,r.__)("I agree","woocommerce"),dismissActionText:(0,r.__)("No thanks","woocommerce"),onContinue:c,onClose:c})},m=c},67097:(e,t,n)=>{"use strict";n.d(t,{L:()=>i});var o=n(69307),r=n(83849),a=n.n(r);const i=e=>{let{logo:t,description:n,layout:r="single",features:i,children:s}=e;return(0,o.createElement)("div",{className:a()("woocommerce-task-shipping-recommendation__plugins-install",r)},t&&(0,o.createElement)("div",{className:"plugins-install__plugin-banner-image"},(0,o.createElement)("img",{src:t.image,alt:null==t?void 0:t.alt})),n&&(0,o.createElement)("p",null,n),(0,o.createElement)("div",{className:"plugins-install__list"},i.map(((e,t)=>(0,o.createElement)("div",{className:"plugins-install__list-item",key:t},(0,o.createElement)("div",{className:"plugins-install__list-icon"},(0,o.createElement)("img",{src:e.icon,alt:""})),(0,o.createElement)("div",null,e.title&&(0,o.createElement)("div",null,(0,o.createElement)("strong",null,e.title)),(0,o.createElement)("div",null,e.description)))))),s)}},58670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u,z:()=>m});var o=n(69307),r=n(65736),a=n(55609),i=n(67221),s=n(86020),l=n(9818),c=n(11891);const m=e=>(0,c.Yt)()(e),u=e=>{let{onComplete:t,createNotice:n,isSettingsRequesting:u,updateAndPersistSettingsForGroup:d,settings:p,buttonText:h=(0,r.__)("Continue","woocommerce"),validate:C=m}=e;const{hasFinishedResolution:g}=(0,l.useSelect)((e=>{const t=e(i.COUNTRIES_STORE_NAME);return t.getCountries(),{getLocale:t.getLocale,locales:t.getLocales(),hasFinishedResolution:t.hasFinishedResolution("getLocales")&&t.hasFinishedResolution("getCountries")}})),[f,y]=(0,o.useState)(!1);return u||!g?(0,o.createElement)(s.Spinner,null):(0,o.createElement)(s.Form,{initialValues:{addressLine1:(null==p?void 0:p.woocommerce_store_address)||"",addressLine2:(null==p?void 0:p.woocommerce_store_address_2)||"",city:(null==p?void 0:p.woocommerce_store_city)||"",countryState:(null==p?void 0:p.woocommerce_default_country)||"",postCode:(null==p?void 0:p.woocommerce_store_postcode)||""},onSubmit:async e=>{y(!0);try{await d("general",{general:{...p,woocommerce_store_address:e.addressLine1,woocommerce_store_address_2:e.addressLine2,woocommerce_default_country:e.countryState,woocommerce_store_city:e.city,woocommerce_store_postcode:e.postCode}}),y(!1),t(e)}catch(e){y(!1),n("error",(0,r.__)("There was a problem saving your store location","woocommerce"))}},validate:C},(e=>{let{getInputProps:t,handleSubmit:n,setValue:r}=e;return(0,o.createElement)(o.Fragment,null,(0,o.createElement)(c.IO,{getInputProps:t,setValue:r}),(0,o.createElement)(a.Button,{isPrimary:!0,onClick:n,isBusy:f},h))}))}},33414:(e,t,n)=>{"use strict";n.d(t,{AO:()=>a,_9:()=>i,c7:()=>r});var o=n(74617);const r=["woocommerce-services"],a=e=>{const{woocommerce_store_address:t,woocommerce_default_country:n,woocommerce_store_postcode:o}=e;return Boolean(t&&n&&o)},i=()=>{window.location.href=(0,o.getAdminLink)("admin.php?page=wc-settings&tab=tax§ion=standard&wc_onboarding_active_task=tax")}},20929:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ProgressTitle:()=>Tt,TaskLists:()=>Et,TasksPlaceholder:()=>Ht,TasksReminderBar:()=>St,useActiveSetupTasklist:()=>At});var o=n(73463);const r=(0,o.O3)("onboarding");var a=n(69307),i=n(65736),s=n(9818),l=n(67221),c=n(14599),m=n(98817),u=n(72456),d=n(10431),p=n(55609),h=n(72672),C=n(83849),g=n.n(C),f=n(86020),y=n(14812),w=n(34374);const H=e=>{let{hasSetup:t=!1,needsSetup:n=!0,id:o,isEnabled:r=!1,isLoading:s=!1,isInstalled:l=!1,isRecommended:m=!1,hasPlugins:u,manageUrl:h=null,markConfigured:C,onSetUp:g=(()=>{}),onSetupCallback:f,setupButtonText:y=(0,i.__)("Get started","woocommerce"),externalLink:H=null}=e;const[_,v]=(0,a.useState)(!1),E="woocommerce-task-payment__action";if(s)return(0,a.createElement)(p.Spinner,null);const L=async()=>{if(g(o),(0,c.recordEvent)("tasklist_payment_setup",{selected:(0,w.br)(o)}),u||!H)return f?(v(!0),void await new Promise(f).then((()=>{v(!1)})).catch((()=>{v(!1)}))):void(0,d.updateQueryString)({id:o});window.location.href=H},b=()=>(0,a.createElement)(p.Button,{className:E,isSecondary:!0,role:"button",href:h,onClick:()=>(0,c.recordEvent)("tasklist_payment_manage",{id:o})},(0,i.__)("Manage","woocommerce")),k=()=>(0,a.createElement)(p.Button,{className:E,isPrimary:m,isSecondary:!m,isBusy:_,disabled:_,onClick:()=>L()},y),S=()=>(0,a.createElement)(p.Button,{className:E,isSecondary:!0,onClick:()=>C(o)},(0,i.__)("Enable","woocommerce"));return t?u?n?l&&u?(0,a.createElement)(p.Button,{className:E,isPrimary:m,isSecondary:!m,isBusy:_,disabled:_,onClick:()=>L()},(0,i.__)("Finish setup","woocommerce")):(0,a.createElement)(k,null):r?(0,a.createElement)(b,null):(0,a.createElement)(S,null):r?(0,a.createElement)(b,null):(0,a.createElement)(k,null):r?(0,a.createElement)(b,null):(0,a.createElement)(S,null)};var _=n(67630);const v=e=>{var t,n;let{isRecommended:o,markConfigured:r,paymentGateway:s}=e;const{image_72x72:l,content:c,id:m,plugins:d=[],title:h,loading:C,enabled:w=!1,installed:v=!1,needsSetup:E=!0,requiredSettings:L,settingsUrl:b,is_local_partner:k,external_link:S,transaction_processors:M}=s,N=(0,y.useSlot)(`woocommerce_payment_gateway_configure_${m}`),x=(0,y.useSlot)(`woocommerce_payment_gateway_setup_${m}`),T=Boolean(null==N||null===(t=N.fills)||void 0===t?void 0:t.length)||Boolean(null==x||null===(n=x.fills)||void 0===n?void 0:n.length),A=Boolean(d.length||L.length||T||S),I=o&&E,O=g()("woocommerce-task-payment","woocommerce-task-card",E&&"woocommerce-task-payment-not-configured","woocommerce-task-payment-"+m);return(0,a.createElement)(a.Fragment,{key:m},(0,a.createElement)(p.CardBody,{style:{paddingLeft:0,marginBottom:0},className:O},(0,a.createElement)(p.CardMedia,{isBorderless:!0},(0,a.createElement)("img",{src:l,alt:h,onError:e=>e.currentTarget.src=_})),(0,a.createElement)("div",{className:"woocommerce-task-payment__description"},(0,a.createElement)(y.Text,{as:"h3",className:"woocommerce-task-payment__title"},(0,a.createElement)("span",null,h),I&&(0,a.createElement)(f.Pill,{className:!k&&"pill-green"},k?(0,i.__)("Local Partner","woocommerce"):(0,i.__)("Recommended","woocommerce")),v&&E&&!!d.length&&(0,a.createElement)(u.SetupRequired,null)),(0,a.createElement)("div",{className:"woocommerce-task-payment__content"},c),M&&(0,a.createElement)("div",{className:"woocommerce-task-payment__transaction-processors_images"},Object.keys(M).map((e=>(0,a.createElement)("img",{src:M[e],alt:e,key:e}))))),(0,a.createElement)("div",{className:"woocommerce-task-payment__footer"},(0,a.createElement)(H,{manageUrl:b,id:m,hasSetup:A,needsSetup:E,isEnabled:w,isInstalled:v,hasPlugins:Boolean(d.length),isRecommended:o,isLoading:C,markConfigured:r,externalLink:S}))),(0,a.createElement)(p.CardDivider,null))},E=e=>{let{heading:t,headingDescription:n,markConfigured:o,recommendation:r,paymentGateways:i,footerLink:s}=e;return(0,a.createElement)(p.Card,null,t&&(0,a.createElement)(p.CardHeader,{as:"h2"},t,n&&(0,a.createElement)("p",{className:"woocommerce-task-payment-header__description"},n)),i.map((e=>{const{id:t}=e;return(0,a.createElement)(v,{key:t,isRecommended:r===t,markConfigured:o,paymentGateway:e})})),s&&(0,a.createElement)(p.CardFooter,{isBorderless:!0},s))},L=()=>{const e=g()("woocommerce-task-payment","woocommerce-task-card");return(0,a.createElement)(a.Fragment,null,(0,a.createElement)(p.CardBody,{style:{paddingLeft:0,marginBottom:0},className:e},(0,a.createElement)(p.CardMedia,{isBorderless:!0},(0,a.createElement)("span",{className:"is-placeholder"})),(0,a.createElement)("div",{className:"woocommerce-task-payment__description"},(0,a.createElement)(y.Text,{as:"h3",className:"woocommerce-task-payment__title"},(0,a.createElement)("span",{className:"is-placeholder"})),(0,a.createElement)("div",{className:"woocommerce-task-payment__content"},(0,a.createElement)("span",{className:"is-placeholder"}))),(0,a.createElement)("div",{className:"woocommerce-task-payment__footer"},(0,a.createElement)("span",{className:"is-placeholder"}))),(0,a.createElement)(p.CardDivider,null))},b=()=>(0,a.createElement)(p.Card,{"aria-hidden":"true",className:"is-loading woocommerce-payment-gateway-suggestions-list-placeholder"},(0,a.createElement)(p.CardHeader,{as:"h2"},(0,a.createElement)("span",{className:"is-placeholder"})),(0,a.createElement)(L,null),(0,a.createElement)(L,null),(0,a.createElement)(L,null));var k=n(34704),S=n(32008);const M=e=>{var t;let{markConfigured:n,paymentGateway:o}=e;const{id:r,connectionUrl:m,setupHelpText:d,settingsUrl:h,title:C,requiredSettings:g}=o,{createNotice:w}=(0,s.useDispatch)("core/notices"),{updatePaymentGateway:H}=(0,s.useDispatch)(l.PAYMENT_GATEWAYS_STORE_NAME),_=(0,y.useSlot)(`woocommerce_payment_gateway_configure_${r}`),v=Boolean(null==_||null===(t=_.fills)||void 0===t?void 0:t.length),{isUpdating:E}=(0,s.useSelect)((e=>{const{isPaymentGatewayUpdating:t}=e(l.PAYMENT_GATEWAYS_STORE_NAME);return{isUpdating:t()}})),L=e=>{H(r,{enabled:!0,settings:e}).then((e=>{e&&e.id===r&&(n(r),w("success",(0,i.sprintf)((0,i.__)("%s configured successfully","woocommerce"),C)))})).catch((()=>{w("error",(0,i.__)("There was a problem saving your payment settings","woocommerce"))}))},b=d&&(0,a.createElement)("p",{dangerouslySetInnerHTML:(0,S.ZP)(d)}),k=(0,a.createElement)(f.DynamicForm,{fields:g,isBusy:E,onSubmit:L,submitLabel:(0,i.__)("Continue","woocommerce"),validate:e=>((e,t)=>{const n={},o=e=>t.find((t=>t.id===e));for(const[t,r]of Object.entries(e)){const e=o(t),a=e.label.replace(/([A-Z][a-z]+)/g,(e=>e.toLowerCase()));r||"checkbox"===e.type||(n[t]=`Please enter your ${a}`)}return n})(e,g)});return v?(0,a.createElement)(u.WooPaymentGatewayConfigure.Slot,{fillProps:{defaultForm:k,defaultSubmit:L,defaultFields:g,markConfigured:()=>n(r),paymentGateway:o},id:r}):m?(0,a.createElement)(a.Fragment,null,b,(0,a.createElement)(p.Button,{isPrimary:!0,onClick:()=>(0,c.recordEvent)("tasklist_payment_connect_start",{payment_method:r}),href:m},(0,i.__)("Connect","woocommerce"))):g.length?(0,a.createElement)(a.Fragment,null,b,k):(0,a.createElement)(a.Fragment,null,b||(0,a.createElement)("p",null,(0,i.__)("You can manage this payment gateway's settings by clicking the button below","woocommerce")),(0,a.createElement)(p.Button,{isPrimary:!0,href:h},(0,i.__)("Get started","woocommerce")))},N=e=>{var t;let{markConfigured:n,paymentGateway:o}=e;const{id:r,plugins:m=[],title:d,postInstallScripts:h,installed:C}=o,g=(0,y.useSlot)(`woocommerce_payment_gateway_setup_${r}`),w=Boolean(null==g||null===(t=g.fills)||void 0===t?void 0:t.length),[H,_]=(0,a.useState)(!1);(0,a.useEffect)((()=>{(0,c.recordEvent)("payments_task_stepper_view",{payment_method:r})}),[]);const{invalidateResolutionForStoreSelector:v}=(0,s.useDispatch)(l.PAYMENT_GATEWAYS_STORE_NAME),{isOptionUpdating:E,isPaymentGatewayResolving:L,needsPluginInstall:b}=(0,s.useSelect)((e=>{const{isOptionsUpdating:t}=e(l.OPTIONS_STORE_NAME),{isResolving:n}=e(l.PAYMENT_GATEWAYS_STORE_NAME),o=e(l.PLUGINS_STORE_NAME).getActivePlugins(),r=m.filter((e=>!o.includes(e)));return{isOptionUpdating:t(),isPaymentGatewayResolving:n("getPaymentGateways"),needsPluginInstall:!!r.length}}));(0,a.useEffect)((()=>{if(!b)if(h&&h.length){const e=h.map((e=>function(e){return new Promise(((t,n)=>{document.querySelector(`#${e.handle}-js`)&&t();const o=document.createElement("script");o.src=e.src,o.id=`${e.handle}-js`,o.async=!0,o.onload=t,o.onerror=n,document.body.appendChild(o)}))}(e)));Promise.all(e).then((()=>{_(!0)}))}else _(!0)}),[h,b]);const S=(0,a.useMemo)((()=>m&&m.length?{key:"install",label:(0,i.sprintf)((0,i.__)("Install %s","woocommerce"),d),content:(0,a.createElement)(f.Plugins,{onComplete:(e,t)=>{(0,k.a)(t),v("getPaymentGateways"),(0,c.recordEvent)("tasklist_payment_install_method",{plugins:m})},onError:(e,t)=>(0,k.a)(t),autoInstall:!0,pluginSlugs:m})}:null),[]),N=(0,a.useMemo)((()=>({key:"configure",label:(0,i.sprintf)((0,i.__)("Configure your %(title)s account","woocommerce"),{title:d}),content:C?(0,a.createElement)(M,{markConfigured:n,paymentGateway:o}):null})),[C]),x=b||E||L||!H,T=(0,a.createElement)(f.Stepper,{isVertical:!0,isPending:x,currentStep:b?"install":"configure",steps:[S,N].filter(Boolean)});return(0,a.createElement)(p.Card,{className:"woocommerce-task-payment-method woocommerce-task-card"},(0,a.createElement)(p.CardBody,null,w?(0,a.createElement)(u.WooPaymentGatewaySetup.Slot,{fillProps:{defaultStepper:T,defaultInstallStep:S,defaultConfigureStep:N,markConfigured:()=>n(r),paymentGateway:o},id:r}):T))},x=()=>{const e=g()("is-loading","woocommerce-task-payment-method","woocommerce-task-card");return(0,a.createElement)(p.Card,{"aria-hidden":"true",className:e},(0,a.createElement)(p.CardBody,null,(0,a.createElement)(f.Stepper,{isVertical:!0,currentStep:"none",steps:[{key:"first",label:""},{key:"second",label:""}]})))};var T=n(86989),A=n.n(T);function I(e,t){const n=(0,i.__)("There was an error connecting to WooPayments. Please try again or connect later in store settings.","woocommerce");A()({path:l.WC_ADMIN_NAMESPACE+"/plugins/connect-wcpay",method:"POST"}).then((e=>{window.location=e.connectUrl})).catch((()=>{e("error",n),"function"==typeof t&&t()}))}function O(e,t,n){n(["woocommerce-payments"]).then((()=>{(0,c.recordEvent)("woocommerce_payments_install",{context:"tasklist"}),I(t,(()=>{e()}))})).catch((t=>{(0,k.a)(t),e()}))}const P=e=>{let{paymentGateway:t,onSetupCallback:n=null}=e;const{id:r,needsSetup:l,installed:c,enabled:m,installed:d}=t,p=(0,o.O3)("isWooPayEligible"),{createNotice:h}=(0,s.useDispatch)("core/notices");return c&&null===n&&(n=()=>{I(h)}),(0,a.createElement)("div",{className:"woocommerce-wcpay-suggestion"},(0,a.createElement)(u.WCPayBanner,null,(0,a.createElement)(u.WCPayBannerBody,{textPosition:"left",actionButton:(0,a.createElement)(H,{id:r,hasSetup:!0,needsSetup:l,isEnabled:m,isRecommended:!0,isInstalled:d,hasPlugins:!0,setupButtonText:(0,i.__)("Get started","woocommerce"),onSetupCallback:n}),bannerImage:(0,a.createElement)(u.WCPayBannerImageCut,null),isWooPayEligible:p}),(0,a.createElement)(u.WCPayBenefits,{isWooPayEligible:p}),(0,a.createElement)(u.WCPayBannerFooter,{isWooPayEligible:p})))};n(52260);var R=n(82580);const V=(e,t)=>e.recommendation_priority-t.recommendation_priority,j=e=>{var t;return 1===(null===(t=e.plugins)||void 0===t?void 0:t.length)&&"woocommerce-payments"===e.plugins[0]},D=(e,t)=>e.category_other&&-1!==e.category_other.indexOf(t);var Z=n(5267);const B={account_name:"",account_number:"",bank_name:"",sort_code:"",iban:"",bic:""};(0,m.registerPlugin)("wc-admin-payment-gateway-setup-bacs",{render:()=>{const e=(0,s.useSelect)((e=>e(l.OPTIONS_STORE_NAME).isOptionsUpdating())),{createNotice:t}=(0,s.useDispatch)("core/notices"),{updateOptions:n}=(0,s.useDispatch)(l.OPTIONS_STORE_NAME),o=e=>{const t={};return e.account_number||e.iban||(t.account_number=t.iban=(0,i.__)("Please enter an account number or IBAN","woocommerce")),t};return(0,a.createElement)(a.Fragment,null,(0,a.createElement)(u.WooPaymentGatewaySetup,{id:"bacs"},(r=>{let{markConfigured:s}=r;return(0,a.createElement)(f.Form,{initialValues:B,onSubmit:e=>(async(e,o)=>{if((await n({woocommerce_bacs_settings:{enabled:"yes"},woocommerce_bacs_accounts:[e]})).success)return o(),void t("success",(0,i.__)("Direct bank transfer details added successfully","woocommerce"));t("error",(0,i.__)("There was a problem saving your payment settings","woocommerce"))})(e,s),validate:o},(t=>{let{getInputProps:n,handleSubmit:o}=t;return(0,a.createElement)(a.Fragment,null,(0,a.createElement)(f.H,null,(0,i.__)("Add your bank details","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("These details are required to receive payments via bank transfer","woocommerce")),(0,a.createElement)("div",{className:"woocommerce-task-payment-method__fields"},(0,a.createElement)(f.TextControl,(0,Z.Z)({label:(0,i.__)("Account name","woocommerce"),required:!0},n("account_name"))),(0,a.createElement)(f.TextControl,(0,Z.Z)({label:(0,i.__)("Account number","woocommerce"),required:!0},n("account_number"))),(0,a.createElement)(f.TextControl,(0,Z.Z)({label:(0,i.__)("Bank name","woocommerce"),required:!0},n("bank_name"))),(0,a.createElement)(f.TextControl,(0,Z.Z)({label:(0,i.__)("Sort code","woocommerce"),required:!0},n("sort_code"))),(0,a.createElement)(f.TextControl,(0,Z.Z)({label:(0,i.__)("IBAN","woocommerce"),required:!0},n("iban"))),(0,a.createElement)(f.TextControl,(0,Z.Z)({label:(0,i.__)("BIC / Swift","woocommerce"),required:!0},n("bic")))),(0,a.createElement)(p.Button,{isPrimary:!0,isBusy:e,onClick:o},(0,i.__)("Save","woocommerce")))}))})))},scope:"woocommerce-tasks"});const F=e=>{let{onComplete:t,query:n}=e;const{updatePaymentGateway:o}=(0,s.useDispatch)(l.PAYMENT_GATEWAYS_STORE_NAME),{getPaymentGateway:r,paymentGatewaySuggestions:m,installedPaymentGateways:u,isResolving:C,countryCode:g}=(0,s.useSelect)((e=>{const{getSettings:t}=e(l.SETTINGS_STORE_NAME),{general:n={}}=t("general");return{getPaymentGateway:e(l.PAYMENT_GATEWAYS_STORE_NAME).getPaymentGateway,getOption:e(l.OPTIONS_STORE_NAME).getOption,installedPaymentGateways:e(l.PAYMENT_GATEWAYS_STORE_NAME).getPaymentGateways(),isResolving:e(l.ONBOARDING_STORE_NAME).isResolving("getPaymentGatewaySuggestions"),paymentGatewaySuggestions:e(l.ONBOARDING_STORE_NAME).getPaymentGatewaySuggestions(!0),countryCode:(0,R.so)(n.woocommerce_default_country)}}),[]),f=(0,a.useMemo)((()=>((e,t)=>{const n=e.reduce(((e,t)=>(e[t.id]=t,e)),{});return t.reduce(((e,t)=>{const o=(0,w.V7)(t.id),r=n[o]?n[o]:{},a={installed:!!n[o],postInstallScripts:r.post_install_scripts,hasPlugins:!(!t.plugins||!t.plugins.length),enabled:r.enabled||!1,needsSetup:r.needs_setup,settingsUrl:r.settings_url,connectionUrl:r.connection_url,setupHelpText:r.setup_help_text,title:r.title,requiredSettings:r.required_settings_keys?r.required_settings_keys.map((e=>r.settings[e])).filter(Boolean):[],...t};return e.set(t.id,a),e}),new Map)})(u,m)),[u,m]);(0,a.useEffect)((()=>{f.size&&(0,c.recordEvent)("tasklist_payments_options",{options:Array.from(f.values()).map((e=>e.id))})}),[f]);const y=(0,a.useCallback)((async e=>{if(!f.get(e))throw`Payment gateway ${e} not found in available gateways list`;(0,c.recordEvent)("tasklist_payment_connect_method",{payment_method:e}),(e=>{e&&r(e)&&o(e,{enabled:!0}).then((()=>{var n;t(null!==(n=f.get(e))&&void 0!==n&&n.hasPlugins?{}:{redirectPath:(0,d.getNewPath)({task:"payments"},{},"/")})}))})(e)}),[f]),H=(0,a.useMemo)((()=>Array.from(f.values()).filter((e=>e.recommendation_priority)).sort(V).map((e=>e.id)).shift()),[f]),_=(0,a.useMemo)((()=>{if(!n.id||C||!f.size)return null;const e=f.get(n.id);if(!e)throw`Current gateway ${n.id} not found in available gateways list`;return e}),[C,n,f]),v=(0,a.useMemo)((()=>((e,t)=>{for(const[,n]of e.entries())if(n.installed&&!n.needsSetup){if(j(n))return!0;if(D(n,t))return!0}return!1})(f,g)),[g,f]),L=-1!==Array.from(f.values()).findIndex(j),[k,S,M]=(0,a.useMemo)((()=>((e,t,n,o)=>Array.from(e.values()).sort(V).reduce(((e,r)=>{const[a,i,s]=e;return j(r)?!n||r.installed&&!r.needsSetup||a.push(r):r.is_offline?i.push(r):r.enabled||(o?((e,t)=>e.category_additional&&-1!==e.category_additional.indexOf(t))(r,t)&&s.push(r):D(r,t)&&s.push(r)),e}),[[],[],[]]))(f,g,L,v)),[f,g,L,v]);if(n.id&&!_)return(0,a.createElement)(x,null);if(_)return(0,a.createElement)(N,{paymentGateway:_,markConfigured:y});let T=(0,i.__)("Choose a payment provider","woocommerce"),A=(0,i.__)("To start accepting online payments","woocommerce");v?(T=(0,i.__)("Additional payment options","woocommerce"),A=(0,i.__)("Give your customers additional choices in ways to pay.","woocommerce")):L&&(T=(0,i.__)("Other payment providers","woocommerce"),A=(0,i.__)("Try one of the alternative payment providers.","woocommerce"));const I=!!M.length&&(0,a.createElement)(E,{heading:T,headingDescription:A,recommendation:H,paymentGateways:M,markConfigured:y,footerLink:(0,a.createElement)(p.Button,{href:"https://woo.com/product-category/woocommerce-extensions/payment-gateways/?utm_source=payments_recommendations",target:"_blank",onClick:()=>{(0,c.recordEvent)("tasklist_payment_see_more",{})},isTertiary:!0},(0,i.__)("See more","woocommerce"),(0,a.createElement)(h.Z,{size:18}))}),O=!!S.length&&(0,a.createElement)(E,{heading:(0,i.__)("Offline payment methods","woocommerce"),recommendation:H,paymentGateways:S,markConfigured:y});return(0,a.createElement)("div",{className:"woocommerce-task-payments"},!f.size&&(0,a.createElement)(b,null),k.length?(0,a.createElement)(a.Fragment,null,(0,a.createElement)(P,{paymentGateway:k[0]}),I,O):(0,a.createElement)(a.Fragment,null,I,O))};(0,m.registerPlugin)("wc-admin-onboarding-task-payments",{scope:"woocommerce-tasks",render:()=>(0,a.createElement)(u.WooOnboardingTask,{id:"payments"},(e=>{let{onComplete:t,query:n}=e;return(0,a.createElement)(F,{onComplete:t,query:n})}))});var z=n(94333),W=n(92819),U=n(75283),G=n(74617),Y=n(64214),Q=n(58670),q=n(7862),J=n.n(q),K=n(23374),X=n(70444);const $=(0,a.createElement)(X.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,a.createElement)(X.Path,{d:"M12 3.3c-4.8 0-8.8 3.9-8.8 8.8 0 4.8 3.9 8.8 8.8 8.8 4.8 0 8.8-3.9 8.8-8.8s-4-8.8-8.8-8.8zm6.5 5.5h-2.6C15.4 7.3 14.8 6 14 5c2 .6 3.6 2 4.5 3.8zm.7 3.2c0 .6-.1 1.2-.2 1.8h-2.9c.1-.6.1-1.2.1-1.8s-.1-1.2-.1-1.8H19c.2.6.2 1.2.2 1.8zM12 18.7c-1-.7-1.8-1.9-2.3-3.5h4.6c-.5 1.6-1.3 2.9-2.3 3.5zm-2.6-4.9c-.1-.6-.1-1.1-.1-1.8 0-.6.1-1.2.1-1.8h5.2c.1.6.1 1.1.1 1.8s-.1 1.2-.1 1.8H9.4zM4.8 12c0-.6.1-1.2.2-1.8h2.9c-.1.6-.1 1.2-.1 1.8 0 .6.1 1.2.1 1.8H5c-.2-.6-.2-1.2-.2-1.8zM12 5.3c1 .7 1.8 1.9 2.3 3.5H9.7c.5-1.6 1.3-2.9 2.3-3.5zM10 5c-.8 1-1.4 2.3-1.8 3.8H5.5C6.4 7 8 5.6 10 5zM5.5 15.3h2.6c.4 1.5 1 2.8 1.8 3.7-1.8-.6-3.5-2-4.4-3.7zM14 19c.8-1 1.4-2.2 1.8-3.7h2.6C17.6 17 16 18.4 14 19z"}));var ee=n(17844);const te=e=>{let{zone:t}=e;return(0,a.createElement)("div",{className:"woocommerce-shipping-rate__icon"},t.locations?t.locations.map((e=>(0,a.createElement)(f.Flag,{size:24,code:e.code,key:e.code}))):(0,a.createElement)(K.Z,{icon:$}))},ne=e=>{let{zone:t,getInputProps:n}=e;return(0,a.createElement)("label",{htmlFor:`woocommerce-shipping-rate__toggle-${t.id}`,className:"woocommerce-shipping-rate__name"},t.name,(0,a.createElement)(p.FormToggle,(0,Z.Z)({id:`woocommerce-shipping-rate__toggle-${t.id}`},n(`${t.id}_enabled`))))},oe=e=>{let{zone:t,values:n,setTouched:o,setValue:r,getFormattedRate:s,renderInputPrefix:l,renderInputSuffix:c,inputProps:{className:m,...u}}=e;const d=g()("muriel-input-text","woocommerce-shipping-rate__control-wrapper",m);return(0,a.createElement)(a.Fragment,null,!t.toggleable&&(0,a.createElement)("div",{className:"woocommerce-shipping-rate__name"},t.name),(!t.toggleable||n[`${t.id}_enabled`])&&(0,a.createElement)(f.TextControlWithAffixes,(0,Z.Z)({label:(0,i.__)("Shipping cost","woocommerce"),required:!0,className:d},u,{onBlur:()=>{o(`${t.id}_rate`),r(`${t.id}_rate`,s(n[`${t.id}_rate`]))},prefix:l(),suffix:c(n[`${t.id}_rate`])})))};class re extends a.Component{constructor(){super(...arguments),this.updateShippingZones=this.updateShippingZones.bind(this),this.getFormattedRate=this.getFormattedRate.bind(this),this.renderInputPrefix=this.renderInputPrefix.bind(this),this.renderInputSuffix=this.renderInputSuffix.bind(this)}getShippingMethods(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return e&&e.methods&&Array.isArray(e.methods)?t?e.methods?e.methods.filter((e=>e.method_id===t)):[]:e.methods:[]}disableShippingMethods(e,t){t.length&&t.forEach((t=>{A()({method:"POST",path:`/wc/v3/shipping/zones/${e.id}/methods/${t.instance_id}`,data:{enabled:!1}})}))}async updateShippingZones(e){const{createNotice:t,shippingZones:n}=this.props;let o=!1,r=!1;n.forEach((t=>{0===t.id?o=t.toggleable&&e[`${t.id}_enabled`]:r=""!==e[`${t.id}_rate`]&&parseFloat(e[`${t.id}_rate`])!==parseFloat(0);const n=this.getShippingMethods(t),a=parseFloat(e[`${t.id}_rate`])===parseFloat(0)?"free_shipping":"flat_rate",i=this.getShippingMethods(t,a).length?this.getShippingMethods(t,a)[0]:null;if(!t.toggleable||e[`${t.id}_enabled`]){if(i){const e=n.filter((e=>e.instance_id!==i.instance_id));this.disableShippingMethods(t,e)}A()({method:"POST",path:i?`/wc/v3/shipping/zones/${t.id}/methods/${i.instance_id}`:`/wc/v3/shipping/zones/${t.id}/methods`,data:{method_id:a,enabled:!0,settings:{cost:e[`${t.id}_rate`]}}})}else this.disableShippingMethods(t,n)})),(0,c.recordEvent)("tasklist_shipping_set_costs",{shipping_cost:r,rest_world:o}),t("success",(0,i.__)("Your shipping rates have been updated","woocommerce")),this.props.onComplete()}renderInputPrefix(){const{symbolPosition:e,symbol:t}=this.context.getCurrencyConfig();return 0===e.indexOf("right")?null:(0,a.createElement)("span",{className:"woocommerce-shipping-rate__control-prefix"},t)}renderInputSuffix(e){const{symbolPosition:t,symbol:n}=this.context.getCurrencyConfig();return 0===t.indexOf("right")?(0,a.createElement)("span",{className:"woocommerce-shipping-rate__control-suffix"},n):parseFloat(e)===parseFloat(0)?(0,a.createElement)("span",{className:"woocommerce-shipping-rate__control-suffix"},(0,i.__)("Free shipping","woocommerce")):null}getFormattedRate(e){const{formatDecimalString:t}=this.context,n=t(e);return e.length&&n.length?t(e):t(0)}getInitialValues(){const{formatDecimalString:e}=this.context,t={};return this.props.shippingZones.forEach((n=>{const o=this.getShippingMethods(n),r=o.length&&o[0].settings.cost?this.getFormattedRate(o[0].settings.cost.value):e(0);t[`${n.id}_rate`]=r,o.length&&o[0].enabled?t[`${n.id}_enabled`]=!0:t[`${n.id}_enabled`]=!1})),t}validate(e){const t={};return Object.keys(e).filter((e=>e.endsWith("_rate"))).forEach((n=>{e[n]<0&&(t[n]=(0,i.__)("Shipping rates can not be negative numbers.","woocommerce"))})),t}render(){const{buttonText:e,shippingZones:t}=this.props;return t.length?(0,a.createElement)(f.Form,{initialValues:this.getInitialValues(),onSubmit:this.updateShippingZones,validate:this.validate},(n=>{let{getInputProps:o,handleSubmit:r,setTouched:s,setValue:l,values:c}=n;return(0,a.createElement)(a.Fragment,null,(0,a.createElement)("div",{className:"woocommerce-shipping-rates"},t.map((e=>(0,a.createElement)("div",{className:"woocommerce-shipping-rate",key:e.id},(0,a.createElement)(te,{zone:e}),(0,a.createElement)("div",{className:"woocommerce-shipping-rate__main"},e.toggleable&&(0,a.createElement)(ne,{zone:e,getInputProps:o}),(0,a.createElement)(oe,{zone:e,values:c,inputProps:o(`${e.id}_rate`),setTouched:s,setValue:l,getFormattedRate:this.getFormattedRate,renderInputPrefix:this.renderInputPrefix,renderInputSuffix:this.renderInputSuffix})))))),(0,a.createElement)(p.Button,{isPrimary:!0,onClick:r},e||(0,i.__)("Update","woocommerce")))})):null}}re.propTypes={buttonText:J().string,onComplete:J().func.isRequired,createNotice:J().func.isRequired,shippingZones:J().array},re.defaultProps={shippingZones:[]},re.contextType=ee.CurrencyContext;const ae=re;var ie=n(67097);const se=e=>{var t,n;let{shippingMethod:o}=e;return(0,a.createElement)(ie.L,{features:(null===(t=o.layout_column)||void 0===t?void 0:t.features)||[],logo:{image:(null===(n=o.layout_column)||void 0===n?void 0:n.image)||""}})},le=e=>{var t,n;let{shippingMethod:o,children:r}=e;return(0,a.createElement)(ie.L,{layout:"dual",features:(null===(t=o.layout_row)||void 0===t?void 0:t.features)||[],logo:{image:(null===(n=o.layout_row)||void 0===n?void 0:n.image)||""},description:o.description},r)};var ce=n(36437);class me extends a.Component{constructor(e){super(e),this.initialState={isPending:!1,step:"store_location",shippingZones:[]},this.activePlugins=e.activePlugins,this.state=this.initialState,this.completeStep=this.completeStep.bind(this),this.shippingSmartDefaultsEnabled=window.wcAdminFeatures&&window.wcAdminFeatures["shipping-smart-defaults"],this.storeLocationCompleted=!1,this.shippingPartners=e.shippingPartners,this.jetpackAuthRedirectUrl=(0,G.getAdminLink)("admin.php?page=wc-admin")}componentDidMount(){this.reset()}reset(){this.setState(this.initialState)}async fetchShippingZones(){const{countryCode:e,countryName:t}=this.props,n=[],o=await A()({path:"/wc/v3/shipping/zones"});let r=!1;if(await Promise.all(o.map((async t=>{if(0===t.id)return t.methods=await A()({path:`/wc/v3/shipping/zones/${t.id}/methods`}),t.name=(0,i.__)("Rest of the world","woocommerce"),t.toggleable=!0,void n.push(t);t.locations=await A()({path:`/wc/v3/shipping/zones/${t.id}/locations`}),t.locations.find((t=>e===t.code))&&(t.methods=await A()({path:`/wc/v3/shipping/zones/${t.id}/methods`}),n.push(t),r=!0)}))),!r){const o=await A()({method:"POST",path:"/wc/v3/shipping/zones",data:{name:t}});o.locations=await A()({method:"POST",path:`/wc/v3/shipping/zones/${o.id}/locations`,data:[{code:e,type:"country"}]}),n.push(o)}n.reverse(),this.setState({isPending:!1,shippingZones:n})}componentDidUpdate(e,t){const{countryCode:n,countryName:o,settings:r}=this.props,{woocommerce_store_address:a,woocommerce_default_country:i,woocommerce_store_postcode:s}=r,{step:l}=this.state;"rates"!==l||e.countryCode===n&&e.countryName===o&&"rates"===t.step||(this.setState({isPending:!0}),o&&this.fetchShippingZones());const c=Boolean(a&&i&&s);"store_location"===l&&c&&(this.shippingSmartDefaultsEnabled&&!this.storeLocationCompleted?(this.completeStep(),this.storeLocationCompleted=!0):this.shippingSmartDefaultsEnabled||this.completeStep())}completeStep(){const{createNotice:e,onComplete:t}=this.props,{step:n}=this.state,o=this.getSteps(),r=o.findIndex((e=>e.key===n)),a=o[r+1];a?this.setState({step:a.key}):(e("success",(0,i.__)("📦 Shipping is done! Don't worry, you can always change it later","woocommerce")),t())}getSteps(){const{countryCode:e,createNotice:t,invalidateResolutionForStoreSelector:n,isJetpackConnected:o,onComplete:r,optimisticallyCompleteTask:s,settings:l,task:m,updateAndPersistSettingsForGroup:u,shippingPartners:h}=this.props,C=h,y=C.map((e=>e.slug)),w=()=>{(0,c.recordEvent)("tasklist_shipping_label_printing",{install:!1,plugins_to_activate:y}),(0,d.getHistory)().push((0,d.getNewPath)({},"/",{})),r()},H=!o&&"US"===e;let _=[{key:"store_location",label:(0,i.__)("Set store location","woocommerce"),description:(0,i.__)("The address from which your business operates","woocommerce"),content:(0,a.createElement)(Q.Z,{createNotice:t,updateAndPersistSettingsForGroup:u,settings:l,onComplete:e=>{const t=(0,R.so)(e.countryState);(0,c.recordEvent)("tasklist_shipping_set_location",{country:t}),this.shippingSmartDefaultsEnabled&&this.completeStep()}}),visible:!0},{key:"rates",label:(0,i.__)("Set shipping costs","woocommerce"),description:(0,i.__)("Define how much customers pay to ship to different destinations","woocommerce"),content:(0,a.createElement)(ae,{buttonText:y.length||H?(0,i.__)("Continue","woocommerce"):(0,i.__)("Complete task","woocommerce"),shippingZones:this.state.shippingZones,onComplete:()=>{const{id:e}=m;s(e),n(),this.completeStep()},createNotice:t}),visible:"disabled"!==l.woocommerce_ship_to_countries},{key:"label_printing",label:(0,i.__)("Enable shipping label printing","woocommerce"),description:y.includes("woocommerce-shipstation-integration")?(0,U.Z)({mixedString:(0,i.__)("We recommend using ShipStation to save time at the post office by printing your shipping labels at home. Try ShipStation free for 30 days. {{link}}Learn more{{/link}}.","woocommerce"),components:{link:(0,a.createElement)(f.Link,{href:"https://woo.com/products/shipstation-integration?utm_medium=product",target:"_blank",type:"external"})}}):(0,i.__)("With WooCommerce Shipping you can save time by printing your USPS and DHL Express shipping labels at home","woocommerce"),content:(0,a.createElement)(a.Fragment,null,!o&&y.includes("woocommerce-services")&&(0,a.createElement)(ce.O,{buttonText:(0,i.__)("Install & enable","woocommerce")}),(0,a.createElement)(f.Plugins,{onComplete:(e,t)=>{(0,k.a)(t),(0,c.recordEvent)("tasklist_shipping_label_printing",{install:!0,plugins_to_activate:y}),this.completeStep()},onError:(e,t)=>(0,k.a)(t),onSkip:()=>{(0,c.recordEvent)("tasklist_shipping_label_printing",{install:!1,plugins_to_activate:y}),n(),(0,d.getHistory)().push((0,d.getNewPath)({},"/",{})),r()},pluginSlugs:y})),visible:y.length},{key:"connect",label:(0,i.__)("Connect your store","woocommerce"),description:(0,i.__)("Connect your store to WordPress.com to enable label printing","woocommerce"),content:(0,a.createElement)(Y.Z,{redirectUrl:this.jetpackAuthRedirectUrl,completeStep:this.completeStep,onConnect:()=>{(0,c.recordEvent)("tasklist_shipping_connect_store")}}),visible:H}];if(this.shippingSmartDefaultsEnabled){const e={rates:{label:(0,i.__)("Review your shipping options","woocommerce"),description:(0,i.__)("We recommend the following shipping options based on your location. You can manage your shipping options again at any time in WooCommerce Shipping settings.","woocommerce"),onClick:"rates"!==this.state.step?()=>{this.setState({step:"rates"})}:void 0,content:(0,a.createElement)(ae,{buttonText:(0,i.__)("Save shipping options","woocommerce"),shippingZones:this.state.shippingZones,onComplete:()=>{const{id:e}=m;s(e),n(),this.completeStep()},createNotice:t})},label_printing:{label:(0,i.__)("Enable shipping label printing and discounted rates","woocommerce"),description:1===C.length?(v=C[0].name,E=C[0].learn_more_link,(0,U.Z)({mixedString:(0,i.sprintf)((0,i.__)("Save time and money by printing your shipping labels right from your computer with %1$s. Try %2$s for free. {{link}}Learn more{{/link}}","woocommerce"),v,v),components:{link:(0,a.createElement)(f.Link,{href:E,target:"_blank",type:"external"})}})):(0,i.__)("Save time and money by printing your shipping labels right from your computer with one of these shipping solutions.","woocommerce"),content:(0,a.createElement)(a.Fragment,null,1===C.length?(0,a.createElement)(se,{shippingMethod:C[0]}):(0,a.createElement)("div",{className:"woocommerce-task-shipping-recommendation_plugins-install-container"},C.map((e=>{var t;const o=[null==e?void 0:e.slug,...null!==(t=null==e?void 0:e.dependencies)&&void 0!==t?t:[]].filter((e=>void 0!==e));return(0,a.createElement)(le,{shippingMethod:e,key:e.name},(0,a.createElement)("div",{className:"woocommerce-task-shipping-recommendations_plugins-buttons"},(0,a.createElement)(f.Plugins,{onComplete:e=>{(0,k.a)(e),(0,c.recordEvent)("tasklist_shipping_label_printing",{install:!0,plugins_to_activate:o}),n(),this.completeStep()},onError:(e,t)=>(0,k.a)(t),installText:(0,i.__)("Install and enable","woocommerce"),learnMoreLink:e.learn_more_link,onLearnMore:()=>{(0,c.recordEvent)("tasklist_shipping_label_printing_learn_more",{plugin:e.slug})},pluginSlugs:o,installButtonVariant:"secondary"})))}))),1===C.length&&void 0===C[0].slug&&(0,a.createElement)("a",{href:C[0].learn_more_link,target:"_blank",rel:"noreferrer"},(0,a.createElement)(p.Button,{variant:"primary"},(0,i.__)("Download","woocommerce"))),1===C.length&&C[0].slug?(0,a.createElement)(a.Fragment,null,!o&&"woocommerce-services"===C[0].slug&&(0,a.createElement)(ce.O,{buttonText:(0,i.__)("Install and enable","woocommerce")}),(0,a.createElement)(f.Plugins,{onComplete:(e,t)=>{(0,k.a)(t),(0,c.recordEvent)("tasklist_shipping_label_printing",{install:!0,plugins_to_activate:y}),n(),this.completeStep()},onError:(e,t)=>(0,k.a)(t),onSkip:w,pluginSlugs:y,installText:(0,i.__)("Install and enable","woocommerce")})):(0,a.createElement)(p.Button,{isTertiary:!0,onClick:w,className:g()("woocommerce-task-shipping-recommendations_skip-button",2===C.length?"dual":"")},(0,i.__)("No Thanks","woocommerce")))},store_location:{label:(0,i.__)("Set your store location","woocommerce"),description:(0,i.__)("Add your store location to help us calculate shipping rates and the best shipping options for you. You can manage your store location again at any time in WooCommerce Settings General.","woocommerce"),onClick:"store_location"!==this.state.step?()=>{this.setState({step:"store_location"})}:void 0,buttonText:(0,i.__)("Save store location","woocommerce")}};_=_.map((t=>(e.hasOwnProperty(t.key)&&(t={...t,...e[t.key]}),t.key!==this.state.step&&(t.description=""),t)))}var v,E;return(0,W.filter)(_,(e=>e.visible))}render(){const{isPending:e,step:t}=this.state,{isUpdateSettingsRequesting:n}=this.props,o=this.getSteps();return(0,a.createElement)("div",{className:"woocommerce-task-shipping"},(0,a.createElement)(p.Card,{className:"woocommerce-task-card"},(0,a.createElement)(p.CardBody,null,(0,a.createElement)(f.Stepper,{isPending:e||n,isVertical:!0,currentStep:t,steps:o}))))}}const ue=(0,z.compose)((0,s.withSelect)((e=>{const{getSettings:t,isUpdateSettingsRequesting:n}=e(l.SETTINGS_STORE_NAME),{getActivePlugins:o,isJetpackConnected:r}=e(l.PLUGINS_STORE_NAME),{getCountry:a}=e(l.COUNTRIES_STORE_NAME),{general:i={}}=t("general"),s=(0,R.so)(i.woocommerce_default_country),c=e(l.SHIPPING_METHODS_STORE_NAME).getShippingMethods(!0),m=s?a(s):null,u=m?m.name:null,d=o();return{countryCode:s,countryName:u,isUpdateSettingsRequesting:n("general"),settings:i,activePlugins:d,isJetpackConnected:r(),shippingPartners:c}})),(0,s.withDispatch)((e=>{const{createNotice:t}=e("core/notices"),{updateAndPersistSettingsForGroup:n}=e(l.SETTINGS_STORE_NAME),{invalidateResolutionForStoreSelector:o,optimisticallyCompleteTask:r}=e(l.ONBOARDING_STORE_NAME);return{createNotice:t,invalidateResolutionForStoreSelector:o,optimisticallyCompleteTask:r,updateAndPersistSettingsForGroup:n}})))(me);(0,m.registerPlugin)("wc-admin-onboarding-task-shipping",{scope:"woocommerce-tasks",render:()=>(0,a.createElement)(u.WooOnboardingTask,{id:"shipping"},(e=>{let{onComplete:t,task:n}=e;return(0,a.createElement)(ue,{onComplete:t,task:n})}))});const de=e=>{let{description:t,imageUrl:n,installAndActivate:o=(()=>{}),onManage:r=(()=>{}),isActive:s,isBusy:l,isBuiltByWC:m,isDisabled:u,isInstalled:d,manageUrl:h,name:C,slug:g}=e;return(0,a.createElement)("div",{className:"woocommerce-plugin-list__plugin"},n&&(0,a.createElement)("div",{className:"woocommerce-plugin-list__plugin-logo"},(0,a.createElement)("img",{src:n,alt:(0,i.sprintf)((0,i.__)("%s logo","woocommerce"),C)})),(0,a.createElement)("div",{className:"woocommerce-plugin-list__plugin-text"},(0,a.createElement)(y.Text,{variant:"subtitle.small",as:"h4"},C,m&&(0,a.createElement)(f.Pill,null,(0,i.__)("Built by WooCommerce","woocommerce"))),(0,a.createElement)(y.Text,{variant:"subtitle.small"},t)),(0,a.createElement)("div",{className:"woocommerce-plugin-list__plugin-action"},s&&h&&(0,a.createElement)(p.Button,{disabled:u,isBusy:l,isSecondary:!0,href:(0,G.getAdminLink)(h),onClick:()=>{(0,c.recordEvent)("marketing_manage",{extension_name:g}),r(g)}},(0,i.__)("Manage","woocommerce")),d&&!s&&(0,a.createElement)(p.Button,{disabled:u,isBusy:l,isSecondary:!0,onClick:()=>o(g)},(0,i.__)("Activate","woocommerce")),!d&&(0,a.createElement)(p.Button,{disabled:u,isBusy:l,isSecondary:!0,onClick:()=>o(g)},(0,i.__)("Get started","woocommerce"))))},pe=e=>{let{currentPlugin:t,installAndActivate:n=(()=>{}),onManage:o=(()=>{}),plugins:r=[],title:i}=e;return(0,a.createElement)("div",{className:"woocommerce-plugin-list"},i&&(0,a.createElement)("div",{className:"woocommerce-plugin-list__title"},(0,a.createElement)(y.Text,{variant:"sectionheading",as:"h3"},i)),r.map((e=>{const{description:r,imageUrl:i,isActive:s,isBuiltByWC:l,isInstalled:c,manageUrl:m,slug:u,name:d}=e;return(0,a.createElement)(de,{key:u,description:r,manageUrl:m,name:d,imageUrl:i,installAndActivate:n,onManage:o,isActive:s,isBuiltByWC:l,isBusy:t===u,isDisabled:!!t,isInstalled:c,slug:u})})))},he=["task-list/grow","task-list/reach"],Ce=e=>{let{onComplete:t}=e;const[n,o]=(0,a.useState)(null),{actionTask:r}=(0,s.useDispatch)(l.ONBOARDING_STORE_NAME),{installAndActivatePlugins:m}=(0,s.useDispatch)(l.PLUGINS_STORE_NAME),{activePlugins:u,freeExtensions:h,installedPlugins:C,isResolving:g}=(0,s.useSelect)((e=>{const{getActivePlugins:t,getInstalledPlugins:n}=e(l.PLUGINS_STORE_NAME),{getFreeExtensions:o,hasFinishedResolution:r}=e(l.ONBOARDING_STORE_NAME);return{activePlugins:t(),freeExtensions:o(),installedPlugins:n(),isResolving:!r("getFreeExtensions")}})),[f,H]=(0,a.useMemo)((()=>((e,t,n)=>{const o=[],r=[];return e.sort(((e,t)=>he.indexOf(e.key)-he.indexOf(t.key))).forEach((e=>{if(!he.includes(e.key))return;const a=[];if(e.plugins.forEach((e=>{const r=((e,t,n)=>{const{description:o,image_url:r,is_built_by_wc:a,key:i,manage_url:s,name:l}=e,c=(0,w.V7)(i);return{description:o,slug:c,imageUrl:r,isActive:t.includes(c),isInstalled:n.includes(c),isBuiltByWC:a,manageUrl:s,name:l}})(e,t,n);r.isInstalled?o.push(r):a.push(r)})),!a.length)return;const i={...e,plugins:a};r.push(i)})),[o,r]})(h,u,C)),[C,u,h]),_=e=>{o(e),r("marketing"),m([e]).then((n=>{(0,c.recordEvent)("tasklist_marketing_install",{selected_extension:e,installed_extensions:f.map((e=>e.slug)),section_order:H.map((e=>e.key)).join(", ")}),(0,k.a)(n),o(null),t({redirectPath:(0,d.getNewPath)({task:"marketing"})})})).catch((e=>{(0,k.a)(e),o(null)}))},v=()=>{r("marketing")};return g?(0,a.createElement)(p.Spinner,null):(0,a.createElement)("div",{className:"woocommerce-task-marketing"},!!f.length&&(0,a.createElement)(p.Card,{className:"woocommerce-task-card"},(0,a.createElement)(p.CardHeader,null,(0,a.createElement)(y.Text,{variant:"title.small",as:"h2",className:"woocommerce-task-card__title"},(0,i.__)("Installed marketing extensions","woocommerce"))),(0,a.createElement)(pe,{currentPlugin:n,installAndActivate:_,onManage:v,plugins:f})),!!H.length&&(0,a.createElement)(p.Card,{className:"woocommerce-task-card"},(0,a.createElement)(p.CardHeader,null,(0,a.createElement)(y.Text,{variant:"title.small",as:"h2",className:"woocommerce-task-card__title"},(0,i.__)("Recommended marketing extensions","woocommerce")),(0,a.createElement)(y.Text,{as:"span"},(0,i.__)('We recommend adding one of the following marketing tools for your store. The extension will be installed and activated for you when you click "Get started".',"woocommerce"))),H.map((e=>{const{key:t,title:o,plugins:r}=e;return(0,a.createElement)(pe,{currentPlugin:n,installAndActivate:_,onManage:v,key:t,plugins:r,title:o})}))))};(0,m.registerPlugin)("wc-admin-onboarding-task-marketing",{scope:"woocommerce-tasks",render:()=>(0,a.createElement)(u.WooOnboardingTask,{id:"marketing"},(e=>{let{onComplete:t}=e;return(0,a.createElement)(Ce,{onComplete:t})}))});var ge=n(99196);const fe=()=>({onClick:()=>{window.location=(0,G.getAdminLink)("theme-install.php?browse=block-themes")}}),ye=()=>{const{onClick:e}=fe();return(0,a.createElement)(u.WooOnboardingTaskListItem,{id:"appearance"},(t=>{let{defaultTaskItem:n}=t;return(0,a.createElement)(n,{onClick:e})}))};(0,m.registerPlugin)("wc-admin-onboarding-task-appearance",{scope:"woocommerce-tasks",render:()=>(0,a.createElement)(ye,null)});var we=n(33414);const He=()=>(0,a.createElement)("svg",{width:"13",height:"10",viewBox:"0 0 13 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("path",{d:"M12.1883 1.1814L4.7091 8.66062L1.48438 5.4359",stroke:"#4AB866",strokeWidth:"1.5"})),_e=e=>{let{name:t,logo:n,description:o,benefits:r,terms:i,actionText:s,onClick:l,isBusy:c}=e;return(0,a.createElement)("div",{className:"woocommerce-tax-partner-card"},(0,a.createElement)("div",{className:"woocommerce-tax-partner-card__logo"},(0,a.createElement)("img",{src:n,alt:t})),(0,a.createElement)("div",{className:"woocommerce-tax-partner-card__description"},o),(0,a.createElement)("ul",{className:"woocommerce-tax-partner-card__benefits"},r.map(((e,t)=>(0,a.createElement)("li",{className:"woocommerce-tax-partner-card__benefit",key:t},(0,a.createElement)("span",{className:"woocommerce-tax-partner-card__benefit-bullet"},(0,a.createElement)(He,null)),(0,a.createElement)("span",{className:"woocommerce-tax-partner-card__benefit-text"},e))))),(0,a.createElement)("div",{className:"woocommerce-tax-partner-card__action"},(0,a.createElement)("div",{className:"woocommerce-tax-partner-card__terms"},i),(0,a.createElement)(p.Button,{isSecondary:!0,onClick:l,isBusy:c,disabled:c},s)))};var ve=n(2732);const Ee=()=>(0,a.createElement)(_e,{name:(0,i.__)("WooCommerce Tax","woocommerce"),logo:ve,description:(0,i.__)("Best for new stores","woocommerce"),benefits:[(0,i.__)("Real-time sales tax calculation","woocommerce"),(0,U.Z)({mixedString:(0,i.__)("{{strong}}Single{{/strong}} economic nexus compliance","woocommerce"),components:{strong:(0,a.createElement)("strong",null)}}),(0,i.__)("100% free","woocommerce")],terms:(0,a.createElement)(ce.O,{buttonText:(0,i.__)("Continue setup","woocommerce")}),actionText:(0,i.__)("Continue setup","woocommerce"),onClick:()=>{(0,c.recordEvent)("tasklist_tax_select_option",{selected_option:"woocommerce-tax"}),(0,d.updateQueryString)({partner:"woocommerce-tax"})}}),Le=e=>{let{isPending:t,onManual:n}=e;const{generalSettings:o}=(0,s.useSelect)((e=>{var t;const{getSettings:n}=e(l.SETTINGS_STORE_NAME);return{generalSettings:null===(t=n("general"))||void 0===t?void 0:t.general}}));return(0,a.createElement)(a.Fragment,null,(0,a.createElement)(p.Button,{isPrimary:!0,disabled:t,isBusy:t,onClick:()=>{(0,c.recordEvent)("tasklist_tax_config_rates",{}),n()}},(0,i.__)("Configure","woocommerce")),(0,a.createElement)("p",null,"yes"!==(null==o?void 0:o.woocommerce_calc_taxes)&&(0,U.Z)({mixedString:(0,i.__)('By clicking "Configure" you\'re enabling tax rates and calculations. More info {{link}}here{{/link}}.',"woocommerce"),components:{link:(0,a.createElement)(f.Link,{href:"https://woo.com/document/setting-up-taxes-in-woocommerce/?utm_medium=product#section-1",target:"_blank",type:"external"},(0,a.createElement)(a.Fragment,null))}})))},be=e=>{const t=(0,Q.z)(e);return e.addressLine1.trim().length||(t.addressLine1=(0,i.__)("Please enter an address","woocommerce")),e.postCode.trim().length||(t.postCode=(0,i.__)("Please enter a post code","woocommerce")),e.city.trim().length||(t.city=(0,i.__)("Please enter a city","woocommerce")),t},ke=e=>{let{nextStep:t}=e;const{createNotice:n}=(0,s.useDispatch)("core/notices"),{updateAndPersistSettingsForGroup:o}=(0,s.useDispatch)(l.SETTINGS_STORE_NAME),{generalSettings:r,isResolving:i,isUpdating:m}=(0,s.useSelect)((e=>{var t;const{getSettings:n,hasFinishedResolution:o,isUpdateSettingsRequesting:r}=e(l.SETTINGS_STORE_NAME);return{generalSettings:null===(t=n("general"))||void 0===t?void 0:t.general,isResolving:!o("getSettings",["general"]),isUpdating:r("general")}}));return(0,a.useEffect)((()=>{i||m||!(0,we.AO)(r||{})||t()}),[i,r,m]),i?null:(0,a.createElement)(Q.Z,{validate:be,onComplete:e=>{const t=(0,R.so)(e.countryState);(0,c.recordEvent)("tasklist_tax_set_location",{country:t})},isSettingsRequesting:!1,settings:r,updateAndPersistSettingsForGroup:o,createNotice:n})},Se=e=>{let{isPending:t,onDisable:n,onAutomate:o,onManual:r}=e;const[s,l]=(0,a.useState)(0),c={isPending:t,onAutomate:o,onDisable:n,nextStep:()=>{l(s+1)},onManual:r},m=[{key:"store_location",label:(0,i.__)("Set store location","woocommerce"),description:(0,i.__)("The address from which your business operates","woocommerce"),content:(0,a.createElement)(ke,c)},{key:"manual_configuration",label:(0,i.__)("Configure tax rates","woocommerce"),description:(0,i.__)("Head over to the tax rate settings screen to configure your tax rates","woocommerce"),content:(0,a.createElement)(Le,c)}],u=m[s];return(0,a.createElement)(f.Stepper,{isVertical:!0,currentStep:u.key,steps:m})},Me=e=>{let{children:t,isPending:n,onManual:o,onDisable:r}=e;const s=g()("woocommerce-task-card","woocommerce-tax-partners",`woocommerce-tax-partners__partners-count-${a.Children.count(t)}`);return(0,a.createElement)(p.Card,{className:s},(0,a.createElement)(p.CardHeader,null,(0,i.__)("Choose a tax partner","woocommerce")),(0,a.createElement)(p.CardBody,null,(0,a.createElement)("div",{className:"woocommerce-tax-partners__partners"},t),(0,a.createElement)("ul",{className:"woocommerce-tax-partners__other-actions"},(0,a.createElement)("li",null,(0,a.createElement)(p.Button,{isTertiary:!0,disabled:n,isBusy:n,onClick:()=>{o()}},(0,i.__)("Set up taxes manually","woocommerce"))),(0,a.createElement)("li",null,(0,a.createElement)(p.Button,{isTertiary:!0,disabled:n,isBusy:n,onClick:()=>{r()}},(0,i.__)("I don't charge sales tax","woocommerce"))))))},Ne=e=>{let{isPending:t,onAutomate:n,onManual:o,onDisable:r}=e;return(0,a.createElement)("div",{className:"woocommerce-task-tax__success"},(0,a.createElement)("span",{className:"woocommerce-task-tax__success-icon",role:"img","aria-labelledby":"woocommerce-task-tax__success-message"},"🎊"),(0,a.createElement)(f.H,{id:"woocommerce-task-tax__success-message"},(0,i.__)("Good news!","woocommerce")),(0,a.createElement)("p",null,(0,U.Z)({mixedString:(0,i.__)("{{strong}}WooCommerce Tax{{/strong}} can automate your sales tax calculations for you.","woocommerce"),components:{strong:(0,a.createElement)("strong",null)}})),(0,a.createElement)(p.Button,{isPrimary:!0,isBusy:t,onClick:()=>{(0,c.recordEvent)("tasklist_tax_setup_automated_proceed",{setup_automatically:!0}),n()}},(0,i.__)("Yes please","woocommerce")),(0,a.createElement)(p.Button,{disabled:t,isTertiary:!0,onClick:()=>{(0,c.recordEvent)("tasklist_tax_setup_automated_proceed",{setup_automatically:!1}),o()}},(0,i.__)("No thanks, I'll set up manually","woocommerce")),(0,a.createElement)(p.Button,{disabled:t,isTertiary:!0,onClick:r},(0,i.__)("I don't charge sales tax","woocommerce")))},xe=e=>{let{onDisable:t,onManual:n}=e;return(0,a.createElement)(Y.Z,{onConnect:()=>{(0,c.recordEvent)("tasklist_tax_connect_store",{connect:!0,no_tax:!1})},onSkip:()=>{(0,c.queueRecordEvent)("tasklist_tax_connect_store",{connect:!1,no_tax:!1}),n()},skipText:(0,i.__)("Set up tax rates manually","woocommerce"),onAbort:()=>t(),abortText:(0,i.__)("My business doesn't charge sales tax","woocommerce")})},Te=e=>"object"==typeof e&&null!==e,Ae=e=>{let{nextStep:t,onDisable:n,onManual:o,pluginsToActivate:r}=e;const{updateOptions:m}=(0,s.useDispatch)(l.OPTIONS_STORE_NAME),{isResolving:u,tosAccepted:d}=(0,s.useSelect)((e=>{const{getOption:t,hasFinishedResolution:n}=e(l.OPTIONS_STORE_NAME),o=t("wc_connect_options");return{isResolving:!n("getOption",["woocommerce_setup_jetpack_opted_in"])||!n("getOption",["wc_connect_options"]),tosAccepted:Te(o)&&(null==o?void 0:o.tos_accepted)||"1"===t("woocommerce_setup_jetpack_opted_in")}}));return(0,a.useEffect)((()=>{d&&!r.length&&t()}),[u]),u?null:(0,a.createElement)(a.Fragment,null,!d&&(0,a.createElement)(ce.O,{buttonText:(0,i.__)("Install & enable","woocommerce")}),(0,a.createElement)(f.Plugins,{onComplete:(e,n)=>{(0,k.a)(n),(0,c.recordEvent)("tasklist_tax_install_extensions",{install_extensions:!0}),m({woocommerce_setup_jetpack_opted_in:!0}),t()},onError:(e,t)=>(0,k.a)(t),onSkip:()=>{(0,c.queueRecordEvent)("tasklist_tax_install_extensions",{install_extensions:!1}),o()},skipText:(0,i.__)("Set up manually","woocommerce"),onAbort:()=>n(),abortText:(0,i.__)("I don't charge sales tax","woocommerce"),pluginSlugs:r}))},Ie=e=>{let{isPending:t,onDisable:n,onAutomate:o,onManual:r}=e;const[c,m]=(0,a.useState)([]),{activePlugins:u,isResolving:d}=(0,s.useSelect)((e=>{var t;const{getSettings:n}=e(l.SETTINGS_STORE_NAME),{hasFinishedResolution:o}=e(l.OPTIONS_STORE_NAME),{getActivePlugins:r}=e(l.PLUGINS_STORE_NAME);return{activePlugins:r(),generalSettings:null===(t=n("general"))||void 0===t?void 0:t.general,isResolving:!o("getOption",["woocommerce_setup_jetpack_opted_in"])||!o("getOption",["wc_connect_options"])}})),[p,h]=(0,a.useState)(0);(0,a.useEffect)((()=>{const e=(0,W.difference)(we.c7,u);e.length<=c.length||m(e)}),[u]);const C={isPending:t,isResolving:d,onAutomate:o,onDisable:n,nextStep:()=>{h(p+1)},onManual:r,pluginsToActivate:c},g=[{key:"store_location",label:(0,i.__)("Set store location","woocommerce"),description:(0,i.__)("The address from which your business operates","woocommerce"),content:(0,a.createElement)(ke,C)},{key:"plugins",label:(0,i.__)("Install WooCommerce Tax","woocommerce"),description:(0,i.__)("WooCommerce Tax allows you to automate sales tax calculations","woocommerce"),content:(0,a.createElement)(Ae,C)},{key:"connect",label:(0,i.__)("Connect your store","woocommerce"),description:(0,i.__)("Connect your store to WordPress.com to enable automated sales tax calculations","woocommerce"),content:(0,a.createElement)(xe,C)}],y=g[p];return(0,a.createElement)(f.Stepper,{isPending:d,isVertical:!0,currentStep:y.key,steps:g})},Oe=e=>{let{isPending:t,onAutomate:n,onManual:o,onDisable:r}=e;const{generalSettings:i,isJetpackConnected:c,isResolving:m,pluginsToActivate:u}=(0,s.useSelect)((e=>{const{getSettings:t}=e(l.SETTINGS_STORE_NAME),{getActivePlugins:n,hasFinishedResolution:o}=e(l.PLUGINS_STORE_NAME),r=n();return{generalSettings:t("general").general,isJetpackConnected:e(l.PLUGINS_STORE_NAME).isJetpackConnected(),isResolving:!o("isJetpackConnected")||!e(l.SETTINGS_STORE_NAME).hasFinishedResolution("getSettings",["general"])||!o("getActivePlugins"),pluginsToActivate:(0,W.difference)(we.c7,r)}}));if(m)return(0,a.createElement)(f.Spinner,null);const d={isPending:t,onAutomate:n,onManual:o,onDisable:r};return(0,we.AO)(i||{})&&!u.length&&c?(0,a.createElement)(Ne,d):(0,a.createElement)(Ie,d)},Pe=e=>{let{children:t}=e;return(0,a.createElement)(p.Card,{className:"woocommerce-task-card"},(0,a.createElement)(p.CardBody,null,t))},Re=e=>{let{onComplete:t,query:n,task:o}=e;const[r,m]=(0,a.useState)(!1),{updateOptions:u}=(0,s.useDispatch)(l.OPTIONS_STORE_NAME),{createNotice:d}=(0,s.useDispatch)("core/notices"),{updateAndPersistSettingsForGroup:h}=(0,s.useDispatch)(l.SETTINGS_STORE_NAME),{generalSettings:C,isResolving:g,taxSettings:f}=(0,s.useSelect)((e=>{const{getSettings:t,hasFinishedResolution:n}=e(l.SETTINGS_STORE_NAME);return{generalSettings:t("general").general,isResolving:!n("getSettings",["general"]),taxSettings:t("tax").tax||{}}})),y=(0,a.useCallback)((async()=>{m(!0),"yes"!==(null==C?void 0:C.woocommerce_calc_taxes)?(h("tax",{tax:{...f,wc_connect_taxes_enabled:"no"}}),h("general",{general:{...C,woocommerce_calc_taxes:"yes"}}).then((()=>(0,we._9)())).catch((e=>{m(!1),(0,k.a)(e)}))):(0,we._9)()}),[]),w=(0,a.useCallback)((async()=>{m(!0);try{await Promise.all([h("tax",{tax:{...f,wc_connect_taxes_enabled:"yes"}}),h("general",{general:{...C,woocommerce_calc_taxes:"yes"}})])}catch(e){return m(!1),void d("error",(0,i.__)("There was a problem setting up automated taxes. Please try again.","woocommerce"))}d("success",(0,i.__)("You're awesome! One less item on your to-do list ✅","woocommerce")),t()}),[]),H=(0,a.useCallback)((()=>{m(!0),(0,c.queueRecordEvent)("tasklist_tax_connect_store",{connect:!1,no_tax:!0}),u({woocommerce_no_sales_tax:!0,woocommerce_calc_taxes:"no"}).then((()=>{window.location.href=(0,G.getAdminLink)("admin.php?page=wc-admin")}))}),[]),_=(()=>{const e=(0,R.so)(null==C?void 0:C.woocommerce_default_country)||"",{additionalData:{woocommerceTaxCountries:t=[],taxJarActivated:n}={}}=o;return[{id:"woocommerce-tax",card:Ee,component:Oe,isVisible:!n&&t.includes(e)}].filter((e=>e.isVisible))})();(0,a.useEffect)((()=>{const{auto:e}=n;"true"!==e?n.partner||(0,c.recordEvent)("tasklist_tax_view_options",{options:_.map((e=>e.id))}):w()}),[]);const v={isPending:r,onAutomate:w,onManual:y,onDisable:H,task:o};if(g)return(0,a.createElement)(p.Spinner,null);const E=n.partner&&_.find((e=>e.id===n.partner))||null;return _.length?E?(0,a.createElement)(Pe,null,E.component&&(0,a.createElement)(E.component,v)):(0,a.createElement)(Me,v,_.map((e=>e.card&&(0,a.createElement)(e.card,{key:e.id,...v})))):(0,a.createElement)(Pe,null,(0,a.createElement)(Se,v))};(0,m.registerPlugin)("wc-admin-onboarding-task-tax",{scope:"woocommerce-tasks",render:()=>(0,a.createElement)(u.WooOnboardingTask,{id:"tax"},(e=>{let{onComplete:t,query:n,task:o}=e;return(0,a.createElement)(Re,{onComplete:t,query:n,task:o})}))}),(0,m.registerPlugin)("woocommerce-admin-task-wcpay",{scope:"woocommerce-tasks",render:()=>{const{installAndActivatePlugins:e}=(0,s.useDispatch)(l.PLUGINS_STORE_NAME),{createNotice:t}=(0,s.useDispatch)("core/notices");return(0,a.createElement)(u.WooOnboardingTaskListItem,{id:"woocommerce-payments"},(n=>{let{defaultTaskItem:o}=n;return(0,a.createElement)(o,{onClick:()=>new Promise(((n,o)=>O(o,t,e)))})}))}});const Ve=()=>{const{installAndActivatePlugins:e}=(0,s.useDispatch)(l.PLUGINS_STORE_NAME),{createNotice:t}=(0,s.useDispatch)("core/notices");return(0,ge.useEffect)((()=>{new Promise(((n,o)=>O(o,t,e)))}),[t,e]),(0,a.createElement)("div",{style:{height:"70vh",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center"}},(0,a.createElement)(f.Spinner,null),(0,a.createElement)("div",{style:{marginTop:"1rem"}},"Preparing payment settings..."))};(0,m.registerPlugin)("woocommerce-admin-task-wcpay-page",{scope:"woocommerce-tasks",render:()=>(0,a.createElement)(u.WooOnboardingTask,{id:"woocommerce-payments"},(0,a.createElement)(Ve,null))});const je=()=>{const[e,t]=(0,a.useState)([]),{isResolving:n,taskLists:o}=(0,s.useSelect)((e=>({isResolving:e(l.ONBOARDING_STORE_NAME).isResolving("getTaskLists"),taskLists:e(l.ONBOARDING_STORE_NAME).getTaskLists()})));return(0,a.useEffect)((()=>{if(o&&o.length>0){const e=[];for(const t of o)for(const n of t.tasks)n.isDeprecated&&n.container&&e.push(n);t(e)}}),[o]),n?null:(0,a.createElement)(a.Fragment,null,e.map((e=>(0,a.createElement)(u.WooOnboardingTask,{id:e.id,key:e.id},(()=>e.container)))))};(0,m.registerPlugin)("wc-admin-deprecated-task-container",{scope:"woocommerce-tasks",render:()=>(0,a.createElement)(je,null)}),(async()=>{var e,t,o,a;(null===(e=window)||void 0===e||null===(t=e.wcAdminFeatures)||void 0===t?void 0:t["import-products-task"])&&(null==r||null===(o=r.profile)||void 0===o?void 0:o.selling_venues)&&"no"!==(null==r||null===(a=r.profile)||void 0===a?void 0:a.selling_venues)?Promise.all([n.e(6412),n.e(4891)]).then(n.bind(n,14891)):Promise.all([n.e(6412),n.e(5792)]).then(n.bind(n,65792))})(),window.wcAdminFeatures&&window.wcAdminFeatures["shipping-smart-defaults"]&&n.e(8994).then(n.bind(n,8994));var De=n(47642),Ze=n(92342),Be=n(46530),Fe=n(26016);var ze=n(22629),We=n(25753);class Ue extends a.Component{constructor(e){super(e),this.state={purchaseNowButtonBusy:!1,purchaseLaterButtonBusy:!1}}onClickPurchaseNow(){const{productIds:e,onClickPurchaseNow:t}=this.props;if(this.setState({purchaseNowButtonBusy:!0}),!e.length)return;(0,c.recordEvent)("tasklist_modal_proceed_checkout",{product_ids:e,purchase_install:!0});const n=(0,We.C)("https://woo.com/cart?utm_medium=product",{"wccom-replace-with":e.join(",")});t?t(n):window.location=n}onClickPurchaseLater(){const{productIds:e}=this.props;(0,c.recordEvent)("tasklist_modal_proceed_checkout",{product_ids:e,purchase_install:!1}),this.setState({purchaseLaterButtonBusy:!0}),this.props.onClickPurchaseLater()}onClose(){const{onClose:e,productIds:t}=this.props;(0,c.recordEvent)("tasklist_modal_proceed_checkout",{product_ids:t,purchase_install:!1}),e()}renderProducts(){const{productIds:e,productTypes:t}=this.props,{themes:n=[]}=(0,o.O3)("onboarding",{}),r=[];return e.forEach((e=>{const o=(0,W.find)(t,(t=>t.product===e));o&&r.push({title:o.label,content:o.description});const s=(0,W.find)(n,(t=>t.id===e));s&&r.push({title:(0,i.sprintf)((0,i.__)("%1$s — %2$s per year","woocommerce"),s.title,(0,ze.decodeEntities)(s.price)),content:(0,a.createElement)("span",{dangerouslySetInnerHTML:(0,S.ZP)(s.excerpt)})})})),(0,a.createElement)(f.List,{items:r})}render(){const{purchaseNowButtonBusy:e,purchaseLaterButtonBusy:t}=this.state;return(0,a.createElement)(p.Modal,{title:(0,i.__)("Would you like to add the following paid features to your store now?","woocommerce"),onRequestClose:()=>this.onClose(),className:"woocommerce-cart-modal"},this.renderProducts(),(0,a.createElement)("p",{className:"woocommerce-cart-modal__help-text"},(0,i.__)("You won't have access to this functionality until the extensions have been purchased and installed.","woocommerce")),(0,a.createElement)("div",{className:"woocommerce-cart-modal__actions"},(0,a.createElement)(p.Button,{isLink:!0,isBusy:t,onClick:()=>this.onClickPurchaseLater()},(0,i.__)("I'll do it later","woocommerce")),(0,a.createElement)(p.Button,{isPrimary:!0,isBusy:e,onClick:()=>this.onClickPurchaseNow()},(0,i.__)("Buy now","woocommerce"))))}}const Ge=(0,z.compose)((0,s.withSelect)((e=>{const{getInstalledPlugins:t}=e(l.PLUGINS_STORE_NAME),{getProductTypes:n,getProfileItems:o}=e(l.ONBOARDING_STORE_NAME),r=o(),a=t(),i=n();return{profileItems:r,productIds:(0,R.jt)(i,r,!1,a),productTypes:i}})))(Ue),Ye={store_details:e=>{let{task:t,goToTask:n}=e;return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Store location illustration","woocommerce"),src:o.vm+"images/task_list/store-details-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("First, tell us about your store","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("Get your store up and running in no time. Add your store's address to set up shipping, tax and payments faster.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:n},(0,i.__)("Add details","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Fe,alt:"Timer"})," ",(0,a.createElement)("span",null,(0,i.__)("2 minutes","woocommerce")))))},"customize-store":e=>{let{task:t,goToTask:n}=e;return(0,a.createElement)("div",{className:`woocommerce-task-header__contents-container woocommerce-task-header__${t.id}`},(0,a.createElement)("img",{alt:(0,i.__)("Customize your store illustration","woocommerce"),src:o.vm+"images/task_list/customize-store-illustration.svg",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("Start customizing your store","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("Use our built-in AI tools to effortlessly design your store and generate content, or choose a pre-built theme and customize it to fit your brand.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:n},(0,i.__)("Start customizing","woocommerce"))))},tax:e=>{let{task:t,goToTask:n}=e;return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Tax illustration","woocommerce"),src:o.vm+"images/task_list/tax-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("Add your tax rates","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("Set up tax rates manually or use WooCommerce Tax to automate your sales tax calculations for you.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:n},(0,i.__)("Yes, please","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Fe,alt:"Timer"})," ",(0,a.createElement)("span",null,t.time))))},shipping:e=>{let{task:t,goToTask:n}=e;return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Shipping illustration","woocommerce"),src:o.vm+"images/task_list/shipping-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("Set up shipping for your store","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("Choose where and how you will ship your products, select shipping methods, and add fixed or calculated rates.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:n},(0,i.__)("Add shipping zones","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Fe,alt:"Timer"})," ",(0,a.createElement)("span",null,t.time))))},marketing:e=>{let{task:t,goToTask:n}=e;return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Marketing illustration","woocommerce"),src:o.vm+"images/task_list/sales-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("Get more sales","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("Give your business a boost by enabling social channels such as newsletter, Facebook, Google, in-person selling, and more.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:n},(0,i.__)("Add sales channels","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Fe,alt:"Timer"})," ",(0,a.createElement)("span",null,t.time))))},appearance:e=>{let{task:t}=e;const{onClick:n}=fe(),r=t.title,s=t.content,l=t.actionLabel,c=t.time;return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Appearance illustration","woocommerce"),src:o.vm+"images/task_list/expand-section-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,r),(0,a.createElement)("p",null,s),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:n},l),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Fe,alt:"Timer"})," ",(0,a.createElement)("span",null,c))))},payments:e=>{let{task:t,goToTask:n}=e;return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Payment illustration","woocommerce"),src:o.vm+"images/task_list/payment-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("Add a way to get paid","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("Choose from fast & secure online and offline payment methods to make it easy for your customers to pay in your store.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:n},(0,i.__)("View options","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Fe,alt:"Timer"})," ",(0,a.createElement)("span",null,t.time))))},products:e=>{let{task:t,goToTask:n}=e;return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Products illustration","woocommerce"),src:o.vm+"images/task_list/sales-section-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("Add products to sell","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("Build your catalog by adding what you want to sell. You can add products manually or import them from a different store.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:n},(0,i.__)("Add products","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Fe,alt:"Timer"})," ",(0,a.createElement)("span",null,(0,i.__)("2 minutes","woocommerce")))))},purchase:e=>{let{task:t}=e;const[n,r]=(0,a.useState)(!1),s=(0,a.useCallback)((()=>{n||(0,c.recordEvent)("tasklist_purchase_extensions"),r(!n)}),[n]);return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Purchase illustration","woocommerce"),src:o.vm+"images/task_list/purchase-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,t.title),(0,a.createElement)("p",null,(0,i.__)("Good choice! You chose to add amazing new features to your store. Continue to checkout to complete your purchase.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:s},(0,i.__)("Continue","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Fe,alt:"Timer"})," ",(0,a.createElement)("span",null,t.time))),n&&(0,a.createElement)(Ge,{onClose:()=>s(),onClickPurchaseLater:()=>s()}))},"woocommerce-payments":e=>{var t;let{task:n,trackClick:r}=e;const c=(0,o.O3)("wcpayWelcomePageIncentive")||(null===(t=window.wcpaySettings)||void 0===t?void 0:t.connectIncentive),{createNotice:m}=(0,s.useDispatch)("core/notices"),[u,d]=(0,a.useState)(!1);return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Payment illustration","woocommerce"),src:o.vm+"images/task_list/payment-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("It's time to get paid","woocommerce")),null!=c&&c.task_header_content?(0,a.createElement)("p",{dangerouslySetInnerHTML:(0,S.ZP)(c.task_header_content)}):(0,a.createElement)("p",null,(0,i.__)("You're only one step away from getting paid. Verify your business details to start managing transactions with WooPayments.","woocommerce")),(0,a.createElement)("p",null,(0,U.Z)({mixedString:(0,i.__)('By clicking "Verify Details", you agree to the {{link}}Terms of Service{{/link}}',"woocommerce"),components:{link:(0,a.createElement)(f.Link,{href:"https://wordpress.com/tos/",target:"_blank",type:"external",rel:"noreferrer"})}})),(0,a.createElement)(p.Button,{isSecondary:n.isComplete,isPrimary:!n.isComplete,isBusy:u,disabled:u,onClick:()=>{r(),((e,t)=>{const n=(0,i.__)("There was an error connecting to WooPayments. Please try again or connect later in store settings.","woocommerce");t(!0),A()({path:l.WC_ADMIN_NAMESPACE+"/plugins/connect-wcpay",method:"POST"}).then((e=>{window.location=e.connectUrl})).catch((()=>{e("error",n),t(!1)}))})(m,d)}},(0,i.__)("Verify details","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Fe,alt:"Timer"})," ",(0,a.createElement)("span",null,(0,i.__)("2 minutes","woocommerce")))))}},Qe=e=>{let{showDismissModal:t,setShowDismissModal:n,hideTasks:o}=e;const r=(0,i.__)("Hide store setup tasks","woocommerce"),s=(0,i.__)("Are you sure? These tasks are required for all stores.","woocommerce"),l=(0,i.__)("Cancel","woocommerce"),c=(0,i.__)("Yes, hide store setup tasks","woocommerce");return(0,a.createElement)(a.Fragment,null,t&&(0,a.createElement)(p.Modal,{title:r,className:"woocommerce-task-dismiss-modal",onRequestClose:()=>n(!1)},(0,a.createElement)("div",{className:"woocommerce-task-dismiss-modal__wrapper"},(0,a.createElement)("div",{className:"woocommerce-usage-modal__message"},s),(0,a.createElement)("div",{className:"woocommerce-usage-modal__actions"},(0,a.createElement)(p.Button,{onClick:()=>n(!1)},l),(0,a.createElement)(p.Button,{isPrimary:!0,onClick:()=>{o("remove_card"),n(!1)}},c)))))};var qe=n(21079);const Je=e=>{let{hideTasks:t,keepTasks:n}=e;return(0,a.createElement)(a.Fragment,null,(0,a.createElement)("div",{className:g()("woocommerce-task-dashboard__container setup-task-list")},(0,a.createElement)(p.Card,{size:"large",className:"woocommerce-task-card woocommerce-homescreen-card completed"},(0,a.createElement)(p.CardHeader,{size:"medium"},(0,a.createElement)("div",{className:"wooocommerce-task-card__header"},(0,a.createElement)("img",{src:qe,alt:"Completed"}),(0,a.createElement)("h2",null,(0,i.__)("You've completed store setup","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:!0,onClick:n},(0,i.__)("Keep list","woocommerce")),(0,a.createElement)(p.Button,{isPrimary:!0,onClick:t},(0,i.__)("Hide this list","woocommerce")))))))},Ke="woocommerce_tasklist_experimental_progress_header_item",Xe=e=>{let{children:t,order:n=1}=e;return(0,a.createElement)(p.Fill,{name:Ke},(e=>(0,f.createOrderedChildren)(t,n,e)))};Xe.Slot=e=>{let{fillProps:t}=e;return(0,a.createElement)(p.Slot,{name:Ke,fillProps:t},f.sortFillsByOrder)};const $e=e=>{let{id:t,hideTaskListText:n}=e;const{hideTaskList:o}=(0,s.useDispatch)(l.ONBOARDING_STORE_NAME);return(0,a.createElement)("div",{className:"woocommerce-card__menu woocommerce-card__header-item"},(0,a.createElement)(f.EllipsisMenu,{label:(0,i.__)("Task List Options","woocommerce"),renderContent:()=>(0,a.createElement)("div",{className:"woocommerce-task-card__section-controls"},(0,a.createElement)(p.Button,{onClick:()=>o(t)},n||(0,i.__)("Hide this","woocommerce")))}))},et=e=>{let{taskListId:t}=e;const{loading:n,tasksCount:o,completedCount:r}=(0,s.useSelect)((e=>{const n=e(l.ONBOARDING_STORE_NAME).getTaskList(t),o=e(l.ONBOARDING_STORE_NAME).hasFinishedResolution("getTaskList",[t]),r=(0,l.getVisibleTasks)((null==n?void 0:n.tasks)||[]);return{loading:!o,tasksCount:null==r?void 0:r.length,completedCount:null==r?void 0:r.filter((e=>e.isComplete)).length}}));return n?null:(0,a.createElement)("div",{className:"woocommerce-task-progress-header"},(0,a.createElement)($e,{id:t,hideTaskListText:(0,i.__)("Hide setup list","woocommerce")}),(0,a.createElement)("div",{className:"woocommerce-task-progress-header__contents"},r!==o?(0,a.createElement)(a.Fragment,null,(0,a.createElement)("p",null,(0,i.sprintf)((0,i.__)("Follow these steps to start selling quickly. %1$d out of %2$d complete.","woocommerce"),r,o)),(0,a.createElement)("progress",{className:"woocommerce-task-progress-header__progress-bar",max:o,value:r||.25})):null))},tt=e=>{var t;let{taskListId:n}=e;const o=(0,y.useSlot)(Ke);return Boolean(null==o||null===(t=o.fills)||void 0===t?void 0:t.length)?(0,a.createElement)(Xe.Slot,{fillProps:{taskListId:n}}):(0,a.createElement)(et,{taskListId:n})},nt=e=>{var t;let{task:n,activeTaskId:o,taskIndex:r,goToTask:c,trackClick:m}=e;const{createNotice:d}=(0,s.useDispatch)("core/notices"),{dismissTask:p,undoDismissTask:h}=(0,s.useDispatch)(l.ONBOARDING_STORE_NAME),{id:C,title:f,badge:w,content:H,time:_,actionLabel:v,isComplete:E,additionalInfo:L,isDismissable:b}=n,k=(0,y.useSlot)(`woocommerce_onboarding_task_list_item_${C}`),S=Boolean(null==k||null===(t=k.fills)||void 0===t?void 0:t.length),M=(0,a.useCallback)((e=>{const t=g()("woocommerce-task-list__item index-"+r,{complete:E,"is-active":C===o});return(0,a.createElement)(y.TaskItem,{key:C,className:t,title:f,badge:w,completed:E,additionalInfo:L,content:H,onClick:t=>{"A"!==t.target.tagName&&(()=>{if(e.onClick)return m(),e.onClick();c()})()},onDismiss:b?()=>(p(C),void d("success",(0,i.__)("Task dismissed","woocommerce"),{actions:[{label:(0,i.__)("Undo","woocommerce"),onClick:()=>h(C)}]})):void 0,action:()=>{},actionLabel:v})}),[C,f,w,H,_,v,E,o]);return S?(0,a.createElement)(u.WooOnboardingTaskListItem.Slot,{id:C,fillProps:{defaultTaskItem:M,isComplete:E}}):(0,a.createElement)(M,null)};var ot=n(75606),rt=n(5196);const at="store_setup";function it(e){if(0===e)return null;const t=Date.now()-1e3*e;return Math.round(t/l.WEEK)}const st=e=>{let{hideTasks:t,keepTasks:n,customerEffortScore:o}=e;const{updateOptions:r}=(0,s.useDispatch)(l.OPTIONS_STORE_NAME),[m,u]=(0,a.useState)(!1),[d,h]=(0,a.useState)(!1),[C,w]=(0,a.useState)(NaN),[H,_]=(0,a.useState)(!1),{storeAgeInWeeks:v,cesShownForActions:E,canShowCustomerEffortScore:L}=(0,s.useSelect)((e=>{const{getOption:t,hasFinishedResolution:n}=e(l.OPTIONS_STORE_NAME);if(o){const e=t(ot.ALLOW_TRACKING_OPTION_NAME),o=t(ot.ADMIN_INSTALL_TIMESTAMP_OPTION_NAME)||0,r=t(ot.SHOWN_FOR_ACTIONS_OPTION_NAME),a=!n("getOption",[ot.SHOWN_FOR_ACTIONS_OPTION_NAME])||!n("getOption",[ot.ADMIN_INSTALL_TIMESTAMP_OPTION_NAME]);return{storeAgeInWeeks:it(o),cesShownForActions:r,canShowCustomerEffortScore:!a&&e&&!(r||[]).includes("store_setup"),loading:a}}return{}}));(0,a.useEffect)((()=>{d&&setTimeout((()=>{_(!0)}),1200)}),[d]);const b=e=>{let{firstScore:t,secondScore:n,comments:o}=e;(0,c.recordEvent)("ces_feedback",{action:at,score:t,score_second_question:null!=n?n:null,score_combined:t+(null!=n?n:0),comments:o||"",store_age:v}),r({[ot.SHOWN_FOR_ACTIONS_OPTION_NAME]:[at,...E||[]]}),h(!0)};return(0,a.createElement)(a.Fragment,null,(0,a.createElement)("div",{className:g()("woocommerce-task-dashboard__container setup-task-list")},(0,a.createElement)(p.Card,{size:"large",className:"woocommerce-task-card woocommerce-homescreen-card completed"},(0,a.createElement)(p.CardHeader,{size:"medium"},(0,a.createElement)("div",{className:"wooocommerce-task-card__header"},(0,a.createElement)("img",{src:rt,alt:"Completed",className:"wooocommerce-task-card__finished-header-image"}),(0,a.createElement)(y.Text,{size:"title",as:"h2",lineHeight:1.4},(0,i.__)("You've completed store setup","woocommerce")),(0,a.createElement)(y.Text,{variant:"subtitle.small",as:"p",size:"13",lineHeight:"16px",className:"wooocommerce-task-card__header-subtitle"},(0,i.__)("Congratulations! Take a moment to celebrate and look out for the first sale.","woocommerce")),(0,a.createElement)("div",{className:"woocommerce-task-card__header-menu"},(0,a.createElement)(f.EllipsisMenu,{label:(0,i.__)("Task List Options","woocommerce"),renderContent:()=>(0,a.createElement)("div",{className:"woocommerce-task-card__section-controls"},(0,a.createElement)(p.Button,{onClick:()=>n()},(0,i.__)("Show setup task list","woocommerce")),(0,a.createElement)(p.Button,{onClick:()=>t()},(0,i.__)("Hide this","woocommerce")))})))),L&&!H&&!d&&(0,a.createElement)(ot.CustomerFeedbackSimple,{label:(0,i.__)("How was your experience?","woocommerce"),onSelect:e=>{e>2?(w(e),b({firstScore:e})):(w(e),u(!0),(0,c.recordEvent)("ces_view",{action:at,store_age:v}))}}),d&&!H&&(0,a.createElement)("div",{className:"wooocommerce-task-card__header-ces-feedback"},(0,a.createElement)(y.Text,{variant:"subtitle.small",as:"p",size:"13",lineHeight:"16px"},"🙌"," ",(0,i.__)("We appreciate your feedback!","woocommerce"))))),m?(0,a.createElement)(ot.CustomerFeedbackModal,{title:(0,i.__)("How was your experience?","woocommerce"),firstQuestion:(0,i.__)("The store setup is easy to complete.","woocommerce"),secondQuestion:(0,i.__)("The store setup process meets my needs.","woocommerce"),defaultScore:C,recordScoreCallback:(e,t,n)=>{u(!1),b({firstScore:e,secondScore:t,comments:n})},onCloseModal:()=>{w(NaN),u(!1)}}):null)},lt="experimental_woocommerce_tasklist_footer_item",ct=e=>{let{children:t,order:n=1}=e;return(0,a.createElement)(p.Fill,{name:lt},(e=>(0,f.createOrderedChildren)(t,n,e)))};ct.Slot=e=>{let{fillProps:t}=e;return(0,a.createElement)(p.Slot,{name:lt,fillProps:t},f.sortFillsByOrder)};const mt=()=>{var e;const t=(0,y.useSlot)(lt);return Boolean(null==t||null===(e=t.fills)||void 0===e?void 0:e.length)?(0,a.createElement)("div",{className:"woocommerce-tasklist__footer"},(0,a.createElement)(ct.Slot,null)):null},ut="woocommerce_experimental_task_list_completion",dt=e=>{let{children:t,order:n=1}=e;return(0,a.createElement)(p.Fill,{name:ut},(e=>(0,f.createOrderedChildren)(t,n,e)))};dt.Slot=e=>{let{fillProps:t}=e;return(0,a.createElement)(p.Slot,{name:ut,fillProps:t},f.sortFillsByOrder)};const pt=e=>{var t;let{className:n,fillProps:o}=e;const r=(0,y.useSlot)(ut);return Boolean(null==r||null===(t=r.fills)||void 0===t?void 0:t.length)?(0,a.createElement)("div",{className:g()("woocommerce-tasklist-completion-slot",n)},(0,a.createElement)(dt.Slot,{fillProps:o})):null},ht=e=>{var t,n,o,r,m,h;let{query:C,id:w,eventName:H,eventPrefix:_,tasks:v,keepCompletedTaskList:E,isComplete:L,displayProgressHeader:b,cesHeader:k=!0}=e;const S=H?H+"_":_,{profileItems:M}=(0,s.useSelect)((e=>{const{getProfileItems:t}=e(l.ONBOARDING_STORE_NAME);return{profileItems:t()}})),{hideTaskList:N,visitedTask:x,keepCompletedTaskList:T}=(0,s.useDispatch)(l.ONBOARDING_STORE_NAME),A=(0,l.useUserPreferences)(),[I,O]=(0,a.useState)({}),[P,R]=(0,a.useState)(""),[V,j]=(0,a.useState)(!1),{layoutString:D}=(0,Be.useLayoutContext)(),Z=(0,a.useRef)(C),B=(0,l.getVisibleTasks)(v);(0,a.useEffect)((()=>{C.task||(0,c.recordEvent)(`${S}view`,{number_tasks:B.length,store_connected:M.wccom_connected,context:D})}),[]);const F=(0,y.useSlot)(ut);(0,a.useEffect)((()=>{const{task:e}=Z.current,{task:t}=C;e!==t&&(window.document.documentElement.scrollTop=0,Z.current=C)}),[C]);const z=v.filter((e=>!e.isComplete&&!e.isDismissed)),W=()=>{N(w)},U=()=>{T(w)};let G=B.find((e=>!1===e.isComplete));G||(G=B[B.length-1]);const Y=(0,y.useSlot)(`woocommerce_onboarding_task_list_header_${null!==(t=null==I||null===(n=I.task)||void 0===n?void 0:n.id)&&void 0!==t?t:null===(o=G)||void 0===o?void 0:o.id}`),Q=Boolean(null==Y||null===(r=Y.fills)||void 0===r?void 0:r.length),q=e=>{(0,c.recordEvent)(`${S}click`,{task_name:e.id,context:D})},J=e=>{q(e),e.isComplete||(e=>{const t=(e=>{const t=A.task_list_tracked_started_tasks;return t&&t[e]?t[e]:0})(e)+1,n=A.task_list_tracked_started_tasks||{};x(e),A.updateUserPreferences({task_list_tracked_started_tasks:{...n||{},[e]:t}})})(e.id),e.actionUrl?(0,d.navigateTo)({url:e.actionUrl}):(0,d.navigateTo)({url:(0,d.getNewPath)({task:e.id},"/",{})})};if((0,a.useEffect)((()=>{var e;G&&(Ye[(e=G).id]||Q)&&(O({task:e,goToTask:()=>J(e),trackClick:()=>q(e)}),R(e.id))}),[G]),!B.length)return(0,a.createElement)("div",{className:"woocommerce-task-dashboard__container"});const K=Boolean(null==F||null===(m=F.fills)||void 0===m?void 0:m.length);return L&&"yes"!==E?K?(0,a.createElement)(pt,{fillProps:{hideTasks:W,keepTasks:U,customerEffortScore:k}}):(0,a.createElement)(a.Fragment,null,k?(0,a.createElement)(st,{hideTasks:W,keepTasks:U,customerEffortScore:!0}):(0,a.createElement)(Je,{hideTasks:W,keepTasks:U})):(0,a.createElement)(a.Fragment,null,V&&(0,a.createElement)(Qe,{showDismissModal:V,setShowDismissModal:j,hideTasks:W}),b?(0,a.createElement)(tt,{taskListId:w}):null,(0,a.createElement)("div",{className:g()(`woocommerce-task-dashboard__container woocommerce-task-list__${w} setup-task-list`)},(0,a.createElement)(p.Card,{size:"large",className:"woocommerce-task-card woocommerce-homescreen-card"},(0,a.createElement)("div",{className:"wooocommerce-task-card__header-container"},(0,a.createElement)("div",{className:"wooocommerce-task-card__header"},Q?(0,a.createElement)(u.WooOnboardingTaskListHeader.Slot,{id:null===(h=G)||void 0===h?void 0:h.id,fillProps:I}):(null==I?void 0:I.task)&&(0,a.createElement)(Ye[I.task.id],I)),!b&&(0,a.createElement)("div",{className:"woocommerce-card__menu woocommerce-card__header-item"},(0,a.createElement)(f.EllipsisMenu,{className:w,label:(0,i.__)("Task List Options","woocommerce"),renderContent:e=>{let{onToggle:t}=e;return(0,a.createElement)("div",{className:"woocommerce-task-card__section-controls"},(0,a.createElement)(p.Button,{onClick:()=>{z.length>0?(j(!0),t()):W()}},(0,i.__)("Hide this","woocommerce")))}}))),(0,a.createElement)(y.List,{animation:"custom"},B.map(((e,t)=>(0,a.createElement)(nt,{key:e.id,taskIndex:++t,activeTaskId:P,task:e,goToTask:()=>J(e),trackClick:()=>q(e)})))),(0,a.createElement)(mt,null))))},Ct=e=>{const{numTasks:t=5}=e;return(0,a.createElement)("div",{className:g()("woocommerce-task-dashboard__container setup-task-list")},(0,a.createElement)("div",{className:"components-card is-size-large woocommerce-task-card woocommerce-homescreen-card is-loading"},(0,a.createElement)("div",{className:"components-card__header is-size-medium"},(0,a.createElement)("div",{className:"wooocommerce-task-card__header"},(0,a.createElement)("div",{className:"is-placeholder"}," "))),(0,a.createElement)("ul",{className:"woocommerce-experimental-list"},Array.from(new Array(t)).map(((e,t)=>(0,a.createElement)("li",{tabIndex:t,key:t,className:"woocommerce-experimental-list__item woocommerce-task-list__item"},(0,a.createElement)("div",{className:"woocommerce-task-list__item-before"},(0,a.createElement)("div",{className:"is-placeholder"})),(0,a.createElement)("div",{className:"woocommerce-task-list__item-text"},(0,a.createElement)("div",{className:"components-truncate components-text is-placeholder"}))))))))};var gt=n(70048),ft=n(39630);const yt=e=>{let{title:t}=e;const n=(0,i.__)("WooCommerce Home","woocommerce"),o=()=>{(0,c.recordEvent)("topbar_back_button",{page_name:t}),(0,d.updateQueryString)({},(0,d.getHistory)().location.pathname,{})};return(0,a.createElement)(p.Tooltip,{text:n},(0,a.createElement)("div",{tabIndex:0,role:"button","data-testid":"header-back-button",className:"woocommerce-layout__header-back-button",onKeyDown:e=>{let{keyCode:t}=e;t!==ft.ENTER&&t!==ft.SPACE||o()}},(0,a.createElement)(K.Z,{icon:gt.Z,onClick:o})))},wt=e=>{let{query:t,task:n}=e;const o=t.task||"";o||console.warn("No task id provided");const{invalidateResolutionForStoreSelector:r,optimisticallyCompleteTask:i}=(0,s.useDispatch)(l.ONBOARDING_STORE_NAME),c=(0,a.useCallback)((()=>{const e=Array.from(document.querySelectorAll("#adminmenu .woocommerce-task-list-remaining-tasks-badge"));null!=e&&e.length&&e.forEach((e=>{const t=Number(e.innerText);1===t?e.remove():e.innerHTML=String(t-1)}))}),[]),m=(0,a.useCallback)((e=>{i(o),(0,d.getHistory)().push(e&&e.redirectPath?e.redirectPath:(0,d.getNewPath)({},"/",{})),r("getTaskLists"),c()}),[o]);return(0,a.createElement)(a.Fragment,null,(0,a.createElement)(Be.WooHeaderNavigationItem,null,(0,a.createElement)(yt,{title:n.title})),(0,a.createElement)(Be.WooHeaderPageTitle,null,n.title),(0,a.createElement)(u.WooOnboardingTask.Slot,{id:o,fillProps:{onComplete:m,query:t,task:n}}))},Ht=e=>{let{numTasks:t=5,query:n}=e;return Boolean(n.task)?null:(0,a.createElement)("div",{className:"woocommerce-task-dashboard__container"},(0,a.createElement)("div",{className:"woocommerce-card woocommerce-task-card is-loading","aria-hidden":!0},(0,a.createElement)("div",{className:"woocommerce-card__header"},(0,a.createElement)("div",{className:"woocommerce-card__title-wrapper"},(0,a.createElement)("div",{className:"woocommerce-card__title woocommerce-card__header-item"},(0,a.createElement)("span",{className:"is-placeholder"})))),(0,a.createElement)("div",{className:"woocommerce-card__body"},(0,a.createElement)("div",{className:"woocommerce-list"},Array.from(new Array(t)).map(((e,t)=>(0,a.createElement)("div",{key:t,className:"woocommerce-list__item has-action"},(0,a.createElement)("div",{className:"woocommerce-list__item-inner"},(0,a.createElement)("div",{className:"woocommerce-list__item-before"},(0,a.createElement)("span",{className:"is-placeholder"})),(0,a.createElement)("div",{className:"woocommerce-list__item-text"},(0,a.createElement)("div",{className:"woocommerce-list__item-title"},(0,a.createElement)("span",{className:"is-placeholder"}))),(0,a.createElement)("div",{className:"woocommerce-list__item-after"},(0,a.createElement)("span",{className:"is-placeholder"}))))))))))},_t=e=>{var t;let{isExpandable:n=!1,isExpanded:o=!1,setExpandedTask:r,task:m}=e;const{createNotice:p}=(0,s.useDispatch)("core/notices"),{layoutString:h}=(0,Be.useLayoutContext)(),{dismissTask:C,snoozeTask:g,undoDismissTask:f,undoSnoozeTask:w,visitedTask:H}=(0,s.useDispatch)(l.ONBOARDING_STORE_NAME),_=(0,l.useUserPreferences)(),{actionLabel:v,actionUrl:E,content:L,id:b,isComplete:k,isDismissable:S,isSnoozeable:M,time:N,title:x,badge:T,level:A,additionalInfo:I,recordViewEvent:O}=m;(0,a.useEffect)((()=>{O&&(0,c.recordEvent)("tasklist_item_view",{task_name:b,is_complete:k,context:h})}),[]);const P=(0,y.useSlot)(`woocommerce_onboarding_task_list_item_${b}`),R=Boolean(null==P||null===(t=P.fills)||void 0===t?void 0:t.length),V=(0,a.useCallback)((()=>{C(b),p("success",(0,i.__)("Task dismissed","woocommerce"),{actions:[{label:(0,i.__)("Undo","woocommerce"),onClick:()=>f(b)}]})}),[b]),j=(0,a.useCallback)((()=>{g(b),p("success",(0,i.__)("Task postponed until tomorrow","woocommerce"),{actions:[{label:(0,i.__)("Undo","woocommerce"),onClick:()=>w(b)}]})}),[b]),D=(0,a.useCallback)((()=>{E?(0,d.navigateTo)({url:E}):(0,d.navigateTo)({url:(0,d.getNewPath)({task:b},"/",{})})}),[b,k,E]),B={expandable:n,expanded:n&&o,completed:k,onSnooze:M&&j,onDismiss:S&&V},F=(0,a.useCallback)((e=>{const t=()=>((0,c.recordEvent)("tasklist_click",{task_name:b,context:h}),k||(()=>{const e=(()=>{const e=_.task_list_tracked_started_tasks;return e&&e[b]?e[b]:0})()+1,t=_.task_list_tracked_started_tasks||{};H(b),_.updateUserPreferences({task_list_tracked_started_tasks:{...t||{},[b]:e}})})(),e.onClick?e.onClick():D());return(0,a.createElement)(y.TaskItem,(0,Z.Z)({key:b,title:x,badge:T,content:L,additionalInfo:I,time:N,action:t,level:A,actionLabel:v},B,e,{onClick:!n||k?t:()=>r(b)}))}),[b,x,T,L,N,v,n,k]);return R?(0,a.createElement)(u.WooOnboardingTaskListItem.Slot,{id:b,fillProps:{defaultTaskItem:F,isComplete:k,...B}}):(0,a.createElement)(F,{onClick:m.onClick})},vt=e=>{var t;let{id:n,eventPrefix:o,tasks:r,title:m,isCollapsible:u=!1,isExpandable:d=!1,displayProgressHeader:h=!1,query:C}=e;const{profileItems:g}=(0,s.useSelect)((e=>{const{getProfileItems:t}=e(l.ONBOARDING_STORE_NAME);return{profileItems:t()}})),w=(0,a.useRef)(C),H=(0,l.getVisibleTasks)(r),{layoutString:_}=(0,Be.useLayoutContext)(),v=r.filter((e=>!e.isComplete&&!e.isDismissed)),[E,L]=(0,a.useState)(null===(t=v[0])||void 0===t?void 0:t.id);if((0,a.useEffect)((()=>{(0,c.recordEvent)(o+"view",{number_tasks:H.length,store_connected:g.wccom_connected,context:_})}),[]),(0,a.useEffect)((()=>{const{task:e}=w.current,{task:t}=C;e!==t&&(window.document.documentElement.scrollTop=0,w.current=C)}),[C]),!H.length)return(0,a.createElement)("div",{className:"woocommerce-task-dashboard__container"});const b=(0,i.sprintf)((0,i._n)("Show %d more task.","Show %d more tasks.",H.length-2,"woocommerce"),H.length-2),k=(0,i.__)("Show less","woocommerce"),S=H.map((e=>(0,a.createElement)(_t,{key:e.id,isExpanded:E===e.id,isExpandable:d,task:e,setExpandedTask:L})));return(0,a.createElement)(a.Fragment,null,(0,a.createElement)("div",{className:"woocommerce-task-dashboard__container woocommerce-task-list__"+n},h?(0,a.createElement)(tt,{taskListId:n}):null,(0,a.createElement)(p.Card,{size:"large",className:"woocommerce-task-card woocommerce-homescreen-card"},(0,a.createElement)(p.CardHeader,{size:"medium"},(0,a.createElement)("div",{className:"wooocommerce-task-card__header"},(0,a.createElement)(y.Text,{size:"20",lineHeight:"28px",variant:"title.small"},m),(0,a.createElement)(f.Badge,{count:v.length})),(0,a.createElement)($e,{id:n})),u?(0,a.createElement)(y.CollapsibleList,{animation:"custom",collapseLabel:k,expandLabel:b,show:2,onCollapse:()=>(0,c.recordEvent)(o+"collapse",{}),onExpand:()=>(0,c.recordEvent)(o+"expand",{})},S):(0,a.createElement)(y.List,{animation:"custom"},S))))},Et=e=>{let{query:t}=e;const{task:n}=t,{hideTaskList:r}=(0,s.useDispatch)(l.ONBOARDING_STORE_NAME),{updateOptions:m}=(0,s.useDispatch)(l.OPTIONS_STORE_NAME),{isResolving:u,taskLists:d}=(0,s.useSelect)((e=>({isResolving:!e(l.ONBOARDING_STORE_NAME).hasFinishedResolution("getTaskLists"),taskLists:e(l.ONBOARDING_STORE_NAME).getTaskLists()})));(0,a.useEffect)((()=>{m({woocommerce_task_list_prompt_shown:!0})}),[d,u]);const h=(()=>{if(!n)return null;return d.reduce(((e,t)=>[...e,...t.tasks]),[]).find((e=>e.id===n))||null})();if(n&&!h)return null;if(h)return(0,a.createElement)("div",{className:"woocommerce-task-dashboard__container"},(0,a.createElement)(wt,{query:t,task:h}));const C="setup"===(0,o.O3)("visibleTaskListIds",[])[0]?Ct:Ht;return u?(0,a.createElement)(C,{query:t}):(0,a.createElement)(a.Fragment,null,d.filter((e=>{let{isVisible:t}=e;return t})).map((e=>{const{id:n,isHidden:o,isToggleable:s}=e,l="setup"===n?ht:vt;return(0,a.createElement)(a.Fragment,{key:n},(0,a.createElement)(l,(0,Z.Z)({isExpandable:!1,query:t},e)),s&&(0,a.createElement)(Ze.z,null,(0,a.createElement)(p.MenuGroup,{className:"woocommerce-layout__homescreen-display-options",label:(0,i.__)("Display","woocommerce")},(0,a.createElement)(p.MenuItem,{className:"woocommerce-layout__homescreen-extension-tasklist-toggle",icon:o?void 0:De.Z,isSelected:!o,role:"menuitemcheckbox",onClick:()=>(e=>{const{id:t,eventPrefix:n,isHidden:o}=e,a=!o;(0,c.recordEvent)(a?`${n}hide`:`${n}show`,{}),r(t)})(e)},(0,i.__)("Show things to do next","woocommerce")))))})))};var Lt=n(70261);const bt="woocommerce_task_list_reminder_bar_hidden",kt=e=>{let{remainingCount:t,tracksProps:n}=e;const o=1===t?(0,i.__)("🎉 Almost there. Only {{strongText}}%1$d step left{{/strongText}} get your store up and running. {{setupLink}}Finish setup{{/setupLink}}","woocommerce"):(0,i.__)("🚀 You're doing great! {{strongText}}%1$d steps left{{/strongText}} to get your store up and running. {{setupLink}}Continue setup{{/setupLink}}","woocommerce");return(0,a.createElement)("p",null,(0,U.Z)({mixedString:(0,i.sprintf)(o,t),components:{strongText:(0,a.createElement)("strong",null),setupLink:(0,a.createElement)(f.Link,{href:(0,G.getAdminLink)("admin.php?page=wc-admin"),onClick:()=>(0,c.recordEvent)("tasklist_reminder_bar_continue",n),type:"wp-admin"},(0,a.createElement)(a.Fragment,null))}}))},St=e=>{let{taskListId:t,updateBodyMargin:n}=e;const{updateOptions:o}=(0,s.useDispatch)(l.OPTIONS_STORE_NAME),{remainingCount:r,loading:i,taskListHidden:m,taskListComplete:u,reminderBarHidden:h,completedTasksCount:C}=(0,s.useSelect)((e=>{const{getTaskList:n,hasFinishedResolution:o}=e(l.ONBOARDING_STORE_NAME),{getOption:r,hasFinishedResolution:a}=e(l.OPTIONS_STORE_NAME),i=r(bt),s=n(t),c=o("getTaskList",[t]),m=a("getOption",[bt]),u=(0,l.getVisibleTasks)((null==s?void 0:s.tasks)||[]),d=u.filter((e=>e.isComplete))||[],p=c&&m;return{reminderBarHidden:"yes"===i,taskListHidden:!!p&&(null==s?void 0:s.isHidden),taskListComplete:!!p&&(null==s?void 0:s.isComplete),loading:!p,completedTasksCount:d.length,remainingCount:p?(null==u?void 0:u.length)-d.length:null}})),g=(0,d.getQuery)(),f=g.page&&"wc-admin"===g.page&&!g.path,y=Boolean(g.wc_onboarding_active_task),w=i||m||u||h||0===C||f||y;(0,a.useEffect)((()=>{n()}),[w,n]);const H={completed:C,is_homescreen:!!f,is_active_task_page:y};return(0,a.useEffect)((()=>{i||w||(0,c.recordEvent)("tasklist_reminder_bar_view",H)}),[w,i]),w?null:(0,a.createElement)("div",{className:"woocommerce-layout__header-tasks-reminder-bar"},(0,a.createElement)(kt,{remainingCount:r,tracksProps:H}),(0,a.createElement)(p.Button,{isSmall:!0,onClick:()=>{o({[bt]:"yes"}),(0,c.recordEvent)("tasklist_reminder_bar_close",H)},icon:Lt.Z}))},Mt="woocommerce_tasklist_experimental_progress_title_item",Nt=e=>{let{children:t,order:n=1}=e;return(0,a.createElement)(p.Fill,{name:Mt},(e=>(0,f.createOrderedChildren)(t,n,e)))};Nt.Slot=e=>{let{fillProps:t}=e;return(0,a.createElement)(p.Slot,{name:Mt,fillProps:t},f.sortFillsByOrder)};const xt=e=>{let{taskListId:t}=e;const{loading:n,tasksCount:o,completedCount:r,hasVisitedTasks:c}=(0,s.useSelect)((e=>{const n=e(l.ONBOARDING_STORE_NAME).getTaskList(t),o=e(l.ONBOARDING_STORE_NAME).hasFinishedResolution("getTaskList",[t]),r=(0,l.getVisibleTasks)((null==n?void 0:n.tasks)||[]);return{loading:!o,tasksCount:null==r?void 0:r.length,completedCount:null==r?void 0:r.filter((e=>e.isComplete)).length,hasVisitedTasks:(null==r?void 0:r.filter((e=>e.isVisited&&"store_details"!==e.id)).length)>0}})),m=(0,a.useMemo)((()=>{if(!c||r===o){const e=(0,G.getSetting)("siteTitle");return e?(0,i.sprintf)((0,i.__)("Welcome to %s","woocommerce"),e):(0,i.__)("Welcome to your store","woocommerce")}return r<=3?(0,i.__)("Let's get you started","woocommerce")+" 🚀":r>3&&r<6?(0,i.__)("You are on the right track","woocommerce"):(0,i.__)("You are almost there","woocommerce")}),[r,c,o]);return n?null:(0,a.createElement)("h1",{className:"woocommerce-task-progress-header__title",dangerouslySetInnerHTML:(0,S.ZP)(m)})},Tt=e=>{var t;let{taskListId:n}=e;const o=(0,y.useSlot)(Mt);return Boolean(null==o||null===(t=o.fills)||void 0===t?void 0:t.length)?(0,a.createElement)(Nt.Slot,{fillProps:{taskListId:n}}):(0,a.createElement)(xt,{taskListId:n})},At=()=>{const{activeSetuplist:e}=(0,s.useSelect)((e=>{const t=e(l.ONBOARDING_STORE_NAME).getTaskLists().filter((e=>"setup"===e.id&&e.isVisible));return{activeSetuplist:t.length?t[0].id:null}}));return e}},73463:(e,t,n)=>{"use strict";n.d(t,{MV:()=>m,O3:()=>l,SX:()=>c,rq:()=>d,vm:()=>u});var o=n(65736),r=n(74617);const a=["wcAdminSettings","preloadSettings"],i=(0,r.getSetting)("admin",{}),s=Object.keys(i).reduce(((e,t)=>(a.includes(t)||(e[t]=i[t]),e)),{});function l(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e=>e;if(a.includes(e))throw new Error((0,o.__)("Mutable settings should be accessed via data store.","woocommerce"));const r=s.hasOwnProperty(e)?s[e]:t;return n(r,t)}const c=(0,r.getSetting)("adminUrl"),m=((0,r.getSetting)("countries"),(0,r.getSetting)("currency"),(0,r.getSetting)("locale")),u=((0,r.getSetting)("siteTitle"),(0,r.getSetting)("wcAssetUrl")),d=l("orderStatuses")},34374:(e,t,n)=>{"use strict";n.d(t,{V7:()=>r,br:()=>a,GG:()=>s,Jm:()=>c,DP:()=>i,p0:()=>m});var o=n(69307);function r(e){return(e||"").split(":",1)[0]}function a(e){const t=r(e);return/^woocommerce(-|_)payments$/.test(t)?"wcpay":`${t.replace(/-/g,"_")}`.split(":",1)[0]}function i(e){return e?e.substr(1).split("&").reduce(((e,t)=>{const n=t.split("="),o=n[0];let r=decodeURIComponent(n[1]);return r=isNaN(Number(r))?r:Number(r),e[o]=r,e}),{}):{}}function s(){let e="";const{page:t,path:n,post_type:o}=i(window.location.search);if(t){const o="wc-admin"===t?"home_screen":t;e=n?n.replace(/\//g,"_").substring(1):o}else o&&(e=o);return e}n(99196);const l=[{name:"0-2s",max:2},{name:"2-5s",max:5},{name:"5-10s",max:10},{name:"10-15s",max:15},{name:"15-20s",max:20},{name:"20-30s",max:30},{name:"30-60s",max:60},{name:">60s"}],c=e=>{for(const t of l){if(!t.max)return t.name;if(e<1e3*t.max)return t.name}},m=e=>{(0,o.useEffect)((()=>{const t=document.documentElement.classList.contains("wp-toolbar");return document.body.classList.remove("woocommerce-admin-is-loading"),document.body.classList.add(e),document.body.classList.add("woocommerce-admin-full-screen"),document.body.classList.add("is-wp-toolbar-disabled"),t&&document.documentElement.classList.remove("wp-toolbar"),()=>{document.body.classList.remove(e),document.body.classList.remove("woocommerce-admin-full-screen"),document.body.classList.remove("is-wp-toolbar-disabled"),t&&document.documentElement.classList.add("wp-toolbar")}}))}},2864:(e,t,n)=>{"use strict";var o=n(28487),r=n(25592),a=r(o("String.prototype.indexOf"));e.exports=function(e,t){var n=o(e,!!t);return"function"==typeof n&&a(e,".prototype.")>-1?r(n):n}},25592:(e,t,n)=>{"use strict";var o=n(22698),r=n(28487),a=r("%Function.prototype.apply%"),i=r("%Function.prototype.call%"),s=r("%Reflect.apply%",!0)||o.call(i,a),l=r("%Object.getOwnPropertyDescriptor%",!0),c=r("%Object.defineProperty%",!0),m=r("%Math.max%");if(c)try{c({},"a",{value:1})}catch(e){c=null}e.exports=function(e){var t=s(o,i,arguments);if(l&&c){var n=l(t,"length");n.configurable&&c(t,"length",{value:1+m(0,e.length-(arguments.length-1))})}return t};var u=function(){return s(o,a,arguments)};c?c(e.exports,"apply",{value:u}):e.exports.apply=u},83849:(e,t)=>{var n;!function(){"use strict";var o={}.hasOwnProperty;function r(){for(var e=[],t=0;t1?n-1:0),r=1;r/gm),D=i(/^data-[\-\w.\u00B7-\uFFFF]/),Z=i(/^aria-[\-\w]+$/),B=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),F=i(/^(?:\w+script|data):/i),z=i(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),W=i(/^html$/i),U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function G(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:Y(),n=function(t){return e(t)};if(n.version="2.3.6",n.removed=[],!t||!t.document||9!==t.document.nodeType)return n.isSupported=!1,n;var o=t.document,r=t.document,i=t.DocumentFragment,s=t.HTMLTemplateElement,l=t.Node,c=t.Element,m=t.NodeFilter,u=t.NamedNodeMap,v=void 0===u?t.NamedNodeMap||t.MozNamedAttrMap:u,q=t.HTMLFormElement,J=t.DOMParser,K=t.trustedTypes,X=c.prototype,$=b(X,"cloneNode"),ee=b(X,"nextSibling"),te=b(X,"childNodes"),ne=b(X,"parentNode");if("function"==typeof s){var oe=r.createElement("template");oe.content&&oe.content.ownerDocument&&(r=oe.content.ownerDocument)}var re=Q(K,o),ae=re?re.createHTML(""):"",ie=r,se=ie.implementation,le=ie.createNodeIterator,ce=ie.createDocumentFragment,me=ie.getElementsByTagName,ue=o.importNode,de={};try{de=L(r).documentMode?r.documentMode:{}}catch(e){}var pe={};n.isSupported="function"==typeof ne&&se&&void 0!==se.createHTMLDocument&&9!==de;var he=V,Ce=j,ge=D,fe=Z,ye=F,we=z,He=B,_e=null,ve=E({},[].concat(G(k),G(S),G(M),G(x),G(A))),Ee=null,Le=E({},[].concat(G(I),G(O),G(P),G(R))),be=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ke=null,Se=null,Me=!0,Ne=!0,xe=!1,Te=!1,Ae=!1,Ie=!1,Oe=!1,Pe=!1,Re=!1,Ve=!1,je=!0,De=!0,Ze=!1,Be={},Fe=null,ze=E({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),We=null,Ue=E({},["audio","video","img","source","image","track"]),Ge=null,Ye=E({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Qe="http://www.w3.org/1998/Math/MathML",qe="http://www.w3.org/2000/svg",Je="http://www.w3.org/1999/xhtml",Ke=Je,Xe=!1,$e=void 0,et=["application/xhtml+xml","text/html"],tt="text/html",nt=void 0,ot=null,rt=r.createElement("form"),at=function(e){return e instanceof RegExp||e instanceof Function},it=function(e){ot&&ot===e||(e&&"object"===(void 0===e?"undefined":U(e))||(e={}),e=L(e),_e="ALLOWED_TAGS"in e?E({},e.ALLOWED_TAGS):ve,Ee="ALLOWED_ATTR"in e?E({},e.ALLOWED_ATTR):Le,Ge="ADD_URI_SAFE_ATTR"in e?E(L(Ye),e.ADD_URI_SAFE_ATTR):Ye,We="ADD_DATA_URI_TAGS"in e?E(L(Ue),e.ADD_DATA_URI_TAGS):Ue,Fe="FORBID_CONTENTS"in e?E({},e.FORBID_CONTENTS):ze,ke="FORBID_TAGS"in e?E({},e.FORBID_TAGS):{},Se="FORBID_ATTR"in e?E({},e.FORBID_ATTR):{},Be="USE_PROFILES"in e&&e.USE_PROFILES,Me=!1!==e.ALLOW_ARIA_ATTR,Ne=!1!==e.ALLOW_DATA_ATTR,xe=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Te=e.SAFE_FOR_TEMPLATES||!1,Ae=e.WHOLE_DOCUMENT||!1,Pe=e.RETURN_DOM||!1,Re=e.RETURN_DOM_FRAGMENT||!1,Ve=e.RETURN_TRUSTED_TYPE||!1,Oe=e.FORCE_BODY||!1,je=!1!==e.SANITIZE_DOM,De=!1!==e.KEEP_CONTENT,Ze=e.IN_PLACE||!1,He=e.ALLOWED_URI_REGEXP||He,Ke=e.NAMESPACE||Je,e.CUSTOM_ELEMENT_HANDLING&&at(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(be.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&at(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(be.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(be.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),$e=$e=-1===et.indexOf(e.PARSER_MEDIA_TYPE)?tt:e.PARSER_MEDIA_TYPE,nt="application/xhtml+xml"===$e?function(e){return e}:C,Te&&(Ne=!1),Re&&(Pe=!0),Be&&(_e=E({},[].concat(G(A))),Ee=[],!0===Be.html&&(E(_e,k),E(Ee,I)),!0===Be.svg&&(E(_e,S),E(Ee,O),E(Ee,R)),!0===Be.svgFilters&&(E(_e,M),E(Ee,O),E(Ee,R)),!0===Be.mathMl&&(E(_e,x),E(Ee,P),E(Ee,R))),e.ADD_TAGS&&(_e===ve&&(_e=L(_e)),E(_e,e.ADD_TAGS)),e.ADD_ATTR&&(Ee===Le&&(Ee=L(Ee)),E(Ee,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&E(Ge,e.ADD_URI_SAFE_ATTR),e.FORBID_CONTENTS&&(Fe===ze&&(Fe=L(Fe)),E(Fe,e.FORBID_CONTENTS)),De&&(_e["#text"]=!0),Ae&&E(_e,["html","head","body"]),_e.table&&(E(_e,["tbody"]),delete ke.tbody),a&&a(e),ot=e)},st=E({},["mi","mo","mn","ms","mtext"]),lt=E({},["foreignobject","desc","title","annotation-xml"]),ct=E({},S);E(ct,M),E(ct,N);var mt=E({},x);E(mt,T);var ut=function(e){var t=ne(e);t&&t.tagName||(t={namespaceURI:Je,tagName:"template"});var n=C(e.tagName),o=C(t.tagName);if(e.namespaceURI===qe)return t.namespaceURI===Je?"svg"===n:t.namespaceURI===Qe?"svg"===n&&("annotation-xml"===o||st[o]):Boolean(ct[n]);if(e.namespaceURI===Qe)return t.namespaceURI===Je?"math"===n:t.namespaceURI===qe?"math"===n&<[o]:Boolean(mt[n]);if(e.namespaceURI===Je){if(t.namespaceURI===qe&&!lt[o])return!1;if(t.namespaceURI===Qe&&!st[o])return!1;var r=E({},["title","style","font","a","script"]);return!mt[n]&&(r[n]||!ct[n])}return!1},dt=function(e){h(n.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=ae}catch(t){e.remove()}}},pt=function(e,t){try{h(n.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){h(n.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!Ee[e])if(Pe||Re)try{dt(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},ht=function(e){var t=void 0,n=void 0;if(Oe)e=" "+e;else{var o=g(e,/^[\r\n\t ]+/);n=o&&o[0]}"application/xhtml+xml"===$e&&(e=''+e+"");var a=re?re.createHTML(e):e;if(Ke===Je)try{t=(new J).parseFromString(a,$e)}catch(e){}if(!t||!t.documentElement){t=se.createDocument(Ke,"template",null);try{t.documentElement.innerHTML=Xe?"":a}catch(e){}}var i=t.body||t.documentElement;return e&&n&&i.insertBefore(r.createTextNode(n),i.childNodes[0]||null),Ke===Je?me.call(t,Ae?"html":"body")[0]:Ae?t.documentElement:i},Ct=function(e){return le.call(e.ownerDocument||e,e,m.SHOW_ELEMENT|m.SHOW_COMMENT|m.SHOW_TEXT,null,!1)},gt=function(e){return e instanceof q&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof v)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore)},ft=function(e){return"object"===(void 0===l?"undefined":U(l))?e instanceof l:e&&"object"===(void 0===e?"undefined":U(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},yt=function(e,t,o){pe[e]&&d(pe[e],(function(e){e.call(n,t,o,ot)}))},wt=function(e){var t=void 0;if(yt("beforeSanitizeElements",e,null),gt(e))return dt(e),!0;if(g(e.nodeName,/[\u0080-\uFFFF]/))return dt(e),!0;var o=nt(e.nodeName);if(yt("uponSanitizeElement",e,{tagName:o,allowedTags:_e}),!ft(e.firstElementChild)&&(!ft(e.content)||!ft(e.content.firstElementChild))&&H(/<[/\w]/g,e.innerHTML)&&H(/<[/\w]/g,e.textContent))return dt(e),!0;if("select"===o&&H(/=0;--i)r.insertBefore($(a[i],!0),ee(e))}return dt(e),!0}return e instanceof c&&!ut(e)?(dt(e),!0):"noscript"!==o&&"noembed"!==o||!H(/<\/no(script|embed)/i,e.innerHTML)?(Te&&3===e.nodeType&&(t=e.textContent,t=f(t,he," "),t=f(t,Ce," "),e.textContent!==t&&(h(n.removed,{element:e.cloneNode()}),e.textContent=t)),yt("afterSanitizeElements",e,null),!1):(dt(e),!0)},Ht=function(e,t,n){if(je&&("id"===t||"name"===t)&&(n in r||n in rt))return!1;if(Ne&&!Se[t]&&H(ge,t));else if(Me&&H(fe,t));else if(!Ee[t]||Se[t]){if(!(_t(e)&&(be.tagNameCheck instanceof RegExp&&H(be.tagNameCheck,e)||be.tagNameCheck instanceof Function&&be.tagNameCheck(e))&&(be.attributeNameCheck instanceof RegExp&&H(be.attributeNameCheck,t)||be.attributeNameCheck instanceof Function&&be.attributeNameCheck(t))||"is"===t&&be.allowCustomizedBuiltInElements&&(be.tagNameCheck instanceof RegExp&&H(be.tagNameCheck,n)||be.tagNameCheck instanceof Function&&be.tagNameCheck(n))))return!1}else if(Ge[t]);else if(H(He,f(n,we,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(n,"data:")||!We[e])if(xe&&!H(ye,f(n,we,"")));else if(n)return!1;return!0},_t=function(e){return e.indexOf("-")>0},vt=function(e){var t=void 0,o=void 0,r=void 0,a=void 0;yt("beforeSanitizeAttributes",e,null);var i=e.attributes;if(i){var s={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Ee};for(a=i.length;a--;){var l=t=i[a],c=l.name,m=l.namespaceURI;if(o=w(t.value),r=nt(c),s.attrName=r,s.attrValue=o,s.keepAttr=!0,s.forceKeepAttr=void 0,yt("uponSanitizeAttribute",e,s),o=s.attrValue,!s.forceKeepAttr&&(pt(c,e),s.keepAttr))if(H(/\/>/i,o))pt(c,e);else{Te&&(o=f(o,he," "),o=f(o,Ce," "));var u=nt(e.nodeName);if(Ht(u,r,o))try{m?e.setAttributeNS(m,c,o):e.setAttribute(c,o),p(n.removed)}catch(e){}}}yt("afterSanitizeAttributes",e,null)}},Et=function e(t){var n=void 0,o=Ct(t);for(yt("beforeSanitizeShadowDOM",t,null);n=o.nextNode();)yt("uponSanitizeShadowNode",n,null),wt(n)||(n.content instanceof i&&e(n.content),vt(n));yt("afterSanitizeShadowDOM",t,null)};return n.sanitize=function(e,r){var a=void 0,s=void 0,c=void 0,m=void 0,u=void 0;if((Xe=!e)&&(e="\x3c!--\x3e"),"string"!=typeof e&&!ft(e)){if("function"!=typeof e.toString)throw _("toString is not a function");if("string"!=typeof(e=e.toString()))throw _("dirty is not a string, aborting")}if(!n.isSupported){if("object"===U(t.toStaticHTML)||"function"==typeof t.toStaticHTML){if("string"==typeof e)return t.toStaticHTML(e);if(ft(e))return t.toStaticHTML(e.outerHTML)}return e}if(Ie||it(r),n.removed=[],"string"==typeof e&&(Ze=!1),Ze){if(e.nodeName){var d=nt(e.nodeName);if(!_e[d]||ke[d])throw _("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof l)1===(s=(a=ht("\x3c!----\x3e")).ownerDocument.importNode(e,!0)).nodeType&&"BODY"===s.nodeName||"HTML"===s.nodeName?a=s:a.appendChild(s);else{if(!Pe&&!Te&&!Ae&&-1===e.indexOf("<"))return re&&Ve?re.createHTML(e):e;if(!(a=ht(e)))return Pe?null:Ve?ae:""}a&&Oe&&dt(a.firstChild);for(var p=Ct(Ze?e:a);c=p.nextNode();)3===c.nodeType&&c===m||wt(c)||(c.content instanceof i&&Et(c.content),vt(c),m=c);if(m=null,Ze)return e;if(Pe){if(Re)for(u=ce.call(a.ownerDocument);a.firstChild;)u.appendChild(a.firstChild);else u=a;return Ee.shadowroot&&(u=ue.call(o,u,!0)),u}var h=Ae?a.outerHTML:a.innerHTML;return Ae&&_e["!doctype"]&&a.ownerDocument&&a.ownerDocument.doctype&&a.ownerDocument.doctype.name&&H(W,a.ownerDocument.doctype.name)&&(h="\n"+h),Te&&(h=f(h,he," "),h=f(h,Ce," ")),re&&Ve?re.createHTML(h):h},n.setConfig=function(e){it(e),Ie=!0},n.clearConfig=function(){ot=null,Ie=!1},n.isValidAttribute=function(e,t,n){ot||it({});var o=nt(e),r=nt(t);return Ht(o,r,n)},n.addHook=function(e,t){"function"==typeof t&&(pe[e]=pe[e]||[],h(pe[e],t))},n.removeHook=function(e){pe[e]&&p(pe[e])},n.removeHooks=function(e){pe[e]&&(pe[e]=[])},n.removeAllHooks=function(){pe={}},n}()}()},59748:e=>{"use strict";var t="Function.prototype.bind called on incompatible ",n=Array.prototype.slice,o=Object.prototype.toString,r="[object Function]";e.exports=function(e){var a=this;if("function"!=typeof a||o.call(a)!==r)throw new TypeError(t+a);for(var i,s=n.call(arguments,1),l=function(){if(this instanceof i){var t=a.apply(this,s.concat(n.call(arguments)));return Object(t)===t?t:this}return a.apply(e,s.concat(n.call(arguments)))},c=Math.max(0,a.length-s.length),m=[],u=0;u{"use strict";var o=n(59748);e.exports=Function.prototype.bind||o},28487:(e,t,n)=>{"use strict";var o,r=SyntaxError,a=Function,i=TypeError,s=function(e){try{return a('"use strict"; return ('+e+").constructor;")()}catch(e){}},l=Object.getOwnPropertyDescriptor;if(l)try{l({},"")}catch(e){l=null}var c=function(){throw new i},m=l?function(){try{return c}catch(e){try{return l(arguments,"callee").get}catch(e){return c}}}():c,u=n(72770)(),d=Object.getPrototypeOf||function(e){return e.__proto__},p={},h="undefined"==typeof Uint8Array?o:d(Uint8Array),C={"%AggregateError%":"undefined"==typeof AggregateError?o:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?o:ArrayBuffer,"%ArrayIteratorPrototype%":u?d([][Symbol.iterator]()):o,"%AsyncFromSyncIteratorPrototype%":o,"%AsyncFunction%":p,"%AsyncGenerator%":p,"%AsyncGeneratorFunction%":p,"%AsyncIteratorPrototype%":p,"%Atomics%":"undefined"==typeof Atomics?o:Atomics,"%BigInt%":"undefined"==typeof BigInt?o:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?o:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?o:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?o:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?o:FinalizationRegistry,"%Function%":a,"%GeneratorFunction%":p,"%Int8Array%":"undefined"==typeof Int8Array?o:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?o:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?o:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":u?d(d([][Symbol.iterator]())):o,"%JSON%":"object"==typeof JSON?JSON:o,"%Map%":"undefined"==typeof Map?o:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&u?d((new Map)[Symbol.iterator]()):o,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?o:Promise,"%Proxy%":"undefined"==typeof Proxy?o:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?o:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?o:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&u?d((new Set)[Symbol.iterator]()):o,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?o:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":u?d(""[Symbol.iterator]()):o,"%Symbol%":u?Symbol:o,"%SyntaxError%":r,"%ThrowTypeError%":m,"%TypedArray%":h,"%TypeError%":i,"%Uint8Array%":"undefined"==typeof Uint8Array?o:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?o:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?o:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?o:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?o:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?o:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?o:WeakSet},g=function e(t){var n;if("%AsyncFunction%"===t)n=s("async function () {}");else if("%GeneratorFunction%"===t)n=s("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=s("async function* () {}");else if("%AsyncGenerator%"===t){var o=e("%AsyncGeneratorFunction%");o&&(n=o.prototype)}else if("%AsyncIteratorPrototype%"===t){var r=e("%AsyncGenerator%");r&&(n=d(r.prototype))}return C[t]=n,n},f={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},y=n(22698),w=n(22786),H=y.call(Function.call,Array.prototype.concat),_=y.call(Function.apply,Array.prototype.splice),v=y.call(Function.call,String.prototype.replace),E=y.call(Function.call,String.prototype.slice),L=y.call(Function.call,RegExp.prototype.exec),b=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,k=/\\(\\)?/g,S=function(e){var t=E(e,0,1),n=E(e,-1);if("%"===t&&"%"!==n)throw new r("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new r("invalid intrinsic syntax, expected opening `%`");var o=[];return v(e,b,(function(e,t,n,r){o[o.length]=n?v(r,k,"$1"):t||e})),o},M=function(e,t){var n,o=e;if(w(f,o)&&(o="%"+(n=f[o])[0]+"%"),w(C,o)){var a=C[o];if(a===p&&(a=g(o)),void 0===a&&!t)throw new i("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:o,value:a}}throw new r("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new i("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new i('"allowMissing" argument must be a boolean');if(null===L(/^%?[^%]*%?$/,e))throw new r("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=S(e),o=n.length>0?n[0]:"",a=M("%"+o+"%",t),s=a.name,c=a.value,m=!1,u=a.alias;u&&(o=u[0],_(n,H([0,1],u)));for(var d=1,p=!0;d=n.length){var y=l(c,h);c=(p=!!y)&&"get"in y&&!("originalValue"in y.get)?y.get:c[h]}else p=w(c,h),c=c[h];p&&!m&&(C[s]=c)}}return c}},49248:e=>{e.exports&&(e.exports=function(){var e=3,t=4,n=12,o=13,r=16,a=17;function i(e,t){void 0===t&&(t=0);var n=e.charCodeAt(t);if(55296<=n&&n<=56319&&t=1){var r=n;return 55296<=(o=e.charCodeAt(t-1))&&o<=56319?1024*(o-55296)+(r-56320)+65536:r}return n}function s(i,s,l){var c=[i].concat(s).concat([l]),m=c[c.length-2],u=l,d=c.lastIndexOf(14);if(d>1&&c.slice(1,d).every((function(t){return t==e}))&&-1==[e,o,a].indexOf(i))return 2;var p=c.lastIndexOf(t);if(p>0&&c.slice(1,p).every((function(e){return e==t}))&&-1==[n,t].indexOf(m))return c.filter((function(e){return e==t})).length%2==1?3:4;if(0==m&&1==u)return 0;if(2==m||0==m||1==m)return 14==u&&s.every((function(t){return t==e}))?2:1;if(2==u||0==u||1==u)return 1;if(6==m&&(6==u||7==u||9==u||10==u))return 0;if(!(9!=m&&7!=m||7!=u&&8!=u))return 0;if((10==m||8==m)&&8==u)return 0;if(u==e||15==u)return 0;if(5==u)return 0;if(m==n)return 0;var h=-1!=c.indexOf(e)?c.lastIndexOf(e)-1:c.length-2;return-1!=[o,a].indexOf(c[h])&&c.slice(h+1,-1).every((function(t){return t==e}))&&14==u||15==m&&-1!=[r,a].indexOf(u)?0:-1!=s.indexOf(t)?2:m==t&&u==t?0:1}function l(i){return 1536<=i&&i<=1541||1757==i||1807==i||2274==i||3406==i||69821==i||70082<=i&&i<=70083||72250==i||72326<=i&&i<=72329||73030==i?n:13==i?0:10==i?1:0<=i&&i<=9||11<=i&&i<=12||14<=i&&i<=31||127<=i&&i<=159||173==i||1564==i||6158==i||8203==i||8206<=i&&i<=8207||8232==i||8233==i||8234<=i&&i<=8238||8288<=i&&i<=8292||8293==i||8294<=i&&i<=8303||55296<=i&&i<=57343||65279==i||65520<=i&&i<=65528||65529<=i&&i<=65531||113824<=i&&i<=113827||119155<=i&&i<=119162||917504==i||917505==i||917506<=i&&i<=917535||917632<=i&&i<=917759||918e3<=i&&i<=921599?2:768<=i&&i<=879||1155<=i&&i<=1159||1160<=i&&i<=1161||1425<=i&&i<=1469||1471==i||1473<=i&&i<=1474||1476<=i&&i<=1477||1479==i||1552<=i&&i<=1562||1611<=i&&i<=1631||1648==i||1750<=i&&i<=1756||1759<=i&&i<=1764||1767<=i&&i<=1768||1770<=i&&i<=1773||1809==i||1840<=i&&i<=1866||1958<=i&&i<=1968||2027<=i&&i<=2035||2070<=i&&i<=2073||2075<=i&&i<=2083||2085<=i&&i<=2087||2089<=i&&i<=2093||2137<=i&&i<=2139||2260<=i&&i<=2273||2275<=i&&i<=2306||2362==i||2364==i||2369<=i&&i<=2376||2381==i||2385<=i&&i<=2391||2402<=i&&i<=2403||2433==i||2492==i||2494==i||2497<=i&&i<=2500||2509==i||2519==i||2530<=i&&i<=2531||2561<=i&&i<=2562||2620==i||2625<=i&&i<=2626||2631<=i&&i<=2632||2635<=i&&i<=2637||2641==i||2672<=i&&i<=2673||2677==i||2689<=i&&i<=2690||2748==i||2753<=i&&i<=2757||2759<=i&&i<=2760||2765==i||2786<=i&&i<=2787||2810<=i&&i<=2815||2817==i||2876==i||2878==i||2879==i||2881<=i&&i<=2884||2893==i||2902==i||2903==i||2914<=i&&i<=2915||2946==i||3006==i||3008==i||3021==i||3031==i||3072==i||3134<=i&&i<=3136||3142<=i&&i<=3144||3146<=i&&i<=3149||3157<=i&&i<=3158||3170<=i&&i<=3171||3201==i||3260==i||3263==i||3266==i||3270==i||3276<=i&&i<=3277||3285<=i&&i<=3286||3298<=i&&i<=3299||3328<=i&&i<=3329||3387<=i&&i<=3388||3390==i||3393<=i&&i<=3396||3405==i||3415==i||3426<=i&&i<=3427||3530==i||3535==i||3538<=i&&i<=3540||3542==i||3551==i||3633==i||3636<=i&&i<=3642||3655<=i&&i<=3662||3761==i||3764<=i&&i<=3769||3771<=i&&i<=3772||3784<=i&&i<=3789||3864<=i&&i<=3865||3893==i||3895==i||3897==i||3953<=i&&i<=3966||3968<=i&&i<=3972||3974<=i&&i<=3975||3981<=i&&i<=3991||3993<=i&&i<=4028||4038==i||4141<=i&&i<=4144||4146<=i&&i<=4151||4153<=i&&i<=4154||4157<=i&&i<=4158||4184<=i&&i<=4185||4190<=i&&i<=4192||4209<=i&&i<=4212||4226==i||4229<=i&&i<=4230||4237==i||4253==i||4957<=i&&i<=4959||5906<=i&&i<=5908||5938<=i&&i<=5940||5970<=i&&i<=5971||6002<=i&&i<=6003||6068<=i&&i<=6069||6071<=i&&i<=6077||6086==i||6089<=i&&i<=6099||6109==i||6155<=i&&i<=6157||6277<=i&&i<=6278||6313==i||6432<=i&&i<=6434||6439<=i&&i<=6440||6450==i||6457<=i&&i<=6459||6679<=i&&i<=6680||6683==i||6742==i||6744<=i&&i<=6750||6752==i||6754==i||6757<=i&&i<=6764||6771<=i&&i<=6780||6783==i||6832<=i&&i<=6845||6846==i||6912<=i&&i<=6915||6964==i||6966<=i&&i<=6970||6972==i||6978==i||7019<=i&&i<=7027||7040<=i&&i<=7041||7074<=i&&i<=7077||7080<=i&&i<=7081||7083<=i&&i<=7085||7142==i||7144<=i&&i<=7145||7149==i||7151<=i&&i<=7153||7212<=i&&i<=7219||7222<=i&&i<=7223||7376<=i&&i<=7378||7380<=i&&i<=7392||7394<=i&&i<=7400||7405==i||7412==i||7416<=i&&i<=7417||7616<=i&&i<=7673||7675<=i&&i<=7679||8204==i||8400<=i&&i<=8412||8413<=i&&i<=8416||8417==i||8418<=i&&i<=8420||8421<=i&&i<=8432||11503<=i&&i<=11505||11647==i||11744<=i&&i<=11775||12330<=i&&i<=12333||12334<=i&&i<=12335||12441<=i&&i<=12442||42607==i||42608<=i&&i<=42610||42612<=i&&i<=42621||42654<=i&&i<=42655||42736<=i&&i<=42737||43010==i||43014==i||43019==i||43045<=i&&i<=43046||43204<=i&&i<=43205||43232<=i&&i<=43249||43302<=i&&i<=43309||43335<=i&&i<=43345||43392<=i&&i<=43394||43443==i||43446<=i&&i<=43449||43452==i||43493==i||43561<=i&&i<=43566||43569<=i&&i<=43570||43573<=i&&i<=43574||43587==i||43596==i||43644==i||43696==i||43698<=i&&i<=43700||43703<=i&&i<=43704||43710<=i&&i<=43711||43713==i||43756<=i&&i<=43757||43766==i||44005==i||44008==i||44013==i||64286==i||65024<=i&&i<=65039||65056<=i&&i<=65071||65438<=i&&i<=65439||66045==i||66272==i||66422<=i&&i<=66426||68097<=i&&i<=68099||68101<=i&&i<=68102||68108<=i&&i<=68111||68152<=i&&i<=68154||68159==i||68325<=i&&i<=68326||69633==i||69688<=i&&i<=69702||69759<=i&&i<=69761||69811<=i&&i<=69814||69817<=i&&i<=69818||69888<=i&&i<=69890||69927<=i&&i<=69931||69933<=i&&i<=69940||70003==i||70016<=i&&i<=70017||70070<=i&&i<=70078||70090<=i&&i<=70092||70191<=i&&i<=70193||70196==i||70198<=i&&i<=70199||70206==i||70367==i||70371<=i&&i<=70378||70400<=i&&i<=70401||70460==i||70462==i||70464==i||70487==i||70502<=i&&i<=70508||70512<=i&&i<=70516||70712<=i&&i<=70719||70722<=i&&i<=70724||70726==i||70832==i||70835<=i&&i<=70840||70842==i||70845==i||70847<=i&&i<=70848||70850<=i&&i<=70851||71087==i||71090<=i&&i<=71093||71100<=i&&i<=71101||71103<=i&&i<=71104||71132<=i&&i<=71133||71219<=i&&i<=71226||71229==i||71231<=i&&i<=71232||71339==i||71341==i||71344<=i&&i<=71349||71351==i||71453<=i&&i<=71455||71458<=i&&i<=71461||71463<=i&&i<=71467||72193<=i&&i<=72198||72201<=i&&i<=72202||72243<=i&&i<=72248||72251<=i&&i<=72254||72263==i||72273<=i&&i<=72278||72281<=i&&i<=72283||72330<=i&&i<=72342||72344<=i&&i<=72345||72752<=i&&i<=72758||72760<=i&&i<=72765||72767==i||72850<=i&&i<=72871||72874<=i&&i<=72880||72882<=i&&i<=72883||72885<=i&&i<=72886||73009<=i&&i<=73014||73018==i||73020<=i&&i<=73021||73023<=i&&i<=73029||73031==i||92912<=i&&i<=92916||92976<=i&&i<=92982||94095<=i&&i<=94098||113821<=i&&i<=113822||119141==i||119143<=i&&i<=119145||119150<=i&&i<=119154||119163<=i&&i<=119170||119173<=i&&i<=119179||119210<=i&&i<=119213||119362<=i&&i<=119364||121344<=i&&i<=121398||121403<=i&&i<=121452||121461==i||121476==i||121499<=i&&i<=121503||121505<=i&&i<=121519||122880<=i&&i<=122886||122888<=i&&i<=122904||122907<=i&&i<=122913||122915<=i&&i<=122916||122918<=i&&i<=122922||125136<=i&&i<=125142||125252<=i&&i<=125258||917536<=i&&i<=917631||917760<=i&&i<=917999?e:127462<=i&&i<=127487?t:2307==i||2363==i||2366<=i&&i<=2368||2377<=i&&i<=2380||2382<=i&&i<=2383||2434<=i&&i<=2435||2495<=i&&i<=2496||2503<=i&&i<=2504||2507<=i&&i<=2508||2563==i||2622<=i&&i<=2624||2691==i||2750<=i&&i<=2752||2761==i||2763<=i&&i<=2764||2818<=i&&i<=2819||2880==i||2887<=i&&i<=2888||2891<=i&&i<=2892||3007==i||3009<=i&&i<=3010||3014<=i&&i<=3016||3018<=i&&i<=3020||3073<=i&&i<=3075||3137<=i&&i<=3140||3202<=i&&i<=3203||3262==i||3264<=i&&i<=3265||3267<=i&&i<=3268||3271<=i&&i<=3272||3274<=i&&i<=3275||3330<=i&&i<=3331||3391<=i&&i<=3392||3398<=i&&i<=3400||3402<=i&&i<=3404||3458<=i&&i<=3459||3536<=i&&i<=3537||3544<=i&&i<=3550||3570<=i&&i<=3571||3635==i||3763==i||3902<=i&&i<=3903||3967==i||4145==i||4155<=i&&i<=4156||4182<=i&&i<=4183||4228==i||6070==i||6078<=i&&i<=6085||6087<=i&&i<=6088||6435<=i&&i<=6438||6441<=i&&i<=6443||6448<=i&&i<=6449||6451<=i&&i<=6456||6681<=i&&i<=6682||6741==i||6743==i||6765<=i&&i<=6770||6916==i||6965==i||6971==i||6973<=i&&i<=6977||6979<=i&&i<=6980||7042==i||7073==i||7078<=i&&i<=7079||7082==i||7143==i||7146<=i&&i<=7148||7150==i||7154<=i&&i<=7155||7204<=i&&i<=7211||7220<=i&&i<=7221||7393==i||7410<=i&&i<=7411||7415==i||43043<=i&&i<=43044||43047==i||43136<=i&&i<=43137||43188<=i&&i<=43203||43346<=i&&i<=43347||43395==i||43444<=i&&i<=43445||43450<=i&&i<=43451||43453<=i&&i<=43456||43567<=i&&i<=43568||43571<=i&&i<=43572||43597==i||43755==i||43758<=i&&i<=43759||43765==i||44003<=i&&i<=44004||44006<=i&&i<=44007||44009<=i&&i<=44010||44012==i||69632==i||69634==i||69762==i||69808<=i&&i<=69810||69815<=i&&i<=69816||69932==i||70018==i||70067<=i&&i<=70069||70079<=i&&i<=70080||70188<=i&&i<=70190||70194<=i&&i<=70195||70197==i||70368<=i&&i<=70370||70402<=i&&i<=70403||70463==i||70465<=i&&i<=70468||70471<=i&&i<=70472||70475<=i&&i<=70477||70498<=i&&i<=70499||70709<=i&&i<=70711||70720<=i&&i<=70721||70725==i||70833<=i&&i<=70834||70841==i||70843<=i&&i<=70844||70846==i||70849==i||71088<=i&&i<=71089||71096<=i&&i<=71099||71102==i||71216<=i&&i<=71218||71227<=i&&i<=71228||71230==i||71340==i||71342<=i&&i<=71343||71350==i||71456<=i&&i<=71457||71462==i||72199<=i&&i<=72200||72249==i||72279<=i&&i<=72280||72343==i||72751==i||72766==i||72873==i||72881==i||72884==i||94033<=i&&i<=94078||119142==i||119149==i?5:4352<=i&&i<=4447||43360<=i&&i<=43388?6:4448<=i&&i<=4519||55216<=i&&i<=55238?7:4520<=i&&i<=4607||55243<=i&&i<=55291?8:44032==i||44060==i||44088==i||44116==i||44144==i||44172==i||44200==i||44228==i||44256==i||44284==i||44312==i||44340==i||44368==i||44396==i||44424==i||44452==i||44480==i||44508==i||44536==i||44564==i||44592==i||44620==i||44648==i||44676==i||44704==i||44732==i||44760==i||44788==i||44816==i||44844==i||44872==i||44900==i||44928==i||44956==i||44984==i||45012==i||45040==i||45068==i||45096==i||45124==i||45152==i||45180==i||45208==i||45236==i||45264==i||45292==i||45320==i||45348==i||45376==i||45404==i||45432==i||45460==i||45488==i||45516==i||45544==i||45572==i||45600==i||45628==i||45656==i||45684==i||45712==i||45740==i||45768==i||45796==i||45824==i||45852==i||45880==i||45908==i||45936==i||45964==i||45992==i||46020==i||46048==i||46076==i||46104==i||46132==i||46160==i||46188==i||46216==i||46244==i||46272==i||46300==i||46328==i||46356==i||46384==i||46412==i||46440==i||46468==i||46496==i||46524==i||46552==i||46580==i||46608==i||46636==i||46664==i||46692==i||46720==i||46748==i||46776==i||46804==i||46832==i||46860==i||46888==i||46916==i||46944==i||46972==i||47e3==i||47028==i||47056==i||47084==i||47112==i||47140==i||47168==i||47196==i||47224==i||47252==i||47280==i||47308==i||47336==i||47364==i||47392==i||47420==i||47448==i||47476==i||47504==i||47532==i||47560==i||47588==i||47616==i||47644==i||47672==i||47700==i||47728==i||47756==i||47784==i||47812==i||47840==i||47868==i||47896==i||47924==i||47952==i||47980==i||48008==i||48036==i||48064==i||48092==i||48120==i||48148==i||48176==i||48204==i||48232==i||48260==i||48288==i||48316==i||48344==i||48372==i||48400==i||48428==i||48456==i||48484==i||48512==i||48540==i||48568==i||48596==i||48624==i||48652==i||48680==i||48708==i||48736==i||48764==i||48792==i||48820==i||48848==i||48876==i||48904==i||48932==i||48960==i||48988==i||49016==i||49044==i||49072==i||49100==i||49128==i||49156==i||49184==i||49212==i||49240==i||49268==i||49296==i||49324==i||49352==i||49380==i||49408==i||49436==i||49464==i||49492==i||49520==i||49548==i||49576==i||49604==i||49632==i||49660==i||49688==i||49716==i||49744==i||49772==i||49800==i||49828==i||49856==i||49884==i||49912==i||49940==i||49968==i||49996==i||50024==i||50052==i||50080==i||50108==i||50136==i||50164==i||50192==i||50220==i||50248==i||50276==i||50304==i||50332==i||50360==i||50388==i||50416==i||50444==i||50472==i||50500==i||50528==i||50556==i||50584==i||50612==i||50640==i||50668==i||50696==i||50724==i||50752==i||50780==i||50808==i||50836==i||50864==i||50892==i||50920==i||50948==i||50976==i||51004==i||51032==i||51060==i||51088==i||51116==i||51144==i||51172==i||51200==i||51228==i||51256==i||51284==i||51312==i||51340==i||51368==i||51396==i||51424==i||51452==i||51480==i||51508==i||51536==i||51564==i||51592==i||51620==i||51648==i||51676==i||51704==i||51732==i||51760==i||51788==i||51816==i||51844==i||51872==i||51900==i||51928==i||51956==i||51984==i||52012==i||52040==i||52068==i||52096==i||52124==i||52152==i||52180==i||52208==i||52236==i||52264==i||52292==i||52320==i||52348==i||52376==i||52404==i||52432==i||52460==i||52488==i||52516==i||52544==i||52572==i||52600==i||52628==i||52656==i||52684==i||52712==i||52740==i||52768==i||52796==i||52824==i||52852==i||52880==i||52908==i||52936==i||52964==i||52992==i||53020==i||53048==i||53076==i||53104==i||53132==i||53160==i||53188==i||53216==i||53244==i||53272==i||53300==i||53328==i||53356==i||53384==i||53412==i||53440==i||53468==i||53496==i||53524==i||53552==i||53580==i||53608==i||53636==i||53664==i||53692==i||53720==i||53748==i||53776==i||53804==i||53832==i||53860==i||53888==i||53916==i||53944==i||53972==i||54e3==i||54028==i||54056==i||54084==i||54112==i||54140==i||54168==i||54196==i||54224==i||54252==i||54280==i||54308==i||54336==i||54364==i||54392==i||54420==i||54448==i||54476==i||54504==i||54532==i||54560==i||54588==i||54616==i||54644==i||54672==i||54700==i||54728==i||54756==i||54784==i||54812==i||54840==i||54868==i||54896==i||54924==i||54952==i||54980==i||55008==i||55036==i||55064==i||55092==i||55120==i||55148==i||55176==i?9:44033<=i&&i<=44059||44061<=i&&i<=44087||44089<=i&&i<=44115||44117<=i&&i<=44143||44145<=i&&i<=44171||44173<=i&&i<=44199||44201<=i&&i<=44227||44229<=i&&i<=44255||44257<=i&&i<=44283||44285<=i&&i<=44311||44313<=i&&i<=44339||44341<=i&&i<=44367||44369<=i&&i<=44395||44397<=i&&i<=44423||44425<=i&&i<=44451||44453<=i&&i<=44479||44481<=i&&i<=44507||44509<=i&&i<=44535||44537<=i&&i<=44563||44565<=i&&i<=44591||44593<=i&&i<=44619||44621<=i&&i<=44647||44649<=i&&i<=44675||44677<=i&&i<=44703||44705<=i&&i<=44731||44733<=i&&i<=44759||44761<=i&&i<=44787||44789<=i&&i<=44815||44817<=i&&i<=44843||44845<=i&&i<=44871||44873<=i&&i<=44899||44901<=i&&i<=44927||44929<=i&&i<=44955||44957<=i&&i<=44983||44985<=i&&i<=45011||45013<=i&&i<=45039||45041<=i&&i<=45067||45069<=i&&i<=45095||45097<=i&&i<=45123||45125<=i&&i<=45151||45153<=i&&i<=45179||45181<=i&&i<=45207||45209<=i&&i<=45235||45237<=i&&i<=45263||45265<=i&&i<=45291||45293<=i&&i<=45319||45321<=i&&i<=45347||45349<=i&&i<=45375||45377<=i&&i<=45403||45405<=i&&i<=45431||45433<=i&&i<=45459||45461<=i&&i<=45487||45489<=i&&i<=45515||45517<=i&&i<=45543||45545<=i&&i<=45571||45573<=i&&i<=45599||45601<=i&&i<=45627||45629<=i&&i<=45655||45657<=i&&i<=45683||45685<=i&&i<=45711||45713<=i&&i<=45739||45741<=i&&i<=45767||45769<=i&&i<=45795||45797<=i&&i<=45823||45825<=i&&i<=45851||45853<=i&&i<=45879||45881<=i&&i<=45907||45909<=i&&i<=45935||45937<=i&&i<=45963||45965<=i&&i<=45991||45993<=i&&i<=46019||46021<=i&&i<=46047||46049<=i&&i<=46075||46077<=i&&i<=46103||46105<=i&&i<=46131||46133<=i&&i<=46159||46161<=i&&i<=46187||46189<=i&&i<=46215||46217<=i&&i<=46243||46245<=i&&i<=46271||46273<=i&&i<=46299||46301<=i&&i<=46327||46329<=i&&i<=46355||46357<=i&&i<=46383||46385<=i&&i<=46411||46413<=i&&i<=46439||46441<=i&&i<=46467||46469<=i&&i<=46495||46497<=i&&i<=46523||46525<=i&&i<=46551||46553<=i&&i<=46579||46581<=i&&i<=46607||46609<=i&&i<=46635||46637<=i&&i<=46663||46665<=i&&i<=46691||46693<=i&&i<=46719||46721<=i&&i<=46747||46749<=i&&i<=46775||46777<=i&&i<=46803||46805<=i&&i<=46831||46833<=i&&i<=46859||46861<=i&&i<=46887||46889<=i&&i<=46915||46917<=i&&i<=46943||46945<=i&&i<=46971||46973<=i&&i<=46999||47001<=i&&i<=47027||47029<=i&&i<=47055||47057<=i&&i<=47083||47085<=i&&i<=47111||47113<=i&&i<=47139||47141<=i&&i<=47167||47169<=i&&i<=47195||47197<=i&&i<=47223||47225<=i&&i<=47251||47253<=i&&i<=47279||47281<=i&&i<=47307||47309<=i&&i<=47335||47337<=i&&i<=47363||47365<=i&&i<=47391||47393<=i&&i<=47419||47421<=i&&i<=47447||47449<=i&&i<=47475||47477<=i&&i<=47503||47505<=i&&i<=47531||47533<=i&&i<=47559||47561<=i&&i<=47587||47589<=i&&i<=47615||47617<=i&&i<=47643||47645<=i&&i<=47671||47673<=i&&i<=47699||47701<=i&&i<=47727||47729<=i&&i<=47755||47757<=i&&i<=47783||47785<=i&&i<=47811||47813<=i&&i<=47839||47841<=i&&i<=47867||47869<=i&&i<=47895||47897<=i&&i<=47923||47925<=i&&i<=47951||47953<=i&&i<=47979||47981<=i&&i<=48007||48009<=i&&i<=48035||48037<=i&&i<=48063||48065<=i&&i<=48091||48093<=i&&i<=48119||48121<=i&&i<=48147||48149<=i&&i<=48175||48177<=i&&i<=48203||48205<=i&&i<=48231||48233<=i&&i<=48259||48261<=i&&i<=48287||48289<=i&&i<=48315||48317<=i&&i<=48343||48345<=i&&i<=48371||48373<=i&&i<=48399||48401<=i&&i<=48427||48429<=i&&i<=48455||48457<=i&&i<=48483||48485<=i&&i<=48511||48513<=i&&i<=48539||48541<=i&&i<=48567||48569<=i&&i<=48595||48597<=i&&i<=48623||48625<=i&&i<=48651||48653<=i&&i<=48679||48681<=i&&i<=48707||48709<=i&&i<=48735||48737<=i&&i<=48763||48765<=i&&i<=48791||48793<=i&&i<=48819||48821<=i&&i<=48847||48849<=i&&i<=48875||48877<=i&&i<=48903||48905<=i&&i<=48931||48933<=i&&i<=48959||48961<=i&&i<=48987||48989<=i&&i<=49015||49017<=i&&i<=49043||49045<=i&&i<=49071||49073<=i&&i<=49099||49101<=i&&i<=49127||49129<=i&&i<=49155||49157<=i&&i<=49183||49185<=i&&i<=49211||49213<=i&&i<=49239||49241<=i&&i<=49267||49269<=i&&i<=49295||49297<=i&&i<=49323||49325<=i&&i<=49351||49353<=i&&i<=49379||49381<=i&&i<=49407||49409<=i&&i<=49435||49437<=i&&i<=49463||49465<=i&&i<=49491||49493<=i&&i<=49519||49521<=i&&i<=49547||49549<=i&&i<=49575||49577<=i&&i<=49603||49605<=i&&i<=49631||49633<=i&&i<=49659||49661<=i&&i<=49687||49689<=i&&i<=49715||49717<=i&&i<=49743||49745<=i&&i<=49771||49773<=i&&i<=49799||49801<=i&&i<=49827||49829<=i&&i<=49855||49857<=i&&i<=49883||49885<=i&&i<=49911||49913<=i&&i<=49939||49941<=i&&i<=49967||49969<=i&&i<=49995||49997<=i&&i<=50023||50025<=i&&i<=50051||50053<=i&&i<=50079||50081<=i&&i<=50107||50109<=i&&i<=50135||50137<=i&&i<=50163||50165<=i&&i<=50191||50193<=i&&i<=50219||50221<=i&&i<=50247||50249<=i&&i<=50275||50277<=i&&i<=50303||50305<=i&&i<=50331||50333<=i&&i<=50359||50361<=i&&i<=50387||50389<=i&&i<=50415||50417<=i&&i<=50443||50445<=i&&i<=50471||50473<=i&&i<=50499||50501<=i&&i<=50527||50529<=i&&i<=50555||50557<=i&&i<=50583||50585<=i&&i<=50611||50613<=i&&i<=50639||50641<=i&&i<=50667||50669<=i&&i<=50695||50697<=i&&i<=50723||50725<=i&&i<=50751||50753<=i&&i<=50779||50781<=i&&i<=50807||50809<=i&&i<=50835||50837<=i&&i<=50863||50865<=i&&i<=50891||50893<=i&&i<=50919||50921<=i&&i<=50947||50949<=i&&i<=50975||50977<=i&&i<=51003||51005<=i&&i<=51031||51033<=i&&i<=51059||51061<=i&&i<=51087||51089<=i&&i<=51115||51117<=i&&i<=51143||51145<=i&&i<=51171||51173<=i&&i<=51199||51201<=i&&i<=51227||51229<=i&&i<=51255||51257<=i&&i<=51283||51285<=i&&i<=51311||51313<=i&&i<=51339||51341<=i&&i<=51367||51369<=i&&i<=51395||51397<=i&&i<=51423||51425<=i&&i<=51451||51453<=i&&i<=51479||51481<=i&&i<=51507||51509<=i&&i<=51535||51537<=i&&i<=51563||51565<=i&&i<=51591||51593<=i&&i<=51619||51621<=i&&i<=51647||51649<=i&&i<=51675||51677<=i&&i<=51703||51705<=i&&i<=51731||51733<=i&&i<=51759||51761<=i&&i<=51787||51789<=i&&i<=51815||51817<=i&&i<=51843||51845<=i&&i<=51871||51873<=i&&i<=51899||51901<=i&&i<=51927||51929<=i&&i<=51955||51957<=i&&i<=51983||51985<=i&&i<=52011||52013<=i&&i<=52039||52041<=i&&i<=52067||52069<=i&&i<=52095||52097<=i&&i<=52123||52125<=i&&i<=52151||52153<=i&&i<=52179||52181<=i&&i<=52207||52209<=i&&i<=52235||52237<=i&&i<=52263||52265<=i&&i<=52291||52293<=i&&i<=52319||52321<=i&&i<=52347||52349<=i&&i<=52375||52377<=i&&i<=52403||52405<=i&&i<=52431||52433<=i&&i<=52459||52461<=i&&i<=52487||52489<=i&&i<=52515||52517<=i&&i<=52543||52545<=i&&i<=52571||52573<=i&&i<=52599||52601<=i&&i<=52627||52629<=i&&i<=52655||52657<=i&&i<=52683||52685<=i&&i<=52711||52713<=i&&i<=52739||52741<=i&&i<=52767||52769<=i&&i<=52795||52797<=i&&i<=52823||52825<=i&&i<=52851||52853<=i&&i<=52879||52881<=i&&i<=52907||52909<=i&&i<=52935||52937<=i&&i<=52963||52965<=i&&i<=52991||52993<=i&&i<=53019||53021<=i&&i<=53047||53049<=i&&i<=53075||53077<=i&&i<=53103||53105<=i&&i<=53131||53133<=i&&i<=53159||53161<=i&&i<=53187||53189<=i&&i<=53215||53217<=i&&i<=53243||53245<=i&&i<=53271||53273<=i&&i<=53299||53301<=i&&i<=53327||53329<=i&&i<=53355||53357<=i&&i<=53383||53385<=i&&i<=53411||53413<=i&&i<=53439||53441<=i&&i<=53467||53469<=i&&i<=53495||53497<=i&&i<=53523||53525<=i&&i<=53551||53553<=i&&i<=53579||53581<=i&&i<=53607||53609<=i&&i<=53635||53637<=i&&i<=53663||53665<=i&&i<=53691||53693<=i&&i<=53719||53721<=i&&i<=53747||53749<=i&&i<=53775||53777<=i&&i<=53803||53805<=i&&i<=53831||53833<=i&&i<=53859||53861<=i&&i<=53887||53889<=i&&i<=53915||53917<=i&&i<=53943||53945<=i&&i<=53971||53973<=i&&i<=53999||54001<=i&&i<=54027||54029<=i&&i<=54055||54057<=i&&i<=54083||54085<=i&&i<=54111||54113<=i&&i<=54139||54141<=i&&i<=54167||54169<=i&&i<=54195||54197<=i&&i<=54223||54225<=i&&i<=54251||54253<=i&&i<=54279||54281<=i&&i<=54307||54309<=i&&i<=54335||54337<=i&&i<=54363||54365<=i&&i<=54391||54393<=i&&i<=54419||54421<=i&&i<=54447||54449<=i&&i<=54475||54477<=i&&i<=54503||54505<=i&&i<=54531||54533<=i&&i<=54559||54561<=i&&i<=54587||54589<=i&&i<=54615||54617<=i&&i<=54643||54645<=i&&i<=54671||54673<=i&&i<=54699||54701<=i&&i<=54727||54729<=i&&i<=54755||54757<=i&&i<=54783||54785<=i&&i<=54811||54813<=i&&i<=54839||54841<=i&&i<=54867||54869<=i&&i<=54895||54897<=i&&i<=54923||54925<=i&&i<=54951||54953<=i&&i<=54979||54981<=i&&i<=55007||55009<=i&&i<=55035||55037<=i&&i<=55063||55065<=i&&i<=55091||55093<=i&&i<=55119||55121<=i&&i<=55147||55149<=i&&i<=55175||55177<=i&&i<=55203?10:9757==i||9977==i||9994<=i&&i<=9997||127877==i||127938<=i&&i<=127940||127943==i||127946<=i&&i<=127948||128066<=i&&i<=128067||128070<=i&&i<=128080||128110==i||128112<=i&&i<=128120||128124==i||128129<=i&&i<=128131||128133<=i&&i<=128135||128170==i||128372<=i&&i<=128373||128378==i||128400==i||128405<=i&&i<=128406||128581<=i&&i<=128583||128587<=i&&i<=128591||128675==i||128692<=i&&i<=128694||128704==i||128716==i||129304<=i&&i<=129308||129310<=i&&i<=129311||129318==i||129328<=i&&i<=129337||129341<=i&&i<=129342||129489<=i&&i<=129501?o:127995<=i&&i<=127999?14:8205==i?15:9792==i||9794==i||9877<=i&&i<=9878||9992==i||10084==i||127752==i||127806==i||127859==i||127891==i||127908==i||127912==i||127979==i||127981==i||128139==i||128187<=i&&i<=128188||128295==i||128300==i||128488==i||128640==i||128658==i?r:128102<=i&&i<=128105?a:11}return this.nextBreak=function(e,t){if(void 0===t&&(t=0),t<0)return 0;if(t>=e.length-1)return e.length;for(var n,o,r=l(i(e,t)),a=[],c=t+1;c{"use strict";t.Z=function(e){var t=e.size,n=void 0===t?24:t,o=e.onClick,s=(e.icon,e.className),l=function(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o{"use strict";t.Z=function(e){var t=e.size,n=void 0===t?24:t,o=e.onClick,s=(e.icon,e.className),l=function(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o{"use strict";t.Z=function(e){var t=e.size,n=void 0===t?24:t,o=e.onClick,s=(e.icon,e.className),l=function(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o{"use strict";var o="undefined"!=typeof Symbol&&Symbol,r=n(69578);e.exports=function(){return"function"==typeof o&&"function"==typeof Symbol&&"symbol"==typeof o("foo")&&"symbol"==typeof Symbol("bar")&&r()}},69578:e=>{"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var o=Object.getOwnPropertySymbols(e);if(1!==o.length||o[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var r=Object.getOwnPropertyDescriptor(e,t);if(42!==r.value||!0!==r.enumerable)return!1}return!0}},22786:(e,t,n)=>{"use strict";var o=n(22698);e.exports=o.call(Function.call,Object.prototype.hasOwnProperty)},31741:(e,t,n)=>{var o="function"==typeof Map&&Map.prototype,r=Object.getOwnPropertyDescriptor&&o?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,a=o&&r&&"function"==typeof r.get?r.get:null,i=o&&Map.prototype.forEach,s="function"==typeof Set&&Set.prototype,l=Object.getOwnPropertyDescriptor&&s?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,c=s&&l&&"function"==typeof l.get?l.get:null,m=s&&Set.prototype.forEach,u="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,d="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,p="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,h=Boolean.prototype.valueOf,C=Object.prototype.toString,g=Function.prototype.toString,f=String.prototype.match,y=String.prototype.slice,w=String.prototype.replace,H=String.prototype.toUpperCase,_=String.prototype.toLowerCase,v=RegExp.prototype.test,E=Array.prototype.concat,L=Array.prototype.join,b=Array.prototype.slice,k=Math.floor,S="function"==typeof BigInt?BigInt.prototype.valueOf:null,M=Object.getOwnPropertySymbols,N="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,x="function"==typeof Symbol&&"object"==typeof Symbol.iterator,T="function"==typeof Symbol&&Symbol.toStringTag&&(Symbol.toStringTag,1)?Symbol.toStringTag:null,A=Object.prototype.propertyIsEnumerable,I=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function O(e,t){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||v.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var o=e<0?-k(-e):k(e);if(o!==e){var r=String(o),a=y.call(t,r.length+1);return w.call(r,n,"$&_")+"."+w.call(w.call(a,/([0-9]{3})/g,"$&_"),/_$/,"")}}return w.call(t,n,"$&_")}var P=n(50189),R=P.custom,V=F(R)?R:null;function j(e,t,n){var o="double"===(n.quoteStyle||t)?'"':"'";return o+e+o}function D(e){return w.call(String(e),/"/g,""")}function Z(e){return!("[object Array]"!==U(e)||T&&"object"==typeof e&&T in e)}function B(e){return!("[object RegExp]"!==U(e)||T&&"object"==typeof e&&T in e)}function F(e){if(x)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!N)return!1;try{return N.call(e),!0}catch(e){}return!1}e.exports=function e(t,n,o,r){var s=n||{};if(W(s,"quoteStyle")&&"single"!==s.quoteStyle&&"double"!==s.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(W(s,"maxStringLength")&&("number"==typeof s.maxStringLength?s.maxStringLength<0&&s.maxStringLength!==1/0:null!==s.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var l=!W(s,"customInspect")||s.customInspect;if("boolean"!=typeof l&&"symbol"!==l)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(W(s,"indent")&&null!==s.indent&&"\t"!==s.indent&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(W(s,"numericSeparator")&&"boolean"!=typeof s.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var C=s.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return Y(t,s);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var H=String(t);return C?O(t,H):H}if("bigint"==typeof t){var v=String(t)+"n";return C?O(t,v):v}var k=void 0===s.depth?5:s.depth;if(void 0===o&&(o=0),o>=k&&k>0&&"object"==typeof t)return Z(t)?"[Array]":"[Object]";var M,R=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;n=L.call(Array(e.indent+1)," ")}return{base:n,prev:L.call(Array(t+1),n)}}(s,o);if(void 0===r)r=[];else if(G(r,t)>=0)return"[Circular]";function z(t,n,a){if(n&&(r=b.call(r)).push(n),a){var i={depth:s.depth};return W(s,"quoteStyle")&&(i.quoteStyle=s.quoteStyle),e(t,i,o+1,r)}return e(t,s,o+1,r)}if("function"==typeof t&&!B(t)){var Q=function(e){if(e.name)return e.name;var t=f.call(g.call(e),/^function\s*([\w$]+)/);return t?t[1]:null}(t),ee=$(t,z);return"[Function"+(Q?": "+Q:" (anonymous)")+"]"+(ee.length>0?" { "+L.call(ee,", ")+" }":"")}if(F(t)){var te=x?w.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):N.call(t);return"object"!=typeof t||x?te:q(te)}if((M=t)&&"object"==typeof M&&("undefined"!=typeof HTMLElement&&M instanceof HTMLElement||"string"==typeof M.nodeName&&"function"==typeof M.getAttribute)){for(var ne="<"+_.call(String(t.nodeName)),oe=t.attributes||[],re=0;re",t.childNodes&&t.childNodes.length&&(ne+="..."),ne+""+_.call(String(t.nodeName))+">"}if(Z(t)){if(0===t.length)return"[]";var ae=$(t,z);return R&&!function(e){for(var t=0;t=0)return!1;return!0}(ae)?"["+X(ae,R)+"]":"[ "+L.call(ae,", ")+" ]"}if(function(e){return!("[object Error]"!==U(e)||T&&"object"==typeof e&&T in e)}(t)){var ie=$(t,z);return"cause"in Error.prototype||!("cause"in t)||A.call(t,"cause")?0===ie.length?"["+String(t)+"]":"{ ["+String(t)+"] "+L.call(ie,", ")+" }":"{ ["+String(t)+"] "+L.call(E.call("[cause]: "+z(t.cause),ie),", ")+" }"}if("object"==typeof t&&l){if(V&&"function"==typeof t[V]&&P)return P(t,{depth:k-o});if("symbol"!==l&&"function"==typeof t.inspect)return t.inspect()}if(function(e){if(!a||!e||"object"!=typeof e)return!1;try{a.call(e);try{c.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var se=[];return i.call(t,(function(e,n){se.push(z(n,t,!0)+" => "+z(e,t))})),K("Map",a.call(t),se,R)}if(function(e){if(!c||!e||"object"!=typeof e)return!1;try{c.call(e);try{a.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var le=[];return m.call(t,(function(e){le.push(z(e,t))})),K("Set",c.call(t),le,R)}if(function(e){if(!u||!e||"object"!=typeof e)return!1;try{u.call(e,u);try{d.call(e,d)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return J("WeakMap");if(function(e){if(!d||!e||"object"!=typeof e)return!1;try{d.call(e,d);try{u.call(e,u)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return J("WeakSet");if(function(e){if(!p||!e||"object"!=typeof e)return!1;try{return p.call(e),!0}catch(e){}return!1}(t))return J("WeakRef");if(function(e){return!("[object Number]"!==U(e)||T&&"object"==typeof e&&T in e)}(t))return q(z(Number(t)));if(function(e){if(!e||"object"!=typeof e||!S)return!1;try{return S.call(e),!0}catch(e){}return!1}(t))return q(z(S.call(t)));if(function(e){return!("[object Boolean]"!==U(e)||T&&"object"==typeof e&&T in e)}(t))return q(h.call(t));if(function(e){return!("[object String]"!==U(e)||T&&"object"==typeof e&&T in e)}(t))return q(z(String(t)));if(!function(e){return!("[object Date]"!==U(e)||T&&"object"==typeof e&&T in e)}(t)&&!B(t)){var ce=$(t,z),me=I?I(t)===Object.prototype:t instanceof Object||t.constructor===Object,ue=t instanceof Object?"":"null prototype",de=!me&&T&&Object(t)===t&&T in t?y.call(U(t),8,-1):ue?"Object":"",pe=(me||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(de||ue?"["+L.call(E.call([],de||[],ue||[]),": ")+"] ":"");return 0===ce.length?pe+"{}":R?pe+"{"+X(ce,R)+"}":pe+"{ "+L.call(ce,", ")+" }"}return String(t)};var z=Object.prototype.hasOwnProperty||function(e){return e in this};function W(e,t){return z.call(e,t)}function U(e){return C.call(e)}function G(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,o=e.length;nt.maxStringLength){var n=e.length-t.maxStringLength,o="... "+n+" more character"+(n>1?"s":"");return Y(y.call(e,0,t.maxStringLength),t)+o}return j(w.call(w.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Q),"single",t)}function Q(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+H.call(t.toString(16))}function q(e){return"Object("+e+")"}function J(e){return e+" { ? }"}function K(e,t,n,o){return e+" ("+t+") {"+(o?X(n,o):L.call(n,", "))+"}"}function X(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+L.call(e,","+n)+"\n"+t.prev}function $(e,t){var n=Z(e),o=[];if(n){o.length=e.length;for(var r=0;r{"use strict";var o=n(25148);function r(){}function a(){}a.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,a,i){if(i!==o){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:r};return n.PropTypes=n,n}},7862:(e,t,n)=>{e.exports=n(31772)()},25148:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},38243:e=>{"use strict";var t=String.prototype.replace,n=/%20/g,o="RFC3986";e.exports={default:o,formatters:{RFC1738:function(e){return t.call(e,n,"+")},RFC3986:function(e){return String(e)}},RFC1738:"RFC1738",RFC3986:o}},79119:(e,t,n)=>{"use strict";var o=n(67576),r=n(93649),a=n(38243);e.exports={formats:a,parse:r,stringify:o}},93649:(e,t,n)=>{"use strict";var o=n(7173),r=Object.prototype.hasOwnProperty,a=Array.isArray,i={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:o.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},s=function(e){return e.replace(/(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},l=function(e,t){return e&&"string"==typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},c=function(e,t,n,o){if(e){var a=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,i=/(\[[^[\]]*])/g,s=n.depth>0&&/(\[[^[\]]*])/.exec(a),c=s?a.slice(0,s.index):a,m=[];if(c){if(!n.plainObjects&&r.call(Object.prototype,c)&&!n.allowPrototypes)return;m.push(c)}for(var u=0;n.depth>0&&null!==(s=i.exec(a))&&u=0;--a){var i,s=e[a];if("[]"===s&&n.parseArrays)i=[].concat(r);else{i=n.plainObjects?Object.create(null):{};var c="["===s.charAt(0)&&"]"===s.charAt(s.length-1)?s.slice(1,-1):s,m=parseInt(c,10);n.parseArrays||""!==c?!isNaN(m)&&s!==c&&String(m)===c&&m>=0&&n.parseArrays&&m<=n.arrayLimit?(i=[])[m]=r:"__proto__"!==c&&(i[c]=r):i={0:r}}r=i}return r}(m,t,n,o)}};e.exports=function(e,t){var n=function(e){if(!e)return i;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=void 0===e.charset?i.charset:e.charset;return{allowDots:void 0===e.allowDots?i.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:i.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:i.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:i.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:i.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:i.comma,decoder:"function"==typeof e.decoder?e.decoder:i.decoder,delimiter:"string"==typeof e.delimiter||o.isRegExp(e.delimiter)?e.delimiter:i.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:i.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:i.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:i.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:i.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:i.strictNullHandling}}(t);if(""===e||null==e)return n.plainObjects?Object.create(null):{};for(var m="string"==typeof e?function(e,t){var n,c={},m=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,u=t.parameterLimit===1/0?void 0:t.parameterLimit,d=m.split(t.delimiter,u),p=-1,h=t.charset;if(t.charsetSentinel)for(n=0;n-1&&(g=a(g)?[g]:g),r.call(c,C)?c[C]=o.combine(c[C],g):c[C]=g}return c}(e,n):e,u=n.plainObjects?Object.create(null):{},d=Object.keys(m),p=0;p{"use strict";var o=n(44852),r=n(7173),a=n(38243),i=Object.prototype.hasOwnProperty,s={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},l=Array.isArray,c=String.prototype.split,m=Array.prototype.push,u=function(e,t){m.apply(e,l(t)?t:[t])},d=Date.prototype.toISOString,p=a.default,h={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:r.encode,encodeValuesOnly:!1,format:p,formatter:a.formatters[p],indices:!1,serializeDate:function(e){return d.call(e)},skipNulls:!1,strictNullHandling:!1},C={},g=function e(t,n,a,i,s,m,d,p,g,f,y,w,H,_,v){for(var E,L=t,b=v,k=0,S=!1;void 0!==(b=b.get(C))&&!S;){var M=b.get(t);if(k+=1,void 0!==M){if(M===k)throw new RangeError("Cyclic object value");S=!0}void 0===b.get(C)&&(k=0)}if("function"==typeof d?L=d(n,L):L instanceof Date?L=f(L):"comma"===a&&l(L)&&(L=r.maybeMap(L,(function(e){return e instanceof Date?f(e):e}))),null===L){if(i)return m&&!H?m(n,h.encoder,_,"key",y):n;L=""}if("string"==typeof(E=L)||"number"==typeof E||"boolean"==typeof E||"symbol"==typeof E||"bigint"==typeof E||r.isBuffer(L)){if(m){var N=H?n:m(n,h.encoder,_,"key",y);if("comma"===a&&H){for(var x=c.call(String(L),","),T="",A=0;A0?L.join(",")||null:void 0}];else if(l(d))I=d;else{var P=Object.keys(L);I=p?P.sort(p):P}for(var R=0;R0?H+w:""}},7173:(e,t,n)=>{"use strict";var o=n(38243),r=Object.prototype.hasOwnProperty,a=Array.isArray,i=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),s=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},o=0;o1;){var t=e.pop(),n=t.obj[t.prop];if(a(n)){for(var o=[],r=0;r=48&&m<=57||m>=65&&m<=90||m>=97&&m<=122||a===o.RFC1738&&(40===m||41===m)?l+=s.charAt(c):m<128?l+=i[m]:m<2048?l+=i[192|m>>6]+i[128|63&m]:m<55296||m>=57344?l+=i[224|m>>12]+i[128|m>>6&63]+i[128|63&m]:(c+=1,m=65536+((1023&m)<<10|1023&s.charCodeAt(c)),l+=i[240|m>>18]+i[128|m>>12&63]+i[128|m>>6&63]+i[128|63&m])}return l},isBuffer:function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(a(e)){for(var n=[],o=0;o{"use strict";n.d(t,{M:()=>a,lr:()=>i});var o=n(99196),r=n(85597);function a(e){let{basename:t,children:n,history:a}=e;const[i,s]=(0,o.useState)({action:a.action,location:a.location});return(0,o.useLayoutEffect)((()=>a.listen(s)),[a]),(0,o.createElement)(r.F0,{basename:t,children:n,location:i.location,navigationType:i.action,navigator:a})}function i(e){let t=(0,o.useRef)(s(e)),n=(0,r.TH)(),a=(0,o.useMemo)((()=>{let e=s(n.search);for(let n of t.current.keys())e.has(n)||t.current.getAll(n).forEach((t=>{e.append(n,t)}));return e}),[n.search]),i=(0,r.s0)();return[a,(0,o.useCallback)(((e,t)=>{i("?"+s(e),t)}),[i])]}function s(e){return void 0===e&&(e=""),new URLSearchParams("string"==typeof e||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce(((t,n)=>{let o=e[n];return t.concat(Array.isArray(o)?o.map((e=>[n,e])):[[n,o]])}),[]))}},85597:(e,t,n)=>{"use strict";var o;function r(e){var t={};if(e){var n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));var o=e.indexOf("?");o>=0&&(t.search=e.substr(o),e=e.substr(0,o)),e&&(t.pathname=e)}return t}n.d(t,{AW:()=>S,F0:()=>M,Z5:()=>N,TH:()=>E,bS:()=>L,s0:()=>b,UO:()=>k}),function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(o||(o={}));var a=n(99196);const i=(0,a.createContext)(null),s=(0,a.createContext)(null),l=(0,a.createContext)({outlet:null,matches:[]});function c(e,t){if(!e)throw new Error(t)}function m(e,t,n){void 0===n&&(n="/");let o=f(("string"==typeof t?r(t):t).pathname||"/",n);if(null==o)return null;let a=u(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){return e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]))?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(a);let i=null;for(let e=0;null==i&&e{let a={relativePath:e.path||"",caseSensitive:!0===e.caseSensitive,childrenIndex:r,route:e};a.relativePath.startsWith("/")&&(a.relativePath.startsWith(o)||c(!1),a.relativePath=a.relativePath.slice(o.length));let i=y([o,a.relativePath]),s=n.concat(a);e.children&&e.children.length>0&&(!0===e.index&&c(!1),u(e.children,t,s,i)),(null!=e.path||e.index)&&t.push({path:i,score:h(i,e.index),routesMeta:s})})),t}const d=/^:\w+$/,p=e=>"*"===e;function h(e,t){let n=e.split("/"),o=n.length;return n.some(p)&&(o+=-2),t&&(o+=2),n.filter((e=>!p(e))).reduce(((e,t)=>e+(d.test(t)?3:""===t?1:10)),o)}function C(e,t){let{routesMeta:n}=e,o={},r="/",a=[];for(let e=0;e(o.push(t),"([^\\/]+)")));return e.endsWith("*")?(o.push("*"),r+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):r+=n?"\\/*$":"(?:(?=[.~-]|%[0-9A-F]{2})|\\b|\\/|$)",[new RegExp(r,t?void 0:"i"),o]}(e.path,e.caseSensitive,e.end),r=t.match(n);if(!r)return null;let a=r[0],i=a.replace(/(.)\/+$/,"$1"),s=r.slice(1);return{params:o.reduce(((e,t,n)=>{if("*"===t){let e=s[n]||"";i=a.slice(0,a.length-e.length).replace(/(.)\/+$/,"$1")}return e[t]=function(e,t){try{return decodeURIComponent(e)}catch(t){return e}}(s[n]||""),e}),{}),pathname:a,pathnameBase:i,pattern:e}}function f(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=e.charAt(t.length);return n&&"/"!==n?null:e.slice(t.length)||"/"}const y=e=>e.join("/").replace(/\/\/+/g,"/"),w=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),H=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",_=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";function v(){return null!=(0,a.useContext)(s)}function E(){return v()||c(!1),(0,a.useContext)(s).location}function L(e){v()||c(!1);let{pathname:t}=E();return(0,a.useMemo)((()=>g(e,t)),[t,e])}function b(){v()||c(!1);let{basename:e,navigator:t}=(0,a.useContext)(i),{matches:n}=(0,a.useContext)(l),{pathname:o}=E(),s=JSON.stringify(n.map((e=>e.pathnameBase))),m=(0,a.useRef)(!1);return(0,a.useEffect)((()=>{m.current=!0})),(0,a.useCallback)((function(n,a){if(void 0===a&&(a={}),!m.current)return;if("number"==typeof n)return void t.go(n);let i=function(e,t,n){let o,a="string"==typeof e?r(e):e,i=""===e||""===a.pathname?"/":a.pathname;if(null==i)o=n;else{let e=t.length-1;if(i.startsWith("..")){let t=i.split("/");for(;".."===t[0];)t.shift(),e-=1;a.pathname=t.join("/")}o=e>=0?t[e]:"/"}let s=function(e,t){void 0===t&&(t="/");let{pathname:n,search:o="",hash:a=""}="string"==typeof e?r(e):e,i=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:i,search:H(o),hash:_(a)}}(a,o);return i&&"/"!==i&&i.endsWith("/")&&!s.pathname.endsWith("/")&&(s.pathname+="/"),s}(n,JSON.parse(s),o);"/"!==e&&(i.pathname=y([e,i.pathname])),(a.replace?t.replace:t.push)(i,a.state)}),[e,t,s,o])}function k(){let{matches:e}=(0,a.useContext)(l),t=e[e.length-1];return t?t.params:{}}function S(e){c(!1)}function M(e){let{basename:t="/",children:n=null,location:l,navigationType:m=o.Pop,navigator:u,static:d=!1}=e;v()&&c(!1);let p=w(t),h=(0,a.useMemo)((()=>({basename:p,navigator:u,static:d})),[p,u,d]);"string"==typeof l&&(l=r(l));let{pathname:C="/",search:g="",hash:y="",state:H=null,key:_="default"}=l,E=(0,a.useMemo)((()=>{let e=f(C,p);return null==e?null:{pathname:e,search:g,hash:y,state:H,key:_}}),[p,C,g,y,H,_]);return null==E?null:(0,a.createElement)(i.Provider,{value:h},(0,a.createElement)(s.Provider,{children:n,value:{location:E,navigationType:m}}))}function N(e){let{children:t,location:n}=e;return function(e,t){v()||c(!1);let{matches:n}=(0,a.useContext)(l),o=n[n.length-1],i=o?o.params:{},s=(o&&o.pathname,o?o.pathnameBase:"/");o&&o.route;let u,d=E();if(t){var p;let e="string"==typeof t?r(t):t;"/"===s||(null==(p=e.pathname)?void 0:p.startsWith(s))||c(!1),u=e}else u=d;let h=u.pathname||"/",C=m(e,{pathname:"/"===s?h:h.slice(s.length)||"/"});return function(e,t){return void 0===t&&(t=[]),null==e?null:e.reduceRight(((n,o,r)=>(0,a.createElement)(l.Provider,{children:void 0!==o.route.element?o.route.element:n,value:{outlet:n,matches:t.concat(e.slice(0,r+1))}})),null)}(C&&C.map((e=>Object.assign({},e,{params:Object.assign({},i,e.params),pathname:y([s,e.pathname]),pathnameBase:"/"===e.pathnameBase?s:y([s,e.pathnameBase])}))),n)}(x(t),n)}function x(e){let t=[];return a.Children.forEach(e,(e=>{if(!(0,a.isValidElement)(e))return;if(e.type===a.Fragment)return void t.push.apply(t,x(e.props.children));e.type!==S&&c(!1);let n={caseSensitive:e.props.caseSensitive,element:e.props.element,index:e.props.index,path:e.props.path};e.props.children&&(n.children=x(e.props.children)),t.push(n)})),t}},44852:(e,t,n)=>{"use strict";var o=n(28487),r=n(2864),a=n(31741),i=o("%TypeError%"),s=o("%WeakMap%",!0),l=o("%Map%",!0),c=r("WeakMap.prototype.get",!0),m=r("WeakMap.prototype.set",!0),u=r("WeakMap.prototype.has",!0),d=r("Map.prototype.get",!0),p=r("Map.prototype.set",!0),h=r("Map.prototype.has",!0),C=function(e,t){for(var n,o=e;null!==(n=o.next);o=n)if(n.key===t)return o.next=n.next,n.next=e.next,e.next=n,n};e.exports=function(){var e,t,n,o={assert:function(e){if(!o.has(e))throw new i("Side channel does not contain "+a(e))},get:function(o){if(s&&o&&("object"==typeof o||"function"==typeof o)){if(e)return c(e,o)}else if(l){if(t)return d(t,o)}else if(n)return function(e,t){var n=C(e,t);return n&&n.value}(n,o)},has:function(o){if(s&&o&&("object"==typeof o||"function"==typeof o)){if(e)return u(e,o)}else if(l){if(t)return h(t,o)}else if(n)return function(e,t){return!!C(e,t)}(n,o);return!1},set:function(o,r){s&&o&&("object"==typeof o||"function"==typeof o)?(e||(e=new s),m(e,o,r)):l?(t||(t=new l),p(t,o,r)):(n||(n={key:{},next:null}),function(e,t,n){var o=C(e,t);o?o.value=n:e.next={key:t,next:e.next,value:n}}(n,o,r))}};return o}},61055:e=>{function t(e,t){if((e=e.replace(/\s+/g,""))===(t=t.replace(/\s+/g,"")))return 1;if(e.length<2||t.length<2)return 0;let n=new Map;for(let t=0;t0&&(n.set(r,a-1),o++)}return 2*o/(e.length+t.length-2)}e.exports={compareTwoStrings:t,findBestMatch:function(e,n){if(!function(e,t){return"string"==typeof e&&!!Array.isArray(t)&&!!t.length&&!t.find((function(e){return"string"!=typeof e}))}(e,n))throw new Error("Bad arguments: First argument should be a string, second should be an array of strings");const o=[];let r=0;for(let a=0;ao[r].rating&&(r=a)}return{ratings:o,bestMatch:o[r],bestMatchIndex:r}}}},31863:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTguNTc0NjUgMy4yMTYzNUwxLjUxNjMyIDE0Ljk5OTdDMS4zNzA3OSAxNS4yNTE3IDEuMjkzNzkgMTUuNTM3NCAxLjI5Mjk4IDE1LjgyODRDMS4yOTIxNiAxNi4xMTk1IDEuMzY3NTYgMTYuNDA1NiAxLjUxMTY3IDE2LjY1ODVDMS42NTU3OSAxNi45MTEzIDEuODYzNTkgMTcuMTIyIDIuMTE0NDEgMTcuMjY5NkMyLjM2NTIzIDE3LjQxNzEgMi42NTAzMiAxNy40OTY1IDIuOTQxMzIgMTcuNDk5N0gxNy4wNThDMTcuMzQ5IDE3LjQ5NjUgMTcuNjM0MSAxNy40MTcxIDE3Ljg4NDkgMTcuMjY5NkMxOC4xMzU3IDE3LjEyMiAxOC4zNDM1IDE2LjkxMTMgMTguNDg3NiAxNi42NTg1QzE4LjYzMTcgMTYuNDA1NiAxOC43MDcxIDE2LjExOTUgMTguNzA2MyAxNS44Mjg0QzE4LjcwNTUgMTUuNTM3NCAxOC42Mjg1IDE1LjI1MTcgMTguNDgzIDE0Ljk5OTdMMTEuNDI0NyAzLjIxNjM1QzExLjI3NjEgMi45NzE0NCAxMS4wNjY5IDIuNzY4OTUgMTAuODE3MyAyLjYyODQyQzEwLjU2NzcgMi40ODc4OSAxMC4yODYxIDIuNDE0MDYgOS45OTk2NSAyLjQxNDA2QzkuNzEzMjEgMi40MTQwNiA5LjQzMTU5IDIuNDg3ODkgOS4xODE5OSAyLjYyODQyQzguOTMyMzggMi43Njg5NSA4LjcyMzIxIDIuOTcxNDQgOC41NzQ2NSAzLjIxNjM1VjMuMjE2MzVaIiBzdHJva2U9IiNFNjUwNTQiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMCA3LjVWMTAuODMzMyIgc3Ryb2tlPSIjRTY1MDU0IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTAgMTQuMTY4SDEwLjAwODMiIHN0cm9rZT0iI0U2NTA1NCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9zdmc+Cg=="},67630:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAATlBMVEUAAADz9/f0+/v29/f29vb29/f19vb09vb09PT29/fz9vb2+Pj29vb2+Pj19vb3+fn2+Pj09vb29/fDxMfj5OXW19nx8vPp6uvJys3d3t9on+F5AAAAEnRSTlMAIBDfoM/vkGDeMO+PX+6fj493pkuNAAAA9klEQVRYw+3Yyw6CMBAF0On0QUHxcXmo//+j6koaIbFwE0PSs2RxM52QNjPyofHsA34WvGtVvpkqIJ8zktILVjqm5VisZidFNRYb2IZQT1KTWmxkVd6SPm/ouAHB+3AOBJWIguGgEkERxYHCiQeFlwCKg4CkBJWgXQSNj2HemBl07xbc84Ju3aJbVlDfdf3S978FDf2MIT9oQQn6KWj//1EJ2l0Q4WIjX7UYh3mPcffvWgkqQTloIwRtqOGNWREUrSinSSpSUU5GHNcpJV1JK41aOUuW2nDWPnXDWUS96pnQanWfVVLGId/paOSbts6HjBB/jpNqnnilXjdVFKs9AAAAAElFTkSuQmCC"},2732:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANsAAABACAYAAACTIgLAAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABhuSURBVHgB7V0LfBXFuf9m9uSBhEopWrVUsfahUOm14KNWW23VViABCQG11av21l5vK1ev2oeobARbtC1eab3e2nLr20oSIBDAWgu2vbW+qqKAj+sDreILECGQhJwzc7//2bPJ7uzsnoQkGHD/P4acnZ2Znd2db77nzBKlSJEiRYoUKVKkSJEiRYoUKVKkSJEiRYoUKfYgiODB3FOXlW0uzx6jHHG8lnQQ5USG9mQItUGTfESWqJXu3VUbKEWKPkQHsV1zRuNH27PyJqVoohBhItzjoWm1kPoCt67qfylFij5CnqjcmqX7KVILhKYv0AcX27WQE6+uG/cHSpGiDyDxn9bq4l1FaBr/hH6Myfwh/rmD+g/2klpd705cOJhSpOgDSHA1HvhnBzOF0O1a0Lt5wuhlaMqdU1tXdWRtXeUXRI5O1UK/R/0EfLMjVWnmG5QiRR9Aks6N4lG2n5/Bg7+B2nP7Xl1XOSTTLj/HOW9TL4Fl1gdm1k+8zT92F1atEFr+nvoRpKYTKUWKPgCLkWK/cIbzPXfRaZvx+6rGcU8zgfyWeglK0xwzT5BuT66llZd6gm60oekTtHOASN5d6+2ebe3tf8A7cuh9QoYpQJIMGB9HPrqB6joP+fQzLFZSjyH02u0DylYEs9wzFg9lUjveLMpXa5NC38qEuFg7pWvadyhdInOfISGr+ewEremjVPx6SmjRyJbV27WSq1guzpU4uUO48VO4fW5HfNJWjcXnEuo6vsRpPCfoux8n70Vu5bSW0485PW6UL+N0OidwzyM5fYgT9NbnOf2J0zJOT8VcC/2qKvw18SKnRwPHGFQTCtczARfH/Zb8LxbuwQQmwyWFfvrA/R5EdkBSebfwGwPrVPLusxie5fQkpxqyEwQmy2ZOr3N6xuhPHPCsKsl7T8dy2pe8Z7OpcK3LOO3NaQx1DaCMHO0kIjNrZs1oDOTX/WM2nqwVogueACHWKpWb50hxLBPDaZwhQ+e1ePBnt39tW6hKu1OpSR1otPQCX3PKjLqqJ0WYyl/hdJ9bXX+tkGW/5mt8Jb4r9Bb/OdOtr1xhnEIbK9ya+ddpVX4TF5xCO4ejOF3L6Tiyc6fDODVRmNj+idNdnA4lirhWwE2/zqmW09WcfsapzSgDQrib7MTWyGkSeQPSb29+TN9A2J+x5ON+vmjJb+WEickfE+j7bPIGsA2YRB4r/AbR/IrTMCqOa8gjAKgZ5Qnl0B+8x9s53chpc0y5kzndwOlTFH0OeJajyLuPiZx+QsWBsbiIekBs0szYIcSng8fOpkFPFxPBeHD/Tbwz8HMzGybMoZGPTxEkl0TKkK4LHruuK5VW5wfzmKusEkIez+08IWLYqdsw+SUaWDEO+h/ZsSlL6svsM1sRc57cuimbahuqprI78W7qPs4hjwudQF0XA8G9V5JHhEkzVymnWWQnFIj7cVwXxB+0osZNAsDHYvL3jcnHwD/CKHcYxeMA6lugP5gs8Jye4HS4cR5j+krypAT0s9+I6hFicxR9PnjsPnBiK4tjrye0sV0JMZ3LZfPlXVcxbd5llNlSLgY8HMxoXzN6fx52Afatm7kz57t1496kInBvObGVynacRZ5Y0Qkh0Neps+omPEddQEboy7gP3YkcgQg4j5JnXhNDyZutu+NSgOgz3cjbP6E8CDEoIXw5oexATqYYjgngYwl1jgv8xgDeJ6HscNp1GM5pOXncywfEd0gH/U4fjhAbU8qoSJ7Uz8Y1wBzofjli3J/CrarV/PaCIuPqH9adHDLxO9ncKRR4IJr0dW5d5SNm+3NqHhxw6Vm/H2jmu3dWv8a1bgv1RVO92zA+oo8gDG12zR/2NvOvqKt8nfv5O+oaIP79kizPjIGJBuIZuNffydOLfHHjIrIPwBfIE90WWc5h8F9IYS5xMMUD5X1ug2f6aUrGocYxiG+vhPJB7nEkJeOTVBwvc1ptpKRJ9qeF9KLlHCYJXx2AavHvMW1sJ0+XxjtaQ55uHYdNlv6toR4iMnCE5aUKbwDZoKi9fYbrCkPM3PECy4BvddQX9OdITccJGkZelSLza7PIVTWNJ2/RGx8d2LLjtSsnLzo70i+VuT1wuJkpdoZZxq1uHLVhYPbvrbr1xatqmqZrCKtB5PSd5L2IYric00cs+dAfYPDAgMTLBreGTgAiquA02VIHutzRnH7IifXbPEGaYjOuFdQpixHQsYW/0I8+V6Ss2dZhRcp/ljrv/ZQulC2G88h7XsH0y4TykJS+Xyj3gOX8GYW/15Nd6gCBHVfo21cKf/GOnic7Vlj6h9RKPYBtlh4GThDMYI0txkIm5rOb4Ekzl3WiHTxyOkQ5NvmvDp6fXzPfYZWs4wVz2d+b4qNbs2gE6363wdHMh4Mdcn7Jho0hoQuNOvURJuS85Yv/LmOu9lKojeqmTygpF7FuNpLb+YhQ+vIrpy4Pm/ZHPQ5uup6SAT2l2pLP3JXGckJMZdA6hpeCmRP3aJvp55I3e/rARGMT1WGE8CcH06iRNY6PDZQLSgI2fdvUq2zujuD9HBioMzKhHBBnpewNtJBnDDKBieAYshM6xueZ5Ol3wQltC9mfTZ8hQmzcm33e3it3YDhPvWSpu11Q9hcUj0e8urpd5yhUfy0N3IetiR1ytsyIWyL9UM4NIWc70aCcLj89WAYclZ/WS96N6JsjbQiqZdGyk1ML2kvm2s8Kt+HCB/cqJQOzuU3MmkueaBIHiGumGRtc9ElLXpOlPgwTvtncNGBAXA76KEEEeJ9HG+XupShM66BNXzPFW0wcIMqg7gid+cEutNWbKLXkQWzHpGdjHj+iZBF1l8FGbAMzpEOzlyNLXuGBuiWYx4N4kVs/8cG4hjMi15AvR+I9p6I9LGtLMZzzfbHkNfd340PtuDULj+KKJ5ltOiQj8ZvCE1c3qdaQn4nbaGSOos6MlpdHRPPEJkqGzQ8D0/ydRep9ypKH5/iKJd+mj2CyAbGBux1gKR90LUAagfhoEhuI2OSCJrc1iQ/Sgin6Q5c/1shjS3Ve/yKjH8VM/dCrfh1IEBGTnM0YK4eQJ1Zfbjl/H3muFRN4rzsTWD7K6B/SUdRDRCw2Ij8enZBYsbFZvDukQvMMLo7xcvIBxDOTGv7oh4c9+/qm9Ru5vbdn3HbaO25Au1K53CG+bMTi30qzrtYlZ9jCMpkFfZiihTlbPOUuqdoezs78M0w7FEXEwaqjg9HEhy15MPhsTK5Ggyx5eHZbLPk2f1F5IWGwmf0GQYBrBYkLA8LUv8ABMSEFOY5Z5hDjGPdlvhfoPOZLAUHG+Rlfo3hMNI4f4jQnoTyMWHiWNic9VAD42+6xnIMEsTN+sU9TVK/Fs36EegDbYGQRTodm/18sH9tGWnaIS8zVbnEbqmItlMB3bh7TLrVcwm/nddNnJoU4rLMt8X/R2srqsJZCRxRUFhXLhCXqQgg12tYG96Ut2oawvcQgbLMuiGZnXqQiu66QTbj2oZZ8iEamZIF7PtAoA6unOSnA+lgRODYHFjgCojSCcbGQdkzuAYJ8g6I4hHoXcJ/Y3hG4KlQLqBK2sRzn8H5fYCU2po0jXXdlxsh7wvvFXE3mvf0hXDl5ScRayFT7Bya4iOLP+trhnb9VJOpf28UvGGqihKlpqJAyJJMXDDxDbW3wMI8ODq3tZTvRbMmD7jAguZrVehUXQ2kbTJikMDnYjCzgVjBCBU3YZqjT44U2bAYgX/cC5zRF1PWFeg8F8vCMglEjeG+YgG3cvbcd2zaOgj4iSuQvheN3LWX2o34EK7HxtDusdE1LSHSSWfqLzi8KkHe5dVUhgwKsftzQvB/XzA87Oz80aIGQOmKtZHbWIdPnLGvaWLS0chrhiD9G8kgcZEa4vFzRLNlfaHU8M2cL6SIXXzx/gChuQbMZUGAZ3b9IvXWWPNybTby0xQ+Cw0A8tulAENMwkQXdMqbj/I8J/Rhe+AvCMMfBPwp/l1N8HyFNYJKzGc9sMZZBwJj1o0BCoECSZfC/KMr5QUhBn98Llnrg9N0JQPDxlNE/pKeph7BzNjaStOTCosW2TPk6iZlMiUgcmRbqEv6TaRfl5wXzEemhqWWe5RIdMx8P/mgIkhbrLJ3aQC0qbEiZ2oBolyEs9oba2Hvk2jYmwreiTdDWEiFCVr+K9eWfpeIz8Z8teeBO30uuFjEeABiwtsFoM1uDyCEK2fqHQY4B+BDZAc70t4R++Dqcbfb39a1HKR6ryLOG2iaiYj5BhMnNDqTfUDKxwaF8h5GHsZsfd4XjJyz1MLF9l7qP543+zaZ4n1yXIeNOODIbsvzNrjuJlXoxy104LnTRvNVPiG/it9ay0myHfW4hEexX5z9WwmLkPp0dcKKOYi0ig1srdZ1pBKFc2dfz50iEOAzM+VrrVZE2NN14ed3Yd4J5QjmwsBUL7UFbtgH7LfICiOMAsdcUJSF6mlY9uBVOsNSHmAYx0gw0gDTg30dcDCjErOcCv034xGbzsfkEhHteR3b4UUPgriahFHOSdxeYVG6yXAc65AmF341kJ1gEDBSLetkliCU2HsFHBqMtmFPoGXXj7okWkxfwf3nxggf4aLd6aeJyhTfeXb+/COoVQkWUf61zt4VFQ3Hv0O0lc4NloFOyqHiO1zc12nV16F5kNoeZMEjoK8qkMyfchiulVt+m4oBehOh10xoHIllKnmUWVkFwIBgooNtgwK2jzkEZxGXUOSBBfD+msGHDh+/rMh3aGwN9gZhuMwRgpvddGu9Yzn8ypm2/fSrUf9hyHsT+18Lvdgo76AGoIEmxoAid289Ie1MywGXNZ4lJEpwLoiJE2lst9SCCw5J4KXnEiWthghmf0McSS/+QurD8JR6xxMYWus9fW3N/SI8wrYruxOXD+ZUHI/fLFeX+lZIu6DghLsQE+jX3G8tC16ltqHqAudXVWLbDh7PKhDx7GiyiQazacpIoGFIUiRG0ZlnI6YvIFqnz4VBP8UXmlomW002uRqtHf4knlK7OwiD2VZZ8PMMryFPUIddjkMNKB+LD87LNyHjZDxcS7vFCS7uwBoKQYYgxxc6glRAOXZu+sjamvI8Rhb8240swOPuvlvPrKEzAtmDuJH0WRPG0kS6mZOBZ4h2Y1mSs2/N9YD8n+8QC/RqxlX8rXAt67mKKJ7ZTLP1DKqUeIFZ84js7pDXbhpccu0eIzmSxlCFoQgZBTmXicd07x1r9LKpdfSQ8P4jBoj2HqI4bA23gwdYWUgRuzcoKTVt/7s/t3NwgroK9Q34eLDejofLGYLuR/muazheL5+5hIFQIcY5Yq2V7SZgNh1jyQTCYWcca+TCSxDlKIXpeUrgmOJ75noKDG08BCzbHWK7rA5wHboqgpRIzPgaPSRRtRvv3W+pCdA0aLCCmmhIKiNji1slj7y7mmQCBYMILPjeMpu+Qp1dDtzuzUM5mKfb9loCmeAyw1NfUV5wNzu2cjPeauxMXDudCVZZTFdSWN5hYoYSKRPDrHH3bjMdMgtLbLmbWOyKYl1P64ismLuuyf6e2uukCW5RKESBqA+bmtd2og0HJDvZEY0MQGOyIkvAtgTbjiDmRwUgSHDwQe4O+R+i6JvfBJAlxz1xug3LBFRuIdjF1vr8Yx7aImBHU+4CEYFvoicgSn9gxOWAh7TrqZ0ic1R2pJ8ad0xnnu/BxWc+RPs+tWWIlVBbtIkSlBI3aODB3HXUB7qRFk1lHc818nhw+lslkf9IVoq2d0niikokRC0kAZwPBQU/r6lo4lIMhBUtq2mLKgFhAzDA2XR/It1kuTQugv6zHB0TQoB4H4jFFSRAbxHDTQAV9rSVwDEINThTQ154t0h+iGF9pLwDW5NVGHjj/pYFjSBJf5YTY3RbqJxDupMXnaCl+az0paNuHqGWf/6ibEuqwO6lhmJaleKEVsQ1rvZIOH3SK654Y8o+4NYsma+3U2euIeaSl6y6IiqB5g8iabT9g0ryMy8WKHNznhSzRfd+t+/oL0TbYiLJm6b+w/Dhb20OwQLWra+sqD6euAfd/fCFBZ4SohVAsiDMQZWwBsCg3jrw4RoijGLxwtEP5h05hDg6IPaZ5HpzLdCYfRJ1iDgjEJC6IuKYvD/40GzGvM47xrILPHBbIYBD0YIqK1ngOEF+HU9cA0RnPC2KzyQQwkTQXuR4mMVs0CyYTLIGCz23fQHtw+CN+t4K6vrAXk8pOrxQQbnXjN7WQt8cVYAPG5KsbqhoCx8Kd0tTE8/DYYo1LEtNm1I8PrQxwq5eMZRvn0oRqLLLo+dyn+zOkN7HFcQCLjGzdE5M0qZGRvU2sd0UbWOtbkiXVlMk4b7arXKZEOcfxc6pSWhyVtL26IP2wW191DKVI0cvg8czUmqD2sbECjts8sWEdWm1NE/SxooQGMKH8p1u9TLsNYwMLA9UnikivrKOIi5gzXuQFHvqd64Z+yuItlz7XIXmuzmq+SQnRNl+/6N5FWj5OKVL0ATJUxub1dv1C3NZujBNqJzdd0irkbWtV9lta6Gu6YZSRWuRmcv2ytpLyO2Rr6xAW5C6BGbC/QoncSkqRog/gfVhjytJpSqk5ImlNkWY9QCTuU1HsQttYKStlKbQ7+zLuYuj7hGitNqNeUqToDeTluRF6240saP0msWQPCA3AotR+Tmhvi1J5QUpoKfoKHfIgQpfoqdGXa6nZUS165CnfrSDgeWALZrb039yFX+u17xqk6Dnw0RetdFc2UO2EUJtr66uKRaO8L4goX+4Zdw1V7RUI3BzlaLlL9t5j6+ShbMDAIsD462lazdbNrm471yXkhF4vs5mV7qJT11GKfgf39IXDdTbzcrcqabGutmH8wdQPERnc7t1nwgexnKJrmfoM4Kpi9ZibmMXMYivkidZCggZrsf2n2LmLUqTYDdEvdo31driiB9npfJJ6eslUdjcggNjcLHaYyg3AHov3UIoPBnKDN0jaGgpsVySPYvblr5vEJjNX8HHnqgNB/Vbn7lFgZV8hvwqgLTeN/XQXBXbhykelzGio/CqW+1CKDyTcyU2ns8rhf6MhK5RzsC3iCJh++qKPc4kvOeQg6DpLMrta7tAP+59EA649r3FQy3vCW9uXySoa8N6r7i3ndqxBdGvmV5Aq71wpP2jjuuD57qCrEe+7FO6dY7e49ZWz+MGMEvltxET+5pQQx0yftOQISpEiAUyQx15Vs+SBTNZ5NUPyDkF6NqefMWHeqzKZl66qabrAX6vZsrlkbxLiMS3EMzpX8pzYus+5He3kP/4yYG7+HBKJebRt4E5Lg/2S2Hy4iyesZ6I7X2h1BD+ZJn5gZSVCpJ/hTRELd9KyYUxIK1n2+TKO+TdiTTf7i5EF4jy1uqG2Zml+VwFwRZaYOhYQK6Guw546+YOnj5zM5X3i28zj71s9cQ31a2LzgW3zmOgqBT6sJ+gAc7FpihQdGPXIelYzFvA4eVNoeYnOiS9kHGcMD/TxQniLf/l8CWk9zV/dv1m2LuLjwpeXRIUWep5b1XiAFqpjFzlWaaYX276xGHYLYvPh1lfd98aQ/c9es6N5G6VIYQGMbe2Z7PdLcvIYt2HcnJkLK1ddec/YF2fUVy0n6e2VA7DSf3D5mvvzu5xdXzelRej2H7ApwF+3d4IuldiZrBDCKO51Plv539RD7HbfdL755jHtlCJFAkraBrRlMzsunVG9+OhC5NOrWjr12W3qMadjnbaWrdnmzqCOBdWvudWNP2C7wM3CW6XtLUbV9Jqg1u9Gv9TUfexWnC1FimLI62zOjke1psvY8IGlWWOwPEsodZcsT3YbuQ0T7pCRz5uJ/8l/7bYXkBJbij0Kysl17FSGbwSygeSHQuivspHtQtbZBibVZcPISVrrk0OZQp/nTl1abB/MLmG3EyNTpIjDhacuK5OUG+U7YR0lL5uxYJy/MHqFW9N4ryZp3YTIPWflYLW1ea4oLE5mUfIV7a1+H0a53Cwmwqlx33nvKlLOlmKPQaaiWWod2PhIGF+UdUrjv1bU3PxT5nzetoaaHso5NIGP/+EdipramqazqIdIiS3FHoO8VTGwHXtO5H5RO2Vx9dU1C0fjM9Eql6231fO2BilYKtkawtztGzPvqVyVVXoaFbbsYwq+Ph+R0gOkxJZiz4KQtWwYWZf/SWJ/pUR9Tmcek+TcKs3vqRNWuawcqoW8hq2TeTsli4oz/c9FZw5/fDE7shcWig5xss6d5teduoNUZ0uxe0G0PytUyS3eb63YSB/6sCS+ze6etuBocpzvMS/BFuOlXHC9IrVENGduFXupG/IFHbGZBm1sVVtLT5MkCt9L0G/SiHGzO9pin51bs3SaUBorYQYIXG/1e9ii8UFKkSJFihQpUqRIkSJFihQpUqRIkSJFihQpUnzQ8f8TN8TrgNW1mAAAAABJRU5ErkJggg=="},5196:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDUzIiBoZWlnaHQ9IjczIiB2aWV3Qm94PSIwIDAgNDUzIDczIiBmaWxsPSJub25lIgogICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxyZWN0IHdpZHRoPSIzLjg4NTYxIiBoZWlnaHQ9IjEyLjIxMTkiIHJ4PSIxLjk0MjgxIiB0cmFuc2Zvcm09Im1hdHJpeCgtMC44MjU5NDMgMC41NjM3NTQgMC41NjM3NTUgMC44MjU5NDIgNDA0LjA0NyA0OC41OTQpIiBmaWxsPSIjNjRDQTQzIi8+CiAgICA8cmVjdCB3aWR0aD0iMy4wNTI2NCIgaGVpZ2h0PSI5LjU5NDAxIiByeD0iMS41MjYzMiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuNjcyMTc3IDAuNzQwMzkxIDAuNzQwMzkxIDAuNjcyMTc2IDQxNy45NyAxMy40OTk4KSIgZmlsbD0iI0ZGMkQ1NSIvPgogICAgPHJlY3Qgd2lkdGg9IjMuNjQyNzYiIGhlaWdodD0iMTEuNDQ4NyIgcng9IjEuODIxMzgiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjYzODIgLTAuNzY5ODcxIC0wLjc2OTg3MiAwLjYzODE5OCAzOTEuNzk1IDI0Ljk1MDQpIiBmaWxsPSIjMTE3QUM5Ii8+CiAgICA8cmVjdCB3aWR0aD0iMy44ODU2MSIgaGVpZ2h0PSIxMi4yMTE5IiByeD0iMS45NDI4IiB0cmFuc2Zvcm09Im1hdHJpeCgtMC40MDQzNzIgLTAuOTE0NTk1IC0wLjkxNDU5NSAwLjQwNDM3MSAxNzAuOTQgMTQuNjkxNCkiIGZpbGw9IiNGRjgwODUiLz4KICAgIDxyZWN0IHdpZHRoPSI1LjM0MjcxIiBoZWlnaHQ9IjE2Ljc5MTQiIHJ4PSIyLjY3MTM2IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjM5MjY0IDAuOTE5NjkyIDAuOTE5NjkyIC0wLjM5MjY0MiAzMjguMTE5IDUwLjYwNTUpIiBmaWxsPSIjRkY4MDg1Ii8+CiAgICA8Y2lyY2xlIHI9IjMuNDM0MjIiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjk0OTE5MyAtMC4zMTQ2OTQgLTAuMzE0Njk0IDAuOTQ5MTkzIDQzMy42OTQgNjAuNTQ0KSIgZmlsbD0iI0YwQjg0OSIvPgogICAgPGVsbGlwc2Ugcng9IjIuMjg5NDgiIHJ5PSIyLjI4OTQ4IiB0cmFuc2Zvcm09Im1hdHJpeCgtMC45NDkxOTMgLTAuMzE0Njk1IC0wLjMxNDY5MyAwLjk0OTE5NCA0NDkuOTkzIDQ0LjAwMDgpIiBmaWxsPSIjQkY1QUYyIi8+CiAgICA8ZWxsaXBzZSByeD0iMS41MjYzMiIgcnk9IjEuNTI2MzIiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjk0OTE5NCAtMC4zMTQ2OTIgLTAuMzE0Njk1IDAuOTQ5MTkzIDM3My4zMzkgNjMuMzEpIiBmaWxsPSIjQkY1QUYyIi8+CiAgICA8ZWxsaXBzZSByeD0iMi4yODk0OCIgcnk9IjIuMjg5NDgiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjk0OTE5NCAtMC4zMTQ2OTIgLTAuMzE0Njk1IDAuOTQ5MTkzIDE2MC43MTMgNTQuMDk3KSIgZmlsbD0iIzA5QjU4NSIvPgogICAgPHJlY3QgeD0iMzE0LjI3MyIgeT0iMTcuMjE5MiIgd2lkdGg9IjUuMzQyNzEiIGhlaWdodD0iMTYuNzkxNCIgcng9IjIuNjcxMzYiIHRyYW5zZm9ybT0icm90YXRlKC01MS43OTU4IDMxNC4yNzMgMTcuMjE5MikiIGZpbGw9IiM5ODRBOUMiLz4KICAgIDxyZWN0IHdpZHRoPSIzLjg4NTYxIiBoZWlnaHQ9IjEyLjIxMTkiIHJ4PSIxLjk0MjgiIHRyYW5zZm9ybT0ibWF0cml4KDAuNjE4NDY1IC0wLjc4NTgxMiAwLjc4NTgxIDAuNjE4NDY3IDI3LjA2MSAzNC43NDEpIiBmaWxsPSIjNjRDQTQzIi8+CiAgICA8cmVjdCB3aWR0aD0iMy42NDI3NiIgaGVpZ2h0PSIxMS40NDg3IiByeD0iMS44MjEzOCIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTg4ODgxIC0wLjE0ODcxMSAwLjE0ODcxNCAtMC45ODg4OCAyNjcuNjAyIDI3Ljg2MykiIGZpbGw9IiNFN0MwMzciLz4KICAgIDxyZWN0IHdpZHRoPSIzLjAwNjgyIiBoZWlnaHQ9IjkuNDUiIHJ4PSIxLjUwMzQxIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjIyNjk3MSAwLjk3MzkwMiAtMC45NzM5MDIgMC4yMjY5NjggMjEyLjIwNCA1MSkiIGZpbGw9IiNFN0MwMzciLz4KICAgIDxyZWN0IHdpZHRoPSIzLjg4NTYxIiBoZWlnaHQ9IjEyLjIxMTkiIHJ4PSIxLjk0MjgiIHRyYW5zZm9ybT0ibWF0cml4KDAuNzg1ODEgMC42MTg0NjggLTAuNjE4NDY1IDAuNzg1ODEyIDI2OS4zOTYgNTYuODc4OSkiIGZpbGw9IiMzMzYxQ0MiLz4KICAgIDxjaXJjbGUgY3g9IjkwLjUyNyIgY3k9IjQ1LjY5MjYiIHI9IjMuNDM0MjIiIHRyYW5zZm9ybT0icm90YXRlKC0xLjc5NTc4IDkwLjUyNyA0NS42OTI2KSIgZmlsbD0iI0YwQjg0OSIvPgogICAgPGNpcmNsZSBjeD0iNTkuODU5NiIgY3k9IjI3LjExNTgiIHI9IjIuMjg5NDgiIHRyYW5zZm9ybT0icm90YXRlKC0xLjc5NTc2IDU5Ljg1OTYgMjcuMTE1OCkiIGZpbGw9IiNCRjVBRjIiLz4KICAgIDxjaXJjbGUgY3g9IjMwNy4xMDkiIGN5PSI2MC43NjYzIiByPSIxLjUyNjMyIiB0cmFuc2Zvcm09InJvdGF0ZSgtMS43OTU3NCAzMDcuMTA5IDYwLjc2NjMpIiBmaWxsPSIjRjBDOTMwIi8+CiAgICA8Y2lyY2xlIGN4PSIzNTcuMzExIiBjeT0iMjguNTQ0NCIgcj0iMS41MjYzMiIgdHJhbnNmb3JtPSJyb3RhdGUoLTEuNzk1NzQgMzU3LjMxMSAyOC41NDQ0KSIgZmlsbD0iI0YwQzkzMCIvPgogICAgPGVsbGlwc2UgY3g9IjIzNy4yNDgiIGN5PSI0Ny4zNjc0IiByeD0iMS41MjYzMiIgcnk9IjEuNTI2MzIiIHRyYW5zZm9ybT0icm90YXRlKC0xLjc5NTc4IDIzNy4yNDggNDcuMzY3NCkiIGZpbGw9IiMzMzYxQ0MiLz4KICAgIDxjaXJjbGUgY3g9IjI5MC44NjkiIGN5PSIzOS45MzI5IiByPSIxLjkwNzkiIHRyYW5zZm9ybT0icm90YXRlKC0xLjc5NTc3IDI5MC44NjkgMzkuOTMyOSkiIGZpbGw9IiMzN0U2ODgiLz4KICAgIDxyZWN0IHdpZHRoPSIzLjg4NTYxIiBoZWlnaHQ9IjEyLjIxMTkiIHJ4PSIxLjk0MjgiIHRyYW5zZm9ybT0ibWF0cml4KDAuMzM2NzM1IC0wLjk0MTU5OSAwLjk0MTU5OSAwLjMzNjczNyAxMDguNjg0IDYwLjc1MSkiIGZpbGw9IiM2NENBNDMiLz4KICAgIDxyZWN0IHg9IjEzMS4yNTIiIHk9IjI1LjEyODIiIHdpZHRoPSIzLjg4NTYxIiBoZWlnaHQ9IjEyLjIxMTkiIHJ4PSIxLjk0MjgiIHRyYW5zZm9ybT0icm90YXRlKDUuODE4NjkgMTMxLjI1MiAyNS4xMjgyKSIgZmlsbD0iIzMzNjFDQyIvPgogICAgPGVsbGlwc2Ugcng9IjMuNDM0MjIiIHJ5PSIzLjQzNDIyIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjgyNzI2MiAtMC41NjE4MTYgMC41NjE4MTEgMC44MjcyNjYgMjEuNDU2OSA2Ny43NzUxKSIgZmlsbD0iI0YwQjg0OSIvPgogICAgPGNpcmNsZSBjeD0iMTk1LjgxOSIgY3k9IjMzLjE2NTQiIHI9IjIuMjg5NDgiIHRyYW5zZm9ybT0icm90YXRlKC0zNC4xODEzIDE5NS44MTkgMzMuMTY1NCkiIGZpbGw9IiNCRjVBRjIiLz4KICAgIDxjaXJjbGUgcj0iMS41MjYzMiIgdHJhbnNmb3JtPSJtYXRyaXgoMC44MjcyNjYgLTAuNTYxODEgMC41NjE4MTggMC44MjcyNjEgNjQuMjU0IDY1Ljk3NDUpIiBmaWxsPSIjMzM2MUNDIi8+CiAgICA8ZWxsaXBzZSByeD0iMS45MDc5IiByeT0iMS45MDc5IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjgyNzI2NSAtMC41NjE4MTIgMC41NjE4MTUgMC44MjcyNjMgMi41ODcyNCA0OC4zMDMxKSIgZmlsbD0iIzM3RTY4OCIvPgogICAgPGVsbGlwc2Ugcng9IjEuOTA3OSIgcnk9IjEuOTA3OSIgdHJhbnNmb3JtPSJtYXRyaXgoMC44MjcyNjUgLTAuNTYxODEyIDAuNTYxODE1IDAuODI3MjYzIDI3Ljk3NjkgMTUuNjQ5MykiIGZpbGw9IiNGMEM5MzAiLz4KICAgIDxlbGxpcHNlIGN4PSIyMzEuMzY3IiBjeT0iMjEuMzM2IiByeD0iMi4yODk0OCIgcnk9IjIuMjg5NDgiIHRyYW5zZm9ybT0icm90YXRlKC0zNC4xODEzIDIzMS4zNjcgMjEuMzM2KSIgZmlsbD0iIzA5QjU4NSIvPgogICAgPGVsbGlwc2Ugcng9IjIuMjg5NDgiIHJ5PSIyLjI4OTQ4IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjgyNzI2NyAtMC41NjE4MDkgMC41NjE4MTkgMC44MjcyNiAxMDAuMTY0IDE1LjQyNzEpIiBmaWxsPSIjRkYzQjMwIi8+Cjwvc3ZnPgo="},21079:(e,t,n)=>{"use strict";e.exports=n.p+"dbfe730286a89feb7ce0.svg"},26016:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1hc2sgaWQ9Im1hc2swIiBzdHlsZT0ibWFzay10eXBlOmFscGhhIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSIyIiB5PSIxIiB3aWR0aD0iMTIiIGhlaWdodD0iMTQiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTYgMS4wMDI5M0gxMFYyLjMzNjI2SDZWMS4wMDI5M1pNNy4zMzMzMyA5LjY2OTZWNS42Njk2SDguNjY2NjdWOS42Njk2SDcuMzMzMzNaTTEyLjY4NjcgNS4yNTYyNkwxMy42MzMzIDQuMzA5NkMxMy4zNDY3IDMuOTY5NiAxMy4wMzMzIDMuNjQ5NiAxMi42OTMzIDMuMzY5NkwxMS43NDY3IDQuMzE2MjZDMTAuNzEzMyAzLjQ4OTYgOS40MTMzMyAyLjk5NjI2IDggMi45OTYyNkM0LjY4NjY3IDIuOTk2MjYgMiA1LjY4MjkzIDIgOC45OTYyNkMyIDEyLjMwOTYgNC42OCAxNC45OTYzIDggMTQuOTk2M0MxMS4zMiAxNC45OTYzIDE0IDEyLjMwOTYgMTQgOC45OTYyNkMxNCA3LjU4OTYgMTMuNTA2NyA2LjI4OTYgMTIuNjg2NyA1LjI1NjI2Wk0zLjMzMzMzIDkuMDAyOTNDMy4zMzMzMyAxMS41ODI5IDUuNDIgMTMuNjY5NiA4IDEzLjY2OTZDMTAuNTggMTMuNjY5NiAxMi42NjY3IDExLjU4MjkgMTIuNjY2NyA5LjAwMjkzQzEyLjY2NjcgNi40MjI5MyAxMC41OCA0LjMzNjI2IDggNC4zMzYyNkM1LjQyIDQuMzM2MjYgMy4zMzMzMyA2LjQyMjkzIDMuMzMzMzMgOS4wMDI5M1oiIGZpbGw9IndoaXRlIi8+CjwvbWFzaz4KPGcgbWFzaz0idXJsKCNtYXNrMCkiPgo8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiM3ODdDODIiLz4KPC9nPgo8L3N2Zz4K"},99196:e=>{"use strict";e.exports=window.React},91850:e=>{"use strict";e.exports=window.ReactDOM},92819:e=>{"use strict";e.exports=window.lodash},76292:e=>{"use strict";e.exports=window.moment},46530:e=>{"use strict";e.exports=window.wc.adminLayout},86020:e=>{"use strict";e.exports=window.wc.components},49742:e=>{"use strict";e.exports=window.wc.csvExport},17844:e=>{"use strict";e.exports=window.wc.currency},75606:e=>{"use strict";e.exports=window.wc.customerEffortScore},67221:e=>{"use strict";e.exports=window.wc.data},81921:e=>{"use strict";e.exports=window.wc.date},14812:e=>{"use strict";e.exports=window.wc.experimental},73516:e=>{"use strict";e.exports=window.wc.explat},10431:e=>{"use strict";e.exports=window.wc.navigation},81595:e=>{"use strict";e.exports=window.wc.number},51393:e=>{"use strict";e.exports=window.wc.productEditor},14599:e=>{"use strict";e.exports=window.wc.tracks},74617:e=>{"use strict";e.exports=window.wc.wcSettings},25158:e=>{"use strict";e.exports=window.wp.a11y},86989:e=>{"use strict";e.exports=window.wp.apiFetch},11313:e=>{"use strict";e.exports=window.wp.blob},52175:e=>{"use strict";e.exports=window.wp.blockEditor},97800:e=>{"use strict";e.exports=window.wp.blockLibrary},4981:e=>{"use strict";e.exports=window.wp.blocks},55609:e=>{"use strict";e.exports=window.wp.components},94333:e=>{"use strict";e.exports=window.wp.compose},37798:e=>{"use strict";e.exports=window.wp.coreData},9818:e=>{"use strict";e.exports=window.wp.data},23418:e=>{"use strict";e.exports=window.wp.dataControls},69771:e=>{"use strict";e.exports=window.wp.date},37180:e=>{"use strict";e.exports=window.wp.deprecated},45904:e=>{"use strict";e.exports=window.wp.dom},12238:e=>{"use strict";e.exports=window.wp.editor},69307:e=>{"use strict";e.exports=window.wp.element},92694:e=>{"use strict";e.exports=window.wp.hooks},22629:e=>{"use strict";e.exports=window.wp.htmlEntities},65736:e=>{"use strict";e.exports=window.wp.i18n},24705:e=>{"use strict";e.exports=window.wp.keyboardShortcuts},39630:e=>{"use strict";e.exports=window.wp.keycodes},58141:e=>{"use strict";e.exports=window.wp.mediaUtils},53961:e=>{"use strict";e.exports=window.wp.notices},98817:e=>{"use strict";e.exports=window.wp.plugins},55815:e=>{"use strict";e.exports=window.wp.preferences},70444:e=>{"use strict";e.exports=window.wp.primitives},74776:e=>{"use strict";e.exports=window.wp.privateApis},86802:e=>{"use strict";e.exports=window.wp.router},96483:e=>{"use strict";e.exports=window.wp.url},12560:e=>{"use strict";e.exports=window.wp.warning},50189:()=>{},5267:(e,t,n)=>{"use strict";function o(){return o=Object.assign||function(e){for(var t=1;to})}},a={};function i(e){var t=a[e];if(void 0!==t)return t.exports;var n=a[e]={exports:{}};return r[e].call(n.exports,n,n.exports,i),n.exports}i.m=r,i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,n)=>(i.f[n](e,t),t)),[])),i.u=e=>"chunks/"+({185:"analytics-report-categories",727:"leaderboards",925:"customize-store",1828:"core-profiler",2397:"dashboard-charts",2502:"analytics-report-stock",2624:"store-performance",2953:"analytics-settings",3307:"edit-product-page",3576:"analytics-report-orders",3700:"analytics-report-customers",3994:"analytics-report-revenue",4011:"analytics-report-coupons",4854:"analytics-report-downloads",4882:"multichannel-marketing",5396:"payment-recommendations",5502:"homescreen",6125:"shipping-recommendations",6732:"activity-panels-help",6824:"analytics-report-products",7387:"product-page",7708:"profile-wizard",7844:"activity-panels-setup",8544:"analytics-report",8597:"store-alerts",8851:"activity-panels-inbox",8960:"customizable-dashboard",9360:"wcpay-payment-welcome-page",9456:"analytics-report-variations",9669:"marketplace",9792:"analytics-report-taxes",9966:"dashboard"}[e]||e)+".js",i.miniCssF=e=>"chunks/"+e+".style.css",i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="__wcAdmin_webpackJsonp:",i.l=(n,o,r,a)=>{if(e[n])e[n].push(o);else{var s,l;if(void 0!==r)for(var c=document.getElementsByTagName("script"),m=0;m{s.onerror=s.onload=null,clearTimeout(p);var r=e[n];if(delete e[n],s.parentNode&&s.parentNode.removeChild(s),r&&r.forEach((e=>e(o))),t)return t(o)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=d.bind(null,s.onerror),s.onload=d.bind(null,s.onload),l&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;i.g.importScripts&&(e=i.g.location+"");var t=i.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");n.length&&(e=n[n.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=e+"../"})(),n=e=>new Promise(((t,n)=>{var o=i.miniCssF(e),r=i.p+o;if(((e,t)=>{for(var n=document.getElementsByTagName("link"),o=0;o{var r=document.createElement("link");r.rel="stylesheet",r.type="text/css",r.onerror=r.onload=a=>{if(r.onerror=r.onload=null,"load"===a.type)n();else{var i=a&&("load"===a.type?"missing":a.type),s=a&&a.target&&a.target.href||t,l=new Error("Loading CSS chunk "+e+" failed.\n("+s+")");l.code="CSS_CHUNK_LOAD_FAILED",l.type=i,l.request=s,r.parentNode.removeChild(r),o(l)}},r.href=t,document.head.appendChild(r)})(e,r,t,n)})),o={2143:0,2343:0},i.f.miniCss=(e,t)=>{o[e]?t.push(o[e]):0!==o[e]&&{71:1,185:1,727:1,925:1,1828:1,2397:1,2502:1,2624:1,2953:1,3307:1,3576:1,3700:1,3994:1,4011:1,4854:1,4882:1,4891:1,5502:1,5792:1,6125:1,6732:1,6824:1,7708:1,8544:1,8597:1,8851:1,9360:1,9456:1,9669:1,9792:1,9966:1}[e]&&t.push(o[e]=n(e).then((()=>{o[e]=0}),(t=>{throw delete o[e],t})))},(()=>{var e={2143:0,2343:0};i.f.j=(t,n)=>{var o=i.o(e,t)?e[t]:void 0;if(0!==o)if(o)n.push(o[2]);else{var r=new Promise(((n,r)=>o=e[t]=[n,r]));n.push(o[2]=r);var a=i.p+i.u(t),s=new Error;i.l(a,(n=>{if(i.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var r=n&&("load"===n.type?"missing":n.type),a=n&&n.target&&n.target.src;s.message="Loading chunk "+t+" failed.\n("+r+": "+a+")",s.name="ChunkLoadError",s.type=r,s.request=a,o[1](s)}}),"chunk-"+t,t)}};var t=(t,n)=>{var o,r,[a,s,l]=n,c=0;if(a.some((t=>0!==e[t]))){for(o in s)i.o(s,o)&&(i.m[o]=s[o]);l&&l(i)}for(t&&t(n);c{"use strict";i.r(s);var e=i(69307),t=i(53961),n=i(75606),o=i(67221),r=i(73463),a=i(55609),l=i(94333),c=i(9818),m=i(67027),u=i(85597),d=i(99196),p=i(7862),h=i.n(p),C=i(92819),g=i(10431),f=i(14599);window.wc.notices;var y=i(98817),w=i(46530),H=i(79119),_=i(92694),v=i(65736),E=i(86020),L=i(51393),b=i(18210);function k(e){const t=function(e){const t=(0,r.O3)("features");return t&&t[e]}(e);return Boolean(null==t?void 0:t.is_enabled)}var S=i(74816);const M=(0,e.lazy)((()=>Promise.all([i.e(71),i.e(3307)]).then(i.bind(i,33284)))),N=(0,e.lazy)((()=>Promise.all([i.e(71),i.e(3307)]).then(i.bind(i,55563)))),x=(0,e.lazy)((()=>Promise.all([i.e(71),i.e(3307)]).then(i.bind(i,6833)))),T=(0,e.lazy)((()=>Promise.all([i.e(71),i.e(7387)]).then(i.bind(i,9661)))),A=(0,e.lazy)((()=>i.e(8544).then(i.bind(i,13369)))),I=(0,e.lazy)((()=>i.e(2953).then(i.bind(i,68266)))),O=(0,e.lazy)((()=>i.e(9966).then(i.bind(i,55144)))),P=(0,e.lazy)((()=>Promise.all([i.e(7846),i.e(9529),i.e(4239),i.e(5502)]).then(i.bind(i,19055)))),R=(0,e.lazy)((()=>i.e(4882).then(i.bind(i,32901)))),V=(0,e.lazy)((()=>i.e(9669).then(i.bind(i,28957)))),j=(0,e.lazy)((()=>i.e(7708).then(i.bind(i,22173)))),D=(0,e.lazy)((()=>Promise.all([i.e(8626),i.e(1828)]).then(i.bind(i,43896)))),Z=(0,e.lazy)((()=>i.e(7708).then(i.bind(i,38447)))),B=(0,e.lazy)((()=>i.e(9360).then(i.bind(i,10990)))),F=(0,e.lazy)((()=>Promise.all([i.e(8626),i.e(4894),i.e(925)]).then(i.bind(i,51975)))),z=()=>{const e=[],t=[["",(0,r.O3)("woocommerceTranslation")]];if(e.push({container:P,path:"/",breadcrumbs:[...t,(0,v.__)("Home","woocommerce")],wpOpenMenu:"toplevel_page_woocommerce",navArgs:{id:"woocommerce-home"},capability:"manage_woocommerce"}),window.wcAdminFeatures.analytics&&(e.push({container:O,path:"/analytics/overview",breadcrumbs:[...t,["/analytics/overview",(0,v.__)("Analytics","woocommerce")],(0,v.__)("Overview","woocommerce")],wpOpenMenu:"toplevel_page_wc-admin-path--analytics-overview",navArgs:{id:"woocommerce-analytics-overview"},capability:"view_woocommerce_reports"}),e.push({container:I,path:"/analytics/settings",breadcrumbs:[...t,["/analytics/revenue",(0,v.__)("Analytics","woocommerce")],(0,v.__)("Settings","woocommerce")],wpOpenMenu:"toplevel_page_wc-admin-path--analytics-overview",navArgs:{id:"woocommerce-analytics-settings"},capability:"view_woocommerce_reports"}),e.push({container:A,path:"/customers",breadcrumbs:[...t,(0,v.__)("Customers","woocommerce")],wpOpenMenu:"toplevel_page_woocommerce",navArgs:{id:"woocommerce-analytics-customers"},capability:"view_woocommerce_reports"}),e.push({container:A,path:"/analytics/:report",breadcrumbs:e=>{let{match:n}=e;const o=(0,C.find)((0,b.Z)(),{report:n.params.report});return o?[...t,["/analytics/revenue",(0,v.__)("Analytics","woocommerce")],o.title]:[]},wpOpenMenu:"toplevel_page_wc-admin-path--analytics-overview",capability:"view_woocommerce_reports"})),window.wcAdminFeatures.marketing&&e.push({container:R,path:"/marketing",breadcrumbs:[...t,["/marketing",(0,v.__)("Marketing","woocommerce")],(0,v.__)("Overview","woocommerce")],wpOpenMenu:"toplevel_page_woocommerce-marketing",navArgs:{id:"woocommerce-marketing-overview"},capability:"view_woocommerce_reports"}),k("marketplace")&&e.push({container:V,layout:{header:!1},path:"/extensions",breadcrumbs:[["/extensions",(0,v.__)("Extensions","woocommerce")],(0,v.__)("Extensions","woocommerce")],wpOpenMenu:"toplevel_page_woocommerce",capability:"manage_woocommerce",navArgs:{id:"woocommerce-marketplace"}}),k("product_block_editor")){const t={container:T,fallback:L.ProductPageSkeleton,layout:{header:!1},wpOpenMenu:"menu-posts-product",capability:"manage_woocommerce"};e.push({...t,path:"/add-product",breadcrumbs:[["/add-product",(0,v.__)("Product","woocommerce")],(0,v.__)("Add New Product","woocommerce")],navArgs:{id:"woocommerce-add-product"}}),e.push({...t,path:"/product/:productId",breadcrumbs:[["/edit-product",(0,v.__)("Product","woocommerce")],(0,v.__)("Edit Product","woocommerce")],navArgs:{id:"woocommerce-edit-product"}})}else window.wcAdminFeatures["new-product-management-experience"]&&(e.push({container:M,path:"/add-product",breadcrumbs:[["/add-product",(0,v.__)("Product","woocommerce")],(0,v.__)("Add New Product","woocommerce")],navArgs:{id:"woocommerce-add-product"},wpOpenMenu:"menu-posts-product",capability:"manage_woocommerce"}),e.push({container:N,path:"/product/:productId",breadcrumbs:[["/edit-product",(0,v.__)("Product","woocommerce")],(0,v.__)("Edit Product","woocommerce")],navArgs:{id:"woocommerce-edit-product"},wpOpenMenu:"menu-posts-product",capability:"manage_woocommerce"}));window.wcAdminFeatures["product-variation-management"]&&e.push({container:x,fallback:L.ProductPageSkeleton,layout:{header:!1},path:"/product/:productId/variation/:variationId",breadcrumbs:[["/edit-product",(0,v.__)("Product","woocommerce")],(0,v.__)("Edit Product Variation","woocommerce")],navArgs:{id:"woocommerce-edit-product"},wpOpenMenu:"menu-posts-product",capability:"edit_products"}),window.wcAdminFeatures.onboarding&&(window.wcAdminFeatures["core-profiler"]?e.push({container:D,path:"/setup-wizard",breadcrumbs:[...t,(0,v.__)("Profiler","woocommerce")],capability:"manage_woocommerce"}):e.push({container:j,path:"/setup-wizard",breadcrumbs:[...t,(0,v.__)("Setup Wizard","woocommerce")],capability:"manage_woocommerce"})),window.wcAdminFeatures["core-profiler"]&&e.push({container:D,path:"/profiler",breadcrumbs:[...t,(0,v.__)("Profiler","woocommerce")],capability:"manage_woocommerce"}),window.wcAdminFeatures["customize-store"]&&e.push({container:F,path:"/customize-store/*",breadcrumbs:[...t,(0,v.__)("Customize Your Store","woocommerce")],layout:{header:!1,footer:!0,showNotices:!0,showStoreAlerts:!1,showPluginArea:!1},capability:"manage_woocommerce"}),window.wcAdminFeatures.settings&&e.push({container:Z,path:"/settings/:page",breadcrumbs:e=>{let{match:n}=e;const o=(0,r.O3)("settingsPages"),a=o[n.params.page];return a?[...t,[o.general?"/settings/general":`/settings/${Object.keys(o)[0]}`,(0,v.__)("Settings","woocommerce")],a]:[]},wpOpenMenu:"toplevel_page_woocommerce",capability:"manage_woocommerce"}),window.wcAdminFeatures["wc-pay-welcome-page"]&&e.push({container:B,path:"/wc-pay-welcome-page",breadcrumbs:[["/wc-pay-welcome-page",(0,v.__)("WooPayments","woocommerce")],(0,v.__)("WooPayments","woocommerce")],navArgs:{id:"woocommerce-wc-pay-welcome-page"},wpOpenMenu:"toplevel_page_woocommerce-wc-pay-welcome-page",capability:"manage_woocommerce"});const n=(0,_.applyFilters)("woocommerce_admin_pages_list",e);return n.push({container:S.E,path:"*",breadcrumbs:[...t,(0,v.__)("Not allowed","woocommerce")],wpOpenMenu:"toplevel_page_woocommerce"}),n},W=t=>{let{...n}=t;const o=function(e){const t=(0,d.useRef)();return(0,d.useEffect)((()=>{t.current=e}),[e]),t.current}(n);(0,d.useEffect)((()=>{window.document.documentElement.scrollTop=0,window.document.body.classList.remove("woocommerce-admin-is-loading")}),[]),(0,d.useEffect)((()=>{if(o){const e=(0,C.omit)(o.query,"chartType","filter","paged"),t=(0,C.omit)(n.query,"chartType","filter","paged");o.query.paged>1&&!(0,C.isEqual)(e,t)&&(0,g.getHistory)().replace((0,g.getNewPath)({paged:1})),o.match.url!==n.match.url&&(window.document.documentElement.scrollTop=0)}}),[n,o]);const{page:r,match:a,query:i}=n,{url:s,params:l}=a;return window.wpNavMenuUrlUpdate(i),window.wpNavMenuClassChange(r,s),(0,e.createElement)(e.Suspense,{fallback:r.fallback?(0,e.createElement)(r.fallback,null):(0,e.createElement)("div",{className:"woocommerce-layout__loading"},(0,e.createElement)(E.Spinner,null))},(0,e.createElement)(r.container,{params:l,path:s,pathMatch:r.path,query:i}))};window.wpNavMenuUrlUpdate=function(e){const t=(0,g.getPersistedQuery)(e),n=(0,g.getQueryExcludedScreens)(),o=document.querySelectorAll("#adminmenu a");Array.from(o).forEach((e=>function(e,t,n){if((0,g.isWCAdmin)(e.href)){const o=(0,C.last)(e.href.split("?")),r=(0,H.parse)(o),a=r.path||"homescreen",i=(0,g.getScreenFromPath)(a),s=n.includes(i),l="admin.php?"+(0,H.stringify)(Object.assign(r,s?{}:t));e.href=l,e.onclick=e=>{e.preventDefault(),(0,g.getHistory)().push(l)}}}(e,t,n)))},window.wpNavMenuClassChange=function(e,t){var n;const o=document.querySelector("#adminmenu");Array.from(o.getElementsByClassName("current")).forEach((function(e){e.classList.remove("current")})),Array.from(o.querySelectorAll(".wp-has-current-submenu")).forEach((function(e){e.classList.remove("wp-has-current-submenu"),e.classList.remove("wp-menu-open"),e.classList.remove("selected"),e.classList.add("wp-not-current-submenu"),e.classList.add("menu-top")}));const r="/"===t?"admin.php?page=wc-admin":"admin.php?page=wc-admin&path="+encodeURIComponent(t);let a="/"===t?`li > a[href$="${r}"], li > a[href*="${r}?"]`:`li > a[href*="${r}"]`;const i=null===(n=e.navArgs)||void 0===n?void 0:n.parentPath;i&&(a+=`, li > a[href*="${"/"===i?"admin.php?page=wc-admin":"admin.php?page=wc-admin&path="+encodeURIComponent(i)}"]`);const s=o.querySelectorAll(a);if(Array.from(s).forEach((function(e){e.parentElement.classList.add("current")})),e.wpOpenMenu){const t=o.querySelector("#"+e.wpOpenMenu);t&&(t.classList.remove("wp-not-current-submenu"),t.classList.add("wp-has-current-submenu"),t.classList.add("wp-menu-open"),t.classList.add("current"))}document.querySelector("#wpwrap").classList.remove("wp-responsive-open")};var U=i(83849),G=i.n(U),Y=i(22629),Q=i(74617),q=i(14812);function J(){return window.innerHeight+window.scrollY>=document.body.scrollHeight}function K(){const[t,n]=(0,e.useState)(!1),[o,r]=(0,e.useState)(J()),a=(0,e.useRef)(null);return(0,e.useEffect)((()=>{const e=()=>{n(window.pageYOffset>20),r(J())},t=()=>{a.current=window.requestAnimationFrame(e)};return window.addEventListener("scroll",t),window.addEventListener("resize",t),()=>{window.removeEventListener("scroll",t),window.removeEventListener("resize",t),window.cancelAnimationFrame(a.current)}}),[]),{isScrolled:t,atBottom:o,atTop:!t}}var X=i(20929);const $=t=>{var n;let{sections:o,isEmbedded:r=!1,query:a}=t;const i=(0,e.useRef)(null),s=(0,X.useActiveSetupTasklist)(),l=(0,Q.getSetting)("siteTitle",""),c=o.slice(-1)[0],{isScrolled:m}=K();let u=null;const d=G()("woocommerce-layout__header",{"is-scrolled":m}),p=(0,q.useSlot)(w.WC_HEADER_PAGE_TITLE_SLOT_NAME),h=Boolean(null==p||null===(n=p.fills)||void 0===n?void 0:n.length),C=(0,q.useSlot)(w.WC_HEADER_SLOT_NAME),g=null==C?void 0:C.fills,f=()=>{clearTimeout(u),u=setTimeout((function(){const e=document.querySelector("#wpbody");e&&i.current&&(e.style.marginTop=`${i.current.height}px`)}),200)};return(0,e.useLayoutEffect)((()=>(f(),window.addEventListener("resize",f),()=>{window.removeEventListener("resize",f);const e=document.querySelector("#wpbody");e&&(e.style.marginTop=null)})),[g]),(0,e.useEffect)((()=>{if(!r){const e=o.map((e=>Array.isArray(e)?e[1]:e)).reverse().join(" ‹ "),t=(0,Y.decodeEntities)((0,v.sprintf)((0,v.__)("%1$s ‹ %2$s — WooCommerce","woocommerce"),e,l));document.title!==t&&(document.title=t)}}),[r,o,l]),(0,e.createElement)("div",{className:d,ref:i},s&&(0,e.createElement)(X.TasksReminderBar,{updateBodyMargin:f,taskListId:s}),(0,e.createElement)("div",{className:"woocommerce-layout__header-wrapper"},(0,e.createElement)(w.WooHeaderNavigationItem.Slot,{fillProps:{isEmbedded:r,query:a}}),(0,e.createElement)(q.Text,{className:"woocommerce-layout__header-heading",as:"h1"},(0,Y.decodeEntities)(h?(0,e.createElement)(w.WooHeaderPageTitle.Slot,{fillProps:{isEmbedded:r,query:a}}):c)),(0,e.createElement)(w.WooHeaderItem.Slot,{fillProps:{isEmbedded:r,query:a}})))},ee=()=>{var t;const n=(0,q.useSlot)(w.WC_FOOTER_SLOT_NAME),o=Boolean(null==n||null===(t=n.fills)||void 0===t?void 0:t.length),{atBottom:r}=K();return o?(0,e.createElement)("div",{className:G()("woocommerce-layout__footer",{"at-bottom":r})},(0,e.createElement)(w.WooFooterItem.Slot,null)):null};class te extends e.Component{render(){return(0,e.createElement)("div",{id:"woocommerce-layout__notice-list",className:"woocommerce-layout__notice-list"})}}const ne=te;var oe=i(5267);let re=He();const ae=e=>ge(e,re);let ie=He();ae.write=e=>ge(e,ie);let se=He();ae.onStart=e=>ge(e,se);let le=He();ae.onFrame=e=>ge(e,le);let ce=He();ae.onFinish=e=>ge(e,ce);let me=[];ae.setTimeout=(e,t)=>{let n=ae.now()+t,o=()=>{let e=me.findIndex((e=>e.cancel==o));~e&&me.splice(e,1),he-=~e?1:0},r={time:n,handler:e,cancel:o};return me.splice(ue(n),0,r),he+=1,fe(),r};let ue=e=>~(~me.findIndex((t=>t.time>e))||~me.length);ae.cancel=e=>{se.delete(e),le.delete(e),re.delete(e),ie.delete(e),ce.delete(e)},ae.sync=e=>{Ce=!0,ae.batchedUpdates(e),Ce=!1},ae.throttle=e=>{let t;function n(){try{e(...t)}finally{t=null}}function o(...e){t=e,ae.onStart(n)}return o.handler=e,o.cancel=()=>{se.delete(n),t=null},o};let de="undefined"!=typeof window?window.requestAnimationFrame:()=>{};ae.use=e=>de=e,ae.now="undefined"!=typeof performance?()=>performance.now():Date.now,ae.batchedUpdates=e=>e(),ae.catch=console.error,ae.frameLoop="always",ae.advance=()=>{"demand"!==ae.frameLoop?console.warn("Cannot call the manual advancement of rafz whilst frameLoop is not set as demand"):we()};let pe=-1,he=0,Ce=!1;function ge(e,t){Ce?(t.delete(e),e(0)):(t.add(e),fe())}function fe(){pe<0&&(pe=0,"demand"!==ae.frameLoop&&de(ye))}function ye(){~pe&&(de(ye),ae.batchedUpdates(we))}function we(){let e=pe;pe=ae.now();let t=ue(pe);t&&(_e(me.splice(0,t),(e=>e.handler())),he-=t),se.flush(),re.flush(e?Math.min(64,pe-e):16.667),le.flush(),ie.flush(),ce.flush(),he||(pe=-1)}function He(){let e=new Set,t=e;return{add(n){he+=t!=e||e.has(n)?0:1,e.add(n)},delete:n=>(he-=t==e&&e.has(n)?1:0,e.delete(n)),flush(n){t.size&&(e=new Set,he-=t.size,_e(t,(t=>t(n)&&e.add(t))),he+=e.size,t=e)}}}function _e(e,t){e.forEach((e=>{try{t(e)}catch(e){ae.catch(e)}}))}function ve(){}const Ee={arr:Array.isArray,obj:e=>!!e&&"Object"===e.constructor.name,fun:e=>"function"==typeof e,str:e=>"string"==typeof e,num:e=>"number"==typeof e,und:e=>void 0===e};function Le(e,t){if(Ee.arr(e)){if(!Ee.arr(t)||e.length!==t.length)return!1;for(let n=0;ne.forEach(t);function ke(e,t,n){if(Ee.arr(e))for(let o=0;oEe.und(e)?[]:Ee.arr(e)?e:[e];function Me(e,t){if(e.size){const n=Array.from(e);e.clear(),be(n,t)}}const Ne=(e,...t)=>Me(e,(e=>e(...t))),xe=()=>"undefined"==typeof window||!window.navigator||/ServerSideRendering|^Deno\//.test(window.navigator.userAgent);let Te,Ae,Ie=null,Oe=!1,Pe=ve;var Re=Object.freeze({__proto__:null,get createStringInterpolator(){return Te},get to(){return Ae},get colors(){return Ie},get skipAnimation(){return Oe},get willAdvance(){return Pe},assign:e=>{e.to&&(Ae=e.to),e.now&&(ae.now=e.now),void 0!==e.colors&&(Ie=e.colors),null!=e.skipAnimation&&(Oe=e.skipAnimation),e.createStringInterpolator&&(Te=e.createStringInterpolator),e.requestAnimationFrame&&ae.use(e.requestAnimationFrame),e.batchedUpdates&&(ae.batchedUpdates=e.batchedUpdates),e.willAdvance&&(Pe=e.willAdvance),e.frameLoop&&(ae.frameLoop=e.frameLoop)}});const Ve=new Set;let je=[],De=[],Ze=0;const Be={get idle(){return!Ve.size&&!je.length},start(e){Ze>e.priority?(Ve.add(e),ae.onStart(Fe)):(ze(e),ae(Ue))},advance:Ue,sort(e){if(Ze)ae.onFrame((()=>Be.sort(e)));else{const t=je.indexOf(e);~t&&(je.splice(t,1),We(e))}},clear(){je=[],Ve.clear()}};function Fe(){Ve.forEach(ze),Ve.clear(),ae(Ue)}function ze(e){je.includes(e)||We(e)}function We(e){je.splice(function(t,n){const o=t.findIndex((t=>t.priority>e.priority));return o<0?t.length:o}(je),0,e)}function Ue(e){const t=De;for(let n=0;n0}const Ge="[-+]?\\d*\\.?\\d+",Ye=Ge+"%";function Qe(...e){return"\\(\\s*("+e.join(")\\s*,\\s*(")+")\\s*\\)"}const qe=new RegExp("rgb"+Qe(Ge,Ge,Ge)),Je=new RegExp("rgba"+Qe(Ge,Ge,Ge,Ge)),Ke=new RegExp("hsl"+Qe(Ge,Ye,Ye)),Xe=new RegExp("hsla"+Qe(Ge,Ye,Ye,Ge)),$e=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,et=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,tt=/^#([0-9a-fA-F]{6})$/,nt=/^#([0-9a-fA-F]{8})$/;function ot(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function rt(e,t,n){const o=n<.5?n*(1+t):n+t-n*t,r=2*n-o,a=ot(r,o,e+1/3),i=ot(r,o,e),s=ot(r,o,e-1/3);return Math.round(255*a)<<24|Math.round(255*i)<<16|Math.round(255*s)<<8}function at(e){const t=parseInt(e,10);return t<0?0:t>255?255:t}function it(e){return(parseFloat(e)%360+360)%360/360}function st(e){const t=parseFloat(e);return t<0?0:t>1?255:Math.round(255*t)}function lt(e){const t=parseFloat(e);return t<0?0:t>100?1:t/100}function ct(e){let t=function(e){let t;return"number"==typeof e?e>>>0===e&&e>=0&&e<=4294967295?e:null:(t=tt.exec(e))?parseInt(t[1]+"ff",16)>>>0:Ie&&void 0!==Ie[e]?Ie[e]:(t=qe.exec(e))?(at(t[1])<<24|at(t[2])<<16|at(t[3])<<8|255)>>>0:(t=Je.exec(e))?(at(t[1])<<24|at(t[2])<<16|at(t[3])<<8|st(t[4]))>>>0:(t=$e.exec(e))?parseInt(t[1]+t[1]+t[2]+t[2]+t[3]+t[3]+"ff",16)>>>0:(t=nt.exec(e))?parseInt(t[1],16)>>>0:(t=et.exec(e))?parseInt(t[1]+t[1]+t[2]+t[2]+t[3]+t[3]+t[4]+t[4],16)>>>0:(t=Ke.exec(e))?(255|rt(it(t[1]),lt(t[2]),lt(t[3])))>>>0:(t=Xe.exec(e))?(rt(it(t[1]),lt(t[2]),lt(t[3]))|st(t[4]))>>>0:null}(e);return null===t?e:(t=t||0,`rgba(${(4278190080&t)>>>24}, ${(16711680&t)>>>16}, ${(65280&t)>>>8}, ${(255&t)/255})`)}const mt=(e,t,n)=>{if(Ee.fun(e))return e;if(Ee.arr(e))return mt({range:e,output:t,extrapolate:n});if(Ee.str(e.output[0]))return Te(e);const o=e,r=o.output,a=o.range||[0,1],i=o.extrapolateLeft||o.extrapolate||"extend",s=o.extrapolateRight||o.extrapolate||"extend",l=o.easing||(e=>e);return e=>{const t=function(e,t){for(var n=1;n=e);++n);return n-1}(e,a);return function(e,t,n,o,r,a,i,s,l){let c=l?l(e):e;if(cn){if("identity"===s)return c;"clamp"===s&&(c=n)}return o===r?o:t===n?e<=t?o:r:(t===-1/0?c=-c:n===1/0?c-=t:c=(c-t)/(n-t),c=a(c),o===-1/0?c=-c:r===1/0?c+=o:c=c*(r-o)+o,c)}(e,a[t],a[t+1],r[t],r[t+1],l,i,s,o.map)}};function ut(){return ut=Object.assign||function(e){for(var t=1;tBoolean(e&&e[dt]),Ct=e=>e&&e[dt]?e[dt]():e,gt=e=>e[pt]||null;function ft(e,t){let n=e[pt];n&&n.forEach((e=>{!function(e,t){e.eventObserved?e.eventObserved(t):e(t)}(e,t)}))}class yt{constructor(e){if(this[dt]=void 0,this[pt]=void 0,!e&&!(e=this.get))throw Error("Unknown getter");wt(this,e)}}const wt=(e,t)=>vt(e,dt,t);function Ht(e,t){if(e[dt]){let n=e[pt];n||vt(e,pt,n=new Set),n.has(t)||(n.add(t),e.observerAdded&&e.observerAdded(n.size,t))}return t}function _t(e,t){let n=e[pt];if(n&&n.has(t)){const o=n.size-1;o?n.delete(t):e[pt]=null,e.observerRemoved&&e.observerRemoved(o,t)}}const vt=(e,t,n)=>Object.defineProperty(e,t,{value:n,writable:!0,configurable:!0}),Et=/[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,Lt=/(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d\.]+%?\))/gi,bt=new RegExp(`(${Et.source})(%|[a-z]+)`,"i"),kt=/rgba\(([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+)\)/gi,St=/var\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\)/,Mt=e=>{const[t,n]=Nt(e);if(!t||xe())return e;const o=window.getComputedStyle(document.documentElement).getPropertyValue(t);if(o)return o.trim();if(n&&n.startsWith("--")){return window.getComputedStyle(document.documentElement).getPropertyValue(n)||e}return n&&St.test(n)?Mt(n):n||e},Nt=e=>{const t=St.exec(e);if(!t)return[,];const[,n,o]=t;return[n,o]};let xt;const Tt=(e,t,n,o,r)=>`rgba(${Math.round(t)}, ${Math.round(n)}, ${Math.round(o)}, ${r})`,At=e=>{xt||(xt=Ie?new RegExp(`(${Object.keys(Ie).join("|")})(?!\\w)`,"g"):/^\b$/);const t=e.output.map((e=>Ct(e).replace(St,Mt).replace(Lt,ct).replace(xt,ct))),n=t.map((e=>e.match(Et).map(Number))),o=n[0].map(((e,t)=>n.map((e=>{if(!(t in e))throw Error('The arity of each "output" value must be equal');return e[t]})))).map((t=>mt(ut({},e,{output:t}))));return e=>{var n;const r=!bt.test(t[0])&&(null==(n=t.find((e=>bt.test(e))))?void 0:n.replace(Et,""));let a=0;return t[0].replace(Et,(()=>`${o[a++](e)}${r||""}`)).replace(kt,Tt)}},It="react-spring: ",Ot=e=>{const t=e;let n=!1;if("function"!=typeof t)throw new TypeError(`${It}once requires a function parameter`);return(...e)=>{n||(t(...e),n=!0)}},Pt=Ot(console.warn),Rt=Ot(console.warn);function Vt(e){return Ee.str(e)&&("#"==e[0]||/\d/.test(e)||!xe()&&St.test(e)||e in(Ie||{}))}const jt=e=>(0,d.useEffect)(e,Dt),Dt=[];function Zt(){const e=(0,d.useState)()[1],t=(0,d.useState)(Bt)[0];return jt(t.unmount),()=>{t.current&&e({})}}function Bt(){const e={current:!0,unmount:()=>()=>{e.current=!1}};return e}function Ft(e){const t=(0,d.useRef)();return(0,d.useEffect)((()=>{t.current=e})),t.current}const zt="undefined"!=typeof window&&window.document&&window.document.createElement?d.useLayoutEffect:d.useEffect,Wt=Symbol.for("Animated:node"),Ut=e=>e&&e[Wt],Gt=(e,t)=>{return n=e,o=Wt,r=t,Object.defineProperty(n,o,{value:r,writable:!0,configurable:!0});var n,o,r},Yt=e=>e&&e[Wt]&&e[Wt].getPayload();class Qt{constructor(){this.payload=void 0,Gt(this,this)}getPayload(){return this.payload||[]}}class qt extends Qt{constructor(e){super(),this.done=!0,this.elapsedTime=void 0,this.lastPosition=void 0,this.lastVelocity=void 0,this.v0=void 0,this.durationProgress=0,this._value=e,Ee.num(this._value)&&(this.lastPosition=this._value)}static create(e){return new qt(e)}getPayload(){return[this]}getValue(){return this._value}setValue(e,t){return Ee.num(e)&&(this.lastPosition=e,t&&(e=Math.round(e/t)*t,this.done&&(this.lastPosition=e))),this._value!==e&&(this._value=e,!0)}reset(){const{done:e}=this;this.done=!1,Ee.num(this._value)&&(this.elapsedTime=0,this.durationProgress=0,this.lastPosition=this._value,e&&(this.lastVelocity=null),this.v0=null)}}class Jt extends qt{constructor(e){super(0),this._string=null,this._toString=void 0,this._toString=mt({output:[e,e]})}static create(e){return new Jt(e)}getValue(){let e=this._string;return null==e?this._string=this._toString(this._value):e}setValue(e){if(Ee.str(e)){if(e==this._string)return!1;this._string=e,this._value=1}else{if(!super.setValue(e))return!1;this._string=null}return!0}reset(e){e&&(this._toString=mt({output:[this.getValue(),e]})),this._value=0,super.reset()}}const Kt={dependencies:null};class Xt extends Qt{constructor(e){super(),this.source=e,this.setValue(e)}getValue(e){const t={};return ke(this.source,((n,o)=>{var r;(r=n)&&r[Wt]===r?t[o]=n.getValue(e):ht(n)?t[o]=Ct(n):e||(t[o]=n)})),t}setValue(e){this.source=e,this.payload=this._makePayload(e)}reset(){this.payload&&be(this.payload,(e=>e.reset()))}_makePayload(e){if(e){const t=new Set;return ke(e,this._addToPayload,t),Array.from(t)}}_addToPayload(e){Kt.dependencies&&ht(e)&&Kt.dependencies.add(e);const t=Yt(e);t&&be(t,(e=>this.add(e)))}}class $t extends Xt{constructor(e){super(e)}static create(e){return new $t(e)}getValue(){return this.source.map((e=>e.getValue()))}setValue(e){const t=this.getPayload();return e.length==t.length?t.map(((t,n)=>t.setValue(e[n]))).some(Boolean):(super.setValue(e.map(en)),!0)}}function en(e){return(Vt(e)?Jt:qt).create(e)}function tn(e){const t=Ut(e);return t?t.constructor:Ee.arr(e)?$t:Vt(e)?Jt:qt}function nn(){return nn=Object.assign||function(e){for(var t=1;t{const n=!Ee.fun(e)||e.prototype&&e.prototype.isReactComponent;return(0,d.forwardRef)(((o,r)=>{const a=(0,d.useRef)(null),i=n&&(0,d.useCallback)((e=>{a.current=function(e,t){return e&&(Ee.fun(e)?e(t):e.current=t),t}(r,e)}),[r]),[s,l]=function(e,t){const n=new Set;return Kt.dependencies=n,e.style&&(e=nn({},e,{style:t.createAnimatedStyle(e.style)})),e=new Xt(e),Kt.dependencies=null,[e,n]}(o,t),c=Zt(),m=()=>{const e=a.current;n&&!e||!1===(!!e&&t.applyAnimatedValues(e,s.getValue(!0)))&&c()},u=new rn(m,l),p=(0,d.useRef)();zt((()=>{const e=p.current;p.current=u,be(l,(e=>Ht(e,u))),e&&(be(e.deps,(t=>_t(t,e))),ae.cancel(e.update))})),(0,d.useEffect)(m,[]),jt((()=>()=>{const e=p.current;be(e.deps,(t=>_t(t,e)))}));const h=t.getComponentProps(s.getValue());return d.createElement(e,nn({},h,{ref:i}))}))};class rn{constructor(e,t){this.update=e,this.deps=t}eventObserved(e){"change"==e.type&&ae.write(this.update)}}const an=Symbol.for("AnimatedComponent"),sn=e=>Ee.str(e)?e:e&&Ee.str(e.displayName)?e.displayName:Ee.fun(e)&&e.name||null;function ln(){return ln=Object.assign||function(e){for(var t=1;t!0===e||!!(t&&e&&(Ee.fun(e)?e(t):Se(e).includes(t))),un=(e,t)=>Ee.obj(e)?t&&e[t]:e,dn=(e,t)=>!0===e.default?e[t]:e.default?e.default[t]:void 0,pn=e=>e,hn=(e,t=pn)=>{let n=Cn;e.default&&!0!==e.default&&(e=e.default,n=Object.keys(e));const o={};for(const r of n){const n=t(e[r],r);Ee.und(n)||(o[r]=n)}return o},Cn=["config","onProps","onStart","onChange","onPause","onResume","onRest"],gn={config:1,from:1,to:1,ref:1,loop:1,reset:1,pause:1,cancel:1,reverse:1,immediate:1,default:1,delay:1,onProps:1,onStart:1,onChange:1,onPause:1,onResume:1,onRest:1,onResolve:1,items:1,trail:1,sort:1,expires:1,initial:1,enter:1,update:1,leave:1,children:1,onDestroyed:1,keys:1,callId:1,parentId:1};function fn(e){const t=function(e){const t={};let n=0;if(ke(e,((e,o)=>{gn[o]||(t[o]=e,n++)})),n)return t}(e);if(t){const n={to:t};return ke(e,((e,o)=>o in t||(n[o]=e))),n}return ln({},e)}function yn(e){return e=Ct(e),Ee.arr(e)?e.map(yn):Vt(e)?Re.createStringInterpolator({range:[0,1],output:[e,e]})(1):e}function wn(e){for(const t in e)return!0;return!1}function Hn(e){return Ee.fun(e)||Ee.arr(e)&&Ee.obj(e[0])}function _n(e,t){var n;null==(n=e.ref)||n.delete(e),null==t||t.delete(e)}function vn(e,t){var n;t&&e.ref!==t&&(null==(n=e.ref)||n.delete(e),t.add(e),e.ref=t)}Math.PI,Math.PI;const En=ln({},{tension:170,friction:26},{mass:1,damping:1,easing:e=>e,clamp:!1});class Ln{constructor(){this.tension=void 0,this.friction=void 0,this.frequency=void 0,this.damping=void 0,this.mass=void 0,this.velocity=0,this.restVelocity=void 0,this.precision=void 0,this.progress=void 0,this.duration=void 0,this.easing=void 0,this.clamp=void 0,this.bounce=void 0,this.decay=void 0,this.round=void 0,Object.assign(this,En)}}function bn(e,t){if(Ee.und(t.decay)){const n=!Ee.und(t.tension)||!Ee.und(t.friction);!n&&Ee.und(t.frequency)&&Ee.und(t.damping)&&Ee.und(t.mass)||(e.duration=void 0,e.decay=void 0),n&&(e.frequency=void 0)}else e.duration=void 0}const kn=[];class Sn{constructor(){this.changed=!1,this.values=kn,this.toValues=null,this.fromValues=kn,this.to=void 0,this.from=void 0,this.config=new Ln,this.immediate=!1}}function Mn(e,{key:t,props:n,defaultProps:o,state:r,actions:a}){return new Promise(((i,s)=>{var l;let c,m,u=mn(null!=(l=n.cancel)?l:null==o?void 0:o.cancel,t);if(u)h();else{Ee.und(n.pause)||(r.paused=mn(n.pause,t));let e=null==o?void 0:o.pause;!0!==e&&(e=r.paused||mn(e,t)),c=cn(n.delay||0,t),e?(r.resumeQueue.add(p),a.pause()):(a.resume(),p())}function d(){r.resumeQueue.add(p),r.timeouts.delete(m),m.cancel(),c=m.time-ae.now()}function p(){c>0&&!Re.skipAnimation?(r.delayed=!0,m=ae.setTimeout(h,c),r.pauseQueue.add(d),r.timeouts.add(m)):h()}function h(){r.delayed&&(r.delayed=!1),r.pauseQueue.delete(d),r.timeouts.delete(m),e<=(r.cancelId||0)&&(u=!0);try{a.start(ln({},n,{callId:e,cancel:u}),i)}catch(e){s(e)}}}))}const Nn=(e,t)=>1==t.length?t[0]:t.some((e=>e.cancelled))?An(e.get()):t.every((e=>e.noop))?xn(e.get()):Tn(e.get(),t.every((e=>e.finished))),xn=e=>({value:e,noop:!0,finished:!0,cancelled:!1}),Tn=(e,t,n=!1)=>({value:e,finished:t,cancelled:n}),An=e=>({value:e,cancelled:!0,finished:!1});function In(e,t,n,o){const{callId:r,parentId:a,onRest:i}=t,{asyncTo:s,promise:l}=n;return a||e!==s||t.reset?n.promise=(async()=>{n.asyncId=r,n.asyncTo=e;const c=hn(t,((e,t)=>"onRest"===t?void 0:e));let m,u;const d=new Promise(((e,t)=>(m=e,u=t))),p=e=>{const t=r<=(n.cancelId||0)&&An(o)||r!==n.asyncId&&Tn(o,!1);if(t)throw e.result=t,u(e),e},h=(e,t)=>{const a=new Pn,i=new Rn;return(async()=>{if(Re.skipAnimation)throw On(n),i.result=Tn(o,!1),u(i),i;p(a);const s=Ee.obj(e)?ln({},e):ln({},t,{to:e});s.parentId=r,ke(c,((e,t)=>{Ee.und(s[t])&&(s[t]=e)}));const l=await o.start(s);return p(a),n.paused&&await new Promise((e=>{n.resumeQueue.add(e)})),l})()};let C;if(Re.skipAnimation)return On(n),Tn(o,!1);try{let t;t=Ee.arr(e)?(async e=>{for(const t of e)await h(t)})(e):Promise.resolve(e(h,o.stop.bind(o))),await Promise.all([t.then(m),d]),C=Tn(o.get(),!0,!1)}catch(e){if(e instanceof Pn)C=e.result;else{if(!(e instanceof Rn))throw e;C=e.result}}finally{r==n.asyncId&&(n.asyncId=a,n.asyncTo=a?s:void 0,n.promise=a?l:void 0)}return Ee.fun(i)&&ae.batchedUpdates((()=>{i(C,o,o.item)})),C})():l}function On(e,t){Me(e.timeouts,(e=>e.cancel())),e.pauseQueue.clear(),e.resumeQueue.clear(),e.asyncId=e.asyncTo=e.promise=void 0,t&&(e.cancelId=t)}class Pn extends Error{constructor(){super("An async animation has been interrupted. You see this error because you forgot to use `await` or `.catch(...)` on its returned promise."),this.result=void 0}}class Rn extends Error{constructor(){super("SkipAnimationSignal"),this.result=void 0}}const Vn=e=>e instanceof Dn;let jn=1;class Dn extends yt{constructor(...e){super(...e),this.id=jn++,this.key=void 0,this._priority=0}get priority(){return this._priority}set priority(e){this._priority!=e&&(this._priority=e,this._onPriorityChange(e))}get(){const e=Ut(this);return e&&e.getValue()}to(...e){return Re.to(this,e)}interpolate(...e){return Pt(`${It}The "interpolate" function is deprecated in v9 (use "to" instead)`),Re.to(this,e)}toJSON(){return this.get()}observerAdded(e){1==e&&this._attach()}observerRemoved(e){0==e&&this._detach()}_attach(){}_detach(){}_onChange(e,t=!1){ft(this,{type:"change",parent:this,value:e,idle:t})}_onPriorityChange(e){this.idle||Be.sort(this),ft(this,{type:"priority",parent:this,priority:e})}}const Zn=Symbol.for("SpringPhase"),Bn=e=>(1&e[Zn])>0,Fn=e=>(2&e[Zn])>0,zn=e=>(4&e[Zn])>0,Wn=(e,t)=>t?e[Zn]|=3:e[Zn]&=-3,Un=(e,t)=>t?e[Zn]|=4:e[Zn]&=-5;class Gn extends Dn{constructor(e,t){if(super(),this.key=void 0,this.animation=new Sn,this.queue=void 0,this.defaultProps={},this._state={paused:!1,delayed:!1,pauseQueue:new Set,resumeQueue:new Set,timeouts:new Set},this._pendingCalls=new Set,this._lastCallId=0,this._lastToId=0,this._memoizedDuration=0,!Ee.und(e)||!Ee.und(t)){const n=Ee.obj(e)?ln({},e):ln({},t,{from:e});Ee.und(n.default)&&(n.default=!0),this.start(n)}}get idle(){return!(Fn(this)||this._state.asyncTo)||zn(this)}get goal(){return Ct(this.animation.to)}get velocity(){const e=Ut(this);return e instanceof qt?e.lastVelocity||0:e.getPayload().map((e=>e.lastVelocity||0))}get hasAnimated(){return Bn(this)}get isAnimating(){return Fn(this)}get isPaused(){return zn(this)}get isDelayed(){return this._state.delayed}advance(e){let t=!0,n=!1;const o=this.animation;let{config:r,toValues:a}=o;const i=Yt(o.to);!i&&ht(o.to)&&(a=Se(Ct(o.to))),o.values.forEach(((s,l)=>{if(s.done)return;const c=s.constructor==Jt?1:i?i[l].lastPosition:a[l];let m=o.immediate,u=c;if(!m){if(u=s.lastPosition,r.tension<=0)return void(s.done=!0);let t=s.elapsedTime+=e;const n=o.fromValues[l],a=null!=s.v0?s.v0:s.v0=Ee.arr(r.velocity)?r.velocity[l]:r.velocity;let i;if(Ee.und(r.duration))if(r.decay){const e=!0===r.decay?.998:r.decay,o=Math.exp(-(1-e)*t);u=n+a/(1-e)*(1-o),m=Math.abs(s.lastPosition-u)<.1,i=a*o}else{i=null==s.lastVelocity?a:s.lastVelocity;const t=r.precision||(n==c?.005:Math.min(1,.001*Math.abs(c-n))),o=r.restVelocity||t/10,l=r.clamp?0:r.bounce,d=!Ee.und(l),p=n==c?s.v0>0:no,h||(m=Math.abs(c-u)<=t,!m));++e)d&&(C=u==c||u>c==p,C&&(i=-i*l,u=c)),i+=(1e-6*-r.tension*(u-c)+.001*-r.friction*i)/r.mass*g,u+=i*g}else{let o=1;r.duration>0&&(this._memoizedDuration!==r.duration&&(this._memoizedDuration=r.duration,s.durationProgress>0&&(s.elapsedTime=r.duration*s.durationProgress,t=s.elapsedTime+=e)),o=(r.progress||0)+t/this._memoizedDuration,o=o>1?1:o<0?0:o,s.durationProgress=o),u=n+r.easing(o)*(c-n),i=(u-s.lastPosition)/e,m=1==o}s.lastVelocity=i,Number.isNaN(u)&&(console.warn("Got NaN while animating:",this),m=!0)}i&&!i[l].done&&(m=!1),m?s.done=!0:t=!1,s.setValue(u,r.round)&&(n=!0)}));const s=Ut(this),l=s.getValue();if(t){const e=Ct(o.to);l===e&&!n||r.decay?n&&r.decay&&this._onChange(l):(s.setValue(e),this._onChange(e)),this._stop()}else n&&this._onChange(l)}set(e){return ae.batchedUpdates((()=>{this._stop(),this._focus(e),this._set(e)})),this}pause(){this._update({pause:!0})}resume(){this._update({pause:!1})}finish(){if(Fn(this)){const{to:e,config:t}=this.animation;ae.batchedUpdates((()=>{this._onStart(),t.decay||this._set(e,!1),this._stop()}))}return this}update(e){return(this.queue||(this.queue=[])).push(e),this}start(e,t){let n;return Ee.und(e)?(n=this.queue||[],this.queue=[]):n=[Ee.obj(e)?e:ln({},t,{to:e})],Promise.all(n.map((e=>this._update(e)))).then((e=>Nn(this,e)))}stop(e){const{to:t}=this.animation;return this._focus(this.get()),On(this._state,e&&this._lastCallId),ae.batchedUpdates((()=>this._stop(t,e))),this}reset(){this._update({reset:!0})}eventObserved(e){"change"==e.type?this._start():"priority"==e.type&&(this.priority=e.priority+1)}_prepareNode(e){const t=this.key||"";let{to:n,from:o}=e;n=Ee.obj(n)?n[t]:n,(null==n||Hn(n))&&(n=void 0),o=Ee.obj(o)?o[t]:o,null==o&&(o=void 0);const r={to:n,from:o};return Bn(this)||(e.reverse&&([n,o]=[o,n]),o=Ct(o),Ee.und(o)?Ut(this)||this._set(n):this._set(o)),r}_update(e,t){let n=ln({},e);const{key:o,defaultProps:r}=this;n.default&&Object.assign(r,hn(n,((e,t)=>/^on/.test(t)?un(e,o):e))),Xn(this,n,"onProps"),$n(this,"onProps",n,this);const a=this._prepareNode(n);if(Object.isFrozen(this))throw Error("Cannot animate a `SpringValue` object that is frozen. Did you forget to pass your component to `animated(...)` before animating its props?");const i=this._state;return Mn(++this._lastCallId,{key:o,props:n,defaultProps:r,state:i,actions:{pause:()=>{zn(this)||(Un(this,!0),Ne(i.pauseQueue),$n(this,"onPause",Tn(this,Yn(this,this.animation.to)),this))},resume:()=>{zn(this)&&(Un(this,!1),Fn(this)&&this._resume(),Ne(i.resumeQueue),$n(this,"onResume",Tn(this,Yn(this,this.animation.to)),this))},start:this._merge.bind(this,a)}}).then((e=>{if(n.loop&&e.finished&&(!t||!e.noop)){const e=Qn(n);if(e)return this._update(e,!0)}return e}))}_merge(e,t,n){if(t.cancel)return this.stop(!0),n(An(this));const o=!Ee.und(e.to),r=!Ee.und(e.from);if(o||r){if(!(t.callId>this._lastToId))return n(An(this));this._lastToId=t.callId}const{key:a,defaultProps:i,animation:s}=this,{to:l,from:c}=s;let{to:m=l,from:u=c}=e;!r||o||t.default&&!Ee.und(m)||(m=u),t.reverse&&([m,u]=[u,m]);const d=!Le(u,c);d&&(s.from=u),u=Ct(u);const p=!Le(m,l);p&&this._focus(m);const h=Hn(t.to),{config:C}=s,{decay:g,velocity:f}=C;(o||r)&&(C.velocity=0),t.config&&!h&&function(e,t,n){n&&(bn(n=ln({},n),t),t=ln({},n,t)),bn(e,t),Object.assign(e,t);for(const t in En)null==e[t]&&(e[t]=En[t]);let{mass:o,frequency:r,damping:a}=e;Ee.und(r)||(r<.01&&(r=.01),a<0&&(a=0),e.tension=Math.pow(2*Math.PI/r,2)*o,e.friction=4*Math.PI*a*o/r)}(C,cn(t.config,a),t.config!==i.config?cn(i.config,a):void 0);let y=Ut(this);if(!y||Ee.und(m))return n(Tn(this,!0));const w=Ee.und(t.reset)?r&&!t.default:!Ee.und(u)&&mn(t.reset,a),H=w?u:this.get(),_=yn(m),v=Ee.num(_)||Ee.arr(_)||Vt(_),E=!h&&(!v||mn(i.immediate||t.immediate,a));if(p){const e=tn(m);if(e!==y.constructor){if(!E)throw Error(`Cannot animate between ${y.constructor.name} and ${e.name}, as the "to" prop suggests`);y=this._set(_)}}const L=y.constructor;let b=ht(m),k=!1;if(!b){const e=w||!Bn(this)&&d;(p||e)&&(k=Le(yn(H),_),b=!k),(Le(s.immediate,E)||E)&&Le(C.decay,g)&&Le(C.velocity,f)||(b=!0)}if(k&&Fn(this)&&(s.changed&&!w?b=!0:b||this._stop(l)),!h&&((b||ht(l))&&(s.values=y.getPayload(),s.toValues=ht(m)?null:L==Jt?[1]:Se(_)),s.immediate!=E&&(s.immediate=E,E||w||this._set(l)),b)){const{onRest:e}=s;be(Kn,(e=>Xn(this,t,e)));const o=Tn(this,Yn(this,l));Ne(this._pendingCalls,o),this._pendingCalls.add(n),s.changed&&ae.batchedUpdates((()=>{s.changed=!w,null==e||e(o,this),w?cn(i.onRest,o):null==s.onStart||s.onStart(o,this)}))}w&&this._set(H),h?n(In(t.to,t,this._state,this)):b?this._start():Fn(this)&&!p?this._pendingCalls.add(n):n(xn(H))}_focus(e){const t=this.animation;e!==t.to&&(gt(this)&&this._detach(),t.to=e,gt(this)&&this._attach())}_attach(){let e=0;const{to:t}=this.animation;ht(t)&&(Ht(t,this),Vn(t)&&(e=t.priority+1)),this.priority=e}_detach(){const{to:e}=this.animation;ht(e)&&_t(e,this)}_set(e,t=!0){const n=Ct(e);if(!Ee.und(n)){const e=Ut(this);if(!e||!Le(n,e.getValue())){const o=tn(n);e&&e.constructor==o?e.setValue(n):Gt(this,o.create(n)),e&&ae.batchedUpdates((()=>{this._onChange(n,t)}))}}return Ut(this)}_onStart(){const e=this.animation;e.changed||(e.changed=!0,$n(this,"onStart",Tn(this,Yn(this,e.to)),this))}_onChange(e,t){t||(this._onStart(),cn(this.animation.onChange,e,this)),cn(this.defaultProps.onChange,e,this),super._onChange(e,t)}_start(){const e=this.animation;Ut(this).reset(Ct(e.to)),e.immediate||(e.fromValues=e.values.map((e=>e.lastPosition))),Fn(this)||(Wn(this,!0),zn(this)||this._resume())}_resume(){Re.skipAnimation?this.finish():Be.start(this)}_stop(e,t){if(Fn(this)){Wn(this,!1);const n=this.animation;be(n.values,(e=>{e.done=!0})),n.toValues&&(n.onChange=n.onPause=n.onResume=void 0),ft(this,{type:"idle",parent:this});const o=t?An(this.get()):Tn(this.get(),Yn(this,null!=e?e:n.to));Ne(this._pendingCalls,o),n.changed&&(n.changed=!1,$n(this,"onRest",o,this))}}}function Yn(e,t){const n=yn(t);return Le(yn(e.get()),n)}function Qn(e,t=e.loop,n=e.to){let o=cn(t);if(o){const r=!0!==o&&fn(o),a=(r||e).reverse,i=!r||r.reset;return qn(ln({},e,{loop:t,default:!1,pause:void 0,to:!a||Hn(n)?n:void 0,from:i?e.from:void 0,reset:i},r))}}function qn(e){const{to:t,from:n}=e=fn(e),o=new Set;return Ee.obj(t)&&Jn(t,o),Ee.obj(n)&&Jn(n,o),e.keys=o.size?Array.from(o):null,e}function Jn(e,t){ke(e,((e,n)=>null!=e&&t.add(n)))}const Kn=["onStart","onRest","onChange","onPause","onResume"];function Xn(e,t,n){e.animation[n]=t[n]!==dn(t,n)?un(t[n],e.key):void 0}function $n(e,t,...n){var o,r,a,i;null==(o=(r=e.animation)[t])||o.call(r,...n),null==(a=(i=e.defaultProps)[t])||a.call(i,...n)}const eo=["onStart","onChange","onRest"];let to=1;class no{constructor(e,t){this.id=to++,this.springs={},this.queue=[],this.ref=void 0,this._flush=void 0,this._initialProps=void 0,this._lastAsyncId=0,this._active=new Set,this._changed=new Set,this._started=!1,this._item=void 0,this._state={paused:!1,pauseQueue:new Set,resumeQueue:new Set,timeouts:new Set},this._events={onStart:new Map,onChange:new Map,onRest:new Map},this._onFrame=this._onFrame.bind(this),t&&(this._flush=t),e&&this.start(ln({default:!0},e))}get idle(){return!this._state.asyncTo&&Object.values(this.springs).every((e=>e.idle&&!e.isDelayed&&!e.isPaused))}get item(){return this._item}set item(e){this._item=e}get(){const e={};return this.each(((t,n)=>e[n]=t.get())),e}set(e){for(const t in e){const n=e[t];Ee.und(n)||this.springs[t].set(n)}}update(e){return e&&this.queue.push(qn(e)),this}start(e){let{queue:t}=this;return e?t=Se(e).map(qn):this.queue=[],this._flush?this._flush(this,t):(so(this,t),function(e,t){return Promise.all(t.map((t=>oo(e,t)))).then((t=>Nn(e,t)))}(this,t))}stop(e,t){if(e!==!!e&&(t=e),t){const n=this.springs;be(Se(t),(t=>n[t].stop(!!e)))}else On(this._state,this._lastAsyncId),this.each((t=>t.stop(!!e)));return this}pause(e){if(Ee.und(e))this.start({pause:!0});else{const t=this.springs;be(Se(e),(e=>t[e].pause()))}return this}resume(e){if(Ee.und(e))this.start({pause:!1});else{const t=this.springs;be(Se(e),(e=>t[e].resume()))}return this}each(e){ke(this.springs,e)}_onFrame(){const{onStart:e,onChange:t,onRest:n}=this._events,o=this._active.size>0,r=this._changed.size>0;(o&&!this._started||r&&!this._started)&&(this._started=!0,Me(e,(([e,t])=>{t.value=this.get(),e(t,this,this._item)})));const a=!o&&this._started,i=r||a&&n.size?this.get():null;r&&t.size&&Me(t,(([e,t])=>{t.value=i,e(t,this,this._item)})),a&&(this._started=!1,Me(n,(([e,t])=>{t.value=i,e(t,this,this._item)})))}eventObserved(e){if("change"==e.type)this._changed.add(e.parent),e.idle||this._active.add(e.parent);else{if("idle"!=e.type)return;this._active.delete(e.parent)}ae.onFrame(this._onFrame)}}async function oo(e,t,n){const{keys:o,to:r,from:a,loop:i,onRest:s,onResolve:l}=t,c=Ee.obj(t.default)&&t.default;i&&(t.loop=!1),!1===r&&(t.to=null),!1===a&&(t.from=null);const m=Ee.arr(r)||Ee.fun(r)?r:void 0;m?(t.to=void 0,t.onRest=void 0,c&&(c.onRest=void 0)):be(eo,(n=>{const o=t[n];if(Ee.fun(o)){const r=e._events[n];t[n]=({finished:e,cancelled:t})=>{const n=r.get(o);n?(e||(n.finished=!1),t&&(n.cancelled=!0)):r.set(o,{value:null,finished:e||!1,cancelled:t||!1})},c&&(c[n]=t[n])}}));const u=e._state;t.pause===!u.paused?(u.paused=t.pause,Ne(t.pause?u.pauseQueue:u.resumeQueue)):u.paused&&(t.pause=!0);const d=(o||Object.keys(e.springs)).map((n=>e.springs[n].start(t))),p=!0===t.cancel||!0===dn(t,"cancel");(m||p&&u.asyncId)&&d.push(Mn(++e._lastAsyncId,{props:t,state:u,actions:{pause:ve,resume:ve,start(t,n){p?(On(u,e._lastAsyncId),n(An(e))):(t.onRest=s,n(In(m,t,u,e)))}}})),u.paused&&await new Promise((e=>{u.resumeQueue.add(e)}));const h=Nn(e,await Promise.all(d));if(i&&h.finished&&(!n||!h.noop)){const n=Qn(t,i,r);if(n)return so(e,[n]),oo(e,n,!0)}return l&&ae.batchedUpdates((()=>l(h,e,e.item))),h}function ro(e,t){const n=ln({},e.springs);return t&&be(Se(t),(e=>{Ee.und(e.keys)&&(e=qn(e)),Ee.obj(e.to)||(e=ln({},e,{to:void 0})),io(n,e,(e=>ao(e)))})),function(e,t){ke(t,((t,n)=>{e.springs[n]||(e.springs[n]=t,Ht(t,e))}))}(e,n),n}function ao(e,t){const n=new Gn;return n.key=e,t&&Ht(n,t),n}function io(e,t,n){t.keys&&be(t.keys,(o=>{(e[o]||(e[o]=n(o)))._prepareNode(t)}))}function so(e,t){be(t,(t=>{io(e.springs,t,(t=>ao(t,e)))}))}const lo=["children"],co=e=>{let{children:t}=e,n=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,lo);const o=(0,d.useContext)(mo),r=n.pause||!!o.pause,a=n.immediate||!!o.immediate;n=function(e,t){const[n]=(0,d.useState)((()=>({inputs:t,result:e()}))),o=(0,d.useRef)(),r=o.current;let a=r;return a?Boolean(t&&a.inputs&&function(e,t){if(e.length!==t.length)return!1;for(let n=0;n{o.current=a,r==n&&(n.inputs=n.result=void 0)}),[a]),a.result}((()=>({pause:r,immediate:a})),[r,a]);const{Provider:i}=mo;return d.createElement(i,{value:n},t)},mo=(uo=co,po={},Object.assign(uo,d.createContext(po)),uo.Provider._context=uo,uo.Consumer._context=uo,uo);var uo,po;co.Provider=mo.Provider,co.Consumer=mo.Consumer;const ho=()=>{const e=[],t=function(t){Rt(`${It}Directly calling start instead of using the api object is deprecated in v9 (use ".start" instead), this will be removed in later 0.X.0 versions`);const o=[];return be(e,((e,r)=>{if(Ee.und(t))o.push(e.start());else{const a=n(t,e,r);a&&o.push(e.start(a))}})),o};t.current=e,t.add=function(t){e.includes(t)||e.push(t)},t.delete=function(t){const n=e.indexOf(t);~n&&e.splice(n,1)},t.pause=function(){return be(e,(e=>e.pause(...arguments))),this},t.resume=function(){return be(e,(e=>e.resume(...arguments))),this},t.set=function(t){be(e,(e=>e.set(t)))},t.start=function(t){const n=[];return be(e,((e,o)=>{if(Ee.und(t))n.push(e.start());else{const r=this._getProps(t,e,o);r&&n.push(e.start(r))}})),n},t.stop=function(){return be(e,(e=>e.stop(...arguments))),this},t.update=function(t){return be(e,((e,n)=>e.update(this._getProps(t,e,n)))),this};const n=function(e,t,n){return Ee.fun(e)?e(n,t):e};return t._getProps=n,t};let Co;!function(e){e.MOUNT="mount",e.ENTER="enter",e.UPDATE="update",e.LEAVE="leave"}(Co||(Co={}));let go=1;function fo(e,{key:t,keys:n=t},o){if(null===n){const t=new Set;return e.map((e=>{const n=o&&o.find((n=>n.item===e&&n.phase!==Co.LEAVE&&!t.has(n)));return n?(t.add(n),n.key):go++}))}return Ee.und(n)?e:Ee.fun(n)?e.map(n):Se(n)}class yo extends Dn{constructor(e,t){super(),this.key=void 0,this.idle=!0,this.calc=void 0,this._active=new Set,this.source=e,this.calc=mt(...t);const n=this._get(),o=tn(n);Gt(this,o.create(n))}advance(e){const t=this._get();Le(t,this.get())||(Ut(this).setValue(t),this._onChange(t,this.idle)),!this.idle&&Ho(this._active)&&_o(this)}_get(){const e=Ee.arr(this.source)?this.source.map(Ct):Se(Ct(this.source));return this.calc(...e)}_start(){this.idle&&!Ho(this._active)&&(this.idle=!1,be(Yt(this),(e=>{e.done=!1})),Re.skipAnimation?(ae.batchedUpdates((()=>this.advance())),_o(this)):Be.start(this))}_attach(){let e=1;be(Se(this.source),(t=>{ht(t)&&Ht(t,this),Vn(t)&&(t.idle||this._active.add(t),e=Math.max(e,t.priority+1))})),this.priority=e,this._start()}_detach(){be(Se(this.source),(e=>{ht(e)&&_t(e,this)})),this._active.clear(),_o(this)}eventObserved(e){"change"==e.type?e.idle?this.advance():(this._active.add(e.parent),this._start()):"idle"==e.type?this._active.delete(e.parent):"priority"==e.type&&(this.priority=Se(this.source).reduce(((e,t)=>Math.max(e,(Vn(t)?t.priority:0)+1)),0))}}function wo(e){return!1!==e.idle}function Ho(e){return!e.size||Array.from(e).every(wo)}function _o(e){e.idle||(e.idle=!0,be(Yt(e),(e=>{e.done=!0})),ft(e,{type:"idle",parent:e}))}Re.assign({createStringInterpolator:At,to:(e,t)=>new yo(e,t)}),Be.advance;var vo=i(91850);function Eo(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}const Lo=["style","children","scrollTop","scrollLeft"],bo=/^--/;function ko(e,t){return null==t||"boolean"==typeof t||""===t?"":"number"!=typeof t||0===t||bo.test(e)||Mo.hasOwnProperty(e)&&Mo[e]?(""+t).trim():t+"px"}const So={};let Mo={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0};const No=["Webkit","Ms","Moz","O"];Mo=Object.keys(Mo).reduce(((e,t)=>(No.forEach((n=>e[((e,t)=>e+t.charAt(0).toUpperCase()+t.substring(1))(n,t)]=e[t])),e)),Mo);const xo=["x","y","z"],To=/^(matrix|translate|scale|rotate|skew)/,Ao=/^(translate)/,Io=/^(rotate|skew)/,Oo=(e,t)=>Ee.num(e)&&0!==e?e+t:e,Po=(e,t)=>Ee.arr(e)?e.every((e=>Po(e,t))):Ee.num(e)?e===t:parseFloat(e)===t;class Ro extends Xt{constructor(e){let{x:t,y:n,z:o}=e,r=Eo(e,xo);const a=[],i=[];(t||n||o)&&(a.push([t||0,n||0,o||0]),i.push((e=>[`translate3d(${e.map((e=>Oo(e,"px"))).join(",")})`,Po(e,0)]))),ke(r,((e,t)=>{if("transform"===t)a.push([e||""]),i.push((e=>[e,""===e]));else if(To.test(t)){if(delete r[t],Ee.und(e))return;const n=Ao.test(t)?"px":Io.test(t)?"deg":"";a.push(Se(e)),i.push("rotate3d"===t?([e,t,o,r])=>[`rotate3d(${e},${t},${o},${Oo(r,n)})`,Po(r,0)]:e=>[`${t}(${e.map((e=>Oo(e,n))).join(",")})`,Po(e,t.startsWith("scale")?1:0)])}})),a.length&&(r.transform=new Vo(a,i)),super(r)}}class Vo extends yt{constructor(e,t){super(),this._value=null,this.inputs=e,this.transforms=t}get(){return this._value||(this._value=this._get())}_get(){let e="",t=!0;return be(this.inputs,((n,o)=>{const r=Ct(n[0]),[a,i]=this.transforms[o](Ee.arr(r)?r:n.map(Ct));e+=" "+a,t=t&&i})),t?"none":e}observerAdded(e){1==e&&be(this.inputs,(e=>be(e,(e=>ht(e)&&Ht(e,this)))))}observerRemoved(e){0==e&&be(this.inputs,(e=>be(e,(e=>ht(e)&&_t(e,this)))))}eventObserved(e){"change"==e.type&&(this._value=null),ft(this,e)}}const jo=["scrollTop","scrollLeft"];Re.assign({batchedUpdates:vo.unstable_batchedUpdates,createStringInterpolator:At,colors:{transparent:0,aliceblue:4042850303,antiquewhite:4209760255,aqua:16777215,aquamarine:2147472639,azure:4043309055,beige:4126530815,bisque:4293182719,black:255,blanchedalmond:4293643775,blue:65535,blueviolet:2318131967,brown:2771004159,burlywood:3736635391,burntsienna:3934150143,cadetblue:1604231423,chartreuse:2147418367,chocolate:3530104575,coral:4286533887,cornflowerblue:1687547391,cornsilk:4294499583,crimson:3692313855,cyan:16777215,darkblue:35839,darkcyan:9145343,darkgoldenrod:3095792639,darkgray:2846468607,darkgreen:6553855,darkgrey:2846468607,darkkhaki:3182914559,darkmagenta:2332068863,darkolivegreen:1433087999,darkorange:4287365375,darkorchid:2570243327,darkred:2332033279,darksalmon:3918953215,darkseagreen:2411499519,darkslateblue:1211993087,darkslategray:793726975,darkslategrey:793726975,darkturquoise:13554175,darkviolet:2483082239,deeppink:4279538687,deepskyblue:12582911,dimgray:1768516095,dimgrey:1768516095,dodgerblue:512819199,firebrick:2988581631,floralwhite:4294635775,forestgreen:579543807,fuchsia:4278255615,gainsboro:3705462015,ghostwhite:4177068031,gold:4292280575,goldenrod:3668254975,gray:2155905279,green:8388863,greenyellow:2919182335,grey:2155905279,honeydew:4043305215,hotpink:4285117695,indianred:3445382399,indigo:1258324735,ivory:4294963455,khaki:4041641215,lavender:3873897215,lavenderblush:4293981695,lawngreen:2096890111,lemonchiffon:4294626815,lightblue:2916673279,lightcoral:4034953471,lightcyan:3774873599,lightgoldenrodyellow:4210742015,lightgray:3553874943,lightgreen:2431553791,lightgrey:3553874943,lightpink:4290167295,lightsalmon:4288707327,lightseagreen:548580095,lightskyblue:2278488831,lightslategray:2005441023,lightslategrey:2005441023,lightsteelblue:2965692159,lightyellow:4294959359,lime:16711935,limegreen:852308735,linen:4210091775,magenta:4278255615,maroon:2147483903,mediumaquamarine:1724754687,mediumblue:52735,mediumorchid:3126187007,mediumpurple:2473647103,mediumseagreen:1018393087,mediumslateblue:2070474495,mediumspringgreen:16423679,mediumturquoise:1221709055,mediumvioletred:3340076543,midnightblue:421097727,mintcream:4127193855,mistyrose:4293190143,moccasin:4293178879,navajowhite:4292783615,navy:33023,oldlace:4260751103,olive:2155872511,olivedrab:1804477439,orange:4289003775,orangered:4282712319,orchid:3664828159,palegoldenrod:4008225535,palegreen:2566625535,paleturquoise:2951671551,palevioletred:3681588223,papayawhip:4293907967,peachpuff:4292524543,peru:3448061951,pink:4290825215,plum:3718307327,powderblue:2967529215,purple:2147516671,rebeccapurple:1714657791,red:4278190335,rosybrown:3163525119,royalblue:1097458175,saddlebrown:2336560127,salmon:4202722047,sandybrown:4104413439,seagreen:780883967,seashell:4294307583,sienna:2689740287,silver:3233857791,skyblue:2278484991,slateblue:1784335871,slategray:1887473919,slategrey:1887473919,snow:4294638335,springgreen:16744447,steelblue:1182971135,tan:3535047935,teal:8421631,thistle:3636451583,tomato:4284696575,turquoise:1088475391,violet:4001558271,wheat:4125012991,white:4294967295,whitesmoke:4126537215,yellow:4294902015,yellowgreen:2597139199}});const Do=((e,{applyAnimatedValues:t=(()=>!1),createAnimatedStyle:n=(e=>new Xt(e)),getComponentProps:o=(e=>e)}={})=>{const r={applyAnimatedValues:t,createAnimatedStyle:n,getComponentProps:o},a=e=>{const t=sn(e)||"Anonymous";return(e=Ee.str(e)?a[e]||(a[e]=on(e,r)):e[an]||(e[an]=on(e,r))).displayName=`Animated(${t})`,e};return ke(e,((t,n)=>{Ee.arr(e)&&(n=sn(t)),a[n]=a(t)})),{animated:a}})(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"],{applyAnimatedValues:function(e,t){if(!e.nodeType||!e.setAttribute)return!1;const n="filter"===e.nodeName||e.parentNode&&"filter"===e.parentNode.nodeName,o=t,{style:r,children:a,scrollTop:i,scrollLeft:s}=o,l=Eo(o,Lo),c=Object.values(l),m=Object.keys(l).map((t=>n||e.hasAttribute(t)?t:So[t]||(So[t]=t.replace(/([A-Z])/g,(e=>"-"+e.toLowerCase())))));void 0!==a&&(e.textContent=a);for(let t in r)if(r.hasOwnProperty(t)){const n=ko(t,r[t]);bo.test(t)?e.style.setProperty(t,n):e.style[t]=n}m.forEach(((t,n)=>{e.setAttribute(t,c[n])})),void 0!==i&&(e.scrollTop=i),void 0!==s&&(e.scrollLeft=s)},createAnimatedStyle:e=>new Ro(e),getComponentProps:e=>Eo(e,jo)}),Zo=Do.animated;var Bo=i(25158);i(12560);const Fo=(0,e.forwardRef)((function(t,n){let{className:o,children:r,spokenMessage:i=r,politeness:s="polite",actions:l=[],onRemove:c=C.noop,icon:m=null,explicitDismiss:u=!1,onDismiss:d=null,__unstableHTML:p=!1}=t;function h(e){e&&e.preventDefault&&e.preventDefault(),d(),c()}d=d||C.noop,function(t,n){const o="string"==typeof t?t:(0,e.renderToString)(t);(0,e.useEffect)((()=>{o&&(0,Bo.speak)(o,n)}),[o,n])}(i,s),(0,e.useEffect)((()=>{const e=setTimeout((()=>{u||(d(),c())}),1e4);return()=>clearTimeout(e)}),[u,d,c]);const g=G()(o,"components-snackbar",{"components-snackbar-explicit-dismiss":!!u});l&&l.length>1&&("undefined"!=typeof process&&process.env,l=[l[0]]);const f=G()("components-snackbar__content",{"components-snackbar__content-with-icon":!!m});return!0===p&&(r=(0,e.createElement)(e.RawHTML,null,r)),(0,e.createElement)("div",{ref:n,className:g,onClick:u?C.noop:h,tabIndex:"0",role:u?"":"button",onKeyPress:u?C.noop:h,"aria-label":u?"":(0,v.__)("Dismiss this notice","woocommerce")},(0,e.createElement)("div",{className:f},m&&(0,e.createElement)("div",{className:"components-snackbar__icon"},m),r,l.map(((t,n)=>{let{label:o,onClick:r,url:i}=t;return(0,e.createElement)(a.Button,{key:n,href:i,isTertiary:!0,onClick:e=>function(e,t){e.stopPropagation(),c(),t&&t(e)}(e,r),className:"components-snackbar__action"},o)})),u&&(0,e.createElement)("span",{role:"button","aria-label":"Dismiss this notice",tabIndex:"0",className:"components-snackbar__dismiss-button",onClick:h,onKeyPress:h},"✕")))})),zo=function(t){let{notices:n,className:o,children:r,onRemove:a=C.noop,onRemove2:i=C.noop}=t;const s=(0,l.useReducedMotion)(),[c]=(0,e.useState)((()=>new WeakMap)),m=function(e,t,n){const o=Ee.fun(t)&&t,{reset:r,sort:a,trail:i=0,expires:s=!0,exitBeforeEnter:l=!1,onDestroyed:c,ref:m,config:u}=o?o():t,p=(0,d.useMemo)((()=>o||3==arguments.length?ho():void 0),[]),h=Se(e),C=[],g=(0,d.useRef)(null),f=r?null:g.current;zt((()=>{g.current=C})),jt((()=>()=>{be(g.current,(e=>{e.expired&&clearTimeout(e.expirationId),_n(e.ctrl,p),e.ctrl.stop(!0)}))}));const y=fo(h,o?o():t,f),w=r&&g.current||[];zt((()=>be(w,(({ctrl:e,item:t,key:n})=>{_n(e,p),cn(c,t,n)}))));const H=[];if(f&&be(f,((e,t)=>{e.expired?(clearTimeout(e.expirationId),w.push(e)):~(t=H[t]=y.indexOf(e.key))&&(C[t]=e)})),be(h,((e,t)=>{C[t]||(C[t]={key:y[t],item:e,phase:Co.MOUNT,ctrl:new no},C[t].ctrl.item=e)})),H.length){let e=-1;const{leave:n}=o?o():t;be(H,((t,o)=>{const r=f[o];~t?(e=C.indexOf(r),C[e]=ln({},r,{item:h[t]})):n&&C.splice(++e,0,r)}))}Ee.fun(a)&&C.sort(((e,t)=>a(e.item,t.item)));let _=-i;const v=Zt(),E=hn(t),L=new Map,b=(0,d.useRef)(new Map),k=(0,d.useRef)(!1);be(C,((e,n)=>{const r=e.key,a=e.phase,c=o?o():t;let d,p,h=cn(c.delay||0,r);if(a==Co.MOUNT)d=c.enter,p=Co.ENTER;else{const e=y.indexOf(r)<0;if(a!=Co.LEAVE)if(e)d=c.leave,p=Co.LEAVE;else{if(!(d=c.update))return;p=Co.UPDATE}else{if(e)return;d=c.enter,p=Co.ENTER}}if(d=cn(d,e.item,n),d=Ee.obj(d)?fn(d):{to:d},!d.config){const t=u||E.config;d.config=cn(t,e.item,n,p)}_+=i;const C=ln({},E,{delay:h+_,ref:m,immediate:c.immediate,reset:!1},d);if(p==Co.ENTER&&Ee.und(C.from)){const r=o?o():t,a=Ee.und(r.initial)||f?r.from:r.initial;C.from=cn(a,e.item,n)}const{onResolve:w}=C;C.onResolve=e=>{cn(w,e);const t=g.current,n=t.find((e=>e.key===r));if(n&&(!e.cancelled||n.phase==Co.UPDATE)&&n.ctrl.idle){const e=t.every((e=>e.ctrl.idle));if(n.phase==Co.LEAVE){const t=cn(s,n.item);if(!1!==t){const o=!0===t?0:t;if(n.expired=!0,!e&&o>0)return void(o<=2147483647&&(n.expirationId=setTimeout(v,o)))}}e&&t.some((e=>e.expired))&&(b.current.delete(n),l&&(k.current=!0),v())}};const H=ro(e.ctrl,C);p===Co.LEAVE&&l?b.current.set(e,{phase:p,springs:H,payload:C}):L.set(e,{phase:p,springs:H,payload:C})}));const S=(0,d.useContext)(co),M=Ft(S),N=S!==M&&wn(S);zt((()=>{N&&be(C,(e=>{e.ctrl.start({default:S})}))}),[S]),be(L,((e,t)=>{if(b.current.size){const e=C.findIndex((e=>e.key===t.key));C.splice(e,1)}})),zt((()=>{be(b.current.size?b.current:L,(({phase:e,payload:t},n)=>{const{ctrl:o}=n;n.phase=e,null==p||p.add(o),N&&e==Co.ENTER&&o.start({default:S}),t&&(vn(o,t.ref),o.ref&&!k.current?o.update(t):(o.start(t),k.current&&(k.current=!1)))}))}),r?void 0:n);const x=e=>d.createElement(d.Fragment,null,C.map(((t,n)=>{const{springs:o}=L.get(t)||t.ctrl,r=e(ln({},o),t.item,t,n);return r&&r.type?d.createElement(r.type,ln({},r.props,{key:Ee.str(t.key)||Ee.num(t.key)?t.key:t.ctrl.id,ref:r.ref})):r})));return p?[x,p]:x}(n,{keys:e=>e.id,from:{opacity:0,height:0},enter:e=>async t=>await t({opacity:1,height:c.get(e).offsetHeight}),leave:()=>async e=>{await e({opacity:0}),await e({height:0})},immediate:s});o=G()("components-snackbar-list",o);const u=e=>()=>{a(e.id),i(e.id)};return(0,e.createElement)("div",{className:o},r,m(((t,n)=>(0,e.createElement)(Zo.div,{style:t},(0,e.createElement)("div",{className:"components-snackbar-list__notice-container",ref:e=>e&&c.set(n,e)},(0,e.createElement)(Fo,(0,oe.Z)({},(0,C.omit)(n,["content"]),{onRemove:u(n)}),n.content))))))},Wo="woocommerce_admin_transient_notices_queue";function Uo(t){const{removeNotice:n}=(0,c.useDispatch)("core/notices"),{createNotice:r,removeNotice:a}=(0,c.useDispatch)("core/notices2"),{updateOptions:i}=(0,c.useDispatch)(o.OPTIONS_STORE_NAME),{currentUser:s={},notices:l=[],notices2:m=[],noticesQueue:u={}}=(0,c.useSelect)((e=>({currentUser:e(o.USER_STORE_NAME).getCurrentUser(),notices:e("core/notices").getNotices(),notices2:e("core/notices2").getNotices(),noticesQueue:e(o.OPTIONS_STORE_NAME).getOption(Wo)})));(0,e.useEffect)((()=>{Object.values(u).filter((e=>e.user_id===s.id||!e.user_id)).forEach((e=>{const t=(0,_.applyFilters)("woocommerce_admin_queued_notice_filter",e);r(t.status,t.content,{onDismiss:()=>{(e=>{const t={...u};delete t[e],i({[Wo]:t})})(t.id)},...t.options||{}})}))}),[]);const{className:d}=t,p=G()("woocommerce-transient-notices","components-notices__snackbar",d),h=l.concat(m);return(0,e.createElement)(w.WooFooterItem,null,(0,e.createElement)(zo,{notices:h,className:p,onRemove:n,onRemove2:a}))}Uo.propTypes={className:h().string,notices:h().array};var Go=i(23374),Yo=i(91250),Qo=i(12532);const qo=()=>(0,e.createElement)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("mask",{id:"mask0_2915:6733",maskUnits:"userSpaceOnUse",x:"4",y:"3",width:"16",height:"18"},(0,e.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.5 3.5H13.5L13.9 5.5H19.5V15.5H12.5L12.1 13.5H6.5V20.5H4.5V3.5ZM12.26 7.5L11.86 5.5H6.5V11.5H13.74L14.14 13.5H17.5V7.5H12.26Z",fill:"white"})),(0,e.createElement)("g",{mask:"url(#mask0_2915:6733)"},(0,e.createElement)("rect",{width:"24",height:"24",fill:"#50575E"})));var Jo=i(23322);const Ko={page:1,per_page:o.QUERY_DEFAULTS.pageSize,status:"unactioned",type:o.QUERY_DEFAULTS.noteTypes,orderby:"date",order:"desc"};function Xo(e){const{getNotes:t,getNotesError:n,isResolving:r}=e(o.NOTES_STORE_NAME),{getCurrentUser:a}=e(o.USER_STORE_NAME),i=a(),s=parseInt(i&&i.woocommerce_meta&&i.woocommerce_meta.activity_panel_inbox_last_read,10);if(!s)return null;t(Ko);const l=Boolean(n("getNotes",[Ko])),c=r("getNotes",[Ko]);if(l||c)return null;const m=t(Ko);return(0,Jo.fs)(m,s)>0}const $o=t=>{let{icon:n,title:o,name:r,unread:i,selected:s,isPanelOpen:l,onTabClick:c}=t;const m=G()("woocommerce-layout__activity-panel-tab",{"is-active":l&&s,"has-unread":i}),u=`activity-panel-tab-${r}`;return(0,e.createElement)(a.Button,{role:"tab",className:m,"aria-selected":s,"aria-controls":`activity-panel-${r}`,key:u,id:u,onClick:()=>{c(r)}},n,o," ",i&&(0,e.createElement)("span",{className:"screen-reader-text"},(0,v.__)("unread activity","woocommerce")))},er=t=>{let{tabs:n,onTabClick:o,selectedTab:r,tabOpen:i=!1}=t;const[{tabOpen:s,currentTab:l},c]=(0,e.useState)({tabOpen:i,currentTab:r});return(0,e.useEffect)((()=>{c({tabOpen:i,currentTab:r})}),[i,r]),(0,e.createElement)(a.NavigableMenu,{role:"tablist",orientation:"horizontal",className:"woocommerce-layout__activity-panel-tabs"},n&&n.map(((t,n)=>{if(t.component){const{component:o,options:r}=t;return(0,e.createElement)(o,(0,oe.Z)({key:n},r))}return(0,e.createElement)($o,(0,oe.Z)({key:n,index:n,isPanelOpen:s,selected:l===t.name},t,{onTabClick:()=>{const e=l!==t.name&&""!==l||!s;e&&l===t.name||(0,f.recordEvent)("activity_panel_open",{tab:t.name}),c({tabOpen:e,currentTab:t.name}),o(t,e)}}))})))},tr=t=>{let{setupTasksComplete:n,setupCompletePercent:o}=t;return(0,e.createElement)("svg",{className:"woocommerce-layout__activity-panel-tab-icon setup-progress",viewBox:"0 0 25 25"},(0,e.createElement)("path",{className:"setup-progress-ring",d:"M 12.476 23.237 C 18.369 23.237 23.146 18.414 23.146 12.464 C 23.146 6.512 18.369 1.687 12.476 1.687 C 6.581 1.687 1.803 6.512 1.803 12.464 C 1.803 18.414 6.581 23.237 12.476 23.237 Z"}),(0,e.createElement)("path",{className:"setup-progress-slice",transform:"matrix(-0.034188, 0, 0, 0.034134, 38.373184, -8.278505)",d:"M 522 607 A 237 237 0 0 1 759 370 L 759 607 Z",fill:n>0?"currentColor":"white"}),(0,e.createElement)("path",{className:"setup-progress-slice",transform:"matrix(-0.034188, 0, 0, -0.034134, 38.368454, 33.13131)",d:"M 522 607 A 237 237 0 0 1 759 370 L 759 607 Z",fill:o>=50?"currentColor":"white"}),(0,e.createElement)("path",{className:"setup-progress-slice",transform:"matrix(0.034188, 0, 0, -0.034134, -13.500516, 33.133827)",d:"M 522 607 A 237 237 0 0 1 759 370 L 759 607 Z",fill:o>=75?"currentColor":"white"}),(0,e.createElement)("path",{className:"setup-progress-slice",transform:"matrix(0.034188, 0, 0, 0.034134, -13.495783, -8.281025)",d:"M 522 607 A 237 237 0 0 1 759 370 L 759 607 Z",fill:"white"}))};var nr=i(92342),or=i(70261);const rr="highlight-tooltip__show";function ar(t){let{title:n,closeButtonText:o,content:r,show:i=!0,id:s,onClose:l,delay:c,onShow:m=C.noop,useAnchor:u=!1}=t;const[d,p]=(0,e.useState)(c>0?null:i),[h,g]=(0,e.useState)(null),[f,y]=(0,e.useState)(null),w=e=>{const t=document.getElementById(s);t&&u&&y(t.getBoundingClientRect()),e&&e.classList.add(rr),p(!0),m()},H=e=>{let t=null;return c>0?t=setTimeout((()=>{t=null,w(e)}),c):d||w(e),t};function _(){if(u){const e=document.getElementById(s);y(e.getBoundingClientRect())}}(0,e.useEffect)((()=>{const e=document.getElementById(s);let t,n;e&&!h&&(u?(n=document.createElement("div"),document.body.appendChild(n)):n=e.parentElement,t=document.createElement("div"),t.classList.add("highlight-tooltip__container"),n.appendChild(t),g(t));const o=H(t);return()=>{if(t){const e=t.parentElement;e.removeChild(t),u&&e.remove()}o&&clearTimeout(o)}}),[]),(0,e.useEffect)((()=>{!d&&h&&h.classList.remove(rr)}),[d]),(0,e.useEffect)((()=>{i!==d&&null!==d&&h&&(p(i),i?h&&H(h):h.classList.remove(rr))}),[i]),(0,e.useLayoutEffect)((()=>(window.addEventListener("resize",_),()=>window.removeEventListener("resize",_))),[]);const E=()=>{p(!1),l&&l()};return h?(0,e.createPortal)((0,e.createElement)("div",{className:"highlight-tooltip__portal"},d?(0,e.createElement)(e.Fragment,null,(0,e.createElement)(a.IsolatedEventContainer,{className:"highlight-tooltip__overlay"}),(0,e.createElement)(a.Popover,{className:"highlight-tooltip__popover",noArrow:!1,anchorRect:f,focusOnMount:"container"},(0,e.createElement)(a.Card,{size:"medium"},(0,e.createElement)(a.CardHeader,null,n,(0,e.createElement)(a.Button,{isSmall:!0,onClick:E,icon:or.Z})),(0,e.createElement)(a.CardBody,null,r||null),(0,e.createElement)(a.CardFooter,{isBorderless:!0},(0,e.createElement)(a.Button,{size:"small",isPrimary:!0,onClick:E},o||(0,v.__)("Close","woocommerce")))))):null),h):null}ar.propTypes={id:h().string.isRequired,title:h().string.isRequired,closeButtonText:h().string.isRequired,content:h().oneOfType([h().string,h().node]),show:h().bool,onClose:h().func,delay:h().number,onShow:h().func,useAnchor:h().bool};var ir=i(45904);const sr=["button","submit"];const lr=t=>{let{content:n,isPanelOpen:o,isPanelSwitching:r,currentTab:a,tab:i,closePanel:s,clearPanel:l}=t;const c="woocommerce-layout__activity-panel-wrapper",m=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"firstElement";const n=(0,e.useRef)(t);return(0,e.useEffect)((()=>{n.current=t}),[t]),(0,e.useCallback)((e=>{if(!e||!1===n.current)return;if(e.contains(e.ownerDocument.activeElement))return;let t=e;if("firstElement"===n.current){const n=ir.focus.tabbable.find(e)[0];n&&(t=n)}t.focus()}),[])}(),u=(0,e.useRef)(null),d=function(t){const n=(0,e.useRef)(t);(0,e.useEffect)((()=>{n.current=t}),[t]);const o=(0,e.useRef)(!1),r=(0,e.useRef)(),a=(0,e.useCallback)((()=>{clearTimeout(r.current)}),[]);(0,e.useEffect)((()=>()=>a()),[]),(0,e.useEffect)((()=>{t||a()}),[t,a]);const i=(0,e.useCallback)((e=>{const{type:t,target:n}=e;(0,C.includes)(["mouseup","touchend"],t)?o.current=!1:function(e){if(!(e instanceof window.HTMLElement))return!1;switch(e.nodeName){case"A":case"BUTTON":return!0;case"INPUT":return(0,C.includes)(sr,e.type)}return!1}(n)&&(o.current=!0)}),[]),s=(0,e.useCallback)((e=>{e.persist(),o.current||(r.current=setTimeout((()=>{document.hasFocus()?"function"==typeof n.current&&n.current(e):e.preventDefault()}),0))}),[]);return{onFocus:a,onMouseDown:i,onMouseUp:i,onTouchStart:i,onTouchEnd:i,onBlur:s}}((e=>{const t=e.relatedTarget&&(e.relatedTarget.closest(".woocommerce-inbox-dismiss-confirmation_modal")||e.relatedTarget.closest(".components-snackbar__action"));o&&!t&&s()})),p=(0,e.useCallback)((e=>{u.current=e,m(e)}),[]);if(!i)return(0,e.createElement)("div",{className:c});if(!n)return null;const h=G()(c,{"is-open":o,"is-switching":r});return(0,e.createElement)("div",(0,oe.Z)({className:h,tabIndex:0,role:"tabpanel","aria-label":i.title,onTransitionEnd:e=>{e&&"transform"===e.propertyName&&(l(),u.current&&o&&i&&m(u.current))}},d,{ref:p}),(0,e.createElement)("div",{className:"woocommerce-layout__activity-panel-content",key:"activity-panel-"+a,id:"activity-panel-"+a},(0,e.createElement)(e.Suspense,{fallback:(0,e.createElement)(E.Spinner,null)},n)))};var cr=i(22983),mr=i(14138),ur=i(30554),dr=i(34374),pr=i(74693);const hr=(0,e.lazy)((()=>Promise.all([i.e(9529),i.e(6732)]).then(i.bind(i,37015)))),Cr=(0,e.lazy)((()=>Promise.all([i.e(7846),i.e(8851)]).then(i.bind(i,72122)))),gr=(0,e.lazy)((()=>i.e(7844).then(i.bind(i,28029)))),fr=t=>{let{isEmbedded:a,query:i}=t;const[s,l]=(0,e.useState)(""),[m,u]=(0,e.useState)(!1),[d,p]=(0,e.useState)(!1),[h,y]=(0,e.useState)(!1),{fills:H}=(0,q.useSlot)(ur.$Q),_=Boolean(null==H?void 0:H.length),{updateUserPreferences:L,...b}=(0,o.useUserPreferences)(),k=(0,X.useActiveSetupTasklist)(),S=()=>{u(!0),p(!1)},M=()=>{d||(u(!1),y(!1),l(""))};(0,e.useEffect)((()=>(0,g.addHistoryListener)((()=>{S(),M()}))),[]);const N=(0,w.useExtendLayout)("activity-panel"),x=(e,t)=>{let n={};if("wc-admin"===i.page&&"appearance"===i.task){var r,a,s;const{getTaskLists:i}=e(o.ONBOARDING_STORE_NAME),l=i().reduce(((e,t)=>[...e,...t.tasks]),[]).find((e=>"appearance"===e.id));n={set_notice:t("woocommerce_demo_store_notice")?"Y":"N",create_homepage:!0===(null==l||null===(r=l.additionalData)||void 0===r?void 0:r.hasHomepage)?"Y":"N",upload_logo:null!=l&&null!==(a=l.additionalData)&&void 0!==a&&null!==(s=a.themeMods)&&void 0!==s&&s.custom_logo?"Y":"N"}}return n};function T(e,t,n){const o=(0,cr.sg)(e),r=!!t&&(0,cr.xX)(e,o)>0,a=!!t&&(0,mr.Vh)(e),i=!!t&&(0,cr.ae)(e);return n>0||r||a||i||_}const{hasUnreadNotes:A,hasAbbreviatedNotifications:I,isCompletedTask:O,thingsToDoNextCount:P,requestingTaskListOptions:R,setupTaskListComplete:V,setupTaskListHidden:j,setupTasksCompleteCount:D,setupTasksCount:Z,previewSiteBtnTrackData:B}=(0,c.useSelect)((e=>{var t,n;const{getOption:r}=e(o.OPTIONS_STORE_NAME),{getTask:a,getTaskList:s,hasFinishedResolution:l}=e(o.ONBOARDING_STORE_NAME),c=k&&s(k),m=null!==(t=null==c?void 0:c.isHidden)&&void 0!==t&&t,u=(0,o.getVisibleTasks)((null==c?void 0:c.tasks)||[]),d=(p=s("extended"))&&p.tasks.length&&!p.isHidden?p.tasks.filter((e=>e.canView&&!e.isComplete&&!e.isDismissed)).length:0;var p;return{hasUnreadNotes:Xo(e),hasAbbreviatedNotifications:T(e,m,d),thingsToDoNextCount:d,requestingTaskListOptions:!l("getTaskLists"),setupTaskListComplete:null==c?void 0:c.isComplete,setupTaskListHidden:m,setupTasksCount:u.length,setupTasksCompleteCount:u.filter((e=>e.isComplete)).length,isCompletedTask:Boolean(i.task&&(null===(n=a(i.task))||void 0===n?void 0:n.isComplete)),previewSiteBtnTrackData:x(e,r)}})),{showCesModal:F}=(0,c.useDispatch)(n.STORE_KEY),{currentUserCan:z}=(0,o.useUser)(),W=()=>"wc-admin"===i.page&&!i.path,U=()=>{const[e]=function(e){var t,n;const o=null!=e&&e.startsWith("/")?1:0,r=null!=e&&e.endsWith("/")?-1:void 0;return null!==(t=null==e||null===(n=e.slice(o,r))||void 0===n?void 0:n.split("/"))&&void 0!==t?t:[]}(i.path);return"add-product"===e||"product"===e},G=()=>{const e=(0,dr.DP)(window.location.search);return a&&/post-new\.php$/.test(window.location.pathname)&&"product"===(null==e?void 0:e.post_type)},Y=()=>i.task&&!i.path&&(!0===R||!1===j&&!1===V),Q=()=>{const t={name:"activity",title:(0,v.__)("Activity","woocommerce"),icon:(0,e.createElement)(qo,null),unread:A||I,visible:(a||!W())&&!Y()&&!U()},n={name:"feedback",title:(0,v.__)("Feedback","woocommerce"),icon:(0,e.createElement)(pr.A,null),onClick:()=>{l("feedback"),p(!0),F({action:"product_feedback",title:(0,v.__)("How's your experience with the product editor?","woocommerce"),firstQuestion:(0,v.__)("The product editing screen is easy to use","woocommerce"),secondQuestion:(0,v.__)("The product editing screen's functionality meets my needs","woocommerce")},{onRecordScore:()=>{l(""),p(!1)},onCloseModal:()=>{l(""),p(!1)}},{type:"snackbar",icon:(0,e.createElement)("span",null,"🌟")})},visible:G()},o={name:"setup",title:(0,v.__)("Finish setup","woocommerce"),icon:(0,e.createElement)(tr,{setupTasksComplete:D,setupCompletePercent:Math.ceil(D/Z*100)}),visible:z("manage_woocommerce")&&!R&&!V&&!j&&!W()&&!U()},s={name:"help",title:(0,v.__)("Help","woocommerce"),icon:(0,e.createElement)(Go.Z,{icon:Yo.Z}),visible:z("manage_woocommerce")&&(W()&&!a||Y())},c={component:nr.T,visible:z("manage_woocommerce")&&!a&&W()&&!Y()};return[t,n,o,{name:"previewSite",title:(0,v.__)("Preview site","woocommerce"),icon:(0,e.createElement)(Go.Z,{icon:Qo.Z}),visible:W()&&"appearance"===i.task,onClick:()=>(window.open((0,r.O3)("siteUrl")),(0,f.recordEvent)("wcadmin_tasklist_previewsite",B),null)},{name:"previewStore",title:(0,v.__)("Preview store","woocommerce"),icon:(0,e.createElement)(Go.Z,{icon:Qo.Z}),visible:W()&&"appearance"!==i.task,onClick:()=>(window.open((0,r.O3)("shopUrl")),(0,f.recordEvent)("wcadmin_previewstore_click"),null)},c,s].filter((e=>e.visible))},J=Q(),K=(0,C.uniqueId)("activity-panel-header_"),$=(()=>{const{task:e}=i,t=b&&b.task_list_tracked_started_tasks,n=b&&b.help_panel_highlight_shown;return!(!(e&&"yes"!==n&&(t||{})[e]>1)||O)})();return(0,e.createElement)(w.LayoutContextProvider,{value:N},(0,e.createElement)("div",null,(0,e.createElement)(E.H,{id:K,className:"screen-reader-text"},(0,v.__)("Store Activity","woocommerce")),(0,e.createElement)(E.Section,{component:"aside",id:"woocommerce-activity-panel",className:"woocommerce-layout__activity-panel","aria-labelledby":K},(0,e.createElement)(er,{tabs:J,tabOpen:d,selectedTab:s,onTabClick:(e,t)=>{e.onClick?e.onClick():((e,t)=>{let{name:n}=e;const o=n!==s&&""!==s&&t&&d;m||(l(n),p(t),y(o))})(e,t)}}),(0,e.createElement)(lr,{currentTab:!0,isPanelOpen:d,isPanelSwitching:h,tab:(0,C.find)(Q(),{name:s}),content:(t=>{const{task:n}=i;switch(t){case"activity":return(0,e.createElement)(Cr,{hasAbbreviatedNotifications:I,thingsToDoNextCount:P});case"help":return(0,e.createElement)(hr,{taskName:n});case"setup":return(0,e.createElement)(gr,{query:i});default:return null}})(s),closePanel:()=>S(),clearPanel:()=>M()})),$?(0,e.createElement)(ar,{delay:1e3,useAnchor:!0,title:(0,v.__)("We're here for help","woocommerce"),content:(0,v.__)("If you have any questions, feel free to explore the WooCommerce docs listed here.","woocommerce"),closeButtonText:(0,v.__)("Got it","woocommerce"),id:"activity-panel-tab-help",onClose:()=>((0,f.recordEvent)("help_tooltip_click"),void(b&&L&&L({help_panel_highlight_shown:"yes"}))),onShow:()=>(0,f.recordEvent)("help_tooltip_view")}):null))};fr.defaultProps={getHistory:g.getHistory};const yr=fr;(0,y.registerPlugin)("activity-panel-header-item",{render:()=>(0,e.createElement)(w.WooHeaderItem,{order:20},(t=>{let{isEmbedded:n,query:o}=t;return window.wcAdminFeatures["activity-panels"]?(0,e.createElement)(yr,{isEmbedded:n,query:o}):null})),scope:"woocommerce-admin"});var wr=i(46290);const Hr="android",_r=()=>(0,e.createElement)("svg",{width:"37",height:"37",viewBox:"0 0 92 92",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("rect",{width:"92",height:"92",rx:"21.3953",fill:"#7F54B3"}),(0,e.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M72.5937 28.043H19.8094C16.4781 28.0459 13.7783 30.7705 13.7754 34.1324V54.4501C13.7783 57.812 16.4781 60.5366 19.8094 60.5395H44.8229L56.2573 66.9607L53.6672 60.5395H72.599C74.2009 60.5402 75.7374 59.8983 76.8702 58.7552C78.0029 57.612 78.639 56.0614 78.6383 54.4447V34.1324C78.6376 32.5157 78.0002 30.9657 76.8664 29.8235C75.7327 28.6814 74.1956 28.0408 72.5937 28.043ZM19.1057 32.4208C18.4658 32.4324 17.8646 32.7359 17.467 33.2482C17.0888 33.7635 16.9404 34.4175 17.058 35.0502C18.5962 45.0986 20.0338 51.8757 21.371 55.3816C21.8779 56.658 22.4896 57.2703 23.2063 57.2185C24.3075 57.1489 25.6263 55.5968 27.1627 52.5621C27.9964 50.8412 29.2602 48.2662 30.9539 44.837C32.3785 49.88 34.309 53.6787 36.7456 56.2331C37.4291 56.9436 38.1204 57.2748 38.8195 57.2266C39.4185 57.1931 39.953 56.8315 40.217 56.2813C40.4753 55.7358 40.5806 55.1278 40.5211 54.5248C40.3516 52.0703 40.5919 48.667 41.2421 44.3149C41.9081 39.8057 42.7523 36.5818 43.7749 34.6432C43.9822 34.2526 44.0733 33.8087 44.037 33.366C44.0039 32.7587 43.7116 32.1969 43.2374 31.829C42.7745 31.4367 42.1799 31.2446 41.5803 31.2935C40.8334 31.3325 40.1682 31.7885 39.8499 32.4797C38.2331 35.5019 37.0812 40.4109 36.3943 47.2068C35.2823 44.2394 34.4509 41.1703 33.9114 38.0412C33.623 36.4613 32.9037 35.7125 31.7536 35.7946C30.9592 35.8589 30.3063 36.3944 29.7819 37.4012L24.0348 48.5643C23.0997 44.6692 22.2205 39.9289 21.3972 34.3433C21.1997 32.9652 20.4358 32.3244 19.1057 32.4208ZM69.9089 34.6877C71.6969 35.0381 73.2407 36.2 74.1186 37.8559C74.9693 39.3247 75.3946 41.1161 75.3946 43.23C75.4148 45.9567 74.7062 48.6357 73.3477 50.9687C71.7778 53.7023 69.7195 55.0691 67.1727 55.0691C66.6933 55.0668 66.2153 55.0128 65.7467 54.9078C63.9584 54.5581 62.4143 53.396 61.5371 51.7396C60.6864 50.2452 60.261 48.4411 60.261 46.3272C60.2357 43.6127 60.945 40.9454 62.3079 38.6295C63.9023 35.8959 65.9607 34.5291 68.4829 34.5291C68.9623 34.5304 69.4402 34.5836 69.9089 34.6877ZM68.7937 49.4848C69.7707 48.5773 70.4399 47.2269 70.8012 45.4337V45.4419C70.9315 44.7826 70.9959 44.1112 70.9933 43.4382C70.986 42.5849 70.8291 41.74 70.5302 40.9452C70.1443 39.901 69.6304 39.3124 68.9884 39.1793C68.0378 38.9643 67.1239 39.5256 66.2469 40.8632C65.5812 41.8393 65.109 42.9432 64.8577 44.1106C64.7276 44.7708 64.6632 45.4432 64.6657 46.1171C64.6739 46.9677 64.8308 47.8096 65.1287 48.6019C65.5146 49.6388 66.0294 50.2274 66.6731 50.3678C67.3169 50.5081 68.0237 50.2138 68.7937 49.4848ZM57.9079 37.8559C57.0291 36.2008 55.4854 35.0392 53.6976 34.6877C53.2279 34.5837 52.749 34.5306 52.2687 34.5291C49.7443 34.5291 47.6856 35.8959 46.0927 38.6295C44.7295 40.9454 44.0201 43.6127 44.0454 46.3272C44.0454 48.4411 44.4699 50.2452 45.319 51.7396C46.1976 53.3949 47.7414 54.5566 49.5294 54.9078C49.999 55.0126 50.4779 55.0667 50.9582 55.0691C53.5055 55.0691 55.5642 53.7023 57.1343 50.9687C58.4922 48.6355 59.2001 45.9565 59.1789 43.23C59.1789 41.1161 58.7544 39.3247 57.9053 37.8559H57.9079ZM54.5903 45.4337C54.2307 47.2269 53.5614 48.5773 52.5825 49.4848C51.8115 50.2065 51.101 50.5017 50.4589 50.3678C49.8169 50.2338 49.3011 49.6461 48.9169 48.6019C48.6181 47.8097 48.4603 46.9678 48.4511 46.1171C48.4495 45.4431 48.5148 44.7707 48.6459 44.1106C48.8971 42.9432 49.3694 41.8393 50.0353 40.8632C50.9124 39.5256 51.8264 38.9643 52.7773 39.1793C53.4193 39.3124 53.9333 39.901 54.3193 40.9452C54.617 41.7404 54.7739 42.585 54.7824 43.4382C54.785 44.1112 54.7207 44.7826 54.5903 45.4419V45.4337Z",fill:"white"})),vr="wcadmin_mobile_android_banner_click",Er="woocommerce-layout__show-app-banner",Lr=t=>{let{onInstall:n,onDismiss:o}=t;const[r,i]=(0,e.useState)(!1),s=(/iPhone|iPad|iPod/i.test(window.navigator.userAgent)?"ios":/Android/i.test(window.navigator.userAgent)?Hr:"unknown")===Hr&&!r;return(0,e.useEffect)((()=>{const e=document.getElementsByClassName("woocommerce-layout")[0];return s&&e&&e.classList.add(Er),()=>{e&&e.classList.remove(Er)}}),[s]),s?(0,e.createElement)("div",{className:"woocommerce-mobile-app-banner"},(0,e.createElement)(Go.Z,{icon:(0,e.createElement)(wr.Z,{"data-testid":"dismiss-btn"}),onClick:()=>{o(),i(!0),(0,f.recordEvent)(vr,{action:"dismiss"})}}),(0,e.createElement)(_r,null),(0,e.createElement)("div",{className:"woocommerce-mobile-app-banner__description"},(0,e.createElement)("p",{className:"woocommerce-mobile-app-banner__description__text"},(0,v.__)("Run your store from anywhere","woocommerce")),(0,e.createElement)("p",{className:"woocommerce-mobile-app-banner__description__text"},(0,v.__)("Download the WooCommerce app","woocommerce"))),(0,e.createElement)(a.Button,{href:"https://play.google.com/store/apps/details?id=com.woocommerce.android",isSecondary:!0,onClick:()=>{n(),i(!0),(0,f.recordEvent)(vr,{action:"install"})}},(0,v.__)("Install","woocommerce"))):null};(0,y.registerPlugin)("mobile-banner-header-item",{render:()=>{const{updateUserPreferences:t,...n}=(0,o.useUserPreferences)(),r=()=>{t({android_app_banner_dismissed:"yes"})};return"yes"===n.android_app_banner_dismissed?null:(0,e.createElement)(w.WooHeaderItem,null,(0,e.createElement)(Lr,{onDismiss:r,onInstall:r}))},scope:"woocommerce-admin"});const br=e=>0===e.indexOf("http")?e:(0,Q.getAdminLink)(e),kr=e=>{const t=e.replace(/[-\/\\^$*+?.()|[\]{}]/gi,"\\$&"),[n,o,r]=t.split(/\\\?|#/),a=r?`(.*#${r}$)`:"";return"^"+n+(o?o.split("&").reduce(((e,t)=>`${e}(?=.*[?|&]${t}(&|$|#))`),""):"")+a},Sr=e=>{let t=null,n=0;return e.forEach((e=>{const o=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!t)return 0;const o=br(t),{href:r}=e;if(o===r)return Number.MAX_SAFE_INTEGER;const a=kr(o),i=new RegExp(n||a,"i");return(decodeURIComponent(r).match(i)||[]).length}(window.location,e.url,e.matchExpression);o>0&&o>=n&&(n=o,t=e)})),t||null},Mr=["primary","favorites","plugins","secondary"],Nr={woocommerce:{id:"woocommerce",isCategory:!0,menuId:"primary",migrate:!0,order:10,parent:"",title:"WooCommerce"}};var xr=i(70444);const Tr=(0,e.createElement)(xr.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"-2 -2 24 24"},(0,e.createElement)(xr.Path,{d:"M20 10c0-5.51-4.49-10-10-10C4.48 0 0 4.49 0 10c0 5.52 4.48 10 10 10 5.51 0 10-4.48 10-10zM7.78 15.37L4.37 6.22c.55-.02 1.17-.08 1.17-.08.5-.06.44-1.13-.06-1.11 0 0-1.45.11-2.37.11-.18 0-.37 0-.58-.01C4.12 2.69 6.87 1.11 10 1.11c2.33 0 4.45.87 6.05 2.34-.68-.11-1.65.39-1.65 1.58 0 .74.45 1.36.9 2.1.35.61.55 1.36.55 2.46 0 1.49-1.4 5-1.4 5l-3.03-8.37c.54-.02.82-.17.82-.17.5-.05.44-1.25-.06-1.22 0 0-1.44.12-2.38.12-.87 0-2.33-.12-2.33-.12-.5-.03-.56 1.2-.06 1.22l.92.08 1.26 3.41zM17.41 10c.24-.64.74-1.87.43-4.25.7 1.29 1.05 2.71 1.05 4.25 0 3.29-1.73 6.24-4.4 7.78.97-2.59 1.94-5.2 2.92-7.78zM6.1 18.09C3.12 16.65 1.11 13.53 1.11 10c0-1.3.23-2.48.72-3.59C3.25 10.3 4.67 14.2 6.1 18.09zm4.03-6.63l2.58 6.98c-.86.29-1.76.45-2.71.45-.79 0-1.57-.11-2.29-.33.81-2.38 1.62-4.74 2.42-7.1z"})),Ar=()=>{const t=(0,Q.getSetting)("siteTitle",""),n=(0,Q.getSetting)("homeUrl",""),{isScrolled:o}=K(),[r,i]=(0,e.useState)(document.body.classList.contains(!1)),s="is-wc-nav-folded",l="is-wc-nav-expanded",m=()=>{document.body.classList.add(s),document.body.classList.remove(l),i(!0)},u=()=>{document.body.classList.remove(s),document.body.classList.add(l),i(!1)},d=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document.body.clientWidth;e<=960?m():u()};(0,e.useEffect)((()=>{d();const e=[{eventName:"orientationchange",handler:e=>d(e.target.screen.availWidth)},{eventName:"resize",handler:(0,C.debounce)((()=>d()),200)}];for(const{eventName:t,handler:n}of e)window.addEventListener(t,n,!1);(0,g.addHistoryListener)((()=>d()))}),[]);let p=(0,e.createElement)(Go.Z,{size:"36px",icon:Tr});const{isRequestingSiteIcon:h,siteIconUrl:f}=(0,c.useSelect)((e=>{const{isResolving:t}=e("core/data"),{getEntityRecord:n}=e("core"),o=n("root","__unstableBase",void 0)||{};return{isRequestingSiteIcon:t("core","getEntityRecord",["root","__unstableBase",void 0]),siteIconUrl:o.siteIconUrl}}));f?p=(0,e.createElement)("img",{alt:(0,v.__)("Site Icon","woocommerce"),src:f}):h&&(p=null);const y=G()("woocommerce-navigation-header",{"is-scrolled":o});return(0,e.createElement)("div",{className:y},(0,e.createElement)(a.Button,{onClick:()=>{document.body.classList.contains(s)?u():m()},className:"woocommerce-navigation-header__site-icon","aria-label":"Fold navigation",role:"switch","aria-checked":r?"true":"false"},p),(0,e.createElement)(a.Button,{title:t,href:n,className:"woocommerce-navigation-header__site-title",as:"span"},(0,Y.decodeEntities)(t)))},Ir=(0,e.createElement)(xr.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,e.createElement)(xr.Path,{d:"M11.776 4.454a.25.25 0 01.448 0l2.069 4.192a.25.25 0 00.188.137l4.626.672a.25.25 0 01.139.426l-3.348 3.263a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.362.263l-4.138-2.175a.25.25 0 00-.232 0l-4.138 2.175a.25.25 0 01-.363-.263l.79-4.607a.25.25 0 00-.071-.222L4.754 9.881a.25.25 0 01.139-.426l4.626-.672a.25.25 0 00.188-.137l2.069-4.192z"})),Or=(0,e.createElement)(xr.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,e.createElement)(xr.Path,{fillRule:"evenodd",d:"M9.706 8.646a.25.25 0 01-.188.137l-4.626.672a.25.25 0 00-.139.427l3.348 3.262a.25.25 0 01.072.222l-.79 4.607a.25.25 0 00.362.264l4.138-2.176a.25.25 0 01.233 0l4.137 2.175a.25.25 0 00.363-.263l-.79-4.607a.25.25 0 01.072-.222l3.347-3.262a.25.25 0 00-.139-.427l-4.626-.672a.25.25 0 01-.188-.137l-2.069-4.192a.25.25 0 00-.448 0L9.706 8.646zM12 7.39l-.948 1.921a1.75 1.75 0 01-1.317.957l-2.12.308 1.534 1.495c.412.402.6.982.503 1.55l-.362 2.11 1.896-.997a1.75 1.75 0 011.629 0l1.895.997-.362-2.11a1.75 1.75 0 01.504-1.55l1.533-1.495-2.12-.308a1.75 1.75 0 01-1.317-.957L12 7.39z",clipRule:"evenodd"})),Pr=t=>{let{id:n}=t;const{favorites:r,isResolving:i}=(0,c.useSelect)((e=>({favorites:e(o.NAVIGATION_STORE_NAME).getFavorites(),isResolving:e(o.NAVIGATION_STORE_NAME).isResolving("getFavorites")}))),{addFavorite:s,removeFavorite:l}=(0,c.useDispatch)(o.NAVIGATION_STORE_NAME),m=r.includes(n);return i?null:(0,e.createElement)(a.Button,{id:"woocommerce-navigation-favorite-button",className:"woocommerce-navigation-favorite-button",isTertiary:!0,onClick:()=>{(m?l:s)(n),(0,f.recordEvent)("navigation_favorite",{id:n,action:m?"unfavorite":"favorite"})},"aria-label":m?(0,v.__)("Add this item to your favorites.","woocommerce"):(0,v.__)("Remove this item from your favorites.","woocommerce")},(0,e.createElement)(Go.Z,{icon:m?Ir:Or,className:`star-${m?"filled":"empty"}-icon`}))},Rr="woocommerce_navigation_favorites_tooltip_hidden",Vr=()=>{const{isFavoritesResolving:t,isOptionResolving:n,isTooltipHidden:r}=(0,c.useSelect)((e=>{const{getOption:t,isResolving:n}=e(o.OPTIONS_STORE_NAME);return{isFavoritesResolving:e(o.NAVIGATION_STORE_NAME).isResolving("getFavorites"),isOptionResolving:n("getOption",[Rr]),isTooltipHidden:"yes"===t(Rr)}})),{updateOptions:a}=(0,c.useDispatch)(o.OPTIONS_STORE_NAME);return t||r||n||document.body.classList.contains("is-wc-nav-folded")?null:(0,e.createElement)(ar,{delay:1e3,title:(0,v.__)("Introducing favorites","woocommerce"),content:(0,v.__)("You can now favorite your extensions to pin them in the top level of the navigation.","woocommerce"),closeButtonText:(0,v.__)("Got it","woocommerce"),id:"woocommerce-navigation-favorite-button",onClose:()=>a({[Rr]:"yes"}),useAnchor:!0})},jr=t=>{let{category:n}=t;const{id:o,menuId:r,title:a}=n,i="woocommerce-navigation-category-title";return["plugins","favorites"].includes(r)?(0,e.createElement)("span",{className:i},(0,e.createElement)("span",{className:`${i}__text`},a),(0,e.createElement)(Pr,{id:o}),(0,e.createElement)(Vr,null)):(0,e.createElement)("span",{className:i},a)},Dr=t=>{var n;let{item:o}=t;const r=(0,q.useSlot)("woocommerce_navigation_"+o.id),a=Boolean(null==r||null===(n=r.fills)||void 0===n?void 0:n.length),i=e=>{(0,f.recordEvent)("navigation_click",{menu_item:e})};return a&&!o.isCategory?(0,e.createElement)(q.NavigationItem,{key:o.id,item:o.id},(0,e.createElement)("div",{onClick:()=>i(o.id)},(0,e.createElement)(g.WooNavigationItem.Slot,{name:o.id}))):(0,e.createElement)(q.NavigationItem,{key:o.id,item:o.id,title:o.title,badge:o.badge?o.badge:null,href:o.url,navigateToMenu:!o.url&&o.id,onClick:()=>i(o.id),hideIfTargetMenuEmpty:!0})},Zr=t=>{let{category:n,onBackClick:o,pluginItems:r,primaryItems:a}=t;if(!a.length&&!r.length)return null;const i=(0,_.applyFilters)("woocommerce_navigation_root_back_label",(0,v.__)("WordPress Dashboard","woocommerce")),s=(0,_.applyFilters)("woocommerce_navigation_root_back_url",window.wcNavigation.rootBackUrl),l="woocommerce"===n.id&&s;return(0,e.createElement)(q.NavigationMenu,{title:(0,e.createElement)(jr,{category:n}),menu:n.id,parentMenu:n.parent,backButtonLabel:l?i:n.backButtonLabel||null,onBackButtonClick:l?()=>{o("woocommerce"),window.location=s}:()=>o(n.id)},!!a.length&&(0,e.createElement)(q.NavigationGroup,null,a.map((t=>(0,e.createElement)(Dr,{key:t.id,item:t})))),!!r.length&&(0,e.createElement)(q.NavigationGroup,{title:"woocommerce"===n.id?(0,v.__)("Extensions","woocommerce"):null},r.map((t=>(0,e.createElement)(Dr,{key:t.id,item:t})))))},Br=t=>{let{category:n,items:o,onBackClick:r}=t;if(!o.length)return null;const a="woocommerce"===n.id;return(0,e.createElement)(q.NavigationMenu,{className:"components-navigation__menu-secondary",title:!a&&(0,e.createElement)(jr,{category:n}),menu:n.id,parentMenu:n.parent,backButtonLabel:n.backButtonLabel||null,onBackButtonClick:a?null:()=>r(n.id)},(0,e.createElement)(q.NavigationGroup,{onBackButtonClick:()=>r(n.id)},o.map((t=>(0,e.createElement)(Dr,{key:t.id,item:t})))))},Fr=(0,o.withNavigationHydration)(window.wcNavigation)((()=>{const{menuItems:t}=(0,c.useSelect)((e=>({menuItems:e(o.NAVIGATION_STORE_NAME).getMenuItems()})));(0,e.useEffect)((()=>{document.documentElement.classList.remove("wp-toolbar"),document.body.classList.add("has-woocommerce-navigation");const e=document.getElementById("adminmenumain");e&&e.classList.add("folded")}),[]);const[n,r]=(0,e.useState)("woocommerce-home"),[a,i]=(0,e.useState)("woocommerce");(0,e.useEffect)((()=>{const e=Sr(t);return e&&n!==e&&(r(e),i(e.parent)),(0,g.addHistoryListener)((()=>{setTimeout((()=>{const e=Sr(t);e&&(r(e),i(e.parent))}),0)}))}),[t]);const{currentUserCan:s}=(0,o.useUser)(),{categories:l,items:m}=(0,e.useMemo)((()=>((e,t)=>{const n={...Nr},o=(e=>e.sort(((e,t)=>e.order===t.order?e.title.localeCompare(t.title):e.order-t.order)))(e).reduce(((e,o)=>{if(e[o.parent]||(e[o.parent]={},Mr.forEach((t=>{e[o.parent][t]=[]}))),!e[o.parent][o.menuId])return e;if(t&&o.capability&&!t(o.capability))return e;o.isCategory&&(n[o.id]=o);const r=e[o.parent][o.menuId];return r&&r.push(o),e}),{});return{items:o,categories:n}})(t,s)),[t,s]),u=(0,e.useRef)(null),d=e=>{(0,f.recordEvent)("navigation_back_click",{category:e})},p="woocommerce"===a,h=G()("woocommerce-navigation",{"is-root":p});return(0,e.createElement)("div",{className:h},(0,e.createElement)(Ar,null),(0,e.createElement)("div",{className:"woocommerce-navigation__wrapper",ref:u},(0,e.createElement)(q.Navigation,{activeItem:n?n.id:null,activeMenu:a,onActivateMenu:function(){u&&u.current&&(u.current.scrollTop=0),i(...arguments)}},Object.values(l).map((t=>{const n=m[t.id];return!!n&&[(0,e.createElement)(Zr,{key:t.id,category:t,onBackClick:d,primaryItems:[...n.primary,...n.favorites],pluginItems:n.plugins}),(0,e.createElement)(Br,{key:`secondary/${t.id}`,category:t,onBackClick:d,items:n.secondary})]})))))}));(0,y.registerPlugin)("wc-admin-navigation",{render:()=>{const{persistedQuery:t}=(0,c.useSelect)((e=>({persistedQuery:e(o.NAVIGATION_STORE_NAME).getPersistedQuery()})));if(!window.wcAdminFeatures.navigation)return null;if(!(0,g.isWCAdmin)())return(0,e.createElement)(w.WooHeaderNavigationItem,{order:-100},(0,e.createElement)(Fr,null));const n=(0,b.Z)().filter((e=>e.navArgs)),r=z().filter((e=>e.navArgs)).map((e=>"/analytics/settings"===e.path?{...e,breadcrumbs:[(0,v.__)("Analytics","woocommerce")]}:e));return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(w.WooHeaderNavigationItem,{order:-100},(0,e.createElement)(Fr,null)),r.map((n=>(0,e.createElement)(g.WooNavigationItem,{item:n.navArgs.id,key:n.navArgs.id},(0,e.createElement)(E.Link,{className:"components-button",href:(0,g.getNewPath)((0,g.pathIsExcluded)(n.path)?{}:t,n.path,{}),type:"wc-admin"},n.breadcrumbs[n.breadcrumbs.length-1])))),n.map((n=>(0,e.createElement)(g.WooNavigationItem,{item:n.navArgs.id,key:n.navArgs.id},(0,e.createElement)(E.Link,{className:"components-button",href:(0,g.getNewPath)((0,g.pathIsExcluded)(n.report)?{}:t,`/analytics/${n.report}`,{}),type:"wc-admin"},n.title)))))},scope:"woocommerce-navigation"});const zr=(0,e.lazy)((()=>i.e(8597).then(i.bind(i,4578)))),Wr=(0,e.lazy)((()=>Promise.resolve().then(i.bind(i,52260))));class Ur extends e.Component{render(){const{children:t,showStoreAlerts:n=!0,showNotices:o=!0}=this.props;return(0,e.createElement)("div",{className:"woocommerce-layout__primary",id:"woocommerce-layout__primary"},window.wcAdminFeatures["store-alerts"]&&n&&(0,e.createElement)(e.Suspense,{fallback:null},(0,e.createElement)(zr,null)),o&&(0,e.createElement)(ne,null),t)}}const Gr=e=>{let{children:t}=e;const n=(0,u.TH)(),o=(0,u.bS)(n.pathname),r={params:(0,u.UO)(),url:o.pathname};return d.Children.toArray(t).map((e=>(0,d.cloneElement)(e,{...e.props,location:n,match:r})))};function Yr(t){var o,r,i,s;let{activePlugins:l,installedPlugins:c,isEmbedded:m,isJetpackConnected:u,location:d,match:p,page:h}=t;!function(t){(0,e.useEffect)((()=>{if(!t.path)return;const e=`woocommerce-admin-page_${"/"===(n=t.path)?"_home":n.replace(/:[a-zA-Z?]+/g,(function(e){return(t=e,t.replace(/[A-Z]/g,(e=>`-${e.toLowerCase()}`))).replace(":","");var t})).replace(/\//g,"_")}`;var n;return document.body.classList.add(e),()=>{document.body.classList.remove(e)}}),[t.path])}(h),(0,e.useEffect)((()=>{(0,n.triggerExitPageCesSurvey)()}),[]),(0,e.useEffect)((()=>{!function(){const e={has_navigation:!!window.wcNavigation};if(m){const t=document.location.pathname+document.location.search;return void(0,f.recordPageView)(t,{is_embedded:!0,...e})}const{pathname:t}=d;if(!t)return;let n=t.substring(1).replace(/\//g,"_");0===n.length&&(n="home_screen"),(0,f.recordPageView)(n,{jetpack_installed:c.includes("jetpack"),jetpack_active:l.includes("jetpack"),jetpack_connected:u,...e})}(),setTimeout((()=>{(0,n.triggerExitPageCesSurvey)()}),0)}),[null==d?void 0:d.pathname]);const{breadcrumbs:H,layout:_={header:!0,footer:!0}}=h,{header:v=!0,footer:E=!0,showPluginArea:L=!0}=_,b=(0,g.getQuery)();return(0,e.useEffect)((()=>{const e=document.getElementById("wpbody");v?null==e||e.classList.remove("no-header"):null==e||e.classList.add("no-header")}),[v]),(0,e.createElement)(w.LayoutContextProvider,{value:(0,w.getLayoutContextValue)([(null==h||null===(o=h.navArgs)||void 0===o||null===(r=o.id)||void 0===r?void 0:r.toLowerCase())||"page"])},(0,e.createElement)(a.SlotFillProvider,null,(0,e.createElement)("div",{className:"woocommerce-layout"},v&&(0,e.createElement)($,{sections:(0,C.isFunction)(H)?H({match:p}):H,isEmbedded:m,query:b}),(0,e.createElement)(Uo,null),!m&&(0,e.createElement)(Ur,{showNotices:null==h||null===(i=h.layout)||void 0===i?void 0:i.showNotices,showStoreAlerts:null==h||null===(s=h.layout)||void 0===s?void 0:s.showStoreAlerts},(0,e.createElement)("div",{className:"woocommerce-layout__main"},(0,e.createElement)(W,{page:h,match:p,query:b}))),m&&function(){const{page:e,section:t,tab:n}=(0,g.getQuery)();return"wc-settings"===e&&"checkout"===n&&"woocommerce_payments"===t}()&&(0,e.createElement)(e.Suspense,{fallback:null},(0,e.createElement)(Wr,null)),E&&(0,e.createElement)(ee,null),(0,e.createElement)(n.CustomerEffortScoreModalContainer,null)),L&&(0,e.createElement)(e.Fragment,null,(0,e.createElement)(y.PluginArea,{scope:"woocommerce-admin"}),window.wcAdminFeatures.navigation&&(0,e.createElement)(y.PluginArea,{scope:"woocommerce-navigation"}),(0,e.createElement)(y.PluginArea,{scope:"woocommerce-tasks"}))))}Yr.propTypes={isEmbedded:h().bool,page:h().shape({container:h().oneOfType([h().func,h().object]),path:h().string,breadcrumbs:h().oneOfType([h().func,h().arrayOf(h().oneOfType([h().arrayOf(h().string),h().string]))]).isRequired,wpOpenMenu:h().string}).isRequired};const Qr=(0,r.O3)("dataEndpoints"),qr=(0,l.compose)((0,o.withPluginsHydration)({...(0,r.O3)("plugins",{}),jetpackStatus:Qr&&Qr.jetpackStatus||!1}),(0,c.withSelect)(((e,t)=>{let{isEmbedded:n}=t;if(n)return;const{getActivePlugins:r,getInstalledPlugins:a,isJetpackConnected:i}=e(o.PLUGINS_STORE_NAME);return{activePlugins:r(),isJetpackConnected:i(),installedPlugins:a()}})))((t=>t.isEmbedded?(0,e.createElement)(Yr,t):(0,e.createElement)(Gr,null,(0,e.createElement)(Yr,t)))),Jr=(0,l.compose)(window.wcSettings.admin?(0,o.withOptionsHydration)({...(0,r.O3)("preloadOptions",{})}):C.identity)((()=>{const{currentUserCan:t}=(0,o.useUser)(),n=document.location.pathname,r=n.substring(0,n.lastIndexOf("/"));return(0,e.createElement)(m.M,{history:(0,g.getHistory)()},(0,e.createElement)(u.Z5,{basename:r},z().filter((e=>!e.capability||t(e.capability))).map((t=>(0,e.createElement)(u.AW,{key:t.path,path:t.path,exact:!0,element:(0,e.createElement)(qr,{page:t})})))))})),Kr=(0,l.compose)((0,r.O3)("preloadOptions")?(0,o.withOptionsHydration)({...(0,r.O3)("preloadOptions")}):C.identity)((()=>(0,e.createElement)(qr,{page:{breadcrumbs:(0,r.O3)("embedBreadcrumbs",[])},isEmbedded:!0}))),Xr="woocommerce_show_marketplace_suggestions",$r=t=>{let{children:n}=t;const{currentUserCan:r}=(0,o.useUser)(),a=(0,c.useSelect)((e=>{const{getOption:t,hasFinishedResolution:n}=e(o.OPTIONS_STORE_NAME),r=n("getOption",[Xr]),a="no"!==t(Xr);return r&&a}));return r("install_plugins")&&a?(0,e.createElement)(e.Fragment,null,n):null},ea=(0,e.lazy)((()=>i.e(5396).then(i.bind(i,22079)))),ta=(0,e.lazy)((()=>window.wcAdminFeatures["shipping-smart-defaults"]?i.e(6125).then(i.bind(i,57418)):i.e(6125).then(i.bind(i,15883)))),na="woocommerce_store_address",oa="woocommerce_store_city",ra="woocommerce_store_postcode",aa=e=>{const t=document.querySelector(e);return!!t&&t.value.length>0},ia=()=>{const{isLoading:t,show:n}=(()=>{const{hasFilledStoreAddress:e,isLoading:t}=(0,c.useSelect)((e=>{const{hasFinishedResolution:t,getOption:n}=e(o.OPTIONS_STORE_NAME);return{isLoading:!t("getOption",[na])||!t("getOption",[oa])||!t("getOption",[ra]),hasFilledStoreAddress:""!==n(na)&&""!==n(oa)&&""!==n(ra)}}));return{isLoading:t,show:!t&&!e}})(),[r,a]=(0,e.useState)(!1),i={steps:[{referenceElements:{desktop:"#store_address-description + table.form-table"},meta:{name:"store-location-tour-step-1",heading:"Add your store location",descriptions:{desktop:(0,v.__)('Add your store location details to help us configure shipping, taxes, currency and more in a fully automated way. Once done, click on the "Save" button at the end of the form.',"woocommerce")},primaryButton:{text:(0,v.__)("Got it","woocommerce")}}}],placement:"bottom-start",options:{effects:{liveResize:{mutation:!0,resize:!0},spotlight:{styles:{inset:"0px auto auto -8px",paddingInline:"8px"},interactivity:{enabled:!0}}}},closeHandler:(e,t,n)=>{const o={address_1:aa("input#woocommerce_store_address"),address_2:aa("input#woocommerce_store_address_2"),city:aa("input#woocommerce_store_city"),postcode:aa("input#woocommerce_store_postcode")};(0,f.recordEvent)("settings_store_address_tour_dismiss",{source:n,fields_filled:o}),a(!0)}};return r||t||!n?null:(0,e.createElement)(E.TourKit,{config:i})},sa=[t=>{let{page:n,tab:o,section:r}=t;return"wc-settings"!==n||"checkout"!==o||r?null:(0,e.createElement)($r,null,(0,e.createElement)(e.Suspense,{fallback:null},(0,e.createElement)(ea,null)))},t=>{let{page:n,tab:o,section:r,zone_id:a}=t;return"wc-settings"!==n||"shipping"!==o||Boolean(r)||Boolean(a)?null:(0,e.createElement)($r,null,(0,e.createElement)(e.Suspense,{fallback:null},(0,e.createElement)(ta,null)))},t=>{let{page:n,tab:o,tutorial:r}=t;return"wc-settings"!==n||"general"!==o&&void 0!==o?null:r?(0,e.createElement)(ia,null):null}],la=()=>{(0,e.useEffect)((()=>{(0,n.triggerExitPageCesSurvey)()}),[]);const t=(0,H.parse)(location.search.substring(1));let o={page:"",tab:""};void 0!==t.page&&(o=t);const r=(0,_.applyFilters)("woocommerce_admin_embedded_layout_components",sa,o);return(0,e.createElement)(w.LayoutContextProvider,{value:(0,w.getLayoutContextValue)(["page"])},(0,e.createElement)("div",{className:"woocommerce-embedded-layout__primary",id:"woocommerce-embedded-layout__primary"},r.map(((t,n)=>(0,e.createElement)(t,(0,oe.Z)({key:n},o))))))};var ca=i(72456),ma=i(90523);const ua=()=>{(0,f.recordEvent)("settings_payments_banner_connect_click")},da=()=>{const t=(0,Q.getAdminLink)("admin.php?wcpay-connect=1&_wpnonce="+(0,r.O3)("wcpay_welcome_page_connect_nonce")),n=(0,r.O3)("isWooPayEligible");return(0,e.createElement)(ca.WCPayBanner,null,(0,e.createElement)(ca.WCPayBannerBody,{textPosition:"right",actionButton:(0,e.createElement)(a.Button,{href:t,isPrimary:!0,onClick:ua},(0,v.__)("Get started","woocommerce")),isWooPayEligible:n}),(0,e.createElement)(ca.WCPayBannerFooter,{isWooPayEligible:n}))},pa=()=>(0,e.createElement)(e.Fragment,null,(0,e.createElement)("h2",null,(0,v.__)("Payment Methods","woocommerce")),(0,e.createElement)("div",{id:"payment_gateways_options-description"},(0,e.createElement)("p",null,(0,v.__)("Installed payment methods are listed below and can be sorted to control their display order on the frontend.","woocommerce")))),ha=()=>{const{hasFinishedResolution:t,shouldShowBanner:n}=(()=>{const{installedPaymentGateways:e,paymentGatewaySuggestions:t,hasFinishedResolution:n}=(0,c.useSelect)((e=>({installedPaymentGateways:e(o.PAYMENT_GATEWAYS_STORE_NAME).getPaymentGateways(),paymentGatewaySuggestions:e(o.ONBOARDING_STORE_NAME).getPaymentGatewaySuggestions(),hasFinishedResolution:e(o.ONBOARDING_STORE_NAME).hasFinishedResolution("getPaymentGatewaySuggestions")&&e(o.PAYMENT_GATEWAYS_STORE_NAME).hasFinishedResolution("getPaymentGateways")}))),r=e.some((e=>"woocommerce_payments"===e.id)),a=e.find((e=>"woocommerce_payments"===e.id&&!1===e.enabled));return{hasFinishedResolution:n,shouldShowBanner:(0,ma.j)(t)&&r&&a}})();return t&&n?(0,e.createElement)(da,null):(0,e.createElement)(pa,null)},{Fill:Ca,Slot:ga}=(0,a.createSlotFill)("__EXPERIMENTAL__WcAdminPaymentsGatewaysSettingsBanner");(0,y.registerPlugin)("woocommerce-admin-paymentsgateways-settings-banner",{scope:"woocommerce-settings",render:()=>(0,e.createElement)(Ca,null,(0,e.createElement)(ha,null))});var fa=i(75283),ya=i(28601),wa=i(31863);const{Fill:Ha,Slot:_a}=(0,a.createSlotFill)("__EXPERIMENTAL__WcAdminConflictError"),va=()=>(0,e.createElement)(a.Button,{href:"https://woo.com/document/setting-up-taxes-in-woocommerce/",target:"_blank"},(0,v.__)("Learn more","woocommerce"));function Ea(e,t){let n=parseInt(e.slice(1,3),16),o=parseInt(e.slice(3,5),16),r=parseInt(e.slice(5,7),16);return n=Math.floor(255*(1-t)+t*n),o=Math.floor(255*(1-t)+t*o),r=Math.floor(255*(1-t)+t*r),"#"+n.toString(16).padStart(2,"0")+o.toString(16).padStart(2,"0")+r.toString(16).padStart(2,"0")}(0,y.registerPlugin)("woocommerce-admin-tax-settings-conflict-warning",{scope:"woocommerce-settings",render:()=>{const[n,o]=(0,e.useState)(!1),[r,i]=(0,e.useState)("yes"===document.forms.mainform.elements.woocommerce_prices_include_tax.value?"incl":"excl"),[s,l]=(0,e.useState)(window.jQuery("#woocommerce_tax_display_shop").val()),[m,u]=(0,e.useState)(window.jQuery("#woocommerce_tax_display_cart").val()),{createNotice:d}=(0,c.useDispatch)(t.store),p=()=>{window.jQuery("#woocommerce_tax_display_shop").val(r).trigger("change"),window.jQuery("#woocommerce_tax_display_cart").val(r).trigger("change"),d("success",(0,v.__)("Recommended settings applied.","woocommerce")),(0,f.recordEvent)("tax_settings_conflict_recommended_settings_clicked")};(0,e.useEffect)((()=>{document.querySelectorAll("input[name='woocommerce_prices_include_tax']").forEach((e=>{e.addEventListener("change",(()=>i("yes"===document.forms.mainform.elements.woocommerce_prices_include_tax.value?"incl":"excl")))}))}),[]),(0,e.useEffect)((()=>{window.jQuery("#woocommerce_tax_display_shop").on("click change",(()=>l(document.getElementById("woocommerce_tax_display_shop").value)))}),[]),(0,e.useEffect)((()=>{window.jQuery("#woocommerce_tax_display_cart").on("click change",(()=>u(document.getElementById("woocommerce_tax_display_cart").value)))}),[]);const[h,C]=(0,e.useState)(!1);return(0,e.useEffect)((()=>{s===r&&m===r?C(!1):(C(!0),(0,f.recordEvent)("tax_settings_conflict",{main:r,shop:s,cart:m}))}),[m,s,r]),!h||n?(0,e.createElement)(Ha,null):(0,e.createElement)(Ha,null,(0,e.createElement)("div",{className:"woocommerce_tax_settings_conflict_error"},(0,e.createElement)(a.Card,null,(0,e.createElement)(a.CardBody,{className:"woocommerce_tax_settings_conflict_error_card_body"},(0,e.createElement)("div",null,(0,e.createElement)("img",{className:"woocommerce_tax_settings_conflict_error_card_body__warning_icon",src:wa,alt:"Warning Icon"})),(0,e.createElement)("div",null,(0,e.createElement)("div",{className:"woocommerce_tax_settings_conflict_error_card_body__body_text"},(0,e.createElement)("p",{style:{fontSize:13}},(0,fa.Z)({mixedString:(0,v.__)("{{b}}Inconsistent tax settings:{{/b}} To avoid possible rounding errors, prices should be entered and displayed consistently in all locations either including, or excluding taxes.","woocommerce"),components:{b:(0,e.createElement)("b",null)}}))),(0,e.createElement)("div",{className:"woocommerce_tax_settings_conflict_error_card_body__buttons"},(0,e.createElement)((()=>(0,e.createElement)(a.Button,{variant:"primary",onClick:p},(0,v.__)("Use recommended settings","woocommerce"))),null)," ",(0,e.createElement)(va,null))),(0,e.createElement)("div",null,(0,e.createElement)(a.Button,{className:"woocommerce_tax_settings_conflict_error_card_body__close_icon",onClick:()=>{o(!0),(0,f.recordEvent)("tax_settings_conflict_dismissed")}},(0,e.createElement)(Go.Z,{icon:ya.Z})))))))}}),i.p=i.g.wcAdminAssets.path;const La=i.u;i.u=e=>`${La(e)}?ver=${window.wcAdminAssets.version}`;const ba=i.miniCssF;i.miniCssF=e=>`${ba(e)}?ver=${window.wcAdminAssets.version}`;const ka=document.getElementById("root"),Sa=document.getElementById("woocommerce-embedded-root"),Ma="wc_admin",Na=(0,r.O3)("currentUserData");if((()=>{const e=window.getComputedStyle(document.body).getPropertyValue("--wp-admin-theme-color").trim();document.documentElement.style.setProperty("--wp-admin-theme-color-background-04",Ea(e,.04)),document.documentElement.style.setProperty("--wp-admin-theme-color-background-25",Ea(e,.25))})(),ka){let t=(0,o.withSettingsHydration)(Ma,window.wcSettings.admin)(Jr);const n=!!window.wcSettings.admin&&window.wcSettings.admin.preloadSettings;n&&n.general&&(t=(0,o.withSettingsHydration)("general",{general:n.general})(t)),Na&&(t=(0,o.withCurrentUserHydration)(Na)(t)),(0,e.render)((0,e.createElement)(t,null),ka)}else if(Sa){let t=(0,o.withSettingsHydration)(Ma,window.wcSettings.admin)(Kr);Na&&(t=(0,o.withCurrentUserHydration)(Na)(t)),(0,e.render)((0,e.createElement)(t,null),Sa),Sa.classList.remove("is-embed-loading");const n=document.getElementById("wpbody-content"),r=document.getElementById("wc_payment_gateways_banner_slotfill");r&&(0,e.render)((0,e.createElement)(e.Fragment,null,(0,e.createElement)(a.SlotFillProvider,null,(0,e.createElement)(ga,null),(0,e.createElement)(y.PluginArea,{scope:"woocommerce-settings"}))),r);const i=document.getElementById("wc_conflict_error_slotfill");i&&(0,e.render)((0,e.createElement)(e.Fragment,null,(0,e.createElement)(a.SlotFillProvider,null,(0,e.createElement)(_a,null),(0,e.createElement)(y.PluginArea,{scope:"woocommerce-settings"}))),i);const s=n.querySelector(".wrap.woocommerce")||document.querySelector("#wpbody-content > .woocommerce")||n.querySelector(".wrap"),l=document.createElement("div");(0,e.render)((0,e.createElement)("div",{className:"woocommerce-layout"},(0,e.createElement)(Ur,null)),n.insertBefore(l,s));const c=document.createElement("div");(0,e.render)((0,e.createElement)(la,null),n.insertBefore(c,s.nextSibling))}window.wcAdminFeatures&&!0===window.wcAdminFeatures["customer-effort-score-tracks"]&&function(){const t=ka||Sa;(0,e.render)((0,e.createElement)(n.CustomerEffortScoreTracksContainer,null),t.insertBefore(document.createElement("div"),null))}()})(),(window.wc=window.wc||{}).app=s})();
\ No newline at end of file
+(()=>{var e,t,n,o,r={75283:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var o=n(99196),r=n(45229);function a(e,t){let n,r,i=[];for(let o=0;o{"use strict";function o(e){return e.startsWith("{{/")?{type:"componentClose",value:e.replace(/\W/g,"")}:e.endsWith("/}}")?{type:"componentSelfClosing",value:e.replace(/\W/g,"")}:e.startsWith("{{")?{type:"componentOpen",value:e.replace(/\W/g,"")}:{type:"string",value:e}}function r(e){return e.split(/(\{\{\/?\s*\w+\s*\/?\}\})/g).map(o)}n.d(t,{Z:()=>r})},23374:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var o=n(69307);const r=function(e){let{icon:t,size:n=24,...r}=e;return(0,o.cloneElement)(t,{width:n,height:n,...r})}},34200:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(69307),r=n(70444);const a=(0,o.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(r.Path,{fillRule:"evenodd",d:"M5 5.5h14a.5.5 0 01.5.5v1.5a.5.5 0 01-.5.5H5a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM4 9.232A2 2 0 013 7.5V6a2 2 0 012-2h14a2 2 0 012 2v1.5a2 2 0 01-1 1.732V18a2 2 0 01-2 2H6a2 2 0 01-2-2V9.232zm1.5.268V18a.5.5 0 00.5.5h12a.5.5 0 00.5-.5V9.5h-13z",clipRule:"evenodd"}))},47642:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(69307),r=n(70444);const a=(0,o.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(r.Path,{d:"M16.7 7.1l-6.3 8.5-3.3-2.5-.9 1.2 4.5 3.4L17.9 8z"}))},70048:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(69307),r=n(70444);const a=(0,o.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(r.Path,{d:"M14.6 7l-1.2-1L8 12l5.4 6 1.2-1-4.6-5z"}))},28601:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(69307),r=n(70444);const a=(0,o.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(r.Path,{d:"M12 13.06l3.712 3.713 1.061-1.06L13.061 12l3.712-3.712-1.06-1.06L12 10.938 8.288 7.227l-1.061 1.06L10.939 12l-3.712 3.712 1.06 1.061L12 13.061z"}))},70261:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(69307),r=n(70444);const a=(0,o.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(r.Path,{d:"M13 11.8l6.1-6.3-1-1-6.1 6.2-6.1-6.2-1 1 6.1 6.3-6.5 6.7 1 1 6.5-6.6 6.5 6.6 1-1z"}))},12532:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(69307),r=n(70444);const a=(0,o.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(r.Path,{d:"M18.2 17c0 .7-.6 1.2-1.2 1.2H7c-.7 0-1.2-.6-1.2-1.2V7c0-.7.6-1.2 1.2-1.2h3.2V4.2H7C5.5 4.2 4.2 5.5 4.2 7v10c0 1.5 1.2 2.8 2.8 2.8h10c1.5 0 2.8-1.2 2.8-2.8v-3.6h-1.5V17zM14.9 3v1.5h3.7l-6.4 6.4 1.1 1.1 6.4-6.4v3.7h1.5V3h-6.3z"}))},91250:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(69307),r=n(70444);const a=(0,o.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(r.Path,{d:"M12 4.75a7.25 7.25 0 100 14.5 7.25 7.25 0 000-14.5zM3.25 12a8.75 8.75 0 1117.5 0 8.75 8.75 0 01-17.5 0zM12 8.75a1.5 1.5 0 01.167 2.99c-.465.052-.917.44-.917 1.01V14h1.5v-.845A3 3 0 109 10.25h1.5a1.5 1.5 0 011.5-1.5zM11.25 15v1.5h1.5V15h-1.5z"}))},89015:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var o=n(69307),r=n(70444);const a=(0,o.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,o.createElement)(r.Path,{d:"M7 5.5h10a.5.5 0 01.5.5v12a.5.5 0 01-.5.5H7a.5.5 0 01-.5-.5V6a.5.5 0 01.5-.5zM17 4H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V6a2 2 0 00-2-2zm-1 3.75H8v1.5h8v-1.5zM8 11h8v1.5H8V11zm6 3.25H8v1.5h6v-1.5z"}))},72456:(e,t,n)=>{"use strict";n.d(t,{Amex:()=>m,ApplePay:()=>u,CB:()=>h,GooglePay:()=>V,JCB:()=>y,Loader:()=>ee,MasterCard:()=>l,SetupRequired:()=>R,UnionPay:()=>H,Visa:()=>c,WCPayBanner:()=>N,WCPayBannerBody:()=>M,WCPayBannerFooter:()=>k,WCPayBannerImageCut:()=>L,WCPayBenefits:()=>O,WooOnboardingTask:()=>F,WooOnboardingTaskListHeader:()=>B,WooOnboardingTaskListItem:()=>Z,WooPaymentGatewayConfigure:()=>D,WooPaymentGatewaySetup:()=>j,findCountryOption:()=>Q,getCountry:()=>q});var o=n(55609),r=n(14812),a=n(69307),i=n(86020),s=n(65736);const c=()=>(0,a.createElement)("svg",{width:"51",height:"35",viewBox:"0 0 51 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.5",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{d:"M22.6435 24.004H19.248L21.3718 11.7534H24.7671L22.6435 24.004Z",fill:"#15195A"}),(0,a.createElement)("path",{d:"M34.952 12.0528C34.2823 11.8049 33.22 11.5312 31.9066 11.5312C28.5534 11.5312 26.1922 13.1993 26.1777 15.5842C26.1499 17.3437 27.8683 18.321 29.1536 18.9077C30.4672 19.5072 30.9138 19.8985 30.9138 20.4329C30.9004 21.2536 29.8522 21.6319 28.8747 21.6319C27.5191 21.6319 26.7927 21.4369 25.6889 20.9803L25.2417 20.7845L24.7666 23.5345C25.563 23.873 27.0302 24.1733 28.5534 24.1865C32.1162 24.1865 34.4356 22.5442 34.4631 20.0028C34.4767 18.6082 33.5693 17.5396 31.613 16.6665C30.4254 16.1059 29.6981 15.728 29.6981 15.1544C29.7121 14.6331 30.3133 14.099 31.6539 14.099C32.7577 14.0729 33.5687 14.3204 34.1831 14.5681L34.4902 14.6982L34.952 12.0528Z",fill:"#15195A"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M41.0301 11.7534H43.6565L46.3957 24.0039H43.2519C43.2519 24.0039 42.9442 22.5963 42.8467 22.1662H38.4873C38.3612 22.4919 37.7747 24.0039 37.7747 24.0039H34.2119L39.2554 12.7699C39.6049 11.9748 40.2202 11.7534 41.0301 11.7534ZM40.8208 16.2365C40.8208 16.2365 39.7448 18.9603 39.4652 19.6641H42.2875C42.1478 19.0516 41.5048 16.1192 41.5048 16.1192L41.2676 15.0636C41.1676 15.3355 41.0231 15.7092 40.9256 15.9612C40.8596 16.1321 40.8151 16.2471 40.8208 16.2365Z",fill:"#15195A"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.53636 11.7534H9.99929C10.7398 11.7792 11.3406 12.0008 11.5361 12.7832L12.7233 18.4113C12.7234 18.4118 12.7236 18.4124 12.7238 18.4129L13.0871 20.1072L16.4124 11.7534H20.0028L14.6657 23.991H11.0752L8.04881 13.3464C7.00461 12.7769 5.81289 12.3188 4.48047 12.0009L4.53636 11.7534Z",fill:"#15195A"})),l=()=>(0,a.createElement)("svg",{width:"51",height:"35",viewBox:"0 0 51 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.5",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M18.6846 27.0292V28.3215V29.6137H18.1154V29.2999C17.9349 29.5327 17.661 29.6787 17.2886 29.6787C16.5546 29.6787 15.9791 29.1112 15.9791 28.3215C15.9791 27.5324 16.5546 26.9642 17.2886 26.9642C17.661 26.9642 17.9349 27.1103 18.1154 27.343V27.0292H18.6846ZM17.3594 27.494C16.8667 27.494 16.5652 27.8672 16.5652 28.3215C16.5652 28.7757 16.8667 29.1489 17.3594 29.1489C17.8302 29.1489 18.148 28.7918 18.148 28.3215C18.148 27.8511 17.8302 27.494 17.3594 27.494ZM37.9186 28.3215C37.9186 27.8672 38.2201 27.494 38.7128 27.494C39.1842 27.494 39.5014 27.8511 39.5014 28.3215C39.5014 28.7918 39.1842 29.1489 38.7128 29.1489C38.2201 29.1489 37.9186 28.7757 37.9186 28.3215ZM40.0386 25.9913V28.3215V29.6137H39.4688V29.2999C39.2882 29.5327 39.0143 29.6787 38.642 29.6787C37.9079 29.6787 37.3325 29.1112 37.3325 28.3215C37.3325 27.5324 37.9079 26.9642 38.642 26.9642C39.0143 26.9642 39.2882 27.1103 39.4688 27.343V25.9913H40.0386ZM25.7496 27.4674C26.1163 27.4674 26.352 27.6945 26.4122 28.0943H25.0538C25.1146 27.7211 25.3441 27.4674 25.7496 27.4674ZM24.4571 28.3215C24.4571 27.5157 24.9937 26.9642 25.7609 26.9642C26.4943 26.9642 26.9983 27.5157 27.0039 28.3215C27.0039 28.397 26.9983 28.4675 26.9926 28.5375L25.0488 28.5375C25.1309 29.0029 25.465 29.1706 25.8317 29.1706C26.0944 29.1706 26.374 29.0728 26.5933 28.9001L26.8723 29.3167C26.5545 29.5815 26.1934 29.6787 25.7991 29.6787C25.0156 29.6787 24.4571 29.1434 24.4571 28.3215ZM32.6337 28.3215C32.6337 27.8672 32.9353 27.494 33.4279 27.494C33.8987 27.494 34.2165 27.8511 34.2165 28.3215C34.2165 28.7918 33.8987 29.1489 33.4279 29.1489C32.9353 29.1489 32.6337 28.7757 32.6337 28.3215ZM34.7529 27.0292V28.3215V29.6137H34.1837V29.2999C34.0026 29.5327 33.7293 29.6787 33.3569 29.6787C32.6229 29.6787 32.0475 29.1112 32.0475 28.3215C32.0475 27.5324 32.6229 26.9642 33.3569 26.9642C33.7293 26.9642 34.0026 27.1103 34.1837 27.343V27.0292H34.7529ZM29.4191 28.3215C29.4191 29.1056 29.972 29.6787 30.8157 29.6787C31.21 29.6787 31.4726 29.5921 31.7572 29.3705L31.4839 28.9162C31.2701 29.0679 31.0457 29.1489 30.7988 29.1489C30.3443 29.1434 30.0102 28.8191 30.0102 28.3215C30.0102 27.8239 30.3443 27.4996 30.7988 27.494C31.0457 27.494 31.2701 27.5751 31.4839 27.7267L31.7572 27.2724C31.4726 27.0509 31.21 26.9642 30.8157 26.9642C29.972 26.9642 29.4191 27.5373 29.4191 28.3215ZM36.0674 27.3431C36.2153 27.1159 36.4291 26.9643 36.7575 26.9643C36.8729 26.9643 37.0371 26.986 37.1631 27.0349L36.9876 27.5646C36.8672 27.5157 36.7469 27.4997 36.6315 27.4997C36.2592 27.4997 36.073 27.7373 36.073 28.165V29.6138H35.5032V27.0293H36.0674V27.3431ZM21.4996 27.2347C21.2257 27.0564 20.8483 26.9642 20.4321 26.9642C19.7689 26.9642 19.342 27.278 19.342 27.7917C19.342 28.2132 19.6599 28.4731 20.2453 28.5542L20.5142 28.5919C20.8264 28.6352 20.9737 28.7163 20.9737 28.8624C20.9737 29.0623 20.7656 29.1762 20.377 29.1762C19.9827 29.1762 19.6981 29.0518 19.5063 28.9057L19.238 29.3433C19.5502 29.5704 19.9444 29.6787 20.3713 29.6787C21.1273 29.6787 21.5654 29.3272 21.5654 28.8352C21.5654 28.3809 21.2207 28.1432 20.6509 28.0621L20.3826 28.0238C20.1363 27.9916 19.9388 27.9433 19.9388 27.77C19.9388 27.5806 20.125 27.4674 20.4371 27.4674C20.7712 27.4674 21.0947 27.5918 21.2533 27.689L21.4996 27.2347ZM28.1542 27.3431C28.3015 27.1159 28.5152 26.9643 28.8437 26.9643C28.959 26.9643 29.1233 26.986 29.2493 27.0349L29.0738 27.5646C28.9534 27.5157 28.833 27.4997 28.7177 27.4997C28.3454 27.4997 28.1592 27.7373 28.1592 28.165V29.6138H27.59V27.0293L28.1542 27.0293V27.3431ZM23.9862 27.0292H23.0553V26.2451H22.4799V27.0292H21.949V27.5429H22.4799V28.7219C22.4799 29.3216 22.7156 29.6787 23.3888 29.6787C23.6358 29.6787 23.9204 29.6032 24.1009 29.4788L23.9367 28.9973C23.7668 29.0945 23.5806 29.1434 23.4327 29.1434C23.1481 29.1434 23.0553 28.9701 23.0553 28.7108V27.5429H23.9862V27.0292ZM15.4758 27.9917V29.6138H14.9003V28.1755C14.9003 27.7373 14.7142 27.4941 14.3255 27.4941C13.9475 27.4941 13.6849 27.7324 13.6849 28.1811V29.6138H13.1095V28.1755C13.1095 27.7373 12.9183 27.4941 12.5403 27.4941C12.151 27.4941 11.899 27.7324 11.899 28.1811V29.6138H11.3242V27.0293H11.894V27.348C12.1078 27.0454 12.3811 26.9643 12.6606 26.9643C13.0606 26.9643 13.3451 27.1376 13.5257 27.4242C13.767 27.0615 14.1118 26.9587 14.4459 26.9643C15.0815 26.9699 15.4758 27.3808 15.4758 27.9917Z",fill:"#231F20"}),(0,a.createElement)("path",{d:"M29.9381 22.6376H21.3115V7.33105H29.9381V22.6376Z",fill:"#FF5F00"}),(0,a.createElement)("path",{d:"M21.8586 14.9846C21.8586 11.8796 23.331 9.11372 25.624 7.33129C23.9472 6.02789 21.831 5.24994 19.5311 5.24994C14.0864 5.24994 9.67285 9.60822 9.67285 14.9846C9.67285 20.361 14.0864 24.7192 19.5311 24.7192C21.831 24.7192 23.9472 23.9413 25.624 22.6379C23.331 20.8555 21.8586 18.0896 21.8586 14.9846Z",fill:"#EB001B"}),(0,a.createElement)("path",{d:"M41.5758 14.9846C41.5758 20.361 37.1622 24.7192 31.7175 24.7192C29.4177 24.7192 27.3014 23.9413 25.624 22.6379C27.9176 20.8555 29.3901 18.0896 29.3901 14.9846C29.3901 11.8796 27.9176 9.11372 25.624 7.33129C27.3014 6.02789 29.4177 5.24994 31.7175 5.24994C37.1622 5.24994 41.5758 9.60822 41.5758 14.9846Z",fill:"#F79E1B"})),m=()=>(0,a.createElement)("svg",{width:"52",height:"35",viewBox:"0 0 52 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"1.18945",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"#006FCF",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.1205 25.2823V18.0771H19.3189L20.1985 19.1441L21.1072 18.0771H50.8653V24.7854C50.8653 24.7854 50.0871 25.2751 49.187 25.2823H32.7093L31.7176 24.1465V25.2823H28.4679V23.3435C28.4679 23.3435 28.0239 23.6141 27.0642 23.6141H25.9581V25.2823H21.0376L20.1593 24.1924L19.2675 25.2823H11.1205ZM1.56836 12.6465L3.41294 8.63574H6.60294L7.64976 10.8824V8.63574H11.6152L12.2384 10.2596L12.8425 8.63574H30.6434V9.4521C30.6434 9.4521 31.5792 8.63574 33.1171 8.63574L38.8928 8.65457L39.9215 10.8718V8.63574H43.24L44.1534 9.90939V8.63574H47.5023V15.841H44.1534L43.2781 14.5632V15.841H38.4025L37.9121 14.7052H36.6014L36.1191 15.841H32.8126C31.4893 15.841 30.6434 15.0413 30.6434 15.0413V15.841H25.658L24.6685 14.7052V15.841H6.13036L5.64039 14.7052H4.33383L3.84732 15.841H1.56836V12.6465ZM1.5779 14.9189L4.06583 9.52391H5.95199L8.43755 14.9189H6.7821L6.32542 13.8386H3.65672L3.19767 14.9189H1.5779ZM5.79982 12.6674L4.98636 10.7795L4.17053 12.6674H5.79982ZM8.60869 14.9182V9.52317L10.9105 9.53115L12.2493 13.0095L13.556 9.52317H15.8394V14.9182H14.3933V10.9429L12.8603 14.9182H11.592L10.0548 10.9429V14.9182H8.60869ZM16.8289 14.9182V9.52317H21.5479V10.73H18.2902V11.6528H21.4717V12.7886H18.2902V13.7469H21.5479V14.9182H16.8289ZM22.3851 14.9189V9.52391H25.6033C26.6696 9.52391 27.625 10.1389 27.625 11.2742C27.625 12.2447 26.8195 12.8698 26.0385 12.9313L27.9413 14.9189H26.1741L24.4402 13.0023H23.8313V14.9189H22.3851ZM25.4843 10.7306H23.8313V11.8664H25.5057C25.7956 11.8664 26.1694 11.6569 26.1694 11.2985C26.1694 11.0199 25.8809 10.7306 25.4843 10.7306ZM29.692 14.9182H28.2154V9.52317H29.692V14.9182ZM33.1931 14.9182H32.8744C31.3323 14.9182 30.396 13.7851 30.396 12.2429C30.396 10.6626 31.3218 9.52317 33.2692 9.52317H34.8676V10.8009H33.2108C32.4202 10.8009 31.8611 11.3763 31.8611 12.2562C31.8611 13.301 32.5004 13.7398 33.4215 13.7398H33.802L33.1931 14.9182ZM33.8521 14.9189L36.34 9.52391H38.2262L40.7117 14.9189H39.0563L38.5996 13.8386H35.9309L35.4719 14.9189H33.8521ZM38.074 12.6674L37.2605 10.7795L36.4447 12.6674H38.074ZM40.8805 14.9182V9.52317H42.7191L45.0667 12.9128V9.52317H46.5128V14.9182H44.7337L42.3267 11.4398V14.9182H40.8805ZM12.1099 24.3594V18.9643H16.8289V20.1711H13.5713V21.0939H16.7528V22.2297H13.5713V23.1881H16.8289V24.3594H12.1099ZM35.2329 24.3594V18.9643H39.9519V20.1711H36.6943V21.0939H39.8606V22.2297H36.6943V23.1881H39.9519V24.3594H35.2329ZM17.0121 24.3594L19.3097 21.6951L16.9574 18.9643H18.7793L20.1803 20.6525L21.586 18.9643H23.3366L21.0151 21.6618L23.317 24.3594H21.4953L20.1351 22.6978L18.8079 24.3594H17.0121ZM23.4887 24.3603V18.9653H26.6831C27.9938 18.9653 28.7595 19.7531 28.7595 20.7799C28.7595 22.0193 27.7832 22.6566 26.4952 22.6566H24.9729V24.3603H23.4887ZM26.5761 20.1853H24.973V21.4276H26.5714C26.9937 21.4276 27.2897 21.1665 27.2897 20.8064C27.2897 20.4232 26.9922 20.1853 26.5761 20.1853ZM29.3875 24.3594V18.9643H32.6056C33.672 18.9643 34.6274 19.5793 34.6274 20.7146C34.6274 21.6851 33.8218 22.3102 33.0409 22.3717L34.9437 24.3594H33.1765L31.4426 22.4427H30.8337V24.3594H29.3875ZM32.4867 20.171H30.8337V21.3068H32.5082C32.798 21.3068 33.1718 21.0974 33.1718 20.7389C33.1718 20.4603 32.8833 20.171 32.4867 20.171ZM40.6217 24.3594V23.1881H43.5159C43.9441 23.1881 44.1295 22.9722 44.1295 22.7355C44.1295 22.5087 43.9447 22.2794 43.5159 22.2794H42.208C41.0712 22.2794 40.4381 21.6334 40.4381 20.6636C40.4381 19.7985 41.0178 18.9643 42.7072 18.9643H45.5233L44.9144 20.1782H42.4788C42.0132 20.1782 41.8699 20.4061 41.8699 20.6237C41.8699 20.8473 42.047 21.0939 42.4027 21.0939H43.7727C45.04 21.0939 45.5899 21.7644 45.5899 22.6424C45.5899 23.5863 44.9772 24.3594 43.7038 24.3594H40.6217ZM45.7176 24.3594V23.1881H48.6118C49.04 23.1881 49.2254 22.9722 49.2254 22.7355C49.2254 22.5087 49.0406 22.2794 48.6118 22.2794H47.3039C46.1671 22.2794 45.534 21.6334 45.534 20.6636C45.534 19.7985 46.1138 18.9643 47.8031 18.9643H50.6192L50.0103 20.1782H47.5747C47.1092 20.1782 46.9658 20.4061 46.9658 20.6237C46.9658 20.8473 47.1429 21.0939 47.4986 21.0939H48.8687C50.1359 21.0939 50.6858 21.7644 50.6858 22.6424C50.6858 23.5863 50.0731 24.3594 48.7997 24.3594H45.7176Z",fill:"white"})),u=()=>(0,a.createElement)("svg",{width:"52",height:"35",viewBox:"0 0 52 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.878906",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M15.8352 13.0607C15.4642 13.5024 14.8707 13.8507 14.2771 13.8009C14.2029 13.2038 14.4935 12.5693 14.8336 12.1774C15.2045 11.7233 15.8537 11.3999 16.3792 11.375C16.4411 11.997 16.1999 12.6066 15.8352 13.0607ZM16.373 13.9192C15.8501 13.8889 15.373 14.0774 14.9876 14.2297C14.7396 14.3277 14.5296 14.4106 14.3698 14.4106C14.1905 14.4106 13.9718 14.3232 13.7263 14.2251C13.4046 14.0965 13.0367 13.9495 12.651 13.9565C11.7669 13.969 10.9446 14.4728 10.4933 15.2753C9.56588 16.8801 10.2522 19.2563 11.1486 20.5626C11.5876 21.2095 12.1131 21.9186 12.8056 21.8937C13.1102 21.8822 13.3294 21.7886 13.5562 21.6918C13.8173 21.5803 14.0885 21.4645 14.512 21.4645C14.9208 21.4645 15.1802 21.5773 15.4292 21.6856C15.6659 21.7885 15.8933 21.8874 16.2308 21.8813C16.948 21.8689 17.3993 21.2344 17.8383 20.5875C18.312 19.8931 18.5202 19.2155 18.5518 19.1127L18.5555 19.1008C18.5547 19.1 18.5488 19.0973 18.5385 19.0926C18.3802 19.0196 17.1698 18.4621 17.1582 16.9672C17.1465 15.7124 18.1182 15.0767 18.2712 14.9766L18.2712 14.9766C18.2805 14.9705 18.2868 14.9664 18.2896 14.9642C17.6713 14.0436 16.7068 13.9441 16.373 13.9192ZM21.3377 21.8128V12.1153H24.9546C26.8217 12.1153 28.1263 13.4091 28.1263 15.3001C28.1263 17.1911 26.797 18.4974 24.9051 18.4974H22.8339V21.8128H21.3377ZM22.8339 13.3841H24.5589C25.8572 13.3841 26.5991 14.0808 26.5991 15.3062C26.5991 16.5317 25.8572 17.2346 24.5527 17.2346H22.8339V13.3841ZM33.0661 20.6496C32.6704 21.4085 31.7986 21.8874 30.8589 21.8874C29.4678 21.8874 28.4971 21.0539 28.4971 19.7974C28.4971 18.5533 29.4368 17.838 31.1742 17.7322L33.0413 17.6203V17.0853C33.0413 16.2953 32.5282 15.8661 31.6131 15.8661C30.8589 15.8661 30.3086 16.258 30.1973 16.8552H28.8495C28.8928 15.5986 30.0675 14.6842 31.6564 14.6842C33.369 14.6842 34.4819 15.5862 34.4819 16.9858V21.8128H33.097V20.6496H33.0661ZM31.2609 20.7368C30.4633 20.7368 29.9563 20.3511 29.9563 19.7602C29.9563 19.1506 30.4448 18.796 31.3784 18.74L33.0415 18.6343V19.1817C33.0415 20.0898 32.2748 20.7368 31.2609 20.7368ZM39.0756 22.1922C38.4759 23.8903 37.7897 24.4502 36.3306 24.4502C36.2193 24.4502 35.8483 24.4377 35.7617 24.4129V23.2496C35.8545 23.2621 36.0832 23.2745 36.2007 23.2745C36.8623 23.2745 37.2332 22.9946 37.462 22.2668L37.598 21.8376L35.0631 14.7775H36.6273L38.3894 20.5065H38.4203L40.1823 14.7775H41.7033L39.0756 22.1922Z",fill:"black"})),d=()=>(0,a.createElement)("svg",{width:"52",height:"35",viewBox:"0 0 52 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"1.18945",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"#006FCF",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.1205 25.2823V18.0771H19.3189L20.1985 19.1441L21.1072 18.0771H50.8653V24.7854C50.8653 24.7854 50.0871 25.2751 49.187 25.2823H32.7093L31.7176 24.1465V25.2823H28.4679V23.3435C28.4679 23.3435 28.0239 23.6141 27.0642 23.6141H25.9581V25.2823H21.0376L20.1593 24.1924L19.2675 25.2823H11.1205ZM1.56836 12.6465L3.41294 8.63574H6.60294L7.64976 10.8824V8.63574H11.6152L12.2384 10.2596L12.8425 8.63574H30.6434V9.4521C30.6434 9.4521 31.5792 8.63574 33.1171 8.63574L38.8928 8.65457L39.9215 10.8718V8.63574H43.24L44.1534 9.90939V8.63574H47.5023V15.841H44.1534L43.2781 14.5632V15.841H38.4025L37.9121 14.7052H36.6014L36.1191 15.841H32.8126C31.4893 15.841 30.6434 15.0413 30.6434 15.0413V15.841H25.658L24.6685 14.7052V15.841H6.13036L5.64039 14.7052H4.33383L3.84732 15.841H1.56836V12.6465ZM1.5779 14.9189L4.06583 9.52391H5.95199L8.43755 14.9189H6.7821L6.32542 13.8386H3.65672L3.19767 14.9189H1.5779ZM5.79982 12.6674L4.98636 10.7795L4.17053 12.6674H5.79982ZM8.60869 14.9182V9.52317L10.9105 9.53115L12.2493 13.0095L13.556 9.52317H15.8394V14.9182H14.3933V10.9429L12.8603 14.9182H11.592L10.0548 10.9429V14.9182H8.60869ZM16.8289 14.9182V9.52317H21.5479V10.73H18.2902V11.6528H21.4717V12.7886H18.2902V13.7469H21.5479V14.9182H16.8289ZM22.3851 14.9189V9.52391H25.6033C26.6696 9.52391 27.625 10.1389 27.625 11.2742C27.625 12.2447 26.8195 12.8698 26.0385 12.9313L27.9413 14.9189H26.1741L24.4402 13.0023H23.8313V14.9189H22.3851ZM25.4843 10.7306H23.8313V11.8664H25.5057C25.7956 11.8664 26.1694 11.6569 26.1694 11.2985C26.1694 11.0199 25.8809 10.7306 25.4843 10.7306ZM29.692 14.9182H28.2154V9.52317H29.692V14.9182ZM33.1931 14.9182H32.8744C31.3323 14.9182 30.396 13.7851 30.396 12.2429C30.396 10.6626 31.3218 9.52317 33.2692 9.52317H34.8676V10.8009H33.2108C32.4202 10.8009 31.8611 11.3763 31.8611 12.2562C31.8611 13.301 32.5004 13.7398 33.4215 13.7398H33.802L33.1931 14.9182ZM33.8521 14.9189L36.34 9.52391H38.2262L40.7117 14.9189H39.0563L38.5996 13.8386H35.9309L35.4719 14.9189H33.8521ZM38.074 12.6674L37.2605 10.7795L36.4447 12.6674H38.074ZM40.8805 14.9182V9.52317H42.7191L45.0667 12.9128V9.52317H46.5128V14.9182H44.7337L42.3267 11.4398V14.9182H40.8805ZM12.1099 24.3594V18.9643H16.8289V20.1711H13.5713V21.0939H16.7528V22.2297H13.5713V23.1881H16.8289V24.3594H12.1099ZM35.2329 24.3594V18.9643H39.9519V20.1711H36.6943V21.0939H39.8606V22.2297H36.6943V23.1881H39.9519V24.3594H35.2329ZM17.0121 24.3594L19.3097 21.6951L16.9574 18.9643H18.7793L20.1803 20.6525L21.586 18.9643H23.3366L21.0151 21.6618L23.317 24.3594H21.4953L20.1351 22.6978L18.8079 24.3594H17.0121ZM23.4887 24.3603V18.9653H26.6831C27.9938 18.9653 28.7595 19.7531 28.7595 20.7799C28.7595 22.0193 27.7832 22.6566 26.4952 22.6566H24.9729V24.3603H23.4887ZM26.5761 20.1853H24.973V21.4276H26.5714C26.9937 21.4276 27.2897 21.1665 27.2897 20.8064C27.2897 20.4232 26.9922 20.1853 26.5761 20.1853ZM29.3875 24.3594V18.9643H32.6056C33.672 18.9643 34.6274 19.5793 34.6274 20.7146C34.6274 21.6851 33.8218 22.3102 33.0409 22.3717L34.9437 24.3594H33.1765L31.4426 22.4427H30.8337V24.3594H29.3875ZM32.4867 20.171H30.8337V21.3068H32.5082C32.798 21.3068 33.1718 21.0974 33.1718 20.7389C33.1718 20.4603 32.8833 20.171 32.4867 20.171ZM40.6217 24.3594V23.1881H43.5159C43.9441 23.1881 44.1295 22.9722 44.1295 22.7355C44.1295 22.5087 43.9447 22.2794 43.5159 22.2794H42.208C41.0712 22.2794 40.4381 21.6334 40.4381 20.6636C40.4381 19.7985 41.0178 18.9643 42.7072 18.9643H45.5233L44.9144 20.1782H42.4788C42.0132 20.1782 41.8699 20.4061 41.8699 20.6237C41.8699 20.8473 42.047 21.0939 42.4027 21.0939H43.7727C45.04 21.0939 45.5899 21.7644 45.5899 22.6424C45.5899 23.5863 44.9772 24.3594 43.7038 24.3594H40.6217ZM45.7176 24.3594V23.1881H48.6118C49.04 23.1881 49.2254 22.9722 49.2254 22.7355C49.2254 22.5087 49.0406 22.2794 48.6118 22.2794H47.3039C46.1671 22.2794 45.534 21.6334 45.534 20.6636C45.534 19.7985 46.1138 18.9643 47.8031 18.9643H50.6192L50.0103 20.1782H47.5747C47.1092 20.1782 46.9658 20.4061 46.9658 20.6237C46.9658 20.8473 47.1429 21.0939 47.4986 21.0939H48.8687C50.1359 21.0939 50.6858 21.7644 50.6858 22.6424C50.6858 23.5863 50.0731 24.3594 48.7997 24.3594H45.7176Z",fill:"white"})),p=()=>(0,a.createElement)("svg",{width:"52",height:"35",viewBox:"0 0 52 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.878906",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M15.8352 13.0607C15.4642 13.5024 14.8707 13.8507 14.2771 13.8009C14.2029 13.2038 14.4935 12.5693 14.8336 12.1774C15.2045 11.7233 15.8537 11.3999 16.3792 11.375C16.4411 11.997 16.1999 12.6066 15.8352 13.0607ZM16.373 13.9192C15.8501 13.8889 15.373 14.0774 14.9876 14.2297C14.7396 14.3277 14.5296 14.4106 14.3698 14.4106C14.1905 14.4106 13.9718 14.3232 13.7263 14.2251C13.4046 14.0965 13.0367 13.9495 12.651 13.9565C11.7669 13.969 10.9446 14.4728 10.4933 15.2753C9.56588 16.8801 10.2522 19.2563 11.1486 20.5626C11.5876 21.2095 12.1131 21.9186 12.8056 21.8937C13.1102 21.8822 13.3294 21.7886 13.5562 21.6918C13.8173 21.5803 14.0885 21.4645 14.512 21.4645C14.9208 21.4645 15.1802 21.5773 15.4292 21.6856C15.6659 21.7885 15.8933 21.8874 16.2308 21.8813C16.948 21.8689 17.3993 21.2344 17.8383 20.5875C18.312 19.8931 18.5202 19.2155 18.5518 19.1127L18.5555 19.1008C18.5547 19.1 18.5488 19.0973 18.5385 19.0926C18.3802 19.0196 17.1698 18.4621 17.1582 16.9672C17.1465 15.7124 18.1182 15.0767 18.2712 14.9766L18.2712 14.9766C18.2805 14.9705 18.2868 14.9664 18.2896 14.9642C17.6713 14.0436 16.7068 13.9441 16.373 13.9192ZM21.3377 21.8128V12.1153H24.9546C26.8217 12.1153 28.1263 13.4091 28.1263 15.3001C28.1263 17.1911 26.797 18.4974 24.9051 18.4974H22.8339V21.8128H21.3377ZM22.8339 13.3841H24.5589C25.8572 13.3841 26.5991 14.0808 26.5991 15.3062C26.5991 16.5317 25.8572 17.2346 24.5527 17.2346H22.8339V13.3841ZM33.0661 20.6496C32.6704 21.4085 31.7986 21.8874 30.8589 21.8874C29.4678 21.8874 28.4971 21.0539 28.4971 19.7974C28.4971 18.5533 29.4368 17.838 31.1742 17.7322L33.0413 17.6203V17.0853C33.0413 16.2953 32.5282 15.8661 31.6131 15.8661C30.8589 15.8661 30.3086 16.258 30.1973 16.8552H28.8495C28.8928 15.5986 30.0675 14.6842 31.6564 14.6842C33.369 14.6842 34.4819 15.5862 34.4819 16.9858V21.8128H33.097V20.6496H33.0661ZM31.2609 20.7368C30.4633 20.7368 29.9563 20.3511 29.9563 19.7602C29.9563 19.1506 30.4448 18.796 31.3784 18.74L33.0415 18.6343V19.1817C33.0415 20.0898 32.2748 20.7368 31.2609 20.7368ZM39.0756 22.1922C38.4759 23.8903 37.7897 24.4502 36.3306 24.4502C36.2193 24.4502 35.8483 24.4377 35.7617 24.4129V23.2496C35.8545 23.2621 36.0832 23.2745 36.2007 23.2745C36.8623 23.2745 37.2332 22.9946 37.462 22.2668L37.598 21.8376L35.0631 14.7775H36.6273L38.3894 20.5065H38.4203L40.1823 14.7775H41.7033L39.0756 22.1922Z",fill:"black"})),h=()=>(0,a.createElement)("svg",{width:"52",height:"35",viewBox:"0 0 52 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"1.18945",y:"0.5",width:"49.6897",height:"34",rx:"2.5",fill:"url(#paint0_linear)",stroke:"#F1F1F1"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M19.7636 16.9816H26.6269C26.5657 15.4963 26.2201 13.9649 25.1717 12.9813C23.9229 11.8096 21.7355 11.375 19.781 11.375C17.7466 11.375 15.4968 11.8517 14.2414 13.1088C13.1588 14.1918 12.9248 15.9341 12.9248 17.4997C12.9248 19.1395 13.3827 21.0469 14.5571 22.1456C15.8059 23.3147 17.8294 23.625 19.781 23.625C21.6767 23.625 23.7302 23.2746 24.9718 22.1647C26.2099 21.0561 26.6377 19.1888 26.6377 17.4997V17.4918H19.7636V16.9816ZM27.0876 17.4921V23.3511H36.6352V23.3432C38.0322 23.267 39.1436 22.0059 39.1436 20.4575C39.1436 18.9084 38.0322 17.5664 36.6352 17.4895V17.4921H27.0876ZM36.5263 11.6203C37.8879 11.6203 38.9687 12.8032 38.9687 14.2957C38.9687 15.7087 37.9762 16.8626 36.7135 16.9816H27.0873V11.6118H36.2251C36.2813 11.6049 36.3468 11.6097 36.4108 11.6144C36.4508 11.6174 36.4901 11.6203 36.5263 11.6203Z",fill:"#FEFEFE"}),(0,a.createElement)("defs",null,(0,a.createElement)("linearGradient",{id:"paint0_linear",x1:"14.4385",y1:"-4.43215",x2:"2.09335",y2:"33.4202",gradientUnits:"userSpaceOnUse"},(0,a.createElement)("stop",{stopColor:"#222E72"}),(0,a.createElement)("stop",{offset:"0.591647",stopColor:"#40CBFF"}),(0,a.createElement)("stop",{offset:"1",stopColor:"#3CB792"})))),C=()=>(0,a.createElement)("svg",{width:"52",height:"35",viewBox:"0 0 52 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.878906",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M17.1461 17.7823C17.1461 19.9191 18.8322 21.576 21.0021 21.576C21.6154 21.576 22.141 21.456 22.7888 21.1524V19.4832C22.2192 20.0506 21.7145 20.2795 21.0685 20.2795C19.6332 20.2795 18.6146 19.2439 18.6146 17.7717C18.6146 16.376 19.6654 15.2751 21.0021 15.2751C21.6818 15.2751 22.1963 15.5163 22.7888 16.0929V14.4246C22.1633 14.1089 21.649 13.978 21.0357 13.978C18.8768 13.978 17.1461 15.6685 17.1461 17.7823ZM13.4892 16.0168C13.4892 16.4097 13.7401 16.6173 14.5953 16.9321C16.2163 17.5222 16.6967 18.0449 16.6967 19.2001C16.6967 20.6072 15.6577 21.5872 14.177 21.5872C13.0926 21.5872 12.304 21.1622 11.6475 20.2031L12.5682 19.3209C12.8962 19.9523 13.4437 20.2907 14.1234 20.2907C14.7593 20.2907 15.2298 19.8542 15.2298 19.2653C15.2298 18.96 15.0873 18.6979 14.8025 18.5128C14.6594 18.4252 14.3754 18.2949 13.8174 18.0988C12.479 17.6197 12.0201 17.1068 12.0201 16.1053C12.0201 14.9155 13.006 14.0224 14.2987 14.0224C15.0997 14.0224 15.8327 14.2948 16.4455 14.8282L15.6998 15.7997C15.3286 15.3857 14.9775 15.211 14.5507 15.211C13.9366 15.211 13.4892 15.559 13.4892 16.0168ZM9.68583 21.4123H11.1109V14.1424H9.68583V21.4123ZM6.77288 19.6035C6.32524 20.006 5.74353 20.1815 4.82283 20.1815H4.44039V15.374H4.82283C5.74353 15.374 6.30238 15.538 6.77288 15.9621C7.26569 16.3986 7.56205 17.0755 7.56205 17.7717C7.56205 18.4697 7.26569 19.1671 6.77288 19.6035ZM5.10834 14.1424H3.0166V21.4121H5.09733C6.20374 21.4121 7.0025 21.1525 7.70389 20.5728C8.53737 19.8867 9.03017 18.8523 9.03017 17.7824C9.03017 15.6369 7.41938 14.1424 5.10834 14.1424ZM32.1394 14.1424L34.0875 19.0255L36.061 14.1424H37.6057L34.4496 21.5988H33.6828L30.5826 14.1424H32.1394ZM38.2501 21.4122H42.2913V20.1815H39.6741V18.2191H42.1951V16.9878H39.6741V15.3742H42.2913V14.1424H38.2501V21.4122ZM44.6585 17.4893H45.0748C45.9851 17.4893 46.4674 17.0958 46.4674 16.365C46.4674 15.6575 45.9851 15.2876 45.0974 15.2876H44.6585V17.4893ZM45.3485 14.1422C46.9918 14.1422 47.9339 14.9275 47.9339 16.2886C47.9339 17.4016 47.3429 18.1325 46.2695 18.3496L48.5695 21.4121H46.817L44.8447 18.4917H44.6587V21.4121H43.2353V14.1422H45.3485Z",fill:"#1D1D1B"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M30.415 19.8859C31.5716 18.0862 31.0433 15.6953 29.235 14.5445C27.4267 13.3937 25.0236 13.9191 23.867 15.7188C22.7107 17.518 23.2391 19.9096 25.0474 21.0604C26.8557 22.2112 29.2587 21.6851 30.415 19.8859Z",fill:"url(#paint0_linear)"}),(0,a.createElement)("defs",null,(0,a.createElement)("linearGradient",{id:"paint0_linear",x1:"32.5088",y1:"16.6279",x2:"25.9795",y2:"12.4317",gradientUnits:"userSpaceOnUse"},(0,a.createElement)("stop",{stopColor:"#F6A000"}),(0,a.createElement)("stop",{offset:"0.623918",stopColor:"#E47E02"}),(0,a.createElement)("stop",{offset:"1",stopColor:"#D36002"})))),g=()=>(0,a.createElement)("svg",{width:"64",height:"40",viewBox:"0 0 64 40",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("path",{d:"M0 4C0 1.79086 1.79086 0 4 0H60C62.2091 0 64 1.79086 64 4V36C64 38.2091 62.2091 40 60 40H4C1.79086 40 0 38.2091 0 36V4Z",fill:"white"}),(0,a.createElement)("path",{d:"M12 11C12 8.79086 13.7909 7 16 7H48.8571C51.0663 7 52.8571 8.79086 52.8571 11V29C52.8571 31.2091 51.0663 33 48.8571 33H16C13.7909 33 12 31.2091 12 29V11Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M48.8571 9H16C14.8954 9 14 9.89543 14 11V29C14 30.1046 14.8954 31 16 31H48.8571C49.9617 31 50.8571 30.1046 50.8571 29V11C50.8571 9.89543 49.9617 9 48.8571 9ZM16 7C13.7909 7 12 8.79086 12 11V29C12 31.2091 13.7909 33 16 33H48.8571C51.0663 33 52.8571 31.2091 52.8571 29V11C52.8571 8.79086 51.0663 7 48.8571 7H16Z",fill:"#0F3365"}),(0,a.createElement)("path",{d:"M32.4285 7H48.857C51.0662 7 52.857 8.79086 52.857 11V29C52.857 31.2091 51.0662 33 48.857 33H32.4285V7Z",fill:"#0F3365"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M35.2142 28.1058H39.4694V22.1896H39.5169C40.3211 23.4859 41.9291 23.966 43.4183 23.966C47.083 23.966 49.0452 21.2899 49.0452 18.0698C49.0452 15.4361 47.1788 12.5715 43.7737 12.5715C41.8349 12.5715 40.0373 13.2615 39.1865 14.7878H39.139V12.8223H35.2142V28.1058ZM44.648 18.1539C44.648 19.8896 43.6784 21.0808 42.0716 21.0808C40.6524 21.0808 39.4691 19.8896 39.4691 18.2999C39.4691 16.6696 40.5103 15.4567 42.0716 15.4567C43.7259 15.4567 44.648 16.7105 44.648 18.1539Z",fill:"#FFFFFE"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M29.6351 12.8223H25.7804V14.7871H25.7341C24.8353 13.4496 23.369 12.5715 21.549 12.5715C17.7192 12.5715 15.9929 14.9962 15.9929 18.2372C15.9929 21.4584 18.0972 23.7145 21.4785 23.7145C23.1807 23.7145 24.5991 23.1307 25.615 21.8537H25.6629V22.4404C25.6629 24.573 24.3395 25.5971 21.8802 25.5971C20.1068 25.5971 19.0193 25.2629 17.7192 24.6984L17.5059 27.6676C18.4993 27.98 20.1781 28.3572 22.2111 28.3572C27.1762 28.3572 29.6351 26.9139 29.6351 22.4404V12.8223ZM20.3904 18.1742C20.3904 16.6902 21.218 15.4567 22.8022 15.4567C24.7169 15.4567 25.521 16.8146 25.521 18.0278C25.521 19.7012 24.3148 20.83 22.8022 20.83C21.5255 20.83 20.3904 19.8672 20.3904 18.1742Z",fill:"#D8232A"}),(0,a.createElement)("path",{d:"M4 1H60V-1H4V1ZM63 4V36H65V4H63ZM60 39H4V41H60V39ZM1 36V4H-1V36H1ZM4 39C2.34315 39 1 37.6569 1 36H-1C-1 38.7614 1.23858 41 4 41V39ZM63 36C63 37.6569 61.6569 39 60 39V41C62.7614 41 65 38.7614 65 36H63ZM60 1C61.6569 1 63 2.34315 63 4H65C65 1.23858 62.7614 -1 60 -1V1ZM4 -1C1.23858 -1 -1 1.23858 -1 4H1C1 2.34315 2.34315 1 4 1V-1Z",fill:"#DDDDDD"})),f=()=>(0,a.createElement)("svg",{width:"84",height:"58",viewBox:"0 0 84 58",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.5",y:"0.5",width:"83",height:"57",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M40.4322 34.9714V28.4303V28.429H43.9665C45.4236 28.4299 46.6482 27.9715 47.6403 27.0538C48.6429 26.1828 49.2035 24.9306 49.175 23.6253C49.1948 22.3273 48.6353 21.0844 47.6403 20.2162C46.6569 19.2935 45.3343 18.7901 43.9665 18.8178H38.293V34.9714H40.4322ZM40.4322 26.4454V20.8065V20.8052H44.0196C44.8192 20.7834 45.59 21.0956 46.1362 21.6624C46.6859 22.1807 46.996 22.8927 46.996 23.6363C46.996 24.3799 46.6859 25.0919 46.1362 25.6102C45.5833 26.1651 44.8149 26.4683 44.0196 26.4454H40.4322Z",fill:"#5F6368"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M57.8487 24.7879C56.9337 23.9682 55.6856 23.5583 54.1045 23.5583C52.0733 23.5583 50.5396 24.2801 49.5032 25.7236L51.3873 26.8746C52.0835 25.8968 53.0291 25.4079 54.2241 25.4079C54.9859 25.3992 55.7231 25.6693 56.2888 26.1644C56.8529 26.6168 57.1773 27.2912 57.1724 28.0011V28.4754C56.3504 28.0243 55.3043 27.7987 54.034 27.7987C52.5459 27.8005 51.3563 28.139 50.4652 28.8144C49.5741 29.4898 49.1285 30.3993 49.1285 31.543C49.1091 32.5844 49.5748 33.5787 50.3961 34.2496C51.2411 34.9714 52.2912 35.3323 53.5464 35.3323C55.0168 35.3323 56.1949 34.7007 57.0807 33.4376H57.1738V34.9714H59.2199V28.1596C59.2208 26.7315 58.7638 25.6076 57.8487 24.7879ZM52.0464 32.9414C51.5983 32.6281 51.334 32.1239 51.3369 31.5881C51.3369 30.9862 51.6279 30.4848 52.2138 30.0723C52.794 29.6659 53.5186 29.4627 54.3876 29.4627C55.5808 29.4627 56.5108 29.7205 57.1778 30.236C57.1778 31.1073 56.8235 31.8665 56.1149 32.5135C55.4766 33.1327 54.6113 33.4813 53.7086 33.4827C53.1068 33.4937 52.5195 33.3024 52.0464 32.9414Z",fill:"#5F6368"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M70.9654 23.9192L63.8223 39.8434H61.6141L64.2648 34.2716L59.5679 23.9192H61.8931L65.2879 31.8588H65.3344L68.6362 23.9192H70.9654Z",fill:"#5F6368"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M31.7877 27.0203C31.7885 26.3879 31.7333 25.7566 31.6229 25.1333H22.6011V28.7074H27.7684C27.5547 29.8609 26.8645 30.8797 25.8577 31.5275V33.8475H28.9416C30.7473 32.2325 31.7877 29.8442 31.7877 27.0203Z",fill:"#4285F4"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M22.6012 36.0889C25.1828 36.0889 27.3566 35.2666 28.9417 33.8488L25.8578 31.5288C24.9995 32.0933 23.894 32.4156 22.6012 32.4156C20.1059 32.4156 17.988 30.7838 17.2306 28.585H14.0537V30.9759C15.6776 34.1104 18.9848 36.0887 22.6012 36.0889Z",fill:"#34A853"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M17.2307 28.585C16.8303 27.4328 16.8303 26.185 17.2307 25.0328V22.6419H14.0538C12.6956 25.2637 12.6956 28.3541 14.0538 30.9759L17.2307 28.585Z",fill:"#FBBC04"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M22.6012 21.2022C23.9655 21.1806 25.2837 21.6806 26.271 22.5942L29.0015 19.9456C27.2701 18.368 24.9764 17.502 22.6012 17.5289C18.9848 17.529 15.6776 19.5074 14.0537 22.6419L17.2306 25.0328C17.988 22.834 20.1059 21.2022 22.6012 21.2022Z",fill:"#EA4335"})),y=()=>(0,a.createElement)("svg",{width:"51",height:"35",viewBox:"0 0 51 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.878906",y:"0.5",width:"49",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M33.473 17.5973H33.494H33.5346H33.5752H33.6158H33.6564H33.697H33.7376H33.7782H33.8188H33.8594H33.9H33.9406H33.9812H34.0218H34.0624H34.103H34.1436H34.1842H34.2248H34.2654H34.306H34.3466H34.3872H34.4278H34.4684H34.509H34.5496H34.5902H34.6308H34.6714H34.712H34.7527H34.7932H34.8338H34.8745H34.915H34.9556H34.9963H35.0368H35.0774H35.1181H35.1586H35.1992H35.2399H35.2805H35.321H35.3617H35.4023H35.4428H35.4835H35.5241H35.5646H35.6053H35.6459H35.6864H35.7271H35.7677H35.8083H35.8489H35.8895H35.9233L35.9301 17.5975C35.9426 17.5978 35.9563 17.5984 35.9707 17.5991C35.9837 17.5999 35.9973 17.6008 36.0113 17.6018C36.0246 17.6028 36.0383 17.604 36.0519 17.6052C36.0656 17.6065 36.0792 17.6079 36.0925 17.6093C36.1064 17.6109 36.1201 17.6126 36.1331 17.6143C36.1476 17.6163 36.1613 17.6183 36.1737 17.6205C36.1826 17.622 36.1909 17.6235 36.1982 17.6251L36.2143 17.6288C36.2279 17.632 36.2414 17.6354 36.2549 17.6392C36.2685 17.643 36.282 17.647 36.2955 17.6513C36.3091 17.6557 36.3227 17.6603 36.3361 17.6653C36.3497 17.6702 36.3632 17.6755 36.3767 17.681C36.3903 17.6866 36.4039 17.6926 36.4173 17.6987C36.431 17.705 36.4445 17.7116 36.4579 17.7185C36.4716 17.7254 36.4851 17.7328 36.4985 17.7403C36.5122 17.7481 36.5257 17.7562 36.5391 17.7646C36.5528 17.7732 36.5664 17.7821 36.5797 17.7913C36.5934 17.8008 36.607 17.8105 36.6203 17.8206C36.634 17.8311 36.6476 17.8419 36.6609 17.8531C36.6747 17.8646 36.6882 17.8766 36.7015 17.8889C36.7154 17.9017 36.7289 17.9148 36.7421 17.9284C36.7561 17.9426 36.7695 17.9574 36.7827 17.9725C36.7967 17.9885 36.8102 18.005 36.8233 18.0219C36.8374 18.0401 36.8509 18.0587 36.8639 18.0779C36.8781 18.0989 36.8917 18.1205 36.9045 18.1426C36.919 18.1675 36.9325 18.1932 36.9451 18.2196C36.96 18.2508 36.9736 18.283 36.9857 18.3161C37.002 18.3606 37.0156 18.4067 37.0263 18.4544C37.0449 18.5369 37.0549 18.6238 37.0549 18.7145C37.0549 18.8057 37.0449 18.893 37.0263 18.9758C37.0156 19.0235 37.002 19.0698 36.9857 19.1143C36.9736 19.1476 36.96 19.1798 36.9451 19.2111C36.9325 19.2375 36.919 19.2632 36.9045 19.2882C36.8917 19.3103 36.8782 19.3319 36.8639 19.3529C36.8509 19.3721 36.8374 19.3908 36.8233 19.409C36.8102 19.4259 36.7967 19.4423 36.7827 19.4584C36.7695 19.4734 36.756 19.4881 36.7421 19.5024C36.7289 19.516 36.7153 19.5291 36.7015 19.5419C36.6882 19.5541 36.6747 19.566 36.6609 19.5775C36.6476 19.5886 36.6341 19.5995 36.6203 19.6099C36.607 19.62 36.5934 19.6297 36.5797 19.6391C36.5664 19.6483 36.5528 19.6572 36.5391 19.6657C36.5257 19.674 36.5122 19.6821 36.4985 19.6898C36.4851 19.6974 36.4716 19.7046 36.4579 19.7116C36.4445 19.7184 36.431 19.7249 36.4173 19.7312C36.4039 19.7373 36.3903 19.7432 36.3767 19.7488C36.3632 19.7542 36.3497 19.7595 36.3361 19.7644C36.3227 19.7692 36.3091 19.7738 36.2955 19.7781C36.282 19.7824 36.2685 19.7863 36.2549 19.7901C36.2414 19.7937 36.2279 19.7971 36.2143 19.8003L36.1982 19.8039C36.1909 19.8056 36.1826 19.8073 36.1737 19.8089C36.1613 19.8111 36.1476 19.8132 36.1331 19.8152C36.1201 19.8169 36.1064 19.8186 36.0925 19.8202C36.0792 19.8217 36.0656 19.823 36.0519 19.8243C36.0383 19.8255 36.0246 19.8266 36.0113 19.8276C35.9973 19.8286 35.9837 19.8295 35.9707 19.8301C35.9563 19.8309 35.9426 19.8314 35.9301 19.8317L35.9083 19.832H35.8895H35.8489H35.8083H35.7677H35.7271H35.6864H35.6459H35.6053H35.5646H35.5241H35.4835H35.4428H35.4023H35.3617H35.321H35.2805H35.2399H35.1992H35.1586H35.1181H35.0774H35.0368H34.9963H34.9556H34.915H34.8745H34.8338H34.7932H34.7527H34.712H34.6714H34.6308H34.5902H34.5496H34.509H34.4684H34.4278H34.3872H34.3466H34.306H34.2654H34.2248H34.1842H34.1436H34.103H34.0624H34.0218H33.9812H33.9406H33.9H33.8594H33.8188H33.7782H33.7376H33.697H33.6564H33.6158H33.5752H33.5346H33.494H33.473V17.5973ZM36.7423 15.0681C36.7586 15.1431 36.7673 15.2226 36.7673 15.3062C36.7673 15.3898 36.7586 15.4691 36.7423 15.5441C36.7318 15.5923 36.7181 15.6385 36.7016 15.6829C36.6896 15.7153 36.676 15.7467 36.661 15.7769C36.6485 15.8023 36.6349 15.8269 36.6204 15.8508C36.6076 15.8718 36.594 15.8923 36.5798 15.9122C36.5668 15.9303 36.5533 15.9478 36.5392 15.9649C36.5261 15.9807 36.5126 15.9961 36.4986 16.011C36.4855 16.0251 36.472 16.0387 36.4581 16.0518C36.4448 16.0644 36.4313 16.0765 36.4174 16.0883C36.4042 16.0996 36.3906 16.1104 36.3768 16.121C36.3636 16.1311 36.35 16.1409 36.3363 16.1504C36.3229 16.1596 36.3094 16.1684 36.2956 16.1769C36.2823 16.1852 36.2687 16.1931 36.255 16.2007C36.2417 16.2082 36.2281 16.2154 36.2145 16.2222C36.2011 16.2289 36.1875 16.2353 36.1738 16.2415C36.1604 16.2475 36.1469 16.2532 36.1332 16.2586C36.1198 16.2639 36.1063 16.269 36.0926 16.2737C36.0792 16.2784 36.0657 16.2829 36.0521 16.287C36.0386 16.2911 36.0251 16.295 36.0114 16.2985C35.998 16.3021 35.9845 16.3053 35.9708 16.3083C35.9574 16.3113 35.9439 16.3139 35.9303 16.3164L35.9204 16.3182C35.9125 16.3195 35.902 16.3211 35.8896 16.3227C35.8777 16.3242 35.8639 16.3258 35.849 16.3273C35.8362 16.3286 35.8225 16.3299 35.8085 16.3311C35.7952 16.3322 35.7815 16.3332 35.7678 16.334C35.7542 16.3349 35.7405 16.3357 35.7272 16.3362C35.7132 16.3368 35.6995 16.3372 35.6867 16.3372L35.6802 16.3373H35.6461H35.6054H35.5648H35.5243H35.4836H35.443H35.4025H35.3619H35.3212H35.2807H35.2401H35.1994H35.1589H35.1183H35.0776H35.037H34.9965H34.9559H34.9152H34.8747H34.8341H34.7934H34.7529H34.7123H34.6716H34.6311H34.5905H34.5499H34.5092H34.4687H34.4281H34.3874H34.3469H34.3063H34.2657H34.2251H34.1845H34.1439H34.1033H34.0627H34.0221H33.9814H33.9409H33.9003H33.8597H33.8191H33.7785H33.7379H33.6973H33.6567H33.6161H33.5754H33.5349H33.4943H33.473V14.2751H33.4943H33.5349H33.5754H33.6161H33.6567H33.6973H33.7379H33.7785H33.8191H33.8597H33.9003H33.9409H33.9814H34.0221H34.0627H34.1033H34.1439H34.1845H34.2251H34.2657H34.3063H34.3469H34.3874H34.4281H34.4687H34.5092H34.5499H34.5905H34.6311H34.6716H34.7123H34.7529H34.7934H34.8341H34.8747H34.9152H34.9559H34.9965H35.037H35.0776H35.1183H35.1589H35.1994H35.2401H35.2807H35.3212H35.3619H35.4025H35.443H35.4836H35.5243H35.5648H35.6054H35.6461H35.6867H35.7037L35.7272 14.2759C35.7405 14.2764 35.7542 14.2772 35.7678 14.2781C35.7815 14.279 35.7952 14.28 35.8085 14.2811C35.8225 14.2822 35.8362 14.2835 35.849 14.2848C35.8639 14.2862 35.8777 14.2877 35.8896 14.2891C35.902 14.2905 35.9125 14.2919 35.9204 14.293L35.9303 14.2948C35.9439 14.2972 35.9574 14.3 35.9708 14.303C35.9845 14.306 35.998 14.3093 36.0114 14.3129C36.0251 14.3165 36.0386 14.3203 36.0521 14.3245C36.0657 14.3287 36.0792 14.3331 36.0926 14.3378C36.1063 14.3427 36.1198 14.3477 36.1332 14.3531C36.1469 14.3585 36.1604 14.3643 36.1738 14.3703C36.1875 14.3765 36.2011 14.3829 36.2145 14.3896C36.2281 14.3965 36.2417 14.4036 36.255 14.4111C36.2687 14.4187 36.2823 14.4267 36.2956 14.435C36.3094 14.4435 36.3229 14.4523 36.3363 14.4615C36.35 14.4709 36.3636 14.4808 36.3768 14.491C36.3906 14.5015 36.4042 14.5124 36.4174 14.5237C36.4313 14.5355 36.4448 14.5476 36.4581 14.5602C36.472 14.5733 36.4855 14.5869 36.4986 14.601C36.5126 14.6159 36.5261 14.6313 36.5392 14.6471C36.5533 14.6642 36.5668 14.6818 36.5798 14.6999C36.594 14.7197 36.6076 14.7402 36.6204 14.7613C36.6349 14.7851 36.6485 14.8097 36.661 14.8351C36.676 14.8654 36.6896 14.8968 36.7016 14.9292C36.7181 14.9736 36.7318 15.0199 36.7423 15.0681ZM41.7774 4.375H41.7941L41.794 25.5542C41.794 25.6807 41.7882 25.8059 41.7774 25.9296C41.7679 26.0385 41.7543 26.1462 41.7368 26.2526C41.725 26.324 41.7115 26.3948 41.6962 26.465C41.6838 26.5221 41.6703 26.5789 41.6556 26.6351C41.6429 26.6836 41.6293 26.7318 41.615 26.7796C41.602 26.8228 41.5886 26.8658 41.5744 26.9085C41.5614 26.9472 41.5478 26.9855 41.5338 27.0237C41.5207 27.0593 41.5071 27.0946 41.4932 27.1297C41.48 27.1627 41.4665 27.1954 41.4526 27.228C41.4394 27.2588 41.4258 27.2895 41.4119 27.3199C41.3987 27.3489 41.3852 27.3778 41.3714 27.4064C41.3581 27.4339 41.3446 27.4612 41.3307 27.4883C41.3175 27.5143 41.3039 27.5402 41.2901 27.5659C41.2769 27.5906 41.2632 27.615 41.2495 27.6394C41.2362 27.663 41.2227 27.6865 41.2089 27.7098C41.1956 27.7325 41.182 27.755 41.1683 27.7775C41.1549 27.7993 41.1414 27.8211 41.1277 27.8427C41.1144 27.8635 41.1007 27.8842 41.0871 27.9049C41.0737 27.9249 41.0601 27.9448 41.0465 27.9647C41.0331 27.9841 41.0195 28.0036 41.0058 28.0228C40.9924 28.0416 40.979 28.0603 40.9653 28.0789C40.9519 28.097 40.9383 28.1148 40.9246 28.1327C40.9112 28.1503 40.8977 28.1678 40.884 28.1852C40.8706 28.2022 40.8571 28.2191 40.8434 28.2359C40.83 28.2523 40.8164 28.2686 40.8028 28.2849C40.7893 28.3009 40.7759 28.3171 40.7622 28.3329C40.7488 28.3484 40.7352 28.3637 40.7216 28.379C40.7082 28.3941 40.6946 28.4091 40.681 28.424C40.6675 28.4387 40.6541 28.4534 40.6404 28.4679C40.627 28.4821 40.6134 28.4961 40.5998 28.5102C40.5863 28.5241 40.5729 28.5382 40.5592 28.5519C40.5458 28.5654 40.5321 28.5786 40.5186 28.5919C40.5051 28.605 40.4916 28.6182 40.4779 28.6313C40.4645 28.644 40.451 28.6567 40.4374 28.6693C40.4239 28.6818 40.4103 28.6942 40.3967 28.7065C40.3833 28.7187 40.3698 28.7308 40.3561 28.7428C40.3427 28.7546 40.3291 28.7664 40.3155 28.7781C40.302 28.7896 40.2886 28.8012 40.2749 28.8126C40.2615 28.8239 40.2479 28.8349 40.2343 28.846C40.2208 28.857 40.2073 28.8681 40.1937 28.8789C40.1803 28.8896 40.1667 28.9001 40.1531 28.9106C40.1396 28.9211 40.1261 28.9316 40.1125 28.942C40.0991 28.9521 40.0854 28.9621 40.0719 28.9721C40.0583 28.9821 40.0449 28.9921 40.0313 29.002C40.0178 29.0117 40.0042 29.0211 39.9907 29.0306C39.9771 29.0401 39.9637 29.0496 39.95 29.059C39.9366 29.0682 39.923 29.0772 39.9095 29.0862C39.896 29.0953 39.8825 29.1043 39.8688 29.1132C39.8554 29.122 39.8418 29.1306 39.8282 29.1392C39.8147 29.1477 39.8012 29.1563 39.7876 29.1647C39.7742 29.1731 39.7606 29.1813 39.747 29.1895L39.7064 29.2137C39.6929 29.2216 39.6794 29.2295 39.6658 29.2373C39.6524 29.2451 39.6388 29.2526 39.6252 29.2602C39.6117 29.2678 39.5982 29.2754 39.5846 29.2828C39.5711 29.2901 39.5575 29.2972 39.544 29.3044C39.5304 29.3115 39.517 29.3189 39.5034 29.326C39.4899 29.3329 39.4763 29.3395 39.4628 29.3463C39.4492 29.3531 39.4358 29.36 39.4221 29.3666C39.4087 29.3732 39.3951 29.3796 39.3816 29.3861L39.3409 29.4052L39.3003 29.4237C39.2868 29.4298 39.2733 29.4357 39.2597 29.4416C39.2462 29.4475 39.2327 29.4536 39.2191 29.4593C39.2057 29.4651 39.1921 29.4704 39.1785 29.476C39.165 29.4816 39.1515 29.4873 39.1379 29.4927C39.1244 29.4981 39.1109 29.5032 39.0973 29.5085C39.0838 29.5137 39.0703 29.5189 39.0567 29.524L39.0161 29.5391C39.0026 29.544 38.989 29.5487 38.9755 29.5535C38.9619 29.5583 38.9485 29.5632 38.9349 29.5679C38.9214 29.5724 38.9078 29.5767 38.8942 29.5811L38.8537 29.5944C38.8402 29.5987 38.8266 29.6028 38.813 29.607L38.7724 29.6192C38.7589 29.6232 38.7454 29.6273 38.7318 29.6311C38.7184 29.635 38.7048 29.6385 38.6912 29.6422C38.6777 29.6459 38.6642 29.6497 38.6506 29.6533L38.61 29.6636L38.5694 29.6735L38.5288 29.6833C38.5153 29.6864 38.5017 29.6892 38.4882 29.6922C38.4746 29.6952 38.4611 29.6983 38.4476 29.7011L38.407 29.7093L38.3663 29.7171C38.3528 29.7196 38.3393 29.7224 38.3257 29.7248C38.3123 29.7272 38.2987 29.7293 38.2851 29.7316L38.2445 29.7383L38.2039 29.7445L38.1633 29.7502C38.1498 29.7521 38.1363 29.7542 38.1227 29.7559C38.1092 29.7577 38.0956 29.759 38.0821 29.7606C38.0686 29.7622 38.0551 29.7638 38.0415 29.7653C38.028 29.7667 38.0145 29.7682 38.0009 29.7695C37.9874 29.7709 37.9738 29.772 37.9603 29.7732C37.9467 29.7744 37.9332 29.7757 37.9197 29.7768C37.9062 29.7778 37.8926 29.7787 37.8791 29.7796L37.8384 29.7822C37.8249 29.783 37.8114 29.784 37.7978 29.7847C37.7844 29.7854 37.7708 29.7857 37.7572 29.7863L37.7166 29.7878L37.676 29.7889C37.6625 29.7892 37.649 29.7892 37.6354 29.7894L37.5948 29.7899L37.5864 29.79H37.5542H37.5136H37.473H37.4324H37.3917H37.3512H37.3105H37.2699H37.2293H37.1887H37.1481H37.1075H37.0669H37.0263H36.9857H36.9451H36.9045H36.8638H36.8233H36.7826H36.742H36.7014H36.6608H36.6202H36.5796H36.539H36.4984H36.4578H36.4172H36.3766H36.3359H36.2954H36.2547H36.2141H36.1735H36.1329H36.0923H36.0517H36.0111H35.9705H35.9299H35.8893H35.8487H35.808H35.7675H35.7268H35.6862H35.6456H35.605H35.5644H35.5238H35.4832H35.4426H35.402H35.3614H35.3208H35.2801H35.2396H35.1989H35.1583H35.1177H35.0771H35.0365H34.9959H34.9553H34.9147H34.8741H34.8335H34.7929H34.7522H34.7117H34.671H34.6304H34.5898H34.5492H34.5086H34.468H34.4274H34.3868H34.3462H34.3056H34.265H34.2243H34.1838H34.1431H34.1025H34.0619H34.0213H33.9807H33.9401H33.8995H33.8589H33.8183H33.7777H33.7371H33.6964H33.6559H33.6152H33.5746H33.534H33.4934H33.4528H33.4122H33.3716H33.331H33.2904H33.2498H33.2092H33.1685H33.128H33.0873H33.0467H33.0061H32.9655H32.9249H32.8843H32.8437H32.8031H32.7625H32.7219H32.6813H32.6406H32.6H32.5594H32.5188H32.4782H32.4376H32.397H32.3564H32.3158H32.2752H32.2346H32.194H32.1534H32.1127H32.0721H32.0315H31.9909H31.9503H31.9097H31.8691H31.8285H31.7879H31.7473H31.7067H31.666H31.6255H31.5848H31.5442H31.5036H31.416V21.1545H31.5036H31.5442H31.5848H31.6255H31.666H31.7067H31.7473H31.7879H31.8285H31.8691H31.9097H31.9503H31.9909H32.0315H32.0721H32.1127H32.1534H32.194H32.2346H32.2752H32.3158H32.3564H32.397H32.4376H32.4782H32.5188H32.5594H32.6H32.6406H32.6813H32.7219H32.7625H32.8031H32.8437H32.8843H32.9249H32.9655H33.0061H33.0467H33.0873H33.128H33.1685H33.2092H33.2498H33.2904H33.331H33.3716H33.4122H33.4528H33.4934H33.534H33.5746H33.6152H33.6559H33.6964H33.7371H33.7777H33.8183H33.8589H33.8995H33.9401H33.9807H34.0213H34.0619H34.1025H34.1431H34.1838H34.2243H34.265H34.3056H34.3462H34.3868H34.4274H34.468H34.5086H34.5492H34.5898H34.6304H34.671H34.7117H34.7522H34.7929H34.8335H34.8741H34.9147H34.9553H34.9959H35.0365H35.0771H35.1177H35.1583H35.1989H35.2396H35.2801H35.3208H35.3614H35.402H35.4426H35.4832H35.5238H35.5644H35.605H35.6456H35.6862H35.7268H35.7675H35.808H35.8487H35.8893H35.9299H35.9705H36.0111H36.0517H36.0923H36.1329H36.1735H36.2141H36.2547H36.2954H36.3359H36.3766H36.4172H36.4578H36.4984H36.539H36.5796H36.6202H36.6608H36.7014H36.742H36.7826H36.8233H36.8638H36.9045H36.9451H36.9857H37.0263H37.0669H37.1075H37.1481H37.1887H37.2293H37.2699H37.3105H37.3512H37.3917H37.4324H37.473H37.5136H37.5542H37.5948H37.6354H37.676H37.7166H37.7572H37.7978H37.8384H37.8791H37.9197H37.9412L37.9603 21.1543L38.0009 21.154L38.0415 21.1532C38.0551 21.1528 38.0686 21.1526 38.0821 21.1521C38.0957 21.1517 38.1092 21.151 38.1227 21.1504L38.1633 21.1485L38.2039 21.146L38.2445 21.1432L38.2851 21.14L38.3257 21.1363C38.3393 21.135 38.3529 21.1337 38.3663 21.1323C38.3799 21.1309 38.3934 21.1293 38.407 21.1277L38.4476 21.1227C38.4611 21.1209 38.4747 21.1192 38.4882 21.1173C38.5018 21.1154 38.5153 21.1133 38.5288 21.1113C38.5424 21.1092 38.5559 21.1072 38.5694 21.105L38.61 21.0981L38.6506 21.0908C38.6642 21.0882 38.6778 21.0858 38.6912 21.0831C38.7048 21.0804 38.7183 21.0775 38.7318 21.0746L38.7724 21.0658C38.786 21.0627 38.7996 21.0597 38.813 21.0565C38.8267 21.0533 38.8402 21.0498 38.8537 21.0465C38.8672 21.0431 38.8808 21.0396 38.8942 21.0361C38.9078 21.0325 38.9214 21.0288 38.9349 21.0251C38.9485 21.0213 38.962 21.0174 38.9755 21.0134C38.9891 21.0095 39.0026 21.0054 39.0161 21.0013L39.0567 20.9885C39.0703 20.9841 39.0838 20.9796 39.0973 20.975C39.1109 20.9704 39.1245 20.9658 39.1379 20.961C39.1515 20.9562 39.1651 20.9514 39.1785 20.9464C39.1922 20.9413 39.2056 20.9361 39.2191 20.9308C39.2327 20.9256 39.2463 20.9202 39.2597 20.9147C39.2733 20.9092 39.2869 20.9037 39.3003 20.898C39.314 20.8923 39.3275 20.8864 39.3409 20.8804C39.3546 20.8744 39.3681 20.8682 39.3816 20.862C39.3951 20.8557 39.4087 20.8493 39.4221 20.8429C39.4357 20.8363 39.4493 20.8297 39.4628 20.823C39.4764 20.8161 39.4899 20.8091 39.5034 20.802C39.517 20.7949 39.5305 20.7875 39.544 20.7801C39.5576 20.7727 39.5712 20.7651 39.5846 20.7574C39.5982 20.7496 39.6118 20.7417 39.6252 20.7337C39.6388 20.7256 39.6524 20.7174 39.6658 20.709C39.6795 20.7004 39.693 20.6917 39.7064 20.683C39.7201 20.674 39.7336 20.6649 39.747 20.6558C39.7607 20.6464 39.7742 20.6369 39.7876 20.6274C39.8013 20.6176 39.8148 20.6077 39.8282 20.5976C39.8419 20.5874 39.8555 20.577 39.8688 20.5665C39.8825 20.5558 39.8961 20.5449 39.9095 20.5339C39.9232 20.5226 39.9367 20.5112 39.95 20.4996C39.9638 20.4878 39.9773 20.4757 39.9907 20.4636C40.0044 20.451 40.0179 20.4383 40.0313 20.4255C40.045 20.4123 40.0586 20.3989 40.0719 20.3854C40.0857 20.3714 40.0992 20.3572 40.1125 20.3428C40.1263 20.328 40.1398 20.3129 40.1531 20.2977C40.1669 20.2819 40.1805 20.2658 40.1937 20.2496C40.2075 20.2327 40.2211 20.2156 40.2343 20.1983C40.2481 20.1801 40.2618 20.1618 40.2749 20.1432C40.2889 20.1235 40.3023 20.1034 40.3155 20.0831C40.3295 20.0616 40.343 20.0399 40.3561 20.0179C40.3702 19.9942 40.3837 19.9701 40.3967 19.9458C40.4109 19.9193 40.4245 19.8926 40.4374 19.8654C40.4517 19.835 40.4652 19.8041 40.4779 19.7728C40.4926 19.7368 40.5061 19.7004 40.5186 19.6634C40.5338 19.6177 40.5473 19.5711 40.5592 19.5237C40.5765 19.4544 40.5901 19.3833 40.5998 19.3104C40.6116 19.222 40.6178 19.1312 40.6178 19.0378C40.6178 18.9469 40.6116 18.8586 40.5998 18.7728C40.5901 18.7024 40.5765 18.6337 40.5592 18.5668C40.5473 18.5213 40.5338 18.4766 40.5186 18.4327C40.5061 18.3968 40.4926 18.3613 40.4779 18.3266C40.4653 18.2964 40.4517 18.2667 40.4374 18.2375C40.4245 18.2112 40.4109 18.1853 40.3967 18.1598C40.3837 18.1363 40.3702 18.113 40.3561 18.0901C40.3431 18.0689 40.3295 18.0479 40.3155 18.0273C40.3024 18.0078 40.2889 17.9884 40.2749 17.9694C40.2618 17.9514 40.2482 17.9337 40.2343 17.9163C40.2211 17.8995 40.2075 17.883 40.1937 17.8667C40.1804 17.851 40.1669 17.8355 40.1531 17.8202C40.1398 17.8055 40.1263 17.791 40.1125 17.7767C40.0992 17.7628 40.0856 17.7492 40.0719 17.7357C40.0586 17.7226 40.045 17.7097 40.0313 17.697C40.0179 17.6846 40.0044 17.6724 39.9907 17.6604C39.9773 17.6486 39.9638 17.637 39.95 17.6255C39.9367 17.6143 39.9232 17.6033 39.9095 17.5924C39.8961 17.5817 39.8825 17.5712 39.8688 17.5608C39.8554 17.5507 39.8419 17.5407 39.8282 17.5307C39.8148 17.5211 39.8013 17.5115 39.7876 17.502C39.7742 17.4928 39.7607 17.4836 39.747 17.4745C39.7336 17.4657 39.7201 17.4569 39.7064 17.4482C39.693 17.4398 39.6795 17.4314 39.6658 17.4231C39.6524 17.415 39.6389 17.407 39.6252 17.3991C39.6118 17.3913 39.5982 17.3837 39.5846 17.3761C39.5712 17.3687 39.5576 17.3614 39.544 17.3541C39.5305 17.347 39.517 17.3399 39.5034 17.333C39.4899 17.3261 39.4764 17.3193 39.4628 17.3126C39.4493 17.3061 39.4358 17.2995 39.4221 17.2931C39.4087 17.2868 39.3951 17.2807 39.3816 17.2746C39.3681 17.2685 39.3546 17.2626 39.3409 17.2567C39.3275 17.251 39.3139 17.2453 39.3003 17.2396C39.2868 17.2341 39.2734 17.2285 39.2597 17.2231C39.2463 17.2178 39.2327 17.2126 39.2191 17.2074C39.2057 17.2023 39.1921 17.1974 39.1785 17.1925C39.165 17.1876 39.1515 17.1828 39.1379 17.1781C39.1244 17.1734 39.1109 17.1688 39.0973 17.1642C39.0838 17.1598 39.0703 17.1554 39.0567 17.1511C39.0432 17.1468 39.0296 17.1427 39.0161 17.1386L38.9755 17.1266C38.962 17.1227 38.9485 17.1188 38.9349 17.1151C38.9214 17.1114 38.9078 17.1078 38.8942 17.1043C38.8808 17.1008 38.8672 17.0974 38.8537 17.094C38.8402 17.0906 38.8266 17.0873 38.813 17.0841C38.7996 17.0809 38.786 17.0779 38.7724 17.0748C38.759 17.0718 38.7454 17.069 38.7318 17.0661C38.7183 17.0633 38.7048 17.0604 38.6912 17.0577L38.6506 17.0499L38.61 17.0426C38.5965 17.0403 38.583 17.0379 38.5694 17.0357L38.5288 17.0292C38.5153 17.0272 38.5017 17.0252 38.4882 17.0233L38.4476 17.0178L38.407 17.0126L38.3663 17.008L38.3257 17.0037L38.2851 16.9999L38.2445 16.9965L38.207 16.9936L38.207 16.9446L38.2445 16.9387L38.2851 16.932C38.2987 16.9296 38.3123 16.9273 38.3257 16.9248L38.3663 16.9169C38.38 16.9142 38.3935 16.9114 38.407 16.9085L38.4476 16.8996C38.4611 16.8965 38.4747 16.8934 38.4882 16.8902C38.5018 16.8869 38.5153 16.8834 38.5288 16.8799C38.5424 16.8764 38.5559 16.8728 38.5694 16.8691C38.583 16.8654 38.5965 16.8616 38.61 16.8577C38.6236 16.8538 38.6372 16.8498 38.6506 16.8457C38.6642 16.8416 38.6778 16.8373 38.6912 16.833C38.7049 16.8286 38.7184 16.824 38.7318 16.8195C38.7455 16.8148 38.759 16.81 38.7724 16.8052C38.7861 16.8003 38.7996 16.7954 38.813 16.7903C38.8267 16.7852 38.8402 16.7799 38.8537 16.7746C38.8673 16.7692 38.8808 16.7637 38.8942 16.7581C38.9079 16.7524 38.9214 16.7467 38.9349 16.7408C38.9485 16.7348 38.962 16.7287 38.9755 16.7225C38.9891 16.7162 39.0026 16.7098 39.0161 16.7033C39.0297 16.6967 39.0433 16.6899 39.0567 16.6831C39.0703 16.6761 39.0839 16.6691 39.0973 16.662C39.111 16.6547 39.1245 16.6472 39.1379 16.6398C39.1516 16.6321 39.1651 16.6243 39.1785 16.6165C39.1922 16.6084 39.2057 16.6003 39.2191 16.592C39.2328 16.5836 39.2463 16.575 39.2597 16.5664C39.2734 16.5575 39.2869 16.5485 39.3003 16.5394C39.314 16.53 39.3276 16.5206 39.3409 16.511C39.3547 16.5012 39.3682 16.4912 39.3816 16.4812C39.3953 16.4708 39.4088 16.4604 39.4221 16.4498C39.4359 16.4389 39.4494 16.4279 39.4628 16.4167C39.4765 16.4052 39.49 16.3935 39.5034 16.3817C39.5172 16.3695 39.5307 16.3571 39.544 16.3446C39.5577 16.3317 39.5713 16.3186 39.5846 16.3054C39.5984 16.2917 39.6119 16.2779 39.6252 16.2639C39.639 16.2493 39.6526 16.2345 39.6658 16.2195C39.6796 16.2039 39.6932 16.1881 39.7064 16.1721C39.7203 16.1554 39.7338 16.1385 39.747 16.1214C39.7609 16.1033 39.7745 16.085 39.7876 16.0665C39.8016 16.0469 39.8151 16.027 39.8282 16.007C39.8422 15.9856 39.8558 15.9639 39.8688 15.942C39.8829 15.9183 39.8965 15.8942 39.9095 15.8699C39.9237 15.8432 39.9372 15.8162 39.95 15.7888C39.9645 15.7581 39.978 15.7268 39.9907 15.6953C40.0054 15.6586 40.0189 15.6214 40.0313 15.5836C40.0467 15.5362 40.0603 15.488 40.0719 15.4393C40.0906 15.3601 40.1042 15.2793 40.1125 15.1971C40.1191 15.1322 40.1225 15.0665 40.1225 15.0001C40.1225 14.93 40.1191 14.8616 40.1125 14.795C40.1041 14.7098 40.0905 14.6275 40.0719 14.5481C40.0603 14.4985 40.0467 14.45 40.0313 14.4027C40.0189 14.3648 40.0054 14.3277 39.9907 14.2913C39.978 14.26 39.9644 14.2292 39.95 14.199C39.9372 14.172 39.9236 14.1455 39.9095 14.1194C39.8965 14.0955 39.8829 14.072 39.8688 14.0488C39.8557 14.0273 39.8422 14.0061 39.8282 13.9852C39.8151 13.9656 39.8015 13.9464 39.7876 13.9274C39.7745 13.9095 39.7609 13.8917 39.747 13.8743C39.7338 13.8576 39.7203 13.8411 39.7064 13.8249C39.6932 13.8095 39.6796 13.7943 39.6658 13.7793C39.6526 13.7649 39.639 13.7506 39.6252 13.7366C39.6119 13.723 39.5984 13.7097 39.5846 13.6965C39.5713 13.6837 39.5577 13.6711 39.544 13.6587C39.5307 13.6466 39.5171 13.6347 39.5034 13.623C39.49 13.6116 39.4765 13.6004 39.4628 13.5893C39.4494 13.5785 39.4359 13.5678 39.4221 13.5574C39.4088 13.5471 39.3952 13.5371 39.3816 13.5272C39.3682 13.5174 39.3546 13.5079 39.3409 13.4984C39.3275 13.4892 39.314 13.4801 39.3003 13.4711C39.2869 13.4623 39.2734 13.4537 39.2597 13.4451C39.2463 13.4367 39.2328 13.4285 39.2191 13.4204C39.2057 13.4124 39.1922 13.4045 39.1785 13.3968C39.1651 13.3891 39.1516 13.3816 39.1379 13.3742C39.1245 13.3669 39.111 13.3598 39.0973 13.3527C39.0839 13.3458 39.0703 13.339 39.0567 13.3322C39.0432 13.3256 39.0297 13.319 39.0161 13.3126C39.0026 13.3062 38.9891 13.2999 38.9755 13.2938C38.962 13.2878 38.9485 13.282 38.9349 13.2761C38.9214 13.2704 38.9078 13.2647 38.8942 13.2591C38.8808 13.2536 38.8672 13.2482 38.8537 13.2429C38.8402 13.2376 38.8267 13.2324 38.813 13.2273C38.7996 13.2223 38.7861 13.2174 38.7724 13.2126C38.759 13.2078 38.7454 13.2031 38.7318 13.1985C38.7184 13.194 38.7048 13.1895 38.6912 13.1852C38.6778 13.1808 38.6642 13.1766 38.6506 13.1724C38.6371 13.1683 38.6236 13.1641 38.61 13.1602C38.5965 13.1563 38.583 13.1525 38.5694 13.1488C38.5559 13.1451 38.5424 13.1415 38.5288 13.1379L38.4882 13.1275C38.4747 13.1242 38.4612 13.1209 38.4476 13.1177C38.4341 13.1145 38.4206 13.1115 38.407 13.1085L38.3663 13.0998C38.3528 13.097 38.3394 13.0941 38.3257 13.0915C38.3123 13.0888 38.2987 13.0864 38.2851 13.0839L38.2445 13.0767C38.231 13.0744 38.2175 13.0721 38.2039 13.0699L38.1633 13.0637L38.1227 13.0579L38.0821 13.0525L38.0415 13.0477L38.0009 13.0433L37.9603 13.0392L37.9197 13.0356L37.8791 13.0324L37.8384 13.0295L37.7978 13.0272L37.7817 13.0263L37.7572 13.0247L37.7166 13.0223L37.676 13.0201L37.6354 13.0179L37.5948 13.016L37.5542 13.0142L37.5136 13.0127L37.473 13.0114L37.4324 13.0105L37.3917 13.01L37.3694 13.0099H37.3512H37.3105H37.2699H37.2293H37.1887H37.1481H37.1075H37.0669H37.0263H36.9857H36.9451H36.9045H36.8638H36.8233H36.7826H36.742H36.7014H36.6608H36.6202H36.5796H36.539H36.4984H36.4578H36.4172H36.3766H36.3359H36.2954H36.2547H36.2141H36.1735H36.1329H36.0923H36.0517H36.0111H35.9705H35.9299H35.8893H35.8487H35.808H35.7675H35.7268H35.6862H35.6456H35.605H35.5644H35.5238H35.4832H35.4426H35.402H35.3614H35.3208H35.2801H35.2396H35.1989H35.1583H35.1177H35.0771H35.0365H34.9959H34.9553H34.9147H34.8741H34.8335H34.7929H34.7522H34.7117H34.671H34.6304H34.5898H34.5492H34.5086H34.468H34.4274H34.3868H34.3462H34.3056H34.265H34.2243H34.1838H34.1431H34.1025H34.0619H34.0213H33.9807H33.9401H33.8995H33.8589H33.8183H33.7777H33.7371H33.6964H33.6559H33.6152H33.5746H33.534H33.4934H33.4528H33.4122H33.3716H33.331H33.2904H33.2498H33.2092H33.1685H33.128H33.0873H33.0467H33.0061H32.9655H32.9249H32.8843H32.8437H32.8031H32.7625H32.7219H32.6813H32.6406H32.6H32.5594H32.5188H32.4782H32.4376H32.397H32.3564H32.3158H32.2752H32.2346H32.194H32.1534H32.1127H32.0721H32.0315H31.9909H31.9503H31.9097H31.8691H31.8285H31.7879H31.7473H31.7067H31.666H31.6255H31.5848H31.5442H31.5036H31.416V8.61119C31.416 8.31526 31.4463 8.02649 31.5036 7.74768C31.5159 7.68797 31.5295 7.62877 31.5442 7.57005C31.5569 7.5198 31.5705 7.46992 31.5848 7.42041C31.5977 7.37619 31.6112 7.33227 31.6255 7.28866C31.6385 7.24881 31.6519 7.20917 31.666 7.16986C31.6791 7.1334 31.6926 7.09714 31.7067 7.06115C31.7198 7.02754 31.7333 6.99409 31.7473 6.96092C31.7605 6.92961 31.774 6.89843 31.7879 6.8675C31.8011 6.83812 31.8147 6.80894 31.8285 6.77994C31.8417 6.75225 31.8553 6.72477 31.8691 6.69742C31.8824 6.67113 31.896 6.64504 31.9097 6.61905C31.923 6.594 31.9365 6.56913 31.9503 6.5444C31.9636 6.5204 31.9772 6.49662 31.9909 6.47293C32.0043 6.44996 32.0178 6.42708 32.0315 6.40441C32.0449 6.38242 32.0584 6.3606 32.0721 6.33888C32.0854 6.31784 32.0991 6.297 32.1127 6.27622C32.1261 6.25589 32.1396 6.23563 32.1534 6.21554C32.1668 6.19585 32.1802 6.17616 32.194 6.15671C32.2073 6.13787 32.2209 6.11927 32.2346 6.10066C32.2479 6.08236 32.2615 6.0642 32.2752 6.04614C32.2887 6.02835 32.3021 6.01049 32.3158 5.99294C32.3291 5.97586 32.3428 5.95905 32.3564 5.94218C32.3698 5.92554 32.3833 5.90904 32.397 5.89264C32.4105 5.87644 32.4239 5.86024 32.4376 5.84425C32.451 5.82866 32.4646 5.81335 32.4782 5.79796C32.4917 5.78271 32.5051 5.76743 32.5188 5.75239C32.5322 5.73765 32.5458 5.72304 32.5594 5.70847C32.5729 5.6941 32.5864 5.67984 32.6 5.66564C32.6135 5.65164 32.627 5.63765 32.6406 5.62382C32.6541 5.61024 32.6677 5.59685 32.6813 5.58347C32.6948 5.57015 32.7082 5.5567 32.7219 5.54358C32.7352 5.53074 32.7489 5.5182 32.7625 5.50553C32.776 5.49292 32.7894 5.48028 32.8031 5.46785C32.8165 5.45561 32.8301 5.44362 32.8437 5.43159C32.8572 5.41963 32.8707 5.40767 32.8843 5.39587C32.8978 5.38425 32.9113 5.3728 32.9249 5.36134C32.9384 5.34999 32.9519 5.33868 32.9655 5.32749C32.979 5.31641 32.9925 5.30547 33.0061 5.29459L33.0467 5.26243L33.0873 5.23112C33.1008 5.22085 33.1144 5.21066 33.128 5.20056C33.1414 5.19056 33.1549 5.1806 33.1685 5.17074L33.2092 5.1417C33.2226 5.13218 33.2362 5.12272 33.2498 5.11337L33.2904 5.08568L33.331 5.05875C33.3445 5.0499 33.358 5.04109 33.3716 5.03242L33.4122 5.00687C33.4257 4.99843 33.4392 4.98999 33.4528 4.98172C33.4663 4.97352 33.4799 4.96556 33.4934 4.95753C33.507 4.9495 33.5204 4.9414 33.534 4.93354C33.5474 4.92578 33.5611 4.91829 33.5746 4.91067C33.5882 4.90304 33.6016 4.89528 33.6152 4.88783C33.6287 4.88047 33.6423 4.87336 33.6559 4.86614C33.6694 4.85892 33.6828 4.85167 33.6964 4.84459C33.7099 4.83757 33.7235 4.83076 33.7371 4.82392C33.7506 4.81711 33.7641 4.81026 33.7777 4.80359L33.8183 4.78383C33.8318 4.77736 33.8453 4.77106 33.8589 4.76472C33.8724 4.75842 33.8859 4.75201 33.8995 4.74585C33.913 4.73975 33.9266 4.73392 33.9401 4.72795C33.9536 4.72199 33.9671 4.71592 33.9807 4.7101C33.9942 4.70434 34.0078 4.69885 34.0213 4.69322C34.0348 4.68763 34.0483 4.68197 34.0619 4.67651L34.1025 4.66042L34.1431 4.64487C34.1567 4.63972 34.1702 4.6345 34.1838 4.62952C34.1972 4.62457 34.2108 4.61993 34.2243 4.61511C34.2379 4.6103 34.2514 4.60539 34.265 4.60071C34.2784 4.59607 34.292 4.5917 34.3056 4.58719L34.3462 4.57394C34.3597 4.56961 34.3732 4.56523 34.3868 4.56103C34.4003 4.55686 34.4139 4.55293 34.4274 4.5489C34.4409 4.54484 34.4544 4.54063 34.468 4.53674C34.4815 4.53287 34.4951 4.52928 34.5086 4.52555C34.5221 4.52183 34.5356 4.51807 34.5492 4.51447L34.5898 4.5039C34.6033 4.50048 34.6169 4.49723 34.6304 4.49394C34.644 4.49065 34.6574 4.48713 34.671 4.48398C34.6845 4.48086 34.6981 4.47801 34.7117 4.475L34.7522 4.46608L34.7929 4.45765C34.8063 4.45494 34.8199 4.45239 34.8335 4.44982C34.847 4.44721 34.8605 4.44443 34.8741 4.44196C34.8876 4.43948 34.9012 4.43738 34.9147 4.43508L34.9553 4.4283C34.9688 4.42613 34.9824 4.4239 34.9959 4.42186C35.0094 4.41983 35.023 4.41803 35.0365 4.41614C35.0501 4.41424 35.0635 4.41217 35.0771 4.41041C35.0906 4.40865 35.1042 4.40709 35.1177 4.40546L35.1583 4.40079C35.1719 4.3993 35.1854 4.39764 35.1989 4.39628C35.2124 4.39492 35.226 4.39387 35.2396 4.39265L35.2801 4.38903L35.3208 4.38595C35.3343 4.38496 35.3478 4.38418 35.3614 4.38334C35.3749 4.38252 35.3884 4.38147 35.402 4.38076C35.4155 4.38005 35.4291 4.37964 35.4426 4.37907L35.4832 4.37754C35.4968 4.3771 35.5103 4.37652 35.5238 4.37622C35.5373 4.37591 35.5509 4.37588 35.5644 4.37568C35.5779 4.37547 35.5915 4.37524 35.605 4.37517L35.6152 4.37503H35.6456H35.6862H35.7268H35.7675H35.808H35.8487H35.8893H35.9299H35.9705H36.0111H36.0517H36.0923H36.1329H36.1735H36.2141H36.2547H36.2954H36.3359H36.3766H36.4172H36.4578H36.4984H36.539H36.5796H36.6202H36.6608H36.7014H36.742H36.7826H36.8233H36.8638H36.9045H36.9451H36.9857H37.0263H37.0669H37.1075H37.1481H37.1887H37.2293H37.2699H37.3105H37.3512H37.3917H37.4324H37.473H37.5136H37.5542H37.5948H37.6354H37.676H37.7166H37.7572H37.7978H37.8384H37.8791H37.9197H37.9603H38.0009H38.0415H38.0821H38.1227H38.1633H38.2039H38.2445H38.2851H38.3257H38.3663H38.407H38.4476H38.4882H38.5288H38.5694H38.61H38.6506H38.6912H38.7318H38.7724H38.813H38.8537H38.8942H38.9349H38.9755H39.0161H39.0567H39.0973H39.1379H39.1785H39.2191H39.2597H39.3003H39.3409H39.3816H39.4221H39.4628H39.5034H39.544H39.5846H39.6252H39.6658H39.7064H39.747H39.7876H39.8282H39.8688H39.9095H39.95H39.9907H40.0313H40.0719H40.1125H40.1531H40.1937H40.2343H40.2749H40.3155H40.3561H40.3967H40.4374H40.4779H40.5186H40.5592H40.5998H40.6404H40.681H40.7216H40.7622H40.8028H40.8434H40.884H40.9246H40.9653H41.0058H41.0465H41.0871H41.1277H41.1683H41.2089H41.2495H41.2901H41.3307H41.3714H41.4119H41.4526H41.4932H41.5338H41.5744H41.615H41.6556H41.6962H41.7368H41.7774V4.375Z",fill:"#54B230"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.1377 19.0723V8.61115C8.1377 8.31608 8.16772 8.02805 8.22476 7.74998C8.23702 7.69027 8.25061 7.63111 8.26532 7.57235C8.27791 7.52203 8.29147 7.47212 8.30584 7.42254C8.31867 7.37836 8.3322 7.33451 8.34637 7.29093C8.35936 7.25105 8.37279 7.21133 8.38692 7.17196C8.40001 7.13553 8.41341 7.09931 8.42744 7.06336C8.44054 7.02974 8.45407 6.99623 8.468 6.96302C8.48116 6.93171 8.49466 6.9006 8.50852 6.8697C8.52172 6.84032 8.53525 6.81118 8.54904 6.78217C8.56224 6.75445 8.57583 6.72694 8.5896 6.69956C8.60283 6.67326 8.61636 6.64717 8.63012 6.62121C8.64338 6.59617 8.65691 6.5713 8.67064 6.54656C8.68394 6.52261 8.69744 6.49879 8.7112 6.47513C8.72453 6.45216 8.73796 6.42925 8.75172 6.40655C8.76505 6.38459 8.77858 6.3628 8.79228 6.34112C8.80554 6.32011 8.81917 6.29923 8.8328 6.27846C8.84616 6.25813 8.85963 6.23787 8.87332 6.21777C8.88679 6.19805 8.90011 6.17836 8.91388 6.15888C8.92717 6.14007 8.94081 6.1215 8.9544 6.1029C8.9678 6.0846 8.98129 6.06644 8.99496 6.04838C9.00839 6.03062 9.02178 6.01273 9.03548 5.99518C9.04881 5.97813 9.06244 5.96136 9.076 5.94452C9.0894 5.92788 9.10289 5.91131 9.11656 5.89487C9.12999 5.87871 9.14342 5.86258 9.15708 5.84662C9.17044 5.831 9.18404 5.81565 9.19764 5.80023C9.21107 5.78495 9.2245 5.7697 9.23816 5.75466C9.25152 5.73992 9.26512 5.72538 9.27868 5.71084C9.29211 5.69644 9.30561 5.68217 9.31924 5.66798C9.33267 5.65398 9.34613 5.63999 9.35976 5.62616C9.37316 5.61257 9.38675 5.59919 9.40032 5.5858C9.41381 5.57249 9.42717 5.55907 9.44084 5.54595C9.4542 5.53311 9.46783 5.52057 9.48136 5.5079C9.49486 5.49526 9.50825 5.48259 9.52192 5.47015C9.53531 5.45795 9.54891 5.44599 9.56244 5.43396C9.57594 5.422 9.58936 5.41 9.603 5.39821C9.61642 5.38659 9.62995 5.37517 9.64352 5.36372C9.65695 5.35237 9.67044 5.34101 9.68404 5.32983C9.69747 5.31878 9.71103 5.30784 9.7246 5.29693C9.73806 5.28612 9.75152 5.27541 9.76512 5.26477C9.77855 5.25423 9.79211 5.24383 9.80567 5.23346C9.81914 5.22319 9.83263 5.21296 9.8462 5.20286L9.88672 5.17311C9.90018 5.16332 9.91368 5.15359 9.92728 5.14397C9.9407 5.13445 9.95423 5.12503 9.9678 5.11567C9.98126 5.10635 9.99476 5.0971 10.0083 5.08795C10.0218 5.07891 10.0353 5.07 10.0489 5.06108C10.0623 5.05224 10.0758 5.04333 10.0894 5.03462C10.1028 5.02601 10.1164 5.01761 10.13 5.00914C10.1435 5.0007 10.1569 4.99216 10.1705 4.98389C10.1839 4.97573 10.1975 4.9678 10.211 4.95977C10.2245 4.95173 10.2379 4.94357 10.2516 4.93567C10.265 4.92791 10.2786 4.92049 10.2921 4.91287C10.3056 4.90524 10.319 4.89752 10.3326 4.89003C10.3461 4.88264 10.3596 4.87553 10.3732 4.86831C10.3867 4.86109 10.4001 4.85384 10.4137 4.84676C10.4271 4.83974 10.4407 4.83286 10.4542 4.82598L10.4948 4.80572C10.5083 4.79905 10.5217 4.79237 10.5353 4.78586C10.5488 4.77939 10.5623 4.77312 10.5758 4.76679C10.5894 4.76045 10.6028 4.75398 10.6164 4.74781C10.6298 4.74168 10.6434 4.73592 10.6569 4.72995C10.6704 4.72399 10.6839 4.71792 10.6974 4.71209C10.7109 4.70633 10.7245 4.70078 10.738 4.69515L10.7785 4.67848L10.819 4.66228L10.8596 4.64676C10.8731 4.64161 10.8865 4.63629 10.9001 4.63128C10.9135 4.62633 10.9272 4.62172 10.9407 4.61691C10.9542 4.6121 10.9676 4.60722 10.9812 4.60254L11.0217 4.58889L11.0623 4.57564C11.0758 4.5713 11.0892 4.56686 11.1028 4.56266C11.1162 4.55849 11.1298 4.55453 11.1433 4.55049C11.1568 4.54643 11.1703 4.54229 11.1839 4.53836C11.1973 4.53447 11.2109 4.53084 11.2244 4.52708L11.265 4.516C11.2784 4.51241 11.2919 4.50875 11.3055 4.50529C11.3189 4.50183 11.3325 4.49868 11.346 4.49536C11.3595 4.49204 11.373 4.48858 11.3866 4.4854C11.4 4.48225 11.4136 4.4793 11.4271 4.47628L11.4676 4.46741C11.4811 4.46449 11.4946 4.46154 11.5082 4.4588C11.5216 4.45609 11.5352 4.45358 11.5487 4.45097C11.5622 4.44836 11.5757 4.44565 11.5892 4.44318C11.6027 4.4407 11.6162 4.43847 11.6298 4.43613L11.6703 4.42935C11.6838 4.42718 11.6973 4.42485 11.7108 4.42278C11.7243 4.42071 11.7379 4.41898 11.7514 4.41705C11.7648 4.41515 11.7783 4.41312 11.7919 4.41133L11.8324 4.40621L11.873 4.40157C11.8865 4.40004 11.8999 4.39828 11.9135 4.39689C11.927 4.3955 11.9405 4.39448 11.954 4.39323L11.9946 4.38964C12.0081 4.38849 12.0216 4.38737 12.0351 4.38639C12.0486 4.3854 12.0621 4.38462 12.0757 4.38378C12.0892 4.38293 12.1027 4.38195 12.1162 4.3812C12.1297 4.38046 12.1432 4.37995 12.1567 4.37934L12.1973 4.37778C12.2108 4.3773 12.2242 4.37659 12.2378 4.37625C12.2513 4.37591 12.2648 4.37595 12.2783 4.37575C12.2918 4.37554 12.3053 4.3753 12.3189 4.37524L12.3594 4.375H12.3999H12.4405H12.481H12.5215H12.5621H12.6026H12.6431H12.6837H12.7242H12.7647H12.8053H12.8458H12.8863H12.9269H12.9674H13.008H13.0485H13.089H13.1296H13.1701H13.2107H13.2512H13.2917H13.3323H13.3728H13.4133H13.4539H13.4944H13.5349H13.5755H13.616H13.6565H13.6971H13.7376H13.7781H13.8187H13.8592H13.8997H13.9403H13.9808H14.0213H14.0619H14.1024H14.143H14.1835H14.224H14.2646H14.3051H14.3457H14.3862H14.4267H14.4673H14.5078H14.5483H14.5889H14.6294H14.6699H14.7105H14.751H14.7915H14.8321H14.8726H14.9131H14.9537H14.9942H15.0347H15.0753H15.1158H15.1563H15.1969H15.2374H15.278H15.3185H15.359H15.3996H15.4401H15.4807H15.5212H15.5617H15.6023H15.6428H15.6833H15.7239H15.7644H15.8049H15.8455H15.886H15.9265H15.9671H16.0076H16.0481H16.0887H16.1292H16.1697H16.2103H16.2508H16.2914H16.3319H16.3724H16.413H16.4535H16.494H16.5346H16.5751H16.6157H16.6562H16.6967H16.7373H16.7778H16.8183H16.8589H16.8994H16.9399H16.9805H17.021H17.0615H17.1021H17.1426H17.1831H17.2237H17.2642H17.3047H17.3453H17.3858H17.4264H17.4669H17.5074H17.548H17.5885H17.629H17.6696H17.7101H17.7506H17.7912H17.8317H17.8722H17.9128H17.9533H17.9938H18.0344H18.0749H18.1154H18.156H18.1965H18.237H18.2776H18.3181H18.3586H18.3992H18.4397H18.4803H18.5147V25.5542C18.5147 25.7384 18.5029 25.9199 18.4803 26.098C18.4694 26.1837 18.4556 26.2685 18.4397 26.3525C18.4276 26.4165 18.4141 26.4799 18.3992 26.5427C18.3866 26.5957 18.3732 26.6483 18.3586 26.7005C18.3459 26.7463 18.3323 26.7917 18.3181 26.8368C18.3052 26.8777 18.2917 26.9182 18.2776 26.9586C18.2646 26.9959 18.2511 27.033 18.237 27.0698C18.224 27.1042 18.2105 27.1384 18.1965 27.1723C18.1834 27.2043 18.1699 27.2361 18.156 27.2676C18.1428 27.2976 18.1293 27.3273 18.1154 27.357C18.1023 27.3852 18.0887 27.4132 18.0749 27.4411C18.0617 27.4679 18.0482 27.4945 18.0344 27.5209C18.0211 27.5463 18.0076 27.5717 17.9938 27.5968C17.9805 27.6211 17.9671 27.6454 17.9533 27.6694C17.94 27.6926 17.9265 27.7156 17.9128 27.7385C17.8995 27.7607 17.8859 27.7826 17.8722 27.8045C17.8589 27.8259 17.8454 27.8471 17.8317 27.8682C17.8183 27.8889 17.8049 27.9095 17.7912 27.9298C17.7778 27.9496 17.7643 27.9692 17.7506 27.9887C17.7373 28.0078 17.7238 28.0267 17.7101 28.0456C17.6967 28.0641 17.6832 28.0826 17.6696 28.1009C17.6562 28.1188 17.6427 28.1365 17.629 28.1542C17.6157 28.1714 17.6021 28.1885 17.5885 28.2056C17.5751 28.2224 17.5616 28.2392 17.548 28.2558C17.5346 28.2721 17.521 28.2881 17.5074 28.3041C17.494 28.3199 17.4805 28.3356 17.4669 28.3512C17.4534 28.3665 17.44 28.382 17.4264 28.3972C17.413 28.412 17.3994 28.4266 17.3858 28.4413C17.3723 28.4558 17.359 28.4704 17.3453 28.4847C17.3319 28.4988 17.3183 28.5126 17.3047 28.5265C17.2913 28.5402 17.2778 28.5539 17.2642 28.5674C17.2508 28.5808 17.2373 28.5941 17.2237 28.6073C17.2103 28.6203 17.1967 28.6331 17.1831 28.6459C17.1697 28.6586 17.1562 28.6713 17.1426 28.6839C17.1292 28.6962 17.1156 28.7082 17.1021 28.7204C17.0886 28.7325 17.0752 28.7447 17.0615 28.7566C17.0482 28.7682 17.0345 28.7796 17.021 28.7911C17.0075 28.8026 16.9941 28.8142 16.9805 28.8255C16.9671 28.8366 16.9535 28.8475 16.9399 28.8584C16.9264 28.8693 16.913 28.8803 16.8994 28.8911C16.886 28.9016 16.8724 28.9119 16.8589 28.9223C16.8454 28.9327 16.832 28.9431 16.8183 28.9533C16.8049 28.9634 16.7913 28.9732 16.7778 28.9831C16.7643 28.993 16.7509 29.003 16.7373 29.0127C16.7239 29.0222 16.7103 29.0316 16.6967 29.041C16.6832 29.0504 16.6698 29.0599 16.6562 29.0692C16.6428 29.0782 16.6292 29.0871 16.6157 29.096C16.6021 29.105 16.5887 29.1141 16.5751 29.1229C16.5617 29.1315 16.5481 29.1398 16.5346 29.1484C16.5211 29.1569 16.5076 29.1655 16.494 29.1738C16.4806 29.1821 16.467 29.1901 16.4535 29.1981C16.44 29.2062 16.4266 29.2143 16.413 29.2223C16.3995 29.2301 16.386 29.2377 16.3724 29.2454C16.359 29.2531 16.3455 29.2608 16.3319 29.2682C16.3184 29.2757 16.3049 29.2831 16.2914 29.2904L16.2508 29.3119C16.2373 29.319 16.2239 29.3261 16.2103 29.333C16.1968 29.3399 16.1833 29.3466 16.1697 29.3533C16.1562 29.36 16.1428 29.367 16.1292 29.3735C16.1158 29.38 16.1022 29.3862 16.0887 29.3926C16.0752 29.399 16.0617 29.4054 16.0481 29.4117C16.0347 29.4178 16.0211 29.4237 16.0076 29.4298L15.9671 29.4476L15.9265 29.4649C15.9131 29.4706 15.8995 29.4761 15.886 29.4816C15.8725 29.4871 15.859 29.4928 15.8455 29.4982C15.832 29.5035 15.8185 29.5085 15.8049 29.5136C15.7914 29.5188 15.778 29.5241 15.7644 29.5292C15.7509 29.5342 15.7374 29.539 15.7239 29.5438L15.6833 29.5582L15.6428 29.5722C15.6293 29.5767 15.6158 29.5811 15.6023 29.5854C15.5887 29.5899 15.5753 29.5944 15.5617 29.5987C15.5483 29.6029 15.5347 29.6068 15.5212 29.6109L15.4807 29.6231L15.4401 29.6347C15.4266 29.6385 15.4131 29.6421 15.3996 29.6457C15.386 29.6494 15.3726 29.6533 15.359 29.6567C15.3456 29.6602 15.332 29.6633 15.3185 29.6667C15.305 29.6701 15.2915 29.6734 15.278 29.6767L15.2374 29.6861L15.1969 29.695C15.1834 29.6979 15.1699 29.7011 15.1563 29.7039C15.1429 29.7067 15.1293 29.709 15.1158 29.7117C15.1023 29.7143 15.0888 29.717 15.0753 29.7195L15.0347 29.7269C15.0213 29.7292 15.0077 29.7314 14.9942 29.7336C14.9807 29.7358 14.9672 29.7383 14.9537 29.7404C14.9402 29.7425 14.9267 29.7442 14.9131 29.7462L14.8726 29.7519C14.8591 29.7538 14.8456 29.7556 14.8321 29.7573C14.8186 29.759 14.805 29.7604 14.7915 29.762C14.778 29.7635 14.7645 29.7652 14.751 29.7667C14.7375 29.7681 14.724 29.7693 14.7105 29.7706L14.6699 29.7742C14.6564 29.7754 14.6429 29.7768 14.6294 29.7778C14.6159 29.7788 14.6024 29.7795 14.5889 29.7804L14.5483 29.783L14.5078 29.7851C14.4943 29.7858 14.4808 29.7862 14.4673 29.7867C14.4537 29.7872 14.4402 29.7878 14.4267 29.7883C14.4132 29.7886 14.3997 29.7888 14.3862 29.789L14.3457 29.7895C14.3331 29.7896 14.3207 29.79 14.3081 29.79H14.2646H14.224H14.1835H14.143H14.1024H14.0619H14.0213H13.9808H13.9403H13.8997H13.8592H13.8187H13.7781H13.7376H13.6971H13.6565H13.616H13.5755H13.5349H13.4944H13.4539H13.4133H13.3728H13.3323H13.2917H13.2512H13.2107H13.1701H13.1296H13.089H13.0485H13.008H12.9674H12.9269H12.8863H12.8458H12.8053H12.7647H12.7242H12.6837H12.6431H12.6026H12.5621H12.5215H12.481H12.4405H12.3999H12.3594H12.3189H12.2783H12.2378H12.1973H12.1567H12.1162H12.0757H12.0351H11.9946H11.954H11.9135H11.873H11.8324H11.7919H11.7514H11.7108H11.6703H11.6298H11.5892H11.5487H11.5082H11.4676H11.4271H11.3866H11.346H11.3055H11.265H11.2244H11.1839H11.1433H11.1028H11.0623H11.0217H10.9812H10.9407H10.9001H10.8596H10.819H10.7785H10.738H10.6974H10.6569H10.6164H10.5758H10.5353H10.4948H10.4542H10.4137H10.3732H10.3326H10.2921H10.2516H10.211H10.1705H10.13H10.0894H10.0489H10.0083H9.9678H9.92728H9.88672H9.8462H9.80567H9.76512H9.7246H9.68404H9.64352H9.603H9.56244H9.52192H9.48136H9.44084H9.40032H9.35976H9.31924H9.27868H9.23816H9.19764H9.15708H9.11656H9.076H9.03548H8.99496H8.9544H8.91388H8.87332H8.8328H8.79228H8.75172H8.7112H8.67064H8.63012H8.5896H8.54904H8.50852H8.468H8.42744H8.38692H8.34637H8.30584H8.26532H8.22476H8.1377V20.8632C8.1377 20.8632 8.16765 20.8715 8.22476 20.886L8.26532 20.8962L8.30584 20.9062L8.34637 20.916L8.38692 20.9256L8.42744 20.9351L8.468 20.9445L8.50852 20.9537L8.54904 20.9628L8.5896 20.9717L8.63012 20.9805L8.67064 20.9893L8.7112 20.9979L8.75172 21.0064L8.79228 21.0147L8.8328 21.023L8.87332 21.0311L8.91388 21.0392L8.9544 21.0471L8.99496 21.055L9.03548 21.0628L9.076 21.0704L9.11656 21.078L9.15708 21.0854L9.19764 21.0928L9.23816 21.1001L9.27868 21.1072L9.31924 21.1143L9.35976 21.1212L9.40032 21.1281L9.44084 21.1349L9.48136 21.1416L9.52192 21.1482L9.56244 21.1547L9.603 21.1612L9.64352 21.1675L9.68404 21.1738L9.7246 21.1799L9.76512 21.186L9.80567 21.1919L9.8462 21.1978L9.88672 21.2036L9.92728 21.2093L9.9678 21.2149L10.0083 21.2205L10.0489 21.2259L10.0894 21.2313L10.13 21.2366L10.1705 21.2417L10.211 21.2468L10.2516 21.2518L10.2921 21.2568L10.3326 21.2615L10.3732 21.2663L10.4137 21.2709L10.4542 21.2755L10.4948 21.28L10.5353 21.2844L10.5758 21.2887L10.6164 21.2929L10.6569 21.297L10.6974 21.301L10.738 21.305L10.7785 21.3089L10.819 21.3126L10.8596 21.3164L10.9001 21.3199L10.9407 21.3234L10.9812 21.3269L11.0217 21.3302L11.0623 21.3335L11.1028 21.3366L11.1433 21.3397L11.1839 21.3426L11.2244 21.3455L11.265 21.3483L11.3055 21.351L11.346 21.3536L11.3866 21.3562L11.4271 21.3586L11.4676 21.361L11.5082 21.3632L11.5487 21.3654L11.5892 21.3675L11.6298 21.3694L11.6703 21.3713L11.7108 21.3731L11.7514 21.3748L11.7919 21.3765L11.8324 21.3779L11.873 21.3793L11.9135 21.3807L11.954 21.3819L11.9946 21.3831L12.0351 21.3841L12.0757 21.385L12.1162 21.386L12.1567 21.3867L12.1973 21.3873L12.2378 21.388L12.2783 21.3884L12.3189 21.3888L12.3594 21.3891L12.3999 21.3892L12.4405 21.3893L12.481 21.3893L12.5215 21.389L12.5621 21.3888L12.6026 21.3885L12.6431 21.3883L12.6837 21.3875L12.7242 21.3868L12.7647 21.3861L12.8053 21.3853L12.8458 21.3843L12.8863 21.383L12.9269 21.3818L12.9674 21.3805L13.008 21.3791L13.0485 21.3773L13.089 21.3756L13.1296 21.3737L13.1701 21.3719L13.2107 21.3697L13.2512 21.3673L13.2917 21.3649L13.3323 21.3626L13.3728 21.3599L13.4133 21.3569L13.4539 21.354L13.4944 21.3511L13.5349 21.3478L13.5755 21.3443L13.616 21.3408L13.6565 21.3372L13.6971 21.3334L13.7376 21.3292L13.7781 21.3251L13.8187 21.3209L13.8592 21.3164L13.8997 21.3116L13.9403 21.3068L13.9808 21.302L14.0213 21.2967L14.0619 21.2912L14.1024 21.2858L14.143 21.2802C14.1566 21.2782 14.1699 21.2761 14.1835 21.2741L14.224 21.2679L14.2646 21.2618L14.3051 21.2553C14.3187 21.2531 14.3321 21.2507 14.3457 21.2484L14.3862 21.2416C14.3996 21.2393 14.4134 21.2371 14.4267 21.2347C14.4404 21.2323 14.4537 21.2296 14.4673 21.2271L14.5078 21.2195L14.5483 21.2119L14.5889 21.2039C14.6025 21.2012 14.6159 21.1983 14.6294 21.1955L14.6699 21.1871L14.7105 21.1785C14.7242 21.1756 14.7374 21.1724 14.751 21.1694L14.7915 21.1601C14.805 21.157 14.8187 21.1541 14.8321 21.151C14.8458 21.1477 14.8591 21.1443 14.8726 21.141L14.9131 21.1309C14.9266 21.1276 14.9403 21.1243 14.9537 21.1209C14.9673 21.1174 14.9807 21.1138 14.9942 21.1102L15.0347 21.0993C15.0482 21.0956 15.0619 21.0921 15.0753 21.0883C15.0889 21.0846 15.1023 21.0806 15.1158 21.0768L15.1563 21.065C15.1698 21.061 15.1835 21.0571 15.1969 21.0531L15.2374 21.0406L15.278 21.0278C15.2914 21.0235 15.3052 21.0193 15.3185 21.015L15.359 21.0014L15.3996 20.9876C15.413 20.9829 15.4268 20.9784 15.4401 20.9737C15.4538 20.9689 15.4671 20.9638 15.4807 20.9589L15.5212 20.9441C15.5347 20.939 15.5483 20.9341 15.5617 20.9289C15.5754 20.9237 15.5887 20.9183 15.6023 20.913C15.6158 20.9077 15.6294 20.9024 15.6428 20.897L15.6833 20.8804L15.7239 20.8632C15.7373 20.8575 15.7511 20.852 15.7644 20.8461C15.7781 20.8401 15.7914 20.8339 15.8049 20.8278L15.8455 20.8094L15.886 20.7904C15.8996 20.784 15.9131 20.7774 15.9265 20.7708C15.94 20.7642 15.9538 20.7577 15.9671 20.751C15.9808 20.7441 15.9941 20.737 16.0076 20.73C16.0211 20.723 16.0348 20.7161 16.0481 20.7091C16.0618 20.7018 16.0752 20.6944 16.0887 20.687C16.1023 20.6796 16.1158 20.6721 16.1292 20.6646C16.1428 20.6569 16.1563 20.6492 16.1697 20.6415C16.1834 20.6336 16.1969 20.6255 16.2103 20.6175C16.2239 20.6094 16.2375 20.6013 16.2508 20.5931C16.2645 20.5847 16.2779 20.5761 16.2914 20.5676C16.3049 20.559 16.3186 20.5504 16.3319 20.5417C16.3456 20.5328 16.359 20.5236 16.3724 20.5145C16.386 20.5053 16.3996 20.4963 16.413 20.487C16.4267 20.4774 16.44 20.4677 16.4535 20.458C16.4671 20.4482 16.4807 20.4384 16.494 20.4286C16.5077 20.4184 16.5211 20.408 16.5346 20.3977C16.5482 20.3872 16.5618 20.3767 16.5751 20.3661C16.5888 20.3552 16.6023 20.3442 16.6157 20.3331C16.6293 20.3218 16.6428 20.3104 16.6562 20.299C16.6698 20.2873 16.6834 20.2757 16.6967 20.2639C16.7105 20.2517 16.7238 20.2393 16.7373 20.2269C16.7508 20.2144 16.7645 20.2019 16.7778 20.1892C16.7915 20.176 16.805 20.1627 16.8183 20.1493C16.832 20.1356 16.8455 20.1218 16.8589 20.108C16.8725 20.0938 16.8861 20.0797 16.8994 20.0653C16.9132 20.0503 16.9265 20.0351 16.9399 20.0199C16.9537 20.0043 16.9672 19.9885 16.9805 19.9727C16.9942 19.9564 17.0078 19.9401 17.021 19.9236C17.0347 19.9064 17.0483 19.8892 17.0615 19.8718C17.0754 19.8536 17.0888 19.8352 17.1021 19.8168C17.1159 19.7976 17.1293 19.7783 17.1426 19.7589C17.1564 19.7386 17.1699 19.7182 17.1831 19.6976C17.197 19.6761 17.2105 19.6543 17.2237 19.6324C17.2375 19.6093 17.2511 19.5861 17.2642 19.5627C17.2781 19.5378 17.2916 19.5128 17.3047 19.4876C17.3187 19.4606 17.3322 19.4335 17.3453 19.4061C17.3594 19.3767 17.3728 19.3471 17.3858 19.3172C17.3999 19.2847 17.4135 19.2521 17.4264 19.2191C17.4406 19.1827 17.4541 19.1461 17.4669 19.1091C17.4814 19.0672 17.4948 19.0248 17.5074 18.982C17.5222 18.9321 17.5356 18.8816 17.548 18.8307C17.5632 18.7675 17.5768 18.7036 17.5885 18.639C17.6059 18.5428 17.6193 18.4451 17.629 18.346C17.6426 18.208 17.6493 18.0674 17.6493 17.9246V13.01H17.5885H17.548H17.5074H17.4669H17.4264H17.3858H17.3453H17.3047H17.2642H17.2237H17.1831H17.1426H17.1021H17.0615H17.021H16.9805H16.9399H16.8994H16.8589H16.8183H16.7778H16.7373H16.6967H16.6562H16.6157H16.5751H16.5346H16.494H16.4535H16.413H16.3724H16.3319H16.2914H16.2508H16.2103H16.1697H16.1292H16.0887H16.0481H16.0076H15.9671H15.9265H15.886H15.8455H15.8049H15.7644H15.7239H15.6833H15.6428H15.6023H15.5617H15.5212H15.4807H15.4401H15.3996H15.359H15.3185H15.278H15.2374H15.1969H15.1563H15.1158H15.0753H15.0347H14.9942H14.9537H14.9131H14.8726H14.8321H14.7915H14.751H14.7105H14.6699H14.6294H14.5889H14.5483H14.5078H14.4673H14.4267H14.3862H14.3457H14.3051H14.2646H14.224H14.1835H14.143H14.1024H14.0619L14.0312 17.9246C14.0312 18.0016 14.0278 18.0773 14.0213 18.1515C14.0131 18.2461 13.9995 18.3383 13.9808 18.4279C13.9693 18.4833 13.9557 18.5377 13.9403 18.591C13.928 18.6335 13.9145 18.6753 13.8997 18.7164C13.8872 18.7514 13.8736 18.7858 13.8592 18.8198C13.8464 18.8501 13.8329 18.8799 13.8187 18.9093C13.8057 18.9361 13.7923 18.9626 13.7781 18.9885C13.7652 19.0125 13.7516 19.0359 13.7376 19.0592C13.7245 19.081 13.711 19.1026 13.6971 19.1238C13.6839 19.1438 13.6704 19.1634 13.6565 19.1828C13.6433 19.2013 13.6299 19.2196 13.616 19.2376C13.6028 19.2547 13.5893 19.2714 13.5755 19.288C13.5622 19.3039 13.5487 19.3196 13.5349 19.3351C13.5217 19.35 13.5082 19.3647 13.4944 19.3792C13.4811 19.3931 13.4676 19.407 13.4539 19.4206C13.4406 19.4337 13.4271 19.4467 13.4133 19.4594C13.4 19.4718 13.3865 19.4839 13.3728 19.4958C13.3595 19.5075 13.346 19.519 13.3323 19.5302C13.3189 19.5412 13.3054 19.552 13.2917 19.5627C13.2784 19.5731 13.2648 19.5833 13.2512 19.5934C13.2378 19.6032 13.2243 19.6129 13.2107 19.6224C13.1973 19.6318 13.1838 19.6409 13.1701 19.65C13.1567 19.6588 13.1432 19.6674 13.1296 19.676C13.1162 19.6843 13.1027 19.6925 13.089 19.7006C13.0757 19.7085 13.0621 19.7162 13.0485 19.7239C13.0351 19.7314 13.0216 19.7386 13.008 19.7459C12.9946 19.753 12.9811 19.76 12.9674 19.7668C12.954 19.7735 12.9405 19.7801 12.9269 19.7866C12.9135 19.793 12.9 19.7993 12.8863 19.8055C12.8729 19.8115 12.8595 19.8175 12.8458 19.8232C12.8325 19.8289 12.8189 19.8344 12.8053 19.8399C12.7919 19.8453 12.7783 19.8505 12.7647 19.8557C12.7513 19.8608 12.7379 19.8657 12.7242 19.8706C12.7108 19.8754 12.6973 19.8802 12.6837 19.8848C12.6703 19.8893 12.6567 19.8937 12.6431 19.898C12.6298 19.9022 12.6162 19.9063 12.6026 19.9103C12.5892 19.9143 12.5757 19.9183 12.5621 19.922C12.5486 19.9258 12.5351 19.9295 12.5215 19.933C12.5081 19.9365 12.4946 19.9399 12.481 19.9432C12.4676 19.9464 12.4541 19.9495 12.4405 19.9526C12.427 19.9556 12.4135 19.9586 12.3999 19.9614C12.3865 19.9642 12.373 19.967 12.3594 19.9696C12.346 19.9722 12.3324 19.9746 12.3189 19.977C12.3054 19.9794 12.2919 19.9817 12.2783 19.9839L12.2378 19.9902C12.2244 19.9921 12.2108 19.9939 12.1973 19.9957C12.1838 19.9975 12.1703 19.9993 12.1567 20.0009L12.1162 20.0054C12.1028 20.0068 12.0892 20.008 12.0757 20.0093C12.0622 20.0105 12.0487 20.0118 12.0351 20.0128C12.0217 20.0139 12.0082 20.0148 11.9946 20.0157C11.9811 20.0165 11.9676 20.0173 11.954 20.018C11.9405 20.0187 11.9271 20.0194 11.9135 20.02C11.9001 20.0205 11.8865 20.0208 11.873 20.0212L11.8324 20.0222C11.819 20.0224 11.8055 20.0225 11.7919 20.0226L11.7514 20.0226L11.7108 20.0223L11.6703 20.0218L11.6298 20.0209L11.5892 20.0198L11.5487 20.0185L11.5082 20.0168L11.4676 20.0149L11.4271 20.0129L11.3866 20.0104L11.346 20.0078L11.3055 20.0049L11.265 20.0017L11.2244 19.9983L11.1839 19.9946L11.1433 19.9907L11.1028 19.9865L11.0623 19.9821L11.0217 19.9775L10.9812 19.9725L10.9407 19.9674L10.9001 19.962L10.8596 19.9563L10.819 19.9504L10.7785 19.9443L10.738 19.9379L10.6974 19.9313L10.6569 19.9244L10.6164 19.9173L10.5758 19.91L10.5353 19.9024L10.4948 19.8946L10.4542 19.8866L10.4137 19.8783L10.3732 19.8698L10.3326 19.8611L10.2921 19.8521L10.2516 19.8429L10.211 19.8335L10.1705 19.8238L10.13 19.8139L10.0894 19.8038L10.0489 19.7936L10.0083 19.7829L9.9678 19.7722L9.92728 19.7612L9.88672 19.75L9.8462 19.7386L9.80567 19.7269L9.76512 19.7151L9.7246 19.703L9.68404 19.6907L9.64352 19.6782L9.603 19.6654L9.56244 19.6525L9.52192 19.6394L9.48136 19.6261L9.44084 19.6125L9.40032 19.5987L9.35976 19.5847L9.31924 19.5706L9.27868 19.5562L9.23816 19.5416L9.19764 19.5269L9.15708 19.5118L9.11656 19.4967L9.076 19.4813L9.03548 19.4657L8.99496 19.4499L8.9544 19.434L8.91388 19.4178L8.87332 19.4014L8.8328 19.3849L8.79228 19.3682L8.75172 19.3513L8.7112 19.3341L8.67064 19.3168L8.63012 19.2993L8.5896 19.2817L8.54904 19.2637L8.50852 19.2457L8.468 19.2275L8.42744 19.2091L8.38692 19.1905L8.34637 19.1717L8.30584 19.1528L8.26532 19.1336L8.22476 19.1144C8.19572 19.1004 8.16671 19.0864 8.1377 19.0723Z",fill:"#006CB9"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M19.8644 14.0838C19.8348 14.1079 19.8057 14.1321 19.7773 14.1567V8.61115C19.7773 8.31625 19.8074 8.02839 19.8644 7.75042C19.8766 7.69075 19.8902 7.63162 19.9049 7.57289C19.9175 7.52251 19.9311 7.47253 19.9455 7.42288C19.9583 7.37866 19.9718 7.33475 19.986 7.29114C19.999 7.25129 20.0124 7.21164 20.0265 7.17233C20.0396 7.1359 20.0531 7.09965 20.0671 7.06369C20.0802 7.03008 20.0937 6.99663 20.1076 6.96343C20.1208 6.93212 20.1343 6.90101 20.1481 6.87007C20.1613 6.84069 20.1749 6.81152 20.1887 6.78251C20.2019 6.75479 20.2154 6.72734 20.2292 6.69997C20.2424 6.67367 20.256 6.64758 20.2698 6.62159C20.283 6.59655 20.2966 6.57167 20.3103 6.54694C20.3236 6.52298 20.3371 6.49912 20.3508 6.47547C20.3642 6.4525 20.3776 6.42963 20.3914 6.40692C20.4047 6.385 20.4182 6.36321 20.4319 6.34156C20.4452 6.32048 20.4588 6.29964 20.4725 6.27883C20.4858 6.25847 20.4993 6.23824 20.513 6.21814C20.5264 6.19842 20.5398 6.1787 20.5535 6.15925C20.5668 6.14041 20.5805 6.12188 20.5941 6.10331C20.6074 6.08501 20.6209 6.06681 20.6346 6.04875C20.648 6.03096 20.6614 6.01314 20.6751 5.99558C20.6884 5.97854 20.7021 5.96173 20.7157 5.94489C20.7291 5.92825 20.7426 5.91168 20.7562 5.89528C20.7696 5.87908 20.7831 5.86295 20.7968 5.84699C20.8101 5.83141 20.8237 5.81602 20.8373 5.80064C20.8507 5.78539 20.8642 5.77007 20.8778 5.75499C20.8912 5.74025 20.9048 5.72568 20.9183 5.71115C20.9317 5.69678 20.9453 5.68251 20.9589 5.66832C20.9723 5.65432 20.9858 5.64033 20.9994 5.6265C21.0128 5.61295 21.0264 5.59956 21.0399 5.58618C21.0534 5.57286 21.0668 5.55944 21.0805 5.54629C21.0938 5.53345 21.1075 5.52091 21.121 5.50824C21.1345 5.4956 21.1479 5.48293 21.1616 5.47049C21.175 5.45829 21.1886 5.4463 21.2021 5.43427C21.2156 5.42227 21.229 5.41031 21.2426 5.39852C21.2561 5.38689 21.2696 5.37548 21.2832 5.36402C21.2966 5.35267 21.3101 5.34132 21.3237 5.3301C21.3372 5.31906 21.3507 5.30811 21.3642 5.29723C21.3777 5.28642 21.3912 5.27568 21.4048 5.26504C21.4182 5.25454 21.4318 5.24413 21.4453 5.23377C21.4588 5.2235 21.4723 5.21326 21.4858 5.20317C21.4993 5.19314 21.5128 5.18324 21.5264 5.17338C21.5399 5.16362 21.5534 5.15386 21.5669 5.14424C21.5804 5.13472 21.5939 5.12533 21.6075 5.11594C21.6209 5.10663 21.6344 5.09734 21.648 5.08819C21.6614 5.07914 21.675 5.07023 21.6886 5.06132C21.702 5.05244 21.7155 5.04356 21.7291 5.03486C21.7425 5.02625 21.7561 5.01785 21.7696 5.00937C21.7831 5.00094 21.7966 4.9924 21.8102 4.98413C21.8236 4.97593 21.8372 4.968 21.8507 4.95997C21.8642 4.95194 21.8776 4.94374 21.8912 4.93588C21.9046 4.92812 21.9183 4.92066 21.9318 4.91304C21.9453 4.90541 21.9587 4.89772 21.9723 4.89027C21.9857 4.88288 21.9993 4.87576 22.0128 4.86851C22.0263 4.86129 22.0398 4.85404 22.0534 4.84696L22.0939 4.82619L22.1345 4.80589C22.1479 4.79925 22.1614 4.79254 22.175 4.78603C22.1885 4.77956 22.202 4.77329 22.2156 4.76696C22.2291 4.76065 22.2425 4.75415 22.2561 4.74798C22.2695 4.74185 22.2831 4.73609 22.2966 4.73012C22.3101 4.72416 22.3236 4.71809 22.3372 4.71226C22.3506 4.7065 22.3641 4.70091 22.3777 4.69529L22.4182 4.67862C22.4317 4.67316 22.4452 4.6677 22.4588 4.66238C22.4722 4.6571 22.4858 4.65202 22.4993 4.64686C22.5128 4.64171 22.5262 4.63639 22.5398 4.63138C22.5533 4.62643 22.5669 4.62182 22.5804 4.61701C22.5939 4.6122 22.6073 4.60732 22.6209 4.60264C22.6344 4.59797 22.6479 4.59349 22.6615 4.58899L22.702 4.57574C22.7155 4.5714 22.729 4.56696 22.7425 4.56273C22.756 4.55856 22.7696 4.55463 22.7831 4.5506C22.7966 4.54653 22.8101 4.54236 22.8236 4.53843C22.8371 4.53453 22.8506 4.53091 22.8641 4.52715L22.9047 4.51607C22.9182 4.51247 22.9317 4.50881 22.9452 4.50536C22.9587 4.50194 22.9722 4.49872 22.9857 4.4954C22.9992 4.49208 23.0127 4.48862 23.0263 4.48543C23.0398 4.48228 23.0533 4.47933 23.0668 4.47632L23.1074 4.46744C23.1209 4.46456 23.1343 4.46158 23.1479 4.45883C23.1614 4.45609 23.1749 4.45361 23.1885 4.45101C23.202 4.4484 23.2154 4.44565 23.229 4.44318L23.2695 4.43613L23.3101 4.42939C23.3236 4.42718 23.337 4.42485 23.3506 4.42278C23.3641 4.42071 23.3776 4.41898 23.3911 4.41705C23.4046 4.41515 23.4181 4.41316 23.4317 4.41136L23.4722 4.40624L23.5127 4.40157C23.5263 4.40004 23.5397 4.39828 23.5533 4.39689C23.5668 4.3955 23.5803 4.39448 23.5938 4.39323L23.6344 4.38964C23.6479 4.38849 23.6614 4.38737 23.6749 4.38639C23.6884 4.3854 23.7019 4.38462 23.7154 4.38378C23.7289 4.38293 23.7424 4.38195 23.756 4.3812C23.7695 4.38046 23.783 4.37995 23.7965 4.37934L23.837 4.37778C23.8506 4.3773 23.864 4.37659 23.8776 4.37625C23.8911 4.37591 23.9046 4.37595 23.9181 4.37575C23.9317 4.37554 23.9452 4.3753 23.9587 4.37524L23.9766 4.375H23.9992H24.0398H24.0803H24.1208H24.1614H24.2019H24.2424H24.283H24.3235H24.364H24.4046H24.4451H24.4856H24.5262H24.5667H24.6073H24.6478H24.6884H24.7289H24.7694H24.81H24.8505H24.891H24.9316H24.9721H25.0127H25.0532H25.0937H25.1343H25.1748H25.2153H25.2559H25.2964H25.3369H25.3775H25.418H25.4585H25.4991H25.5396H25.5802H25.6207H25.6613H25.7018H25.7423H25.7829H25.8234H25.8639H25.9045H25.945H25.9855H26.0261H26.0666H26.1072H26.1477H26.1882H26.2288H26.2693H26.3099H26.3504H26.3909H26.4315H26.472H26.5125H26.5531H26.5936H26.6342H26.6747H26.7152H26.7558H26.7963H26.8368H26.8774H26.9179H26.9584H26.999H27.0395H27.0801H27.1206H27.1612H27.2017H27.2422H27.2828H27.3233H27.3638H27.4044H27.4449H27.4854H27.526H27.5665H27.6071H27.6476H27.6882H27.7287H27.7692H27.8098H27.8503H27.8908H27.9314H27.9719H28.0124H28.053H28.0935H28.1341H28.1746H28.2151H28.2557H28.2962H28.3367H28.3773H28.4178H28.4583H28.4989H28.5394H28.58H28.6205H28.661H28.7016H28.7421H28.7827H28.8232H28.8637H28.9043H28.9448H28.9853H29.0259H29.0664H29.107H29.1475H29.1881H29.2286H29.2691H29.3097H29.3502H29.3907H29.4313H29.4718H29.5123H29.5529H29.5934H29.6339H29.6745H29.715H29.7556H29.7961H29.8366H29.8772H29.9177H29.9582H29.9988H30.0393H30.0799H30.1204H30.1548V25.5542C30.1548 25.7384 30.1431 25.9197 30.1204 26.0977C30.1095 26.1834 30.0958 26.2682 30.0799 26.3522C30.0678 26.4161 30.0543 26.4796 30.0393 26.5425C30.0267 26.5954 30.0133 26.6481 29.9988 26.7003C29.986 26.746 29.9725 26.7915 29.9582 26.8366C29.9454 26.8775 29.9318 26.918 29.9177 26.9583C29.9047 26.9956 29.8912 27.0327 29.8772 27.0696C29.8641 27.1039 29.8506 27.1381 29.8366 27.172C29.8235 27.204 29.81 27.2358 29.7961 27.2674C29.7829 27.2973 29.7694 27.3271 29.7556 27.3567C29.7423 27.3849 29.7288 27.413 29.715 27.4409C29.7018 27.4676 29.6883 27.4942 29.6745 27.5207C29.6612 27.5461 29.6477 27.5715 29.6339 27.5966C29.6206 27.621 29.6072 27.6452 29.5934 27.6692C29.5801 27.6924 29.5666 27.7154 29.5529 27.7382C29.5396 27.7604 29.526 27.7824 29.5123 27.8043C29.499 27.8256 29.4855 27.8469 29.4718 27.868C29.4584 27.8886 29.445 27.9093 29.4313 27.9296C29.4179 27.9494 29.4044 27.969 29.3907 27.9885C29.3774 28.0076 29.3638 28.0265 29.3502 28.0453C29.3368 28.0639 29.3233 28.0824 29.3097 28.1007C29.2963 28.1185 29.2828 28.1362 29.2691 28.1539C29.2558 28.1712 29.2422 28.1883 29.2286 28.2053C29.2151 28.2222 29.2017 28.239 29.1881 28.2556C29.1747 28.2718 29.1611 28.2879 29.1475 28.3039C29.1341 28.3197 29.1206 28.3353 29.107 28.3509C29.0935 28.3663 29.0801 28.3817 29.0664 28.3969C29.0531 28.4118 29.0394 28.4264 29.0259 28.441C29.0124 28.4556 28.999 28.4702 28.9853 28.4845C28.9719 28.4986 28.9584 28.5124 28.9448 28.5263C28.9314 28.54 28.9179 28.5536 28.9043 28.5672C28.8909 28.5806 28.8774 28.5939 28.8637 28.6071C28.8503 28.62 28.8368 28.6329 28.8232 28.6457C28.8097 28.6584 28.7963 28.6712 28.7827 28.6837C28.7693 28.696 28.7557 28.7081 28.7421 28.7202C28.7286 28.7323 28.7152 28.7445 28.7016 28.7564C28.6882 28.7681 28.6746 28.7795 28.661 28.791C28.6475 28.8025 28.6341 28.814 28.6205 28.8253C28.6071 28.8364 28.5935 28.8472 28.58 28.8582C28.5665 28.8691 28.5531 28.8801 28.5394 28.8909C28.526 28.9014 28.5124 28.9117 28.4989 28.9221C28.4854 28.9325 28.472 28.9429 28.4583 28.9532C28.445 28.9632 28.4314 28.9731 28.4178 28.983C28.4043 28.9928 28.3909 29.0028 28.3773 29.0125C28.3639 29.0221 28.3503 29.0314 28.3367 29.0408C28.3232 29.0502 28.3098 29.0597 28.2962 29.069C28.2828 29.0781 28.2692 29.0869 28.2557 29.0959C28.2422 29.1048 28.2288 29.1139 28.2151 29.1227C28.2017 29.1314 28.1881 29.1397 28.1746 29.1482C28.1611 29.1567 28.1477 29.1653 28.1341 29.1737C28.1206 29.1819 28.107 29.1899 28.0935 29.198C28.08 29.206 28.0666 29.2142 28.053 29.2221C28.0395 29.2299 28.026 29.2376 28.0124 29.2453L27.9719 29.2681L27.9314 29.2902L27.8908 29.3118C27.8773 29.3188 27.8639 29.326 27.8503 29.3329C27.8368 29.3398 27.8233 29.3465 27.8098 29.3532C27.7963 29.3599 27.7828 29.3668 27.7692 29.3734C27.7558 29.3799 27.7422 29.3861 27.7287 29.3925C27.7152 29.3988 27.7017 29.4053 27.6882 29.4115C27.6747 29.4177 27.6611 29.4236 27.6476 29.4297L27.6071 29.4475L27.5665 29.4648L27.526 29.4815C27.5125 29.487 27.499 29.4927 27.4854 29.4981C27.472 29.5034 27.4584 29.5084 27.4449 29.5135C27.4314 29.5187 27.418 29.524 27.4044 29.5291C27.3909 29.5341 27.3774 29.5389 27.3638 29.5437L27.3233 29.5581L27.2828 29.5721C27.2693 29.5766 27.2557 29.5809 27.2422 29.5853C27.2287 29.5898 27.2152 29.5944 27.2017 29.5986C27.1883 29.6028 27.1747 29.6067 27.1612 29.6108L27.1206 29.623L27.0801 29.6346C27.0666 29.6384 27.0531 29.642 27.0395 29.6456C27.026 29.6493 27.0126 29.6532 26.999 29.6567C26.9855 29.6602 26.972 29.6633 26.9584 29.6666C26.945 29.67 26.9315 29.6734 26.9179 29.6766L26.8774 29.686L26.8368 29.6949C26.8233 29.6978 26.8099 29.701 26.7963 29.7038C26.7829 29.7066 26.7693 29.709 26.7558 29.7116L26.7152 29.7194L26.6747 29.7268C26.6612 29.7292 26.6477 29.7313 26.6342 29.7336C26.6206 29.7358 26.6072 29.7382 26.5936 29.7403C26.5802 29.7424 26.5666 29.7442 26.5531 29.7462L26.5125 29.7519C26.499 29.7537 26.4855 29.7556 26.472 29.7573C26.4585 29.759 26.445 29.7604 26.4315 29.762C26.418 29.7635 26.4045 29.7652 26.3909 29.7666C26.3775 29.7681 26.3639 29.7693 26.3504 29.7706L26.3099 29.7742C26.2963 29.7754 26.2829 29.7768 26.2693 29.7778C26.2559 29.7788 26.2423 29.7795 26.2288 29.7804L26.1882 29.783L26.1477 29.7851C26.1342 29.7858 26.1207 29.7862 26.1072 29.7867C26.0936 29.7872 26.0802 29.7878 26.0666 29.7882C26.0532 29.7886 26.0396 29.7887 26.0261 29.789L25.9855 29.7895C25.9729 29.7896 25.9604 29.79 25.9477 29.79H25.945H25.9045H25.8639H25.8234H25.7829H25.7423H25.7018H25.6613H25.6207H25.5802H25.5396H25.4991H25.4585H25.418H25.3775H25.3369H25.2964H25.2559H25.2153H25.1748H25.1343H25.0937H25.0532H25.0127H24.9721H24.9316H24.891H24.8505H24.81H24.7694H24.7289H24.6884H24.6478H24.6073H24.5667H24.5262H24.4856H24.4451H24.4046H24.364H24.3235H24.283H24.2424H24.2019H24.1614H24.1208H24.0803H24.0398H23.9992H23.9587H23.9181H23.8776H23.837H23.7965H23.756H23.7154H23.6749H23.6344H23.5938H23.5533H23.5127H23.4722H23.4317H23.3911H23.3506H23.3101H23.2695H23.229H23.1885H23.1479H23.1074H23.0668H23.0263H22.9857H22.9452H22.9047H22.8641H22.8236H22.7831H22.7425H22.702H22.6615H22.6209H22.5804H22.5398H22.4993H22.4588H22.4182H22.3777H22.3372H22.2966H22.2561H22.2156H22.175H22.1345H22.0939H22.0534H22.0128H21.9723H21.9318H21.8912H21.8507H21.8102H21.7696H21.7291H21.6886H21.648H21.6075H21.5669H21.5264H21.4858H21.4453H21.4048H21.3642H21.3237H21.2832H21.2426H21.2021H21.1616H21.121H21.0805H21.0399H20.9994H20.9589H20.9183H20.8778H20.8373H20.7968H20.7562H20.7157H20.6751H20.6346H20.5941H20.5535H20.513H20.4725H20.4319H20.3914H20.3508H20.3103H20.2698H20.2292H20.1887H20.1481H20.1076H20.0671H20.0265H19.986H19.9455H19.9049H19.8644H19.7773V20.01C19.8057 20.0345 19.8348 20.0588 19.8644 20.0828C19.8778 20.0937 19.8913 20.1046 19.9049 20.1153C19.9183 20.126 19.9318 20.1366 19.9455 20.1471C19.9589 20.1575 19.9723 20.1679 19.986 20.1782C19.9994 20.1882 20.013 20.1982 20.0265 20.2081C20.0399 20.218 20.0535 20.2277 20.0671 20.2375C20.0805 20.2471 20.094 20.2566 20.1076 20.2662L20.1481 20.2941C20.1615 20.3032 20.1751 20.3123 20.1887 20.3213L20.2292 20.3479C20.2426 20.3567 20.2561 20.3654 20.2698 20.374C20.2831 20.3825 20.2967 20.3909 20.3103 20.3993L20.3508 20.4241C20.3643 20.4323 20.3778 20.4404 20.3914 20.4484C20.4048 20.4564 20.4183 20.4642 20.4319 20.472L20.4725 20.4952L20.513 20.5178L20.5535 20.5399C20.567 20.5471 20.5804 20.5545 20.5941 20.5617C20.6074 20.5687 20.621 20.5757 20.6346 20.5827L20.6751 20.6034L20.7157 20.6237L20.7562 20.6434C20.7697 20.6499 20.7831 20.6565 20.7968 20.6629L20.8373 20.6818L20.8778 20.7004L20.9183 20.7185L20.9589 20.7363L20.9994 20.7538L21.0399 20.7708L21.0805 20.7875L21.121 20.8038L21.1616 20.8199L21.2021 20.8354C21.2156 20.8406 21.229 20.8458 21.2426 20.8509L21.2832 20.8657C21.2967 20.8707 21.3101 20.8757 21.3237 20.8806C21.3371 20.8854 21.3507 20.8901 21.3642 20.8948L21.4048 20.909L21.4453 20.9227C21.4588 20.9272 21.4722 20.9319 21.4858 20.9364C21.4992 20.9408 21.5129 20.9451 21.5264 20.9494L21.5669 20.9625L21.6075 20.9751L21.648 20.9876L21.6886 20.9996L21.7291 21.0115L21.7696 21.0231L21.8102 21.0345L21.8507 21.0456L21.8912 21.0565L21.9318 21.0672L21.9723 21.0776L22.0128 21.0879L22.0534 21.0978L22.0939 21.1077L22.1345 21.1171L22.175 21.1264L22.2156 21.1355L22.2561 21.1444L22.2966 21.1532L22.3372 21.1616L22.3777 21.17L22.4182 21.178L22.4588 21.186L22.4993 21.1937L22.5398 21.2012L22.5804 21.2087L22.6209 21.2158L22.6615 21.2228L22.702 21.2296L22.7425 21.2363L22.7831 21.2429L22.8236 21.2491L22.8641 21.2553L22.9047 21.2613L22.9452 21.2671L22.9857 21.2728L23.0263 21.2782L23.0668 21.2836L23.1074 21.2888L23.1479 21.2938L23.1885 21.2988L23.229 21.3035L23.2695 21.3081L23.3101 21.3126L23.3506 21.3168L23.3911 21.321L23.4317 21.3251L23.4722 21.3289L23.5127 21.3328L23.5533 21.3363L23.5938 21.3398L23.6344 21.3433L23.6749 21.3464L23.7154 21.3495L23.756 21.3526L23.7965 21.3554L23.837 21.3581L23.8776 21.3608L23.9181 21.3632L23.9587 21.3656L23.9992 21.3679L24.0398 21.3699L24.0803 21.3719L24.1208 21.3739L24.1614 21.3756L24.2019 21.3773L24.2424 21.3789L24.283 21.3803L24.3235 21.3816L24.364 21.3829L24.4046 21.384L24.4451 21.385L24.4856 21.386L24.5262 21.3867L24.5667 21.3874L24.6073 21.3881L24.6478 21.3885L24.6884 21.3889L24.7289 21.3892L24.7694 21.3894L24.81 21.3895L24.8505 21.3895L24.891 21.3894L24.9316 21.3892L24.9721 21.389L25.0127 21.3886L25.0532 21.3881L25.0937 21.3876L25.1343 21.387L25.1748 21.3862L25.2153 21.3853L25.2559 21.3845L25.2964 21.3834L25.3369 21.3823L25.3775 21.3812L25.418 21.38L25.4585 21.3785L25.4991 21.3771L25.5396 21.3757L25.5802 21.374L25.6207 21.3723L25.6613 21.3706L25.6811 21.3698L25.7018 21.3688L25.7423 21.3668L25.7829 21.3646L25.8234 21.3624L25.8639 21.3599L25.9045 21.3574L25.945 21.3547L25.9855 21.3519L26.0261 21.3489L26.0666 21.3458L26.1072 21.3426L26.1477 21.3393L26.1882 21.3358L26.2288 21.3322L26.2693 21.3285L26.3099 21.3246L26.3504 21.3207L26.3909 21.3166L26.4315 21.3125L26.472 21.3082L26.5125 21.3038L26.5531 21.2993L26.5936 21.2947L26.6342 21.29L26.6747 21.2852L26.7152 21.2803L26.7558 21.2753L26.7963 21.2701L26.8368 21.2649L26.8774 21.2597L26.9179 21.2542L26.9584 21.2487L26.999 21.2431L27.0395 21.2374L27.0801 21.2317L27.1206 21.2258L27.1612 21.2198L27.2017 21.2137L27.2422 21.2076L27.2828 21.2014L27.3233 21.1951L27.3638 21.1887L27.4044 21.1822L27.4449 21.1756L27.4854 21.169L27.526 21.1622L27.5665 21.1554L27.6071 21.1485L27.6476 21.1415L27.6882 21.1344L27.7287 21.1273L27.7692 21.12L27.8098 21.1127L27.8503 21.1053L27.8908 21.0979L27.9314 21.0903L27.9719 21.0826L28.0124 21.0749L28.053 21.0671L28.0935 21.0593L28.1341 21.0513L28.1746 21.0433L28.2151 21.0352L28.2557 21.027L28.2962 21.0187L28.3367 21.0103L28.3773 21.0019L28.4178 20.9934L28.4583 20.9848L28.4989 20.976L28.5394 20.9673L28.58 20.9584L28.6205 20.9495L28.661 20.9404L28.7016 20.9313L28.7421 20.9221L28.7827 20.9127L28.8232 20.9033L28.8637 20.8937L28.9043 20.884L28.9448 20.8741L28.9851 20.8641V19.0723L28.9448 19.0925L28.9043 19.1127L28.8637 19.1326L28.8232 19.1524L28.7827 19.1721L28.7421 19.1915L28.7016 19.2107L28.661 19.2297L28.6205 19.2485L28.58 19.2672L28.5394 19.2856L28.4989 19.3038L28.4583 19.3217L28.4178 19.3395L28.3773 19.3571L28.3367 19.3744L28.2962 19.3916L28.2557 19.4085L28.2151 19.4252L28.1746 19.4417L28.1341 19.4579L28.0935 19.474L28.053 19.4897L28.0124 19.5053L27.9719 19.5207L27.9314 19.5358L27.8908 19.5506L27.8503 19.5653L27.8098 19.5797L27.7692 19.5939L27.7287 19.6079L27.6882 19.6216L27.6476 19.6351L27.6071 19.6484L27.5665 19.6614L27.526 19.6742L27.4854 19.6868L27.4449 19.6991L27.4044 19.7112L27.3638 19.7231L27.3233 19.7347L27.2828 19.7461L27.2422 19.7573L27.2017 19.7682L27.1612 19.7789L27.1206 19.7894L27.0801 19.7996L27.0395 19.8096L26.999 19.8195L26.9584 19.829L26.9179 19.8383L26.8774 19.8474L26.8368 19.8563L26.7963 19.8649L26.7558 19.8733L26.7152 19.8815L26.6747 19.8895L26.6342 19.8972L26.5936 19.9047L26.5531 19.912L26.5125 19.919L26.472 19.9258L26.4315 19.9324L26.3909 19.9389L26.3504 19.945L26.3099 19.9509L26.2693 19.9567L26.2288 19.9622L26.1882 19.9674L26.1477 19.9725L26.1072 19.9774L26.0666 19.982L26.0261 19.9864L25.9855 19.9906L25.945 19.9946L25.9045 19.9984L25.8639 20.002L25.8234 20.0053L25.7988 20.0072L25.7829 20.0083L25.7423 20.0111L25.7018 20.0138L25.6613 20.016L25.6207 20.0181L25.5802 20.02L25.5396 20.0213L25.4991 20.0226L25.4585 20.0235L25.418 20.0241L25.3775 20.0246C25.3639 20.0247 25.3505 20.0245 25.3369 20.0245L25.2964 20.0243L25.2559 20.0237L25.2153 20.0228L25.1748 20.0218C25.1612 20.0213 25.1478 20.0207 25.1343 20.0201C25.1208 20.0196 25.1072 20.0191 25.0937 20.0185L25.0532 20.0162L25.0127 20.0138L24.9721 20.0109L24.9316 20.0077C24.9181 20.0066 24.9045 20.0056 24.891 20.0044C24.8774 20.0031 24.864 20.0016 24.8505 20.0003L24.81 19.9962L24.7694 19.9914L24.7289 19.9865L24.6884 19.9811L24.6478 19.9753C24.6343 19.9733 24.6207 19.9714 24.6073 19.9692C24.5937 19.9671 24.5802 19.9648 24.5667 19.9625C24.5532 19.9602 24.5396 19.9581 24.5262 19.9557C24.5126 19.9533 24.4992 19.9506 24.4856 19.9481C24.4721 19.9455 24.4585 19.9431 24.4451 19.9404C24.4315 19.9377 24.4181 19.9347 24.4046 19.9319C24.3911 19.929 24.3775 19.9263 24.364 19.9233C24.3504 19.9203 24.337 19.9171 24.3235 19.9139L24.283 19.9043C24.2694 19.901 24.2559 19.8975 24.2424 19.894C24.2289 19.8905 24.2153 19.8871 24.2019 19.8835C24.1883 19.8798 24.1748 19.876 24.1614 19.8722C24.1478 19.8684 24.1342 19.8645 24.1208 19.8605C24.1072 19.8565 24.0937 19.8523 24.0803 19.8482C24.0667 19.844 24.0532 19.8398 24.0398 19.8354C24.0262 19.831 24.0127 19.8265 23.9992 19.8219C23.9857 19.8174 23.9721 19.8128 23.9587 19.8081C23.9451 19.8033 23.9316 19.7983 23.9181 19.7934C23.9046 19.7884 23.891 19.7835 23.8776 19.7784C23.864 19.7731 23.8505 19.7677 23.837 19.7623C23.8235 19.7569 23.8099 19.7516 23.7965 19.7461C23.7829 19.7404 23.7695 19.7345 23.756 19.7287C23.7424 19.7228 23.7288 19.717 23.7154 19.711C23.7018 19.7049 23.6884 19.6985 23.6749 19.6922C23.6613 19.6858 23.6478 19.6794 23.6344 19.6729C23.6208 19.6663 23.6072 19.6595 23.5938 19.6527C23.5802 19.6458 23.5667 19.6388 23.5533 19.6317C23.5397 19.6246 23.5261 19.6175 23.5127 19.6101C23.4991 19.6027 23.4857 19.5949 23.4722 19.5872C23.4587 19.5795 23.4451 19.5718 23.4317 19.5638C23.418 19.5557 23.4046 19.5474 23.3911 19.5392C23.3775 19.5307 23.364 19.5221 23.3506 19.5135C23.337 19.5048 23.3234 19.4962 23.3101 19.4872C23.2964 19.4781 23.283 19.4686 23.2695 19.4592C23.2559 19.4498 23.2424 19.4401 23.229 19.4304C23.2154 19.4206 23.2018 19.4107 23.1885 19.4006C23.1748 19.3902 23.1613 19.3796 23.1479 19.369C23.1343 19.3582 23.1208 19.3474 23.1074 19.3364C23.0938 19.3252 23.0802 19.314 23.0668 19.3025C23.0531 19.2907 23.0397 19.2787 23.0263 19.2666C23.0126 19.2543 22.9991 19.2419 22.9857 19.2293C22.9721 19.2164 22.9585 19.2035 22.9452 19.1904C22.9316 19.1769 22.918 19.1635 22.9047 19.1498C22.8909 19.1356 22.8775 19.1212 22.8641 19.1067C22.8504 19.0918 22.8369 19.0767 22.8236 19.0615C22.8099 19.0458 22.7964 19.03 22.7831 19.014C22.7694 18.9976 22.7558 18.9809 22.7425 18.9641C22.7288 18.9467 22.7152 18.929 22.702 18.9112C22.6883 18.8928 22.6747 18.8742 22.6615 18.8553C22.6477 18.8357 22.6341 18.8159 22.6209 18.7958C22.6071 18.7748 22.5936 18.7536 22.5804 18.7321C22.5665 18.7096 22.553 18.6868 22.5398 18.6638C22.5259 18.6396 22.5125 18.615 22.4993 18.5902C22.4853 18.5638 22.4719 18.5371 22.4588 18.5101C22.4448 18.4814 22.4313 18.4523 22.4182 18.4228C22.4042 18.3911 22.3906 18.3592 22.3777 18.3266C22.3634 18.2907 22.3501 18.254 22.3372 18.217C22.3228 18.176 22.3093 18.1344 22.2966 18.0921C22.282 18.0431 22.2684 17.9933 22.2561 17.9426C22.2407 17.8795 22.2273 17.8151 22.2156 17.7495C22.1981 17.6522 22.1845 17.5523 22.175 17.4496C22.1641 17.331 22.1585 17.2089 22.1585 17.0832C22.1585 16.9574 22.1641 16.8352 22.175 16.7165C22.1845 16.6138 22.1981 16.5138 22.2156 16.4165C22.2273 16.3509 22.2407 16.2864 22.2561 16.2233C22.2684 16.1726 22.282 16.1228 22.2966 16.0737C22.3093 16.0314 22.3228 15.9898 22.3372 15.9487C22.3501 15.9117 22.3634 15.8751 22.3777 15.8391C22.3906 15.8065 22.4042 15.7745 22.4182 15.7428C22.4313 15.7133 22.4448 15.6842 22.4588 15.6555C22.4719 15.6285 22.4853 15.6017 22.4993 15.5754C22.5125 15.5506 22.5259 15.526 22.5398 15.5017C22.553 15.4787 22.5665 15.4559 22.5804 15.4334C22.5936 15.4119 22.6071 15.3907 22.6209 15.3697C22.6341 15.3496 22.6477 15.3298 22.6615 15.3101C22.6747 15.2912 22.6883 15.2726 22.702 15.2542C22.7152 15.2363 22.7288 15.2188 22.7425 15.2013C22.7558 15.1845 22.7694 15.1678 22.7831 15.1514C22.7964 15.1353 22.8099 15.1195 22.8236 15.1039C22.8369 15.0886 22.8504 15.0735 22.8641 15.0586C22.8775 15.0441 22.8909 15.0296 22.9047 15.0155C22.918 15.0018 22.9316 14.9883 22.9452 14.9749C22.9585 14.9618 22.9721 14.9488 22.9857 14.936C22.9991 14.9234 23.0126 14.9109 23.0263 14.8986C23.0397 14.8865 23.0531 14.8745 23.0668 14.8627C23.0802 14.8512 23.0938 14.8401 23.1074 14.8288C23.1208 14.8178 23.1343 14.8069 23.1479 14.7962C23.1613 14.7855 23.1748 14.7749 23.1885 14.7646C23.2018 14.7545 23.2154 14.7446 23.229 14.7347C23.2424 14.725 23.2559 14.7154 23.2695 14.7059C23.283 14.6965 23.2964 14.6871 23.3101 14.6779C23.3234 14.669 23.337 14.6603 23.3506 14.6516C23.364 14.6429 23.3775 14.6344 23.3911 14.626C23.4046 14.6177 23.418 14.6094 23.4317 14.6013C23.4451 14.5934 23.4587 14.5856 23.4722 14.5779C23.4857 14.5702 23.4991 14.5625 23.5127 14.555C23.5261 14.5476 23.5397 14.5405 23.5533 14.5334C23.5667 14.5263 23.5802 14.5193 23.5938 14.5123C23.6072 14.5055 23.6208 14.4988 23.6344 14.4921C23.6478 14.4856 23.6613 14.4792 23.6749 14.4729C23.6884 14.4666 23.7018 14.4602 23.7154 14.4541C23.7288 14.448 23.7424 14.4422 23.756 14.4364C23.7695 14.4305 23.7829 14.4246 23.7965 14.419C23.8099 14.4134 23.8235 14.4081 23.837 14.4027C23.8505 14.3973 23.864 14.3919 23.8776 14.3867C23.891 14.3815 23.9046 14.3766 23.9181 14.3717C23.9316 14.3667 23.9451 14.3617 23.9587 14.3569C23.9721 14.3522 23.9857 14.3476 23.9992 14.3431C24.0127 14.3385 24.0262 14.334 24.0398 14.3296C24.0532 14.3252 24.0667 14.321 24.0803 14.3168C24.0937 14.3127 24.1072 14.3085 24.1208 14.3045L24.1614 14.2928C24.1748 14.289 24.1883 14.2852 24.2019 14.2815C24.2153 14.2779 24.2289 14.2744 24.2424 14.2709C24.2559 14.2675 24.2694 14.264 24.283 14.2606L24.3235 14.2511C24.337 14.2479 24.3504 14.2447 24.364 14.2417C24.3775 14.2387 24.3911 14.2359 24.4046 14.2331C24.4181 14.2302 24.4315 14.2272 24.4451 14.2245C24.4585 14.2218 24.4721 14.2194 24.4856 14.2169C24.4992 14.2144 24.5126 14.2117 24.5262 14.2092C24.5396 14.2068 24.5532 14.2047 24.5667 14.2025C24.5802 14.2002 24.5937 14.1979 24.6073 14.1957L24.6478 14.1897L24.6884 14.1838L24.7289 14.1784L24.7694 14.1735L24.81 14.1687L24.8505 14.1646C24.864 14.1633 24.8774 14.1618 24.891 14.1605C24.9045 14.1593 24.9181 14.1583 24.9316 14.1572L24.9721 14.154L25.0127 14.1512L25.0532 14.1487L25.0937 14.1464C25.1072 14.1458 25.1208 14.1453 25.1343 14.1448C25.1478 14.1442 25.1612 14.1436 25.1748 14.1431L25.2153 14.1421L25.2559 14.1412L25.2964 14.1406L25.3369 14.1405C25.3505 14.1404 25.3639 14.1402 25.3775 14.1403L25.418 14.1408L25.4585 14.1414L25.4991 14.1423L25.5396 14.1436L25.5802 14.145L25.6207 14.1469L25.6613 14.1489L25.7018 14.1511L25.7423 14.1538L25.7829 14.1566L25.7988 14.1577L25.8234 14.1596L25.8639 14.1629L25.9045 14.1664L25.945 14.1701L25.9855 14.174L26.0261 14.1782L26.0666 14.1826L26.1072 14.1871L26.1477 14.1919L26.1882 14.1969L26.2288 14.2021L26.2693 14.2075L26.3099 14.2132L26.3504 14.219L26.3909 14.2251L26.4315 14.2314L26.472 14.238L26.5125 14.2447L26.5531 14.2517L26.5936 14.2589L26.6342 14.2663L26.6747 14.274L26.7152 14.2819L26.7558 14.29L26.7963 14.2983L26.8368 14.3069L26.8774 14.3157L26.9179 14.3247L26.9584 14.3339L26.999 14.3434L27.0395 14.3532L27.0801 14.3631L27.1206 14.3733L27.1612 14.3837L27.2017 14.3944L27.2422 14.4053L27.2828 14.4164L27.3233 14.4278L27.3638 14.4394L27.4044 14.4513L27.4449 14.4634L27.4854 14.4757L27.526 14.4883L27.5665 14.501L27.6071 14.5141L27.6476 14.5274L27.6882 14.5409L27.7287 14.5546L27.7692 14.5686L27.8098 14.5828L27.8503 14.5973L27.8908 14.612L27.9314 14.6269L27.9719 14.6421L28.0124 14.6575L28.053 14.6732L28.0935 14.689L28.1341 14.7051L28.1746 14.7215L28.2151 14.738L28.2557 14.7548L28.2962 14.7719L28.3367 14.7891L28.3773 14.8066L28.4178 14.8243L28.4583 14.8422L28.4989 14.8603L28.5394 14.8787L28.58 14.8973L28.6205 14.916L28.661 14.935L28.7016 14.9542L28.7421 14.9736L28.7827 14.9932L28.8232 15.013L28.8637 15.033L28.9043 15.0531L28.9448 15.0735L28.9851 15.0939V13.3008L28.9448 13.2908L28.9043 13.2809L28.8637 13.2712L28.8232 13.2617L28.7827 13.2522L28.7421 13.2429L28.7016 13.2336L28.661 13.2245L28.6205 13.2155L28.58 13.2065L28.5394 13.1976L28.4989 13.1889L28.4583 13.1802L28.4178 13.1716L28.3773 13.1631L28.3367 13.1546L28.2962 13.1463L28.2557 13.138L28.2151 13.1298L28.1746 13.1217L28.1341 13.1137L28.0935 13.1057L28.053 13.0979L28.0124 13.0901L27.9719 13.0824L27.9314 13.0747L27.8908 13.0672L27.8503 13.0597L27.8098 13.0523L27.7692 13.045L27.7287 13.0378L27.6882 13.0307L27.6476 13.0236L27.6071 13.0166L27.5665 13.0097L27.526 13.0029L27.4854 12.9962L27.4449 12.9895L27.4044 12.983L27.3638 12.9765L27.3233 12.9701L27.2828 12.9638L27.2422 12.9576L27.2017 12.9514L27.1612 12.9454L27.1206 12.9394L27.0801 12.9336L27.0395 12.9278L26.999 12.9222L26.9584 12.9166L26.9179 12.9111L26.8774 12.9057L26.8368 12.9004L26.7963 12.8952L26.7558 12.8901L26.7152 12.8851L26.6747 12.8802L26.6342 12.8754L26.5936 12.8707L26.5531 12.8661L26.5125 12.8616L26.472 12.8573L26.4315 12.853L26.3909 12.8489L26.3504 12.8448L26.3099 12.8409L26.2693 12.837L26.2288 12.8334L26.1882 12.8298L26.1477 12.8263L26.1072 12.823L26.0666 12.8198L26.0261 12.8168L25.9855 12.8138L25.945 12.811L25.9045 12.8083L25.8639 12.8058L25.8234 12.8034L25.7829 12.8011L25.7423 12.799L25.7018 12.797L25.6811 12.796L25.6613 12.7952L25.6207 12.7935L25.5802 12.7918L25.5396 12.7901L25.4991 12.7887L25.4585 12.7873L25.418 12.7859L25.3775 12.7846L25.3369 12.7835L25.2964 12.7824L25.2559 12.7813L25.2153 12.7805L25.1748 12.7797L25.1343 12.7788L25.0937 12.7783L25.0532 12.7777L25.0127 12.7772L24.9721 12.7769L24.9316 12.7767L24.891 12.7764L24.8505 12.7763L24.81 12.7764L24.7694 12.7764L24.7289 12.7766L24.6884 12.777L24.6478 12.7774L24.6073 12.7778L24.5667 12.7785L24.5262 12.7792L24.4856 12.7799L24.4451 12.7809L24.4046 12.7819L24.364 12.7829L24.3235 12.7842L24.283 12.7856L24.2424 12.787L24.2019 12.7886L24.1614 12.7903L24.1208 12.792L24.0803 12.794L24.0398 12.796L23.9992 12.798L23.9587 12.8003L23.9181 12.8027L23.8776 12.8051L23.837 12.8078L23.7965 12.8105L23.756 12.8133L23.7154 12.8164L23.6749 12.8195L23.6344 12.8227L23.5938 12.8261L23.5533 12.8295L23.5127 12.8332L23.4722 12.837L23.4317 12.8408L23.3911 12.8449L23.3506 12.8491L23.3101 12.8533L23.2695 12.8579L23.229 12.8625L23.1885 12.8672L23.1479 12.8722L23.1074 12.8772L23.0668 12.8824L23.0263 12.8878L22.9857 12.8932L22.9452 12.8989L22.9047 12.9047L22.8641 12.9107L22.8236 12.9169L22.7831 12.9231L22.7425 12.9297L22.702 12.9364L22.6615 12.9432L22.6209 12.9502L22.5804 12.9573L22.5398 12.9648L22.4993 12.9723L22.4588 12.9801L22.4182 12.988L22.3777 12.996L22.3372 13.0045L22.2966 13.0129L22.2561 13.0216L22.2156 13.0306L22.175 13.0396L22.1345 13.049L22.0939 13.0584L22.0534 13.0683L22.0128 13.0782L21.9723 13.0885L21.9318 13.0989L21.8912 13.1096L21.8507 13.1205L21.8102 13.1316L21.7696 13.1431L21.7291 13.1546L21.6886 13.1666L21.648 13.1786L21.6075 13.1911L21.5669 13.2037L21.5264 13.2168C21.5129 13.2212 21.4992 13.2254 21.4858 13.2299L21.4453 13.2435C21.4318 13.2481 21.4182 13.2525 21.4048 13.2572L21.3642 13.2714L21.3237 13.2857C21.3101 13.2905 21.2967 13.2956 21.2832 13.3005C21.2696 13.3055 21.256 13.3104 21.2426 13.3154L21.2021 13.3309C21.1886 13.3361 21.175 13.3412 21.1616 13.3464L21.121 13.3625L21.0805 13.3788L21.0399 13.3956L20.9994 13.4126L20.9589 13.43L20.9183 13.4478L20.8778 13.4659L20.8373 13.4846L20.7968 13.5034C20.7831 13.5099 20.7697 13.5164 20.7562 13.523L20.7157 13.5427L20.6751 13.563L20.6346 13.5837C20.621 13.5908 20.6074 13.5977 20.5941 13.6048C20.5804 13.612 20.567 13.6193 20.5535 13.6266L20.513 13.6487L20.4725 13.6713C20.4588 13.679 20.4454 13.6867 20.4319 13.6945C20.4183 13.7023 20.4048 13.7101 20.3914 13.7181C20.3778 13.7261 20.3643 13.7342 20.3508 13.7424C20.3372 13.7506 20.3237 13.7589 20.3103 13.7672C20.2967 13.7756 20.2831 13.784 20.2698 13.7925C20.2561 13.8012 20.2426 13.8099 20.2292 13.8186L20.1887 13.8453C20.1751 13.8543 20.1615 13.8633 20.1481 13.8724L20.1076 13.9004C20.094 13.91 20.0805 13.9195 20.0671 13.9291C20.0535 13.9389 20.0399 13.9487 20.0265 13.9585C20.013 13.9685 19.9994 13.9784 19.986 13.9885C19.9723 13.9988 19.9589 14.0091 19.9455 14.0195C19.9318 14.0301 19.9183 14.0407 19.9049 14.0513C19.8913 14.0621 19.8778 14.0729 19.8644 14.0839V14.0838Z",fill:"#E10238"})),w=()=>(0,a.createElement)("svg",{width:"51",height:"35",viewBox:"0 0 51 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.5",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M18.6846 27.0292V28.3215V29.6137H18.1154V29.2999C17.9349 29.5327 17.661 29.6787 17.2886 29.6787C16.5546 29.6787 15.9791 29.1112 15.9791 28.3215C15.9791 27.5324 16.5546 26.9642 17.2886 26.9642C17.661 26.9642 17.9349 27.1103 18.1154 27.343V27.0292H18.6846ZM17.3594 27.494C16.8667 27.494 16.5652 27.8672 16.5652 28.3215C16.5652 28.7757 16.8667 29.1489 17.3594 29.1489C17.8302 29.1489 18.148 28.7918 18.148 28.3215C18.148 27.8511 17.8302 27.494 17.3594 27.494ZM37.9186 28.3215C37.9186 27.8672 38.2201 27.494 38.7128 27.494C39.1842 27.494 39.5014 27.8511 39.5014 28.3215C39.5014 28.7918 39.1842 29.1489 38.7128 29.1489C38.2201 29.1489 37.9186 28.7757 37.9186 28.3215ZM40.0386 25.9913V28.3215V29.6137H39.4688V29.2999C39.2882 29.5327 39.0143 29.6787 38.642 29.6787C37.9079 29.6787 37.3325 29.1112 37.3325 28.3215C37.3325 27.5324 37.9079 26.9642 38.642 26.9642C39.0143 26.9642 39.2882 27.1103 39.4688 27.343V25.9913H40.0386ZM25.7496 27.4674C26.1163 27.4674 26.352 27.6945 26.4122 28.0943H25.0538C25.1146 27.7211 25.3441 27.4674 25.7496 27.4674ZM24.4571 28.3215C24.4571 27.5157 24.9937 26.9642 25.7609 26.9642C26.4943 26.9642 26.9983 27.5157 27.0039 28.3215C27.0039 28.397 26.9983 28.4675 26.9926 28.5375L25.0488 28.5375C25.1309 29.0029 25.465 29.1706 25.8317 29.1706C26.0944 29.1706 26.374 29.0728 26.5933 28.9001L26.8723 29.3167C26.5545 29.5815 26.1934 29.6787 25.7991 29.6787C25.0156 29.6787 24.4571 29.1434 24.4571 28.3215ZM32.6337 28.3215C32.6337 27.8672 32.9353 27.494 33.4279 27.494C33.8987 27.494 34.2165 27.8511 34.2165 28.3215C34.2165 28.7918 33.8987 29.1489 33.4279 29.1489C32.9353 29.1489 32.6337 28.7757 32.6337 28.3215ZM34.7529 27.0292V28.3215V29.6137H34.1837V29.2999C34.0026 29.5327 33.7293 29.6787 33.3569 29.6787C32.6229 29.6787 32.0475 29.1112 32.0475 28.3215C32.0475 27.5324 32.6229 26.9642 33.3569 26.9642C33.7293 26.9642 34.0026 27.1103 34.1837 27.343V27.0292H34.7529ZM29.4191 28.3215C29.4191 29.1056 29.972 29.6787 30.8157 29.6787C31.21 29.6787 31.4726 29.5921 31.7572 29.3705L31.4839 28.9162C31.2701 29.0679 31.0457 29.1489 30.7988 29.1489C30.3443 29.1434 30.0102 28.8191 30.0102 28.3215C30.0102 27.8239 30.3443 27.4996 30.7988 27.494C31.0457 27.494 31.2701 27.5751 31.4839 27.7267L31.7572 27.2724C31.4726 27.0509 31.21 26.9642 30.8157 26.9642C29.972 26.9642 29.4191 27.5373 29.4191 28.3215ZM36.0674 27.3431C36.2153 27.1159 36.4291 26.9643 36.7575 26.9643C36.8729 26.9643 37.0371 26.986 37.1631 27.0349L36.9876 27.5646C36.8672 27.5157 36.7469 27.4997 36.6315 27.4997C36.2592 27.4997 36.073 27.7373 36.073 28.165V29.6138H35.5032V27.0293H36.0674V27.3431ZM21.4996 27.2347C21.2257 27.0564 20.8483 26.9642 20.4321 26.9642C19.7689 26.9642 19.342 27.278 19.342 27.7917C19.342 28.2132 19.6599 28.4731 20.2453 28.5542L20.5142 28.5919C20.8264 28.6352 20.9737 28.7163 20.9737 28.8624C20.9737 29.0623 20.7656 29.1762 20.377 29.1762C19.9827 29.1762 19.6981 29.0518 19.5063 28.9057L19.238 29.3433C19.5502 29.5704 19.9444 29.6787 20.3713 29.6787C21.1273 29.6787 21.5654 29.3272 21.5654 28.8352C21.5654 28.3809 21.2207 28.1432 20.6509 28.0621L20.3826 28.0238C20.1363 27.9916 19.9388 27.9433 19.9388 27.77C19.9388 27.5806 20.125 27.4674 20.4371 27.4674C20.7712 27.4674 21.0947 27.5918 21.2533 27.689L21.4996 27.2347ZM28.1542 27.3431C28.3015 27.1159 28.5152 26.9643 28.8437 26.9643C28.959 26.9643 29.1233 26.986 29.2493 27.0349L29.0738 27.5646C28.9534 27.5157 28.833 27.4997 28.7177 27.4997C28.3454 27.4997 28.1592 27.7373 28.1592 28.165V29.6138H27.59V27.0293L28.1542 27.0293V27.3431ZM23.9862 27.0292H23.0553V26.2451H22.4799V27.0292H21.949V27.5429H22.4799V28.7219C22.4799 29.3216 22.7156 29.6787 23.3888 29.6787C23.6358 29.6787 23.9204 29.6032 24.1009 29.4788L23.9367 28.9973C23.7668 29.0945 23.5806 29.1434 23.4327 29.1434C23.1481 29.1434 23.0553 28.9701 23.0553 28.7108V27.5429H23.9862V27.0292ZM15.4758 27.9917V29.6138H14.9003V28.1755C14.9003 27.7373 14.7142 27.4941 14.3255 27.4941C13.9475 27.4941 13.6849 27.7324 13.6849 28.1811V29.6138H13.1095V28.1755C13.1095 27.7373 12.9183 27.4941 12.5403 27.4941C12.151 27.4941 11.899 27.7324 11.899 28.1811V29.6138H11.3242V27.0293H11.894V27.348C12.1078 27.0454 12.3811 26.9643 12.6606 26.9643C13.0606 26.9643 13.3451 27.1376 13.5257 27.4242C13.767 27.0615 14.1118 26.9587 14.4459 26.9643C15.0815 26.9699 15.4758 27.3808 15.4758 27.9917Z",fill:"#231F20"}),(0,a.createElement)("path",{d:"M29.9381 22.6376H21.3115V7.33105H29.9381V22.6376Z",fill:"#FF5F00"}),(0,a.createElement)("path",{d:"M21.8586 14.9846C21.8586 11.8796 23.331 9.11372 25.624 7.33129C23.9472 6.02789 21.831 5.24994 19.5311 5.24994C14.0864 5.24994 9.67285 9.60822 9.67285 14.9846C9.67285 20.361 14.0864 24.7192 19.5311 24.7192C21.831 24.7192 23.9472 23.9413 25.624 22.6379C23.331 20.8555 21.8586 18.0896 21.8586 14.9846Z",fill:"#EB001B"}),(0,a.createElement)("path",{d:"M41.5758 14.9846C41.5758 20.361 37.1622 24.7192 31.7175 24.7192C29.4177 24.7192 27.3014 23.9413 25.624 22.6379C27.9176 20.8555 29.3901 18.0896 29.3901 14.9846C29.3901 11.8796 27.9176 9.11372 25.624 7.33129C27.3014 6.02789 29.4177 5.24994 31.7175 5.24994C37.1622 5.24994 41.5758 9.60822 41.5758 14.9846Z",fill:"#F79E1B"})),H=()=>(0,a.createElement)("svg",{width:"52",height:"35",viewBox:"0 0 52 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.878906",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M44.0545 5.25735L34.3353 5.25488C34.3341 5.25488 34.3328 5.25488 34.3328 5.25488C34.3253 5.25488 34.3179 5.2562 34.3106 5.2562C32.9754 5.29641 31.3124 6.34915 31.0096 7.64726L26.4132 27.6401C26.1104 28.9503 26.9343 30.0165 28.2599 30.0361H38.4703C39.7756 29.9726 41.044 28.932 41.3417 27.6486L45.9382 7.65564C46.2459 6.33208 45.402 5.25735 44.0545 5.25735Z",fill:"#01798A"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M26.4134 27.6401L31.0097 7.64729C31.3126 6.34917 32.9755 5.29643 34.3107 5.25622L30.4464 5.25376L23.484 5.25244C22.1451 5.27936 20.4605 6.33949 20.1577 7.64729L15.5601 27.6401C15.2561 28.9503 16.0813 30.0165 17.4059 30.0361H28.26C26.9345 30.0165 26.1105 28.9503 26.4134 27.6401",fill:"#024381"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M15.5602 27.64L20.1578 7.64714C20.4606 6.33934 22.1452 5.27922 23.4841 5.2523L14.5649 5.25C13.2185 5.25 11.4923 6.32227 11.1846 7.64714L6.58694 27.64C6.55896 27.762 6.54344 27.8815 6.53418 27.9986V28.3695C6.62418 29.3246 7.36619 30.0201 8.43278 30.036H17.406C16.0814 30.0163 15.2562 28.9502 15.5602 27.64Z",fill:"#DD0228"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M23.6716 19.8205H23.8404C23.9955 19.8205 24.0999 19.7693 24.1488 19.668L24.5874 19.0227H25.762L25.5171 19.4472H26.9254L26.7467 20.0975H25.0709C24.8779 20.3829 24.6403 20.5171 24.3547 20.5012H23.4818L23.6716 19.8205H23.6716ZM23.4788 20.7527H26.5643L26.3676 21.4591H25.1268L24.9374 22.1409H26.1449L25.9482 22.8473H24.7407L24.4602 23.8548C24.3908 24.0232 24.4821 24.099 24.7327 24.0818H25.7168L25.5345 24.7382H23.6451C23.287 24.7382 23.1641 24.5368 23.2765 24.1331L23.6351 22.8473H22.8633L23.0593 22.1409H23.8313L24.0205 21.4591H23.2827L23.4788 20.7527H23.4788ZM28.4035 19.018L28.355 19.4315C28.355 19.4315 28.937 19.002 29.4656 19.002H31.4189L30.6719 21.6601C30.61 21.964 30.3443 22.1151 29.8752 22.1151H27.6612L27.1426 23.9817C27.1128 24.0817 27.155 24.133 27.2667 24.133H27.7023L27.5422 24.7124H26.4347C26.0096 24.7124 25.8328 24.5867 25.903 24.3343L27.3684 19.018H28.4035H28.4035ZM30.0576 19.7693H28.3141L28.1056 20.4866C28.1056 20.4866 28.3959 20.2805 28.8811 20.2731C29.365 20.2657 29.9173 20.2731 29.9173 20.2731L30.0576 19.7693ZM29.4261 21.4333C29.555 21.4504 29.6271 21.4003 29.6358 21.282L29.7425 20.9039H27.9964L27.85 21.4333H29.4261ZM28.2483 22.2921H29.2547L29.236 22.7203H29.504C29.6394 22.7203 29.7065 22.6776 29.7065 22.5935L29.7858 22.3166H30.6223L30.5106 22.7203C30.4161 23.057 30.1656 23.2327 29.7586 23.2499H29.2225L29.22 23.9817C29.2101 24.0989 29.318 24.1587 29.54 24.1587H30.0439L29.8813 24.7381H28.6727C28.3339 24.754 28.1678 24.5953 28.1713 24.2587L28.2483 22.2921V22.2921Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M16.0529 15.4764C15.9164 16.1339 15.6 16.639 15.1091 16.9976C14.6227 17.3502 13.9954 17.527 13.2273 17.527C12.5044 17.527 11.9745 17.3465 11.6364 16.9841C11.4018 16.7267 11.2852 16.3998 11.2852 16.0045C11.2852 15.8411 11.3051 15.6654 11.3448 15.4764L12.1631 11.5972H13.3991L12.5919 15.4325C12.5671 15.5386 12.5571 15.6374 12.5584 15.7265C12.5571 15.9229 12.6068 16.0839 12.7073 16.2095C12.8537 16.3962 13.0914 16.4889 13.4221 16.4889C13.8024 16.4889 14.1158 16.3974 14.359 16.2132C14.6022 16.0302 14.761 15.7704 14.8324 15.4325L15.6422 11.5972H16.8719L16.0529 15.4764Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M21.2436 13.9502H22.2116L21.4534 17.4123H20.4873L21.2436 13.9502ZM21.5482 12.689H22.5248L22.3424 13.5293H21.3659L21.5482 12.689Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M23.0688 17.1487C22.8156 16.9109 22.6878 16.59 22.6865 16.1826C22.6865 16.113 22.6908 16.0338 22.7002 15.9471C22.7095 15.8592 22.7214 15.7739 22.738 15.6946C22.8528 15.1323 23.0973 14.6858 23.4739 14.3564C23.8499 14.0258 24.3036 13.8599 24.8347 13.8599C25.2696 13.8599 25.6145 13.9794 25.8672 14.2185C26.1196 14.4589 26.2462 14.7833 26.2462 15.1957C26.2462 15.2664 26.2407 15.3481 26.2313 15.436C26.2201 15.525 26.2066 15.6104 26.1909 15.6946C26.0787 16.2484 25.8349 16.69 25.4583 17.0134C25.0816 17.3391 24.6293 17.5012 24.1019 17.5012C23.6651 17.5012 23.3213 17.3841 23.0688 17.1487M24.9136 16.4631C25.0843 16.2814 25.2065 16.0056 25.2809 15.6385C25.2921 15.5812 25.302 15.5214 25.3082 15.4616C25.3143 15.403 25.3168 15.3482 25.3168 15.2981C25.3168 15.0846 25.2616 14.9188 25.1506 14.8016C25.0402 14.6833 24.8832 14.6248 24.6804 14.6248C24.4122 14.6248 24.1939 14.7174 24.0227 14.9029C23.8501 15.0884 23.7279 15.3689 23.6509 15.7422C23.6404 15.7995 23.6317 15.8569 23.6237 15.913C23.6175 15.9703 23.6157 16.024 23.6168 16.0728C23.6168 16.285 23.6721 16.4485 23.7831 16.5644C23.8935 16.6803 24.0498 16.7376 24.2553 16.7376C24.5246 16.7376 24.743 16.6461 24.9136 16.4631Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M32.5262 19.8496L32.7596 19.0421H33.9397L33.8888 19.3385C33.8888 19.3385 34.4918 19.0421 34.9261 19.0421C35.3606 19.0421 36.3854 19.0421 36.3854 19.0421L36.1535 19.8496H35.9239L34.8231 23.6582H35.0527L34.8343 24.4146H34.6047L34.5092 24.7427H33.3664L33.4617 24.4146H31.207L31.4268 23.6582H31.6527L32.7544 19.8496H32.5262H32.5262ZM33.7993 19.8498L33.4989 20.8805C33.4989 20.8805 34.0128 20.6866 34.4558 20.6318C34.5536 20.2718 34.6815 19.8498 34.6815 19.8498H33.7993V19.8498ZM33.3598 21.3637L33.0585 22.4433C33.0585 22.4433 33.628 22.1676 34.0188 22.1444C34.1317 21.7271 34.2447 21.3637 34.2447 21.3637H33.3598V21.3637ZM33.5808 23.6583L33.8067 22.8751H32.9258L32.6987 23.6583H33.5808ZM36.4352 18.9922H37.5447L37.5918 19.3946C37.5844 19.4971 37.6463 19.546 37.7779 19.546H37.9739L37.7756 20.2279H36.9601C36.6487 20.2437 36.4886 20.1267 36.4738 19.8741L36.4352 18.9922ZM36.1102 20.4548H39.7039L39.493 21.1868H38.3488L38.1526 21.8673H39.2957L39.0835 22.5981H37.8104L37.5224 23.0264H38.1455L38.2894 23.8839C38.3066 23.9693 38.3836 24.0108 38.5151 24.0108H38.7086L38.5053 24.717H37.8202C37.4653 24.7342 37.2818 24.6171 37.2667 24.3646L37.1016 23.5814L36.5346 24.4146C36.4005 24.65 36.1945 24.7599 35.9167 24.7427H34.8705L35.074 24.0363H35.4004C35.5345 24.0363 35.646 23.9778 35.7465 23.8595L36.634 22.5981H35.4898L35.7018 21.8673H36.9428L37.1402 21.1868H35.898L36.1102 20.4548Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M17.1915 13.9492H18.0645L17.9647 14.4493L18.0899 14.3066C18.3729 14.009 18.7166 13.8613 19.1224 13.8613C19.4898 13.8613 19.7547 13.9663 19.921 14.1773C20.0847 14.3884 20.1294 14.6799 20.0519 15.0544L19.571 17.4137H18.6738L19.1081 15.2752C19.1529 15.0544 19.1405 14.8897 19.0715 14.7836C19.0033 14.6774 18.873 14.625 18.685 14.625C18.4542 14.625 18.26 14.6957 18.1017 14.8361C17.9429 14.9776 17.8381 15.174 17.7865 15.424L17.3863 17.4137H16.4873L17.1915 13.9492Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M27.2021 13.9492H28.0758L27.9767 14.4493L28.1006 14.3066C28.3837 14.009 28.7287 13.8613 29.1332 13.8613C29.5005 13.8613 29.766 13.9663 29.931 14.1773C30.0937 14.3884 30.1408 14.6799 30.0614 15.0544L29.5823 17.4137H28.6839L29.1184 15.2752C29.1629 15.0544 29.1506 14.8897 29.0823 14.7836C29.0115 14.6774 28.8836 14.625 28.6964 14.625C28.4655 14.625 28.272 14.6957 28.1119 14.8361C27.953 14.9776 27.8476 15.174 27.798 15.424L27.396 17.4137H26.498L27.2021 13.9492",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M31.5212 11.8018H34.0577C34.5454 11.8018 34.9225 11.9104 35.1818 12.1238C35.44 12.3398 35.5692 12.6497 35.5692 13.0534V13.0656C35.5692 13.1424 35.564 13.229 35.5567 13.3229C35.5441 13.4157 35.5279 13.5095 35.5071 13.6072C35.3954 14.1415 35.1359 14.571 34.7352 14.8967C34.333 15.2211 33.8567 15.3846 33.3082 15.3846H31.9479L31.5274 17.4133H30.3496L31.5212 11.8018M32.1554 14.4087H33.2835C33.5776 14.4087 33.8108 14.3415 33.9809 14.2086C34.1497 14.0744 34.2614 13.8695 34.3234 13.5914C34.3332 13.54 34.3394 13.4937 34.3469 13.451C34.3508 13.4108 34.3556 13.3704 34.3556 13.3315C34.3556 13.1326 34.2838 12.9887 34.1397 12.8984C33.9958 12.8068 33.7701 12.763 33.4572 12.763H32.4991L32.1554 14.4087",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M40.8406 18.0833C40.4683 18.8615 40.1135 19.3152 39.9051 19.5263C39.6964 19.735 39.2833 20.2205 38.2881 20.1839L38.3737 19.5898C39.2112 19.3361 39.6642 18.1929 39.9223 17.6867L39.6146 13.9587L40.2624 13.9502H40.8059L40.8643 16.2888L41.8829 13.9502H42.9143L40.8406 18.0833Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M37.9561 14.232L37.5464 14.509C37.1183 14.1796 36.7274 13.9759 35.9731 14.3199C34.9454 14.7883 34.0868 18.381 36.9161 17.1976L37.0774 17.3855L38.1905 17.4135L38.9215 14.1491L37.9561 14.232M37.3233 16.0168C37.1445 16.5353 36.7451 16.8781 36.4324 16.7805C36.1196 16.6853 36.008 16.1851 36.1891 15.6655C36.3678 15.1458 36.7698 14.8042 37.08 14.9018C37.3927 14.997 37.5056 15.4971 37.3233 16.0168Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M34.3328 5.26107L30.4463 5.25342L34.3106 5.26981C34.318 5.26981 34.3253 5.26107 34.3328 5.26107",fill:"#E02F41"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M30.4467 5.27406L23.5378 5.25C23.5204 5.25 23.5024 5.25765 23.4844 5.26531L30.4467 5.27406",fill:"#2E4F7D"})),_=()=>(0,a.createElement)("svg",{width:"51",height:"35",viewBox:"0 0 51 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.5",y:"0.5",width:"50",height:"34",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{d:"M22.6435 24.004H19.248L21.3718 11.7534H24.7671L22.6435 24.004Z",fill:"#15195A"}),(0,a.createElement)("path",{d:"M34.952 12.0528C34.2823 11.8049 33.22 11.5312 31.9066 11.5312C28.5534 11.5312 26.1922 13.1993 26.1777 15.5842C26.1499 17.3437 27.8683 18.321 29.1536 18.9077C30.4672 19.5072 30.9138 19.8985 30.9138 20.4329C30.9004 21.2536 29.8522 21.6319 28.8747 21.6319C27.5191 21.6319 26.7927 21.4369 25.6889 20.9803L25.2417 20.7845L24.7666 23.5345C25.563 23.873 27.0302 24.1733 28.5534 24.1865C32.1162 24.1865 34.4356 22.5442 34.4631 20.0028C34.4767 18.6082 33.5693 17.5396 31.613 16.6665C30.4254 16.1059 29.6981 15.728 29.6981 15.1544C29.7121 14.6331 30.3133 14.099 31.6539 14.099C32.7577 14.0729 33.5687 14.3204 34.1831 14.5681L34.4902 14.6982L34.952 12.0528Z",fill:"#15195A"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M41.0301 11.7534H43.6565L46.3957 24.0039H43.2519C43.2519 24.0039 42.9442 22.5963 42.8467 22.1662H38.4873C38.3612 22.4919 37.7747 24.0039 37.7747 24.0039H34.2119L39.2554 12.7699C39.6049 11.9748 40.2202 11.7534 41.0301 11.7534ZM40.8208 16.2365C40.8208 16.2365 39.7448 18.9603 39.4652 19.6641H42.2875C42.1478 19.0516 41.5048 16.1192 41.5048 16.1192L41.2676 15.0636C41.1676 15.3355 41.0231 15.7092 40.9256 15.9612C40.8596 16.1321 40.8151 16.2471 40.8208 16.2365Z",fill:"#15195A"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.53636 11.7534H9.99929C10.7398 11.7792 11.3406 12.0008 11.5361 12.7832L12.7233 18.4113C12.7234 18.4118 12.7236 18.4124 12.7238 18.4129L13.0871 20.1072L16.4124 11.7534H20.0028L14.6657 23.991H11.0752L8.04881 13.3464C7.00461 12.7769 5.81289 12.3188 4.48047 12.0009L4.53636 11.7534Z",fill:"#15195A"})),v=()=>(0,a.createElement)("svg",{width:"64",height:"40",viewBox:"0 0 64 40",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"0.5",y:"0.5",width:"63",height:"39",rx:"3.5",fill:"#7F54B3"}),(0,a.createElement)("g",{clipPath:"url(#clip0_1424_5139)"},(0,a.createElement)("path",{d:"M38.0384 16.1863H40.6738C41.604 16.1863 42.3496 16.4077 42.9106 16.8507C43.4716 17.2936 43.7521 17.8768 43.7521 18.6002C43.7521 19.3606 43.4642 19.9585 42.8958 20.3867C42.3274 20.8148 41.5375 21.0363 40.5262 21.0363H40.1571V24.0112H38.0237V16.1863H38.0384ZM40.1645 17.6848V19.5303C40.6443 19.523 40.9986 19.4491 41.2201 19.3015C41.449 19.1539 41.5597 18.925 41.5597 18.615C41.5597 18.2754 41.449 18.0392 41.2275 17.9063C41.0134 17.766 40.6591 17.6922 40.1645 17.6848Z",fill:"white"}),(0,a.createElement)("path",{d:"M50.3739 24.0039H48.1593L47.7975 22.6972H45.546L45.1769 24.0039H43.0066L45.4943 16.1789H47.8861L50.3739 24.0039ZM47.3915 21.2947C47.0741 20.1283 46.8305 19.021 46.6755 17.9727H46.6459C46.4762 19.0579 46.2399 20.1652 45.9373 21.2947H47.3915Z",fill:"white"}),(0,a.createElement)("path",{d:"M49.0967 16.1863H51.4885C52.02 17.3083 52.4038 18.1794 52.6401 18.7848H52.6696C52.9058 18.1573 53.2897 17.2936 53.8064 16.1863H56.2499L53.7326 20.4679V24.0039H51.577V20.4679L49.0967 16.1863Z",fill:"white"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M33.0704 13.071H10.3559C8.91636 13.071 7.75 14.2374 7.75 15.6695V24.336C7.75 25.7682 8.91636 26.9345 10.3485 26.9345H21.1115L26.0353 29.6733L24.9206 26.9345H33.0704C34.5025 26.9345 35.6689 25.7682 35.6689 24.336V15.6695C35.6689 14.2374 34.5025 13.071 33.0704 13.071ZM9.87596 15.0716C9.59544 15.079 9.33707 15.2118 9.1599 15.4259C8.99012 15.6474 8.92368 15.9279 8.98274 16.2084C9.6545 20.49 10.282 23.3764 10.8652 24.8675C11.0792 25.4138 11.345 25.6722 11.655 25.65C12.1275 25.6131 12.7033 24.9561 13.3751 23.6643C13.5241 23.3661 13.7058 23.0039 13.9191 22.5789L13.9199 22.5772L13.9204 22.5763L13.9207 22.5757L13.9208 22.5755C14.2247 21.9699 14.5925 21.2368 15.0212 20.3793C15.6413 22.5274 16.4829 24.1441 17.5459 25.2293C17.8486 25.5319 18.1439 25.6722 18.4465 25.65C18.7049 25.6353 18.9411 25.4729 19.0518 25.2366C19.1626 25.0078 19.2142 24.7494 19.1847 24.4911C19.1109 23.4502 19.2216 21.9959 19.5021 20.143C19.79 18.2237 20.1591 16.8506 20.6021 16.0239C20.6907 15.8615 20.7276 15.6695 20.7128 15.4776C20.698 15.2192 20.5725 14.9756 20.3658 14.8206C20.1665 14.6508 19.9082 14.5696 19.6498 14.5917C19.325 14.6065 19.0371 14.7984 18.8968 15.0937C18.1955 16.3856 17.6935 18.4821 17.3909 21.3758C16.911 20.1135 16.5493 18.8069 16.3131 17.4781C16.1876 16.799 15.8776 16.4815 15.3756 16.5185C15.0286 16.5406 14.7481 16.7694 14.5193 17.1976L12.0168 21.9516C11.6107 20.2907 11.2269 18.268 10.8725 15.891C10.784 15.3078 10.4518 15.0347 9.87596 15.0716ZM26.53 17.2197C26.1461 16.5332 25.4817 16.046 24.7066 15.8984C24.4999 15.8541 24.2932 15.8319 24.0865 15.8319C22.994 15.8319 22.1008 16.4003 21.4068 17.5372C20.8163 18.5042 20.5062 19.6189 20.521 20.7484C20.521 21.6268 20.7056 22.3798 21.0673 23.0073C21.4511 23.6938 22.1155 24.181 22.8906 24.3287C23.0973 24.3729 23.304 24.3951 23.5107 24.3951C24.6106 24.3951 25.5039 23.8267 26.1904 22.6898C26.781 21.7154 27.091 20.6007 27.0763 19.4565C27.0763 18.578 26.8917 17.8325 26.53 17.2197ZM25.0905 20.3866C24.9355 21.1322 24.6476 21.6933 24.2194 22.0771C23.8872 22.3798 23.5772 22.4979 23.2966 22.4462C23.0161 22.3946 22.7947 22.1436 22.6249 21.708C22.4994 21.3758 22.4256 21.0289 22.4256 20.6672C22.4256 20.3866 22.4551 20.1061 22.5068 19.833C22.6175 19.3458 22.8168 18.8881 23.1121 18.4747C23.4886 17.921 23.8872 17.6848 24.3006 17.7734C24.5811 17.8325 24.8026 18.0761 24.9724 18.5116C25.0979 18.8438 25.1717 19.1908 25.1717 19.5451C25.1717 19.8256 25.1495 20.1061 25.0905 20.3866ZM31.8524 15.8984C32.6275 16.046 33.2919 16.5332 33.6757 17.2197C34.0374 17.8325 34.222 18.578 34.222 19.4565C34.2367 20.6007 33.9267 21.7154 33.3361 22.6898C32.6496 23.8267 31.7564 24.3951 30.6565 24.3951C30.4498 24.3951 30.2431 24.3729 30.0364 24.3287C29.2613 24.181 28.5969 23.6938 28.213 23.0073C27.8513 22.3798 27.6667 21.6268 27.6667 20.7484C27.652 19.6189 27.962 18.5042 28.5526 17.5372C29.2465 16.4003 30.1397 15.8319 31.2323 15.8319C31.439 15.8319 31.6457 15.8541 31.8524 15.8984ZM31.3651 22.0771C31.7933 21.6933 32.0812 21.1322 32.2362 20.3866C32.2953 20.1061 32.3174 19.8256 32.3174 19.5451C32.3174 19.1908 32.2436 18.8438 32.1181 18.5116C31.9483 18.0761 31.7269 17.8325 31.4463 17.7734C31.0329 17.6848 30.6343 17.921 30.2578 18.4747C29.9626 18.8881 29.7632 19.3458 29.6525 19.833C29.6008 20.1061 29.5713 20.3866 29.5713 20.6672C29.5713 21.0289 29.6451 21.3758 29.7706 21.708C29.9404 22.1436 30.1619 22.3946 30.4424 22.4462C30.7229 22.4979 31.0329 22.3798 31.3651 22.0771Z",fill:"white"})),(0,a.createElement)("defs",null,(0,a.createElement)("clipPath",{id:"clip0_1424_5139"},(0,a.createElement)("rect",{width:"48.5",height:"30.9953",fill:"white",transform:"translate(7.75 4.50232)"})))),E=()=>(0,a.createElement)("svg",{width:"294",height:"275",viewBox:"0 0 294 275",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("g",{clipPath:"url(#clip0_255_63852)"},(0,a.createElement)("path",{d:"M0.5 10C0.5 4.47716 4.97715 0 10.5 0H725.5C731.023 0 735.5 4.47715 735.5 10V332H0.5V10Z",fill:"#F6F7F7"}),(0,a.createElement)("circle",{cx:"17.5",cy:"14",r:"5",fill:"#D94F4F"}),(0,a.createElement)("circle",{cx:"35.5",cy:"14",r:"5",fill:"#F0B849"}),(0,a.createElement)("circle",{cx:"53.5",cy:"14",r:"5",fill:"#4AB866"}),(0,a.createElement)("rect",{x:"3.5",y:"28",width:"287",height:"304",fill:"white"}),(0,a.createElement)("line",{x1:"27.5",y1:"95.5",x2:"270.5",y2:"95.5",stroke:"#DCDCDE"}),(0,a.createElement)("line",{x1:"49.5",y1:"157.5",x2:"253.5",y2:"157.5",stroke:"#DCDCDE"}),(0,a.createElement)("line",{x1:"49.5",y1:"198.5",x2:"253.5",y2:"198.5",stroke:"#DCDCDE"}),(0,a.createElement)("rect",{x:"28",y:"116.5",width:"242",height:"127",rx:"9.5",stroke:"#DCDCDE"}),(0,a.createElement)("path",{d:"M50.3984 135.954V143H52.8154C54.9102 143 56.1406 141.696 56.1406 139.475C56.1406 137.258 54.9053 135.954 52.8154 135.954H50.3984ZM51.2773 136.745H52.7568C54.3193 136.745 55.2422 137.761 55.2422 139.484C55.2422 141.203 54.3291 142.209 52.7568 142.209H51.2773V136.745ZM61.043 141.638C60.8232 142.102 60.3643 142.351 59.6855 142.351C58.792 142.351 58.2109 141.691 58.167 140.651V140.612H61.9512V140.29C61.9512 138.654 61.0869 137.644 59.666 137.644C58.2207 137.644 57.293 138.718 57.293 140.373C57.293 142.038 58.2061 143.093 59.666 143.093C60.8184 143.093 61.6387 142.536 61.8828 141.638H61.043ZM59.6562 138.386C60.4912 138.386 61.0479 139.001 61.0674 139.934H58.167C58.2305 139.001 58.8164 138.386 59.6562 138.386ZM65.833 137.644C65.1152 137.644 64.4854 138.01 64.1484 138.615H64.0703V137.736H63.2695V144.758H64.1094V142.209H64.1875C64.4756 142.766 65.0811 143.093 65.833 143.093C67.1709 143.093 68.0449 142.014 68.0449 140.368C68.0449 138.713 67.1758 137.644 65.833 137.644ZM65.6328 142.336C64.6855 142.336 64.085 141.574 64.085 140.368C64.085 139.157 64.6855 138.4 65.6377 138.4C66.5996 138.4 67.1758 139.138 67.1758 140.368C67.1758 141.599 66.5996 142.336 65.6328 142.336ZM71.5264 143.093C73.0254 143.093 73.9531 142.058 73.9531 140.368C73.9531 138.674 73.0254 137.644 71.5264 137.644C70.0273 137.644 69.0996 138.674 69.0996 140.368C69.0996 142.058 70.0273 143.093 71.5264 143.093ZM71.5264 142.336C70.5303 142.336 69.9688 141.613 69.9688 140.368C69.9688 139.118 70.5303 138.4 71.5264 138.4C72.5225 138.4 73.084 139.118 73.084 140.368C73.084 141.613 72.5225 142.336 71.5264 142.336ZM75.1494 139.177C75.1494 139.938 75.5986 140.363 76.585 140.603L77.4883 140.822C78.0498 140.959 78.3232 141.203 78.3232 141.564C78.3232 142.048 77.8154 142.385 77.1074 142.385C76.4336 142.385 76.0137 142.102 75.8721 141.657H75.0078C75.1006 142.531 75.9062 143.093 77.0781 143.093C78.2744 143.093 79.1875 142.443 79.1875 141.501C79.1875 140.744 78.709 140.314 77.7178 140.075L76.9072 139.88C76.2871 139.729 75.9941 139.504 75.9941 139.143C75.9941 138.674 76.4824 138.356 77.1074 138.356C77.7422 138.356 78.1523 138.635 78.2646 139.055H79.0947C78.9824 138.19 78.2158 137.644 77.1123 137.644C75.9941 137.644 75.1494 138.303 75.1494 139.177ZM80.9453 136.721C81.2676 136.721 81.5312 136.457 81.5312 136.135C81.5312 135.812 81.2676 135.549 80.9453 135.549C80.623 135.549 80.3594 135.812 80.3594 136.135C80.3594 136.457 80.623 136.721 80.9453 136.721ZM80.5254 143H81.3652V137.736H80.5254V143ZM83.3184 136.374V137.736H82.4688V138.439H83.3184V141.633C83.3184 142.639 83.7529 143.039 84.8369 143.039C85.0029 143.039 85.1641 143.02 85.3301 142.99V142.282C85.1738 142.297 85.0908 142.302 84.9395 142.302C84.3926 142.302 84.1582 142.038 84.1582 141.418V138.439H85.3301V137.736H84.1582V136.374H83.3184Z",fill:"#2C3338"}),(0,a.createElement)("path",{d:"M126.459 143.708H127.045V142.863C128.197 142.775 129.154 142.136 129.154 140.959C129.154 139.934 128.451 139.416 127.196 139.113L127.045 139.079V136.857C127.704 136.94 128.173 137.326 128.236 137.985H129.086C129.052 136.906 128.173 136.193 127.045 136.091V135.246H126.459V136.096C125.302 136.198 124.477 136.892 124.477 137.941C124.477 138.903 125.131 139.445 126.347 139.738L126.459 139.768V142.097C125.614 142.004 125.238 141.54 125.15 140.93H124.301C124.335 142.067 125.297 142.756 126.459 142.858V143.708ZM125.326 137.883C125.326 137.409 125.717 136.96 126.459 136.862V138.938C125.619 138.732 125.326 138.361 125.326 137.883ZM127.074 139.914C128.041 140.148 128.305 140.49 128.305 141.027C128.305 141.589 127.953 142.033 127.045 142.102V139.909L127.074 139.914ZM132.25 139.753H133.124C134.115 139.753 134.726 140.261 134.726 141.076C134.726 141.867 134.066 142.399 133.139 142.399C132.23 142.399 131.596 141.926 131.518 141.184H130.668C130.731 142.38 131.718 143.166 133.148 143.166C134.55 143.166 135.629 142.282 135.629 141.101C135.629 140.119 135.023 139.499 134.11 139.353V139.274C134.833 139.064 135.36 138.503 135.365 137.653C135.37 136.667 134.569 135.788 133.178 135.788C131.752 135.788 130.878 136.633 130.79 137.78H131.645C131.718 136.989 132.27 136.555 133.119 136.555C133.969 136.555 134.472 137.092 134.472 137.751C134.472 138.483 133.896 139.001 133.085 139.001H132.25V139.753ZM139.384 143.166C140.824 143.166 141.806 142.17 141.806 140.72C141.806 139.323 140.829 138.396 139.647 138.396C138.944 138.396 138.422 138.61 138.08 139.035H138.002L138.222 136.74H141.444V135.954H137.533L137.128 139.982H137.953C138.231 139.46 138.759 139.152 139.428 139.152C140.316 139.152 140.927 139.792 140.927 140.744C140.927 141.73 140.316 142.395 139.394 142.395C138.563 142.395 137.958 141.892 137.88 141.14H137.016C137.094 142.346 138.051 143.166 139.384 143.166ZM143.188 137.941H144.037C144.037 137.106 144.599 136.555 145.443 136.555C146.273 136.555 146.776 137.111 146.776 137.858C146.776 138.479 146.513 138.845 145.614 139.816L143.231 142.395V143H147.792V142.209H144.452V142.131L146.054 140.476C147.323 139.162 147.675 138.576 147.675 137.766C147.675 136.623 146.732 135.788 145.502 135.788C144.154 135.788 143.188 136.687 143.188 137.941ZM149.828 143.049C150.18 143.049 150.463 142.761 150.463 142.414C150.463 142.062 150.18 141.779 149.828 141.779C149.481 141.779 149.193 142.062 149.193 142.414C149.193 142.761 149.481 143.049 149.828 143.049ZM153.959 143.161C155.683 143.161 156.669 141.774 156.669 139.353C156.669 136.955 155.536 135.788 154.018 135.788C152.572 135.788 151.547 136.799 151.547 138.215C151.547 139.582 152.519 140.573 153.861 140.573C154.701 140.573 155.39 140.173 155.736 139.489H155.814C155.766 141.364 155.116 142.38 153.969 142.38C153.275 142.38 152.738 141.994 152.553 141.359H151.649C151.869 142.468 152.763 143.161 153.959 143.161ZM154.018 139.812C153.085 139.812 152.436 139.147 152.436 138.186C152.436 137.263 153.124 136.56 154.027 136.56C154.931 136.56 155.619 137.272 155.619 138.215C155.619 139.147 154.95 139.812 154.018 139.812ZM160.336 143.161C162.06 143.161 163.046 141.774 163.046 139.353C163.046 136.955 161.913 135.788 160.395 135.788C158.949 135.788 157.924 136.799 157.924 138.215C157.924 139.582 158.896 140.573 160.238 140.573C161.078 140.573 161.767 140.173 162.113 139.489H162.191C162.143 141.364 161.493 142.38 160.346 142.38C159.652 142.38 159.115 141.994 158.93 141.359H158.026C158.246 142.468 159.14 143.161 160.336 143.161ZM160.395 139.812C159.462 139.812 158.812 139.147 158.812 138.186C158.812 137.263 159.501 136.56 160.404 136.56C161.308 136.56 161.996 137.272 161.996 138.215C161.996 139.147 161.327 139.812 160.395 139.812Z",fill:"#2C3338"}),(0,a.createElement)("rect",{x:"196",y:"132",width:"43",height:"14",rx:"7",fill:"#B8E6BF"}),(0,a.createElement)("path",{d:"M209.719 136.363V142H210.422V139.988H211.84C212.898 139.988 213.652 139.242 213.652 138.188C213.652 137.113 212.914 136.363 211.848 136.363H209.719ZM210.422 136.988H211.664C212.48 136.988 212.93 137.414 212.93 138.188C212.93 138.934 212.465 139.363 211.664 139.363H210.422V136.988ZM215.734 142.074C216.297 142.074 216.758 141.828 217.031 141.379H217.094V142H217.734V139.117C217.734 138.242 217.16 137.715 216.133 137.715C215.234 137.715 214.57 138.16 214.48 138.836H215.16C215.254 138.504 215.605 138.312 216.109 138.312C216.738 138.312 217.062 138.598 217.062 139.117V139.5L215.848 139.574C214.867 139.633 214.312 140.066 214.312 140.82C214.312 141.59 214.918 142.074 215.734 142.074ZM215.859 141.484C215.371 141.484 215.008 141.234 215.008 140.805C215.008 140.383 215.289 140.16 215.93 140.117L217.062 140.043V140.43C217.062 141.031 216.551 141.484 215.859 141.484ZM219.328 136.977C219.586 136.977 219.797 136.766 219.797 136.508C219.797 136.25 219.586 136.039 219.328 136.039C219.07 136.039 218.859 136.25 218.859 136.508C218.859 136.766 219.07 136.977 219.328 136.977ZM218.992 142H219.664V137.789H218.992V142ZM222.504 142.074C223.086 142.074 223.586 141.797 223.852 141.328H223.914V142H224.555V136.117H223.883V138.453H223.824C223.586 137.992 223.09 137.715 222.504 137.715C221.434 137.715 220.734 138.574 220.734 139.895C220.734 141.219 221.426 142.074 222.504 142.074ZM222.66 138.32C223.422 138.32 223.898 138.93 223.898 139.895C223.898 140.867 223.426 141.469 222.66 141.469C221.891 141.469 221.43 140.879 221.43 139.895C221.43 138.914 221.895 138.32 222.66 138.32Z",fill:"#00450C"}),(0,a.createElement)("rect",{x:"192.5",y:"173",width:"50",height:"10",rx:"5",fill:"#B8E6BF"}),(0,a.createElement)("rect",{x:"49.5",y:"174",width:"50",height:"8",rx:"2",fill:"#DCDCDE"}),(0,a.createElement)("rect",{x:"132.5",y:"170",width:"22.7796",height:"16",rx:"4",fill:"#F6F7F7"}),(0,a.createElement)("path",{d:"M143.507 182.856C144.227 182.856 144.869 182.747 145.435 182.528C146.004 182.305 146.451 181.981 146.774 181.558C147.103 181.129 147.267 180.612 147.267 180.006V179.992C147.267 179.24 147.025 178.659 146.542 178.249C146.063 177.839 145.357 177.529 144.423 177.319L143.404 177.094C142.853 176.966 142.454 176.809 142.208 176.622C141.962 176.435 141.839 176.201 141.839 175.918V175.904C141.839 175.695 141.903 175.508 142.03 175.344C142.158 175.18 142.347 175.05 142.598 174.954C142.848 174.858 143.158 174.811 143.527 174.811C143.855 174.811 144.147 174.861 144.402 174.961C144.658 175.061 144.865 175.209 145.024 175.405C145.184 175.597 145.28 175.836 145.312 176.123L145.318 176.137L147.13 176.13L147.137 176.123C147.114 175.544 146.948 175.043 146.638 174.619C146.332 174.191 145.911 173.86 145.373 173.628C144.84 173.396 144.215 173.279 143.5 173.279C142.816 173.279 142.206 173.391 141.668 173.614C141.13 173.833 140.706 174.15 140.396 174.564C140.087 174.979 139.932 175.476 139.932 176.055V176.068C139.932 176.802 140.169 177.381 140.643 177.805C141.117 178.229 141.8 178.541 142.693 178.741L143.712 178.974C144.332 179.11 144.76 179.27 144.997 179.452C145.239 179.63 145.359 179.878 145.359 180.197V180.211C145.359 180.439 145.291 180.637 145.154 180.806C145.022 180.974 144.822 181.104 144.553 181.195C144.284 181.282 143.944 181.325 143.534 181.325C143.142 181.325 142.812 181.275 142.543 181.175C142.274 181.075 142.062 180.931 141.907 180.744C141.757 180.553 141.659 180.327 141.613 180.067V180.061H139.788L139.781 180.067C139.804 180.664 139.977 181.17 140.301 181.585C140.629 182 141.069 182.316 141.62 182.535C142.176 182.749 142.805 182.856 143.507 182.856ZM143.151 183.971H143.938V172.145H143.151V183.971Z",fill:"#C3C4C7"}),(0,a.createElement)("rect",{x:"192.5",y:"214",width:"50",height:"10",rx:"5",fill:"#B8E6BF"}),(0,a.createElement)("rect",{x:"49.5",y:"215",width:"50",height:"8",rx:"2",fill:"#DCDCDE"}),(0,a.createElement)("rect",{x:"132.5",y:"211",width:"22.7796",height:"16",rx:"4",fill:"#F6F7F7"}),(0,a.createElement)("path",{d:"M145.879 223.856C146.143 223.856 146.403 223.847 146.658 223.829C146.913 223.806 147.13 223.774 147.308 223.733V222.072C147.139 222.104 146.927 222.129 146.672 222.147C146.417 222.161 146.177 222.168 145.954 222.168C145.444 222.168 144.983 222.106 144.573 221.983C144.168 221.856 143.819 221.664 143.527 221.409C143.24 221.149 143.019 220.826 142.864 220.438C142.709 220.051 142.632 219.595 142.632 219.071V219.064C142.632 218.545 142.707 218.091 142.857 217.704C143.012 217.317 143.233 216.995 143.521 216.74C143.812 216.48 144.159 216.287 144.56 216.159C144.961 216.027 145.41 215.961 145.906 215.961C146.148 215.961 146.392 215.972 146.638 215.995C146.884 216.018 147.098 216.048 147.28 216.084V214.437C147.103 214.386 146.879 214.348 146.61 214.32C146.341 214.293 146.082 214.279 145.831 214.279C145.065 214.279 144.364 214.38 143.726 214.58C143.092 214.781 142.543 215.081 142.078 215.482C141.613 215.883 141.253 216.382 140.998 216.979C140.747 217.576 140.622 218.269 140.622 219.058V219.064C140.622 219.857 140.747 220.555 140.998 221.156C141.253 221.753 141.613 222.252 142.078 222.653C142.548 223.05 143.104 223.351 143.746 223.556C144.389 223.756 145.1 223.856 145.879 223.856ZM139.46 220.425H146.542V219.639H139.46V220.425ZM139.46 218.531H146.542V217.745H139.46V218.531Z",fill:"#C3C4C7"}),(0,a.createElement)("path",{fill:"#7F54B3",fillRule:"evenodd",d:"M33.24 50.42H62.2a3.32 3.32 0 0 1 3.31 3.31v11.05a3.32 3.32 0 0 1-3.3 3.3H51.8l1.43 3.5-6.28-3.5H33.23a3.32 3.32 0 0 1-3.3-3.3V53.73c0-1.82 1.48-3.3 3.31-3.3Z",clipRule:"evenodd"}),(0,a.createElement)("path",{fill:"#fff",d:"M31.72 53.42c.23-.27.55-.44.91-.45.74-.05 1.16.3 1.27 1.04.45 3.03.94 5.61 1.46 7.73l3.19-6.06c.3-.55.65-.84 1.1-.87.63-.04 1.03.36 1.19 1.23.3 1.7.76 3.36 1.37 4.96.39-3.68 1.02-6.36 1.92-8 .18-.38.54-.62.96-.64.33-.03.66.07.91.29.26.2.42.5.44.84.02.24-.03.49-.14.7-.56 1.05-1.03 2.8-1.4 5.24-.36 2.36-.5 4.22-.4 5.54.03.33-.03.66-.17.95-.14.3-.45.51-.78.53-.38.03-.76-.15-1.14-.53-1.36-1.39-2.43-3.45-3.22-6.19l-2.1 4.2c-.85 1.64-1.59 2.47-2.2 2.52-.39.03-.72-.3-1-1-.74-1.9-1.54-5.57-2.4-11.03-.07-.35.01-.72.23-1ZM62.96 55.7a3.4 3.4 0 0 0-2.32-1.68 3.77 3.77 0 0 0-.8-.08c-1.38 0-2.52.72-3.4 2.17a7.67 7.67 0 0 0-1.13 4.1c0 1.11.23 2.07.7 2.87a3.4 3.4 0 0 0 2.32 1.69c.26.05.52.08.79.08 1.4 0 2.54-.72 3.41-2.17a7.74 7.74 0 0 0 1.13-4.12c0-1.11-.24-2.06-.7-2.85Zm-1.83 4.04c-.2.95-.57 1.67-1.11 2.16-.42.38-.82.53-1.18.47-.35-.08-.64-.39-.85-.94a3.74 3.74 0 0 1-.26-1.33 4.78 4.78 0 0 1 .87-2.8c.49-.7 1-1 1.52-.89.36.08.64.39.86.94.16.43.25.87.25 1.32 0 .36-.03.72-.1 1.07ZM53.86 55.7a3.4 3.4 0 0 0-2.33-1.68 3.76 3.76 0 0 0-.79-.08c-1.39 0-2.53.72-3.41 2.17a7.67 7.67 0 0 0-1.13 4.1c0 1.11.23 2.07.7 2.87a3.4 3.4 0 0 0 2.32 1.69c.26.05.52.08.79.08 1.4 0 2.54-.72 3.41-2.17a7.84 7.84 0 0 0 1.14-4.12c0-1.12-.23-2.07-.7-2.86Zm-1.84 4.04a3.8 3.8 0 0 1-1.1 2.16c-.43.38-.83.53-1.18.47-.36-.08-.64-.39-.86-.94a3.74 3.74 0 0 1-.25-1.33c0-.36.03-.71.1-1.06.14-.62.4-1.2.77-1.73.48-.7.99-1 1.51-.9.36.08.64.39.86.94.16.43.26.87.26 1.32 0 .36-.04.72-.1 1.07Z"}),(0,a.createElement)("path",{fill:"#000",d:"M68.52 54.4h3.36c1.19 0 2.14.27 2.85.84a2.7 2.7 0 0 1 1.07 2.23 2.7 2.7 0 0 1-1.09 2.27c-.72.55-1.73.83-3.02.83h-.47v3.8H68.5v-9.98h.02Zm2.71 1.9v2.35c.61 0 1.07-.1 1.35-.29.29-.19.43-.48.43-.87 0-.44-.14-.74-.42-.9a2.64 2.64 0 0 0-1.36-.29ZM84.24 64.36h-2.82l-.46-1.66h-2.87l-.47 1.66h-2.77l3.17-9.97h3.05l3.17 9.97Zm-3.8-3.46c-.4-1.48-.71-2.9-.91-4.23h-.04c-.21 1.38-.52 2.8-.9 4.23h1.85ZM82.62 54.4h3.04a55.3 55.3 0 0 1 1.47 3.3h.04c.3-.8.79-1.9 1.45-3.3h3.11l-3.2 5.45v4.5h-2.75v-4.5l-3.16-5.46ZM92.58 54.4h3.43c.5 2.15.88 3.99 1.16 5.54l.3-1.54c.11-.6.24-1.19.38-1.76l.53-2.24h3.5l1.36 9.97h-2.7l-.72-6.86-1.67 6.86H96.3l-1.75-6.86-.7 6.86h-2.57l1.29-9.98ZM104.06 54.4h5.5v2.1h-2.78v1.84h2.4v2.07h-2.4v1.82h2.79v2.12h-5.51V54.4ZM110.58 54.4h2.73l3.46 5.74-.1-1.07v-4.68h2.72v9.97h-2.78l-3.38-5.66.07 1.24v4.42h-2.71V54.4h-.01ZM120.1 54.4h6.49v2.27h-1.87v7.7h-2.75v-7.7h-1.85v-2.28h-.01ZM127.7 64.18v-2.33c.86.42 1.58.63 2.17.63.34 0 .61-.07.81-.23.2-.16.3-.37.3-.62 0-.2-.08-.39-.24-.57a4.05 4.05 0 0 0-.82-.63 9 9 0 0 1-2.04-1.66 2.65 2.65 0 0 1-.63-1.73c0-.86.33-1.56.98-2.1a3.8 3.8 0 0 1 2.53-.82c.76 0 1.52.14 2.27.41v2.23a5.08 5.08 0 0 0-1.96-.55c-.34 0-.6.06-.8.2-.19.14-.28.33-.28.57 0 .41.45.88 1.35 1.4.54.32 1.08.75 1.64 1.32a2.68 2.68 0 0 1-.26 4.08c-.72.56-1.63.85-2.74.85-.77-.01-1.53-.16-2.28-.45Z"})),(0,a.createElement)("defs",null,(0,a.createElement)("clipPath",{id:"clip0_255_63852"},(0,a.createElement)("path",{d:"M0.5 0H283.5C289.023 0 293.5 4.47715 293.5 10V275H0.5V0Z",fill:"white"})),(0,a.createElement)("clipPath",{id:"clip1_255_63852"},(0,a.createElement)("rect",{width:"120",height:"39.7959",fill:"white",transform:"translate(27.5 45)"})))),L=()=>(0,a.createElement)("svg",{width:"310",height:"282",viewBox:"0 0 310 282",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("g",{filter:"url(#filter0_d_5851_4204)"},(0,a.createElement)("path",{d:"M16 30C16 24.4772 20.4772 20 26 20H309V48H16V30Z",fill:"#F2EDFF"}),(0,a.createElement)("path",{d:"M16 48H309V260H26C20.4771 260 16 255.523 16 250V48Z",fill:"white"})),(0,a.createElement)("path",{d:"M43.5 119C43.5 113.753 47.7533 109.5 53 109.5H309.5V236.5H53C47.7533 236.5 43.5 232.247 43.5 227V119Z",fill:"white",stroke:"#DCDCDE"}),(0,a.createElement)("path",{d:"M65.8545 134V126.954H68.6279C70.7227 126.954 71.9336 128.219 71.9336 130.426V130.436C71.9336 132.711 70.7373 134 68.6279 134H65.8545ZM67.3291 132.784H68.3936C69.6973 132.784 70.4297 131.964 70.4297 130.46V130.45C70.4297 129 69.6729 128.17 68.3936 128.17H67.3291V132.784ZM75.5566 134.112C73.9209 134.112 72.9297 133.043 72.9297 131.319V131.314C72.9297 129.605 73.9307 128.507 75.498 128.507C77.0654 128.507 78.042 129.581 78.042 131.207V131.651H74.3408C74.3555 132.535 74.8291 133.048 75.5859 133.048C76.2109 133.048 76.5576 132.716 76.6553 132.511L76.6699 132.481H77.998L77.9883 132.53C77.8223 133.204 77.1289 134.112 75.5566 134.112ZM75.5225 129.576C74.9023 129.576 74.4434 129.996 74.3555 130.758H76.6748C76.5869 129.977 76.1426 129.576 75.5225 129.576ZM79.209 135.782V128.624H80.6348V129.454H80.7227C81.001 128.878 81.5723 128.536 82.334 128.536C83.6768 128.536 84.5166 129.591 84.5166 131.305V131.314C84.5166 133.043 83.6963 134.083 82.334 134.083C81.5967 134.083 80.9961 133.727 80.7227 133.141H80.6348V135.782H79.209ZM81.8457 132.901C82.5977 132.901 83.0664 132.301 83.0664 131.314V131.305C83.0664 130.318 82.6025 129.718 81.8457 129.718C81.0938 129.718 80.6201 130.318 80.6201 131.305V131.314C80.6201 132.301 81.0986 132.901 81.8457 132.901ZM88.0713 134.112C86.416 134.112 85.4199 133.062 85.4199 131.314V131.305C85.4199 129.571 86.4307 128.507 88.0713 128.507C89.7119 128.507 90.7227 129.566 90.7227 131.305V131.314C90.7227 133.067 89.7266 134.112 88.0713 134.112ZM88.0713 132.994C88.8281 132.994 89.2627 132.374 89.2627 131.314V131.305C89.2627 130.255 88.8232 129.625 88.0713 129.625C87.3145 129.625 86.8799 130.255 86.8799 131.305V131.314C86.8799 132.374 87.3096 132.994 88.0713 132.994ZM94.0234 134.112C92.5635 134.112 91.7334 133.458 91.6309 132.535L91.626 132.516H93.0273L93.0371 132.535C93.1494 132.867 93.4766 133.106 94.0381 133.106C94.585 133.106 94.9561 132.872 94.9561 132.516V132.506C94.9561 132.218 94.7412 132.037 94.1943 131.915L93.2959 131.725C92.2705 131.505 91.7627 131.002 91.7627 130.196V130.191C91.7627 129.181 92.6611 128.507 94.0039 128.507C95.415 128.507 96.1963 129.21 96.2549 130.074V130.094H94.9316L94.9268 130.069C94.8486 129.781 94.5312 129.513 93.999 129.513C93.5059 129.513 93.1543 129.742 93.1543 130.104V130.108C93.1543 130.396 93.3545 130.562 93.9111 130.685L94.8047 130.875C95.8789 131.104 96.3818 131.554 96.3818 132.35V132.354C96.3818 133.419 95.4004 134.112 94.0234 134.112ZM98.2764 127.799C97.8369 127.799 97.4707 127.447 97.4707 127.008C97.4707 126.563 97.8369 126.212 98.2764 126.212C98.7158 126.212 99.0771 126.563 99.0771 127.008C99.0771 127.447 98.7158 127.799 98.2764 127.799ZM97.5586 134V128.624H98.9844V134H97.5586ZM102.651 134.02C101.343 134.02 100.815 133.595 100.815 132.55V129.698H99.9854V128.624H100.815V127.34H102.256V128.624H103.364V129.698H102.256V132.223C102.256 132.706 102.461 132.921 102.944 132.921C103.13 132.921 103.228 132.911 103.364 132.896V133.956C103.188 133.99 102.925 134.02 102.651 134.02Z",fill:"#2C3338"}),(0,a.createElement)("path",{d:"M142.11 134.693V133.893C140.738 133.814 139.742 133.121 139.703 131.905L139.708 131.9H141.012V131.905C141.095 132.403 141.441 132.726 142.11 132.789V131.036L141.783 130.958C140.509 130.67 139.811 130.099 139.811 129.049V129.039C139.811 127.877 140.768 127.145 142.11 127.066V126.246H142.672V127.066C144.024 127.169 144.908 127.94 144.957 129.088L144.952 129.093L143.658 129.098L143.653 129.088C143.585 128.565 143.219 128.253 142.672 128.17V129.869L143.019 129.942C144.352 130.245 145.05 130.782 145.05 131.852V131.861C145.05 133.077 144.059 133.795 142.672 133.888V134.693H142.11ZM141.173 128.941C141.173 129.317 141.451 129.562 142.11 129.737V128.165C141.495 128.233 141.173 128.536 141.173 128.932V128.941ZM143.688 131.998C143.688 131.573 143.429 131.354 142.672 131.163V132.794C143.351 132.73 143.688 132.447 143.688 132.008V131.998ZM149.063 134.156C147.472 134.156 146.422 133.302 146.324 132.042L146.319 131.979H147.73L147.735 132.032C147.799 132.579 148.302 132.97 149.063 132.97C149.815 132.97 150.309 132.55 150.309 131.954V131.944C150.309 131.271 149.806 130.899 148.951 130.899H148.146V129.85H148.932C149.674 129.85 150.152 129.459 150.152 128.888V128.878C150.152 128.292 149.747 127.931 149.054 127.931C148.36 127.931 147.896 128.307 147.838 128.893L147.833 128.937H146.476L146.48 128.878C146.583 127.618 147.574 126.798 149.054 126.798C150.567 126.798 151.544 127.56 151.544 128.683V128.692C151.544 129.571 150.899 130.143 150.074 130.313V130.343C151.124 130.44 151.808 131.046 151.808 132.003V132.013C151.808 133.292 150.709 134.156 149.063 134.156ZM155.792 134.181C154.283 134.181 153.287 133.282 153.204 132.105L153.199 132.037H154.537L154.547 132.071C154.649 132.589 155.133 133.004 155.797 133.004C156.554 133.004 157.081 132.472 157.081 131.715V131.705C157.081 130.953 156.549 130.431 155.802 130.431C155.445 130.431 155.143 130.533 154.908 130.733C154.776 130.841 154.659 130.973 154.581 131.124H153.316L153.644 126.954H158.048V128.126H154.791L154.615 130.133H154.703C154.986 129.659 155.533 129.366 156.207 129.366C157.521 129.366 158.468 130.333 158.468 131.676V131.686C158.468 133.17 157.374 134.181 155.792 134.181ZM159.762 134V133.009L162.032 130.768C163.023 129.806 163.292 129.449 163.292 128.956V128.941C163.292 128.341 162.882 127.921 162.208 127.921C161.52 127.921 161.046 128.38 161.046 129.049V129.073H159.684L159.679 129.054C159.679 127.701 160.733 126.773 162.276 126.773C163.727 126.773 164.742 127.604 164.742 128.819V128.834C164.742 129.635 164.327 130.299 163.043 131.485L161.739 132.701V132.813H164.845V134H159.762ZM167.145 134.122C166.646 134.122 166.285 133.756 166.285 133.272C166.285 132.789 166.646 132.428 167.145 132.428C167.647 132.428 168.004 132.789 168.004 133.272C168.004 133.756 167.647 134.122 167.145 134.122ZM171.783 126.769C173.414 126.769 174.693 127.931 174.693 130.406V130.416C174.693 132.774 173.58 134.176 171.773 134.176C170.411 134.176 169.4 133.37 169.181 132.267L169.171 132.223H170.616L170.631 132.267C170.802 132.706 171.202 133.004 171.769 133.004C172.789 133.004 173.238 132.003 173.292 130.719C173.292 130.67 173.292 130.616 173.292 130.562H173.194C172.94 131.104 172.354 131.593 171.378 131.593C170.006 131.593 169.083 130.616 169.083 129.283V129.273C169.083 127.833 170.196 126.769 171.783 126.769ZM171.783 130.504C172.511 130.504 173.072 129.986 173.072 129.259V129.249C173.072 128.512 172.511 127.94 171.793 127.94C171.08 127.94 170.509 128.502 170.509 129.22V129.229C170.509 129.972 171.046 130.504 171.783 130.504ZM178.619 126.769C180.25 126.769 181.529 127.931 181.529 130.406V130.416C181.529 132.774 180.416 134.176 178.609 134.176C177.247 134.176 176.236 133.37 176.017 132.267L176.007 132.223H177.452L177.467 132.267C177.638 132.706 178.038 133.004 178.604 133.004C179.625 133.004 180.074 132.003 180.128 130.719C180.128 130.67 180.128 130.616 180.128 130.562H180.03C179.776 131.104 179.19 131.593 178.214 131.593C176.842 131.593 175.919 130.616 175.919 129.283V129.273C175.919 127.833 177.032 126.769 178.619 126.769ZM178.619 130.504C179.347 130.504 179.908 129.986 179.908 129.259V129.249C179.908 128.512 179.347 127.94 178.629 127.94C177.916 127.94 177.345 128.502 177.345 129.22V129.229C177.345 129.972 177.882 130.504 178.619 130.504Z",fill:"#2C3338"}),(0,a.createElement)("rect",{x:"211.5",y:"123",width:"44",height:"14",rx:"7",fill:"#B8E6BF"}),(0,a.createElement)("path",{d:"M225.184 133V127.363H227.508C228.695 127.363 229.488 128.129 229.488 129.289V129.297C229.488 130.457 228.695 131.223 227.508 131.223H226.363V133H225.184ZM227.219 128.297H226.363V130.301H227.219C227.895 130.301 228.293 129.941 228.293 129.301V129.293C228.293 128.652 227.895 128.297 227.219 128.297ZM231.477 133.066C230.656 133.066 230.074 132.559 230.074 131.777V131.77C230.074 130.996 230.672 130.543 231.742 130.48L232.781 130.418V130.062C232.781 129.691 232.527 129.48 232.059 129.48C231.648 129.48 231.387 129.625 231.297 129.879L231.289 129.895H230.234L230.238 129.859C230.328 129.105 231.039 128.605 232.121 128.605C233.262 128.605 233.906 129.145 233.906 130.062V133H232.781V132.43H232.711C232.492 132.828 232.039 133.066 231.477 133.066ZM231.188 131.707C231.188 132.035 231.465 132.234 231.859 132.234C232.387 132.234 232.781 131.887 232.781 131.434V131.117L231.914 131.172C231.426 131.203 231.188 131.387 231.188 131.699V131.707ZM235.605 128.039C235.254 128.039 234.961 127.758 234.961 127.406C234.961 127.051 235.254 126.77 235.605 126.77C235.957 126.77 236.246 127.051 236.246 127.406C236.246 127.758 235.957 128.039 235.605 128.039ZM235.031 133V128.699H236.172V133H235.031ZM238.855 133.066C237.781 133.066 237.109 132.227 237.109 130.852V130.844C237.109 129.461 237.766 128.629 238.855 128.629C239.445 128.629 239.926 128.918 240.141 129.387H240.211V127.055H241.352V133H240.211V132.332H240.141C239.918 132.797 239.461 133.066 238.855 133.066ZM239.242 132.121C239.848 132.121 240.223 131.645 240.223 130.855V130.848C240.223 130.059 239.844 129.574 239.242 129.574C238.641 129.574 238.27 130.059 238.27 130.844V130.852C238.27 131.645 238.641 132.121 239.242 132.121Z",fill:"#00450C"}),(0,a.createElement)("rect",{x:"208",y:"165",width:"50",height:"8",rx:"4",fill:"#B8E6BF"}),(0,a.createElement)("rect",{x:"65",y:"165",width:"50",height:"8",rx:"4",fill:"#DCDCDE"}),(0,a.createElement)("rect",{x:"148",y:"161",width:"22.7796",height:"16",rx:"4",fill:"#F2EDFF"}),(0,a.createElement)("path",{d:"M159.007 173.856C158.305 173.856 157.676 173.749 157.12 173.535C156.569 173.316 156.129 173 155.801 172.585C155.477 172.17 155.304 171.664 155.281 171.067L155.288 171.061H157.113V171.067C157.159 171.327 157.257 171.553 157.407 171.744C157.562 171.931 157.774 172.075 158.043 172.175C158.312 172.275 158.642 172.325 159.034 172.325C159.444 172.325 159.784 172.282 160.053 172.195C160.322 172.104 160.522 171.974 160.654 171.806C160.791 171.637 160.859 171.439 160.859 171.211V171.197C160.859 170.878 160.739 170.63 160.497 170.452C160.26 170.27 159.832 170.11 159.212 169.974L158.193 169.741C157.601 169.609 157.1 169.427 156.689 169.194C156.279 168.962 155.967 168.673 155.753 168.326C155.539 167.975 155.432 167.556 155.432 167.068V167.055C155.432 166.476 155.587 165.979 155.896 165.564C156.206 165.15 156.63 164.833 157.168 164.614C157.706 164.391 158.316 164.279 159 164.279C159.715 164.279 160.34 164.396 160.873 164.628C161.411 164.86 161.832 165.191 162.138 165.619C162.448 166.043 162.614 166.544 162.637 167.123L162.63 167.13L160.818 167.137L160.812 167.123C160.78 166.836 160.684 166.597 160.524 166.405C160.365 166.209 160.158 166.061 159.902 165.961C159.647 165.861 159.355 165.811 159.027 165.811C158.658 165.811 158.348 165.858 158.098 165.954C157.847 166.05 157.658 166.18 157.53 166.344C157.403 166.508 157.339 166.695 157.339 166.904V166.918C157.339 167.105 157.394 167.271 157.503 167.417C157.612 167.563 157.781 167.69 158.009 167.8C158.237 167.909 158.535 168.007 158.904 168.094L159.923 168.319C160.857 168.529 161.563 168.839 162.042 169.249C162.525 169.659 162.767 170.24 162.767 170.992V171.006C162.767 171.612 162.603 172.129 162.274 172.558C161.951 172.981 161.504 173.305 160.935 173.528C160.369 173.747 159.727 173.856 159.007 173.856ZM158.651 174.971V163.145H159.438V174.971H158.651Z",fill:"#674399"}),(0,a.createElement)("rect",{x:"65",y:"206",width:"50",height:"8",rx:"4",fill:"#DCDCDE"}),(0,a.createElement)("rect",{x:"208",y:"206",width:"50",height:"8",rx:"4",fill:"#B8E6BF"}),(0,a.createElement)("rect",{x:"148",y:"202",width:"22.7796",height:"16",rx:"4",fill:"#F2EDFF"}),(0,a.createElement)("path",{d:"M161.379 214.856C160.6 214.856 159.889 214.756 159.246 214.556C158.604 214.351 158.048 214.05 157.578 213.653C157.113 213.252 156.753 212.753 156.498 212.156C156.247 211.555 156.122 210.857 156.122 210.064V210.058C156.122 209.269 156.247 208.576 156.498 207.979C156.753 207.382 157.113 206.883 157.578 206.482C158.043 206.081 158.592 205.781 159.226 205.58C159.864 205.38 160.565 205.279 161.331 205.279C161.582 205.279 161.841 205.293 162.11 205.32C162.379 205.348 162.603 205.386 162.78 205.437V207.084C162.598 207.048 162.384 207.018 162.138 206.995C161.892 206.972 161.648 206.961 161.406 206.961C160.91 206.961 160.461 207.027 160.06 207.159C159.659 207.287 159.312 207.48 159.021 207.74C158.733 207.995 158.512 208.317 158.357 208.704C158.207 209.091 158.132 209.545 158.132 210.064V210.071C158.132 210.595 158.209 211.051 158.364 211.438C158.519 211.826 158.74 212.149 159.027 212.409C159.319 212.664 159.668 212.856 160.073 212.983C160.483 213.106 160.944 213.168 161.454 213.168C161.677 213.168 161.917 213.161 162.172 213.147C162.427 213.129 162.639 213.104 162.808 213.072V214.733C162.63 214.774 162.413 214.806 162.158 214.829C161.903 214.847 161.643 214.856 161.379 214.856ZM154.96 211.425V210.639H162.042V211.425H154.96ZM154.96 209.531V208.745H162.042V209.531H154.96Z",fill:"#674399"}),(0,a.createElement)("path",{d:"M65 148.5H309",stroke:"#DCDCDE"}),(0,a.createElement)("path",{d:"M65 189.5H309",stroke:"#DCDCDE"}),(0,a.createElement)("path",{d:"M84.1484 75.0801H87.5495C88.7499 75.0801 89.7121 75.3659 90.4362 75.9375C91.1602 76.5091 91.5222 77.2617 91.5222 78.1954C91.5222 79.1766 91.1507 79.9483 90.4171 80.5008C89.6835 81.0534 88.6642 81.3392 87.359 81.3392H86.8827V85.1785H84.1294V75.0801H84.1484ZM86.8922 77.014V79.3957C87.5114 79.3862 87.9687 79.2909 88.2545 79.1004C88.5499 78.9099 88.6928 78.6145 88.6928 78.2144C88.6928 77.7762 88.5499 77.4713 88.264 77.2998C87.9878 77.1188 87.5305 77.0235 86.8922 77.014Z",fill:"black"}),(0,a.createElement)("path",{d:"M100.068 85.1785H97.2098L96.743 83.4923H93.8373L93.361 85.1785H90.5601L93.7706 75.0801H96.8573L100.068 85.1785ZM96.219 81.6727C95.8094 80.1674 95.495 78.7384 95.2949 77.3856H95.2568C95.0377 78.786 94.7328 80.215 94.3422 81.6727H96.219Z",fill:"black"}),(0,a.createElement)("path",{d:"M98.4194 75.0801H101.506C102.192 76.5282 102.687 77.6523 102.992 78.4335H103.03C103.335 77.6237 103.831 76.5091 104.498 75.0801H107.651L104.402 80.6057V85.169H101.62V80.6057L98.4194 75.0801Z",fill:"black"}),(0,a.createElement)("path",{d:"M108.508 75.0801H111.986C112.481 77.2617 112.872 79.129 113.157 80.7009L113.453 79.1385C113.577 78.5288 113.7 77.9381 113.843 77.357L114.377 75.0896H117.921L119.302 85.1881H116.578L115.844 78.243L114.148 85.1881H112.29L110.509 78.2335L109.804 85.1881H107.203L108.508 75.0801Z",fill:"black"}),(0,a.createElement)("path",{d:"M120.131 75.0801H125.695V77.2236H122.885V79.0814H125.323V81.1773H122.885V83.0159H125.714V85.169H120.131V75.0801Z",fill:"black"}),(0,a.createElement)("path",{d:"M126.733 75.0801H129.506L133.002 80.901L132.907 79.8149V75.0801H135.66V85.1785H132.84L129.42 79.4434L129.496 80.7009V85.1785H126.743V75.0801H126.733Z",fill:"black"}),(0,a.createElement)("path",{d:"M136.384 75.0801H142.948V77.3856H141.052V85.1785H138.271V77.3856H136.394V75.0801H136.384Z",fill:"black"}),(0,a.createElement)("path",{d:"M144.072 84.9879V82.6348C144.939 83.054 145.673 83.2731 146.273 83.2731C146.616 83.2731 146.892 83.1969 147.092 83.0349C147.292 82.873 147.387 82.6634 147.387 82.4061C147.387 82.2061 147.311 82.0155 147.149 81.8345C146.987 81.6535 146.711 81.4439 146.32 81.1962C145.368 80.5865 144.682 80.0244 144.253 79.51C143.824 78.986 143.615 78.4049 143.615 77.7666C143.615 76.8901 143.948 76.1851 144.606 75.6325C145.263 75.08 146.12 74.8037 147.168 74.8037C147.94 74.8037 148.712 74.9466 149.474 75.2229V77.4808C148.654 77.1092 147.997 76.9187 147.483 76.9187C147.14 76.9187 146.873 76.9854 146.682 77.1283C146.482 77.2712 146.387 77.4617 146.387 77.6999C146.387 78.1191 146.844 78.5954 147.759 79.1289C148.302 79.4433 148.855 79.8815 149.417 80.4531C149.979 81.0247 150.255 81.6726 150.255 82.4252C150.255 83.3017 149.893 84.0162 149.159 84.5878C148.426 85.1594 147.502 85.4452 146.378 85.4452C145.596 85.4357 144.834 85.2832 144.072 84.9879Z",fill:"black"}),(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M48.4225 71.0597H77.7367C79.5849 71.0597 81.0901 72.5649 81.0901 74.4131V85.5977C81.0901 87.4459 79.5849 88.9511 77.7367 88.9511H67.219L68.6576 92.4856L62.3032 88.9511H48.413C46.5648 88.9511 45.0596 87.4459 45.0596 85.5977V74.4131C45.0596 72.5649 46.5648 71.0597 48.4225 71.0597Z",fill:"#7F54B3"}),(0,a.createElement)("path",{d:"M46.8795 74.0987C47.1081 73.8224 47.4415 73.651 47.8036 73.6414C48.5467 73.5938 48.9754 73.9463 49.0897 74.6989C49.547 77.7666 50.0424 80.3769 50.5664 82.5205L53.796 76.3852C54.0913 75.8326 54.4533 75.5373 54.9011 75.5087C55.5489 75.4611 55.949 75.8707 56.111 76.7472C56.4158 78.462 56.8827 80.1483 57.5019 81.7774C57.8925 78.0428 58.5403 75.3372 59.4454 73.67C59.6264 73.2889 59.9979 73.0412 60.4171 73.0222C60.7506 72.9936 61.084 73.0984 61.3412 73.3175C61.608 73.5176 61.7699 73.832 61.789 74.1654C61.808 74.4131 61.7604 74.6608 61.6461 74.8704C61.0745 75.9374 60.5981 77.7094 60.2266 80.1864C59.8646 82.5776 59.7217 84.4544 59.8169 85.7977C59.855 86.1311 59.7883 86.4646 59.6454 86.7599C59.5025 87.0648 59.1977 87.2744 58.8642 87.2934C58.4736 87.322 58.0926 87.141 57.702 86.7504C56.3301 85.3499 55.244 83.2636 54.4438 80.4912C53.5006 82.3776 52.7861 83.7971 52.3193 84.7307C51.4524 86.3979 50.7093 87.2458 50.0995 87.2934C49.6994 87.322 49.3564 86.9886 49.0802 86.2836C48.3275 84.3591 47.5178 80.6341 46.6508 75.1086C46.5746 74.7466 46.6603 74.3845 46.8795 74.0987Z",fill:"white"}),(0,a.createElement)("path",{d:"M69.296 76.4139C68.8006 75.5279 67.9432 74.8991 66.9429 74.7085C66.6762 74.6514 66.4094 74.6228 66.1426 74.6228C64.7327 74.6228 63.5799 75.3564 62.6844 76.8235C61.9223 78.0715 61.5221 79.5101 61.5412 80.9677C61.5412 82.1014 61.7794 83.0731 62.2462 83.8829C62.7416 84.7689 63.599 85.3977 64.5993 85.5882C64.8661 85.6454 65.1328 85.6739 65.3996 85.6739C66.8191 85.6739 67.9718 84.9404 68.8578 83.4732C69.6199 82.2157 70.0201 80.7771 70.001 79.3005C70.001 78.1668 69.7629 77.2046 69.296 76.4139ZM67.4383 80.5009C67.2382 81.4631 66.8667 82.1871 66.3141 82.6825C65.8854 83.0731 65.4853 83.2255 65.1233 83.1589C64.7613 83.0922 64.4754 82.7683 64.2563 82.2062C64.0944 81.7775 63.9991 81.3297 63.9991 80.8629C63.9991 80.5009 64.0372 80.1388 64.1039 79.7864C64.2468 79.1576 64.504 78.5669 64.8851 78.0334C65.371 77.3189 65.8854 77.014 66.4189 77.1284C66.7809 77.2046 67.0667 77.519 67.2859 78.081C67.4478 78.5098 67.5431 78.9575 67.5431 79.4148C67.5431 79.7768 67.5145 80.1388 67.4383 80.5009Z",fill:"white"}),(0,a.createElement)("path",{d:"M78.5182 76.4139C78.0228 75.5279 77.1654 74.8991 76.1651 74.7085C75.8983 74.6514 75.6316 74.6228 75.3648 74.6228C73.9548 74.6228 72.8021 75.3564 71.9066 76.8235C71.1444 78.0715 70.7443 79.5101 70.7633 80.9677C70.7633 82.1014 71.0015 83.0731 71.4683 83.8829C71.9637 84.7689 72.8211 85.3977 73.8215 85.5882C74.0882 85.6454 74.355 85.6739 74.6217 85.6739C76.0412 85.6739 77.194 84.9404 78.08 83.4732C78.8421 82.2157 79.2422 80.7771 79.2232 79.3005C79.2232 78.1668 78.985 77.2046 78.5182 76.4139ZM76.6605 80.5009C76.4604 81.4631 76.0889 82.1871 75.5363 82.6825C75.1076 83.0731 74.7075 83.2255 74.3454 83.1589C73.9834 83.0922 73.6976 82.7683 73.4785 82.2062C73.3165 81.7775 73.2213 81.3297 73.2213 80.8629C73.2213 80.5009 73.2594 80.1388 73.3261 79.7864C73.469 79.1576 73.7262 78.5669 74.1073 78.0334C74.5931 77.3189 75.1076 77.014 75.6411 77.1284C76.0031 77.2046 76.2889 77.519 76.508 78.081C76.67 78.5098 76.7653 78.9575 76.7653 79.4148C76.7653 79.7768 76.7367 80.1388 76.6605 80.5009Z",fill:"white"}),(0,a.createElement)("circle",{cx:"34.2526",cy:"34.2526",r:"2.25264",fill:"#DFD1FB"}),(0,a.createElement)("circle",{cx:"42.758",cy:"34.2526",r:"2.25264",fill:"#DFD1FB"}),(0,a.createElement)("circle",{cx:"51.2634",cy:"34.2526",r:"2.25264",fill:"#DFD1FB"}),(0,a.createElement)("defs",null,(0,a.createElement)("filter",{id:"filter0_d_5851_4204",x:"0",y:"4",width:"325",height:"272",filterUnits:"userSpaceOnUse",colorInterpolationFilters:"sRGB"},(0,a.createElement)("feFlood",{floodOpacity:"0",result:"BackgroundImageFix"}),(0,a.createElement)("feColorMatrix",{in:"SourceAlpha",type:"matrix",values:"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",result:"hardAlpha"}),(0,a.createElement)("feOffset",null),(0,a.createElement)("feGaussianBlur",{stdDeviation:"8"}),(0,a.createElement)("feComposite",{in2:"hardAlpha",operator:"out"}),(0,a.createElement)("feColorMatrix",{type:"matrix",values:"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.08 0"}),(0,a.createElement)("feBlend",{mode:"normal",in2:"BackgroundImageFix",result:"effect1_dropShadow_5851_4204"}),(0,a.createElement)("feBlend",{mode:"normal",in:"SourceGraphic",in2:"effect1_dropShadow_5851_4204",result:"shape"})))),b=e=>{let{isWooPayEligible:t=!1}=e;return(0,a.createElement)("div",{className:"woocommerce-recommended-payments-banner__footer_icon_container"},(0,a.createElement)(_,null),(0,a.createElement)(w,null),(0,a.createElement)(d,null),t&&(0,a.createElement)(v,null),(0,a.createElement)(p,null),(0,a.createElement)(f,null),(0,a.createElement)(h,null),(0,a.createElement)(g,null),(0,a.createElement)(C,null),(0,a.createElement)(H,null),(0,a.createElement)(y,null),(0,a.createElement)(r.Text,{variant:"caption",as:"p",size:"12",lineHeight:"16px"},(0,s.__)("& more.","woocommerce")))},k=e=>{let{isWooPayEligible:t}=e;return(0,a.createElement)(o.CardFooter,{className:"woocommerce-recommended-payments-banner__footer"},(0,a.createElement)("div",null,(0,a.createElement)(r.Text,{variant:"caption",as:"p",size:"12",lineHeight:"16px"},(0,s.__)("WooPayments is pre-integrated with popular payment options:","woocommerce"))),(0,a.createElement)(b,{isWooPayEligible:t}))},S=e=>{let{actionButton:t,isWooPayEligible:n}=e;const o={tosLink:(0,a.createElement)(i.Link,{href:"https://wordpress.com/tos/",type:"external",target:"_blank"},(0,a.createElement)(a.Fragment,null)),privacyLink:(0,a.createElement)(i.Link,{href:"https://automattic.com/privacy/",type:"external",target:"_blank"},(0,a.createElement)(a.Fragment,null)),woopayMerchantTerms:(0,a.createElement)(i.Link,{href:"https://wordpress.com/tos/#more-woopay-specifically",type:"external",target:"_blank"},(0,a.createElement)(a.Fragment,null))};return(0,a.createElement)("div",{className:"woocommerce-recommended-payments-banner__text_container"},(0,a.createElement)(r.Text,{className:"woocommerce-recommended-payments__header-title",variant:"title.small",as:"p",size:"24",lineHeight:"28px",padding:"0 20px 0 0"},(0,s.__)("Payments made simple, designed exclusively for WooCommerce stores.","woocommerce")),(0,a.createElement)(r.Text,{className:"woocommerce-recommended-payments__header-heading",variant:"caption",as:"p",size:"12",lineHeight:"16px"},n?(0,a.createInterpolateElement)((0,s.__)("By using WooPayments you agree to the Terms of Service (including WooPay merchant terms ) and acknowledge that you have read our Privacy Policy .","woocommerce"),o):(0,a.createInterpolateElement)((0,s.__)("By using WooPayments you agree to the Terms of Service and acknowledge that you have read our Privacy Policy .","woocommerce"),o)),t)},M=e=>{let{actionButton:t,textPosition:n,bannerImage:r=(0,a.createElement)(E,null),isWooPayEligible:i}=e;return(0,a.createElement)(o.CardBody,{className:"woocommerce-recommended-payments-banner__body"},"left"===n?(0,a.createElement)(a.Fragment,null,(0,a.createElement)(S,{actionButton:t,isWooPayEligible:i}),(0,a.createElement)("div",{className:"woocommerce-recommended-payments-banner__image_container"},r)):(0,a.createElement)(a.Fragment,null,(0,a.createElement)("div",{className:"woocommerce-recommended-payments-banner__image_container"},r),(0,a.createElement)(S,{actionButton:t,isWooPayEligible:i})))},N=e=>{let{children:t}=e;return(0,a.createElement)(o.Card,{size:"medium",className:"woocommerce-recommended-payments-banner"},t)},x=()=>(0,a.createElement)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("mask",{id:"mask0_5908_1374",style:{maskType:"luminance"},maskUnits:"userSpaceOnUse",x:"2",y:"4",width:"20",height:"16"},(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M20 4H4C2.895 4 2 4.895 2 6V18C2 19.105 2.895 20 4 20H20C21.105 20 22 19.105 22 18V6C22 4.895 21.105 4 20 4ZM20 6V8H4V6H20ZM4 12V18H20V12H4ZM6 14H13V16H6V14ZM18 14H15V16H18V14Z",fill:"white"})),(0,a.createElement)("g",{mask:"url(#mask0_5908_1374)"},(0,a.createElement)("rect",{width:"24",height:"24",fill:"#674399"}))),T=()=>(0,a.createElement)("svg",{width:"25",height:"24",viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("mask",{id:"mask0_5908_1702",style:{maskType:"luminance"},maskUnits:"userSpaceOnUse",x:"2",y:"2",width:"21",height:"20"},(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.3335 12C2.3335 6.477 6.8105 2 12.3335 2C17.8565 2 22.3335 6.477 22.3335 12C22.3335 17.523 17.8565 22 12.3335 22C6.8105 22 2.3335 17.523 2.3335 12ZM15.3335 17L14.3335 18L12.3335 20C15.5725 20 18.3625 18.061 19.6195 15.286L19.3335 15H17.3335L16.3335 14V12L18.3335 10H20.0695C19.7675 8.834 19.2155 7.767 18.4635 6.87L15.3335 10L14.3335 9V7L15.3335 6V4.589C14.4065 4.212 13.3945 4 12.3335 4C11.2725 4 10.2605 4.212 9.3335 4.589V5L10.3335 6H12.3335V8L9.3335 11H7.3335V13H5.3335L4.3335 12C4.3335 16.072 7.3935 19.436 11.3335 19.931V18L9.3335 16V13H12.3335L13.3335 14V15H15.3335V17Z",fill:"white"})),(0,a.createElement)("g",{mask:"url(#mask0_5908_1702)"},(0,a.createElement)("rect",{x:"0.333496",width:"24",height:"24",fill:"#674399"}))),A=()=>(0,a.createElement)("svg",{width:"25",height:"24",viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("mask",{id:"mask0_5908_1139",style:{maskType:"luminance"},maskUnits:"userSpaceOnUse",x:"3",y:"2",width:"19",height:"19"},(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M21.6665 6V19C21.6665 20.104 20.7705 21 19.6665 21H5.6665C4.5625 21 3.6665 20.104 3.6665 19V6C3.6665 4.896 4.5625 4 5.6665 4H6.6665V2H8.6665V4H16.6665V2H18.6665V4H19.6665C20.7705 4 21.6665 4.896 21.6665 6ZM11.1645 18.001L7.4595 14.296L8.8745 12.881L11.1685 15.175L16.4615 9.882L17.8765 11.297L11.1645 18.001ZM5.6665 8H19.6665V19H5.6665V8Z",fill:"white"})),(0,a.createElement)("g",{mask:"url(#mask0_5908_1139)"},(0,a.createElement)("rect",{x:"0.666504",width:"24",height:"24",fill:"#674399"}))),I=()=>(0,a.createElement)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("mask",{id:"mask0_5908_3242",style:{maskType:"luminance"},maskUnits:"userSpaceOnUse",x:"3",y:"4",width:"18",height:"18"},(0,a.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M18.192 4H5.79578C4.24399 4 2.98777 5.26853 3.00009 6.80801V16.168C3.00009 17.7198 4.2563 18.9761 5.8081 18.9761H11.1676L16.4757 21.9319L15.2687 18.9761H18.192C19.7438 18.9761 21 17.7198 21 16.168V6.80801C21 5.25622 19.7438 4 18.192 4ZM7.53039 7.19611C7.2535 7.21589 7.04582 7.31478 6.90738 7.50268C6.76893 7.68068 6.71948 7.90813 6.74915 8.16525C7.33261 11.8737 7.87651 14.3756 8.38086 15.6711C8.57864 16.1458 8.80609 16.3732 9.0731 16.3535C9.48844 16.3238 9.9829 15.7502 10.5664 14.6327C10.8729 13.9998 11.3476 13.0505 11.9904 11.7847C12.5244 13.6537 13.2562 15.058 14.1759 15.9974C14.433 16.2645 14.7 16.3831 14.9571 16.3633C15.1846 16.3436 15.3626 16.2249 15.4813 16.0073C15.5801 15.8194 15.6197 15.6019 15.5999 15.3547C15.5406 14.4547 15.6296 13.1988 15.8768 11.5869C16.1339 9.92551 16.4504 8.72893 16.8361 8.01691C16.9152 7.86857 16.9448 7.72024 16.935 7.54223C16.9152 7.31478 16.8163 7.12689 16.6284 6.97855C16.4405 6.83021 16.2328 6.76099 16.0054 6.78077C15.7186 6.80055 15.501 6.939 15.3527 7.21589C14.7396 8.33336 14.3045 10.1431 14.0473 12.6549C13.6715 11.7056 13.3551 10.5881 13.1079 9.27283C12.9991 8.68937 12.7321 8.41248 12.297 8.44214C12.0003 8.46192 11.7531 8.65971 11.5553 9.03549L9.38955 13.1593C9.03354 11.7253 8.69731 9.97496 8.39075 7.90813C8.32152 7.3939 8.03474 7.15656 7.53039 7.19611Z",fill:"white"})),(0,a.createElement)("g",{mask:"url(#mask0_5908_3242)"},(0,a.createElement)("rect",{width:"24",height:"24",fill:"#674399"}))),O=e=>{let{isWooPayEligible:t=!1}=e;return(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits",align:"top"},(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits-benefit"},(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits-benefit-icon-container"},(0,a.createElement)(x,null)),(0,a.createElement)(r.Text,{as:"p"},(0,s.__)("Offer your customers card payments, iDeal, and the ability to sell in-person with Woo mobile app.","woocommerce"))),(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits-benefit"},(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits-benefit-icon-container"},(0,a.createElement)(T,null)),(0,a.createElement)(r.Text,{as:"p"},(0,s.__)("Sell to international markets and accept more than 135 currencies with local payment methods.","woocommerce"))),(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits-benefit"},(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits-benefit-icon-container"},(0,a.createElement)(A,null)),(0,a.createElement)(r.Text,{as:"p"},(0,s.__)("Earn and manage recurring revenue and get automatic deposits into your nominated bank account.","woocommerce"))),t&&(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits-benefit"},(0,a.createElement)(o.Flex,{className:"woocommerce-wcpay-benefits-benefit-icon-container"},(0,a.createElement)(I,null)),(0,a.createElement)(r.Text,{as:"p"},(0,s.__)("Boost conversions with WooPay, a new express checkout feature included in WooPayments.","woocommerce"))))};var P=n(59838);const R=()=>(0,a.createElement)("span",{className:"woocommerce-task-payment__setup_required"},(0,a.createElement)(P.Z,null),(0,a.createElement)(r.Text,{variant:"small",size:"14",lineHeight:"20px"},(0,s.__)("Setup required","woocommerce"))),V=()=>(0,a.createElement)("svg",{width:"36",height:"25",viewBox:"0 0 36 25",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("rect",{x:"1.41431",y:"1",width:"33.7586",height:"23",rx:"3.5",fill:"white",stroke:"#F3F3F3"}),(0,a.createElement)("path",{d:"M17.645 14.9708V12.2642V12.2636H19.1074C19.7104 12.264 20.2171 12.0743 20.6276 11.6946C21.0425 11.3342 21.2745 10.816 21.2627 10.2759C21.2709 9.73881 21.0393 9.22448 20.6276 8.86525C20.2207 8.48344 19.6734 8.27511 19.1074 8.28658H16.7598V14.9708H17.645ZM17.6451 11.4427V9.10938V9.10885H19.1295C19.4604 9.09983 19.7793 9.22898 20.0054 9.46351C20.2328 9.678 20.3611 9.97262 20.3611 10.2803C20.3611 10.588 20.2328 10.8826 20.0054 11.0971C19.7766 11.3267 19.4586 11.4522 19.1295 11.4427H17.6451Z",fill:"#5F6368"}),(0,a.createElement)("path",{d:"M24.8518 10.7568C24.4731 10.4176 23.9567 10.248 23.3024 10.248C22.462 10.248 21.8273 10.5467 21.3985 11.144L22.1781 11.6203C22.4662 11.2157 22.8574 11.0134 23.3519 11.0134C23.6672 11.0098 23.9722 11.1216 24.2063 11.3264C24.4397 11.5136 24.5739 11.7927 24.5719 12.0864V12.2827C24.2318 12.096 23.7989 12.0027 23.2733 12.0027C22.6575 12.0034 22.1652 12.1435 21.7965 12.423C21.4278 12.7024 21.2434 13.0788 21.2434 13.552C21.2354 13.983 21.4281 14.3944 21.7679 14.672C22.1176 14.9707 22.5521 15.12 23.0715 15.12C23.68 15.12 24.1674 14.8587 24.534 14.336H24.5725V14.9707H25.4192V12.152C25.4195 11.5611 25.2304 11.096 24.8518 10.7568ZM22.4508 14.1307C22.2654 14.0011 22.156 13.7924 22.1572 13.5707C22.1572 13.3216 22.2776 13.1142 22.5201 12.9435C22.7602 12.7753 23.06 12.6912 23.4196 12.6912C23.9133 12.6912 24.2982 12.7979 24.5742 13.0112C24.5742 13.3718 24.4276 13.6859 24.1343 13.9536C23.8702 14.2099 23.5122 14.3541 23.1386 14.3547C22.8896 14.3592 22.6466 14.2801 22.4508 14.1307Z",fill:"#5F6368"}),(0,a.createElement)("path",{d:"M30.2792 10.3975L27.3235 16.9868H26.4097L27.5065 14.6812L25.563 10.3975H26.5251L27.9299 13.6828H27.9491L29.3154 10.3975H30.2792Z",fill:"#5F6368"}),(0,a.createElement)("path",{d:"M14.0677 11.6812C14.068 11.4195 14.0452 11.1583 13.9995 10.9004H10.2664V12.3793H12.4045C12.3161 12.8566 12.0305 13.2782 11.6139 13.5463V14.5063H12.89C13.6372 13.838 14.0677 12.8497 14.0677 11.6812Z",fill:"#4285F4"}),(0,a.createElement)("path",{d:"M10.2666 15.4332C11.3349 15.4332 12.2344 15.0929 12.8903 14.5063L11.6142 13.5463C11.259 13.7799 10.8016 13.9132 10.2666 13.9132C9.23409 13.9132 8.35771 13.238 8.04432 12.3281H6.72974V13.3175C7.40168 14.6145 8.77018 15.4331 10.2666 15.4332Z",fill:"#34A853"}),(0,a.createElement)("path",{d:"M8.04421 12.3283C7.87853 11.8516 7.87853 11.3353 8.04421 10.8585V9.86914H6.72962C6.1676 10.954 6.1676 12.2328 6.72962 13.3177L8.04421 12.3283Z",fill:"#FBBC04"}),(0,a.createElement)("path",{d:"M10.2666 9.27318C10.8312 9.26424 11.3766 9.47114 11.7852 9.84918L12.915 8.75318C12.1986 8.10042 11.2495 7.74205 10.2666 7.75318C8.77018 7.75325 7.40168 8.57187 6.72974 9.86892L8.04432 10.8582C8.35771 9.94838 9.23409 9.27318 10.2666 9.27318Z",fill:"#EA4335"})),j=e=>{let{id:t,...n}=e;return(0,a.createElement)(o.Fill,{name:"woocommerce_payment_gateway_setup_"+t,...n})};j.Slot=e=>{let{id:t,fillProps:n}=e;return(0,a.createElement)(o.Slot,{name:"woocommerce_payment_gateway_setup_"+t,fillProps:n})};const D=e=>{let{id:t,...n}=e;return(0,a.createElement)(o.Fill,{name:"woocommerce_payment_gateway_configure_"+t,...n})};D.Slot=e=>{let{id:t,fillProps:n}=e;return(0,a.createElement)(o.Slot,{name:"woocommerce_payment_gateway_configure_"+t,fillProps:n})};const Z=e=>{let{id:t,...n}=e;return(0,a.createElement)(o.Fill,{name:"woocommerce_onboarding_task_list_item_"+t,...n})};Z.Slot=e=>{let{id:t,fillProps:n}=e;return(0,a.createElement)(o.Slot,{name:"woocommerce_onboarding_task_list_item_"+t,fillProps:n})};const B=e=>{let{id:t,...n}=e;return(0,a.createElement)(o.Fill,{name:"woocommerce_onboarding_task_list_header_"+t,...n})};B.Slot=e=>{let{id:t,fillProps:n}=e;return(0,a.createElement)(o.Slot,{name:"woocommerce_onboarding_task_list_header_"+t,fillProps:n})};var z=n(14599);const F=e=>{let{id:t,...n}=e;return(0,a.createElement)(o.Fill,{name:"woocommerce_onboarding_task_"+t,...n})};F.Slot=e=>{let{id:t,fillProps:n}=e;return(0,a.useEffect)((()=>{(async(e,t)=>{const n=wp.data.select("wc/admin/plugins").getActivePlugins(),o=wp.data.select("wc/admin/plugins").getInstalledPlugins(),r=wp.data.select("wc/admin/plugins").isJetpackConnected()||!1;(0,z.recordEvent)("task_view",{task_name:e,variant:void 0,wcs_installed:o.includes("woocommerce-services"),wcs_active:n.includes("woocommerce-services"),jetpack_installed:o.includes("jetpack"),jetpack_active:n.includes("jetpack"),jetpack_connected:r})})(t)}),[t]),(0,a.createElement)(o.Slot,{name:"woocommerce_onboarding_task_"+t,fillProps:n})};var W=n(61055),U=n.n(W);const G={PH:{"National Capital Region":(0,s.__)("Metro Manila","woocommerce")},IT:{Rome:(0,s.__)("Roma","woocommerce")}},Y=e=>{let{country_short:t,region:n="",city:o=""}=e;if(!t)return null;const r=G[t];if(!r)return null;const a=r[n];if(a)return a;return r[o]||null},Q=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.7;if(!t)return null;let o=null,r=n;const a=Y(t);for(const n of e){if(n.key===t.country_short)return n;if(n.key.split(":")[0]===t.country_short&&n.label.includes("—")){const e=n.label.split("—")[1].trim();if(a===e)return n;if(0===e.localeCompare(t.region||"","en",{sensitivity:"base"})||0===e.localeCompare(t.city||"","en",{sensitivity:"base"}))return n;const i=Math.max(U().compareTwoStrings(e,t.region||""),U().compareTwoStrings(e,t.city||""));i>=r&&(o=n,r=i)}}return o},q=e=>{var t;return null!==(t=null==e?void 0:e.split(":")[0])&&void 0!==t?t:void 0};var J=n(83849),K=n.n(J),X=n(99196);const $=e=>{let{className:t="",percent:n=0,color:o="#674399",bgcolor:r="var(--wp-admin-theme-color)"}=e;const a={backgroundColor:r},i={backgroundColor:o,width:`${n}%`,display:0===n?"none":"inherit"};return(0,X.createElement)("div",{className:`woocommerce-onboarding-progress-bar ${t}`},(0,X.createElement)("div",{className:"woocommerce-onboarding-progress-bar__container",style:a},(0,X.createElement)("div",{className:"woocommerce-onboarding-progress-bar__filler",style:i})))},ee=e=>{let{children:t,className:n}=e;return(0,a.createElement)("div",{className:K()("woocommerce-onboarding-loader",n)},t)};ee.Layout=e=>{let{children:t,className:n}=e;return(0,a.createElement)("div",{className:K()("woocommerce-onboarding-loader-wrapper",n)},(0,a.createElement)("div",{className:K()("woocommerce-onboarding-loader-container",n)},t))},ee.Illustration=e=>{let{children:t}=e;return(0,a.createElement)(a.Fragment,null,t)},ee.Title=e=>{let{children:t,className:n}=e;return(0,a.createElement)("h1",{className:K()("woocommerce-onboarding-loader__title",n)},t)},ee.ProgressBar=e=>{let{progress:t,className:n}=e;return(0,a.createElement)($,{className:K()("progress-bar",n),percent:null!=t?t:0,color:"var(--wp-admin-theme-color)",bgcolor:"#E0E0E0"})},ee.Subtext=e=>{let{children:t,className:n}=e;return(0,a.createElement)("p",{className:K()("woocommerce-onboarding-loader__paragraph",n)},t)},ee.Sequence=e=>{let{interval:t,shouldLoop:n=!0,children:o}=e;const[r,i]=(0,a.useState)(0),s=a.Children.count(o);(0,a.useEffect)((()=>{const e=setInterval((()=>{i((t=>{const o=t+1;return n?o%s:oclearInterval(e)}),[t,o,n,s]);const c=a.Children.toArray(o)[r];return(0,a.createElement)(a.Fragment,null,c)}},92342:(e,t,n)=>{"use strict";n.d(t,{z:()=>m,T:()=>p});var o=n(69307),r=n(55609),a=n(9818),i=n(65736),s=n(67221),c=n(14599);const l=()=>(0,o.createElement)(o.Fragment,null,(0,o.createElement)("svg",{className:"woocommerce-layout__activity-panel-tab-icon",width:"24",height:"24",viewBox:"3 3 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,o.createElement)("path",{d:"M13.8053 15.3982C13.8053 15.7965 13.4867 16.1947 13.0089 16.1947H6.79646C6.55752 16.1947 6.39823 16.115 6.23894 15.9558C6.07965 15.7965 6 15.6372 6 15.3982V6.79646C6 6.63717 6.15929 6.39823 6.23894 6.23894C6.39823 6.07965 6.55752 6 6.79646 6H13.0089C13.4071 6 13.8053 6.31858 13.8053 6.79646V15.3982Z",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),(0,o.createElement)("path",{d:"M23.9203 10.6195C23.9203 11.0177 23.6017 11.4159 23.1238 11.4159H16.9115C16.6725 11.4159 16.5132 11.3363 16.3539 11.177C16.1946 11.0177 16.115 10.8584 16.115 10.6195V6.79646C16.115 6.39823 16.4336 6 16.9115 6H23.1238C23.5221 6 23.9203 6.31858 23.9203 6.79646V10.6195Z",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),(0,o.createElement)("path",{d:"M13.8053 23.2035C13.8053 23.4424 13.7257 23.6017 13.5664 23.761C13.4071 23.9203 13.2478 23.9999 13.0089 23.9999H6.79646C6.39823 23.9999 6 23.6813 6 23.2035V19.3804C6 19.1415 6.07965 18.9822 6.23894 18.8229C6.39823 18.6636 6.55752 18.584 6.79646 18.584H13.0089C13.4071 18.584 13.8053 18.9026 13.8053 19.3804V23.2035Z",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),(0,o.createElement)("path",{d:"M16.9912 23.9999C16.7522 23.9999 16.5929 23.9202 16.4336 23.7609C16.2743 23.6016 16.1947 23.4423 16.1947 23.2034V14.6016C16.1947 14.3627 16.2743 14.2034 16.4336 14.0441C16.5929 13.8848 16.7522 13.8052 16.9912 13.8052H23.2036C23.4425 13.8052 23.6018 13.8848 23.7611 14.0441C23.9204 14.2034 24 14.3627 24 14.6016V23.2034C24 23.6016 23.6814 23.9999 23.2036 23.9999H16.9912Z",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})),(0,i.__)("Display","woocommerce")),{Fill:m,Slot:u}=(0,r.createSlotFill)("DisplayOptions");m.Slot=u;const d=[{value:"single_column",label:(0,o.createElement)(o.Fragment,null,(0,o.createElement)((()=>(0,o.createElement)("svg",{className:"woocommerce-layout__activity-panel-tab-icon",width:"12",height:"14",viewBox:"0 0 12 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,o.createElement)("rect",{x:"0.5",y:"0.5",width:"11",height:"13",strokeWidth:"1"}))),null),(0,i.__)("Single column","woocommerce"))},{value:"two_columns",label:(0,o.createElement)(o.Fragment,null,(0,o.createElement)((()=>(0,o.createElement)("svg",{className:"woocommerce-layout__activity-panel-tab-icon",width:"18",height:"14",viewBox:"0 0 18 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,o.createElement)("rect",{x:"0.5",y:"0.5",width:"7",height:"13",strokeWidth:"1"}),(0,o.createElement)("rect",{x:"9.5",y:"0.5",width:"7",height:"13",strokeWidth:"1"}))),null),(0,i.__)("Two columns","woocommerce"))}],p=()=>{const{defaultHomescreenLayout:e,taskListComplete:t,isTaskListHidden:n}=(0,a.useSelect)((e=>{const{getOption:t}=e(s.OPTIONS_STORE_NAME),{getTaskList:n}=e(s.ONBOARDING_STORE_NAME),o=n("setup");return{defaultHomescreenLayout:t("woocommerce_default_homepage_layout")||"single_column",taskListComplete:null==o?void 0:o.isComplete,isTaskListHidden:null==o?void 0:o.isHidden}})),{updateUserPreferences:m,homepage_layout:p}=(0,s.useUserPreferences)(),h=t||n||window.wcAdminFeatures.analytics;return(0,o.createElement)(u,null,(t=>0!==t.length||h?(0,o.createElement)(r.DropdownMenu,{icon:(0,o.createElement)(l,null),label:(0,i.__)("Display options","woocommerce"),toggleProps:{className:"woocommerce-layout__activity-panel-tab display-options",onClick:()=>(0,c.recordEvent)("homescreen_display_click")},popoverProps:{className:"woocommerce-layout__activity-panel-popover"}},(n=>{let{onClose:a}=n;return(0,o.createElement)(o.Fragment,null,t,h?(0,o.createElement)(r.MenuGroup,{className:"woocommerce-layout__homescreen-display-options",label:(0,i.__)("Layout","woocommerce")},(0,o.createElement)(r.MenuItemsChoice,{choices:d,onSelect:e=>{m({homepage_layout:e}),a(),(0,c.recordEvent)("homescreen_display_option",{display_option:e})},value:p||e})):null)})):null))}},30554:(e,t,n)=>{"use strict";n.d(t,{$Q:()=>w,vn:()=>H});var o=n(69307),r=n(65736),a=n(14812),i=n(14599),s=n(86020),c=n(9818),l=n(67221),m=n(70444);const u=(0,o.createElement)(m.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,o.createElement)(m.Path,{d:"M18 4H6c-1.1 0-2 .9-2 2v12.9c0 .6.5 1.1 1.1 1.1.3 0 .5-.1.8-.3L8.5 17H18c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm.5 11c0 .3-.2.5-.5.5H7.9l-2.4 2.4V6c0-.3.2-.5.5-.5h12c.3 0 .5.2.5.5v9z"}));var d=n(89015),p=n(34200),h=n(55609),C=n(10431),g=n(22983),f=n(14138);const y=()=>(0,o.createElement)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,o.createElement)("path",{d:"M0 0h24v24H0z",fill:"none"}),(0,o.createElement)("path",{d:"M12 22c1.1 0 2-.9 2-2h-4c0 1.1.9 2 2 2zm6-6v-5c0-3.07-1.63-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.64 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2zm-2 1H8v-6c0-2.48 1.51-4.5 4-4.5s4 2.02 4 4.5v6z"})),w="AbbreviatedNotification",H=e=>{let{thingsToDoNextCount:t}=e;const{ordersToProcessCount:n,reviewsToModerateCount:m,stockNoticesCount:H,isSetupTaskListHidden:_,isExtendedTaskListHidden:v}=(0,c.useSelect)((e=>{var t,n;const{getTaskList:o}=e(l.ONBOARDING_STORE_NAME),r=(0,g.sg)(e);return{ordersToProcessCount:(0,g.xX)(e,r),reviewsToModerateCount:(0,f.Vh)(e),stockNoticesCount:(0,g.ae)(e),isSetupTaskListHidden:null===(t=o("setup"))||void 0===t?void 0:t.isHidden,isExtendedTaskListHidden:null===(n=o("extended"))||void 0===n?void 0:n.isHidden}})),E=e=>{(0,i.recordEvent)("activity_panel_click",{task:e})},{Slot:L}=(0,h.createSlotFill)(w),b=(0,C.isWCAdmin)();return(0,o.createElement)("div",{className:"woocommerce-abbreviated-notifications"},t>0&&!v&&(0,o.createElement)(s.AbbreviatedCard,{className:"woocommerce-abbreviated-notification",icon:(0,o.createElement)(y,null),href:"admin.php?page=wc-admin#extended_task_list",onClick:()=>E("thingsToDoNext"),type:b?"wc-admin":"wp-admin"},(0,o.createElement)(a.Text,{as:"h3"},(0,r.__)("Things to do next","woocommerce")),(0,o.createElement)(a.Text,{as:"p"},(0,r.sprintf)((0,r._n)("You have %d new thing to do","You have %d new things to do",t,"woocommerce"),t))),n>0&&_&&(0,o.createElement)(s.AbbreviatedCard,{className:"woocommerce-abbreviated-notification",icon:d.Z,href:"admin.php?page=wc-admin&opened_panel=orders-panel",onClick:()=>E("ordersToProcess"),type:b?"wc-admin":"wp-admin"},(0,o.createElement)(a.Text,{as:"h3"},(0,r.__)("Orders to fulfill","woocommerce")),(0,o.createElement)(a.Text,null,(0,r.sprintf)((0,r._n)("You have %d order to fulfill","You have %d orders to fulfill",n,"woocommerce"),n))),m>0&&_&&(0,o.createElement)(s.AbbreviatedCard,{className:"woocommerce-abbreviated-notification",icon:u,href:"admin.php?page=wc-admin&opened_panel=reviews-panel",onClick:()=>E("reviewsToModerate"),type:b?"wc-admin":"wp-admin"},(0,o.createElement)(a.Text,{as:"h3"},(0,r.__)("Reviews to moderate","woocommerce")),(0,o.createElement)(a.Text,null,(0,r.sprintf)((0,r._n)("You have %d review to moderate","You have %d reviews to moderate",m,"woocommerce"),m))),H>0&&_&&(0,o.createElement)(s.AbbreviatedCard,{className:"woocommerce-abbreviated-notification",icon:p.Z,href:"admin.php?page=wc-admin&opened_panel=stock-panel",onClick:()=>E("stockNotices"),type:b?"wc-admin":"wp-admin"},(0,o.createElement)(a.Text,{as:"h3"},(0,r.__)("Inventory to review","woocommerce")),(0,o.createElement)(a.Text,null,(0,r.__)("You have inventory to review and update","woocommerce"))),!v&&(0,o.createElement)(L,null))}},18210:(e,t,n)=>{"use strict";n.d(t,{Z:()=>y});var o=n(65736),r=n(92694),a=n(69307),i=n(73463);const s=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(3994)]).then(n.bind(n,38304)))),c=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(8758),n.e(6824)]).then(n.bind(n,57267)))),l=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(8758),n.e(9456)]).then(n.bind(n,62365)))),m=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(9616),n.e(3576)]).then(n.bind(n,9033)))),u=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(8758),n.e(185)]).then(n.bind(n,95084)))),d=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(4011)]).then(n.bind(n,15523)))),p=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(9792)]).then(n.bind(n,88414)))),h=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(4854)]).then(n.bind(n,54536)))),C=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(2502)]).then(n.bind(n,51734)))),g=(0,a.lazy)((()=>Promise.all([n.e(5838),n.e(3700)]).then(n.bind(n,60455)))),f=(0,i.O3)("manageStock","no"),y=()=>{const e=[{report:"revenue",title:(0,o.__)("Revenue","woocommerce"),component:s,navArgs:{id:"woocommerce-analytics-revenue"}},{report:"products",title:(0,o.__)("Products","woocommerce"),component:c,navArgs:{id:"woocommerce-analytics-products"}},{report:"variations",title:(0,o.__)("Variations","woocommerce"),component:l,navArgs:{id:"woocommerce-analytics-variations"}},{report:"orders",title:(0,o.__)("Orders","woocommerce"),component:m,navArgs:{id:"woocommerce-analytics-orders"}},{report:"categories",title:(0,o.__)("Categories","woocommerce"),component:u,navArgs:{id:"woocommerce-analytics-categories"}},{report:"coupons",title:(0,o.__)("Coupons","woocommerce"),component:d,navArgs:{id:"woocommerce-analytics-coupons"}},{report:"taxes",title:(0,o.__)("Taxes","woocommerce"),component:p,navArgs:{id:"woocommerce-analytics-taxes"}},"yes"===f?{report:"stock",title:(0,o.__)("Stock","woocommerce"),component:C,navArgs:{id:"woocommerce-analytics-stock"}}:null,{report:"customers",title:(0,o.__)("Customers","woocommerce"),component:g},{report:"downloads",title:(0,o.__)("Downloads","woocommerce"),component:h,navArgs:{id:"woocommerce-analytics-downloads"}}].filter(Boolean);return(0,r.applyFilters)("woocommerce_admin_reports_list",e)}},49850:(e,t,n)=>{"use strict";n.d(t,{ex:()=>u,vc:()=>g});var o=n(69307),r=n(65736),a=n(92694),i=n(75283),s=n(86020),c=n(67221),l=n(81921);var m=n(73463);const u=["processing","on-hold"],d=["completed","processing","refunded","cancelled","failed","pending","on-hold"],p=Object.keys(m.rq).filter((e=>"refunded"!==e)).map((e=>({value:e,label:m.rq[e],description:(0,r.sprintf)((0,r.__)("Exclude the %s status from reports","woocommerce"),m.rq[e])}))),h=(0,m.O3)("unregisteredOrderStatuses",{}),C=[{key:"defaultStatuses",options:p.filter((e=>d.includes(e.value)))},{key:"customStatuses",label:(0,r.__)("Custom Statuses","woocommerce"),options:p.filter((e=>!d.includes(e.value)))},{key:"unregisteredStatuses",label:(0,r.__)("Unregistered Statuses","woocommerce"),options:Object.keys(h).map((e=>({value:e,label:e,description:(0,r.sprintf)((0,r.__)("Exclude the %s status from reports","woocommerce"),e)})))}],g=(0,a.applyFilters)("woocommerce_admin_analytics_settings",{woocommerce_excluded_report_order_statuses:{label:(0,r.__)("Excluded statuses:","woocommerce"),inputType:"checkboxGroup",options:C,helpText:(0,i.Z)({mixedString:(0,r.__)("Orders with these statuses are excluded from the totals in your reports. The {{strong}}Refunded{{/strong}} status can not be excluded.","woocommerce"),components:{strong:(0,o.createElement)("strong",null)}}),defaultValue:["pending","cancelled","failed"]},woocommerce_actionable_order_statuses:{label:(0,r.__)("Actionable statuses:","woocommerce"),inputType:"checkboxGroup",options:C,helpText:(0,r.__)("Orders with these statuses require action on behalf of the store admin. These orders will show up in the Home Screen - Orders task.","woocommerce"),defaultValue:u},woocommerce_default_date_range:{name:"woocommerce_default_date_range",label:(0,r.__)("Default date range:","woocommerce"),inputType:"component",component:e=>{let{value:t,onChange:n}=e;const{wcAdminSettings:r}=(0,c.useSettings)("wc_admin",["wcAdminSettings"]),{woocommerce_default_date_range:a}=r,i=Object.fromEntries(new URLSearchParams(t.replace(/&/g,"&"))),{period:m,compare:u,before:d,after:p}=(0,l.getDateParamsFromQuery)(i,a),{primary:h,secondary:C}=(0,l.getCurrentDates)(i,a),g={period:m,compare:u,before:d,after:p,primaryDate:h,secondaryDate:C};return(0,o.createElement)(s.DateRangeFilterPicker,{query:i,onRangeSelect:e=>{n({target:{name:"woocommerce_default_date_range",value:new URLSearchParams(e).toString()}})},dateQuery:g,isoDateFormat:l.isoDateFormat})},helpText:(0,r.__)("Select a default date range. When no range is selected, reports will be viewed by the default date range.","woocommerce"),defaultValue:"period=month&compare=previous_year"},woocommerce_date_type:{name:"woocommerce_date_type",label:(0,r.__)("Date type:","woocommerce"),inputType:"select",options:[{label:(0,r.__)("Select a date type","woocommerce"),value:"",disabled:!0},{label:(0,r.__)("Date created","woocommerce"),value:"date_created",key:"date_created"},{label:(0,r.__)("Date paid","woocommerce"),value:"date_paid",key:"date_paid"},{label:(0,r.__)("Date completed","woocommerce"),value:"date_completed",key:"date_completed"}],helpText:(0,r.__)("Database date field considered for Revenue and Orders reports","woocommerce")}})},64214:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var o=n(69307),r=n(65736),a=n(55609),i=n(94333),s=n(7862),c=n.n(s),l=n(9818),m=n(67221);class u extends o.Component{constructor(e){super(e),this.state={isAwaitingRedirect:!1,isRedirecting:!1},this.connectJetpack=this.connectJetpack.bind(this),e.setIsPending(!1)}componentDidUpdate(e){const{createNotice:t,error:n,onError:o,isRequesting:r}=this.props;n&&n!==e.error&&(o&&o(),t("error",n)),!this.state.isAwaitingRedirect||this.state.isRedirecting||r||n||this.setState({isRedirecting:!0},(()=>{window.location=this.props.jetpackAuthUrl}))}connectJetpack(){const{onConnect:e}=this.props;e&&e(),this.setState({isAwaitingRedirect:!0})}render(){const{error:e,onSkip:t,skipText:n,onAbort:i,abortText:s}=this.props;return(0,o.createElement)(o.Fragment,null,e?(0,o.createElement)(a.Button,{isPrimary:!0,onClick:()=>window.location.reload()},(0,r.__)("Retry","woocommerce")):(0,o.createElement)(a.Button,{isBusy:this.state.isAwaitingRedirect,isPrimary:!0,onClick:this.connectJetpack},(0,r.__)("Connect","woocommerce")),t&&(0,o.createElement)(a.Button,{onClick:t},n||(0,r.__)("No thanks","woocommerce")),i&&(0,o.createElement)(a.Button,{onClick:i},s||(0,r.__)("Abort","woocommerce")))}}u.propTypes={createNotice:c().func.isRequired,error:c().string,isRequesting:c().bool,jetpackAuthUrl:c().string,onConnect:c().func,onError:c().func,onSkip:c().func,redirectUrl:c().string,skipText:c().string,setIsPending:c().func,onAbort:c().func,abortText:c().string},u.defaultProps={setIsPending:()=>{}};const d=(0,i.compose)((0,l.withSelect)(((e,t)=>{var n;const{getJetpackAuthUrl:o,isResolving:a}=e(m.ONBOARDING_STORE_NAME),i={redirectUrl:t.redirectUrl||window.location.href,from:"woocommerce-services"},s=o(i),c=a("getJetpackAuthUrl",[i]);let l;return a||s||(l=(0,r.__)("Error requesting connection URL.","woocommerce")),null!=s&&null!==(n=s.errors)&&void 0!==n&&n.length&&(l=null==s?void 0:s.errors[0]),{error:l,isRequesting:c,jetpackAuthUrl:s.url}})),(0,l.withDispatch)((e=>{const{createNotice:t}=e("core/notices");return{createNotice:t}})))(u)},11891:(e,t,n)=>{"use strict";n.d(t,{IO:()=>g,Yt:()=>p});var o=n(5267),r=n(69307),a=n(65736),i=n(67221),s=n(22629),c=n(92819),l=n(86020),m=n(55609),u=n(9818);const d=["addressLine1","addressLine2","city","countryState","postCode"];function p(){return e=>{const t={};return e.countryState.trim().length||(t.countryState=(0,a.__)("Please select a country / region","woocommerce")),t}}const h=e=>e.replace(/\s/g,"").toLowerCase(),C=(e,t)=>n=>{const o=e?n.key.split(":"):n.label.split("—");if(o.length<=1)return!1;const r=o[1];if(r.includes("/")){const e=r.split("/");return h(e[0])===t||h(e[1])===t}if(r.includes("(")&&r.includes(")")){const e=r.replace(")","").split("(");return h(e[0])===t||h(e[1])===t}return h(r)===t};function g(e){var t,n,p,g,f,y;let{getInputProps:w,setValue:H}=e;const _=w("countryState").value,{locale:v,hasFinishedResolution:E,countries:L,loadingCountries:b}=(0,u.useSelect)((e=>{const{getLocale:t,getCountries:n,hasFinishedResolution:o}=e(i.COUNTRIES_STORE_NAME);return{locale:t(_),countries:n(),loadingCountries:!o("getCountries"),hasFinishedResolution:o("getLocales")}})),k=(0,r.useMemo)((()=>function(e){return e.reduce(((e,t)=>{if(!t.states.length)return e.push({key:t.code,label:(0,s.decodeEntities)(t.name)}),e;const n=t.states.map((e=>({key:t.code+":"+e.code,label:(0,s.decodeEntities)(t.name)+" — "+(0,s.decodeEntities)(e.name)})));return e.push(...n),e}),[])}(L)),[L]),S=function(e,t,n){const[o,a]=(0,r.useState)(""),[i,s]=(0,r.useState)(""),l=(0,r.useRef)();return(0,r.useEffect)((()=>{if(!l.current){const n=e.find((e=>e.key===t)),r=n?n.label.split(/\u2013|\u2014|\-/):[],c=(r[0]||"").trim(),l=(r[1]||"").trim();c===o&&l===i||(a(c),s(l))}l.current=!1}),[t,e]),(0,r.useEffect)((()=>{if(void 0===l.current)return;if(!o&&!i&&t)return l.current=!0,void n("countryState","");const r=new RegExp((0,c.escapeRegExp)(o),"i"),a=o.length<3,s=i.length<3&&!!i.match(/^[\w]+$/);let m=[];o.length&&i.length?(m=e.filter((e=>r.test(a?e.key:e.label))),m.length||(m=[...e]),m.length>1&&(m=m.filter(C(s,h(i))))):o.length?m=e.filter((e=>r.test(a?e.key:e.label))):i.length&&(m=e.filter(C(s,h(i)))),1===m.length&&t!==m[0].key&&(l.current=!0,n("countryState",m[0].key))}),[o,i,e,n]),(0,r.createElement)(r.Fragment,null,(0,r.createElement)("input",{onChange:e=>a(e.target.value),value:o,name:"country",type:"text",className:"woocommerce-select-control__autofill-input",tabIndex:-1,autoComplete:"country"}),(0,r.createElement)("input",{onChange:e=>s(e.target.value),value:i,name:"state",type:"text",className:"woocommerce-select-control__autofill-input",tabIndex:-1,autoComplete:"address-level1"}))}(k,_,H);return(0,r.useEffect)((()=>{v&&d.forEach((e=>{var t,n;const o=e.replace(/(address)Line([0-9])/,"$1$2").toLowerCase(),r=w(e);var a;a=o,v.hasOwnProperty(a)&&null!==(t=v[o])&&void 0!==t&&t.hidden&&(null===(n=r.value)||void 0===n?void 0:n.length)>0&&H(e,"")}))}),[_,v]),!E||b?(0,r.createElement)(m.Spinner,null):(0,r.createElement)("div",{className:"woocommerce-store-address-fields"},(0,r.createElement)(l.SelectControl,(0,o.Z)({label:(0,a.__)("Country / Region","woocommerce")+" *",required:!0,autoComplete:"new-password",getSearchExpression:e=>new RegExp("(^"+e+"| — ("+e+"))","i"),options:k,excludeSelectedOptions:!1,showAllOnFocus:!0,isSearchable:!0},w("countryState"),{controlClassName:w("countryState").className}),S),!(null!=v&&null!==(t=v.address_1)&&void 0!==t&&t.hidden)&&(0,r.createElement)(l.TextControl,(0,o.Z)({label:(null==v||null===(n=v.address_1)||void 0===n?void 0:n.label)||(0,a.__)("Address","woocommerce"),autoComplete:"address-line1"},w("addressLine1"))),!(null!=v&&null!==(p=v.postcode)&&void 0!==p&&p.hidden)&&(0,r.createElement)(l.TextControl,(0,o.Z)({label:(null==v||null===(g=v.postcode)||void 0===g?void 0:g.label)||(0,a.__)("Post code","woocommerce"),autoComplete:"postal-code"},w("postCode"))),!(null!=v&&null!==(f=v.city)&&void 0!==f&&f.hidden)&&(0,r.createElement)(l.TextControl,(0,o.Z)({label:(null==v||null===(y=v.city)||void 0===y?void 0:y.label)||(0,a.__)("City","woocommerce")},w("city"),{autoComplete:"address-level2"})))}},82580:(e,t,n)=>{"use strict";n.d(t,{jt:()=>c,so:()=>a,w:()=>i}),n(22629);var o=n(92819),r=n(73463);function a(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e?e.split(":")[0]:null}function i(e){let t=a(e);const n=(0,o.without)((0,r.O3)("onboarding",{euCountries:[]}).euCountries,"GB");return null!==t&&n.includes(t)&&(t="EU"),t}function s(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0;const r=[];if(!o)return r;const a=e.product_types||[];return a.forEach((e=>{o[e]&&o[e].product&&(t||!n.includes(o[e].slug))&&r.push(o[e])})),r}function c(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3?arguments[3]:void 0;const r=s(t,n,o,e),a=r.map((e=>e.id||e.product));return a}},22983:(e,t,n)=>{"use strict";n.d(t,{Ox:()=>s,ae:()=>c,sg:()=>i,xX:()=>a});var o=n(67221),r=n(49850);function a(e,t){const{getItemsTotalCount:n,getItemsError:r,isResolving:a}=e(o.ITEMS_STORE_NAME);if(!t.length)return 0;const i={page:1,per_page:1,status:t,_fields:["id"]},s=n("orders",i,null),c=Boolean(r("orders",i)),l=a("getItemsTotalCount",["orders",i,null]);return c||l?null:s}function i(e){const{getSetting:t}=e(o.SETTINGS_STORE_NAME),{woocommerce_actionable_order_statuses:n=r.ex}=t("wc_admin","wcAdminSettings",{});return n}const s={page:1,per_page:1,low_in_stock:!0,status:"publish",_fields:["id"]};function c(e){const{getItemsTotalCount:t,getItemsError:n,isResolving:r}=e(o.ITEMS_STORE_NAME),a=null,i=t("products/low-in-stock",s,a),c=Boolean(n("products/low-in-stock",s)),l=r("getItemsTotalCount",["products/low-in-stock",s,a]);return c||l&&i===a?null:i}},14138:(e,t,n)=>{"use strict";n.d(t,{Vh:()=>i,X6:()=>r,wY:()=>a});var o=n(67221);const r=5,a={page:1,per_page:1,status:"hold",_embed:1,_fields:["id"]};function i(e){const{getReviewsTotalCount:t,getReviewsError:n,isResolving:r}=e(o.REVIEWS_STORE_NAME),i=t(a),s=Boolean(n(a)),c=r("getReviewsTotalCount",[a]);return s||c&&void 0===i?null:i}},23322:(e,t,n)=>{"use strict";n.d(t,{fs:()=>i,kS:()=>s,r7:()=>m});var o=n(92819),r=n(49248),a=n.n(r);function i(e,t){return(0,o.filter)(e,(e=>{const{is_deleted:n,date_created_gmt:o,status:r}=e;if(!n)return(!t||!o||new Date(o+"Z").getTime()>t)&&"unactioned"===r})).length}function s(e){return(0,o.filter)(e,(e=>{const{is_deleted:t}=e;return!t})).length>0}const c=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:" ",o=e.slice(0,t);if(e.indexOf(n,t)!==t){const e=o.lastIndexOf(n);e>-1&&(o=o.slice(0,e))}return o.join("")},l=(e,t)=>{const n=document.createElement("div"),o=Array.from(e.childNodes),r=new(a());let i=0;for(let e=0;e{const n=document.createElement("div"),o=new(a());return n.innerHTML=e,o.splitGraphemes(n.textContent).length>t?l(n,t).innerHTML+"...":e}},74816:(e,t,n)=>{"use strict";n.d(t,{E:()=>s});var o=n(69307),r=n(65736),a=n(55609),i=n(14812);const s=()=>(0,o.createElement)("div",{className:"woocommerce-layout__no-match"},(0,o.createElement)(a.Card,null,(0,o.createElement)(a.CardBody,null,(0,o.createElement)(i.Text,null,(0,r.__)("Sorry, you are not allowed to access this page.","woocommerce")))))},25753:(e,t,n)=>{"use strict";n.d(t,{C:()=>a});var o=n(96483),r=n(74617);const a=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{pathname:n,search:a}=window.location,i=(0,r.getSetting)("connectNonce","");return t={"wccom-site":(0,r.getSetting)("siteUrl"),"wccom-back":n+a,"wccom-woo-version":(0,r.getSetting)("wcVersion"),"wccom-connect-nonce":i,...t},(0,o.addQueryArgs)(e,t)}},34704:(e,t,n)=>{"use strict";n.d(t,{a:()=>r});var o=n(9818);function r(e){const{createNotice:t}=(0,o.dispatch)("core/notices");e.error_data&&e.errors&&Object.keys(e.errors).length?Object.keys(e.errors).forEach((n=>{t("error",e.errors[n].join(" "))})):e.message&&t(e.code?"error":"success",e.message)}},32008:(e,t,n)=>{"use strict";n.d(t,{ZP:()=>i});var o=n(74944);const r=["a","b","em","i","strong","p","br"],a=["target","href","rel","name","download"],i=e=>({__html:(0,o.sanitize)(e,{ALLOWED_TAGS:r,ALLOWED_ATTR:a})})},90523:(e,t,n)=>{"use strict";n.d(t,{j:()=>o});const o=e=>e&&1===e.filter((e=>0===e.id.indexOf("woocommerce_payments"))).length},74693:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});var o=n(69307);const r=()=>(0,o.createElement)("svg",{width:"16",height:"17",viewBox:"0 0 16 17",xmlns:"http://www.w3.org/2000/svg"},(0,o.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.68822 12.625L1.5 13.8145L1.5 1.5L14.5 1.5L14.5 12.625L2.68822 12.625ZM3.31 14.125L15 14.125C15.5523 14.125 16 13.6773 16 13.125L16 1C16 0.447717 15.5523 0 15 0H1C0.447717 0 0 0.447716 0 1V15.5247C0 15.8173 0.161234 16.086 0.419354 16.2237C0.727111 16.3878 1.10601 16.3313 1.35252 16.0845L3.31 14.125ZM12 5.99997H4V4.49997H12V5.99997ZM4 9.99997H9V8.49997H4V9.99997Z",fill:"currentColor"}))},3816:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var o=n(69307),r=n(65736),a=n(94333),i=n(9818),s=n(75283),c=n(55609),l=n(86020),m=n(67221),u=n(73516);class d extends o.Component{constructor(e){super(e),this.state={isLoadingScripts:!1,isRequestStarted:!1,selectedAction:null}}async componentDidUpdate(e,t){const{hasErrors:n,isRequesting:o,onClose:a,onContinue:i,createNotice:s}=this.props,{isLoadingScripts:c,isRequestStarted:l}=this.state;if(!l)return;const m=!o&&!c&&(e.isRequesting||t.isLoadingScripts)&&!n,u=!o&&e.isRequesting&&n;m&&(a(),i()),u&&(s("error",(0,r.__)("There was a problem updating your preferences","woocommerce")),a())}updateTracking(e){let{allowTracking:t}=e;const{updateOptions:n}=this.props;t&&"function"==typeof window.wcTracks.enable?(this.setState({isLoadingScripts:!0}),window.wcTracks.enable((()=>{this._isMounted&&((0,u.initializeExPlat)(),this.setState({isLoadingScripts:!1}))}))):t||(window.wcTracks.isEnabled=!1);const o=t?"yes":"no";this.setState({isRequestStarted:!0}),n({woocommerce_allow_tracking:o})}componentDidMount(){this._isMounted=!0}componentWillUnmount(){this._isMounted=!1}render(){const{allowTracking:e,isResolving:t,onClose:n,onContinue:a}=this.props;if(t)return null;if(e)return n(),a(),null;const{isRequesting:i,title:m=(0,r.__)("Build a better WooCommerce","woocommerce"),message:u=(0,s.Z)({mixedString:(0,r.__)("Get improved features and faster fixes by sharing non-sensitive data via {{link}}usage tracking{{/link}} that shows us how WooCommerce is used. No personal data is tracked or stored.","woocommerce"),components:{link:(0,o.createElement)(l.Link,{href:"https://woocommerce.com/usage-tracking?utm_medium=product",target:"_blank",type:"external"})}}),dismissActionText:d=(0,r.__)("No thanks","woocommerce"),acceptActionText:p=(0,r.__)("Yes, count me in!","woocommerce")}=this.props,{isRequestStarted:h,selectedAction:C}=this.state,g=h&&i;return(0,o.createElement)(c.Modal,{title:m,isDismissible:this.props.isDismissible,onRequestClose:()=>this.props.onClose(),className:"woocommerce-usage-modal"},(0,o.createElement)("div",{className:"woocommerce-usage-modal__wrapper"},(0,o.createElement)("div",{className:"woocommerce-usage-modal__message"},u),(0,o.createElement)("div",{className:"woocommerce-usage-modal__actions"},(0,o.createElement)(c.Button,{isSecondary:!0,isBusy:g&&"dismiss"===C,disabled:g&&"accept"===C,onClick:()=>{this.setState({selectedAction:"dismiss"}),this.updateTracking({allowTracking:!1})}},d),(0,o.createElement)(c.Button,{isPrimary:!0,isBusy:g&&"accept"===C,disabled:g&&"dismiss"===C,onClick:()=>{this.setState({selectedAction:"accept"}),this.updateTracking({allowTracking:!0})}},p))))}}const p=(0,a.compose)((0,i.withSelect)((e=>{const{getOption:t,getOptionsUpdatingError:n,isOptionsUpdating:o,hasFinishedResolution:r}=e(m.OPTIONS_STORE_NAME);return{allowTracking:"yes"===t("woocommerce_allow_tracking"),isRequesting:Boolean(o()),isResolving:!r("getOption",["woocommerce_allow_tracking"])||void 0===t("woocommerce_allow_tracking"),hasErrors:Boolean(n())}})),(0,i.withDispatch)((e=>{const{createNotice:t}=e("core/notices"),{updateOptions:n}=e(m.OPTIONS_STORE_NAME);return{createNotice:t,updateOptions:n}})))(d)},36437:(e,t,n)=>{"use strict";n.d(t,{O:()=>c});var o=n(69307),r=n(14812),a=n(75283),i=n(65736),s=n(86020);const c=e=>{let{buttonText:t}=e;return(0,o.createElement)(r.Text,{variant:"caption",className:"woocommerce-task__caption is-tos",size:"12",lineHeight:"16px",style:{display:"block"}},(0,a.Z)({mixedString:(0,i.sprintf)((0,i.__)('By clicking "%s," you agree to our {{tosLink}}Terms of Service{{/tosLink}} and have read our {{privacyPolicyLink}}Privacy Policy{{/privacyPolicyLink}}.',"woocommerce"),t),components:{tosLink:(0,o.createElement)(s.Link,{href:"https://wordpress.com/tos/",target:"_blank",type:"external"},(0,o.createElement)(o.Fragment,null)),privacyPolicyLink:(0,o.createElement)(s.Link,{href:"https://automattic.com/privacy/",target:"_blank",type:"external"},(0,o.createElement)(o.Fragment,null))}}))}},52260:(e,t,n)=>{"use strict";n.r(t),n.d(t,{UsageModal:()=>l,default:()=>m});var o=n(69307),r=n(65736),a=n(10431),i=n(75283),s=n(86020),c=n(3816);const l=()=>{const e="1"===(0,a.getQuery)()["wcpay-connection-success"],[t,n]=(0,o.useState)(e);if(!t)return null;const l=()=>{n(!1),(0,a.updateQueryString)({"wcpay-connection-success":void 0})},m=(0,r.__)("Help us build a better WooPayments experience","woocommerce"),u=(0,i.Z)({mixedString:(0,r.__)("By agreeing to share non-sensitive {{link}}usage data{{/link}}, you’ll help us improve features and optimize the WooPayments experience. You can opt out at any time.","woocommerce"),components:{link:(0,o.createElement)(s.Link,{href:"https://woocommerce.com/usage-tracking?utm_medium=product",target:"_blank",type:"external"})}});return(0,o.createElement)(c.Z,{isDismissible:!1,title:m,message:u,acceptActionText:(0,r.__)("I agree","woocommerce"),dismissActionText:(0,r.__)("No thanks","woocommerce"),onContinue:l,onClose:l})},m=l},67097:(e,t,n)=>{"use strict";n.d(t,{L:()=>i});var o=n(69307),r=n(83849),a=n.n(r);const i=e=>{let{logo:t,description:n,layout:r="single",features:i,children:s}=e;return(0,o.createElement)("div",{className:a()("woocommerce-task-shipping-recommendation__plugins-install",r)},t&&(0,o.createElement)("div",{className:"plugins-install__plugin-banner-image"},(0,o.createElement)("img",{src:t.image,alt:null==t?void 0:t.alt})),n&&(0,o.createElement)("p",null,n),(0,o.createElement)("div",{className:"plugins-install__list"},i.map(((e,t)=>(0,o.createElement)("div",{className:"plugins-install__list-item",key:t},(0,o.createElement)("div",{className:"plugins-install__list-icon"},(0,o.createElement)("img",{src:e.icon,alt:""})),(0,o.createElement)("div",null,e.title&&(0,o.createElement)("div",null,(0,o.createElement)("strong",null,e.title)),(0,o.createElement)("div",null,e.description)))))),s)}},58670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u,z:()=>m});var o=n(69307),r=n(65736),a=n(55609),i=n(67221),s=n(86020),c=n(9818),l=n(11891);const m=e=>(0,l.Yt)()(e),u=e=>{let{onComplete:t,createNotice:n,isSettingsRequesting:u,updateAndPersistSettingsForGroup:d,settings:p,buttonText:h=(0,r.__)("Continue","woocommerce"),validate:C=m}=e;const{hasFinishedResolution:g}=(0,c.useSelect)((e=>{const t=e(i.COUNTRIES_STORE_NAME);return t.getCountries(),{getLocale:t.getLocale,locales:t.getLocales(),hasFinishedResolution:t.hasFinishedResolution("getLocales")&&t.hasFinishedResolution("getCountries")}})),[f,y]=(0,o.useState)(!1);return u||!g?(0,o.createElement)(s.Spinner,null):(0,o.createElement)(s.Form,{initialValues:{addressLine1:(null==p?void 0:p.woocommerce_store_address)||"",addressLine2:(null==p?void 0:p.woocommerce_store_address_2)||"",city:(null==p?void 0:p.woocommerce_store_city)||"",countryState:(null==p?void 0:p.woocommerce_default_country)||"",postCode:(null==p?void 0:p.woocommerce_store_postcode)||""},onSubmit:async e=>{y(!0);try{await d("general",{general:{...p,woocommerce_store_address:e.addressLine1,woocommerce_store_address_2:e.addressLine2,woocommerce_default_country:e.countryState,woocommerce_store_city:e.city,woocommerce_store_postcode:e.postCode}}),y(!1),t(e)}catch(e){y(!1),n("error",(0,r.__)("There was a problem saving your store location","woocommerce"))}},validate:C},(e=>{let{getInputProps:t,handleSubmit:n,setValue:r}=e;return(0,o.createElement)(o.Fragment,null,(0,o.createElement)(l.IO,{getInputProps:t,setValue:r}),(0,o.createElement)(a.Button,{isPrimary:!0,onClick:n,isBusy:f},h))}))}},33414:(e,t,n)=>{"use strict";n.d(t,{AO:()=>a,_9:()=>i,c7:()=>r});var o=n(74617);const r=["woocommerce-services"],a=e=>{const{woocommerce_store_address:t,woocommerce_default_country:n,woocommerce_store_postcode:o}=e;return Boolean(t&&n&&o)},i=()=>{window.location.href=(0,o.getAdminLink)("admin.php?page=wc-settings&tab=tax§ion=standard&wc_onboarding_active_task=tax")}},70123:(e,t,n)=>{"use strict";n.r(t),n.d(t,{ProgressTitle:()=>xt,TaskLists:()=>vt,TasksPlaceholder:()=>wt,TasksReminderBar:()=>kt,useActiveSetupTasklist:()=>Tt});var o=n(73463);const r=(0,o.O3)("onboarding");var a=n(69307),i=n(65736),s=n(9818),c=n(67221),l=n(14599),m=n(98817),u=n(72456),d=n(10431),p=n(55609),h=n(72672),C=n(83849),g=n.n(C),f=n(86020),y=n(14812),w=n(34374);const H=e=>{let{hasSetup:t=!1,needsSetup:n=!0,id:o,isEnabled:r=!1,isLoading:s=!1,isInstalled:c=!1,isRecommended:m=!1,hasPlugins:u,manageUrl:h=null,markConfigured:C,onSetUp:g=(()=>{}),onSetupCallback:f,setupButtonText:y=(0,i.__)("Get started","woocommerce"),externalLink:H=null}=e;const[_,v]=(0,a.useState)(!1),E="woocommerce-task-payment__action";if(s)return(0,a.createElement)(p.Spinner,null);const L=async()=>{if(g(o),(0,l.recordEvent)("tasklist_payment_setup",{selected:(0,w.br)(o)}),u||!H)return f?(v(!0),void await new Promise(f).then((()=>{v(!1)})).catch((()=>{v(!1)}))):void(0,d.updateQueryString)({id:o});window.location.href=H},b=()=>(0,a.createElement)(p.Button,{className:E,isSecondary:!0,role:"button",href:h,onClick:()=>(0,l.recordEvent)("tasklist_payment_manage",{id:o})},(0,i.__)("Manage","woocommerce")),k=()=>(0,a.createElement)(p.Button,{className:E,isPrimary:m,isSecondary:!m,isBusy:_,disabled:_,onClick:()=>L()},y),S=()=>(0,a.createElement)(p.Button,{className:E,isSecondary:!0,onClick:()=>C(o)},(0,i.__)("Enable","woocommerce"));return t?u?n?c&&u?(0,a.createElement)(p.Button,{className:E,isPrimary:m,isSecondary:!m,isBusy:_,disabled:_,onClick:()=>L()},(0,i.__)("Finish setup","woocommerce")):(0,a.createElement)(k,null):r?(0,a.createElement)(b,null):(0,a.createElement)(S,null):r?(0,a.createElement)(b,null):(0,a.createElement)(k,null):r?(0,a.createElement)(b,null):(0,a.createElement)(S,null)};var _=n(67630);const v=e=>{var t,n;let{isRecommended:o,markConfigured:r,paymentGateway:s}=e;const{image_72x72:c,content:l,id:m,plugins:d=[],title:h,loading:C,enabled:w=!1,installed:v=!1,needsSetup:E=!0,requiredSettings:L,settingsUrl:b,is_local_partner:k,external_link:S,transaction_processors:M}=s,N=(0,y.useSlot)(`woocommerce_payment_gateway_configure_${m}`),x=(0,y.useSlot)(`woocommerce_payment_gateway_setup_${m}`),T=Boolean(null==N||null===(t=N.fills)||void 0===t?void 0:t.length)||Boolean(null==x||null===(n=x.fills)||void 0===n?void 0:n.length),A=Boolean(d.length||L.length||T||S),I=o&&E,O=g()("woocommerce-task-payment","woocommerce-task-card",E&&"woocommerce-task-payment-not-configured","woocommerce-task-payment-"+m);return(0,a.createElement)(a.Fragment,{key:m},(0,a.createElement)(p.CardBody,{style:{paddingLeft:0,marginBottom:0},className:O},(0,a.createElement)(p.CardMedia,{isBorderless:!0},(0,a.createElement)("img",{src:c,alt:h,onError:e=>e.currentTarget.src=_})),(0,a.createElement)("div",{className:"woocommerce-task-payment__description"},(0,a.createElement)(y.Text,{as:"h3",className:"woocommerce-task-payment__title"},(0,a.createElement)("span",null,h),I&&(0,a.createElement)(f.Pill,{className:!k&&"pill-green"},k?(0,i.__)("Local Partner","woocommerce"):(0,i.__)("Recommended","woocommerce")),v&&E&&!!d.length&&(0,a.createElement)(u.SetupRequired,null)),(0,a.createElement)("div",{className:"woocommerce-task-payment__content"},l),M&&(0,a.createElement)("div",{className:"woocommerce-task-payment__transaction-processors_images"},Object.keys(M).map((e=>(0,a.createElement)("img",{src:M[e],alt:e,key:e}))))),(0,a.createElement)("div",{className:"woocommerce-task-payment__footer"},(0,a.createElement)(H,{manageUrl:b,id:m,hasSetup:A,needsSetup:E,isEnabled:w,isInstalled:v,hasPlugins:Boolean(d.length),isRecommended:o,isLoading:C,markConfigured:r,externalLink:S}))),(0,a.createElement)(p.CardDivider,null))},E=e=>{let{heading:t,headingDescription:n,markConfigured:o,recommendation:r,paymentGateways:i,footerLink:s}=e;return(0,a.createElement)(p.Card,null,t&&(0,a.createElement)(p.CardHeader,{as:"h2"},t,n&&(0,a.createElement)("p",{className:"woocommerce-task-payment-header__description"},n)),i.map((e=>{const{id:t}=e;return(0,a.createElement)(v,{key:t,isRecommended:r===t,markConfigured:o,paymentGateway:e})})),s&&(0,a.createElement)(p.CardFooter,{isBorderless:!0},s))},L=()=>{const e=g()("woocommerce-task-payment","woocommerce-task-card");return(0,a.createElement)(a.Fragment,null,(0,a.createElement)(p.CardBody,{style:{paddingLeft:0,marginBottom:0},className:e},(0,a.createElement)(p.CardMedia,{isBorderless:!0},(0,a.createElement)("span",{className:"is-placeholder"})),(0,a.createElement)("div",{className:"woocommerce-task-payment__description"},(0,a.createElement)(y.Text,{as:"h3",className:"woocommerce-task-payment__title"},(0,a.createElement)("span",{className:"is-placeholder"})),(0,a.createElement)("div",{className:"woocommerce-task-payment__content"},(0,a.createElement)("span",{className:"is-placeholder"}))),(0,a.createElement)("div",{className:"woocommerce-task-payment__footer"},(0,a.createElement)("span",{className:"is-placeholder"}))),(0,a.createElement)(p.CardDivider,null))},b=()=>(0,a.createElement)(p.Card,{"aria-hidden":"true",className:"is-loading woocommerce-payment-gateway-suggestions-list-placeholder"},(0,a.createElement)(p.CardHeader,{as:"h2"},(0,a.createElement)("span",{className:"is-placeholder"})),(0,a.createElement)(L,null),(0,a.createElement)(L,null),(0,a.createElement)(L,null));var k=n(34704),S=n(32008);const M=e=>{var t;let{markConfigured:n,paymentGateway:o}=e;const{id:r,connectionUrl:m,setupHelpText:d,settingsUrl:h,title:C,requiredSettings:g}=o,{createNotice:w}=(0,s.useDispatch)("core/notices"),{updatePaymentGateway:H}=(0,s.useDispatch)(c.PAYMENT_GATEWAYS_STORE_NAME),_=(0,y.useSlot)(`woocommerce_payment_gateway_configure_${r}`),v=Boolean(null==_||null===(t=_.fills)||void 0===t?void 0:t.length),{isUpdating:E}=(0,s.useSelect)((e=>{const{isPaymentGatewayUpdating:t}=e(c.PAYMENT_GATEWAYS_STORE_NAME);return{isUpdating:t()}})),L=e=>{H(r,{enabled:!0,settings:e}).then((e=>{e&&e.id===r&&(n(r),w("success",(0,i.sprintf)((0,i.__)("%s configured successfully","woocommerce"),C)))})).catch((()=>{w("error",(0,i.__)("There was a problem saving your payment settings","woocommerce"))}))},b=d&&(0,a.createElement)("p",{dangerouslySetInnerHTML:(0,S.ZP)(d)}),k=(0,a.createElement)(f.DynamicForm,{fields:g,isBusy:E,onSubmit:L,submitLabel:(0,i.__)("Continue","woocommerce"),validate:e=>((e,t)=>{const n={},o=e=>t.find((t=>t.id===e));for(const[t,r]of Object.entries(e)){const e=o(t),a=e.label.replace(/([A-Z][a-z]+)/g,(e=>e.toLowerCase()));r||"checkbox"===e.type||(n[t]=`Please enter your ${a}`)}return n})(e,g)});return v?(0,a.createElement)(u.WooPaymentGatewayConfigure.Slot,{fillProps:{defaultForm:k,defaultSubmit:L,defaultFields:g,markConfigured:()=>n(r),paymentGateway:o},id:r}):m?(0,a.createElement)(a.Fragment,null,b,(0,a.createElement)(p.Button,{isPrimary:!0,onClick:()=>(0,l.recordEvent)("tasklist_payment_connect_start",{payment_method:r}),href:m},(0,i.__)("Connect","woocommerce"))):g.length?(0,a.createElement)(a.Fragment,null,b,k):(0,a.createElement)(a.Fragment,null,b||(0,a.createElement)("p",null,(0,i.__)("You can manage this payment gateway's settings by clicking the button below","woocommerce")),(0,a.createElement)(p.Button,{isPrimary:!0,href:h},(0,i.__)("Get started","woocommerce")))},N=e=>{var t;let{markConfigured:n,paymentGateway:o}=e;const{id:r,plugins:m=[],title:d,postInstallScripts:h,installed:C}=o,g=(0,y.useSlot)(`woocommerce_payment_gateway_setup_${r}`),w=Boolean(null==g||null===(t=g.fills)||void 0===t?void 0:t.length),[H,_]=(0,a.useState)(!1);(0,a.useEffect)((()=>{(0,l.recordEvent)("payments_task_stepper_view",{payment_method:r})}),[]);const{invalidateResolutionForStoreSelector:v}=(0,s.useDispatch)(c.PAYMENT_GATEWAYS_STORE_NAME),{isOptionUpdating:E,isPaymentGatewayResolving:L,needsPluginInstall:b}=(0,s.useSelect)((e=>{const{isOptionsUpdating:t}=e(c.OPTIONS_STORE_NAME),{isResolving:n}=e(c.PAYMENT_GATEWAYS_STORE_NAME),o=e(c.PLUGINS_STORE_NAME).getActivePlugins(),r=m.filter((e=>!o.includes(e)));return{isOptionUpdating:t(),isPaymentGatewayResolving:n("getPaymentGateways"),needsPluginInstall:!!r.length}}));(0,a.useEffect)((()=>{if(!b)if(h&&h.length){const e=h.map((e=>function(e){return new Promise(((t,n)=>{document.querySelector(`#${e.handle}-js`)&&t();const o=document.createElement("script");o.src=e.src,o.id=`${e.handle}-js`,o.async=!0,o.onload=t,o.onerror=n,document.body.appendChild(o)}))}(e)));Promise.all(e).then((()=>{_(!0)}))}else _(!0)}),[h,b]);const S=(0,a.useMemo)((()=>m&&m.length?{key:"install",label:(0,i.sprintf)((0,i.__)("Install %s","woocommerce"),d),content:(0,a.createElement)(f.Plugins,{onComplete:(e,t)=>{(0,k.a)(t),v("getPaymentGateways"),(0,l.recordEvent)("tasklist_payment_install_method",{plugins:m})},onError:(e,t)=>(0,k.a)(t),autoInstall:!0,pluginSlugs:m})}:null),[]),N=(0,a.useMemo)((()=>({key:"configure",label:(0,i.sprintf)((0,i.__)("Configure your %(title)s account","woocommerce"),{title:d}),content:C?(0,a.createElement)(M,{markConfigured:n,paymentGateway:o}):null})),[C]),x=b||E||L||!H,T=(0,a.createElement)(f.Stepper,{isVertical:!0,isPending:x,currentStep:b?"install":"configure",steps:[S,N].filter(Boolean)});return(0,a.createElement)(p.Card,{className:"woocommerce-task-payment-method woocommerce-task-card"},(0,a.createElement)(p.CardBody,null,w?(0,a.createElement)(u.WooPaymentGatewaySetup.Slot,{fillProps:{defaultStepper:T,defaultInstallStep:S,defaultConfigureStep:N,markConfigured:()=>n(r),paymentGateway:o},id:r}):T))},x=()=>{const e=g()("is-loading","woocommerce-task-payment-method","woocommerce-task-card");return(0,a.createElement)(p.Card,{"aria-hidden":"true",className:e},(0,a.createElement)(p.CardBody,null,(0,a.createElement)(f.Stepper,{isVertical:!0,currentStep:"none",steps:[{key:"first",label:""},{key:"second",label:""}]})))};var T=n(86989),A=n.n(T);function I(e,t){const n=(0,i.__)("There was an error connecting to WooPayments. Please try again or connect later in store settings.","woocommerce");A()({path:c.WC_ADMIN_NAMESPACE+"/plugins/connect-wcpay",method:"POST"}).then((e=>{window.location=e.connectUrl})).catch((()=>{e("error",n),"function"==typeof t&&t()}))}function O(e,t,n){n(["woocommerce-payments"]).then((()=>{(0,l.recordEvent)("woocommerce_payments_install",{context:"tasklist"}),I(t,(()=>{e()}))})).catch((t=>{(0,k.a)(t),e()}))}const P=e=>{let{paymentGateway:t,onSetupCallback:n=null}=e;const{id:r,needsSetup:c,installed:l,enabled:m,installed:d}=t,p=(0,o.O3)("isWooPayEligible"),{createNotice:h}=(0,s.useDispatch)("core/notices");return l&&null===n&&(n=()=>{I(h)}),(0,a.createElement)("div",{className:"woocommerce-wcpay-suggestion"},(0,a.createElement)(u.WCPayBanner,null,(0,a.createElement)(u.WCPayBannerBody,{textPosition:"left",actionButton:(0,a.createElement)(H,{id:r,hasSetup:!0,needsSetup:c,isEnabled:m,isRecommended:!0,isInstalled:d,hasPlugins:!0,setupButtonText:(0,i.__)("Get started","woocommerce"),onSetupCallback:n}),bannerImage:(0,a.createElement)(u.WCPayBannerImageCut,null),isWooPayEligible:p}),(0,a.createElement)(u.WCPayBenefits,{isWooPayEligible:p}),(0,a.createElement)(u.WCPayBannerFooter,{isWooPayEligible:p})))};n(52260);var R=n(82580);const V=(e,t)=>e.recommendation_priority-t.recommendation_priority,j=e=>{var t;return 1===(null===(t=e.plugins)||void 0===t?void 0:t.length)&&"woocommerce-payments"===e.plugins[0]},D=(e,t)=>e.category_other&&-1!==e.category_other.indexOf(t);var Z=n(5267);const B={account_name:"",account_number:"",bank_name:"",sort_code:"",iban:"",bic:""};(0,m.registerPlugin)("wc-admin-payment-gateway-setup-bacs",{render:()=>{const e=(0,s.useSelect)((e=>e(c.OPTIONS_STORE_NAME).isOptionsUpdating())),{createNotice:t}=(0,s.useDispatch)("core/notices"),{updateOptions:n}=(0,s.useDispatch)(c.OPTIONS_STORE_NAME),o=e=>{const t={};return e.account_number||e.iban||(t.account_number=t.iban=(0,i.__)("Please enter an account number or IBAN","woocommerce")),t};return(0,a.createElement)(a.Fragment,null,(0,a.createElement)(u.WooPaymentGatewaySetup,{id:"bacs"},(r=>{let{markConfigured:s}=r;return(0,a.createElement)(f.Form,{initialValues:B,onSubmit:e=>(async(e,o)=>{if((await n({woocommerce_bacs_settings:{enabled:"yes"},woocommerce_bacs_accounts:[e]})).success)return o(),void t("success",(0,i.__)("Direct bank transfer details added successfully","woocommerce"));t("error",(0,i.__)("There was a problem saving your payment settings","woocommerce"))})(e,s),validate:o},(t=>{let{getInputProps:n,handleSubmit:o}=t;return(0,a.createElement)(a.Fragment,null,(0,a.createElement)(f.H,null,(0,i.__)("Add your bank details","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("These details are required to receive payments via bank transfer","woocommerce")),(0,a.createElement)("div",{className:"woocommerce-task-payment-method__fields"},(0,a.createElement)(f.TextControl,(0,Z.Z)({label:(0,i.__)("Account name","woocommerce"),required:!0},n("account_name"))),(0,a.createElement)(f.TextControl,(0,Z.Z)({label:(0,i.__)("Account number","woocommerce"),required:!0},n("account_number"))),(0,a.createElement)(f.TextControl,(0,Z.Z)({label:(0,i.__)("Bank name","woocommerce"),required:!0},n("bank_name"))),(0,a.createElement)(f.TextControl,(0,Z.Z)({label:(0,i.__)("Sort code","woocommerce"),required:!0},n("sort_code"))),(0,a.createElement)(f.TextControl,(0,Z.Z)({label:(0,i.__)("IBAN","woocommerce"),required:!0},n("iban"))),(0,a.createElement)(f.TextControl,(0,Z.Z)({label:(0,i.__)("BIC / Swift","woocommerce"),required:!0},n("bic")))),(0,a.createElement)(p.Button,{isPrimary:!0,isBusy:e,onClick:o},(0,i.__)("Save","woocommerce")))}))})))},scope:"woocommerce-tasks"});const z=e=>{let{onComplete:t,query:n}=e;const{updatePaymentGateway:o}=(0,s.useDispatch)(c.PAYMENT_GATEWAYS_STORE_NAME),{getPaymentGateway:r,paymentGatewaySuggestions:m,installedPaymentGateways:u,isResolving:C,countryCode:g}=(0,s.useSelect)((e=>{const{getSettings:t}=e(c.SETTINGS_STORE_NAME),{general:n={}}=t("general");return{getPaymentGateway:e(c.PAYMENT_GATEWAYS_STORE_NAME).getPaymentGateway,getOption:e(c.OPTIONS_STORE_NAME).getOption,installedPaymentGateways:e(c.PAYMENT_GATEWAYS_STORE_NAME).getPaymentGateways(),isResolving:e(c.ONBOARDING_STORE_NAME).isResolving("getPaymentGatewaySuggestions"),paymentGatewaySuggestions:e(c.ONBOARDING_STORE_NAME).getPaymentGatewaySuggestions(!0),countryCode:(0,R.so)(n.woocommerce_default_country)}}),[]),f=(0,a.useMemo)((()=>((e,t)=>{const n=e.reduce(((e,t)=>(e[t.id]=t,e)),{});return t.reduce(((e,t)=>{const o=(0,w.V7)(t.id),r=n[o]?n[o]:{},a={installed:!!n[o],postInstallScripts:r.post_install_scripts,hasPlugins:!(!t.plugins||!t.plugins.length),enabled:r.enabled||!1,needsSetup:r.needs_setup,settingsUrl:r.settings_url,connectionUrl:r.connection_url,setupHelpText:r.setup_help_text,title:r.title,requiredSettings:r.required_settings_keys?r.required_settings_keys.map((e=>r.settings[e])).filter(Boolean):[],...t};return e.set(t.id,a),e}),new Map)})(u,m)),[u,m]);(0,a.useEffect)((()=>{f.size&&(0,l.recordEvent)("tasklist_payments_options",{options:Array.from(f.values()).map((e=>e.id))})}),[f]);const y=(0,a.useCallback)((async e=>{if(!f.get(e))throw`Payment gateway ${e} not found in available gateways list`;(0,l.recordEvent)("tasklist_payment_connect_method",{payment_method:e}),(e=>{e&&r(e)&&o(e,{enabled:!0}).then((()=>{var n;t(null!==(n=f.get(e))&&void 0!==n&&n.hasPlugins?{}:{redirectPath:(0,d.getNewPath)({task:"payments"},{},"/")})}))})(e)}),[f]),H=(0,a.useMemo)((()=>Array.from(f.values()).filter((e=>e.recommendation_priority)).sort(V).map((e=>e.id)).shift()),[f]),_=(0,a.useMemo)((()=>{if(!n.id||C||!f.size)return null;const e=f.get(n.id);if(!e)throw`Current gateway ${n.id} not found in available gateways list`;return e}),[C,n,f]),v=(0,a.useMemo)((()=>((e,t)=>{for(const[,n]of e.entries())if(n.installed&&!n.needsSetup){if(j(n))return!0;if(D(n,t))return!0}return!1})(f,g)),[g,f]),L=-1!==Array.from(f.values()).findIndex(j),[k,S,M]=(0,a.useMemo)((()=>((e,t,n,o)=>Array.from(e.values()).sort(V).reduce(((e,r)=>{const[a,i,s]=e;return j(r)?!n||r.installed&&!r.needsSetup||a.push(r):r.is_offline?i.push(r):r.enabled||(o?((e,t)=>e.category_additional&&-1!==e.category_additional.indexOf(t))(r,t)&&s.push(r):D(r,t)&&s.push(r)),e}),[[],[],[]]))(f,g,L,v)),[f,g,L,v]);if(n.id&&!_)return(0,a.createElement)(x,null);if(_)return(0,a.createElement)(N,{paymentGateway:_,markConfigured:y});let T=(0,i.__)("Choose a payment provider","woocommerce"),A=(0,i.__)("To start accepting online payments","woocommerce");v?(T=(0,i.__)("Additional payment options","woocommerce"),A=(0,i.__)("Give your customers additional choices in ways to pay.","woocommerce")):L&&(T=(0,i.__)("Other payment providers","woocommerce"),A=(0,i.__)("Try one of the alternative payment providers.","woocommerce"));const I=!!M.length&&(0,a.createElement)(E,{heading:T,headingDescription:A,recommendation:H,paymentGateways:M,markConfigured:y,footerLink:(0,a.createElement)(p.Button,{href:"https://woocommerce.com/product-category/woocommerce-extensions/payment-gateways/?utm_source=payments_recommendations",target:"_blank",onClick:()=>{(0,l.recordEvent)("tasklist_payment_see_more",{})},isTertiary:!0},(0,i.__)("See more","woocommerce"),(0,a.createElement)(h.Z,{size:18}))}),O=!!S.length&&(0,a.createElement)(E,{heading:(0,i.__)("Offline payment methods","woocommerce"),recommendation:H,paymentGateways:S,markConfigured:y});return(0,a.createElement)("div",{className:"woocommerce-task-payments"},!f.size&&(0,a.createElement)(b,null),k.length?(0,a.createElement)(a.Fragment,null,(0,a.createElement)(P,{paymentGateway:k[0]}),I,O):(0,a.createElement)(a.Fragment,null,I,O))};(0,m.registerPlugin)("wc-admin-onboarding-task-payments",{scope:"woocommerce-tasks",render:()=>(0,a.createElement)(u.WooOnboardingTask,{id:"payments"},(e=>{let{onComplete:t,query:n}=e;return(0,a.createElement)(z,{onComplete:t,query:n})}))});var F=n(94333),W=n(92819),U=n(75283),G=n(74617),Y=n(64214),Q=n(58670),q=n(7862),J=n.n(q),K=n(23374),X=n(70444);const $=(0,a.createElement)(X.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,a.createElement)(X.Path,{d:"M12 3.3c-4.8 0-8.8 3.9-8.8 8.8 0 4.8 3.9 8.8 8.8 8.8 4.8 0 8.8-3.9 8.8-8.8s-4-8.8-8.8-8.8zm6.5 5.5h-2.6C15.4 7.3 14.8 6 14 5c2 .6 3.6 2 4.5 3.8zm.7 3.2c0 .6-.1 1.2-.2 1.8h-2.9c.1-.6.1-1.2.1-1.8s-.1-1.2-.1-1.8H19c.2.6.2 1.2.2 1.8zM12 18.7c-1-.7-1.8-1.9-2.3-3.5h4.6c-.5 1.6-1.3 2.9-2.3 3.5zm-2.6-4.9c-.1-.6-.1-1.1-.1-1.8 0-.6.1-1.2.1-1.8h5.2c.1.6.1 1.1.1 1.8s-.1 1.2-.1 1.8H9.4zM4.8 12c0-.6.1-1.2.2-1.8h2.9c-.1.6-.1 1.2-.1 1.8 0 .6.1 1.2.1 1.8H5c-.2-.6-.2-1.2-.2-1.8zM12 5.3c1 .7 1.8 1.9 2.3 3.5H9.7c.5-1.6 1.3-2.9 2.3-3.5zM10 5c-.8 1-1.4 2.3-1.8 3.8H5.5C6.4 7 8 5.6 10 5zM5.5 15.3h2.6c.4 1.5 1 2.8 1.8 3.7-1.8-.6-3.5-2-4.4-3.7zM14 19c.8-1 1.4-2.2 1.8-3.7h2.6C17.6 17 16 18.4 14 19z"}));var ee=n(17844);const te=e=>{let{zone:t}=e;return(0,a.createElement)("div",{className:"woocommerce-shipping-rate__icon"},t.locations?t.locations.map((e=>(0,a.createElement)(f.Flag,{size:24,code:e.code,key:e.code}))):(0,a.createElement)(K.Z,{icon:$}))},ne=e=>{let{zone:t,getInputProps:n}=e;return(0,a.createElement)("label",{htmlFor:`woocommerce-shipping-rate__toggle-${t.id}`,className:"woocommerce-shipping-rate__name"},t.name,(0,a.createElement)(p.FormToggle,(0,Z.Z)({id:`woocommerce-shipping-rate__toggle-${t.id}`},n(`${t.id}_enabled`))))},oe=e=>{let{zone:t,values:n,setTouched:o,setValue:r,getFormattedRate:s,renderInputPrefix:c,renderInputSuffix:l,inputProps:{className:m,...u}}=e;const d=g()("muriel-input-text","woocommerce-shipping-rate__control-wrapper",m);return(0,a.createElement)(a.Fragment,null,!t.toggleable&&(0,a.createElement)("div",{className:"woocommerce-shipping-rate__name"},t.name),(!t.toggleable||n[`${t.id}_enabled`])&&(0,a.createElement)(f.TextControlWithAffixes,(0,Z.Z)({label:(0,i.__)("Shipping cost","woocommerce"),required:!0,className:d},u,{onBlur:()=>{o(`${t.id}_rate`),r(`${t.id}_rate`,s(n[`${t.id}_rate`]))},prefix:c(),suffix:l(n[`${t.id}_rate`])})))};class re extends a.Component{constructor(){super(...arguments),this.updateShippingZones=this.updateShippingZones.bind(this),this.getFormattedRate=this.getFormattedRate.bind(this),this.renderInputPrefix=this.renderInputPrefix.bind(this),this.renderInputSuffix=this.renderInputSuffix.bind(this)}getShippingMethods(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return e&&e.methods&&Array.isArray(e.methods)?t?e.methods?e.methods.filter((e=>e.method_id===t)):[]:e.methods:[]}disableShippingMethods(e,t){t.length&&t.forEach((t=>{A()({method:"POST",path:`/wc/v3/shipping/zones/${e.id}/methods/${t.instance_id}`,data:{enabled:!1}})}))}async updateShippingZones(e){const{createNotice:t,shippingZones:n}=this.props;let o=!1,r=!1;n.forEach((t=>{0===t.id?o=t.toggleable&&e[`${t.id}_enabled`]:r=""!==e[`${t.id}_rate`]&&parseFloat(e[`${t.id}_rate`])!==parseFloat(0);const n=this.getShippingMethods(t),a=parseFloat(e[`${t.id}_rate`])===parseFloat(0)?"free_shipping":"flat_rate",i=this.getShippingMethods(t,a).length?this.getShippingMethods(t,a)[0]:null;if(!t.toggleable||e[`${t.id}_enabled`]){if(i){const e=n.filter((e=>e.instance_id!==i.instance_id));this.disableShippingMethods(t,e)}A()({method:"POST",path:i?`/wc/v3/shipping/zones/${t.id}/methods/${i.instance_id}`:`/wc/v3/shipping/zones/${t.id}/methods`,data:{method_id:a,enabled:!0,settings:{cost:e[`${t.id}_rate`]}}})}else this.disableShippingMethods(t,n)})),(0,l.recordEvent)("tasklist_shipping_set_costs",{shipping_cost:r,rest_world:o}),t("success",(0,i.__)("Your shipping rates have been updated","woocommerce")),this.props.onComplete()}renderInputPrefix(){const{symbolPosition:e,symbol:t}=this.context.getCurrencyConfig();return 0===e.indexOf("right")?null:(0,a.createElement)("span",{className:"woocommerce-shipping-rate__control-prefix"},t)}renderInputSuffix(e){const{symbolPosition:t,symbol:n}=this.context.getCurrencyConfig();return 0===t.indexOf("right")?(0,a.createElement)("span",{className:"woocommerce-shipping-rate__control-suffix"},n):parseFloat(e)===parseFloat(0)?(0,a.createElement)("span",{className:"woocommerce-shipping-rate__control-suffix"},(0,i.__)("Free shipping","woocommerce")):null}getFormattedRate(e){const{formatDecimalString:t}=this.context,n=t(e);return e.length&&n.length?t(e):t(0)}getInitialValues(){const{formatDecimalString:e}=this.context,t={};return this.props.shippingZones.forEach((n=>{const o=this.getShippingMethods(n),r=o.length&&o[0].settings.cost?this.getFormattedRate(o[0].settings.cost.value):e(0);t[`${n.id}_rate`]=r,o.length&&o[0].enabled?t[`${n.id}_enabled`]=!0:t[`${n.id}_enabled`]=!1})),t}validate(e){const t={};return Object.keys(e).filter((e=>e.endsWith("_rate"))).forEach((n=>{e[n]<0&&(t[n]=(0,i.__)("Shipping rates can not be negative numbers.","woocommerce"))})),t}render(){const{buttonText:e,shippingZones:t}=this.props;return t.length?(0,a.createElement)(f.Form,{initialValues:this.getInitialValues(),onSubmit:this.updateShippingZones,validate:this.validate},(n=>{let{getInputProps:o,handleSubmit:r,setTouched:s,setValue:c,values:l}=n;return(0,a.createElement)(a.Fragment,null,(0,a.createElement)("div",{className:"woocommerce-shipping-rates"},t.map((e=>(0,a.createElement)("div",{className:"woocommerce-shipping-rate",key:e.id},(0,a.createElement)(te,{zone:e}),(0,a.createElement)("div",{className:"woocommerce-shipping-rate__main"},e.toggleable&&(0,a.createElement)(ne,{zone:e,getInputProps:o}),(0,a.createElement)(oe,{zone:e,values:l,inputProps:o(`${e.id}_rate`),setTouched:s,setValue:c,getFormattedRate:this.getFormattedRate,renderInputPrefix:this.renderInputPrefix,renderInputSuffix:this.renderInputSuffix})))))),(0,a.createElement)(p.Button,{isPrimary:!0,onClick:r},e||(0,i.__)("Update","woocommerce")))})):null}}re.propTypes={buttonText:J().string,onComplete:J().func.isRequired,createNotice:J().func.isRequired,shippingZones:J().array},re.defaultProps={shippingZones:[]},re.contextType=ee.CurrencyContext;const ae=re;var ie=n(67097);const se=e=>{var t,n;let{shippingMethod:o}=e;return(0,a.createElement)(ie.L,{features:(null===(t=o.layout_column)||void 0===t?void 0:t.features)||[],logo:{image:(null===(n=o.layout_column)||void 0===n?void 0:n.image)||""}})},ce=e=>{var t,n;let{shippingMethod:o,children:r}=e;return(0,a.createElement)(ie.L,{layout:"dual",features:(null===(t=o.layout_row)||void 0===t?void 0:t.features)||[],logo:{image:(null===(n=o.layout_row)||void 0===n?void 0:n.image)||""},description:o.description},r)};var le=n(36437);class me extends a.Component{constructor(e){super(e),this.initialState={isPending:!1,step:"store_location",shippingZones:[]},this.activePlugins=e.activePlugins,this.state=this.initialState,this.completeStep=this.completeStep.bind(this),this.shippingSmartDefaultsEnabled=window.wcAdminFeatures&&window.wcAdminFeatures["shipping-smart-defaults"],this.storeLocationCompleted=!1,this.shippingPartners=e.shippingPartners,this.jetpackAuthRedirectUrl=(0,G.getAdminLink)("admin.php?page=wc-admin")}componentDidMount(){this.reset()}reset(){this.setState(this.initialState)}async fetchShippingZones(){const{countryCode:e,countryName:t}=this.props,n=[],o=await A()({path:"/wc/v3/shipping/zones"});let r=!1;if(await Promise.all(o.map((async t=>{if(0===t.id)return t.methods=await A()({path:`/wc/v3/shipping/zones/${t.id}/methods`}),t.name=(0,i.__)("Rest of the world","woocommerce"),t.toggleable=!0,void n.push(t);t.locations=await A()({path:`/wc/v3/shipping/zones/${t.id}/locations`}),t.locations.find((t=>e===t.code))&&(t.methods=await A()({path:`/wc/v3/shipping/zones/${t.id}/methods`}),n.push(t),r=!0)}))),!r){const o=await A()({method:"POST",path:"/wc/v3/shipping/zones",data:{name:t}});o.locations=await A()({method:"POST",path:`/wc/v3/shipping/zones/${o.id}/locations`,data:[{code:e,type:"country"}]}),n.push(o)}n.reverse(),this.setState({isPending:!1,shippingZones:n})}componentDidUpdate(e,t){const{countryCode:n,countryName:o,settings:r}=this.props,{woocommerce_store_address:a,woocommerce_default_country:i,woocommerce_store_postcode:s}=r,{step:c}=this.state;"rates"!==c||e.countryCode===n&&e.countryName===o&&"rates"===t.step||(this.setState({isPending:!0}),o&&this.fetchShippingZones());const l=Boolean(a&&i&&s);"store_location"===c&&l&&(this.shippingSmartDefaultsEnabled&&!this.storeLocationCompleted?(this.completeStep(),this.storeLocationCompleted=!0):this.shippingSmartDefaultsEnabled||this.completeStep())}completeStep(){const{createNotice:e,onComplete:t}=this.props,{step:n}=this.state,o=this.getSteps(),r=o.findIndex((e=>e.key===n)),a=o[r+1];a?this.setState({step:a.key}):(e("success",(0,i.__)("📦 Shipping is done! Don't worry, you can always change it later","woocommerce")),t())}getSteps(){const{countryCode:e,createNotice:t,invalidateResolutionForStoreSelector:n,isJetpackConnected:o,onComplete:r,optimisticallyCompleteTask:s,settings:c,task:m,updateAndPersistSettingsForGroup:u,shippingPartners:h}=this.props,C=h,y=C.map((e=>e.slug)),w=()=>{(0,l.recordEvent)("tasklist_shipping_label_printing",{install:!1,plugins_to_activate:y}),(0,d.getHistory)().push((0,d.getNewPath)({},"/",{})),r()},H=!o&&"US"===e;let _=[{key:"store_location",label:(0,i.__)("Set store location","woocommerce"),description:(0,i.__)("The address from which your business operates","woocommerce"),content:(0,a.createElement)(Q.Z,{createNotice:t,updateAndPersistSettingsForGroup:u,settings:c,onComplete:e=>{const t=(0,R.so)(e.countryState);(0,l.recordEvent)("tasklist_shipping_set_location",{country:t}),this.shippingSmartDefaultsEnabled&&this.completeStep()}}),visible:!0},{key:"rates",label:(0,i.__)("Set shipping costs","woocommerce"),description:(0,i.__)("Define how much customers pay to ship to different destinations","woocommerce"),content:(0,a.createElement)(ae,{buttonText:y.length||H?(0,i.__)("Continue","woocommerce"):(0,i.__)("Complete task","woocommerce"),shippingZones:this.state.shippingZones,onComplete:()=>{const{id:e}=m;s(e),n(),this.completeStep()},createNotice:t}),visible:"disabled"!==c.woocommerce_ship_to_countries},{key:"label_printing",label:(0,i.__)("Enable shipping label printing","woocommerce"),description:y.includes("woocommerce-shipstation-integration")?(0,U.Z)({mixedString:(0,i.__)("We recommend using ShipStation to save time at the post office by printing your shipping labels at home. Try ShipStation free for 30 days. {{link}}Learn more{{/link}}.","woocommerce"),components:{link:(0,a.createElement)(f.Link,{href:"https://woocommerce.com/products/shipstation-integration?utm_medium=product",target:"_blank",type:"external"})}}):(0,i.__)("With WooCommerce Shipping you can save time by printing your USPS and DHL Express shipping labels at home","woocommerce"),content:(0,a.createElement)(a.Fragment,null,!o&&y.includes("woocommerce-services")&&(0,a.createElement)(le.O,{buttonText:(0,i.__)("Install & enable","woocommerce")}),(0,a.createElement)(f.Plugins,{onComplete:(e,t)=>{(0,k.a)(t),(0,l.recordEvent)("tasklist_shipping_label_printing",{install:!0,plugins_to_activate:y}),this.completeStep()},onError:(e,t)=>(0,k.a)(t),onSkip:()=>{(0,l.recordEvent)("tasklist_shipping_label_printing",{install:!1,plugins_to_activate:y}),n(),(0,d.getHistory)().push((0,d.getNewPath)({},"/",{})),r()},pluginSlugs:y})),visible:y.length},{key:"connect",label:(0,i.__)("Connect your store","woocommerce"),description:(0,i.__)("Connect your store to WordPress.com to enable label printing","woocommerce"),content:(0,a.createElement)(Y.Z,{redirectUrl:this.jetpackAuthRedirectUrl,completeStep:this.completeStep,onConnect:()=>{(0,l.recordEvent)("tasklist_shipping_connect_store")}}),visible:H}];if(this.shippingSmartDefaultsEnabled){const e={rates:{label:(0,i.__)("Review your shipping options","woocommerce"),description:(0,i.__)("We recommend the following shipping options based on your location. You can manage your shipping options again at any time in WooCommerce Shipping settings.","woocommerce"),onClick:"rates"!==this.state.step?()=>{this.setState({step:"rates"})}:void 0,content:(0,a.createElement)(ae,{buttonText:(0,i.__)("Save shipping options","woocommerce"),shippingZones:this.state.shippingZones,onComplete:()=>{const{id:e}=m;s(e),n(),this.completeStep()},createNotice:t})},label_printing:{label:(0,i.__)("Enable shipping label printing and discounted rates","woocommerce"),description:1===C.length?(v=C[0].name,E=C[0].learn_more_link,(0,U.Z)({mixedString:(0,i.sprintf)((0,i.__)("Save time and money by printing your shipping labels right from your computer with %1$s. Try %2$s for free. {{link}}Learn more{{/link}}","woocommerce"),v,v),components:{link:(0,a.createElement)(f.Link,{href:E,target:"_blank",type:"external"})}})):(0,i.__)("Save time and money by printing your shipping labels right from your computer with one of these shipping solutions.","woocommerce"),content:(0,a.createElement)(a.Fragment,null,1===C.length?(0,a.createElement)(se,{shippingMethod:C[0]}):(0,a.createElement)("div",{className:"woocommerce-task-shipping-recommendation_plugins-install-container"},C.map((e=>{var t;const o=[null==e?void 0:e.slug,...null!==(t=null==e?void 0:e.dependencies)&&void 0!==t?t:[]].filter((e=>void 0!==e));return(0,a.createElement)(ce,{shippingMethod:e,key:e.name},(0,a.createElement)("div",{className:"woocommerce-task-shipping-recommendations_plugins-buttons"},(0,a.createElement)(f.Plugins,{onComplete:e=>{(0,k.a)(e),(0,l.recordEvent)("tasklist_shipping_label_printing",{install:!0,plugins_to_activate:o}),n(),this.completeStep()},onError:(e,t)=>(0,k.a)(t),installText:(0,i.__)("Install and enable","woocommerce"),learnMoreLink:e.learn_more_link,onLearnMore:()=>{(0,l.recordEvent)("tasklist_shipping_label_printing_learn_more",{plugin:e.slug})},pluginSlugs:o,installButtonVariant:"secondary"})))}))),1===C.length&&void 0===C[0].slug&&(0,a.createElement)("a",{href:C[0].learn_more_link,target:"_blank",rel:"noreferrer"},(0,a.createElement)(p.Button,{variant:"primary"},(0,i.__)("Download","woocommerce"))),1===C.length&&C[0].slug?(0,a.createElement)(a.Fragment,null,!o&&"woocommerce-services"===C[0].slug&&(0,a.createElement)(le.O,{buttonText:(0,i.__)("Install and enable","woocommerce")}),(0,a.createElement)(f.Plugins,{onComplete:(e,t)=>{(0,k.a)(t),(0,l.recordEvent)("tasklist_shipping_label_printing",{install:!0,plugins_to_activate:y}),n(),this.completeStep()},onError:(e,t)=>(0,k.a)(t),onSkip:w,pluginSlugs:y,installText:(0,i.__)("Install and enable","woocommerce")})):(0,a.createElement)(p.Button,{isTertiary:!0,onClick:w,className:g()("woocommerce-task-shipping-recommendations_skip-button",2===C.length?"dual":"")},(0,i.__)("No Thanks","woocommerce")))},store_location:{label:(0,i.__)("Set your store location","woocommerce"),description:(0,i.__)("Add your store location to help us calculate shipping rates and the best shipping options for you. You can manage your store location again at any time in WooCommerce Settings General.","woocommerce"),onClick:"store_location"!==this.state.step?()=>{this.setState({step:"store_location"})}:void 0,buttonText:(0,i.__)("Save store location","woocommerce")}};_=_.map((t=>(e.hasOwnProperty(t.key)&&(t={...t,...e[t.key]}),t.key!==this.state.step&&(t.description=""),t)))}var v,E;return(0,W.filter)(_,(e=>e.visible))}render(){const{isPending:e,step:t}=this.state,{isUpdateSettingsRequesting:n}=this.props,o=this.getSteps();return(0,a.createElement)("div",{className:"woocommerce-task-shipping"},(0,a.createElement)(p.Card,{className:"woocommerce-task-card"},(0,a.createElement)(p.CardBody,null,(0,a.createElement)(f.Stepper,{isPending:e||n,isVertical:!0,currentStep:t,steps:o}))))}}const ue=(0,F.compose)((0,s.withSelect)((e=>{const{getSettings:t,isUpdateSettingsRequesting:n}=e(c.SETTINGS_STORE_NAME),{getActivePlugins:o,isJetpackConnected:r}=e(c.PLUGINS_STORE_NAME),{getCountry:a}=e(c.COUNTRIES_STORE_NAME),{general:i={}}=t("general"),s=(0,R.so)(i.woocommerce_default_country),l=e(c.SHIPPING_METHODS_STORE_NAME).getShippingMethods(!0),m=s?a(s):null,u=m?m.name:null,d=o();return{countryCode:s,countryName:u,isUpdateSettingsRequesting:n("general"),settings:i,activePlugins:d,isJetpackConnected:r(),shippingPartners:l}})),(0,s.withDispatch)((e=>{const{createNotice:t}=e("core/notices"),{updateAndPersistSettingsForGroup:n}=e(c.SETTINGS_STORE_NAME),{invalidateResolutionForStoreSelector:o,optimisticallyCompleteTask:r}=e(c.ONBOARDING_STORE_NAME);return{createNotice:t,invalidateResolutionForStoreSelector:o,optimisticallyCompleteTask:r,updateAndPersistSettingsForGroup:n}})))(me);(0,m.registerPlugin)("wc-admin-onboarding-task-shipping",{scope:"woocommerce-tasks",render:()=>(0,a.createElement)(u.WooOnboardingTask,{id:"shipping"},(e=>{let{onComplete:t,task:n}=e;return(0,a.createElement)(ue,{onComplete:t,task:n})}))});const de=e=>{let{description:t,imageUrl:n,installAndActivate:o=(()=>{}),onManage:r=(()=>{}),isActive:s,isBusy:c,isBuiltByWC:m,isDisabled:u,isInstalled:d,manageUrl:h,name:C,slug:g}=e;return(0,a.createElement)("div",{className:"woocommerce-plugin-list__plugin"},n&&(0,a.createElement)("div",{className:"woocommerce-plugin-list__plugin-logo"},(0,a.createElement)("img",{src:n,alt:(0,i.sprintf)((0,i.__)("%s logo","woocommerce"),C)})),(0,a.createElement)("div",{className:"woocommerce-plugin-list__plugin-text"},(0,a.createElement)(y.Text,{variant:"subtitle.small",as:"h4"},C,m&&(0,a.createElement)(f.Pill,null,(0,i.__)("Built by WooCommerce","woocommerce"))),(0,a.createElement)(y.Text,{variant:"subtitle.small"},t)),(0,a.createElement)("div",{className:"woocommerce-plugin-list__plugin-action"},s&&h&&(0,a.createElement)(p.Button,{disabled:u,isBusy:c,isSecondary:!0,href:(0,G.getAdminLink)(h),onClick:()=>{(0,l.recordEvent)("marketing_manage",{extension_name:g}),r(g)}},(0,i.__)("Manage","woocommerce")),d&&!s&&(0,a.createElement)(p.Button,{disabled:u,isBusy:c,isSecondary:!0,onClick:()=>o(g)},(0,i.__)("Activate","woocommerce")),!d&&(0,a.createElement)(p.Button,{disabled:u,isBusy:c,isSecondary:!0,onClick:()=>o(g)},(0,i.__)("Get started","woocommerce"))))},pe=e=>{let{currentPlugin:t,installAndActivate:n=(()=>{}),onManage:o=(()=>{}),plugins:r=[],title:i}=e;return(0,a.createElement)("div",{className:"woocommerce-plugin-list"},i&&(0,a.createElement)("div",{className:"woocommerce-plugin-list__title"},(0,a.createElement)(y.Text,{variant:"sectionheading",as:"h3"},i)),r.map((e=>{const{description:r,imageUrl:i,isActive:s,isBuiltByWC:c,isInstalled:l,manageUrl:m,slug:u,name:d}=e;return(0,a.createElement)(de,{key:u,description:r,manageUrl:m,name:d,imageUrl:i,installAndActivate:n,onManage:o,isActive:s,isBuiltByWC:c,isBusy:t===u,isDisabled:!!t,isInstalled:l,slug:u})})))},he=["task-list/grow","task-list/reach"],Ce=e=>{let{onComplete:t}=e;const[n,o]=(0,a.useState)(null),{actionTask:r}=(0,s.useDispatch)(c.ONBOARDING_STORE_NAME),{installAndActivatePlugins:m}=(0,s.useDispatch)(c.PLUGINS_STORE_NAME),{activePlugins:u,freeExtensions:h,installedPlugins:C,isResolving:g}=(0,s.useSelect)((e=>{const{getActivePlugins:t,getInstalledPlugins:n}=e(c.PLUGINS_STORE_NAME),{getFreeExtensions:o,hasFinishedResolution:r}=e(c.ONBOARDING_STORE_NAME);return{activePlugins:t(),freeExtensions:o(),installedPlugins:n(),isResolving:!r("getFreeExtensions")}})),[f,H]=(0,a.useMemo)((()=>((e,t,n)=>{const o=[],r=[];return e.sort(((e,t)=>he.indexOf(e.key)-he.indexOf(t.key))).forEach((e=>{if(!he.includes(e.key))return;const a=[];if(e.plugins.forEach((e=>{const r=((e,t,n)=>{const{description:o,image_url:r,is_built_by_wc:a,key:i,manage_url:s,name:c}=e,l=(0,w.V7)(i);return{description:o,slug:l,imageUrl:r,isActive:t.includes(l),isInstalled:n.includes(l),isBuiltByWC:a,manageUrl:s,name:c}})(e,t,n);r.isInstalled?o.push(r):a.push(r)})),!a.length)return;const i={...e,plugins:a};r.push(i)})),[o,r]})(h,u,C)),[C,u,h]),_=e=>{o(e),r("marketing"),m([e]).then((n=>{(0,l.recordEvent)("tasklist_marketing_install",{selected_extension:e,installed_extensions:f.map((e=>e.slug)),section_order:H.map((e=>e.key)).join(", ")}),(0,k.a)(n),o(null),t({redirectPath:(0,d.getNewPath)({task:"marketing"})})})).catch((e=>{(0,k.a)(e),o(null)}))},v=()=>{r("marketing")};return g?(0,a.createElement)(p.Spinner,null):(0,a.createElement)("div",{className:"woocommerce-task-marketing"},!!f.length&&(0,a.createElement)(p.Card,{className:"woocommerce-task-card"},(0,a.createElement)(p.CardHeader,null,(0,a.createElement)(y.Text,{variant:"title.small",as:"h2",className:"woocommerce-task-card__title"},(0,i.__)("Installed marketing extensions","woocommerce"))),(0,a.createElement)(pe,{currentPlugin:n,installAndActivate:_,onManage:v,plugins:f})),!!H.length&&(0,a.createElement)(p.Card,{className:"woocommerce-task-card"},(0,a.createElement)(p.CardHeader,null,(0,a.createElement)(y.Text,{variant:"title.small",as:"h2",className:"woocommerce-task-card__title"},(0,i.__)("Recommended marketing extensions","woocommerce")),(0,a.createElement)(y.Text,{as:"span"},(0,i.__)('We recommend adding one of the following marketing tools for your store. The extension will be installed and activated for you when you click "Get started".',"woocommerce"))),H.map((e=>{const{key:t,title:o,plugins:r}=e;return(0,a.createElement)(pe,{currentPlugin:n,installAndActivate:_,onManage:v,key:t,plugins:r,title:o})}))))};(0,m.registerPlugin)("wc-admin-onboarding-task-marketing",{scope:"woocommerce-tasks",render:()=>(0,a.createElement)(u.WooOnboardingTask,{id:"marketing"},(e=>{let{onComplete:t}=e;return(0,a.createElement)(Ce,{onComplete:t})}))});var ge=n(99196);const fe=()=>{const{onClick:e}={onClick:()=>{window.location=(0,G.getAdminLink)("theme-install.php?browse=block-themes")}};return(0,a.createElement)(u.WooOnboardingTaskListItem,{id:"appearance"},(t=>{let{defaultTaskItem:n}=t;return(0,a.createElement)(n,{onClick:e})}))};(0,m.registerPlugin)("wc-admin-onboarding-task-appearance",{scope:"woocommerce-tasks",render:()=>(0,a.createElement)(fe,null)});var ye=n(33414);const we=()=>(0,a.createElement)("svg",{width:"13",height:"10",viewBox:"0 0 13 10",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,a.createElement)("path",{d:"M12.1883 1.1814L4.7091 8.66062L1.48438 5.4359",stroke:"#4AB866",strokeWidth:"1.5"})),He=e=>{let{name:t,logo:n,description:o,benefits:r,terms:i,actionText:s,onClick:c,isBusy:l}=e;return(0,a.createElement)("div",{className:"woocommerce-tax-partner-card"},(0,a.createElement)("div",{className:"woocommerce-tax-partner-card__logo"},(0,a.createElement)("img",{src:n,alt:t})),(0,a.createElement)("div",{className:"woocommerce-tax-partner-card__description"},o),(0,a.createElement)("ul",{className:"woocommerce-tax-partner-card__benefits"},r.map(((e,t)=>(0,a.createElement)("li",{className:"woocommerce-tax-partner-card__benefit",key:t},(0,a.createElement)("span",{className:"woocommerce-tax-partner-card__benefit-bullet"},(0,a.createElement)(we,null)),(0,a.createElement)("span",{className:"woocommerce-tax-partner-card__benefit-text"},e))))),(0,a.createElement)("div",{className:"woocommerce-tax-partner-card__action"},(0,a.createElement)("div",{className:"woocommerce-tax-partner-card__terms"},i),(0,a.createElement)(p.Button,{isSecondary:!0,onClick:c,isBusy:l,disabled:l},s)))};var _e=n(2732);const ve=()=>(0,a.createElement)(He,{name:(0,i.__)("WooCommerce Tax","woocommerce"),logo:_e,description:(0,i.__)("Best for new stores","woocommerce"),benefits:[(0,i.__)("Real-time sales tax calculation","woocommerce"),(0,U.Z)({mixedString:(0,i.__)("{{strong}}Single{{/strong}} economic nexus compliance","woocommerce"),components:{strong:(0,a.createElement)("strong",null)}}),(0,i.__)("100% free","woocommerce")],terms:(0,a.createElement)(le.O,{buttonText:(0,i.__)("Continue setup","woocommerce")}),actionText:(0,i.__)("Continue setup","woocommerce"),onClick:()=>{(0,l.recordEvent)("tasklist_tax_select_option",{selected_option:"woocommerce-tax"}),(0,d.updateQueryString)({partner:"woocommerce-tax"})}}),Ee=e=>{let{isPending:t,onManual:n}=e;const{generalSettings:o}=(0,s.useSelect)((e=>{var t;const{getSettings:n}=e(c.SETTINGS_STORE_NAME);return{generalSettings:null===(t=n("general"))||void 0===t?void 0:t.general}}));return(0,a.createElement)(a.Fragment,null,(0,a.createElement)(p.Button,{isPrimary:!0,disabled:t,isBusy:t,onClick:()=>{(0,l.recordEvent)("tasklist_tax_config_rates",{}),n()}},(0,i.__)("Configure","woocommerce")),(0,a.createElement)("p",null,"yes"!==(null==o?void 0:o.woocommerce_calc_taxes)&&(0,U.Z)({mixedString:(0,i.__)('By clicking "Configure" you\'re enabling tax rates and calculations. More info {{link}}here{{/link}}.',"woocommerce"),components:{link:(0,a.createElement)(f.Link,{href:"https://woocommerce.com/document/setting-up-taxes-in-woocommerce/?utm_medium=product#section-1",target:"_blank",type:"external"},(0,a.createElement)(a.Fragment,null))}})))},Le=e=>{const t=(0,Q.z)(e);return e.addressLine1.trim().length||(t.addressLine1=(0,i.__)("Please enter an address","woocommerce")),e.postCode.trim().length||(t.postCode=(0,i.__)("Please enter a post code","woocommerce")),e.city.trim().length||(t.city=(0,i.__)("Please enter a city","woocommerce")),t},be=e=>{let{nextStep:t}=e;const{createNotice:n}=(0,s.useDispatch)("core/notices"),{updateAndPersistSettingsForGroup:o}=(0,s.useDispatch)(c.SETTINGS_STORE_NAME),{generalSettings:r,isResolving:i,isUpdating:m}=(0,s.useSelect)((e=>{var t;const{getSettings:n,hasFinishedResolution:o,isUpdateSettingsRequesting:r}=e(c.SETTINGS_STORE_NAME);return{generalSettings:null===(t=n("general"))||void 0===t?void 0:t.general,isResolving:!o("getSettings",["general"]),isUpdating:r("general")}}));return(0,a.useEffect)((()=>{i||m||!(0,ye.AO)(r||{})||t()}),[i,r,m]),i?null:(0,a.createElement)(Q.Z,{validate:Le,onComplete:e=>{const t=(0,R.so)(e.countryState);(0,l.recordEvent)("tasklist_tax_set_location",{country:t})},isSettingsRequesting:!1,settings:r,updateAndPersistSettingsForGroup:o,createNotice:n})},ke=e=>{let{isPending:t,onDisable:n,onAutomate:o,onManual:r}=e;const[s,c]=(0,a.useState)(0),l={isPending:t,onAutomate:o,onDisable:n,nextStep:()=>{c(s+1)},onManual:r},m=[{key:"store_location",label:(0,i.__)("Set store location","woocommerce"),description:(0,i.__)("The address from which your business operates","woocommerce"),content:(0,a.createElement)(be,l)},{key:"manual_configuration",label:(0,i.__)("Configure tax rates","woocommerce"),description:(0,i.__)("Head over to the tax rate settings screen to configure your tax rates","woocommerce"),content:(0,a.createElement)(Ee,l)}],u=m[s];return(0,a.createElement)(f.Stepper,{isVertical:!0,currentStep:u.key,steps:m})},Se=e=>{let{children:t,isPending:n,onManual:o,onDisable:r}=e;const s=g()("woocommerce-task-card","woocommerce-tax-partners",`woocommerce-tax-partners__partners-count-${a.Children.count(t)}`);return(0,a.createElement)(p.Card,{className:s},(0,a.createElement)(p.CardHeader,null,(0,i.__)("Choose a tax partner","woocommerce")),(0,a.createElement)(p.CardBody,null,(0,a.createElement)("div",{className:"woocommerce-tax-partners__partners"},t),(0,a.createElement)("ul",{className:"woocommerce-tax-partners__other-actions"},(0,a.createElement)("li",null,(0,a.createElement)(p.Button,{isTertiary:!0,disabled:n,isBusy:n,onClick:()=>{o()}},(0,i.__)("Set up taxes manually","woocommerce"))),(0,a.createElement)("li",null,(0,a.createElement)(p.Button,{isTertiary:!0,disabled:n,isBusy:n,onClick:()=>{r()}},(0,i.__)("I don't charge sales tax","woocommerce"))))))},Me=e=>{let{isPending:t,onAutomate:n,onManual:o,onDisable:r}=e;return(0,a.createElement)("div",{className:"woocommerce-task-tax__success"},(0,a.createElement)("span",{className:"woocommerce-task-tax__success-icon",role:"img","aria-labelledby":"woocommerce-task-tax__success-message"},"🎊"),(0,a.createElement)(f.H,{id:"woocommerce-task-tax__success-message"},(0,i.__)("Good news!","woocommerce")),(0,a.createElement)("p",null,(0,U.Z)({mixedString:(0,i.__)("{{strong}}WooCommerce Tax{{/strong}} can automate your sales tax calculations for you.","woocommerce"),components:{strong:(0,a.createElement)("strong",null)}})),(0,a.createElement)(p.Button,{isPrimary:!0,isBusy:t,onClick:()=>{(0,l.recordEvent)("tasklist_tax_setup_automated_proceed",{setup_automatically:!0}),n()}},(0,i.__)("Yes please","woocommerce")),(0,a.createElement)(p.Button,{disabled:t,isTertiary:!0,onClick:()=>{(0,l.recordEvent)("tasklist_tax_setup_automated_proceed",{setup_automatically:!1}),o()}},(0,i.__)("No thanks, I'll set up manually","woocommerce")),(0,a.createElement)(p.Button,{disabled:t,isTertiary:!0,onClick:r},(0,i.__)("I don't charge sales tax","woocommerce")))},Ne=e=>{let{onDisable:t,onManual:n}=e;return(0,a.createElement)(Y.Z,{onConnect:()=>{(0,l.recordEvent)("tasklist_tax_connect_store",{connect:!0,no_tax:!1})},onSkip:()=>{(0,l.queueRecordEvent)("tasklist_tax_connect_store",{connect:!1,no_tax:!1}),n()},skipText:(0,i.__)("Set up tax rates manually","woocommerce"),onAbort:()=>t(),abortText:(0,i.__)("My business doesn't charge sales tax","woocommerce")})},xe=e=>"object"==typeof e&&null!==e,Te=e=>{let{nextStep:t,onDisable:n,onManual:o,pluginsToActivate:r}=e;const{updateOptions:m}=(0,s.useDispatch)(c.OPTIONS_STORE_NAME),{isResolving:u,tosAccepted:d}=(0,s.useSelect)((e=>{const{getOption:t,hasFinishedResolution:n}=e(c.OPTIONS_STORE_NAME),o=t("wc_connect_options");return{isResolving:!n("getOption",["woocommerce_setup_jetpack_opted_in"])||!n("getOption",["wc_connect_options"]),tosAccepted:xe(o)&&(null==o?void 0:o.tos_accepted)||"1"===t("woocommerce_setup_jetpack_opted_in")}}));return(0,a.useEffect)((()=>{d&&!r.length&&t()}),[u]),u?null:(0,a.createElement)(a.Fragment,null,!d&&(0,a.createElement)(le.O,{buttonText:(0,i.__)("Install & enable","woocommerce")}),(0,a.createElement)(f.Plugins,{onComplete:(e,n)=>{(0,k.a)(n),(0,l.recordEvent)("tasklist_tax_install_extensions",{install_extensions:!0}),m({woocommerce_setup_jetpack_opted_in:!0}),t()},onError:(e,t)=>(0,k.a)(t),onSkip:()=>{(0,l.queueRecordEvent)("tasklist_tax_install_extensions",{install_extensions:!1}),o()},skipText:(0,i.__)("Set up manually","woocommerce"),onAbort:()=>n(),abortText:(0,i.__)("I don't charge sales tax","woocommerce"),pluginSlugs:r}))},Ae=e=>{let{isPending:t,onDisable:n,onAutomate:o,onManual:r}=e;const[l,m]=(0,a.useState)([]),{activePlugins:u,isResolving:d}=(0,s.useSelect)((e=>{var t;const{getSettings:n}=e(c.SETTINGS_STORE_NAME),{hasFinishedResolution:o}=e(c.OPTIONS_STORE_NAME),{getActivePlugins:r}=e(c.PLUGINS_STORE_NAME);return{activePlugins:r(),generalSettings:null===(t=n("general"))||void 0===t?void 0:t.general,isResolving:!o("getOption",["woocommerce_setup_jetpack_opted_in"])||!o("getOption",["wc_connect_options"])}})),[p,h]=(0,a.useState)(0);(0,a.useEffect)((()=>{const e=(0,W.difference)(ye.c7,u);e.length<=l.length||m(e)}),[u]);const C={isPending:t,isResolving:d,onAutomate:o,onDisable:n,nextStep:()=>{h(p+1)},onManual:r,pluginsToActivate:l},g=[{key:"store_location",label:(0,i.__)("Set store location","woocommerce"),description:(0,i.__)("The address from which your business operates","woocommerce"),content:(0,a.createElement)(be,C)},{key:"plugins",label:(0,i.__)("Install WooCommerce Tax","woocommerce"),description:(0,i.__)("WooCommerce Tax allows you to automate sales tax calculations","woocommerce"),content:(0,a.createElement)(Te,C)},{key:"connect",label:(0,i.__)("Connect your store","woocommerce"),description:(0,i.__)("Connect your store to WordPress.com to enable automated sales tax calculations","woocommerce"),content:(0,a.createElement)(Ne,C)}],y=g[p];return(0,a.createElement)(f.Stepper,{isPending:d,isVertical:!0,currentStep:y.key,steps:g})},Ie=e=>{let{isPending:t,onAutomate:n,onManual:o,onDisable:r}=e;const{generalSettings:i,isJetpackConnected:l,isResolving:m,pluginsToActivate:u}=(0,s.useSelect)((e=>{const{getSettings:t}=e(c.SETTINGS_STORE_NAME),{getActivePlugins:n,hasFinishedResolution:o}=e(c.PLUGINS_STORE_NAME),r=n();return{generalSettings:t("general").general,isJetpackConnected:e(c.PLUGINS_STORE_NAME).isJetpackConnected(),isResolving:!o("isJetpackConnected")||!e(c.SETTINGS_STORE_NAME).hasFinishedResolution("getSettings",["general"])||!o("getActivePlugins"),pluginsToActivate:(0,W.difference)(ye.c7,r)}}));if(m)return(0,a.createElement)(f.Spinner,null);const d={isPending:t,onAutomate:n,onManual:o,onDisable:r};return(0,ye.AO)(i||{})&&!u.length&&l?(0,a.createElement)(Me,d):(0,a.createElement)(Ae,d)},Oe=e=>{let{children:t}=e;return(0,a.createElement)(p.Card,{className:"woocommerce-task-card"},(0,a.createElement)(p.CardBody,null,t))},Pe=e=>{let{onComplete:t,query:n,task:o}=e;const[r,m]=(0,a.useState)(!1),{updateOptions:u}=(0,s.useDispatch)(c.OPTIONS_STORE_NAME),{createNotice:d}=(0,s.useDispatch)("core/notices"),{updateAndPersistSettingsForGroup:h}=(0,s.useDispatch)(c.SETTINGS_STORE_NAME),{generalSettings:C,isResolving:g,taxSettings:f}=(0,s.useSelect)((e=>{const{getSettings:t,hasFinishedResolution:n}=e(c.SETTINGS_STORE_NAME);return{generalSettings:t("general").general,isResolving:!n("getSettings",["general"]),taxSettings:t("tax").tax||{}}})),y=(0,a.useCallback)((async()=>{m(!0),"yes"!==(null==C?void 0:C.woocommerce_calc_taxes)?(h("tax",{tax:{...f,wc_connect_taxes_enabled:"no"}}),h("general",{general:{...C,woocommerce_calc_taxes:"yes"}}).then((()=>(0,ye._9)())).catch((e=>{m(!1),(0,k.a)(e)}))):(0,ye._9)()}),[]),w=(0,a.useCallback)((async()=>{m(!0);try{await Promise.all([h("tax",{tax:{...f,wc_connect_taxes_enabled:"yes"}}),h("general",{general:{...C,woocommerce_calc_taxes:"yes"}})])}catch(e){return m(!1),void d("error",(0,i.__)("There was a problem setting up automated taxes. Please try again.","woocommerce"))}d("success",(0,i.__)("You're awesome! One less item on your to-do list ✅","woocommerce")),t()}),[]),H=(0,a.useCallback)((()=>{m(!0),(0,l.queueRecordEvent)("tasklist_tax_connect_store",{connect:!1,no_tax:!0}),u({woocommerce_no_sales_tax:!0,woocommerce_calc_taxes:"no"}).then((()=>{window.location.href=(0,G.getAdminLink)("admin.php?page=wc-admin")}))}),[]),_=(()=>{const e=(0,R.so)(null==C?void 0:C.woocommerce_default_country)||"",{additionalData:{woocommerceTaxCountries:t=[],taxJarActivated:n}={}}=o;return[{id:"woocommerce-tax",card:ve,component:Ie,isVisible:!n&&t.includes(e)}].filter((e=>e.isVisible))})();(0,a.useEffect)((()=>{const{auto:e}=n;"true"!==e?n.partner||(0,l.recordEvent)("tasklist_tax_view_options",{options:_.map((e=>e.id))}):w()}),[]);const v={isPending:r,onAutomate:w,onManual:y,onDisable:H,task:o};if(g)return(0,a.createElement)(p.Spinner,null);const E=n.partner&&_.find((e=>e.id===n.partner))||null;return _.length?E?(0,a.createElement)(Oe,null,E.component&&(0,a.createElement)(E.component,v)):(0,a.createElement)(Se,v,_.map((e=>e.card&&(0,a.createElement)(e.card,{key:e.id,...v})))):(0,a.createElement)(Oe,null,(0,a.createElement)(ke,v))};(0,m.registerPlugin)("wc-admin-onboarding-task-tax",{scope:"woocommerce-tasks",render:()=>(0,a.createElement)(u.WooOnboardingTask,{id:"tax"},(e=>{let{onComplete:t,query:n,task:o}=e;return(0,a.createElement)(Pe,{onComplete:t,query:n,task:o})}))}),(0,m.registerPlugin)("woocommerce-admin-task-wcpay",{scope:"woocommerce-tasks",render:()=>{const{installAndActivatePlugins:e}=(0,s.useDispatch)(c.PLUGINS_STORE_NAME),{createNotice:t}=(0,s.useDispatch)("core/notices");return(0,a.createElement)(u.WooOnboardingTaskListItem,{id:"woocommerce-payments"},(n=>{let{defaultTaskItem:o}=n;return(0,a.createElement)(o,{onClick:()=>new Promise(((n,o)=>O(o,t,e)))})}))}});const Re=()=>{const{installAndActivatePlugins:e}=(0,s.useDispatch)(c.PLUGINS_STORE_NAME),{createNotice:t}=(0,s.useDispatch)("core/notices");return(0,ge.useEffect)((()=>{new Promise(((n,o)=>O(o,t,e)))}),[t,e]),(0,a.createElement)("div",{style:{height:"70vh",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center"}},(0,a.createElement)(f.Spinner,null),(0,a.createElement)("div",{style:{marginTop:"1rem"}},"Preparing payment settings..."))};(0,m.registerPlugin)("woocommerce-admin-task-wcpay-page",{scope:"woocommerce-tasks",render:()=>(0,a.createElement)(u.WooOnboardingTask,{id:"woocommerce-payments"},(0,a.createElement)(Re,null))});const Ve=()=>{const[e,t]=(0,a.useState)([]),{isResolving:n,taskLists:o}=(0,s.useSelect)((e=>({isResolving:e(c.ONBOARDING_STORE_NAME).isResolving("getTaskLists"),taskLists:e(c.ONBOARDING_STORE_NAME).getTaskLists()})));return(0,a.useEffect)((()=>{if(o&&o.length>0){const e=[];for(const t of o)for(const n of t.tasks)n.isDeprecated&&n.container&&e.push(n);t(e)}}),[o]),n?null:(0,a.createElement)(a.Fragment,null,e.map((e=>(0,a.createElement)(u.WooOnboardingTask,{id:e.id,key:e.id},(()=>e.container)))))};(0,m.registerPlugin)("wc-admin-deprecated-task-container",{scope:"woocommerce-tasks",render:()=>(0,a.createElement)(Ve,null)}),(0,m.registerPlugin)("woocommerce-admin-task-customize-store",{scope:"woocommerce-tasks",render:()=>(0,a.createElement)(u.WooOnboardingTaskListItem,{id:"customize-store"},(e=>{let{defaultTaskItem:t}=e;return(0,a.createElement)(t,{onClick:()=>{window.location.href=(0,G.getAdminLink)("admin.php?page=wc-admin&path=%2Fcustomize-store")}})}))}),(async()=>{var e,t,o,a;(null===(e=window)||void 0===e||null===(t=e.wcAdminFeatures)||void 0===t?void 0:t["import-products-task"])&&(null==r||null===(o=r.profile)||void 0===o?void 0:o.selling_venues)&&"no"!==(null==r||null===(a=r.profile)||void 0===a?void 0:a.selling_venues)?Promise.all([n.e(6412),n.e(4891)]).then(n.bind(n,14891)):Promise.all([n.e(6412),n.e(5792)]).then(n.bind(n,65792))})(),window.wcAdminFeatures&&window.wcAdminFeatures["shipping-smart-defaults"]&&n.e(8994).then(n.bind(n,8994));var je=n(47642),De=n(92342),Ze=n(46530),Be=n(26016);var ze=n(22629),Fe=n(25753);class We extends a.Component{constructor(e){super(e),this.state={purchaseNowButtonBusy:!1,purchaseLaterButtonBusy:!1}}onClickPurchaseNow(){const{productIds:e,onClickPurchaseNow:t}=this.props;if(this.setState({purchaseNowButtonBusy:!0}),!e.length)return;(0,l.recordEvent)("tasklist_modal_proceed_checkout",{product_ids:e,purchase_install:!0});const n=(0,Fe.C)("https://woocommerce.com/cart?utm_medium=product",{"wccom-replace-with":e.join(",")});t?t(n):window.location=n}onClickPurchaseLater(){const{productIds:e}=this.props;(0,l.recordEvent)("tasklist_modal_proceed_checkout",{product_ids:e,purchase_install:!1}),this.setState({purchaseLaterButtonBusy:!0}),this.props.onClickPurchaseLater()}onClose(){const{onClose:e,productIds:t}=this.props;(0,l.recordEvent)("tasklist_modal_proceed_checkout",{product_ids:t,purchase_install:!1}),e()}renderProducts(){const{productIds:e,productTypes:t}=this.props,{themes:n=[]}=(0,o.O3)("onboarding",{}),r=[];return e.forEach((e=>{const o=(0,W.find)(t,(t=>t.product===e));o&&r.push({title:o.label,content:o.description});const s=(0,W.find)(n,(t=>t.id===e));s&&r.push({title:(0,i.sprintf)((0,i.__)("%s — %s per year","woocommerce"),s.title,(0,ze.decodeEntities)(s.price)),content:(0,a.createElement)("span",{dangerouslySetInnerHTML:(0,S.ZP)(s.excerpt)})})})),(0,a.createElement)(f.List,{items:r})}render(){const{purchaseNowButtonBusy:e,purchaseLaterButtonBusy:t}=this.state;return(0,a.createElement)(p.Modal,{title:(0,i.__)("Would you like to add the following paid features to your store now?","woocommerce"),onRequestClose:()=>this.onClose(),className:"woocommerce-cart-modal"},this.renderProducts(),(0,a.createElement)("p",{className:"woocommerce-cart-modal__help-text"},(0,i.__)("You won't have access to this functionality until the extensions have been purchased and installed.","woocommerce")),(0,a.createElement)("div",{className:"woocommerce-cart-modal__actions"},(0,a.createElement)(p.Button,{isLink:!0,isBusy:t,onClick:()=>this.onClickPurchaseLater()},(0,i.__)("I'll do it later","woocommerce")),(0,a.createElement)(p.Button,{isPrimary:!0,isBusy:e,onClick:()=>this.onClickPurchaseNow()},(0,i.__)("Buy now","woocommerce"))))}}const Ue=(0,F.compose)((0,s.withSelect)((e=>{const{getInstalledPlugins:t}=e(c.PLUGINS_STORE_NAME),{getProductTypes:n,getProfileItems:o}=e(c.ONBOARDING_STORE_NAME),r=o(),a=t(),i=n();return{profileItems:r,productIds:(0,R.jt)(i,r,!1,a),productTypes:i}})))(We),Ge={store_details:e=>{let{task:t,goToTask:n}=e;return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Store location illustration","woocommerce"),src:o.vm+"images/task_list/store-details-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("First, tell us about your store","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("Get your store up and running in no time. Add your store's address to set up shipping, tax and payments faster.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:n},(0,i.__)("Add details","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Be,alt:"Timer"})," ",(0,a.createElement)("span",null,(0,i.__)("2 minutes","woocommerce")))))},"customize-store":e=>{let{task:t}=e;return(0,a.createElement)("div",{className:`woocommerce-task-header__contents-container woocommerce-task-header__${t.id}`},(0,a.createElement)("img",{alt:(0,i.__)("Customize your store illustration","woocommerce"),src:o.vm+"images/task_list/customize-store-illustration.svg",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("Start customizing your store","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("Use our built-in AI tools to design your store and populate it with content, or select a pre-built theme and customize it to fit your brand.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:()=>{window.location.href=(0,G.getAdminLink)("admin.php?page=wc-admin&path=%2Fcustomize-store")}},(0,i.__)("Start customizing","woocommerce"))))},tax:e=>{let{task:t,goToTask:n}=e;return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Tax illustration","woocommerce"),src:o.vm+"images/task_list/tax-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("Add your tax rates","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("Set up tax rates manually or use WooCommerce Tax to automate your sales tax calculations for you.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:n},(0,i.__)("Yes, please","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Be,alt:"Timer"})," ",(0,a.createElement)("span",null,t.time))))},shipping:e=>{let{task:t,goToTask:n}=e;return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Shipping illustration","woocommerce"),src:o.vm+"images/task_list/shipping-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("Set up shipping for your store","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("Choose where and how you will ship your products, select shipping methods, and add fixed or calculated rates.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:n},(0,i.__)("Add shipping zones","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Be,alt:"Timer"})," ",(0,a.createElement)("span",null,t.time))))},marketing:e=>{let{task:t,goToTask:n}=e;return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Marketing illustration","woocommerce"),src:o.vm+"images/task_list/sales-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("Get more sales","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("Give your business a boost by enabling social channels such as newsletter, Facebook, Google, in-person selling, and more.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:n},(0,i.__)("Add sales channels","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Be,alt:"Timer"})," ",(0,a.createElement)("span",null,t.time))))},appearance:e=>{let{task:t,goToTask:n}=e;return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Appearance illustration","woocommerce"),src:o.vm+"images/task_list/expand-section-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("Make your store stand out","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("Add your logo, create a homepage, and start designing your store.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:n},t.isComplete?(0,i.__)("Modify choices","woocommerce"):(0,i.__)("Personalize","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Be,alt:"Timer"})," ",(0,a.createElement)("span",null,t.time))))},payments:e=>{let{task:t,goToTask:n}=e;return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Payment illustration","woocommerce"),src:o.vm+"images/task_list/payment-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("Add a way to get paid","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("Choose from fast & secure online and offline payment methods to make it easy for your customers to pay in your store.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:n},(0,i.__)("View options","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Be,alt:"Timer"})," ",(0,a.createElement)("span",null,t.time))))},products:e=>{let{task:t,goToTask:n}=e;return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Products illustration","woocommerce"),src:o.vm+"images/task_list/sales-section-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("Add products to sell","woocommerce")),(0,a.createElement)("p",null,(0,i.__)("Build your catalog by adding what you want to sell. You can add products manually or import them from a different store.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:n},(0,i.__)("Add products","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Be,alt:"Timer"})," ",(0,a.createElement)("span",null,(0,i.__)("2 minutes","woocommerce")))))},purchase:e=>{let{task:t}=e;const[n,r]=(0,a.useState)(!1),s=(0,a.useCallback)((()=>{n||(0,l.recordEvent)("tasklist_purchase_extensions"),r(!n)}),[n]);return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Purchase illustration","woocommerce"),src:o.vm+"images/task_list/purchase-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,t.title),(0,a.createElement)("p",null,(0,i.__)("Good choice! You chose to add amazing new features to your store. Continue to checkout to complete your purchase.","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:t.isComplete,isPrimary:!t.isComplete,onClick:s},(0,i.__)("Continue","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Be,alt:"Timer"})," ",(0,a.createElement)("span",null,t.time))),n&&(0,a.createElement)(Ue,{onClose:()=>s(),onClickPurchaseLater:()=>s()}))},"woocommerce-payments":e=>{var t;let{task:n,trackClick:r}=e;const l=(0,o.O3)("wcpayWelcomePageIncentive")||(null===(t=window.wcpaySettings)||void 0===t?void 0:t.connectIncentive),{createNotice:m}=(0,s.useDispatch)("core/notices"),[u,d]=(0,a.useState)(!1);return(0,a.createElement)("div",{className:"woocommerce-task-header__contents-container"},(0,a.createElement)("img",{alt:(0,i.__)("Payment illustration","woocommerce"),src:o.vm+"images/task_list/payment-illustration.png",className:"svg-background"}),(0,a.createElement)("div",{className:"woocommerce-task-header__contents"},(0,a.createElement)("h1",null,(0,i.__)("It's time to get paid","woocommerce")),null!=l&&l.task_header_content?(0,a.createElement)("p",{dangerouslySetInnerHTML:(0,S.ZP)(l.task_header_content)}):(0,a.createElement)("p",null,(0,i.__)("You're only one step away from getting paid. Verify your business details to start managing transactions with WooPayments.","woocommerce")),(0,a.createElement)("p",null,(0,U.Z)({mixedString:(0,i.__)('By clicking "Verify Details", you agree to the {{link}}Terms of Service{{/link}}',"woocommerce"),components:{link:(0,a.createElement)(f.Link,{href:"https://wordpress.com/tos/",target:"_blank",type:"external",rel:"noreferrer"})}})),(0,a.createElement)(p.Button,{isSecondary:n.isComplete,isPrimary:!n.isComplete,isBusy:u,disabled:u,onClick:()=>{r(),((e,t)=>{const n=(0,i.__)("There was an error connecting to WooPayments. Please try again or connect later in store settings.","woocommerce");t(!0),A()({path:c.WC_ADMIN_NAMESPACE+"/plugins/connect-wcpay",method:"POST"}).then((e=>{window.location=e.connectUrl})).catch((()=>{e("error",n),t(!1)}))})(m,d)}},(0,i.__)("Verify details","woocommerce")),(0,a.createElement)("p",{className:"woocommerce-task-header__timer"},(0,a.createElement)("img",{src:Be,alt:"Timer"})," ",(0,a.createElement)("span",null,(0,i.__)("2 minutes","woocommerce")))))}},Ye=e=>{let{showDismissModal:t,setShowDismissModal:n,hideTasks:o}=e;const r=(0,i.__)("Hide store setup tasks","woocommerce"),s=(0,i.__)("Are you sure? These tasks are required for all stores.","woocommerce"),c=(0,i.__)("Cancel","woocommerce"),l=(0,i.__)("Yes, hide store setup tasks","woocommerce");return(0,a.createElement)(a.Fragment,null,t&&(0,a.createElement)(p.Modal,{title:r,className:"woocommerce-task-dismiss-modal",onRequestClose:()=>n(!1)},(0,a.createElement)("div",{className:"woocommerce-task-dismiss-modal__wrapper"},(0,a.createElement)("div",{className:"woocommerce-usage-modal__message"},s),(0,a.createElement)("div",{className:"woocommerce-usage-modal__actions"},(0,a.createElement)(p.Button,{onClick:()=>n(!1)},c),(0,a.createElement)(p.Button,{isPrimary:!0,onClick:()=>{o("remove_card"),n(!1)}},l)))))};var Qe=n(21079);const qe=e=>{let{hideTasks:t,keepTasks:n}=e;return(0,a.createElement)(a.Fragment,null,(0,a.createElement)("div",{className:g()("woocommerce-task-dashboard__container setup-task-list")},(0,a.createElement)(p.Card,{size:"large",className:"woocommerce-task-card woocommerce-homescreen-card completed"},(0,a.createElement)(p.CardHeader,{size:"medium"},(0,a.createElement)("div",{className:"wooocommerce-task-card__header"},(0,a.createElement)("img",{src:Qe,alt:"Completed"}),(0,a.createElement)("h2",null,(0,i.__)("You've completed store setup","woocommerce")),(0,a.createElement)(p.Button,{isSecondary:!0,onClick:n},(0,i.__)("Keep list","woocommerce")),(0,a.createElement)(p.Button,{isPrimary:!0,onClick:t},(0,i.__)("Hide this list","woocommerce")))))))},Je="woocommerce_tasklist_experimental_progress_header_item",Ke=e=>{let{children:t,order:n=1}=e;return(0,a.createElement)(p.Fill,{name:Je},(e=>(0,f.createOrderedChildren)(t,n,e)))};Ke.Slot=e=>{let{fillProps:t}=e;return(0,a.createElement)(p.Slot,{name:Je,fillProps:t},f.sortFillsByOrder)};const Xe=e=>{let{id:t,hideTaskListText:n}=e;const{hideTaskList:o}=(0,s.useDispatch)(c.ONBOARDING_STORE_NAME);return(0,a.createElement)("div",{className:"woocommerce-card__menu woocommerce-card__header-item"},(0,a.createElement)(f.EllipsisMenu,{label:(0,i.__)("Task List Options","woocommerce"),renderContent:()=>(0,a.createElement)("div",{className:"woocommerce-task-card__section-controls"},(0,a.createElement)(p.Button,{onClick:()=>o(t)},n||(0,i.__)("Hide this","woocommerce")))}))},$e=e=>{let{taskListId:t}=e;const{loading:n,tasksCount:o,completedCount:r}=(0,s.useSelect)((e=>{const n=e(c.ONBOARDING_STORE_NAME).getTaskList(t),o=e(c.ONBOARDING_STORE_NAME).hasFinishedResolution("getTaskList",[t]),r=(0,c.getVisibleTasks)((null==n?void 0:n.tasks)||[]);return{loading:!o,tasksCount:null==r?void 0:r.length,completedCount:null==r?void 0:r.filter((e=>e.isComplete)).length}}));return n?null:(0,a.createElement)("div",{className:"woocommerce-task-progress-header"},(0,a.createElement)(Xe,{id:t,hideTaskListText:(0,i.__)("Hide setup list","woocommerce")}),(0,a.createElement)("div",{className:"woocommerce-task-progress-header__contents"},r!==o?(0,a.createElement)(a.Fragment,null,(0,a.createElement)("p",null,(0,i.sprintf)((0,i.__)("Follow these steps to start selling quickly. %1$d out of %2$d complete.","woocommerce"),r,o)),(0,a.createElement)("progress",{className:"woocommerce-task-progress-header__progress-bar",max:o,value:r||.25})):null))},et=e=>{var t;let{taskListId:n}=e;const o=(0,y.useSlot)(Je);return Boolean(null==o||null===(t=o.fills)||void 0===t?void 0:t.length)?(0,a.createElement)(Ke.Slot,{fillProps:{taskListId:n}}):(0,a.createElement)($e,{taskListId:n})},tt=e=>{var t;let{task:n,activeTaskId:o,taskIndex:r,goToTask:l,trackClick:m}=e;const{createNotice:d}=(0,s.useDispatch)("core/notices"),{dismissTask:p,undoDismissTask:h}=(0,s.useDispatch)(c.ONBOARDING_STORE_NAME),{id:C,title:f,badge:w,content:H,time:_,actionLabel:v,isComplete:E,additionalInfo:L,isDismissable:b}=n,k=(0,y.useSlot)(`woocommerce_onboarding_task_list_item_${C}`),S=Boolean(null==k||null===(t=k.fills)||void 0===t?void 0:t.length),M=(0,a.useCallback)((e=>{const t=g()("woocommerce-task-list__item index-"+r,{complete:E,"is-active":C===o});return(0,a.createElement)(y.TaskItem,{key:C,className:t,title:f,badge:w,completed:E,additionalInfo:L,content:H,onClick:t=>{"A"!==t.target.tagName&&(()=>{if(e.onClick)return m(),e.onClick();l()})()},onDismiss:b?()=>(p(C),void d("success",(0,i.__)("Task dismissed","woocommerce"),{actions:[{label:(0,i.__)("Undo","woocommerce"),onClick:()=>h(C)}]})):void 0,action:()=>{},actionLabel:v})}),[C,f,w,H,_,v,E,o]);return S?(0,a.createElement)(u.WooOnboardingTaskListItem.Slot,{id:C,fillProps:{defaultTaskItem:M,isComplete:E}}):(0,a.createElement)(M,null)};var nt=n(75606),ot=n(5196);const rt="store_setup";function at(e){if(0===e)return null;const t=Date.now()-1e3*e;return Math.round(t/c.WEEK)}const it=e=>{let{hideTasks:t,keepTasks:n,customerEffortScore:o}=e;const{updateOptions:r}=(0,s.useDispatch)(c.OPTIONS_STORE_NAME),[m,u]=(0,a.useState)(!1),[d,h]=(0,a.useState)(!1),[C,w]=(0,a.useState)(NaN),[H,_]=(0,a.useState)(!1),{storeAgeInWeeks:v,cesShownForActions:E,canShowCustomerEffortScore:L}=(0,s.useSelect)((e=>{const{getOption:t,hasFinishedResolution:n}=e(c.OPTIONS_STORE_NAME);if(o){const e=t(nt.ALLOW_TRACKING_OPTION_NAME),o=t(nt.ADMIN_INSTALL_TIMESTAMP_OPTION_NAME)||0,r=t(nt.SHOWN_FOR_ACTIONS_OPTION_NAME),a=!n("getOption",[nt.SHOWN_FOR_ACTIONS_OPTION_NAME])||!n("getOption",[nt.ADMIN_INSTALL_TIMESTAMP_OPTION_NAME]);return{storeAgeInWeeks:at(o),cesShownForActions:r,canShowCustomerEffortScore:!a&&e&&!(r||[]).includes("store_setup"),loading:a}}return{}}));(0,a.useEffect)((()=>{d&&setTimeout((()=>{_(!0)}),1200)}),[d]);const b=e=>{let{firstScore:t,secondScore:n,comments:o}=e;(0,l.recordEvent)("ces_feedback",{action:rt,score:t,score_second_question:null!=n?n:null,score_combined:t+(null!=n?n:0),comments:o||"",store_age:v}),r({[nt.SHOWN_FOR_ACTIONS_OPTION_NAME]:[rt,...E||[]]}),h(!0)};return(0,a.createElement)(a.Fragment,null,(0,a.createElement)("div",{className:g()("woocommerce-task-dashboard__container setup-task-list")},(0,a.createElement)(p.Card,{size:"large",className:"woocommerce-task-card woocommerce-homescreen-card completed"},(0,a.createElement)(p.CardHeader,{size:"medium"},(0,a.createElement)("div",{className:"wooocommerce-task-card__header"},(0,a.createElement)("img",{src:ot,alt:"Completed",className:"wooocommerce-task-card__finished-header-image"}),(0,a.createElement)(y.Text,{size:"title",as:"h2",lineHeight:1.4},(0,i.__)("You've completed store setup","woocommerce")),(0,a.createElement)(y.Text,{variant:"subtitle.small",as:"p",size:"13",lineHeight:"16px",className:"wooocommerce-task-card__header-subtitle"},(0,i.__)("Congratulations! Take a moment to celebrate and look out for the first sale.","woocommerce")),(0,a.createElement)("div",{className:"woocommerce-task-card__header-menu"},(0,a.createElement)(f.EllipsisMenu,{label:(0,i.__)("Task List Options","woocommerce"),renderContent:()=>(0,a.createElement)("div",{className:"woocommerce-task-card__section-controls"},(0,a.createElement)(p.Button,{onClick:()=>n()},(0,i.__)("Show setup task list","woocommerce")),(0,a.createElement)(p.Button,{onClick:()=>t()},(0,i.__)("Hide this","woocommerce")))})))),L&&!H&&!d&&(0,a.createElement)(nt.CustomerFeedbackSimple,{label:(0,i.__)("How was your experience?","woocommerce"),onSelect:e=>{e>2?(w(e),b({firstScore:e})):(w(e),u(!0),(0,l.recordEvent)("ces_view",{action:rt,store_age:v}))}}),d&&!H&&(0,a.createElement)("div",{className:"wooocommerce-task-card__header-ces-feedback"},(0,a.createElement)(y.Text,{variant:"subtitle.small",as:"p",size:"13",lineHeight:"16px"},"🙌"," ",(0,i.__)("We appreciate your feedback!","woocommerce"))))),m?(0,a.createElement)(nt.CustomerFeedbackModal,{title:(0,i.__)("How was your experience?","woocommerce"),firstQuestion:(0,i.__)("The store setup is easy to complete.","woocommerce"),secondQuestion:(0,i.__)("The store setup process meets my needs.","woocommerce"),defaultScore:C,recordScoreCallback:(e,t,n)=>{u(!1),b({firstScore:e,secondScore:t,comments:n})},onCloseModal:()=>{w(NaN),u(!1)}}):null)},st="experimental_woocommerce_tasklist_footer_item",ct=e=>{let{children:t,order:n=1}=e;return(0,a.createElement)(p.Fill,{name:st},(e=>(0,f.createOrderedChildren)(t,n,e)))};ct.Slot=e=>{let{fillProps:t}=e;return(0,a.createElement)(p.Slot,{name:st,fillProps:t},f.sortFillsByOrder)};const lt=()=>{var e;const t=(0,y.useSlot)(st);return Boolean(null==t||null===(e=t.fills)||void 0===e?void 0:e.length)?(0,a.createElement)("div",{className:"woocommerce-tasklist__footer"},(0,a.createElement)(ct.Slot,null)):null},mt="woocommerce_experimental_task_list_completion",ut=e=>{let{children:t,order:n=1}=e;return(0,a.createElement)(p.Fill,{name:mt},(e=>(0,f.createOrderedChildren)(t,n,e)))};ut.Slot=e=>{let{fillProps:t}=e;return(0,a.createElement)(p.Slot,{name:mt,fillProps:t},f.sortFillsByOrder)};const dt=e=>{var t;let{className:n,fillProps:o}=e;const r=(0,y.useSlot)(mt);return Boolean(null==r||null===(t=r.fills)||void 0===t?void 0:t.length)?(0,a.createElement)("div",{className:g()("woocommerce-tasklist-completion-slot",n)},(0,a.createElement)(ut.Slot,{fillProps:o})):null},pt=e=>{var t,n,o,r,m,h;let{query:C,id:w,eventName:H,eventPrefix:_,tasks:v,keepCompletedTaskList:E,isComplete:L,displayProgressHeader:b,cesHeader:k=!0}=e;const S=H?H+"_":_,{profileItems:M}=(0,s.useSelect)((e=>{const{getProfileItems:t}=e(c.ONBOARDING_STORE_NAME);return{profileItems:t()}})),{hideTaskList:N,visitedTask:x,keepCompletedTaskList:T}=(0,s.useDispatch)(c.ONBOARDING_STORE_NAME),A=(0,c.useUserPreferences)(),[I,O]=(0,a.useState)({}),[P,R]=(0,a.useState)(""),[V,j]=(0,a.useState)(!1),{layoutString:D}=(0,Ze.useLayoutContext)(),Z=(0,a.useRef)(C),B=(0,c.getVisibleTasks)(v);(0,a.useEffect)((()=>{C.task||(0,l.recordEvent)(`${S}view`,{number_tasks:B.length,store_connected:M.wccom_connected,context:D})}),[]);const z=(0,y.useSlot)(mt);(0,a.useEffect)((()=>{const{task:e}=Z.current,{task:t}=C;e!==t&&(window.document.documentElement.scrollTop=0,Z.current=C)}),[C]);const F=v.filter((e=>!e.isComplete&&!e.isDismissed)),W=()=>{N(w)},U=()=>{T(w)};let G=B.find((e=>!1===e.isComplete));G||(G=B[B.length-1]);const Y=(0,y.useSlot)(`woocommerce_onboarding_task_list_header_${null!==(t=null==I||null===(n=I.task)||void 0===n?void 0:n.id)&&void 0!==t?t:null===(o=G)||void 0===o?void 0:o.id}`),Q=Boolean(null==Y||null===(r=Y.fills)||void 0===r?void 0:r.length),q=e=>{(0,l.recordEvent)(`${S}click`,{task_name:e.id,context:D})},J=e=>{q(e),e.isComplete||(e=>{const t=(e=>{const t=A.task_list_tracked_started_tasks;return t&&t[e]?t[e]:0})(e)+1,n=A.task_list_tracked_started_tasks||{};x(e),A.updateUserPreferences({task_list_tracked_started_tasks:{...n||{},[e]:t}})})(e.id),e.actionUrl?(0,d.navigateTo)({url:e.actionUrl}):(0,d.navigateTo)({url:(0,d.getNewPath)({task:e.id},"/",{})})};if((0,a.useEffect)((()=>{var e;G&&(Ge[(e=G).id]||Q)&&(O({task:e,goToTask:()=>J(e),trackClick:()=>q(e)}),R(e.id))}),[G]),!B.length)return(0,a.createElement)("div",{className:"woocommerce-task-dashboard__container"});const K=Boolean(null==z||null===(m=z.fills)||void 0===m?void 0:m.length);return L&&"yes"!==E?K?(0,a.createElement)(dt,{fillProps:{hideTasks:W,keepTasks:U,customerEffortScore:k}}):(0,a.createElement)(a.Fragment,null,k?(0,a.createElement)(it,{hideTasks:W,keepTasks:U,customerEffortScore:!0}):(0,a.createElement)(qe,{hideTasks:W,keepTasks:U})):(0,a.createElement)(a.Fragment,null,V&&(0,a.createElement)(Ye,{showDismissModal:V,setShowDismissModal:j,hideTasks:W}),b?(0,a.createElement)(et,{taskListId:w}):null,(0,a.createElement)("div",{className:g()(`woocommerce-task-dashboard__container woocommerce-task-list__${w} setup-task-list`)},(0,a.createElement)(p.Card,{size:"large",className:"woocommerce-task-card woocommerce-homescreen-card"},(0,a.createElement)("div",{className:"wooocommerce-task-card__header-container"},(0,a.createElement)("div",{className:"wooocommerce-task-card__header"},Q?(0,a.createElement)(u.WooOnboardingTaskListHeader.Slot,{id:null===(h=G)||void 0===h?void 0:h.id,fillProps:I}):(null==I?void 0:I.task)&&(0,a.createElement)(Ge[I.task.id],I)),!b&&(0,a.createElement)("div",{className:"woocommerce-card__menu woocommerce-card__header-item"},(0,a.createElement)(f.EllipsisMenu,{className:w,label:(0,i.__)("Task List Options","woocommerce"),renderContent:e=>{let{onToggle:t}=e;return(0,a.createElement)("div",{className:"woocommerce-task-card__section-controls"},(0,a.createElement)(p.Button,{onClick:()=>{F.length>0?(j(!0),t()):W()}},(0,i.__)("Hide this","woocommerce")))}}))),(0,a.createElement)(y.List,{animation:"custom"},B.map(((e,t)=>(0,a.createElement)(tt,{key:e.id,taskIndex:++t,activeTaskId:P,task:e,goToTask:()=>J(e),trackClick:()=>q(e)})))),(0,a.createElement)(lt,null))))},ht=e=>{const{numTasks:t=5}=e;return(0,a.createElement)("div",{className:g()("woocommerce-task-dashboard__container setup-task-list")},(0,a.createElement)("div",{className:"components-card is-size-large woocommerce-task-card woocommerce-homescreen-card is-loading"},(0,a.createElement)("div",{className:"components-card__header is-size-medium"},(0,a.createElement)("div",{className:"wooocommerce-task-card__header"},(0,a.createElement)("div",{className:"is-placeholder"}," "))),(0,a.createElement)("ul",{className:"woocommerce-experimental-list"},Array.from(new Array(t)).map(((e,t)=>(0,a.createElement)("li",{tabIndex:t,key:t,className:"woocommerce-experimental-list__item woocommerce-task-list__item"},(0,a.createElement)("div",{className:"woocommerce-task-list__item-before"},(0,a.createElement)("div",{className:"is-placeholder"})),(0,a.createElement)("div",{className:"woocommerce-task-list__item-text"},(0,a.createElement)("div",{className:"components-truncate components-text is-placeholder"}))))))))};var Ct=n(70048),gt=n(39630);const ft=e=>{let{title:t}=e;const n=(0,i.__)("WooCommerce Home","woocommerce"),o=()=>{(0,l.recordEvent)("topbar_back_button",{page_name:t}),(0,d.updateQueryString)({},(0,d.getHistory)().location.pathname,{})};return(0,a.createElement)(p.Tooltip,{text:n},(0,a.createElement)("div",{tabIndex:0,role:"button","data-testid":"header-back-button",className:"woocommerce-layout__header-back-button",onKeyDown:e=>{let{keyCode:t}=e;t!==gt.ENTER&&t!==gt.SPACE||o()}},(0,a.createElement)(K.Z,{icon:Ct.Z,onClick:o})))},yt=e=>{let{query:t,task:n}=e;const o=t.task||"";o||console.warn("No task id provided");const{invalidateResolutionForStoreSelector:r,optimisticallyCompleteTask:i}=(0,s.useDispatch)(c.ONBOARDING_STORE_NAME),l=(0,a.useCallback)((()=>{const e=Array.from(document.querySelectorAll("#adminmenu .woocommerce-task-list-remaining-tasks-badge"));null!=e&&e.length&&e.forEach((e=>{const t=Number(e.innerText);1===t?e.remove():e.innerHTML=String(t-1)}))}),[]),m=(0,a.useCallback)((e=>{i(o),(0,d.getHistory)().push(e&&e.redirectPath?e.redirectPath:(0,d.getNewPath)({},"/",{})),r("getTaskLists"),l()}),[o]);return(0,a.createElement)(a.Fragment,null,(0,a.createElement)(Ze.WooHeaderNavigationItem,null,(0,a.createElement)(ft,{title:n.title})),(0,a.createElement)(Ze.WooHeaderPageTitle,null,n.title),(0,a.createElement)(u.WooOnboardingTask.Slot,{id:o,fillProps:{onComplete:m,query:t,task:n}}))},wt=e=>{let{numTasks:t=5,query:n}=e;return Boolean(n.task)?null:(0,a.createElement)("div",{className:"woocommerce-task-dashboard__container"},(0,a.createElement)("div",{className:"woocommerce-card woocommerce-task-card is-loading","aria-hidden":!0},(0,a.createElement)("div",{className:"woocommerce-card__header"},(0,a.createElement)("div",{className:"woocommerce-card__title-wrapper"},(0,a.createElement)("div",{className:"woocommerce-card__title woocommerce-card__header-item"},(0,a.createElement)("span",{className:"is-placeholder"})))),(0,a.createElement)("div",{className:"woocommerce-card__body"},(0,a.createElement)("div",{className:"woocommerce-list"},Array.from(new Array(t)).map(((e,t)=>(0,a.createElement)("div",{key:t,className:"woocommerce-list__item has-action"},(0,a.createElement)("div",{className:"woocommerce-list__item-inner"},(0,a.createElement)("div",{className:"woocommerce-list__item-before"},(0,a.createElement)("span",{className:"is-placeholder"})),(0,a.createElement)("div",{className:"woocommerce-list__item-text"},(0,a.createElement)("div",{className:"woocommerce-list__item-title"},(0,a.createElement)("span",{className:"is-placeholder"}))),(0,a.createElement)("div",{className:"woocommerce-list__item-after"},(0,a.createElement)("span",{className:"is-placeholder"}))))))))))},Ht=e=>{var t;let{isExpandable:n=!1,isExpanded:o=!1,setExpandedTask:r,task:m}=e;const{createNotice:p}=(0,s.useDispatch)("core/notices"),{layoutString:h}=(0,Ze.useLayoutContext)(),{dismissTask:C,snoozeTask:g,undoDismissTask:f,undoSnoozeTask:w,visitedTask:H}=(0,s.useDispatch)(c.ONBOARDING_STORE_NAME),_=(0,c.useUserPreferences)(),{actionLabel:v,actionUrl:E,content:L,id:b,isComplete:k,isDismissable:S,isSnoozeable:M,time:N,title:x,badge:T,level:A,additionalInfo:I,recordViewEvent:O}=m;(0,a.useEffect)((()=>{O&&(0,l.recordEvent)("tasklist_item_view",{task_name:b,is_complete:k,context:h})}),[]);const P=(0,y.useSlot)(`woocommerce_onboarding_task_list_item_${b}`),R=Boolean(null==P||null===(t=P.fills)||void 0===t?void 0:t.length),V=(0,a.useCallback)((()=>{C(b),p("success",(0,i.__)("Task dismissed","woocommerce"),{actions:[{label:(0,i.__)("Undo","woocommerce"),onClick:()=>f(b)}]})}),[b]),j=(0,a.useCallback)((()=>{g(b),p("success",(0,i.__)("Task postponed until tomorrow","woocommerce"),{actions:[{label:(0,i.__)("Undo","woocommerce"),onClick:()=>w(b)}]})}),[b]),D=(0,a.useCallback)((()=>{E?(0,d.navigateTo)({url:E}):(0,d.navigateTo)({url:(0,d.getNewPath)({task:b},"/",{})})}),[b,k,E]),B={expandable:n,expanded:n&&o,completed:k,onSnooze:M&&j,onDismiss:S&&V},z=(0,a.useCallback)((e=>{const t=()=>((0,l.recordEvent)("tasklist_click",{task_name:b,context:h}),k||(()=>{const e=(()=>{const e=_.task_list_tracked_started_tasks;return e&&e[b]?e[b]:0})()+1,t=_.task_list_tracked_started_tasks||{};H(b),_.updateUserPreferences({task_list_tracked_started_tasks:{...t||{},[b]:e}})})(),e.onClick?e.onClick():D());return(0,a.createElement)(y.TaskItem,(0,Z.Z)({key:b,title:x,badge:T,content:L,additionalInfo:I,time:N,action:t,level:A,actionLabel:v},B,e,{onClick:!n||k?t:()=>r(b)}))}),[b,x,T,L,N,v,n,k]);return R?(0,a.createElement)(u.WooOnboardingTaskListItem.Slot,{id:b,fillProps:{defaultTaskItem:z,isComplete:k,...B}}):(0,a.createElement)(z,{onClick:m.onClick})},_t=e=>{var t;let{id:n,eventPrefix:o,tasks:r,title:m,isCollapsible:u=!1,isExpandable:d=!1,displayProgressHeader:h=!1,query:C}=e;const{profileItems:g}=(0,s.useSelect)((e=>{const{getProfileItems:t}=e(c.ONBOARDING_STORE_NAME);return{profileItems:t()}})),w=(0,a.useRef)(C),H=(0,c.getVisibleTasks)(r),{layoutString:_}=(0,Ze.useLayoutContext)(),v=r.filter((e=>!e.isComplete&&!e.isDismissed)),[E,L]=(0,a.useState)(null===(t=v[0])||void 0===t?void 0:t.id);if((0,a.useEffect)((()=>{(0,l.recordEvent)(o+"view",{number_tasks:H.length,store_connected:g.wccom_connected,context:_})}),[]),(0,a.useEffect)((()=>{const{task:e}=w.current,{task:t}=C;e!==t&&(window.document.documentElement.scrollTop=0,w.current=C)}),[C]),!H.length)return(0,a.createElement)("div",{className:"woocommerce-task-dashboard__container"});const b=(0,i.sprintf)((0,i._n)("Show %d more task.","Show %d more tasks.",H.length-2,"woocommerce"),H.length-2),k=(0,i.__)("Show less","woocommerce"),S=H.map((e=>(0,a.createElement)(Ht,{key:e.id,isExpanded:E===e.id,isExpandable:d,task:e,setExpandedTask:L})));return(0,a.createElement)(a.Fragment,null,(0,a.createElement)("div",{className:"woocommerce-task-dashboard__container woocommerce-task-list__"+n},h?(0,a.createElement)(et,{taskListId:n}):null,(0,a.createElement)(p.Card,{size:"large",className:"woocommerce-task-card woocommerce-homescreen-card"},(0,a.createElement)(p.CardHeader,{size:"medium"},(0,a.createElement)("div",{className:"wooocommerce-task-card__header"},(0,a.createElement)(y.Text,{size:"20",lineHeight:"28px",variant:"title.small"},m),(0,a.createElement)(f.Badge,{count:v.length})),(0,a.createElement)(Xe,{id:n})),u?(0,a.createElement)(y.CollapsibleList,{animation:"custom",collapseLabel:k,expandLabel:b,show:2,onCollapse:()=>(0,l.recordEvent)(o+"collapse",{}),onExpand:()=>(0,l.recordEvent)(o+"expand",{})},S):(0,a.createElement)(y.List,{animation:"custom"},S))))},vt=e=>{let{query:t}=e;const{task:n}=t,{hideTaskList:r}=(0,s.useDispatch)(c.ONBOARDING_STORE_NAME),{updateOptions:m}=(0,s.useDispatch)(c.OPTIONS_STORE_NAME),{isResolving:u,taskLists:d}=(0,s.useSelect)((e=>({isResolving:!e(c.ONBOARDING_STORE_NAME).hasFinishedResolution("getTaskLists"),taskLists:e(c.ONBOARDING_STORE_NAME).getTaskLists()})));(0,a.useEffect)((()=>{m({woocommerce_task_list_prompt_shown:!0})}),[d,u]);const h=(()=>{if(!n)return null;return d.reduce(((e,t)=>[...e,...t.tasks]),[]).find((e=>e.id===n))||null})();if(n&&!h)return null;if(h)return(0,a.createElement)("div",{className:"woocommerce-task-dashboard__container"},(0,a.createElement)(yt,{query:t,task:h}));const C="setup"===(0,o.O3)("visibleTaskListIds",[])[0]?ht:wt;return u?(0,a.createElement)(C,{query:t}):(0,a.createElement)(a.Fragment,null,d.filter((e=>{let{isVisible:t}=e;return t})).map((e=>{const{id:n,isHidden:o,isToggleable:s}=e,c="setup"===n?pt:_t;return(0,a.createElement)(a.Fragment,{key:n},(0,a.createElement)(c,(0,Z.Z)({isExpandable:!1,query:t},e)),s&&(0,a.createElement)(De.z,null,(0,a.createElement)(p.MenuGroup,{className:"woocommerce-layout__homescreen-display-options",label:(0,i.__)("Display","woocommerce")},(0,a.createElement)(p.MenuItem,{className:"woocommerce-layout__homescreen-extension-tasklist-toggle",icon:o?void 0:je.Z,isSelected:!o,role:"menuitemcheckbox",onClick:()=>(e=>{const{id:t,eventPrefix:n,isHidden:o}=e,a=!o;(0,l.recordEvent)(a?`${n}hide`:`${n}show`,{}),r(t)})(e)},(0,i.__)("Show things to do next","woocommerce")))))})))};var Et=n(70261);const Lt="woocommerce_task_list_reminder_bar_hidden",bt=e=>{let{remainingCount:t,tracksProps:n}=e;const o=1===t?(0,i.__)("🎉 Almost there. Only {{strongText}}%1$d step left{{/strongText}} get your store up and running. {{setupLink}}Finish setup{{/setupLink}}","woocommerce"):(0,i.__)("🚀 You're doing great! {{strongText}}%1$d steps left{{/strongText}} to get your store up and running. {{setupLink}}Continue setup{{/setupLink}}","woocommerce");return(0,a.createElement)("p",null,(0,U.Z)({mixedString:(0,i.sprintf)(o,t),components:{strongText:(0,a.createElement)("strong",null),setupLink:(0,a.createElement)(f.Link,{href:(0,G.getAdminLink)("admin.php?page=wc-admin"),onClick:()=>(0,l.recordEvent)("tasklist_reminder_bar_continue",n),type:"wp-admin"},(0,a.createElement)(a.Fragment,null))}}))},kt=e=>{let{taskListId:t,updateBodyMargin:n}=e;const{updateOptions:o}=(0,s.useDispatch)(c.OPTIONS_STORE_NAME),{remainingCount:r,loading:i,taskListHidden:m,taskListComplete:u,reminderBarHidden:h,completedTasksCount:C}=(0,s.useSelect)((e=>{const{getTaskList:n,hasFinishedResolution:o}=e(c.ONBOARDING_STORE_NAME),{getOption:r,hasFinishedResolution:a}=e(c.OPTIONS_STORE_NAME),i=r(Lt),s=n(t),l=o("getTaskList",[t]),m=a("getOption",[Lt]),u=(0,c.getVisibleTasks)((null==s?void 0:s.tasks)||[]),d=u.filter((e=>e.isComplete))||[],p=l&&m;return{reminderBarHidden:"yes"===i,taskListHidden:!!p&&(null==s?void 0:s.isHidden),taskListComplete:!!p&&(null==s?void 0:s.isComplete),loading:!p,completedTasksCount:d.length,remainingCount:p?(null==u?void 0:u.length)-d.length:null}})),g=(0,d.getQuery)(),f=g.page&&"wc-admin"===g.page&&!g.path,y=Boolean(g.wc_onboarding_active_task),w=i||m||u||h||0===C||f||y;(0,a.useEffect)((()=>{n()}),[w,n]);const H={completed:C,is_homescreen:!!f,is_active_task_page:y};return(0,a.useEffect)((()=>{i||w||(0,l.recordEvent)("tasklist_reminder_bar_view",H)}),[w,i]),w?null:(0,a.createElement)("div",{className:"woocommerce-layout__header-tasks-reminder-bar"},(0,a.createElement)(bt,{remainingCount:r,tracksProps:H}),(0,a.createElement)(p.Button,{isSmall:!0,onClick:()=>{o({[Lt]:"yes"}),(0,l.recordEvent)("tasklist_reminder_bar_close",H)},icon:Et.Z}))},St="woocommerce_tasklist_experimental_progress_title_item",Mt=e=>{let{children:t,order:n=1}=e;return(0,a.createElement)(p.Fill,{name:St},(e=>(0,f.createOrderedChildren)(t,n,e)))};Mt.Slot=e=>{let{fillProps:t}=e;return(0,a.createElement)(p.Slot,{name:St,fillProps:t},f.sortFillsByOrder)};const Nt=e=>{let{taskListId:t}=e;const{loading:n,tasksCount:o,completedCount:r,hasVisitedTasks:l}=(0,s.useSelect)((e=>{const n=e(c.ONBOARDING_STORE_NAME).getTaskList(t),o=e(c.ONBOARDING_STORE_NAME).hasFinishedResolution("getTaskList",[t]),r=(0,c.getVisibleTasks)((null==n?void 0:n.tasks)||[]);return{loading:!o,tasksCount:null==r?void 0:r.length,completedCount:null==r?void 0:r.filter((e=>e.isComplete)).length,hasVisitedTasks:(null==r?void 0:r.filter((e=>e.isVisited&&"store_details"!==e.id)).length)>0}})),m=(0,a.useMemo)((()=>{if(!l||r===o){const e=(0,G.getSetting)("siteTitle");return e?(0,i.sprintf)((0,i.__)("Welcome to %s","woocommerce"),e):(0,i.__)("Welcome to your store","woocommerce")}return r<=3?(0,i.__)("Let's get you started","woocommerce")+" 🚀":r>3&&r<6?(0,i.__)("You are on the right track","woocommerce"):(0,i.__)("You are almost there","woocommerce")}),[r,l,o]);return n?null:(0,a.createElement)("h1",{className:"woocommerce-task-progress-header__title",dangerouslySetInnerHTML:(0,S.ZP)(m)})},xt=e=>{var t;let{taskListId:n}=e;const o=(0,y.useSlot)(St);return Boolean(null==o||null===(t=o.fills)||void 0===t?void 0:t.length)?(0,a.createElement)(Mt.Slot,{fillProps:{taskListId:n}}):(0,a.createElement)(Nt,{taskListId:n})},Tt=()=>{const{activeSetuplist:e}=(0,s.useSelect)((e=>{const t=e(c.ONBOARDING_STORE_NAME).getTaskLists().filter((e=>"setup"===e.id&&e.isVisible));return{activeSetuplist:t.length?t[0].id:null}}));return e}},73463:(e,t,n)=>{"use strict";n.d(t,{MV:()=>m,O3:()=>c,SX:()=>l,rq:()=>d,vm:()=>u});var o=n(65736),r=n(74617);const a=["wcAdminSettings","preloadSettings"],i=(0,r.getSetting)("admin",{}),s=Object.keys(i).reduce(((e,t)=>(a.includes(t)||(e[t]=i[t]),e)),{});function c(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e=>e;if(a.includes(e))throw new Error((0,o.__)("Mutable settings should be accessed via data store.","woocommerce"));const r=s.hasOwnProperty(e)?s[e]:t;return n(r,t)}const l=(0,r.getSetting)("adminUrl"),m=((0,r.getSetting)("countries"),(0,r.getSetting)("currency"),(0,r.getSetting)("locale")),u=((0,r.getSetting)("siteTitle"),(0,r.getSetting)("wcAssetUrl")),d=c("orderStatuses")},34374:(e,t,n)=>{"use strict";n.d(t,{V7:()=>r,br:()=>a,GG:()=>s,Jm:()=>l,DP:()=>i,p0:()=>m});var o=n(69307);function r(e){return(e||"").split(":",1)[0]}function a(e){const t=r(e);return/^woocommerce(-|_)payments$/.test(t)?"wcpay":`${t.replace(/-/g,"_")}`.split(":",1)[0]}function i(e){return e?e.substr(1).split("&").reduce(((e,t)=>{const n=t.split("="),o=n[0];let r=decodeURIComponent(n[1]);return r=isNaN(Number(r))?r:Number(r),e[o]=r,e}),{}):{}}function s(){let e="";const{page:t,path:n,post_type:o}=i(window.location.search);if(t){const o="wc-admin"===t?"home_screen":t;e=n?n.replace(/\//g,"_").substring(1):o}else o&&(e=o);return e}n(99196);const c=[{name:"0-2s",max:2},{name:"2-5s",max:5},{name:"5-10s",max:10},{name:"10-15s",max:15},{name:"15-20s",max:20},{name:"20-30s",max:30},{name:"30-60s",max:60},{name:">60s"}],l=e=>{for(const t of c){if(!t.max)return t.name;if(e<1e3*t.max)return t.name}},m=e=>{(0,o.useEffect)((()=>{const t=document.documentElement.classList.contains("wp-toolbar");return document.body.classList.remove("woocommerce-admin-is-loading"),document.body.classList.add(e),document.body.classList.add("woocommerce-admin-full-screen"),document.body.classList.add("is-wp-toolbar-disabled"),t&&document.documentElement.classList.remove("wp-toolbar"),()=>{document.body.classList.remove(e),document.body.classList.remove("woocommerce-admin-full-screen"),document.body.classList.remove("is-wp-toolbar-disabled"),t&&document.documentElement.classList.add("wp-toolbar")}}))}},2864:(e,t,n)=>{"use strict";var o=n(28487),r=n(25592),a=r(o("String.prototype.indexOf"));e.exports=function(e,t){var n=o(e,!!t);return"function"==typeof n&&a(e,".prototype.")>-1?r(n):n}},25592:(e,t,n)=>{"use strict";var o=n(22698),r=n(28487),a=r("%Function.prototype.apply%"),i=r("%Function.prototype.call%"),s=r("%Reflect.apply%",!0)||o.call(i,a),c=r("%Object.getOwnPropertyDescriptor%",!0),l=r("%Object.defineProperty%",!0),m=r("%Math.max%");if(l)try{l({},"a",{value:1})}catch(e){l=null}e.exports=function(e){var t=s(o,i,arguments);if(c&&l){var n=c(t,"length");n.configurable&&l(t,"length",{value:1+m(0,e.length-(arguments.length-1))})}return t};var u=function(){return s(o,a,arguments)};l?l(e.exports,"apply",{value:u}):e.exports.apply=u},83849:(e,t)=>{var n;!function(){"use strict";var o={}.hasOwnProperty;function r(){for(var e=[],t=0;t1?n-1:0),r=1;r/gm),D=i(/^data-[\-\w.\u00B7-\uFFFF]/),Z=i(/^aria-[\-\w]+$/),B=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),z=i(/^(?:\w+script|data):/i),F=i(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),W=i(/^html$/i),U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};function G(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:Y(),n=function(t){return e(t)};if(n.version="2.3.6",n.removed=[],!t||!t.document||9!==t.document.nodeType)return n.isSupported=!1,n;var o=t.document,r=t.document,i=t.DocumentFragment,s=t.HTMLTemplateElement,c=t.Node,l=t.Element,m=t.NodeFilter,u=t.NamedNodeMap,v=void 0===u?t.NamedNodeMap||t.MozNamedAttrMap:u,q=t.HTMLFormElement,J=t.DOMParser,K=t.trustedTypes,X=l.prototype,$=b(X,"cloneNode"),ee=b(X,"nextSibling"),te=b(X,"childNodes"),ne=b(X,"parentNode");if("function"==typeof s){var oe=r.createElement("template");oe.content&&oe.content.ownerDocument&&(r=oe.content.ownerDocument)}var re=Q(K,o),ae=re?re.createHTML(""):"",ie=r,se=ie.implementation,ce=ie.createNodeIterator,le=ie.createDocumentFragment,me=ie.getElementsByTagName,ue=o.importNode,de={};try{de=L(r).documentMode?r.documentMode:{}}catch(e){}var pe={};n.isSupported="function"==typeof ne&&se&&void 0!==se.createHTMLDocument&&9!==de;var he=V,Ce=j,ge=D,fe=Z,ye=z,we=F,He=B,_e=null,ve=E({},[].concat(G(k),G(S),G(M),G(x),G(A))),Ee=null,Le=E({},[].concat(G(I),G(O),G(P),G(R))),be=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ke=null,Se=null,Me=!0,Ne=!0,xe=!1,Te=!1,Ae=!1,Ie=!1,Oe=!1,Pe=!1,Re=!1,Ve=!1,je=!0,De=!0,Ze=!1,Be={},ze=null,Fe=E({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),We=null,Ue=E({},["audio","video","img","source","image","track"]),Ge=null,Ye=E({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Qe="http://www.w3.org/1998/Math/MathML",qe="http://www.w3.org/2000/svg",Je="http://www.w3.org/1999/xhtml",Ke=Je,Xe=!1,$e=void 0,et=["application/xhtml+xml","text/html"],tt="text/html",nt=void 0,ot=null,rt=r.createElement("form"),at=function(e){return e instanceof RegExp||e instanceof Function},it=function(e){ot&&ot===e||(e&&"object"===(void 0===e?"undefined":U(e))||(e={}),e=L(e),_e="ALLOWED_TAGS"in e?E({},e.ALLOWED_TAGS):ve,Ee="ALLOWED_ATTR"in e?E({},e.ALLOWED_ATTR):Le,Ge="ADD_URI_SAFE_ATTR"in e?E(L(Ye),e.ADD_URI_SAFE_ATTR):Ye,We="ADD_DATA_URI_TAGS"in e?E(L(Ue),e.ADD_DATA_URI_TAGS):Ue,ze="FORBID_CONTENTS"in e?E({},e.FORBID_CONTENTS):Fe,ke="FORBID_TAGS"in e?E({},e.FORBID_TAGS):{},Se="FORBID_ATTR"in e?E({},e.FORBID_ATTR):{},Be="USE_PROFILES"in e&&e.USE_PROFILES,Me=!1!==e.ALLOW_ARIA_ATTR,Ne=!1!==e.ALLOW_DATA_ATTR,xe=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Te=e.SAFE_FOR_TEMPLATES||!1,Ae=e.WHOLE_DOCUMENT||!1,Pe=e.RETURN_DOM||!1,Re=e.RETURN_DOM_FRAGMENT||!1,Ve=e.RETURN_TRUSTED_TYPE||!1,Oe=e.FORCE_BODY||!1,je=!1!==e.SANITIZE_DOM,De=!1!==e.KEEP_CONTENT,Ze=e.IN_PLACE||!1,He=e.ALLOWED_URI_REGEXP||He,Ke=e.NAMESPACE||Je,e.CUSTOM_ELEMENT_HANDLING&&at(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(be.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&at(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(be.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(be.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),$e=$e=-1===et.indexOf(e.PARSER_MEDIA_TYPE)?tt:e.PARSER_MEDIA_TYPE,nt="application/xhtml+xml"===$e?function(e){return e}:C,Te&&(Ne=!1),Re&&(Pe=!0),Be&&(_e=E({},[].concat(G(A))),Ee=[],!0===Be.html&&(E(_e,k),E(Ee,I)),!0===Be.svg&&(E(_e,S),E(Ee,O),E(Ee,R)),!0===Be.svgFilters&&(E(_e,M),E(Ee,O),E(Ee,R)),!0===Be.mathMl&&(E(_e,x),E(Ee,P),E(Ee,R))),e.ADD_TAGS&&(_e===ve&&(_e=L(_e)),E(_e,e.ADD_TAGS)),e.ADD_ATTR&&(Ee===Le&&(Ee=L(Ee)),E(Ee,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&E(Ge,e.ADD_URI_SAFE_ATTR),e.FORBID_CONTENTS&&(ze===Fe&&(ze=L(ze)),E(ze,e.FORBID_CONTENTS)),De&&(_e["#text"]=!0),Ae&&E(_e,["html","head","body"]),_e.table&&(E(_e,["tbody"]),delete ke.tbody),a&&a(e),ot=e)},st=E({},["mi","mo","mn","ms","mtext"]),ct=E({},["foreignobject","desc","title","annotation-xml"]),lt=E({},S);E(lt,M),E(lt,N);var mt=E({},x);E(mt,T);var ut=function(e){var t=ne(e);t&&t.tagName||(t={namespaceURI:Je,tagName:"template"});var n=C(e.tagName),o=C(t.tagName);if(e.namespaceURI===qe)return t.namespaceURI===Je?"svg"===n:t.namespaceURI===Qe?"svg"===n&&("annotation-xml"===o||st[o]):Boolean(lt[n]);if(e.namespaceURI===Qe)return t.namespaceURI===Je?"math"===n:t.namespaceURI===qe?"math"===n&&ct[o]:Boolean(mt[n]);if(e.namespaceURI===Je){if(t.namespaceURI===qe&&!ct[o])return!1;if(t.namespaceURI===Qe&&!st[o])return!1;var r=E({},["title","style","font","a","script"]);return!mt[n]&&(r[n]||!lt[n])}return!1},dt=function(e){h(n.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){try{e.outerHTML=ae}catch(t){e.remove()}}},pt=function(e,t){try{h(n.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){h(n.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!Ee[e])if(Pe||Re)try{dt(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},ht=function(e){var t=void 0,n=void 0;if(Oe)e=" "+e;else{var o=g(e,/^[\r\n\t ]+/);n=o&&o[0]}"application/xhtml+xml"===$e&&(e=''+e+"");var a=re?re.createHTML(e):e;if(Ke===Je)try{t=(new J).parseFromString(a,$e)}catch(e){}if(!t||!t.documentElement){t=se.createDocument(Ke,"template",null);try{t.documentElement.innerHTML=Xe?"":a}catch(e){}}var i=t.body||t.documentElement;return e&&n&&i.insertBefore(r.createTextNode(n),i.childNodes[0]||null),Ke===Je?me.call(t,Ae?"html":"body")[0]:Ae?t.documentElement:i},Ct=function(e){return ce.call(e.ownerDocument||e,e,m.SHOW_ELEMENT|m.SHOW_COMMENT|m.SHOW_TEXT,null,!1)},gt=function(e){return e instanceof q&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof v)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore)},ft=function(e){return"object"===(void 0===c?"undefined":U(c))?e instanceof c:e&&"object"===(void 0===e?"undefined":U(e))&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName},yt=function(e,t,o){pe[e]&&d(pe[e],(function(e){e.call(n,t,o,ot)}))},wt=function(e){var t=void 0;if(yt("beforeSanitizeElements",e,null),gt(e))return dt(e),!0;if(g(e.nodeName,/[\u0080-\uFFFF]/))return dt(e),!0;var o=nt(e.nodeName);if(yt("uponSanitizeElement",e,{tagName:o,allowedTags:_e}),!ft(e.firstElementChild)&&(!ft(e.content)||!ft(e.content.firstElementChild))&&H(/<[/\w]/g,e.innerHTML)&&H(/<[/\w]/g,e.textContent))return dt(e),!0;if("select"===o&&H(/=0;--i)r.insertBefore($(a[i],!0),ee(e))}return dt(e),!0}return e instanceof l&&!ut(e)?(dt(e),!0):"noscript"!==o&&"noembed"!==o||!H(/<\/no(script|embed)/i,e.innerHTML)?(Te&&3===e.nodeType&&(t=e.textContent,t=f(t,he," "),t=f(t,Ce," "),e.textContent!==t&&(h(n.removed,{element:e.cloneNode()}),e.textContent=t)),yt("afterSanitizeElements",e,null),!1):(dt(e),!0)},Ht=function(e,t,n){if(je&&("id"===t||"name"===t)&&(n in r||n in rt))return!1;if(Ne&&!Se[t]&&H(ge,t));else if(Me&&H(fe,t));else if(!Ee[t]||Se[t]){if(!(_t(e)&&(be.tagNameCheck instanceof RegExp&&H(be.tagNameCheck,e)||be.tagNameCheck instanceof Function&&be.tagNameCheck(e))&&(be.attributeNameCheck instanceof RegExp&&H(be.attributeNameCheck,t)||be.attributeNameCheck instanceof Function&&be.attributeNameCheck(t))||"is"===t&&be.allowCustomizedBuiltInElements&&(be.tagNameCheck instanceof RegExp&&H(be.tagNameCheck,n)||be.tagNameCheck instanceof Function&&be.tagNameCheck(n))))return!1}else if(Ge[t]);else if(H(He,f(n,we,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==y(n,"data:")||!We[e])if(xe&&!H(ye,f(n,we,"")));else if(n)return!1;return!0},_t=function(e){return e.indexOf("-")>0},vt=function(e){var t=void 0,o=void 0,r=void 0,a=void 0;yt("beforeSanitizeAttributes",e,null);var i=e.attributes;if(i){var s={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Ee};for(a=i.length;a--;){var c=t=i[a],l=c.name,m=c.namespaceURI;if(o=w(t.value),r=nt(l),s.attrName=r,s.attrValue=o,s.keepAttr=!0,s.forceKeepAttr=void 0,yt("uponSanitizeAttribute",e,s),o=s.attrValue,!s.forceKeepAttr&&(pt(l,e),s.keepAttr))if(H(/\/>/i,o))pt(l,e);else{Te&&(o=f(o,he," "),o=f(o,Ce," "));var u=nt(e.nodeName);if(Ht(u,r,o))try{m?e.setAttributeNS(m,l,o):e.setAttribute(l,o),p(n.removed)}catch(e){}}}yt("afterSanitizeAttributes",e,null)}},Et=function e(t){var n=void 0,o=Ct(t);for(yt("beforeSanitizeShadowDOM",t,null);n=o.nextNode();)yt("uponSanitizeShadowNode",n,null),wt(n)||(n.content instanceof i&&e(n.content),vt(n));yt("afterSanitizeShadowDOM",t,null)};return n.sanitize=function(e,r){var a=void 0,s=void 0,l=void 0,m=void 0,u=void 0;if((Xe=!e)&&(e="\x3c!--\x3e"),"string"!=typeof e&&!ft(e)){if("function"!=typeof e.toString)throw _("toString is not a function");if("string"!=typeof(e=e.toString()))throw _("dirty is not a string, aborting")}if(!n.isSupported){if("object"===U(t.toStaticHTML)||"function"==typeof t.toStaticHTML){if("string"==typeof e)return t.toStaticHTML(e);if(ft(e))return t.toStaticHTML(e.outerHTML)}return e}if(Ie||it(r),n.removed=[],"string"==typeof e&&(Ze=!1),Ze){if(e.nodeName){var d=nt(e.nodeName);if(!_e[d]||ke[d])throw _("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof c)1===(s=(a=ht("\x3c!----\x3e")).ownerDocument.importNode(e,!0)).nodeType&&"BODY"===s.nodeName||"HTML"===s.nodeName?a=s:a.appendChild(s);else{if(!Pe&&!Te&&!Ae&&-1===e.indexOf("<"))return re&&Ve?re.createHTML(e):e;if(!(a=ht(e)))return Pe?null:Ve?ae:""}a&&Oe&&dt(a.firstChild);for(var p=Ct(Ze?e:a);l=p.nextNode();)3===l.nodeType&&l===m||wt(l)||(l.content instanceof i&&Et(l.content),vt(l),m=l);if(m=null,Ze)return e;if(Pe){if(Re)for(u=le.call(a.ownerDocument);a.firstChild;)u.appendChild(a.firstChild);else u=a;return Ee.shadowroot&&(u=ue.call(o,u,!0)),u}var h=Ae?a.outerHTML:a.innerHTML;return Ae&&_e["!doctype"]&&a.ownerDocument&&a.ownerDocument.doctype&&a.ownerDocument.doctype.name&&H(W,a.ownerDocument.doctype.name)&&(h="\n"+h),Te&&(h=f(h,he," "),h=f(h,Ce," ")),re&&Ve?re.createHTML(h):h},n.setConfig=function(e){it(e),Ie=!0},n.clearConfig=function(){ot=null,Ie=!1},n.isValidAttribute=function(e,t,n){ot||it({});var o=nt(e),r=nt(t);return Ht(o,r,n)},n.addHook=function(e,t){"function"==typeof t&&(pe[e]=pe[e]||[],h(pe[e],t))},n.removeHook=function(e){pe[e]&&p(pe[e])},n.removeHooks=function(e){pe[e]&&(pe[e]=[])},n.removeAllHooks=function(){pe={}},n}()}()},59748:e=>{"use strict";var t="Function.prototype.bind called on incompatible ",n=Array.prototype.slice,o=Object.prototype.toString,r="[object Function]";e.exports=function(e){var a=this;if("function"!=typeof a||o.call(a)!==r)throw new TypeError(t+a);for(var i,s=n.call(arguments,1),c=function(){if(this instanceof i){var t=a.apply(this,s.concat(n.call(arguments)));return Object(t)===t?t:this}return a.apply(e,s.concat(n.call(arguments)))},l=Math.max(0,a.length-s.length),m=[],u=0;u{"use strict";var o=n(59748);e.exports=Function.prototype.bind||o},28487:(e,t,n)=>{"use strict";var o,r=SyntaxError,a=Function,i=TypeError,s=function(e){try{return a('"use strict"; return ('+e+").constructor;")()}catch(e){}},c=Object.getOwnPropertyDescriptor;if(c)try{c({},"")}catch(e){c=null}var l=function(){throw new i},m=c?function(){try{return l}catch(e){try{return c(arguments,"callee").get}catch(e){return l}}}():l,u=n(72770)(),d=Object.getPrototypeOf||function(e){return e.__proto__},p={},h="undefined"==typeof Uint8Array?o:d(Uint8Array),C={"%AggregateError%":"undefined"==typeof AggregateError?o:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?o:ArrayBuffer,"%ArrayIteratorPrototype%":u?d([][Symbol.iterator]()):o,"%AsyncFromSyncIteratorPrototype%":o,"%AsyncFunction%":p,"%AsyncGenerator%":p,"%AsyncGeneratorFunction%":p,"%AsyncIteratorPrototype%":p,"%Atomics%":"undefined"==typeof Atomics?o:Atomics,"%BigInt%":"undefined"==typeof BigInt?o:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?o:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?o:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?o:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?o:FinalizationRegistry,"%Function%":a,"%GeneratorFunction%":p,"%Int8Array%":"undefined"==typeof Int8Array?o:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?o:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?o:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":u?d(d([][Symbol.iterator]())):o,"%JSON%":"object"==typeof JSON?JSON:o,"%Map%":"undefined"==typeof Map?o:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&u?d((new Map)[Symbol.iterator]()):o,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?o:Promise,"%Proxy%":"undefined"==typeof Proxy?o:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?o:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?o:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&u?d((new Set)[Symbol.iterator]()):o,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?o:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":u?d(""[Symbol.iterator]()):o,"%Symbol%":u?Symbol:o,"%SyntaxError%":r,"%ThrowTypeError%":m,"%TypedArray%":h,"%TypeError%":i,"%Uint8Array%":"undefined"==typeof Uint8Array?o:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?o:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?o:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?o:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?o:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?o:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?o:WeakSet},g=function e(t){var n;if("%AsyncFunction%"===t)n=s("async function () {}");else if("%GeneratorFunction%"===t)n=s("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=s("async function* () {}");else if("%AsyncGenerator%"===t){var o=e("%AsyncGeneratorFunction%");o&&(n=o.prototype)}else if("%AsyncIteratorPrototype%"===t){var r=e("%AsyncGenerator%");r&&(n=d(r.prototype))}return C[t]=n,n},f={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},y=n(22698),w=n(22786),H=y.call(Function.call,Array.prototype.concat),_=y.call(Function.apply,Array.prototype.splice),v=y.call(Function.call,String.prototype.replace),E=y.call(Function.call,String.prototype.slice),L=y.call(Function.call,RegExp.prototype.exec),b=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,k=/\\(\\)?/g,S=function(e){var t=E(e,0,1),n=E(e,-1);if("%"===t&&"%"!==n)throw new r("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new r("invalid intrinsic syntax, expected opening `%`");var o=[];return v(e,b,(function(e,t,n,r){o[o.length]=n?v(r,k,"$1"):t||e})),o},M=function(e,t){var n,o=e;if(w(f,o)&&(o="%"+(n=f[o])[0]+"%"),w(C,o)){var a=C[o];if(a===p&&(a=g(o)),void 0===a&&!t)throw new i("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:o,value:a}}throw new r("intrinsic "+e+" does not exist!")};e.exports=function(e,t){if("string"!=typeof e||0===e.length)throw new i("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new i('"allowMissing" argument must be a boolean');if(null===L(/^%?[^%]*%?$/,e))throw new r("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var n=S(e),o=n.length>0?n[0]:"",a=M("%"+o+"%",t),s=a.name,l=a.value,m=!1,u=a.alias;u&&(o=u[0],_(n,H([0,1],u)));for(var d=1,p=!0;d=n.length){var y=c(l,h);l=(p=!!y)&&"get"in y&&!("originalValue"in y.get)?y.get:l[h]}else p=w(l,h),l=l[h];p&&!m&&(C[s]=l)}}return l}},49248:e=>{e.exports&&(e.exports=function(){var e=3,t=4,n=12,o=13,r=16,a=17;function i(e,t){void 0===t&&(t=0);var n=e.charCodeAt(t);if(55296<=n&&n<=56319&&t=1){var r=n;return 55296<=(o=e.charCodeAt(t-1))&&o<=56319?1024*(o-55296)+(r-56320)+65536:r}return n}function s(i,s,c){var l=[i].concat(s).concat([c]),m=l[l.length-2],u=c,d=l.lastIndexOf(14);if(d>1&&l.slice(1,d).every((function(t){return t==e}))&&-1==[e,o,a].indexOf(i))return 2;var p=l.lastIndexOf(t);if(p>0&&l.slice(1,p).every((function(e){return e==t}))&&-1==[n,t].indexOf(m))return l.filter((function(e){return e==t})).length%2==1?3:4;if(0==m&&1==u)return 0;if(2==m||0==m||1==m)return 14==u&&s.every((function(t){return t==e}))?2:1;if(2==u||0==u||1==u)return 1;if(6==m&&(6==u||7==u||9==u||10==u))return 0;if(!(9!=m&&7!=m||7!=u&&8!=u))return 0;if((10==m||8==m)&&8==u)return 0;if(u==e||15==u)return 0;if(5==u)return 0;if(m==n)return 0;var h=-1!=l.indexOf(e)?l.lastIndexOf(e)-1:l.length-2;return-1!=[o,a].indexOf(l[h])&&l.slice(h+1,-1).every((function(t){return t==e}))&&14==u||15==m&&-1!=[r,a].indexOf(u)?0:-1!=s.indexOf(t)?2:m==t&&u==t?0:1}function c(i){return 1536<=i&&i<=1541||1757==i||1807==i||2274==i||3406==i||69821==i||70082<=i&&i<=70083||72250==i||72326<=i&&i<=72329||73030==i?n:13==i?0:10==i?1:0<=i&&i<=9||11<=i&&i<=12||14<=i&&i<=31||127<=i&&i<=159||173==i||1564==i||6158==i||8203==i||8206<=i&&i<=8207||8232==i||8233==i||8234<=i&&i<=8238||8288<=i&&i<=8292||8293==i||8294<=i&&i<=8303||55296<=i&&i<=57343||65279==i||65520<=i&&i<=65528||65529<=i&&i<=65531||113824<=i&&i<=113827||119155<=i&&i<=119162||917504==i||917505==i||917506<=i&&i<=917535||917632<=i&&i<=917759||918e3<=i&&i<=921599?2:768<=i&&i<=879||1155<=i&&i<=1159||1160<=i&&i<=1161||1425<=i&&i<=1469||1471==i||1473<=i&&i<=1474||1476<=i&&i<=1477||1479==i||1552<=i&&i<=1562||1611<=i&&i<=1631||1648==i||1750<=i&&i<=1756||1759<=i&&i<=1764||1767<=i&&i<=1768||1770<=i&&i<=1773||1809==i||1840<=i&&i<=1866||1958<=i&&i<=1968||2027<=i&&i<=2035||2070<=i&&i<=2073||2075<=i&&i<=2083||2085<=i&&i<=2087||2089<=i&&i<=2093||2137<=i&&i<=2139||2260<=i&&i<=2273||2275<=i&&i<=2306||2362==i||2364==i||2369<=i&&i<=2376||2381==i||2385<=i&&i<=2391||2402<=i&&i<=2403||2433==i||2492==i||2494==i||2497<=i&&i<=2500||2509==i||2519==i||2530<=i&&i<=2531||2561<=i&&i<=2562||2620==i||2625<=i&&i<=2626||2631<=i&&i<=2632||2635<=i&&i<=2637||2641==i||2672<=i&&i<=2673||2677==i||2689<=i&&i<=2690||2748==i||2753<=i&&i<=2757||2759<=i&&i<=2760||2765==i||2786<=i&&i<=2787||2810<=i&&i<=2815||2817==i||2876==i||2878==i||2879==i||2881<=i&&i<=2884||2893==i||2902==i||2903==i||2914<=i&&i<=2915||2946==i||3006==i||3008==i||3021==i||3031==i||3072==i||3134<=i&&i<=3136||3142<=i&&i<=3144||3146<=i&&i<=3149||3157<=i&&i<=3158||3170<=i&&i<=3171||3201==i||3260==i||3263==i||3266==i||3270==i||3276<=i&&i<=3277||3285<=i&&i<=3286||3298<=i&&i<=3299||3328<=i&&i<=3329||3387<=i&&i<=3388||3390==i||3393<=i&&i<=3396||3405==i||3415==i||3426<=i&&i<=3427||3530==i||3535==i||3538<=i&&i<=3540||3542==i||3551==i||3633==i||3636<=i&&i<=3642||3655<=i&&i<=3662||3761==i||3764<=i&&i<=3769||3771<=i&&i<=3772||3784<=i&&i<=3789||3864<=i&&i<=3865||3893==i||3895==i||3897==i||3953<=i&&i<=3966||3968<=i&&i<=3972||3974<=i&&i<=3975||3981<=i&&i<=3991||3993<=i&&i<=4028||4038==i||4141<=i&&i<=4144||4146<=i&&i<=4151||4153<=i&&i<=4154||4157<=i&&i<=4158||4184<=i&&i<=4185||4190<=i&&i<=4192||4209<=i&&i<=4212||4226==i||4229<=i&&i<=4230||4237==i||4253==i||4957<=i&&i<=4959||5906<=i&&i<=5908||5938<=i&&i<=5940||5970<=i&&i<=5971||6002<=i&&i<=6003||6068<=i&&i<=6069||6071<=i&&i<=6077||6086==i||6089<=i&&i<=6099||6109==i||6155<=i&&i<=6157||6277<=i&&i<=6278||6313==i||6432<=i&&i<=6434||6439<=i&&i<=6440||6450==i||6457<=i&&i<=6459||6679<=i&&i<=6680||6683==i||6742==i||6744<=i&&i<=6750||6752==i||6754==i||6757<=i&&i<=6764||6771<=i&&i<=6780||6783==i||6832<=i&&i<=6845||6846==i||6912<=i&&i<=6915||6964==i||6966<=i&&i<=6970||6972==i||6978==i||7019<=i&&i<=7027||7040<=i&&i<=7041||7074<=i&&i<=7077||7080<=i&&i<=7081||7083<=i&&i<=7085||7142==i||7144<=i&&i<=7145||7149==i||7151<=i&&i<=7153||7212<=i&&i<=7219||7222<=i&&i<=7223||7376<=i&&i<=7378||7380<=i&&i<=7392||7394<=i&&i<=7400||7405==i||7412==i||7416<=i&&i<=7417||7616<=i&&i<=7673||7675<=i&&i<=7679||8204==i||8400<=i&&i<=8412||8413<=i&&i<=8416||8417==i||8418<=i&&i<=8420||8421<=i&&i<=8432||11503<=i&&i<=11505||11647==i||11744<=i&&i<=11775||12330<=i&&i<=12333||12334<=i&&i<=12335||12441<=i&&i<=12442||42607==i||42608<=i&&i<=42610||42612<=i&&i<=42621||42654<=i&&i<=42655||42736<=i&&i<=42737||43010==i||43014==i||43019==i||43045<=i&&i<=43046||43204<=i&&i<=43205||43232<=i&&i<=43249||43302<=i&&i<=43309||43335<=i&&i<=43345||43392<=i&&i<=43394||43443==i||43446<=i&&i<=43449||43452==i||43493==i||43561<=i&&i<=43566||43569<=i&&i<=43570||43573<=i&&i<=43574||43587==i||43596==i||43644==i||43696==i||43698<=i&&i<=43700||43703<=i&&i<=43704||43710<=i&&i<=43711||43713==i||43756<=i&&i<=43757||43766==i||44005==i||44008==i||44013==i||64286==i||65024<=i&&i<=65039||65056<=i&&i<=65071||65438<=i&&i<=65439||66045==i||66272==i||66422<=i&&i<=66426||68097<=i&&i<=68099||68101<=i&&i<=68102||68108<=i&&i<=68111||68152<=i&&i<=68154||68159==i||68325<=i&&i<=68326||69633==i||69688<=i&&i<=69702||69759<=i&&i<=69761||69811<=i&&i<=69814||69817<=i&&i<=69818||69888<=i&&i<=69890||69927<=i&&i<=69931||69933<=i&&i<=69940||70003==i||70016<=i&&i<=70017||70070<=i&&i<=70078||70090<=i&&i<=70092||70191<=i&&i<=70193||70196==i||70198<=i&&i<=70199||70206==i||70367==i||70371<=i&&i<=70378||70400<=i&&i<=70401||70460==i||70462==i||70464==i||70487==i||70502<=i&&i<=70508||70512<=i&&i<=70516||70712<=i&&i<=70719||70722<=i&&i<=70724||70726==i||70832==i||70835<=i&&i<=70840||70842==i||70845==i||70847<=i&&i<=70848||70850<=i&&i<=70851||71087==i||71090<=i&&i<=71093||71100<=i&&i<=71101||71103<=i&&i<=71104||71132<=i&&i<=71133||71219<=i&&i<=71226||71229==i||71231<=i&&i<=71232||71339==i||71341==i||71344<=i&&i<=71349||71351==i||71453<=i&&i<=71455||71458<=i&&i<=71461||71463<=i&&i<=71467||72193<=i&&i<=72198||72201<=i&&i<=72202||72243<=i&&i<=72248||72251<=i&&i<=72254||72263==i||72273<=i&&i<=72278||72281<=i&&i<=72283||72330<=i&&i<=72342||72344<=i&&i<=72345||72752<=i&&i<=72758||72760<=i&&i<=72765||72767==i||72850<=i&&i<=72871||72874<=i&&i<=72880||72882<=i&&i<=72883||72885<=i&&i<=72886||73009<=i&&i<=73014||73018==i||73020<=i&&i<=73021||73023<=i&&i<=73029||73031==i||92912<=i&&i<=92916||92976<=i&&i<=92982||94095<=i&&i<=94098||113821<=i&&i<=113822||119141==i||119143<=i&&i<=119145||119150<=i&&i<=119154||119163<=i&&i<=119170||119173<=i&&i<=119179||119210<=i&&i<=119213||119362<=i&&i<=119364||121344<=i&&i<=121398||121403<=i&&i<=121452||121461==i||121476==i||121499<=i&&i<=121503||121505<=i&&i<=121519||122880<=i&&i<=122886||122888<=i&&i<=122904||122907<=i&&i<=122913||122915<=i&&i<=122916||122918<=i&&i<=122922||125136<=i&&i<=125142||125252<=i&&i<=125258||917536<=i&&i<=917631||917760<=i&&i<=917999?e:127462<=i&&i<=127487?t:2307==i||2363==i||2366<=i&&i<=2368||2377<=i&&i<=2380||2382<=i&&i<=2383||2434<=i&&i<=2435||2495<=i&&i<=2496||2503<=i&&i<=2504||2507<=i&&i<=2508||2563==i||2622<=i&&i<=2624||2691==i||2750<=i&&i<=2752||2761==i||2763<=i&&i<=2764||2818<=i&&i<=2819||2880==i||2887<=i&&i<=2888||2891<=i&&i<=2892||3007==i||3009<=i&&i<=3010||3014<=i&&i<=3016||3018<=i&&i<=3020||3073<=i&&i<=3075||3137<=i&&i<=3140||3202<=i&&i<=3203||3262==i||3264<=i&&i<=3265||3267<=i&&i<=3268||3271<=i&&i<=3272||3274<=i&&i<=3275||3330<=i&&i<=3331||3391<=i&&i<=3392||3398<=i&&i<=3400||3402<=i&&i<=3404||3458<=i&&i<=3459||3536<=i&&i<=3537||3544<=i&&i<=3550||3570<=i&&i<=3571||3635==i||3763==i||3902<=i&&i<=3903||3967==i||4145==i||4155<=i&&i<=4156||4182<=i&&i<=4183||4228==i||6070==i||6078<=i&&i<=6085||6087<=i&&i<=6088||6435<=i&&i<=6438||6441<=i&&i<=6443||6448<=i&&i<=6449||6451<=i&&i<=6456||6681<=i&&i<=6682||6741==i||6743==i||6765<=i&&i<=6770||6916==i||6965==i||6971==i||6973<=i&&i<=6977||6979<=i&&i<=6980||7042==i||7073==i||7078<=i&&i<=7079||7082==i||7143==i||7146<=i&&i<=7148||7150==i||7154<=i&&i<=7155||7204<=i&&i<=7211||7220<=i&&i<=7221||7393==i||7410<=i&&i<=7411||7415==i||43043<=i&&i<=43044||43047==i||43136<=i&&i<=43137||43188<=i&&i<=43203||43346<=i&&i<=43347||43395==i||43444<=i&&i<=43445||43450<=i&&i<=43451||43453<=i&&i<=43456||43567<=i&&i<=43568||43571<=i&&i<=43572||43597==i||43755==i||43758<=i&&i<=43759||43765==i||44003<=i&&i<=44004||44006<=i&&i<=44007||44009<=i&&i<=44010||44012==i||69632==i||69634==i||69762==i||69808<=i&&i<=69810||69815<=i&&i<=69816||69932==i||70018==i||70067<=i&&i<=70069||70079<=i&&i<=70080||70188<=i&&i<=70190||70194<=i&&i<=70195||70197==i||70368<=i&&i<=70370||70402<=i&&i<=70403||70463==i||70465<=i&&i<=70468||70471<=i&&i<=70472||70475<=i&&i<=70477||70498<=i&&i<=70499||70709<=i&&i<=70711||70720<=i&&i<=70721||70725==i||70833<=i&&i<=70834||70841==i||70843<=i&&i<=70844||70846==i||70849==i||71088<=i&&i<=71089||71096<=i&&i<=71099||71102==i||71216<=i&&i<=71218||71227<=i&&i<=71228||71230==i||71340==i||71342<=i&&i<=71343||71350==i||71456<=i&&i<=71457||71462==i||72199<=i&&i<=72200||72249==i||72279<=i&&i<=72280||72343==i||72751==i||72766==i||72873==i||72881==i||72884==i||94033<=i&&i<=94078||119142==i||119149==i?5:4352<=i&&i<=4447||43360<=i&&i<=43388?6:4448<=i&&i<=4519||55216<=i&&i<=55238?7:4520<=i&&i<=4607||55243<=i&&i<=55291?8:44032==i||44060==i||44088==i||44116==i||44144==i||44172==i||44200==i||44228==i||44256==i||44284==i||44312==i||44340==i||44368==i||44396==i||44424==i||44452==i||44480==i||44508==i||44536==i||44564==i||44592==i||44620==i||44648==i||44676==i||44704==i||44732==i||44760==i||44788==i||44816==i||44844==i||44872==i||44900==i||44928==i||44956==i||44984==i||45012==i||45040==i||45068==i||45096==i||45124==i||45152==i||45180==i||45208==i||45236==i||45264==i||45292==i||45320==i||45348==i||45376==i||45404==i||45432==i||45460==i||45488==i||45516==i||45544==i||45572==i||45600==i||45628==i||45656==i||45684==i||45712==i||45740==i||45768==i||45796==i||45824==i||45852==i||45880==i||45908==i||45936==i||45964==i||45992==i||46020==i||46048==i||46076==i||46104==i||46132==i||46160==i||46188==i||46216==i||46244==i||46272==i||46300==i||46328==i||46356==i||46384==i||46412==i||46440==i||46468==i||46496==i||46524==i||46552==i||46580==i||46608==i||46636==i||46664==i||46692==i||46720==i||46748==i||46776==i||46804==i||46832==i||46860==i||46888==i||46916==i||46944==i||46972==i||47e3==i||47028==i||47056==i||47084==i||47112==i||47140==i||47168==i||47196==i||47224==i||47252==i||47280==i||47308==i||47336==i||47364==i||47392==i||47420==i||47448==i||47476==i||47504==i||47532==i||47560==i||47588==i||47616==i||47644==i||47672==i||47700==i||47728==i||47756==i||47784==i||47812==i||47840==i||47868==i||47896==i||47924==i||47952==i||47980==i||48008==i||48036==i||48064==i||48092==i||48120==i||48148==i||48176==i||48204==i||48232==i||48260==i||48288==i||48316==i||48344==i||48372==i||48400==i||48428==i||48456==i||48484==i||48512==i||48540==i||48568==i||48596==i||48624==i||48652==i||48680==i||48708==i||48736==i||48764==i||48792==i||48820==i||48848==i||48876==i||48904==i||48932==i||48960==i||48988==i||49016==i||49044==i||49072==i||49100==i||49128==i||49156==i||49184==i||49212==i||49240==i||49268==i||49296==i||49324==i||49352==i||49380==i||49408==i||49436==i||49464==i||49492==i||49520==i||49548==i||49576==i||49604==i||49632==i||49660==i||49688==i||49716==i||49744==i||49772==i||49800==i||49828==i||49856==i||49884==i||49912==i||49940==i||49968==i||49996==i||50024==i||50052==i||50080==i||50108==i||50136==i||50164==i||50192==i||50220==i||50248==i||50276==i||50304==i||50332==i||50360==i||50388==i||50416==i||50444==i||50472==i||50500==i||50528==i||50556==i||50584==i||50612==i||50640==i||50668==i||50696==i||50724==i||50752==i||50780==i||50808==i||50836==i||50864==i||50892==i||50920==i||50948==i||50976==i||51004==i||51032==i||51060==i||51088==i||51116==i||51144==i||51172==i||51200==i||51228==i||51256==i||51284==i||51312==i||51340==i||51368==i||51396==i||51424==i||51452==i||51480==i||51508==i||51536==i||51564==i||51592==i||51620==i||51648==i||51676==i||51704==i||51732==i||51760==i||51788==i||51816==i||51844==i||51872==i||51900==i||51928==i||51956==i||51984==i||52012==i||52040==i||52068==i||52096==i||52124==i||52152==i||52180==i||52208==i||52236==i||52264==i||52292==i||52320==i||52348==i||52376==i||52404==i||52432==i||52460==i||52488==i||52516==i||52544==i||52572==i||52600==i||52628==i||52656==i||52684==i||52712==i||52740==i||52768==i||52796==i||52824==i||52852==i||52880==i||52908==i||52936==i||52964==i||52992==i||53020==i||53048==i||53076==i||53104==i||53132==i||53160==i||53188==i||53216==i||53244==i||53272==i||53300==i||53328==i||53356==i||53384==i||53412==i||53440==i||53468==i||53496==i||53524==i||53552==i||53580==i||53608==i||53636==i||53664==i||53692==i||53720==i||53748==i||53776==i||53804==i||53832==i||53860==i||53888==i||53916==i||53944==i||53972==i||54e3==i||54028==i||54056==i||54084==i||54112==i||54140==i||54168==i||54196==i||54224==i||54252==i||54280==i||54308==i||54336==i||54364==i||54392==i||54420==i||54448==i||54476==i||54504==i||54532==i||54560==i||54588==i||54616==i||54644==i||54672==i||54700==i||54728==i||54756==i||54784==i||54812==i||54840==i||54868==i||54896==i||54924==i||54952==i||54980==i||55008==i||55036==i||55064==i||55092==i||55120==i||55148==i||55176==i?9:44033<=i&&i<=44059||44061<=i&&i<=44087||44089<=i&&i<=44115||44117<=i&&i<=44143||44145<=i&&i<=44171||44173<=i&&i<=44199||44201<=i&&i<=44227||44229<=i&&i<=44255||44257<=i&&i<=44283||44285<=i&&i<=44311||44313<=i&&i<=44339||44341<=i&&i<=44367||44369<=i&&i<=44395||44397<=i&&i<=44423||44425<=i&&i<=44451||44453<=i&&i<=44479||44481<=i&&i<=44507||44509<=i&&i<=44535||44537<=i&&i<=44563||44565<=i&&i<=44591||44593<=i&&i<=44619||44621<=i&&i<=44647||44649<=i&&i<=44675||44677<=i&&i<=44703||44705<=i&&i<=44731||44733<=i&&i<=44759||44761<=i&&i<=44787||44789<=i&&i<=44815||44817<=i&&i<=44843||44845<=i&&i<=44871||44873<=i&&i<=44899||44901<=i&&i<=44927||44929<=i&&i<=44955||44957<=i&&i<=44983||44985<=i&&i<=45011||45013<=i&&i<=45039||45041<=i&&i<=45067||45069<=i&&i<=45095||45097<=i&&i<=45123||45125<=i&&i<=45151||45153<=i&&i<=45179||45181<=i&&i<=45207||45209<=i&&i<=45235||45237<=i&&i<=45263||45265<=i&&i<=45291||45293<=i&&i<=45319||45321<=i&&i<=45347||45349<=i&&i<=45375||45377<=i&&i<=45403||45405<=i&&i<=45431||45433<=i&&i<=45459||45461<=i&&i<=45487||45489<=i&&i<=45515||45517<=i&&i<=45543||45545<=i&&i<=45571||45573<=i&&i<=45599||45601<=i&&i<=45627||45629<=i&&i<=45655||45657<=i&&i<=45683||45685<=i&&i<=45711||45713<=i&&i<=45739||45741<=i&&i<=45767||45769<=i&&i<=45795||45797<=i&&i<=45823||45825<=i&&i<=45851||45853<=i&&i<=45879||45881<=i&&i<=45907||45909<=i&&i<=45935||45937<=i&&i<=45963||45965<=i&&i<=45991||45993<=i&&i<=46019||46021<=i&&i<=46047||46049<=i&&i<=46075||46077<=i&&i<=46103||46105<=i&&i<=46131||46133<=i&&i<=46159||46161<=i&&i<=46187||46189<=i&&i<=46215||46217<=i&&i<=46243||46245<=i&&i<=46271||46273<=i&&i<=46299||46301<=i&&i<=46327||46329<=i&&i<=46355||46357<=i&&i<=46383||46385<=i&&i<=46411||46413<=i&&i<=46439||46441<=i&&i<=46467||46469<=i&&i<=46495||46497<=i&&i<=46523||46525<=i&&i<=46551||46553<=i&&i<=46579||46581<=i&&i<=46607||46609<=i&&i<=46635||46637<=i&&i<=46663||46665<=i&&i<=46691||46693<=i&&i<=46719||46721<=i&&i<=46747||46749<=i&&i<=46775||46777<=i&&i<=46803||46805<=i&&i<=46831||46833<=i&&i<=46859||46861<=i&&i<=46887||46889<=i&&i<=46915||46917<=i&&i<=46943||46945<=i&&i<=46971||46973<=i&&i<=46999||47001<=i&&i<=47027||47029<=i&&i<=47055||47057<=i&&i<=47083||47085<=i&&i<=47111||47113<=i&&i<=47139||47141<=i&&i<=47167||47169<=i&&i<=47195||47197<=i&&i<=47223||47225<=i&&i<=47251||47253<=i&&i<=47279||47281<=i&&i<=47307||47309<=i&&i<=47335||47337<=i&&i<=47363||47365<=i&&i<=47391||47393<=i&&i<=47419||47421<=i&&i<=47447||47449<=i&&i<=47475||47477<=i&&i<=47503||47505<=i&&i<=47531||47533<=i&&i<=47559||47561<=i&&i<=47587||47589<=i&&i<=47615||47617<=i&&i<=47643||47645<=i&&i<=47671||47673<=i&&i<=47699||47701<=i&&i<=47727||47729<=i&&i<=47755||47757<=i&&i<=47783||47785<=i&&i<=47811||47813<=i&&i<=47839||47841<=i&&i<=47867||47869<=i&&i<=47895||47897<=i&&i<=47923||47925<=i&&i<=47951||47953<=i&&i<=47979||47981<=i&&i<=48007||48009<=i&&i<=48035||48037<=i&&i<=48063||48065<=i&&i<=48091||48093<=i&&i<=48119||48121<=i&&i<=48147||48149<=i&&i<=48175||48177<=i&&i<=48203||48205<=i&&i<=48231||48233<=i&&i<=48259||48261<=i&&i<=48287||48289<=i&&i<=48315||48317<=i&&i<=48343||48345<=i&&i<=48371||48373<=i&&i<=48399||48401<=i&&i<=48427||48429<=i&&i<=48455||48457<=i&&i<=48483||48485<=i&&i<=48511||48513<=i&&i<=48539||48541<=i&&i<=48567||48569<=i&&i<=48595||48597<=i&&i<=48623||48625<=i&&i<=48651||48653<=i&&i<=48679||48681<=i&&i<=48707||48709<=i&&i<=48735||48737<=i&&i<=48763||48765<=i&&i<=48791||48793<=i&&i<=48819||48821<=i&&i<=48847||48849<=i&&i<=48875||48877<=i&&i<=48903||48905<=i&&i<=48931||48933<=i&&i<=48959||48961<=i&&i<=48987||48989<=i&&i<=49015||49017<=i&&i<=49043||49045<=i&&i<=49071||49073<=i&&i<=49099||49101<=i&&i<=49127||49129<=i&&i<=49155||49157<=i&&i<=49183||49185<=i&&i<=49211||49213<=i&&i<=49239||49241<=i&&i<=49267||49269<=i&&i<=49295||49297<=i&&i<=49323||49325<=i&&i<=49351||49353<=i&&i<=49379||49381<=i&&i<=49407||49409<=i&&i<=49435||49437<=i&&i<=49463||49465<=i&&i<=49491||49493<=i&&i<=49519||49521<=i&&i<=49547||49549<=i&&i<=49575||49577<=i&&i<=49603||49605<=i&&i<=49631||49633<=i&&i<=49659||49661<=i&&i<=49687||49689<=i&&i<=49715||49717<=i&&i<=49743||49745<=i&&i<=49771||49773<=i&&i<=49799||49801<=i&&i<=49827||49829<=i&&i<=49855||49857<=i&&i<=49883||49885<=i&&i<=49911||49913<=i&&i<=49939||49941<=i&&i<=49967||49969<=i&&i<=49995||49997<=i&&i<=50023||50025<=i&&i<=50051||50053<=i&&i<=50079||50081<=i&&i<=50107||50109<=i&&i<=50135||50137<=i&&i<=50163||50165<=i&&i<=50191||50193<=i&&i<=50219||50221<=i&&i<=50247||50249<=i&&i<=50275||50277<=i&&i<=50303||50305<=i&&i<=50331||50333<=i&&i<=50359||50361<=i&&i<=50387||50389<=i&&i<=50415||50417<=i&&i<=50443||50445<=i&&i<=50471||50473<=i&&i<=50499||50501<=i&&i<=50527||50529<=i&&i<=50555||50557<=i&&i<=50583||50585<=i&&i<=50611||50613<=i&&i<=50639||50641<=i&&i<=50667||50669<=i&&i<=50695||50697<=i&&i<=50723||50725<=i&&i<=50751||50753<=i&&i<=50779||50781<=i&&i<=50807||50809<=i&&i<=50835||50837<=i&&i<=50863||50865<=i&&i<=50891||50893<=i&&i<=50919||50921<=i&&i<=50947||50949<=i&&i<=50975||50977<=i&&i<=51003||51005<=i&&i<=51031||51033<=i&&i<=51059||51061<=i&&i<=51087||51089<=i&&i<=51115||51117<=i&&i<=51143||51145<=i&&i<=51171||51173<=i&&i<=51199||51201<=i&&i<=51227||51229<=i&&i<=51255||51257<=i&&i<=51283||51285<=i&&i<=51311||51313<=i&&i<=51339||51341<=i&&i<=51367||51369<=i&&i<=51395||51397<=i&&i<=51423||51425<=i&&i<=51451||51453<=i&&i<=51479||51481<=i&&i<=51507||51509<=i&&i<=51535||51537<=i&&i<=51563||51565<=i&&i<=51591||51593<=i&&i<=51619||51621<=i&&i<=51647||51649<=i&&i<=51675||51677<=i&&i<=51703||51705<=i&&i<=51731||51733<=i&&i<=51759||51761<=i&&i<=51787||51789<=i&&i<=51815||51817<=i&&i<=51843||51845<=i&&i<=51871||51873<=i&&i<=51899||51901<=i&&i<=51927||51929<=i&&i<=51955||51957<=i&&i<=51983||51985<=i&&i<=52011||52013<=i&&i<=52039||52041<=i&&i<=52067||52069<=i&&i<=52095||52097<=i&&i<=52123||52125<=i&&i<=52151||52153<=i&&i<=52179||52181<=i&&i<=52207||52209<=i&&i<=52235||52237<=i&&i<=52263||52265<=i&&i<=52291||52293<=i&&i<=52319||52321<=i&&i<=52347||52349<=i&&i<=52375||52377<=i&&i<=52403||52405<=i&&i<=52431||52433<=i&&i<=52459||52461<=i&&i<=52487||52489<=i&&i<=52515||52517<=i&&i<=52543||52545<=i&&i<=52571||52573<=i&&i<=52599||52601<=i&&i<=52627||52629<=i&&i<=52655||52657<=i&&i<=52683||52685<=i&&i<=52711||52713<=i&&i<=52739||52741<=i&&i<=52767||52769<=i&&i<=52795||52797<=i&&i<=52823||52825<=i&&i<=52851||52853<=i&&i<=52879||52881<=i&&i<=52907||52909<=i&&i<=52935||52937<=i&&i<=52963||52965<=i&&i<=52991||52993<=i&&i<=53019||53021<=i&&i<=53047||53049<=i&&i<=53075||53077<=i&&i<=53103||53105<=i&&i<=53131||53133<=i&&i<=53159||53161<=i&&i<=53187||53189<=i&&i<=53215||53217<=i&&i<=53243||53245<=i&&i<=53271||53273<=i&&i<=53299||53301<=i&&i<=53327||53329<=i&&i<=53355||53357<=i&&i<=53383||53385<=i&&i<=53411||53413<=i&&i<=53439||53441<=i&&i<=53467||53469<=i&&i<=53495||53497<=i&&i<=53523||53525<=i&&i<=53551||53553<=i&&i<=53579||53581<=i&&i<=53607||53609<=i&&i<=53635||53637<=i&&i<=53663||53665<=i&&i<=53691||53693<=i&&i<=53719||53721<=i&&i<=53747||53749<=i&&i<=53775||53777<=i&&i<=53803||53805<=i&&i<=53831||53833<=i&&i<=53859||53861<=i&&i<=53887||53889<=i&&i<=53915||53917<=i&&i<=53943||53945<=i&&i<=53971||53973<=i&&i<=53999||54001<=i&&i<=54027||54029<=i&&i<=54055||54057<=i&&i<=54083||54085<=i&&i<=54111||54113<=i&&i<=54139||54141<=i&&i<=54167||54169<=i&&i<=54195||54197<=i&&i<=54223||54225<=i&&i<=54251||54253<=i&&i<=54279||54281<=i&&i<=54307||54309<=i&&i<=54335||54337<=i&&i<=54363||54365<=i&&i<=54391||54393<=i&&i<=54419||54421<=i&&i<=54447||54449<=i&&i<=54475||54477<=i&&i<=54503||54505<=i&&i<=54531||54533<=i&&i<=54559||54561<=i&&i<=54587||54589<=i&&i<=54615||54617<=i&&i<=54643||54645<=i&&i<=54671||54673<=i&&i<=54699||54701<=i&&i<=54727||54729<=i&&i<=54755||54757<=i&&i<=54783||54785<=i&&i<=54811||54813<=i&&i<=54839||54841<=i&&i<=54867||54869<=i&&i<=54895||54897<=i&&i<=54923||54925<=i&&i<=54951||54953<=i&&i<=54979||54981<=i&&i<=55007||55009<=i&&i<=55035||55037<=i&&i<=55063||55065<=i&&i<=55091||55093<=i&&i<=55119||55121<=i&&i<=55147||55149<=i&&i<=55175||55177<=i&&i<=55203?10:9757==i||9977==i||9994<=i&&i<=9997||127877==i||127938<=i&&i<=127940||127943==i||127946<=i&&i<=127948||128066<=i&&i<=128067||128070<=i&&i<=128080||128110==i||128112<=i&&i<=128120||128124==i||128129<=i&&i<=128131||128133<=i&&i<=128135||128170==i||128372<=i&&i<=128373||128378==i||128400==i||128405<=i&&i<=128406||128581<=i&&i<=128583||128587<=i&&i<=128591||128675==i||128692<=i&&i<=128694||128704==i||128716==i||129304<=i&&i<=129308||129310<=i&&i<=129311||129318==i||129328<=i&&i<=129337||129341<=i&&i<=129342||129489<=i&&i<=129501?o:127995<=i&&i<=127999?14:8205==i?15:9792==i||9794==i||9877<=i&&i<=9878||9992==i||10084==i||127752==i||127806==i||127859==i||127891==i||127908==i||127912==i||127979==i||127981==i||128139==i||128187<=i&&i<=128188||128295==i||128300==i||128488==i||128640==i||128658==i?r:128102<=i&&i<=128105?a:11}return this.nextBreak=function(e,t){if(void 0===t&&(t=0),t<0)return 0;if(t>=e.length-1)return e.length;for(var n,o,r=c(i(e,t)),a=[],l=t+1;l{"use strict";t.Z=function(e){var t=e.size,n=void 0===t?24:t,o=e.onClick,s=(e.icon,e.className),c=function(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o{"use strict";t.Z=function(e){var t=e.size,n=void 0===t?24:t,o=e.onClick,s=(e.icon,e.className),c=function(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o{"use strict";t.Z=function(e){var t=e.size,n=void 0===t?24:t,o=e.onClick,s=(e.icon,e.className),c=function(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o{"use strict";var o="undefined"!=typeof Symbol&&Symbol,r=n(69578);e.exports=function(){return"function"==typeof o&&"function"==typeof Symbol&&"symbol"==typeof o("foo")&&"symbol"==typeof Symbol("bar")&&r()}},69578:e=>{"use strict";e.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var o=Object.getOwnPropertySymbols(e);if(1!==o.length||o[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var r=Object.getOwnPropertyDescriptor(e,t);if(42!==r.value||!0!==r.enumerable)return!1}return!0}},22786:(e,t,n)=>{"use strict";var o=n(22698);e.exports=o.call(Function.call,Object.prototype.hasOwnProperty)},31741:(e,t,n)=>{var o="function"==typeof Map&&Map.prototype,r=Object.getOwnPropertyDescriptor&&o?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,a=o&&r&&"function"==typeof r.get?r.get:null,i=o&&Map.prototype.forEach,s="function"==typeof Set&&Set.prototype,c=Object.getOwnPropertyDescriptor&&s?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,l=s&&c&&"function"==typeof c.get?c.get:null,m=s&&Set.prototype.forEach,u="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,d="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,p="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,h=Boolean.prototype.valueOf,C=Object.prototype.toString,g=Function.prototype.toString,f=String.prototype.match,y=String.prototype.slice,w=String.prototype.replace,H=String.prototype.toUpperCase,_=String.prototype.toLowerCase,v=RegExp.prototype.test,E=Array.prototype.concat,L=Array.prototype.join,b=Array.prototype.slice,k=Math.floor,S="function"==typeof BigInt?BigInt.prototype.valueOf:null,M=Object.getOwnPropertySymbols,N="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,x="function"==typeof Symbol&&"object"==typeof Symbol.iterator,T="function"==typeof Symbol&&Symbol.toStringTag&&(Symbol.toStringTag,1)?Symbol.toStringTag:null,A=Object.prototype.propertyIsEnumerable,I=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function O(e,t){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||v.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var o=e<0?-k(-e):k(e);if(o!==e){var r=String(o),a=y.call(t,r.length+1);return w.call(r,n,"$&_")+"."+w.call(w.call(a,/([0-9]{3})/g,"$&_"),/_$/,"")}}return w.call(t,n,"$&_")}var P=n(50189),R=P.custom,V=z(R)?R:null;function j(e,t,n){var o="double"===(n.quoteStyle||t)?'"':"'";return o+e+o}function D(e){return w.call(String(e),/"/g,""")}function Z(e){return!("[object Array]"!==U(e)||T&&"object"==typeof e&&T in e)}function B(e){return!("[object RegExp]"!==U(e)||T&&"object"==typeof e&&T in e)}function z(e){if(x)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!N)return!1;try{return N.call(e),!0}catch(e){}return!1}e.exports=function e(t,n,o,r){var s=n||{};if(W(s,"quoteStyle")&&"single"!==s.quoteStyle&&"double"!==s.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(W(s,"maxStringLength")&&("number"==typeof s.maxStringLength?s.maxStringLength<0&&s.maxStringLength!==1/0:null!==s.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var c=!W(s,"customInspect")||s.customInspect;if("boolean"!=typeof c&&"symbol"!==c)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(W(s,"indent")&&null!==s.indent&&"\t"!==s.indent&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(W(s,"numericSeparator")&&"boolean"!=typeof s.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var C=s.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return Y(t,s);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var H=String(t);return C?O(t,H):H}if("bigint"==typeof t){var v=String(t)+"n";return C?O(t,v):v}var k=void 0===s.depth?5:s.depth;if(void 0===o&&(o=0),o>=k&&k>0&&"object"==typeof t)return Z(t)?"[Array]":"[Object]";var M,R=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;n=L.call(Array(e.indent+1)," ")}return{base:n,prev:L.call(Array(t+1),n)}}(s,o);if(void 0===r)r=[];else if(G(r,t)>=0)return"[Circular]";function F(t,n,a){if(n&&(r=b.call(r)).push(n),a){var i={depth:s.depth};return W(s,"quoteStyle")&&(i.quoteStyle=s.quoteStyle),e(t,i,o+1,r)}return e(t,s,o+1,r)}if("function"==typeof t&&!B(t)){var Q=function(e){if(e.name)return e.name;var t=f.call(g.call(e),/^function\s*([\w$]+)/);return t?t[1]:null}(t),ee=$(t,F);return"[Function"+(Q?": "+Q:" (anonymous)")+"]"+(ee.length>0?" { "+L.call(ee,", ")+" }":"")}if(z(t)){var te=x?w.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):N.call(t);return"object"!=typeof t||x?te:q(te)}if((M=t)&&"object"==typeof M&&("undefined"!=typeof HTMLElement&&M instanceof HTMLElement||"string"==typeof M.nodeName&&"function"==typeof M.getAttribute)){for(var ne="<"+_.call(String(t.nodeName)),oe=t.attributes||[],re=0;re",t.childNodes&&t.childNodes.length&&(ne+="..."),ne+""+_.call(String(t.nodeName))+">"}if(Z(t)){if(0===t.length)return"[]";var ae=$(t,F);return R&&!function(e){for(var t=0;t=0)return!1;return!0}(ae)?"["+X(ae,R)+"]":"[ "+L.call(ae,", ")+" ]"}if(function(e){return!("[object Error]"!==U(e)||T&&"object"==typeof e&&T in e)}(t)){var ie=$(t,F);return"cause"in Error.prototype||!("cause"in t)||A.call(t,"cause")?0===ie.length?"["+String(t)+"]":"{ ["+String(t)+"] "+L.call(ie,", ")+" }":"{ ["+String(t)+"] "+L.call(E.call("[cause]: "+F(t.cause),ie),", ")+" }"}if("object"==typeof t&&c){if(V&&"function"==typeof t[V]&&P)return P(t,{depth:k-o});if("symbol"!==c&&"function"==typeof t.inspect)return t.inspect()}if(function(e){if(!a||!e||"object"!=typeof e)return!1;try{a.call(e);try{l.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var se=[];return i.call(t,(function(e,n){se.push(F(n,t,!0)+" => "+F(e,t))})),K("Map",a.call(t),se,R)}if(function(e){if(!l||!e||"object"!=typeof e)return!1;try{l.call(e);try{a.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var ce=[];return m.call(t,(function(e){ce.push(F(e,t))})),K("Set",l.call(t),ce,R)}if(function(e){if(!u||!e||"object"!=typeof e)return!1;try{u.call(e,u);try{d.call(e,d)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return J("WeakMap");if(function(e){if(!d||!e||"object"!=typeof e)return!1;try{d.call(e,d);try{u.call(e,u)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return J("WeakSet");if(function(e){if(!p||!e||"object"!=typeof e)return!1;try{return p.call(e),!0}catch(e){}return!1}(t))return J("WeakRef");if(function(e){return!("[object Number]"!==U(e)||T&&"object"==typeof e&&T in e)}(t))return q(F(Number(t)));if(function(e){if(!e||"object"!=typeof e||!S)return!1;try{return S.call(e),!0}catch(e){}return!1}(t))return q(F(S.call(t)));if(function(e){return!("[object Boolean]"!==U(e)||T&&"object"==typeof e&&T in e)}(t))return q(h.call(t));if(function(e){return!("[object String]"!==U(e)||T&&"object"==typeof e&&T in e)}(t))return q(F(String(t)));if(!function(e){return!("[object Date]"!==U(e)||T&&"object"==typeof e&&T in e)}(t)&&!B(t)){var le=$(t,F),me=I?I(t)===Object.prototype:t instanceof Object||t.constructor===Object,ue=t instanceof Object?"":"null prototype",de=!me&&T&&Object(t)===t&&T in t?y.call(U(t),8,-1):ue?"Object":"",pe=(me||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(de||ue?"["+L.call(E.call([],de||[],ue||[]),": ")+"] ":"");return 0===le.length?pe+"{}":R?pe+"{"+X(le,R)+"}":pe+"{ "+L.call(le,", ")+" }"}return String(t)};var F=Object.prototype.hasOwnProperty||function(e){return e in this};function W(e,t){return F.call(e,t)}function U(e){return C.call(e)}function G(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,o=e.length;nt.maxStringLength){var n=e.length-t.maxStringLength,o="... "+n+" more character"+(n>1?"s":"");return Y(y.call(e,0,t.maxStringLength),t)+o}return j(w.call(w.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Q),"single",t)}function Q(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+H.call(t.toString(16))}function q(e){return"Object("+e+")"}function J(e){return e+" { ? }"}function K(e,t,n,o){return e+" ("+t+") {"+(o?X(n,o):L.call(n,", "))+"}"}function X(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+L.call(e,","+n)+"\n"+t.prev}function $(e,t){var n=Z(e),o=[];if(n){o.length=e.length;for(var r=0;r{"use strict";var o=n(25148);function r(){}function a(){}a.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,a,i){if(i!==o){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:r};return n.PropTypes=n,n}},7862:(e,t,n)=>{e.exports=n(31772)()},25148:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},38243:e=>{"use strict";var t=String.prototype.replace,n=/%20/g,o="RFC3986";e.exports={default:o,formatters:{RFC1738:function(e){return t.call(e,n,"+")},RFC3986:function(e){return String(e)}},RFC1738:"RFC1738",RFC3986:o}},79119:(e,t,n)=>{"use strict";var o=n(67576),r=n(93649),a=n(38243);e.exports={formats:a,parse:r,stringify:o}},93649:(e,t,n)=>{"use strict";var o=n(7173),r=Object.prototype.hasOwnProperty,a=Array.isArray,i={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:o.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},s=function(e){return e.replace(/(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},c=function(e,t){return e&&"string"==typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},l=function(e,t,n,o){if(e){var a=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,i=/(\[[^[\]]*])/g,s=n.depth>0&&/(\[[^[\]]*])/.exec(a),l=s?a.slice(0,s.index):a,m=[];if(l){if(!n.plainObjects&&r.call(Object.prototype,l)&&!n.allowPrototypes)return;m.push(l)}for(var u=0;n.depth>0&&null!==(s=i.exec(a))&&u=0;--a){var i,s=e[a];if("[]"===s&&n.parseArrays)i=[].concat(r);else{i=n.plainObjects?Object.create(null):{};var l="["===s.charAt(0)&&"]"===s.charAt(s.length-1)?s.slice(1,-1):s,m=parseInt(l,10);n.parseArrays||""!==l?!isNaN(m)&&s!==l&&String(m)===l&&m>=0&&n.parseArrays&&m<=n.arrayLimit?(i=[])[m]=r:"__proto__"!==l&&(i[l]=r):i={0:r}}r=i}return r}(m,t,n,o)}};e.exports=function(e,t){var n=function(e){if(!e)return i;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=void 0===e.charset?i.charset:e.charset;return{allowDots:void 0===e.allowDots?i.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:i.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:i.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:i.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:i.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:i.comma,decoder:"function"==typeof e.decoder?e.decoder:i.decoder,delimiter:"string"==typeof e.delimiter||o.isRegExp(e.delimiter)?e.delimiter:i.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:i.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:i.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:i.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:i.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:i.strictNullHandling}}(t);if(""===e||null==e)return n.plainObjects?Object.create(null):{};for(var m="string"==typeof e?function(e,t){var n,l={},m=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,u=t.parameterLimit===1/0?void 0:t.parameterLimit,d=m.split(t.delimiter,u),p=-1,h=t.charset;if(t.charsetSentinel)for(n=0;n-1&&(g=a(g)?[g]:g),r.call(l,C)?l[C]=o.combine(l[C],g):l[C]=g}return l}(e,n):e,u=n.plainObjects?Object.create(null):{},d=Object.keys(m),p=0;p{"use strict";var o=n(44852),r=n(7173),a=n(38243),i=Object.prototype.hasOwnProperty,s={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},c=Array.isArray,l=String.prototype.split,m=Array.prototype.push,u=function(e,t){m.apply(e,c(t)?t:[t])},d=Date.prototype.toISOString,p=a.default,h={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:r.encode,encodeValuesOnly:!1,format:p,formatter:a.formatters[p],indices:!1,serializeDate:function(e){return d.call(e)},skipNulls:!1,strictNullHandling:!1},C={},g=function e(t,n,a,i,s,m,d,p,g,f,y,w,H,_,v){for(var E,L=t,b=v,k=0,S=!1;void 0!==(b=b.get(C))&&!S;){var M=b.get(t);if(k+=1,void 0!==M){if(M===k)throw new RangeError("Cyclic object value");S=!0}void 0===b.get(C)&&(k=0)}if("function"==typeof d?L=d(n,L):L instanceof Date?L=f(L):"comma"===a&&c(L)&&(L=r.maybeMap(L,(function(e){return e instanceof Date?f(e):e}))),null===L){if(i)return m&&!H?m(n,h.encoder,_,"key",y):n;L=""}if("string"==typeof(E=L)||"number"==typeof E||"boolean"==typeof E||"symbol"==typeof E||"bigint"==typeof E||r.isBuffer(L)){if(m){var N=H?n:m(n,h.encoder,_,"key",y);if("comma"===a&&H){for(var x=l.call(String(L),","),T="",A=0;A0?L.join(",")||null:void 0}];else if(c(d))I=d;else{var P=Object.keys(L);I=p?P.sort(p):P}for(var R=0;R0?H+w:""}},7173:(e,t,n)=>{"use strict";var o=n(38243),r=Object.prototype.hasOwnProperty,a=Array.isArray,i=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),s=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},o=0;o1;){var t=e.pop(),n=t.obj[t.prop];if(a(n)){for(var o=[],r=0;r=48&&m<=57||m>=65&&m<=90||m>=97&&m<=122||a===o.RFC1738&&(40===m||41===m)?c+=s.charAt(l):m<128?c+=i[m]:m<2048?c+=i[192|m>>6]+i[128|63&m]:m<55296||m>=57344?c+=i[224|m>>12]+i[128|m>>6&63]+i[128|63&m]:(l+=1,m=65536+((1023&m)<<10|1023&s.charCodeAt(l)),c+=i[240|m>>18]+i[128|m>>12&63]+i[128|m>>6&63]+i[128|63&m])}return c},isBuffer:function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(a(e)){for(var n=[],o=0;o{"use strict";n.d(t,{M:()=>a,lr:()=>i});var o=n(99196),r=n(85597);function a(e){let{basename:t,children:n,history:a}=e;const[i,s]=(0,o.useState)({action:a.action,location:a.location});return(0,o.useLayoutEffect)((()=>a.listen(s)),[a]),(0,o.createElement)(r.F0,{basename:t,children:n,location:i.location,navigationType:i.action,navigator:a})}function i(e){let t=(0,o.useRef)(s(e)),n=(0,r.TH)(),a=(0,o.useMemo)((()=>{let e=s(n.search);for(let n of t.current.keys())e.has(n)||t.current.getAll(n).forEach((t=>{e.append(n,t)}));return e}),[n.search]),i=(0,r.s0)();return[a,(0,o.useCallback)(((e,t)=>{i("?"+s(e),t)}),[i])]}function s(e){return void 0===e&&(e=""),new URLSearchParams("string"==typeof e||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce(((t,n)=>{let o=e[n];return t.concat(Array.isArray(o)?o.map((e=>[n,e])):[[n,o]])}),[]))}},85597:(e,t,n)=>{"use strict";var o;function r(e){var t={};if(e){var n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));var o=e.indexOf("?");o>=0&&(t.search=e.substr(o),e=e.substr(0,o)),e&&(t.pathname=e)}return t}n.d(t,{AW:()=>S,F0:()=>M,Z5:()=>N,TH:()=>E,bS:()=>L,s0:()=>b,UO:()=>k}),function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(o||(o={}));var a=n(99196);const i=(0,a.createContext)(null),s=(0,a.createContext)(null),c=(0,a.createContext)({outlet:null,matches:[]});function l(e,t){if(!e)throw new Error(t)}function m(e,t,n){void 0===n&&(n="/");let o=f(("string"==typeof t?r(t):t).pathname||"/",n);if(null==o)return null;let a=u(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){return e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]))?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(a);let i=null;for(let e=0;null==i&&e{let a={relativePath:e.path||"",caseSensitive:!0===e.caseSensitive,childrenIndex:r,route:e};a.relativePath.startsWith("/")&&(a.relativePath.startsWith(o)||l(!1),a.relativePath=a.relativePath.slice(o.length));let i=y([o,a.relativePath]),s=n.concat(a);e.children&&e.children.length>0&&(!0===e.index&&l(!1),u(e.children,t,s,i)),(null!=e.path||e.index)&&t.push({path:i,score:h(i,e.index),routesMeta:s})})),t}const d=/^:\w+$/,p=e=>"*"===e;function h(e,t){let n=e.split("/"),o=n.length;return n.some(p)&&(o+=-2),t&&(o+=2),n.filter((e=>!p(e))).reduce(((e,t)=>e+(d.test(t)?3:""===t?1:10)),o)}function C(e,t){let{routesMeta:n}=e,o={},r="/",a=[];for(let e=0;e(o.push(t),"([^\\/]+)")));return e.endsWith("*")?(o.push("*"),r+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):r+=n?"\\/*$":"(?:(?=[.~-]|%[0-9A-F]{2})|\\b|\\/|$)",[new RegExp(r,t?void 0:"i"),o]}(e.path,e.caseSensitive,e.end),r=t.match(n);if(!r)return null;let a=r[0],i=a.replace(/(.)\/+$/,"$1"),s=r.slice(1);return{params:o.reduce(((e,t,n)=>{if("*"===t){let e=s[n]||"";i=a.slice(0,a.length-e.length).replace(/(.)\/+$/,"$1")}return e[t]=function(e,t){try{return decodeURIComponent(e)}catch(t){return e}}(s[n]||""),e}),{}),pathname:a,pathnameBase:i,pattern:e}}function f(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=e.charAt(t.length);return n&&"/"!==n?null:e.slice(t.length)||"/"}const y=e=>e.join("/").replace(/\/\/+/g,"/"),w=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),H=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",_=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";function v(){return null!=(0,a.useContext)(s)}function E(){return v()||l(!1),(0,a.useContext)(s).location}function L(e){v()||l(!1);let{pathname:t}=E();return(0,a.useMemo)((()=>g(e,t)),[t,e])}function b(){v()||l(!1);let{basename:e,navigator:t}=(0,a.useContext)(i),{matches:n}=(0,a.useContext)(c),{pathname:o}=E(),s=JSON.stringify(n.map((e=>e.pathnameBase))),m=(0,a.useRef)(!1);return(0,a.useEffect)((()=>{m.current=!0})),(0,a.useCallback)((function(n,a){if(void 0===a&&(a={}),!m.current)return;if("number"==typeof n)return void t.go(n);let i=function(e,t,n){let o,a="string"==typeof e?r(e):e,i=""===e||""===a.pathname?"/":a.pathname;if(null==i)o=n;else{let e=t.length-1;if(i.startsWith("..")){let t=i.split("/");for(;".."===t[0];)t.shift(),e-=1;a.pathname=t.join("/")}o=e>=0?t[e]:"/"}let s=function(e,t){void 0===t&&(t="/");let{pathname:n,search:o="",hash:a=""}="string"==typeof e?r(e):e,i=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:i,search:H(o),hash:_(a)}}(a,o);return i&&"/"!==i&&i.endsWith("/")&&!s.pathname.endsWith("/")&&(s.pathname+="/"),s}(n,JSON.parse(s),o);"/"!==e&&(i.pathname=y([e,i.pathname])),(a.replace?t.replace:t.push)(i,a.state)}),[e,t,s,o])}function k(){let{matches:e}=(0,a.useContext)(c),t=e[e.length-1];return t?t.params:{}}function S(e){l(!1)}function M(e){let{basename:t="/",children:n=null,location:c,navigationType:m=o.Pop,navigator:u,static:d=!1}=e;v()&&l(!1);let p=w(t),h=(0,a.useMemo)((()=>({basename:p,navigator:u,static:d})),[p,u,d]);"string"==typeof c&&(c=r(c));let{pathname:C="/",search:g="",hash:y="",state:H=null,key:_="default"}=c,E=(0,a.useMemo)((()=>{let e=f(C,p);return null==e?null:{pathname:e,search:g,hash:y,state:H,key:_}}),[p,C,g,y,H,_]);return null==E?null:(0,a.createElement)(i.Provider,{value:h},(0,a.createElement)(s.Provider,{children:n,value:{location:E,navigationType:m}}))}function N(e){let{children:t,location:n}=e;return function(e,t){v()||l(!1);let{matches:n}=(0,a.useContext)(c),o=n[n.length-1],i=o?o.params:{},s=(o&&o.pathname,o?o.pathnameBase:"/");o&&o.route;let u,d=E();if(t){var p;let e="string"==typeof t?r(t):t;"/"===s||(null==(p=e.pathname)?void 0:p.startsWith(s))||l(!1),u=e}else u=d;let h=u.pathname||"/",C=m(e,{pathname:"/"===s?h:h.slice(s.length)||"/"});return function(e,t){return void 0===t&&(t=[]),null==e?null:e.reduceRight(((n,o,r)=>(0,a.createElement)(c.Provider,{children:void 0!==o.route.element?o.route.element:n,value:{outlet:n,matches:t.concat(e.slice(0,r+1))}})),null)}(C&&C.map((e=>Object.assign({},e,{params:Object.assign({},i,e.params),pathname:y([s,e.pathname]),pathnameBase:"/"===e.pathnameBase?s:y([s,e.pathnameBase])}))),n)}(x(t),n)}function x(e){let t=[];return a.Children.forEach(e,(e=>{if(!(0,a.isValidElement)(e))return;if(e.type===a.Fragment)return void t.push.apply(t,x(e.props.children));e.type!==S&&l(!1);let n={caseSensitive:e.props.caseSensitive,element:e.props.element,index:e.props.index,path:e.props.path};e.props.children&&(n.children=x(e.props.children)),t.push(n)})),t}},44852:(e,t,n)=>{"use strict";var o=n(28487),r=n(2864),a=n(31741),i=o("%TypeError%"),s=o("%WeakMap%",!0),c=o("%Map%",!0),l=r("WeakMap.prototype.get",!0),m=r("WeakMap.prototype.set",!0),u=r("WeakMap.prototype.has",!0),d=r("Map.prototype.get",!0),p=r("Map.prototype.set",!0),h=r("Map.prototype.has",!0),C=function(e,t){for(var n,o=e;null!==(n=o.next);o=n)if(n.key===t)return o.next=n.next,n.next=e.next,e.next=n,n};e.exports=function(){var e,t,n,o={assert:function(e){if(!o.has(e))throw new i("Side channel does not contain "+a(e))},get:function(o){if(s&&o&&("object"==typeof o||"function"==typeof o)){if(e)return l(e,o)}else if(c){if(t)return d(t,o)}else if(n)return function(e,t){var n=C(e,t);return n&&n.value}(n,o)},has:function(o){if(s&&o&&("object"==typeof o||"function"==typeof o)){if(e)return u(e,o)}else if(c){if(t)return h(t,o)}else if(n)return function(e,t){return!!C(e,t)}(n,o);return!1},set:function(o,r){s&&o&&("object"==typeof o||"function"==typeof o)?(e||(e=new s),m(e,o,r)):c?(t||(t=new c),p(t,o,r)):(n||(n={key:{},next:null}),function(e,t,n){var o=C(e,t);o?o.value=n:e.next={key:t,next:e.next,value:n}}(n,o,r))}};return o}},61055:e=>{function t(e,t){if((e=e.replace(/\s+/g,""))===(t=t.replace(/\s+/g,"")))return 1;if(e.length<2||t.length<2)return 0;let n=new Map;for(let t=0;t0&&(n.set(r,a-1),o++)}return 2*o/(e.length+t.length-2)}e.exports={compareTwoStrings:t,findBestMatch:function(e,n){if(!function(e,t){return"string"==typeof e&&!!Array.isArray(t)&&!!t.length&&!t.find((function(e){return"string"!=typeof e}))}(e,n))throw new Error("Bad arguments: First argument should be a string, second should be an array of strings");const o=[];let r=0;for(let a=0;ao[r].rating&&(r=a)}return{ratings:o,bestMatch:o[r],bestMatchIndex:r}}}},31863:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTguNTc0NjUgMy4yMTYzNUwxLjUxNjMyIDE0Ljk5OTdDMS4zNzA3OSAxNS4yNTE3IDEuMjkzNzkgMTUuNTM3NCAxLjI5Mjk4IDE1LjgyODRDMS4yOTIxNiAxNi4xMTk1IDEuMzY3NTYgMTYuNDA1NiAxLjUxMTY3IDE2LjY1ODVDMS42NTU3OSAxNi45MTEzIDEuODYzNTkgMTcuMTIyIDIuMTE0NDEgMTcuMjY5NkMyLjM2NTIzIDE3LjQxNzEgMi42NTAzMiAxNy40OTY1IDIuOTQxMzIgMTcuNDk5N0gxNy4wNThDMTcuMzQ5IDE3LjQ5NjUgMTcuNjM0MSAxNy40MTcxIDE3Ljg4NDkgMTcuMjY5NkMxOC4xMzU3IDE3LjEyMiAxOC4zNDM1IDE2LjkxMTMgMTguNDg3NiAxNi42NTg1QzE4LjYzMTcgMTYuNDA1NiAxOC43MDcxIDE2LjExOTUgMTguNzA2MyAxNS44Mjg0QzE4LjcwNTUgMTUuNTM3NCAxOC42Mjg1IDE1LjI1MTcgMTguNDgzIDE0Ljk5OTdMMTEuNDI0NyAzLjIxNjM1QzExLjI3NjEgMi45NzE0NCAxMS4wNjY5IDIuNzY4OTUgMTAuODE3MyAyLjYyODQyQzEwLjU2NzcgMi40ODc4OSAxMC4yODYxIDIuNDE0MDYgOS45OTk2NSAyLjQxNDA2QzkuNzEzMjEgMi40MTQwNiA5LjQzMTU5IDIuNDg3ODkgOS4xODE5OSAyLjYyODQyQzguOTMyMzggMi43Njg5NSA4LjcyMzIxIDIuOTcxNDQgOC41NzQ2NSAzLjIxNjM1VjMuMjE2MzVaIiBzdHJva2U9IiNFNjUwNTQiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMCA3LjVWMTAuODMzMyIgc3Ryb2tlPSIjRTY1MDU0IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8cGF0aCBkPSJNMTAgMTQuMTY4SDEwLjAwODMiIHN0cm9rZT0iI0U2NTA1NCIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9zdmc+Cg=="},67630:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAATlBMVEUAAADz9/f0+/v29/f29vb29/f19vb09vb09PT29/fz9vb2+Pj29vb2+Pj19vb3+fn2+Pj09vb29/fDxMfj5OXW19nx8vPp6uvJys3d3t9on+F5AAAAEnRSTlMAIBDfoM/vkGDeMO+PX+6fj493pkuNAAAA9klEQVRYw+3Yyw6CMBAF0On0QUHxcXmo//+j6koaIbFwE0PSs2RxM52QNjPyofHsA34WvGtVvpkqIJ8zktILVjqm5VisZidFNRYb2IZQT1KTWmxkVd6SPm/ouAHB+3AOBJWIguGgEkERxYHCiQeFlwCKg4CkBJWgXQSNj2HemBl07xbc84Ju3aJbVlDfdf3S978FDf2MIT9oQQn6KWj//1EJ2l0Q4WIjX7UYh3mPcffvWgkqQTloIwRtqOGNWREUrSinSSpSUU5GHNcpJV1JK41aOUuW2nDWPnXDWUS96pnQanWfVVLGId/paOSbts6HjBB/jpNqnnilXjdVFKs9AAAAAElFTkSuQmCC"},2732:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANsAAABACAYAAACTIgLAAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABhuSURBVHgB7V0LfBXFuf9m9uSBhEopWrVUsfahUOm14KNWW23VViABCQG11av21l5vK1ev2oeobARbtC1eab3e2nLr20oSIBDAWgu2vbW+qqKAj+sDreILECGQhJwzc7//2bPJ7uzsnoQkGHD/P4acnZ2Znd2db77nzBKlSJEiRYoUKVKkSJEiRYoUKVKkSJEiRYoUKfYgiODB3FOXlW0uzx6jHHG8lnQQ5USG9mQItUGTfESWqJXu3VUbKEWKPkQHsV1zRuNH27PyJqVoohBhItzjoWm1kPoCt67qfylFij5CnqjcmqX7KVILhKYv0AcX27WQE6+uG/cHSpGiDyDxn9bq4l1FaBr/hH6Myfwh/rmD+g/2klpd705cOJhSpOgDSHA1HvhnBzOF0O1a0Lt5wuhlaMqdU1tXdWRtXeUXRI5O1UK/R/0EfLMjVWnmG5QiRR9Aks6N4lG2n5/Bg7+B2nP7Xl1XOSTTLj/HOW9TL4Fl1gdm1k+8zT92F1atEFr+nvoRpKYTKUWKPgCLkWK/cIbzPXfRaZvx+6rGcU8zgfyWeglK0xwzT5BuT66llZd6gm60oekTtHOASN5d6+2ebe3tf8A7cuh9QoYpQJIMGB9HPrqB6joP+fQzLFZSjyH02u0DylYEs9wzFg9lUjveLMpXa5NC38qEuFg7pWvadyhdInOfISGr+ewEremjVPx6SmjRyJbV27WSq1guzpU4uUO48VO4fW5HfNJWjcXnEuo6vsRpPCfoux8n70Vu5bSW0485PW6UL+N0OidwzyM5fYgT9NbnOf2J0zJOT8VcC/2qKvw18SKnRwPHGFQTCtczARfH/Zb8LxbuwQQmwyWFfvrA/R5EdkBSebfwGwPrVPLusxie5fQkpxqyEwQmy2ZOr3N6xuhPHPCsKsl7T8dy2pe8Z7OpcK3LOO3NaQx1DaCMHO0kIjNrZs1oDOTX/WM2nqwVogueACHWKpWb50hxLBPDaZwhQ+e1ePBnt39tW6hKu1OpSR1otPQCX3PKjLqqJ0WYyl/hdJ9bXX+tkGW/5mt8Jb4r9Bb/OdOtr1xhnEIbK9ya+ddpVX4TF5xCO4ejOF3L6Tiyc6fDODVRmNj+idNdnA4lirhWwE2/zqmW09WcfsapzSgDQrib7MTWyGkSeQPSb29+TN9A2J+x5ON+vmjJb+WEickfE+j7bPIGsA2YRB4r/AbR/IrTMCqOa8gjAKgZ5Qnl0B+8x9s53chpc0y5kzndwOlTFH0OeJajyLuPiZx+QsWBsbiIekBs0szYIcSng8fOpkFPFxPBeHD/Tbwz8HMzGybMoZGPTxEkl0TKkK4LHruuK5VW5wfzmKusEkIez+08IWLYqdsw+SUaWDEO+h/ZsSlL6svsM1sRc57cuimbahuqprI78W7qPs4hjwudQF0XA8G9V5JHhEkzVymnWWQnFIj7cVwXxB+0osZNAsDHYvL3jcnHwD/CKHcYxeMA6lugP5gs8Jye4HS4cR5j+krypAT0s9+I6hFicxR9PnjsPnBiK4tjrye0sV0JMZ3LZfPlXVcxbd5llNlSLgY8HMxoXzN6fx52Afatm7kz57t1496kInBvObGVynacRZ5Y0Qkh0Neps+omPEddQEboy7gP3YkcgQg4j5JnXhNDyZutu+NSgOgz3cjbP6E8CDEoIXw5oexATqYYjgngYwl1jgv8xgDeJ6HscNp1GM5pOXncywfEd0gH/U4fjhAbU8qoSJ7Uz8Y1wBzofjli3J/CrarV/PaCIuPqH9adHDLxO9ncKRR4IJr0dW5d5SNm+3NqHhxw6Vm/H2jmu3dWv8a1bgv1RVO92zA+oo8gDG12zR/2NvOvqKt8nfv5O+oaIP79kizPjIGJBuIZuNffydOLfHHjIrIPwBfIE90WWc5h8F9IYS5xMMUD5X1ug2f6aUrGocYxiG+vhPJB7nEkJeOTVBwvc1ptpKRJ9qeF9KLlHCYJXx2AavHvMW1sJ0+XxjtaQ55uHYdNlv6toR4iMnCE5aUKbwDZoKi9fYbrCkPM3PECy4BvddQX9OdITccJGkZelSLza7PIVTWNJ2/RGx8d2LLjtSsnLzo70i+VuT1wuJkpdoZZxq1uHLVhYPbvrbr1xatqmqZrCKtB5PSd5L2IYric00cs+dAfYPDAgMTLBreGTgAiquA02VIHutzRnH7IifXbPEGaYjOuFdQpixHQsYW/0I8+V6Ss2dZhRcp/ljrv/ZQulC2G88h7XsH0y4TykJS+Xyj3gOX8GYW/15Nd6gCBHVfo21cKf/GOnic7Vlj6h9RKPYBtlh4GThDMYI0txkIm5rOb4Ekzl3WiHTxyOkQ5NvmvDp6fXzPfYZWs4wVz2d+b4qNbs2gE6363wdHMh4Mdcn7Jho0hoQuNOvURJuS85Yv/LmOu9lKojeqmTygpF7FuNpLb+YhQ+vIrpy4Pm/ZHPQ5uup6SAT2l2pLP3JXGckJMZdA6hpeCmRP3aJvp55I3e/rARGMT1WGE8CcH06iRNY6PDZQLSgI2fdvUq2zujuD9HBioMzKhHBBnpewNtJBnDDKBieAYshM6xueZ5Ol3wQltC9mfTZ8hQmzcm33e3it3YDhPvWSpu11Q9hcUj0e8urpd5yhUfy0N3IetiR1ytsyIWyL9UM4NIWc70aCcLj89WAYclZ/WS96N6JsjbQiqZdGyk1ML2kvm2s8Kt+HCB/cqJQOzuU3MmkueaBIHiGumGRtc9ElLXpOlPgwTvtncNGBAXA76KEEEeJ9HG+XupShM66BNXzPFW0wcIMqg7gid+cEutNWbKLXkQWzHpGdjHj+iZBF1l8FGbAMzpEOzlyNLXuGBuiWYx4N4kVs/8cG4hjMi15AvR+I9p6I9LGtLMZzzfbHkNfd340PtuDULj+KKJ5ltOiQj8ZvCE1c3qdaQn4nbaGSOos6MlpdHRPPEJkqGzQ8D0/ydRep9ypKH5/iKJd+mj2CyAbGBux1gKR90LUAagfhoEhuI2OSCJrc1iQ/Sgin6Q5c/1shjS3Ve/yKjH8VM/dCrfh1IEBGTnM0YK4eQJ1Zfbjl/H3muFRN4rzsTWD7K6B/SUdRDRCw2Ij8enZBYsbFZvDukQvMMLo7xcvIBxDOTGv7oh4c9+/qm9Ru5vbdn3HbaO25Au1K53CG+bMTi30qzrtYlZ9jCMpkFfZiihTlbPOUuqdoezs78M0w7FEXEwaqjg9HEhy15MPhsTK5Ggyx5eHZbLPk2f1F5IWGwmf0GQYBrBYkLA8LUv8ABMSEFOY5Z5hDjGPdlvhfoPOZLAUHG+Rlfo3hMNI4f4jQnoTyMWHiWNic9VAD42+6xnIMEsTN+sU9TVK/Fs36EegDbYGQRTodm/18sH9tGWnaIS8zVbnEbqmItlMB3bh7TLrVcwm/nddNnJoU4rLMt8X/R2srqsJZCRxRUFhXLhCXqQgg12tYG96Ut2oawvcQgbLMuiGZnXqQiu66QTbj2oZZ8iEamZIF7PtAoA6unOSnA+lgRODYHFjgCojSCcbGQdkzuAYJ8g6I4hHoXcJ/Y3hG4KlQLqBK2sRzn8H5fYCU2po0jXXdlxsh7wvvFXE3mvf0hXDl5ScRayFT7Bya4iOLP+trhnb9VJOpf28UvGGqihKlpqJAyJJMXDDxDbW3wMI8ODq3tZTvRbMmD7jAguZrVehUXQ2kbTJikMDnYjCzgVjBCBU3YZqjT44U2bAYgX/cC5zRF1PWFeg8F8vCMglEjeG+YgG3cvbcd2zaOgj4iSuQvheN3LWX2o34EK7HxtDusdE1LSHSSWfqLzi8KkHe5dVUhgwKsftzQvB/XzA87Oz80aIGQOmKtZHbWIdPnLGvaWLS0chrhiD9G8kgcZEa4vFzRLNlfaHU8M2cL6SIXXzx/gChuQbMZUGAZ3b9IvXWWPNybTby0xQ+Cw0A8tulAENMwkQXdMqbj/I8J/Rhe+AvCMMfBPwp/l1N8HyFNYJKzGc9sMZZBwJj1o0BCoECSZfC/KMr5QUhBn98Llnrg9N0JQPDxlNE/pKeph7BzNjaStOTCosW2TPk6iZlMiUgcmRbqEv6TaRfl5wXzEemhqWWe5RIdMx8P/mgIkhbrLJ3aQC0qbEiZ2oBolyEs9oba2Hvk2jYmwreiTdDWEiFCVr+K9eWfpeIz8Z8teeBO30uuFjEeABiwtsFoM1uDyCEK2fqHQY4B+BDZAc70t4R++Dqcbfb39a1HKR6ryLOG2iaiYj5BhMnNDqTfUDKxwaF8h5GHsZsfd4XjJyz1MLF9l7qP543+zaZ4n1yXIeNOODIbsvzNrjuJlXoxy104LnTRvNVPiG/it9ay0myHfW4hEexX5z9WwmLkPp0dcKKOYi0ig1srdZ1pBKFc2dfz50iEOAzM+VrrVZE2NN14ed3Yd4J5QjmwsBUL7UFbtgH7LfICiOMAsdcUJSF6mlY9uBVOsNSHmAYx0gw0gDTg30dcDCjErOcCv034xGbzsfkEhHteR3b4UUPgriahFHOSdxeYVG6yXAc65AmF341kJ1gEDBSLetkliCU2HsFHBqMtmFPoGXXj7okWkxfwf3nxggf4aLd6aeJyhTfeXb+/COoVQkWUf61zt4VFQ3Hv0O0lc4NloFOyqHiO1zc12nV16F5kNoeZMEjoK8qkMyfchiulVt+m4oBehOh10xoHIllKnmUWVkFwIBgooNtgwK2jzkEZxGXUOSBBfD+msGHDh+/rMh3aGwN9gZhuMwRgpvddGu9Yzn8ypm2/fSrUf9hyHsT+18Lvdgo76AGoIEmxoAid289Ie1MywGXNZ4lJEpwLoiJE2lst9SCCw5J4KXnEiWthghmf0McSS/+QurD8JR6xxMYWus9fW3N/SI8wrYruxOXD+ZUHI/fLFeX+lZIu6DghLsQE+jX3G8tC16ltqHqAudXVWLbDh7PKhDx7GiyiQazacpIoGFIUiRG0ZlnI6YvIFqnz4VBP8UXmlomW002uRqtHf4knlK7OwiD2VZZ8PMMryFPUIddjkMNKB+LD87LNyHjZDxcS7vFCS7uwBoKQYYgxxc6glRAOXZu+sjamvI8Rhb8240swOPuvlvPrKEzAtmDuJH0WRPG0kS6mZOBZ4h2Y1mSs2/N9YD8n+8QC/RqxlX8rXAt67mKKJ7ZTLP1DKqUeIFZ84js7pDXbhpccu0eIzmSxlCFoQgZBTmXicd07x1r9LKpdfSQ8P4jBoj2HqI4bA23gwdYWUgRuzcoKTVt/7s/t3NwgroK9Q34eLDejofLGYLuR/muazheL5+5hIFQIcY5Yq2V7SZgNh1jyQTCYWcca+TCSxDlKIXpeUrgmOJ75noKDG08BCzbHWK7rA5wHboqgpRIzPgaPSRRtRvv3W+pCdA0aLCCmmhIKiNji1slj7y7mmQCBYMILPjeMpu+Qp1dDtzuzUM5mKfb9loCmeAyw1NfUV5wNzu2cjPeauxMXDudCVZZTFdSWN5hYoYSKRPDrHH3bjMdMgtLbLmbWOyKYl1P64ismLuuyf6e2uukCW5RKESBqA+bmtd2og0HJDvZEY0MQGOyIkvAtgTbjiDmRwUgSHDwQe4O+R+i6JvfBJAlxz1xug3LBFRuIdjF1vr8Yx7aImBHU+4CEYFvoicgSn9gxOWAh7TrqZ0ic1R2pJ8ad0xnnu/BxWc+RPs+tWWIlVBbtIkSlBI3aODB3HXUB7qRFk1lHc818nhw+lslkf9IVoq2d0niikokRC0kAZwPBQU/r6lo4lIMhBUtq2mLKgFhAzDA2XR/It1kuTQugv6zHB0TQoB4H4jFFSRAbxHDTQAV9rSVwDEINThTQ154t0h+iGF9pLwDW5NVGHjj/pYFjSBJf5YTY3RbqJxDupMXnaCl+az0paNuHqGWf/6ibEuqwO6lhmJaleKEVsQ1rvZIOH3SK654Y8o+4NYsma+3U2euIeaSl6y6IiqB5g8iabT9g0ryMy8WKHNznhSzRfd+t+/oL0TbYiLJm6b+w/Dhb20OwQLWra+sqD6euAfd/fCFBZ4SohVAsiDMQZWwBsCg3jrw4RoijGLxwtEP5h05hDg6IPaZ5HpzLdCYfRJ1iDgjEJC6IuKYvD/40GzGvM47xrILPHBbIYBD0YIqK1ngOEF+HU9cA0RnPC2KzyQQwkTQXuR4mMVs0CyYTLIGCz23fQHtw+CN+t4K6vrAXk8pOrxQQbnXjN7WQt8cVYAPG5KsbqhoCx8Kd0tTE8/DYYo1LEtNm1I8PrQxwq5eMZRvn0oRqLLLo+dyn+zOkN7HFcQCLjGzdE5M0qZGRvU2sd0UbWOtbkiXVlMk4b7arXKZEOcfxc6pSWhyVtL26IP2wW191DKVI0cvg8czUmqD2sbECjts8sWEdWm1NE/SxooQGMKH8p1u9TLsNYwMLA9UnikivrKOIi5gzXuQFHvqd64Z+yuItlz7XIXmuzmq+SQnRNl+/6N5FWj5OKVL0ATJUxub1dv1C3NZujBNqJzdd0irkbWtV9lta6Gu6YZSRWuRmcv2ytpLyO2Rr6xAW5C6BGbC/QoncSkqRog/gfVhjytJpSqk5ImlNkWY9QCTuU1HsQttYKStlKbQ7+zLuYuj7hGitNqNeUqToDeTluRF6240saP0msWQPCA3AotR+Tmhvi1J5QUpoKfoKHfIgQpfoqdGXa6nZUS165CnfrSDgeWALZrb039yFX+u17xqk6Dnw0RetdFc2UO2EUJtr66uKRaO8L4goX+4Zdw1V7RUI3BzlaLlL9t5j6+ShbMDAIsD462lazdbNrm471yXkhF4vs5mV7qJT11GKfgf39IXDdTbzcrcqabGutmH8wdQPERnc7t1nwgexnKJrmfoM4Kpi9ZibmMXMYivkidZCggZrsf2n2LmLUqTYDdEvdo31driiB9npfJJ6eslUdjcggNjcLHaYyg3AHov3UIoPBnKDN0jaGgpsVySPYvblr5vEJjNX8HHnqgNB/Vbn7lFgZV8hvwqgLTeN/XQXBXbhykelzGio/CqW+1CKDyTcyU2ns8rhf6MhK5RzsC3iCJh++qKPc4kvOeQg6DpLMrta7tAP+59EA649r3FQy3vCW9uXySoa8N6r7i3ndqxBdGvmV5Aq71wpP2jjuuD57qCrEe+7FO6dY7e49ZWz+MGMEvltxET+5pQQx0yftOQISpEiAUyQx15Vs+SBTNZ5NUPyDkF6NqefMWHeqzKZl66qabrAX6vZsrlkbxLiMS3EMzpX8pzYus+5He3kP/4yYG7+HBKJebRt4E5Lg/2S2Hy4iyesZ6I7X2h1BD+ZJn5gZSVCpJ/hTRELd9KyYUxIK1n2+TKO+TdiTTf7i5EF4jy1uqG2Zml+VwFwRZaYOhYQK6Guw546+YOnj5zM5X3i28zj71s9cQ31a2LzgW3zmOgqBT6sJ+gAc7FpihQdGPXIelYzFvA4eVNoeYnOiS9kHGcMD/TxQniLf/l8CWk9zV/dv1m2LuLjwpeXRIUWep5b1XiAFqpjFzlWaaYX276xGHYLYvPh1lfd98aQ/c9es6N5G6VIYQGMbe2Z7PdLcvIYt2HcnJkLK1ddec/YF2fUVy0n6e2VA7DSf3D5mvvzu5xdXzelRej2H7ApwF+3d4IuldiZrBDCKO51Plv539RD7HbfdL755jHtlCJFAkraBrRlMzsunVG9+OhC5NOrWjr12W3qMadjnbaWrdnmzqCOBdWvudWNP2C7wM3CW6XtLUbV9Jqg1u9Gv9TUfexWnC1FimLI62zOjke1psvY8IGlWWOwPEsodZcsT3YbuQ0T7pCRz5uJ/8l/7bYXkBJbij0Kysl17FSGbwSygeSHQuivspHtQtbZBibVZcPISVrrk0OZQp/nTl1abB/MLmG3EyNTpIjDhacuK5OUG+U7YR0lL5uxYJy/MHqFW9N4ryZp3YTIPWflYLW1ea4oLE5mUfIV7a1+H0a53Cwmwqlx33nvKlLOlmKPQaaiWWod2PhIGF+UdUrjv1bU3PxT5nzetoaaHso5NIGP/+EdipramqazqIdIiS3FHoO8VTGwHXtO5H5RO2Vx9dU1C0fjM9Eql6231fO2BilYKtkawtztGzPvqVyVVXoaFbbsYwq+Ph+R0gOkxJZiz4KQtWwYWZf/SWJ/pUR9Tmcek+TcKs3vqRNWuawcqoW8hq2TeTsli4oz/c9FZw5/fDE7shcWig5xss6d5teduoNUZ0uxe0G0PytUyS3eb63YSB/6sCS+ze6etuBocpzvMS/BFuOlXHC9IrVENGduFXupG/IFHbGZBm1sVVtLT5MkCt9L0G/SiHGzO9pin51bs3SaUBorYQYIXG/1e9ii8UFKkSJFihQpUqRIkSJFihQpUqRIkSJFihQpUnzQ8f8TN8TrgNW1mAAAAABJRU5ErkJggg=="},5196:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDUzIiBoZWlnaHQ9IjczIiB2aWV3Qm94PSIwIDAgNDUzIDczIiBmaWxsPSJub25lIgogICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxyZWN0IHdpZHRoPSIzLjg4NTYxIiBoZWlnaHQ9IjEyLjIxMTkiIHJ4PSIxLjk0MjgxIiB0cmFuc2Zvcm09Im1hdHJpeCgtMC44MjU5NDMgMC41NjM3NTQgMC41NjM3NTUgMC44MjU5NDIgNDA0LjA0NyA0OC41OTQpIiBmaWxsPSIjNjRDQTQzIi8+CiAgICA8cmVjdCB3aWR0aD0iMy4wNTI2NCIgaGVpZ2h0PSI5LjU5NDAxIiByeD0iMS41MjYzMiIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuNjcyMTc3IDAuNzQwMzkxIDAuNzQwMzkxIDAuNjcyMTc2IDQxNy45NyAxMy40OTk4KSIgZmlsbD0iI0ZGMkQ1NSIvPgogICAgPHJlY3Qgd2lkdGg9IjMuNjQyNzYiIGhlaWdodD0iMTEuNDQ4NyIgcng9IjEuODIxMzgiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjYzODIgLTAuNzY5ODcxIC0wLjc2OTg3MiAwLjYzODE5OCAzOTEuNzk1IDI0Ljk1MDQpIiBmaWxsPSIjMTE3QUM5Ii8+CiAgICA8cmVjdCB3aWR0aD0iMy44ODU2MSIgaGVpZ2h0PSIxMi4yMTE5IiByeD0iMS45NDI4IiB0cmFuc2Zvcm09Im1hdHJpeCgtMC40MDQzNzIgLTAuOTE0NTk1IC0wLjkxNDU5NSAwLjQwNDM3MSAxNzAuOTQgMTQuNjkxNCkiIGZpbGw9IiNGRjgwODUiLz4KICAgIDxyZWN0IHdpZHRoPSI1LjM0MjcxIiBoZWlnaHQ9IjE2Ljc5MTQiIHJ4PSIyLjY3MTM2IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjM5MjY0IDAuOTE5NjkyIDAuOTE5NjkyIC0wLjM5MjY0MiAzMjguMTE5IDUwLjYwNTUpIiBmaWxsPSIjRkY4MDg1Ii8+CiAgICA8Y2lyY2xlIHI9IjMuNDM0MjIiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjk0OTE5MyAtMC4zMTQ2OTQgLTAuMzE0Njk0IDAuOTQ5MTkzIDQzMy42OTQgNjAuNTQ0KSIgZmlsbD0iI0YwQjg0OSIvPgogICAgPGVsbGlwc2Ugcng9IjIuMjg5NDgiIHJ5PSIyLjI4OTQ4IiB0cmFuc2Zvcm09Im1hdHJpeCgtMC45NDkxOTMgLTAuMzE0Njk1IC0wLjMxNDY5MyAwLjk0OTE5NCA0NDkuOTkzIDQ0LjAwMDgpIiBmaWxsPSIjQkY1QUYyIi8+CiAgICA8ZWxsaXBzZSByeD0iMS41MjYzMiIgcnk9IjEuNTI2MzIiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjk0OTE5NCAtMC4zMTQ2OTIgLTAuMzE0Njk1IDAuOTQ5MTkzIDM3My4zMzkgNjMuMzEpIiBmaWxsPSIjQkY1QUYyIi8+CiAgICA8ZWxsaXBzZSByeD0iMi4yODk0OCIgcnk9IjIuMjg5NDgiIHRyYW5zZm9ybT0ibWF0cml4KC0wLjk0OTE5NCAtMC4zMTQ2OTIgLTAuMzE0Njk1IDAuOTQ5MTkzIDE2MC43MTMgNTQuMDk3KSIgZmlsbD0iIzA5QjU4NSIvPgogICAgPHJlY3QgeD0iMzE0LjI3MyIgeT0iMTcuMjE5MiIgd2lkdGg9IjUuMzQyNzEiIGhlaWdodD0iMTYuNzkxNCIgcng9IjIuNjcxMzYiIHRyYW5zZm9ybT0icm90YXRlKC01MS43OTU4IDMxNC4yNzMgMTcuMjE5MikiIGZpbGw9IiM5ODRBOUMiLz4KICAgIDxyZWN0IHdpZHRoPSIzLjg4NTYxIiBoZWlnaHQ9IjEyLjIxMTkiIHJ4PSIxLjk0MjgiIHRyYW5zZm9ybT0ibWF0cml4KDAuNjE4NDY1IC0wLjc4NTgxMiAwLjc4NTgxIDAuNjE4NDY3IDI3LjA2MSAzNC43NDEpIiBmaWxsPSIjNjRDQTQzIi8+CiAgICA8cmVjdCB3aWR0aD0iMy42NDI3NiIgaGVpZ2h0PSIxMS40NDg3IiByeD0iMS44MjEzOCIgdHJhbnNmb3JtPSJtYXRyaXgoLTAuOTg4ODgxIC0wLjE0ODcxMSAwLjE0ODcxNCAtMC45ODg4OCAyNjcuNjAyIDI3Ljg2MykiIGZpbGw9IiNFN0MwMzciLz4KICAgIDxyZWN0IHdpZHRoPSIzLjAwNjgyIiBoZWlnaHQ9IjkuNDUiIHJ4PSIxLjUwMzQxIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjIyNjk3MSAwLjk3MzkwMiAtMC45NzM5MDIgMC4yMjY5NjggMjEyLjIwNCA1MSkiIGZpbGw9IiNFN0MwMzciLz4KICAgIDxyZWN0IHdpZHRoPSIzLjg4NTYxIiBoZWlnaHQ9IjEyLjIxMTkiIHJ4PSIxLjk0MjgiIHRyYW5zZm9ybT0ibWF0cml4KDAuNzg1ODEgMC42MTg0NjggLTAuNjE4NDY1IDAuNzg1ODEyIDI2OS4zOTYgNTYuODc4OSkiIGZpbGw9IiMzMzYxQ0MiLz4KICAgIDxjaXJjbGUgY3g9IjkwLjUyNyIgY3k9IjQ1LjY5MjYiIHI9IjMuNDM0MjIiIHRyYW5zZm9ybT0icm90YXRlKC0xLjc5NTc4IDkwLjUyNyA0NS42OTI2KSIgZmlsbD0iI0YwQjg0OSIvPgogICAgPGNpcmNsZSBjeD0iNTkuODU5NiIgY3k9IjI3LjExNTgiIHI9IjIuMjg5NDgiIHRyYW5zZm9ybT0icm90YXRlKC0xLjc5NTc2IDU5Ljg1OTYgMjcuMTE1OCkiIGZpbGw9IiNCRjVBRjIiLz4KICAgIDxjaXJjbGUgY3g9IjMwNy4xMDkiIGN5PSI2MC43NjYzIiByPSIxLjUyNjMyIiB0cmFuc2Zvcm09InJvdGF0ZSgtMS43OTU3NCAzMDcuMTA5IDYwLjc2NjMpIiBmaWxsPSIjRjBDOTMwIi8+CiAgICA8Y2lyY2xlIGN4PSIzNTcuMzExIiBjeT0iMjguNTQ0NCIgcj0iMS41MjYzMiIgdHJhbnNmb3JtPSJyb3RhdGUoLTEuNzk1NzQgMzU3LjMxMSAyOC41NDQ0KSIgZmlsbD0iI0YwQzkzMCIvPgogICAgPGVsbGlwc2UgY3g9IjIzNy4yNDgiIGN5PSI0Ny4zNjc0IiByeD0iMS41MjYzMiIgcnk9IjEuNTI2MzIiIHRyYW5zZm9ybT0icm90YXRlKC0xLjc5NTc4IDIzNy4yNDggNDcuMzY3NCkiIGZpbGw9IiMzMzYxQ0MiLz4KICAgIDxjaXJjbGUgY3g9IjI5MC44NjkiIGN5PSIzOS45MzI5IiByPSIxLjkwNzkiIHRyYW5zZm9ybT0icm90YXRlKC0xLjc5NTc3IDI5MC44NjkgMzkuOTMyOSkiIGZpbGw9IiMzN0U2ODgiLz4KICAgIDxyZWN0IHdpZHRoPSIzLjg4NTYxIiBoZWlnaHQ9IjEyLjIxMTkiIHJ4PSIxLjk0MjgiIHRyYW5zZm9ybT0ibWF0cml4KDAuMzM2NzM1IC0wLjk0MTU5OSAwLjk0MTU5OSAwLjMzNjczNyAxMDguNjg0IDYwLjc1MSkiIGZpbGw9IiM2NENBNDMiLz4KICAgIDxyZWN0IHg9IjEzMS4yNTIiIHk9IjI1LjEyODIiIHdpZHRoPSIzLjg4NTYxIiBoZWlnaHQ9IjEyLjIxMTkiIHJ4PSIxLjk0MjgiIHRyYW5zZm9ybT0icm90YXRlKDUuODE4NjkgMTMxLjI1MiAyNS4xMjgyKSIgZmlsbD0iIzMzNjFDQyIvPgogICAgPGVsbGlwc2Ugcng9IjMuNDM0MjIiIHJ5PSIzLjQzNDIyIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjgyNzI2MiAtMC41NjE4MTYgMC41NjE4MTEgMC44MjcyNjYgMjEuNDU2OSA2Ny43NzUxKSIgZmlsbD0iI0YwQjg0OSIvPgogICAgPGNpcmNsZSBjeD0iMTk1LjgxOSIgY3k9IjMzLjE2NTQiIHI9IjIuMjg5NDgiIHRyYW5zZm9ybT0icm90YXRlKC0zNC4xODEzIDE5NS44MTkgMzMuMTY1NCkiIGZpbGw9IiNCRjVBRjIiLz4KICAgIDxjaXJjbGUgcj0iMS41MjYzMiIgdHJhbnNmb3JtPSJtYXRyaXgoMC44MjcyNjYgLTAuNTYxODEgMC41NjE4MTggMC44MjcyNjEgNjQuMjU0IDY1Ljk3NDUpIiBmaWxsPSIjMzM2MUNDIi8+CiAgICA8ZWxsaXBzZSByeD0iMS45MDc5IiByeT0iMS45MDc5IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjgyNzI2NSAtMC41NjE4MTIgMC41NjE4MTUgMC44MjcyNjMgMi41ODcyNCA0OC4zMDMxKSIgZmlsbD0iIzM3RTY4OCIvPgogICAgPGVsbGlwc2Ugcng9IjEuOTA3OSIgcnk9IjEuOTA3OSIgdHJhbnNmb3JtPSJtYXRyaXgoMC44MjcyNjUgLTAuNTYxODEyIDAuNTYxODE1IDAuODI3MjYzIDI3Ljk3NjkgMTUuNjQ5MykiIGZpbGw9IiNGMEM5MzAiLz4KICAgIDxlbGxpcHNlIGN4PSIyMzEuMzY3IiBjeT0iMjEuMzM2IiByeD0iMi4yODk0OCIgcnk9IjIuMjg5NDgiIHRyYW5zZm9ybT0icm90YXRlKC0zNC4xODEzIDIzMS4zNjcgMjEuMzM2KSIgZmlsbD0iIzA5QjU4NSIvPgogICAgPGVsbGlwc2Ugcng9IjIuMjg5NDgiIHJ5PSIyLjI4OTQ4IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjgyNzI2NyAtMC41NjE4MDkgMC41NjE4MTkgMC44MjcyNiAxMDAuMTY0IDE1LjQyNzEpIiBmaWxsPSIjRkYzQjMwIi8+Cjwvc3ZnPgo="},21079:(e,t,n)=>{"use strict";e.exports=n.p+"dbfe730286a89feb7ce0.svg"},26016:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPG1hc2sgaWQ9Im1hc2swIiBzdHlsZT0ibWFzay10eXBlOmFscGhhIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4PSIyIiB5PSIxIiB3aWR0aD0iMTIiIGhlaWdodD0iMTQiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTYgMS4wMDI5M0gxMFYyLjMzNjI2SDZWMS4wMDI5M1pNNy4zMzMzMyA5LjY2OTZWNS42Njk2SDguNjY2NjdWOS42Njk2SDcuMzMzMzNaTTEyLjY4NjcgNS4yNTYyNkwxMy42MzMzIDQuMzA5NkMxMy4zNDY3IDMuOTY5NiAxMy4wMzMzIDMuNjQ5NiAxMi42OTMzIDMuMzY5NkwxMS43NDY3IDQuMzE2MjZDMTAuNzEzMyAzLjQ4OTYgOS40MTMzMyAyLjk5NjI2IDggMi45OTYyNkM0LjY4NjY3IDIuOTk2MjYgMiA1LjY4MjkzIDIgOC45OTYyNkMyIDEyLjMwOTYgNC42OCAxNC45OTYzIDggMTQuOTk2M0MxMS4zMiAxNC45OTYzIDE0IDEyLjMwOTYgMTQgOC45OTYyNkMxNCA3LjU4OTYgMTMuNTA2NyA2LjI4OTYgMTIuNjg2NyA1LjI1NjI2Wk0zLjMzMzMzIDkuMDAyOTNDMy4zMzMzMyAxMS41ODI5IDUuNDIgMTMuNjY5NiA4IDEzLjY2OTZDMTAuNTggMTMuNjY5NiAxMi42NjY3IDExLjU4MjkgMTIuNjY2NyA5LjAwMjkzQzEyLjY2NjcgNi40MjI5MyAxMC41OCA0LjMzNjI2IDggNC4zMzYyNkM1LjQyIDQuMzM2MjYgMy4zMzMzMyA2LjQyMjkzIDMuMzMzMzMgOS4wMDI5M1oiIGZpbGw9IndoaXRlIi8+CjwvbWFzaz4KPGcgbWFzaz0idXJsKCNtYXNrMCkiPgo8cmVjdCB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiM3ODdDODIiLz4KPC9nPgo8L3N2Zz4K"},99196:e=>{"use strict";e.exports=window.React},91850:e=>{"use strict";e.exports=window.ReactDOM},92819:e=>{"use strict";e.exports=window.lodash},76292:e=>{"use strict";e.exports=window.moment},46530:e=>{"use strict";e.exports=window.wc.adminLayout},86020:e=>{"use strict";e.exports=window.wc.components},49742:e=>{"use strict";e.exports=window.wc.csvExport},17844:e=>{"use strict";e.exports=window.wc.currency},75606:e=>{"use strict";e.exports=window.wc.customerEffortScore},67221:e=>{"use strict";e.exports=window.wc.data},81921:e=>{"use strict";e.exports=window.wc.date},14812:e=>{"use strict";e.exports=window.wc.experimental},73516:e=>{"use strict";e.exports=window.wc.explat},10431:e=>{"use strict";e.exports=window.wc.navigation},81595:e=>{"use strict";e.exports=window.wc.number},51393:e=>{"use strict";e.exports=window.wc.productEditor},14599:e=>{"use strict";e.exports=window.wc.tracks},74617:e=>{"use strict";e.exports=window.wc.wcSettings},25158:e=>{"use strict";e.exports=window.wp.a11y},86989:e=>{"use strict";e.exports=window.wp.apiFetch},11313:e=>{"use strict";e.exports=window.wp.blob},52175:e=>{"use strict";e.exports=window.wp.blockEditor},97800:e=>{"use strict";e.exports=window.wp.blockLibrary},4981:e=>{"use strict";e.exports=window.wp.blocks},55609:e=>{"use strict";e.exports=window.wp.components},94333:e=>{"use strict";e.exports=window.wp.compose},37798:e=>{"use strict";e.exports=window.wp.coreData},9818:e=>{"use strict";e.exports=window.wp.data},23418:e=>{"use strict";e.exports=window.wp.dataControls},69771:e=>{"use strict";e.exports=window.wp.date},37180:e=>{"use strict";e.exports=window.wp.deprecated},45904:e=>{"use strict";e.exports=window.wp.dom},12238:e=>{"use strict";e.exports=window.wp.editor},69307:e=>{"use strict";e.exports=window.wp.element},92694:e=>{"use strict";e.exports=window.wp.hooks},22629:e=>{"use strict";e.exports=window.wp.htmlEntities},65736:e=>{"use strict";e.exports=window.wp.i18n},24705:e=>{"use strict";e.exports=window.wp.keyboardShortcuts},39630:e=>{"use strict";e.exports=window.wp.keycodes},58141:e=>{"use strict";e.exports=window.wp.mediaUtils},53961:e=>{"use strict";e.exports=window.wp.notices},98817:e=>{"use strict";e.exports=window.wp.plugins},55815:e=>{"use strict";e.exports=window.wp.preferences},70444:e=>{"use strict";e.exports=window.wp.primitives},74776:e=>{"use strict";e.exports=window.wp.privateApis},86802:e=>{"use strict";e.exports=window.wp.router},96483:e=>{"use strict";e.exports=window.wp.url},12560:e=>{"use strict";e.exports=window.wp.warning},50189:()=>{},5267:(e,t,n)=>{"use strict";function o(){return o=Object.assign||function(e){for(var t=1;to})}},a={};function i(e){var t=a[e];if(void 0!==t)return t.exports;var n=a[e]={exports:{}};return r[e].call(n.exports,n,n.exports,i),n.exports}i.m=r,i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,n)=>(i.f[n](e,t),t)),[])),i.u=e=>"chunks/"+({185:"analytics-report-categories",727:"leaderboards",925:"customize-store",1828:"core-profiler",2397:"dashboard-charts",2502:"analytics-report-stock",2624:"store-performance",2953:"analytics-settings",3307:"edit-product-page",3576:"analytics-report-orders",3700:"analytics-report-customers",3994:"analytics-report-revenue",4011:"analytics-report-coupons",4854:"analytics-report-downloads",4882:"multichannel-marketing",5396:"payment-recommendations",5502:"homescreen",6125:"shipping-recommendations",6732:"activity-panels-help",6824:"analytics-report-products",7387:"product-page",7708:"profile-wizard",7844:"activity-panels-setup",8544:"analytics-report",8597:"store-alerts",8851:"activity-panels-inbox",8960:"customizable-dashboard",9360:"wcpay-payment-welcome-page",9456:"analytics-report-variations",9669:"marketplace",9792:"analytics-report-taxes",9966:"dashboard"}[e]||e)+".js",i.miniCssF=e=>"chunks/"+e+".style.css",i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="__wcAdmin_webpackJsonp:",i.l=(n,o,r,a)=>{if(e[n])e[n].push(o);else{var s,c;if(void 0!==r)for(var l=document.getElementsByTagName("script"),m=0;m{s.onerror=s.onload=null,clearTimeout(p);var r=e[n];if(delete e[n],s.parentNode&&s.parentNode.removeChild(s),r&&r.forEach((e=>e(o))),t)return t(o)},p=setTimeout(d.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=d.bind(null,s.onerror),s.onload=d.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;i.g.importScripts&&(e=i.g.location+"");var t=i.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");n.length&&(e=n[n.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=e+"../"})(),n=e=>new Promise(((t,n)=>{var o=i.miniCssF(e),r=i.p+o;if(((e,t)=>{for(var n=document.getElementsByTagName("link"),o=0;o{var r=document.createElement("link");r.rel="stylesheet",r.type="text/css",r.onerror=r.onload=a=>{if(r.onerror=r.onload=null,"load"===a.type)n();else{var i=a&&("load"===a.type?"missing":a.type),s=a&&a.target&&a.target.href||t,c=new Error("Loading CSS chunk "+e+" failed.\n("+s+")");c.code="CSS_CHUNK_LOAD_FAILED",c.type=i,c.request=s,r.parentNode.removeChild(r),o(c)}},r.href=t,document.head.appendChild(r)})(e,r,t,n)})),o={2143:0,2343:0},i.f.miniCss=(e,t)=>{o[e]?t.push(o[e]):0!==o[e]&&{71:1,185:1,727:1,925:1,1828:1,2397:1,2502:1,2624:1,2953:1,3307:1,3576:1,3700:1,3994:1,4011:1,4854:1,4882:1,4891:1,5502:1,5792:1,6125:1,6732:1,6824:1,7708:1,8544:1,8597:1,8851:1,9360:1,9456:1,9669:1,9792:1,9966:1}[e]&&t.push(o[e]=n(e).then((()=>{o[e]=0}),(t=>{throw delete o[e],t})))},(()=>{var e={2143:0,2343:0};i.f.j=(t,n)=>{var o=i.o(e,t)?e[t]:void 0;if(0!==o)if(o)n.push(o[2]);else{var r=new Promise(((n,r)=>o=e[t]=[n,r]));n.push(o[2]=r);var a=i.p+i.u(t),s=new Error;i.l(a,(n=>{if(i.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var r=n&&("load"===n.type?"missing":n.type),a=n&&n.target&&n.target.src;s.message="Loading chunk "+t+" failed.\n("+r+": "+a+")",s.name="ChunkLoadError",s.type=r,s.request=a,o[1](s)}}),"chunk-"+t,t)}};var t=(t,n)=>{var o,r,[a,s,c]=n,l=0;if(a.some((t=>0!==e[t]))){for(o in s)i.o(s,o)&&(i.m[o]=s[o]);c&&c(i)}for(t&&t(n);l{"use strict";i.r(s);var e=i(69307),t=i(53961),n=i(75606),o=i(67221),r=i(73463),a=i(55609),c=i(94333),l=i(9818),m=i(67027),u=i(85597),d=i(99196),p=i(7862),h=i.n(p),C=i(92819),g=i(10431),f=i(14599);window.wc.notices;var y=i(98817),w=i(46530),H=i(79119),_=i(92694),v=i(65736),E=i(86020),L=i(51393),b=i(18210);function k(e){const t=function(e){const t=(0,r.O3)("features");return t&&t[e]}(e);return Boolean(null==t?void 0:t.is_enabled)}var S=i(74816);const M=(0,e.lazy)((()=>Promise.all([i.e(71),i.e(3307)]).then(i.bind(i,33284)))),N=(0,e.lazy)((()=>Promise.all([i.e(71),i.e(3307)]).then(i.bind(i,55563)))),x=(0,e.lazy)((()=>Promise.all([i.e(71),i.e(3307)]).then(i.bind(i,6833)))),T=(0,e.lazy)((()=>Promise.all([i.e(71),i.e(7387)]).then(i.bind(i,9661)))),A=(0,e.lazy)((()=>i.e(8544).then(i.bind(i,13369)))),I=(0,e.lazy)((()=>i.e(2953).then(i.bind(i,68266)))),O=(0,e.lazy)((()=>i.e(9966).then(i.bind(i,55144)))),P=(0,e.lazy)((()=>Promise.all([i.e(7846),i.e(9529),i.e(4239),i.e(5502)]).then(i.bind(i,19055)))),R=(0,e.lazy)((()=>i.e(4882).then(i.bind(i,32901)))),V=(0,e.lazy)((()=>i.e(9669).then(i.bind(i,17769)))),j=(0,e.lazy)((()=>i.e(7708).then(i.bind(i,22173)))),D=(0,e.lazy)((()=>Promise.all([i.e(8626),i.e(1828)]).then(i.bind(i,43896)))),Z=(0,e.lazy)((()=>i.e(7708).then(i.bind(i,38447)))),B=(0,e.lazy)((()=>i.e(9360).then(i.bind(i,10990)))),z=(0,e.lazy)((()=>Promise.all([i.e(8626),i.e(3767),i.e(925)]).then(i.bind(i,5860)))),F=()=>{const e=[],t=[["",(0,r.O3)("woocommerceTranslation")]];if(e.push({container:P,path:"/",breadcrumbs:[...t,(0,v.__)("Home","woocommerce")],wpOpenMenu:"toplevel_page_woocommerce",navArgs:{id:"woocommerce-home"},capability:"manage_woocommerce"}),window.wcAdminFeatures.analytics&&(e.push({container:O,path:"/analytics/overview",breadcrumbs:[...t,["/analytics/overview",(0,v.__)("Analytics","woocommerce")],(0,v.__)("Overview","woocommerce")],wpOpenMenu:"toplevel_page_wc-admin-path--analytics-overview",navArgs:{id:"woocommerce-analytics-overview"},capability:"view_woocommerce_reports"}),e.push({container:I,path:"/analytics/settings",breadcrumbs:[...t,["/analytics/revenue",(0,v.__)("Analytics","woocommerce")],(0,v.__)("Settings","woocommerce")],wpOpenMenu:"toplevel_page_wc-admin-path--analytics-overview",navArgs:{id:"woocommerce-analytics-settings"},capability:"view_woocommerce_reports"}),e.push({container:A,path:"/customers",breadcrumbs:[...t,(0,v.__)("Customers","woocommerce")],wpOpenMenu:"toplevel_page_woocommerce",navArgs:{id:"woocommerce-analytics-customers"},capability:"view_woocommerce_reports"}),e.push({container:A,path:"/analytics/:report",breadcrumbs:e=>{let{match:n}=e;const o=(0,C.find)((0,b.Z)(),{report:n.params.report});return o?[...t,["/analytics/revenue",(0,v.__)("Analytics","woocommerce")],o.title]:[]},wpOpenMenu:"toplevel_page_wc-admin-path--analytics-overview",capability:"view_woocommerce_reports"})),window.wcAdminFeatures.marketing&&e.push({container:R,path:"/marketing",breadcrumbs:[...t,["/marketing",(0,v.__)("Marketing","woocommerce")],(0,v.__)("Overview","woocommerce")],wpOpenMenu:"toplevel_page_woocommerce-marketing",navArgs:{id:"woocommerce-marketing-overview"},capability:"view_woocommerce_reports"}),k("marketplace")&&e.push({container:V,layout:{header:!1},path:"/extensions",breadcrumbs:[["/extensions",(0,v.__)("Extensions","woocommerce")],(0,v.__)("Extensions","woocommerce")],wpOpenMenu:"toplevel_page_woocommerce",capability:"manage_woocommerce",navArgs:{id:"woocommerce-marketplace"}}),k("product_block_editor")){const t={container:T,fallback:L.ProductPageSkeleton,layout:{header:!1},wpOpenMenu:"menu-posts-product",capability:"manage_woocommerce"};e.push({...t,path:"/add-product",breadcrumbs:[["/add-product",(0,v.__)("Product","woocommerce")],(0,v.__)("Add New Product","woocommerce")],navArgs:{id:"woocommerce-add-product"}}),e.push({...t,path:"/product/:productId",breadcrumbs:[["/edit-product",(0,v.__)("Product","woocommerce")],(0,v.__)("Edit Product","woocommerce")],navArgs:{id:"woocommerce-edit-product"}})}else window.wcAdminFeatures["new-product-management-experience"]&&(e.push({container:M,path:"/add-product",breadcrumbs:[["/add-product",(0,v.__)("Product","woocommerce")],(0,v.__)("Add New Product","woocommerce")],navArgs:{id:"woocommerce-add-product"},wpOpenMenu:"menu-posts-product",capability:"manage_woocommerce"}),e.push({container:N,path:"/product/:productId",breadcrumbs:[["/edit-product",(0,v.__)("Product","woocommerce")],(0,v.__)("Edit Product","woocommerce")],navArgs:{id:"woocommerce-edit-product"},wpOpenMenu:"menu-posts-product",capability:"manage_woocommerce"}));window.wcAdminFeatures["product-variation-management"]&&e.push({container:x,fallback:L.ProductPageSkeleton,layout:{header:!1},path:"/product/:productId/variation/:variationId",breadcrumbs:[["/edit-product",(0,v.__)("Product","woocommerce")],(0,v.__)("Edit Product Variation","woocommerce")],navArgs:{id:"woocommerce-edit-product"},wpOpenMenu:"menu-posts-product",capability:"edit_products"}),window.wcAdminFeatures.onboarding&&(window.wcAdminFeatures["core-profiler"]?e.push({container:D,path:"/setup-wizard",breadcrumbs:[...t,(0,v.__)("Profiler","woocommerce")],capability:"manage_woocommerce"}):e.push({container:j,path:"/setup-wizard",breadcrumbs:[...t,(0,v.__)("Setup Wizard","woocommerce")],capability:"manage_woocommerce"})),window.wcAdminFeatures["core-profiler"]&&e.push({container:D,path:"/profiler",breadcrumbs:[...t,(0,v.__)("Profiler","woocommerce")],capability:"manage_woocommerce"}),window.wcAdminFeatures["customize-store"]&&e.push({container:z,path:"/customize-store/*",breadcrumbs:[...t,(0,v.__)("Customize Your Store","woocommerce")],capability:"manage_woocommerce"}),window.wcAdminFeatures.settings&&e.push({container:Z,path:"/settings/:page",breadcrumbs:e=>{let{match:n}=e;const o=(0,r.O3)("settingsPages"),a=o[n.params.page];return a?[...t,[o.general?"/settings/general":`/settings/${Object.keys(o)[0]}`,(0,v.__)("Settings","woocommerce")],a]:[]},wpOpenMenu:"toplevel_page_woocommerce",capability:"manage_woocommerce"}),window.wcAdminFeatures["wc-pay-welcome-page"]&&e.push({container:B,path:"/wc-pay-welcome-page",breadcrumbs:[["/wc-pay-welcome-page",(0,v.__)("WooPayments","woocommerce")],(0,v.__)("WooPayments","woocommerce")],navArgs:{id:"woocommerce-wc-pay-welcome-page"},wpOpenMenu:"toplevel_page_woocommerce-wc-pay-welcome-page",capability:"manage_woocommerce"});const n=(0,_.applyFilters)("woocommerce_admin_pages_list",e);return n.push({container:S.E,path:"*",breadcrumbs:[...t,(0,v.__)("Not allowed","woocommerce")],wpOpenMenu:"toplevel_page_woocommerce"}),n},W=t=>{let{...n}=t;const o=function(e){const t=(0,d.useRef)();return(0,d.useEffect)((()=>{t.current=e}),[e]),t.current}(n);(0,d.useEffect)((()=>{window.document.documentElement.scrollTop=0,window.document.body.classList.remove("woocommerce-admin-is-loading")}),[]),(0,d.useEffect)((()=>{if(o){const e=(0,C.omit)(o.query,"chartType","filter","paged"),t=(0,C.omit)(n.query,"chartType","filter","paged");o.query.paged>1&&!(0,C.isEqual)(e,t)&&(0,g.getHistory)().replace((0,g.getNewPath)({paged:1})),o.match.url!==n.match.url&&(window.document.documentElement.scrollTop=0)}}),[n,o]);const{page:r,match:a,query:i}=n,{url:s,params:c}=a;return window.wpNavMenuUrlUpdate(i),window.wpNavMenuClassChange(r,s),(0,e.createElement)(e.Suspense,{fallback:r.fallback?(0,e.createElement)(r.fallback,null):(0,e.createElement)("div",{className:"woocommerce-layout__loading"},(0,e.createElement)(E.Spinner,null))},(0,e.createElement)(r.container,{params:c,path:s,pathMatch:r.path,query:i}))};window.wpNavMenuUrlUpdate=function(e){const t=(0,g.getPersistedQuery)(e),n=(0,g.getQueryExcludedScreens)(),o=document.querySelectorAll("#adminmenu a");Array.from(o).forEach((e=>function(e,t,n){if((0,g.isWCAdmin)(e.href)){const o=(0,C.last)(e.href.split("?")),r=(0,H.parse)(o),a=r.path||"homescreen",i=(0,g.getScreenFromPath)(a),s=n.includes(i),c="admin.php?"+(0,H.stringify)(Object.assign(r,s?{}:t));e.href=c,e.onclick=e=>{e.preventDefault(),(0,g.getHistory)().push(c)}}}(e,t,n)))},window.wpNavMenuClassChange=function(e,t){var n;const o=document.querySelector("#adminmenu");Array.from(o.getElementsByClassName("current")).forEach((function(e){e.classList.remove("current")})),Array.from(o.querySelectorAll(".wp-has-current-submenu")).forEach((function(e){e.classList.remove("wp-has-current-submenu"),e.classList.remove("wp-menu-open"),e.classList.remove("selected"),e.classList.add("wp-not-current-submenu"),e.classList.add("menu-top")}));const r="/"===t?"admin.php?page=wc-admin":"admin.php?page=wc-admin&path="+encodeURIComponent(t);let a="/"===t?`li > a[href$="${r}"], li > a[href*="${r}?"]`:`li > a[href*="${r}"]`;const i=null===(n=e.navArgs)||void 0===n?void 0:n.parentPath;i&&(a+=`, li > a[href*="${"/"===i?"admin.php?page=wc-admin":"admin.php?page=wc-admin&path="+encodeURIComponent(i)}"]`);const s=o.querySelectorAll(a);if(Array.from(s).forEach((function(e){e.parentElement.classList.add("current")})),e.wpOpenMenu){const t=o.querySelector("#"+e.wpOpenMenu);t&&(t.classList.remove("wp-not-current-submenu"),t.classList.add("wp-has-current-submenu"),t.classList.add("wp-menu-open"),t.classList.add("current"))}document.querySelector("#wpwrap").classList.remove("wp-responsive-open")};var U=i(83849),G=i.n(U),Y=i(22629),Q=i(74617),q=i(14812);function J(){return window.innerHeight+window.scrollY>=document.body.scrollHeight}function K(){const[t,n]=(0,e.useState)(!1),[o,r]=(0,e.useState)(J()),a=(0,e.useRef)(null);return(0,e.useEffect)((()=>{const e=()=>{n(window.pageYOffset>20),r(J())},t=()=>{a.current=window.requestAnimationFrame(e)};return window.addEventListener("scroll",t),window.addEventListener("resize",t),()=>{window.removeEventListener("scroll",t),window.removeEventListener("resize",t),window.cancelAnimationFrame(a.current)}}),[]),{isScrolled:t,atBottom:o,atTop:!t}}var X=i(70123);const $=t=>{var n;let{sections:o,isEmbedded:r=!1,query:a}=t;const i=(0,e.useRef)(null),s=(0,X.useActiveSetupTasklist)(),c=(0,Q.getSetting)("siteTitle",""),l=o.slice(-1)[0],{isScrolled:m}=K();let u=null;const d=G()("woocommerce-layout__header",{"is-scrolled":m}),p=(0,q.useSlot)(w.WC_HEADER_PAGE_TITLE_SLOT_NAME),h=Boolean(null==p||null===(n=p.fills)||void 0===n?void 0:n.length),C=(0,q.useSlot)(w.WC_HEADER_SLOT_NAME),g=null==C?void 0:C.fills,f=()=>{clearTimeout(u),u=setTimeout((function(){const e=document.querySelector("#wpbody");e&&i.current&&(e.style.marginTop=`${i.current.height}px`)}),200)};return(0,e.useLayoutEffect)((()=>(f(),window.addEventListener("resize",f),()=>{window.removeEventListener("resize",f);const e=document.querySelector("#wpbody");e&&(e.style.marginTop=null)})),[g]),(0,e.useEffect)((()=>{if(!r){const e=o.map((e=>Array.isArray(e)?e[1]:e)).reverse().join(" ‹ "),t=(0,Y.decodeEntities)((0,v.sprintf)((0,v.__)("%1$s ‹ %2$s — WooCommerce","woocommerce"),e,c));document.title!==t&&(document.title=t)}}),[r,o,c]),(0,e.createElement)("div",{className:d,ref:i},s&&(0,e.createElement)(X.TasksReminderBar,{updateBodyMargin:f,taskListId:s}),(0,e.createElement)("div",{className:"woocommerce-layout__header-wrapper"},(0,e.createElement)(w.WooHeaderNavigationItem.Slot,{fillProps:{isEmbedded:r,query:a}}),(0,e.createElement)(q.Text,{className:"woocommerce-layout__header-heading",as:"h1"},(0,Y.decodeEntities)(h?(0,e.createElement)(w.WooHeaderPageTitle.Slot,{fillProps:{isEmbedded:r,query:a}}):l)),(0,e.createElement)(w.WooHeaderItem.Slot,{fillProps:{isEmbedded:r,query:a}})))},ee=()=>{var t;const n=(0,q.useSlot)(w.WC_FOOTER_SLOT_NAME),o=Boolean(null==n||null===(t=n.fills)||void 0===t?void 0:t.length),{atBottom:r}=K();return o?(0,e.createElement)("div",{className:G()("woocommerce-layout__footer",{"at-bottom":r})},(0,e.createElement)(w.WooFooterItem.Slot,null)):null};class te extends e.Component{render(){return(0,e.createElement)("div",{id:"woocommerce-layout__notice-list",className:"woocommerce-layout__notice-list"})}}const ne=te;var oe=i(5267);let re=He();const ae=e=>ge(e,re);let ie=He();ae.write=e=>ge(e,ie);let se=He();ae.onStart=e=>ge(e,se);let ce=He();ae.onFrame=e=>ge(e,ce);let le=He();ae.onFinish=e=>ge(e,le);let me=[];ae.setTimeout=(e,t)=>{let n=ae.now()+t,o=()=>{let e=me.findIndex((e=>e.cancel==o));~e&&me.splice(e,1),he-=~e?1:0},r={time:n,handler:e,cancel:o};return me.splice(ue(n),0,r),he+=1,fe(),r};let ue=e=>~(~me.findIndex((t=>t.time>e))||~me.length);ae.cancel=e=>{se.delete(e),ce.delete(e),re.delete(e),ie.delete(e),le.delete(e)},ae.sync=e=>{Ce=!0,ae.batchedUpdates(e),Ce=!1},ae.throttle=e=>{let t;function n(){try{e(...t)}finally{t=null}}function o(...e){t=e,ae.onStart(n)}return o.handler=e,o.cancel=()=>{se.delete(n),t=null},o};let de="undefined"!=typeof window?window.requestAnimationFrame:()=>{};ae.use=e=>de=e,ae.now="undefined"!=typeof performance?()=>performance.now():Date.now,ae.batchedUpdates=e=>e(),ae.catch=console.error,ae.frameLoop="always",ae.advance=()=>{"demand"!==ae.frameLoop?console.warn("Cannot call the manual advancement of rafz whilst frameLoop is not set as demand"):we()};let pe=-1,he=0,Ce=!1;function ge(e,t){Ce?(t.delete(e),e(0)):(t.add(e),fe())}function fe(){pe<0&&(pe=0,"demand"!==ae.frameLoop&&de(ye))}function ye(){~pe&&(de(ye),ae.batchedUpdates(we))}function we(){let e=pe;pe=ae.now();let t=ue(pe);t&&(_e(me.splice(0,t),(e=>e.handler())),he-=t),se.flush(),re.flush(e?Math.min(64,pe-e):16.667),ce.flush(),ie.flush(),le.flush(),he||(pe=-1)}function He(){let e=new Set,t=e;return{add(n){he+=t!=e||e.has(n)?0:1,e.add(n)},delete:n=>(he-=t==e&&e.has(n)?1:0,e.delete(n)),flush(n){t.size&&(e=new Set,he-=t.size,_e(t,(t=>t(n)&&e.add(t))),he+=e.size,t=e)}}}function _e(e,t){e.forEach((e=>{try{t(e)}catch(e){ae.catch(e)}}))}function ve(){}const Ee={arr:Array.isArray,obj:e=>!!e&&"Object"===e.constructor.name,fun:e=>"function"==typeof e,str:e=>"string"==typeof e,num:e=>"number"==typeof e,und:e=>void 0===e};function Le(e,t){if(Ee.arr(e)){if(!Ee.arr(t)||e.length!==t.length)return!1;for(let n=0;ne.forEach(t);function ke(e,t,n){if(Ee.arr(e))for(let o=0;oEe.und(e)?[]:Ee.arr(e)?e:[e];function Me(e,t){if(e.size){const n=Array.from(e);e.clear(),be(n,t)}}const Ne=(e,...t)=>Me(e,(e=>e(...t))),xe=()=>"undefined"==typeof window||!window.navigator||/ServerSideRendering|^Deno\//.test(window.navigator.userAgent);let Te,Ae,Ie=null,Oe=!1,Pe=ve;var Re=Object.freeze({__proto__:null,get createStringInterpolator(){return Te},get to(){return Ae},get colors(){return Ie},get skipAnimation(){return Oe},get willAdvance(){return Pe},assign:e=>{e.to&&(Ae=e.to),e.now&&(ae.now=e.now),void 0!==e.colors&&(Ie=e.colors),null!=e.skipAnimation&&(Oe=e.skipAnimation),e.createStringInterpolator&&(Te=e.createStringInterpolator),e.requestAnimationFrame&&ae.use(e.requestAnimationFrame),e.batchedUpdates&&(ae.batchedUpdates=e.batchedUpdates),e.willAdvance&&(Pe=e.willAdvance),e.frameLoop&&(ae.frameLoop=e.frameLoop)}});const Ve=new Set;let je=[],De=[],Ze=0;const Be={get idle(){return!Ve.size&&!je.length},start(e){Ze>e.priority?(Ve.add(e),ae.onStart(ze)):(Fe(e),ae(Ue))},advance:Ue,sort(e){if(Ze)ae.onFrame((()=>Be.sort(e)));else{const t=je.indexOf(e);~t&&(je.splice(t,1),We(e))}},clear(){je=[],Ve.clear()}};function ze(){Ve.forEach(Fe),Ve.clear(),ae(Ue)}function Fe(e){je.includes(e)||We(e)}function We(e){je.splice(function(t,n){const o=t.findIndex((t=>t.priority>e.priority));return o<0?t.length:o}(je),0,e)}function Ue(e){const t=De;for(let n=0;n0}const Ge="[-+]?\\d*\\.?\\d+",Ye=Ge+"%";function Qe(...e){return"\\(\\s*("+e.join(")\\s*,\\s*(")+")\\s*\\)"}const qe=new RegExp("rgb"+Qe(Ge,Ge,Ge)),Je=new RegExp("rgba"+Qe(Ge,Ge,Ge,Ge)),Ke=new RegExp("hsl"+Qe(Ge,Ye,Ye)),Xe=new RegExp("hsla"+Qe(Ge,Ye,Ye,Ge)),$e=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,et=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,tt=/^#([0-9a-fA-F]{6})$/,nt=/^#([0-9a-fA-F]{8})$/;function ot(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function rt(e,t,n){const o=n<.5?n*(1+t):n+t-n*t,r=2*n-o,a=ot(r,o,e+1/3),i=ot(r,o,e),s=ot(r,o,e-1/3);return Math.round(255*a)<<24|Math.round(255*i)<<16|Math.round(255*s)<<8}function at(e){const t=parseInt(e,10);return t<0?0:t>255?255:t}function it(e){return(parseFloat(e)%360+360)%360/360}function st(e){const t=parseFloat(e);return t<0?0:t>1?255:Math.round(255*t)}function ct(e){const t=parseFloat(e);return t<0?0:t>100?1:t/100}function lt(e){let t=function(e){let t;return"number"==typeof e?e>>>0===e&&e>=0&&e<=4294967295?e:null:(t=tt.exec(e))?parseInt(t[1]+"ff",16)>>>0:Ie&&void 0!==Ie[e]?Ie[e]:(t=qe.exec(e))?(at(t[1])<<24|at(t[2])<<16|at(t[3])<<8|255)>>>0:(t=Je.exec(e))?(at(t[1])<<24|at(t[2])<<16|at(t[3])<<8|st(t[4]))>>>0:(t=$e.exec(e))?parseInt(t[1]+t[1]+t[2]+t[2]+t[3]+t[3]+"ff",16)>>>0:(t=nt.exec(e))?parseInt(t[1],16)>>>0:(t=et.exec(e))?parseInt(t[1]+t[1]+t[2]+t[2]+t[3]+t[3]+t[4]+t[4],16)>>>0:(t=Ke.exec(e))?(255|rt(it(t[1]),ct(t[2]),ct(t[3])))>>>0:(t=Xe.exec(e))?(rt(it(t[1]),ct(t[2]),ct(t[3]))|st(t[4]))>>>0:null}(e);return null===t?e:(t=t||0,`rgba(${(4278190080&t)>>>24}, ${(16711680&t)>>>16}, ${(65280&t)>>>8}, ${(255&t)/255})`)}const mt=(e,t,n)=>{if(Ee.fun(e))return e;if(Ee.arr(e))return mt({range:e,output:t,extrapolate:n});if(Ee.str(e.output[0]))return Te(e);const o=e,r=o.output,a=o.range||[0,1],i=o.extrapolateLeft||o.extrapolate||"extend",s=o.extrapolateRight||o.extrapolate||"extend",c=o.easing||(e=>e);return e=>{const t=function(e,t){for(var n=1;n=e);++n);return n-1}(e,a);return function(e,t,n,o,r,a,i,s,c){let l=c?c(e):e;if(ln){if("identity"===s)return l;"clamp"===s&&(l=n)}return o===r?o:t===n?e<=t?o:r:(t===-1/0?l=-l:n===1/0?l-=t:l=(l-t)/(n-t),l=a(l),o===-1/0?l=-l:r===1/0?l+=o:l=l*(r-o)+o,l)}(e,a[t],a[t+1],r[t],r[t+1],c,i,s,o.map)}};function ut(){return ut=Object.assign||function(e){for(var t=1;tBoolean(e&&e[dt]),Ct=e=>e&&e[dt]?e[dt]():e,gt=e=>e[pt]||null;function ft(e,t){let n=e[pt];n&&n.forEach((e=>{!function(e,t){e.eventObserved?e.eventObserved(t):e(t)}(e,t)}))}class yt{constructor(e){if(this[dt]=void 0,this[pt]=void 0,!e&&!(e=this.get))throw Error("Unknown getter");wt(this,e)}}const wt=(e,t)=>vt(e,dt,t);function Ht(e,t){if(e[dt]){let n=e[pt];n||vt(e,pt,n=new Set),n.has(t)||(n.add(t),e.observerAdded&&e.observerAdded(n.size,t))}return t}function _t(e,t){let n=e[pt];if(n&&n.has(t)){const o=n.size-1;o?n.delete(t):e[pt]=null,e.observerRemoved&&e.observerRemoved(o,t)}}const vt=(e,t,n)=>Object.defineProperty(e,t,{value:n,writable:!0,configurable:!0}),Et=/[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,Lt=/(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d\.]+%?\))/gi,bt=new RegExp(`(${Et.source})(%|[a-z]+)`,"i"),kt=/rgba\(([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+)\)/gi,St=/var\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\)/,Mt=e=>{const[t,n]=Nt(e);if(!t||xe())return e;const o=window.getComputedStyle(document.documentElement).getPropertyValue(t);if(o)return o.trim();if(n&&n.startsWith("--")){return window.getComputedStyle(document.documentElement).getPropertyValue(n)||e}return n&&St.test(n)?Mt(n):n||e},Nt=e=>{const t=St.exec(e);if(!t)return[,];const[,n,o]=t;return[n,o]};let xt;const Tt=(e,t,n,o,r)=>`rgba(${Math.round(t)}, ${Math.round(n)}, ${Math.round(o)}, ${r})`,At=e=>{xt||(xt=Ie?new RegExp(`(${Object.keys(Ie).join("|")})(?!\\w)`,"g"):/^\b$/);const t=e.output.map((e=>Ct(e).replace(St,Mt).replace(Lt,lt).replace(xt,lt))),n=t.map((e=>e.match(Et).map(Number))),o=n[0].map(((e,t)=>n.map((e=>{if(!(t in e))throw Error('The arity of each "output" value must be equal');return e[t]})))).map((t=>mt(ut({},e,{output:t}))));return e=>{var n;const r=!bt.test(t[0])&&(null==(n=t.find((e=>bt.test(e))))?void 0:n.replace(Et,""));let a=0;return t[0].replace(Et,(()=>`${o[a++](e)}${r||""}`)).replace(kt,Tt)}},It="react-spring: ",Ot=e=>{const t=e;let n=!1;if("function"!=typeof t)throw new TypeError(`${It}once requires a function parameter`);return(...e)=>{n||(t(...e),n=!0)}},Pt=Ot(console.warn),Rt=Ot(console.warn);function Vt(e){return Ee.str(e)&&("#"==e[0]||/\d/.test(e)||!xe()&&St.test(e)||e in(Ie||{}))}const jt=e=>(0,d.useEffect)(e,Dt),Dt=[];function Zt(){const e=(0,d.useState)()[1],t=(0,d.useState)(Bt)[0];return jt(t.unmount),()=>{t.current&&e({})}}function Bt(){const e={current:!0,unmount:()=>()=>{e.current=!1}};return e}function zt(e){const t=(0,d.useRef)();return(0,d.useEffect)((()=>{t.current=e})),t.current}const Ft="undefined"!=typeof window&&window.document&&window.document.createElement?d.useLayoutEffect:d.useEffect,Wt=Symbol.for("Animated:node"),Ut=e=>e&&e[Wt],Gt=(e,t)=>{return n=e,o=Wt,r=t,Object.defineProperty(n,o,{value:r,writable:!0,configurable:!0});var n,o,r},Yt=e=>e&&e[Wt]&&e[Wt].getPayload();class Qt{constructor(){this.payload=void 0,Gt(this,this)}getPayload(){return this.payload||[]}}class qt extends Qt{constructor(e){super(),this.done=!0,this.elapsedTime=void 0,this.lastPosition=void 0,this.lastVelocity=void 0,this.v0=void 0,this.durationProgress=0,this._value=e,Ee.num(this._value)&&(this.lastPosition=this._value)}static create(e){return new qt(e)}getPayload(){return[this]}getValue(){return this._value}setValue(e,t){return Ee.num(e)&&(this.lastPosition=e,t&&(e=Math.round(e/t)*t,this.done&&(this.lastPosition=e))),this._value!==e&&(this._value=e,!0)}reset(){const{done:e}=this;this.done=!1,Ee.num(this._value)&&(this.elapsedTime=0,this.durationProgress=0,this.lastPosition=this._value,e&&(this.lastVelocity=null),this.v0=null)}}class Jt extends qt{constructor(e){super(0),this._string=null,this._toString=void 0,this._toString=mt({output:[e,e]})}static create(e){return new Jt(e)}getValue(){let e=this._string;return null==e?this._string=this._toString(this._value):e}setValue(e){if(Ee.str(e)){if(e==this._string)return!1;this._string=e,this._value=1}else{if(!super.setValue(e))return!1;this._string=null}return!0}reset(e){e&&(this._toString=mt({output:[this.getValue(),e]})),this._value=0,super.reset()}}const Kt={dependencies:null};class Xt extends Qt{constructor(e){super(),this.source=e,this.setValue(e)}getValue(e){const t={};return ke(this.source,((n,o)=>{var r;(r=n)&&r[Wt]===r?t[o]=n.getValue(e):ht(n)?t[o]=Ct(n):e||(t[o]=n)})),t}setValue(e){this.source=e,this.payload=this._makePayload(e)}reset(){this.payload&&be(this.payload,(e=>e.reset()))}_makePayload(e){if(e){const t=new Set;return ke(e,this._addToPayload,t),Array.from(t)}}_addToPayload(e){Kt.dependencies&&ht(e)&&Kt.dependencies.add(e);const t=Yt(e);t&&be(t,(e=>this.add(e)))}}class $t extends Xt{constructor(e){super(e)}static create(e){return new $t(e)}getValue(){return this.source.map((e=>e.getValue()))}setValue(e){const t=this.getPayload();return e.length==t.length?t.map(((t,n)=>t.setValue(e[n]))).some(Boolean):(super.setValue(e.map(en)),!0)}}function en(e){return(Vt(e)?Jt:qt).create(e)}function tn(e){const t=Ut(e);return t?t.constructor:Ee.arr(e)?$t:Vt(e)?Jt:qt}function nn(){return nn=Object.assign||function(e){for(var t=1;t{const n=!Ee.fun(e)||e.prototype&&e.prototype.isReactComponent;return(0,d.forwardRef)(((o,r)=>{const a=(0,d.useRef)(null),i=n&&(0,d.useCallback)((e=>{a.current=function(e,t){return e&&(Ee.fun(e)?e(t):e.current=t),t}(r,e)}),[r]),[s,c]=function(e,t){const n=new Set;return Kt.dependencies=n,e.style&&(e=nn({},e,{style:t.createAnimatedStyle(e.style)})),e=new Xt(e),Kt.dependencies=null,[e,n]}(o,t),l=Zt(),m=()=>{const e=a.current;n&&!e||!1===(!!e&&t.applyAnimatedValues(e,s.getValue(!0)))&&l()},u=new rn(m,c),p=(0,d.useRef)();Ft((()=>{const e=p.current;p.current=u,be(c,(e=>Ht(e,u))),e&&(be(e.deps,(t=>_t(t,e))),ae.cancel(e.update))})),(0,d.useEffect)(m,[]),jt((()=>()=>{const e=p.current;be(e.deps,(t=>_t(t,e)))}));const h=t.getComponentProps(s.getValue());return d.createElement(e,nn({},h,{ref:i}))}))};class rn{constructor(e,t){this.update=e,this.deps=t}eventObserved(e){"change"==e.type&&ae.write(this.update)}}const an=Symbol.for("AnimatedComponent"),sn=e=>Ee.str(e)?e:e&&Ee.str(e.displayName)?e.displayName:Ee.fun(e)&&e.name||null;function cn(){return cn=Object.assign||function(e){for(var t=1;t!0===e||!!(t&&e&&(Ee.fun(e)?e(t):Se(e).includes(t))),un=(e,t)=>Ee.obj(e)?t&&e[t]:e,dn=(e,t)=>!0===e.default?e[t]:e.default?e.default[t]:void 0,pn=e=>e,hn=(e,t=pn)=>{let n=Cn;e.default&&!0!==e.default&&(e=e.default,n=Object.keys(e));const o={};for(const r of n){const n=t(e[r],r);Ee.und(n)||(o[r]=n)}return o},Cn=["config","onProps","onStart","onChange","onPause","onResume","onRest"],gn={config:1,from:1,to:1,ref:1,loop:1,reset:1,pause:1,cancel:1,reverse:1,immediate:1,default:1,delay:1,onProps:1,onStart:1,onChange:1,onPause:1,onResume:1,onRest:1,onResolve:1,items:1,trail:1,sort:1,expires:1,initial:1,enter:1,update:1,leave:1,children:1,onDestroyed:1,keys:1,callId:1,parentId:1};function fn(e){const t=function(e){const t={};let n=0;if(ke(e,((e,o)=>{gn[o]||(t[o]=e,n++)})),n)return t}(e);if(t){const n={to:t};return ke(e,((e,o)=>o in t||(n[o]=e))),n}return cn({},e)}function yn(e){return e=Ct(e),Ee.arr(e)?e.map(yn):Vt(e)?Re.createStringInterpolator({range:[0,1],output:[e,e]})(1):e}function wn(e){for(const t in e)return!0;return!1}function Hn(e){return Ee.fun(e)||Ee.arr(e)&&Ee.obj(e[0])}function _n(e,t){var n;null==(n=e.ref)||n.delete(e),null==t||t.delete(e)}function vn(e,t){var n;t&&e.ref!==t&&(null==(n=e.ref)||n.delete(e),t.add(e),e.ref=t)}Math.PI,Math.PI;const En=cn({},{tension:170,friction:26},{mass:1,damping:1,easing:e=>e,clamp:!1});class Ln{constructor(){this.tension=void 0,this.friction=void 0,this.frequency=void 0,this.damping=void 0,this.mass=void 0,this.velocity=0,this.restVelocity=void 0,this.precision=void 0,this.progress=void 0,this.duration=void 0,this.easing=void 0,this.clamp=void 0,this.bounce=void 0,this.decay=void 0,this.round=void 0,Object.assign(this,En)}}function bn(e,t){if(Ee.und(t.decay)){const n=!Ee.und(t.tension)||!Ee.und(t.friction);!n&&Ee.und(t.frequency)&&Ee.und(t.damping)&&Ee.und(t.mass)||(e.duration=void 0,e.decay=void 0),n&&(e.frequency=void 0)}else e.duration=void 0}const kn=[];class Sn{constructor(){this.changed=!1,this.values=kn,this.toValues=null,this.fromValues=kn,this.to=void 0,this.from=void 0,this.config=new Ln,this.immediate=!1}}function Mn(e,{key:t,props:n,defaultProps:o,state:r,actions:a}){return new Promise(((i,s)=>{var c;let l,m,u=mn(null!=(c=n.cancel)?c:null==o?void 0:o.cancel,t);if(u)h();else{Ee.und(n.pause)||(r.paused=mn(n.pause,t));let e=null==o?void 0:o.pause;!0!==e&&(e=r.paused||mn(e,t)),l=ln(n.delay||0,t),e?(r.resumeQueue.add(p),a.pause()):(a.resume(),p())}function d(){r.resumeQueue.add(p),r.timeouts.delete(m),m.cancel(),l=m.time-ae.now()}function p(){l>0&&!Re.skipAnimation?(r.delayed=!0,m=ae.setTimeout(h,l),r.pauseQueue.add(d),r.timeouts.add(m)):h()}function h(){r.delayed&&(r.delayed=!1),r.pauseQueue.delete(d),r.timeouts.delete(m),e<=(r.cancelId||0)&&(u=!0);try{a.start(cn({},n,{callId:e,cancel:u}),i)}catch(e){s(e)}}}))}const Nn=(e,t)=>1==t.length?t[0]:t.some((e=>e.cancelled))?An(e.get()):t.every((e=>e.noop))?xn(e.get()):Tn(e.get(),t.every((e=>e.finished))),xn=e=>({value:e,noop:!0,finished:!0,cancelled:!1}),Tn=(e,t,n=!1)=>({value:e,finished:t,cancelled:n}),An=e=>({value:e,cancelled:!0,finished:!1});function In(e,t,n,o){const{callId:r,parentId:a,onRest:i}=t,{asyncTo:s,promise:c}=n;return a||e!==s||t.reset?n.promise=(async()=>{n.asyncId=r,n.asyncTo=e;const l=hn(t,((e,t)=>"onRest"===t?void 0:e));let m,u;const d=new Promise(((e,t)=>(m=e,u=t))),p=e=>{const t=r<=(n.cancelId||0)&&An(o)||r!==n.asyncId&&Tn(o,!1);if(t)throw e.result=t,u(e),e},h=(e,t)=>{const a=new Pn,i=new Rn;return(async()=>{if(Re.skipAnimation)throw On(n),i.result=Tn(o,!1),u(i),i;p(a);const s=Ee.obj(e)?cn({},e):cn({},t,{to:e});s.parentId=r,ke(l,((e,t)=>{Ee.und(s[t])&&(s[t]=e)}));const c=await o.start(s);return p(a),n.paused&&await new Promise((e=>{n.resumeQueue.add(e)})),c})()};let C;if(Re.skipAnimation)return On(n),Tn(o,!1);try{let t;t=Ee.arr(e)?(async e=>{for(const t of e)await h(t)})(e):Promise.resolve(e(h,o.stop.bind(o))),await Promise.all([t.then(m),d]),C=Tn(o.get(),!0,!1)}catch(e){if(e instanceof Pn)C=e.result;else{if(!(e instanceof Rn))throw e;C=e.result}}finally{r==n.asyncId&&(n.asyncId=a,n.asyncTo=a?s:void 0,n.promise=a?c:void 0)}return Ee.fun(i)&&ae.batchedUpdates((()=>{i(C,o,o.item)})),C})():c}function On(e,t){Me(e.timeouts,(e=>e.cancel())),e.pauseQueue.clear(),e.resumeQueue.clear(),e.asyncId=e.asyncTo=e.promise=void 0,t&&(e.cancelId=t)}class Pn extends Error{constructor(){super("An async animation has been interrupted. You see this error because you forgot to use `await` or `.catch(...)` on its returned promise."),this.result=void 0}}class Rn extends Error{constructor(){super("SkipAnimationSignal"),this.result=void 0}}const Vn=e=>e instanceof Dn;let jn=1;class Dn extends yt{constructor(...e){super(...e),this.id=jn++,this.key=void 0,this._priority=0}get priority(){return this._priority}set priority(e){this._priority!=e&&(this._priority=e,this._onPriorityChange(e))}get(){const e=Ut(this);return e&&e.getValue()}to(...e){return Re.to(this,e)}interpolate(...e){return Pt(`${It}The "interpolate" function is deprecated in v9 (use "to" instead)`),Re.to(this,e)}toJSON(){return this.get()}observerAdded(e){1==e&&this._attach()}observerRemoved(e){0==e&&this._detach()}_attach(){}_detach(){}_onChange(e,t=!1){ft(this,{type:"change",parent:this,value:e,idle:t})}_onPriorityChange(e){this.idle||Be.sort(this),ft(this,{type:"priority",parent:this,priority:e})}}const Zn=Symbol.for("SpringPhase"),Bn=e=>(1&e[Zn])>0,zn=e=>(2&e[Zn])>0,Fn=e=>(4&e[Zn])>0,Wn=(e,t)=>t?e[Zn]|=3:e[Zn]&=-3,Un=(e,t)=>t?e[Zn]|=4:e[Zn]&=-5;class Gn extends Dn{constructor(e,t){if(super(),this.key=void 0,this.animation=new Sn,this.queue=void 0,this.defaultProps={},this._state={paused:!1,delayed:!1,pauseQueue:new Set,resumeQueue:new Set,timeouts:new Set},this._pendingCalls=new Set,this._lastCallId=0,this._lastToId=0,this._memoizedDuration=0,!Ee.und(e)||!Ee.und(t)){const n=Ee.obj(e)?cn({},e):cn({},t,{from:e});Ee.und(n.default)&&(n.default=!0),this.start(n)}}get idle(){return!(zn(this)||this._state.asyncTo)||Fn(this)}get goal(){return Ct(this.animation.to)}get velocity(){const e=Ut(this);return e instanceof qt?e.lastVelocity||0:e.getPayload().map((e=>e.lastVelocity||0))}get hasAnimated(){return Bn(this)}get isAnimating(){return zn(this)}get isPaused(){return Fn(this)}get isDelayed(){return this._state.delayed}advance(e){let t=!0,n=!1;const o=this.animation;let{config:r,toValues:a}=o;const i=Yt(o.to);!i&&ht(o.to)&&(a=Se(Ct(o.to))),o.values.forEach(((s,c)=>{if(s.done)return;const l=s.constructor==Jt?1:i?i[c].lastPosition:a[c];let m=o.immediate,u=l;if(!m){if(u=s.lastPosition,r.tension<=0)return void(s.done=!0);let t=s.elapsedTime+=e;const n=o.fromValues[c],a=null!=s.v0?s.v0:s.v0=Ee.arr(r.velocity)?r.velocity[c]:r.velocity;let i;if(Ee.und(r.duration))if(r.decay){const e=!0===r.decay?.998:r.decay,o=Math.exp(-(1-e)*t);u=n+a/(1-e)*(1-o),m=Math.abs(s.lastPosition-u)<.1,i=a*o}else{i=null==s.lastVelocity?a:s.lastVelocity;const t=r.precision||(n==l?.005:Math.min(1,.001*Math.abs(l-n))),o=r.restVelocity||t/10,c=r.clamp?0:r.bounce,d=!Ee.und(c),p=n==l?s.v0>0:no,h||(m=Math.abs(l-u)<=t,!m));++e)d&&(C=u==l||u>l==p,C&&(i=-i*c,u=l)),i+=(1e-6*-r.tension*(u-l)+.001*-r.friction*i)/r.mass*g,u+=i*g}else{let o=1;r.duration>0&&(this._memoizedDuration!==r.duration&&(this._memoizedDuration=r.duration,s.durationProgress>0&&(s.elapsedTime=r.duration*s.durationProgress,t=s.elapsedTime+=e)),o=(r.progress||0)+t/this._memoizedDuration,o=o>1?1:o<0?0:o,s.durationProgress=o),u=n+r.easing(o)*(l-n),i=(u-s.lastPosition)/e,m=1==o}s.lastVelocity=i,Number.isNaN(u)&&(console.warn("Got NaN while animating:",this),m=!0)}i&&!i[c].done&&(m=!1),m?s.done=!0:t=!1,s.setValue(u,r.round)&&(n=!0)}));const s=Ut(this),c=s.getValue();if(t){const e=Ct(o.to);c===e&&!n||r.decay?n&&r.decay&&this._onChange(c):(s.setValue(e),this._onChange(e)),this._stop()}else n&&this._onChange(c)}set(e){return ae.batchedUpdates((()=>{this._stop(),this._focus(e),this._set(e)})),this}pause(){this._update({pause:!0})}resume(){this._update({pause:!1})}finish(){if(zn(this)){const{to:e,config:t}=this.animation;ae.batchedUpdates((()=>{this._onStart(),t.decay||this._set(e,!1),this._stop()}))}return this}update(e){return(this.queue||(this.queue=[])).push(e),this}start(e,t){let n;return Ee.und(e)?(n=this.queue||[],this.queue=[]):n=[Ee.obj(e)?e:cn({},t,{to:e})],Promise.all(n.map((e=>this._update(e)))).then((e=>Nn(this,e)))}stop(e){const{to:t}=this.animation;return this._focus(this.get()),On(this._state,e&&this._lastCallId),ae.batchedUpdates((()=>this._stop(t,e))),this}reset(){this._update({reset:!0})}eventObserved(e){"change"==e.type?this._start():"priority"==e.type&&(this.priority=e.priority+1)}_prepareNode(e){const t=this.key||"";let{to:n,from:o}=e;n=Ee.obj(n)?n[t]:n,(null==n||Hn(n))&&(n=void 0),o=Ee.obj(o)?o[t]:o,null==o&&(o=void 0);const r={to:n,from:o};return Bn(this)||(e.reverse&&([n,o]=[o,n]),o=Ct(o),Ee.und(o)?Ut(this)||this._set(n):this._set(o)),r}_update(e,t){let n=cn({},e);const{key:o,defaultProps:r}=this;n.default&&Object.assign(r,hn(n,((e,t)=>/^on/.test(t)?un(e,o):e))),Xn(this,n,"onProps"),$n(this,"onProps",n,this);const a=this._prepareNode(n);if(Object.isFrozen(this))throw Error("Cannot animate a `SpringValue` object that is frozen. Did you forget to pass your component to `animated(...)` before animating its props?");const i=this._state;return Mn(++this._lastCallId,{key:o,props:n,defaultProps:r,state:i,actions:{pause:()=>{Fn(this)||(Un(this,!0),Ne(i.pauseQueue),$n(this,"onPause",Tn(this,Yn(this,this.animation.to)),this))},resume:()=>{Fn(this)&&(Un(this,!1),zn(this)&&this._resume(),Ne(i.resumeQueue),$n(this,"onResume",Tn(this,Yn(this,this.animation.to)),this))},start:this._merge.bind(this,a)}}).then((e=>{if(n.loop&&e.finished&&(!t||!e.noop)){const e=Qn(n);if(e)return this._update(e,!0)}return e}))}_merge(e,t,n){if(t.cancel)return this.stop(!0),n(An(this));const o=!Ee.und(e.to),r=!Ee.und(e.from);if(o||r){if(!(t.callId>this._lastToId))return n(An(this));this._lastToId=t.callId}const{key:a,defaultProps:i,animation:s}=this,{to:c,from:l}=s;let{to:m=c,from:u=l}=e;!r||o||t.default&&!Ee.und(m)||(m=u),t.reverse&&([m,u]=[u,m]);const d=!Le(u,l);d&&(s.from=u),u=Ct(u);const p=!Le(m,c);p&&this._focus(m);const h=Hn(t.to),{config:C}=s,{decay:g,velocity:f}=C;(o||r)&&(C.velocity=0),t.config&&!h&&function(e,t,n){n&&(bn(n=cn({},n),t),t=cn({},n,t)),bn(e,t),Object.assign(e,t);for(const t in En)null==e[t]&&(e[t]=En[t]);let{mass:o,frequency:r,damping:a}=e;Ee.und(r)||(r<.01&&(r=.01),a<0&&(a=0),e.tension=Math.pow(2*Math.PI/r,2)*o,e.friction=4*Math.PI*a*o/r)}(C,ln(t.config,a),t.config!==i.config?ln(i.config,a):void 0);let y=Ut(this);if(!y||Ee.und(m))return n(Tn(this,!0));const w=Ee.und(t.reset)?r&&!t.default:!Ee.und(u)&&mn(t.reset,a),H=w?u:this.get(),_=yn(m),v=Ee.num(_)||Ee.arr(_)||Vt(_),E=!h&&(!v||mn(i.immediate||t.immediate,a));if(p){const e=tn(m);if(e!==y.constructor){if(!E)throw Error(`Cannot animate between ${y.constructor.name} and ${e.name}, as the "to" prop suggests`);y=this._set(_)}}const L=y.constructor;let b=ht(m),k=!1;if(!b){const e=w||!Bn(this)&&d;(p||e)&&(k=Le(yn(H),_),b=!k),(Le(s.immediate,E)||E)&&Le(C.decay,g)&&Le(C.velocity,f)||(b=!0)}if(k&&zn(this)&&(s.changed&&!w?b=!0:b||this._stop(c)),!h&&((b||ht(c))&&(s.values=y.getPayload(),s.toValues=ht(m)?null:L==Jt?[1]:Se(_)),s.immediate!=E&&(s.immediate=E,E||w||this._set(c)),b)){const{onRest:e}=s;be(Kn,(e=>Xn(this,t,e)));const o=Tn(this,Yn(this,c));Ne(this._pendingCalls,o),this._pendingCalls.add(n),s.changed&&ae.batchedUpdates((()=>{s.changed=!w,null==e||e(o,this),w?ln(i.onRest,o):null==s.onStart||s.onStart(o,this)}))}w&&this._set(H),h?n(In(t.to,t,this._state,this)):b?this._start():zn(this)&&!p?this._pendingCalls.add(n):n(xn(H))}_focus(e){const t=this.animation;e!==t.to&&(gt(this)&&this._detach(),t.to=e,gt(this)&&this._attach())}_attach(){let e=0;const{to:t}=this.animation;ht(t)&&(Ht(t,this),Vn(t)&&(e=t.priority+1)),this.priority=e}_detach(){const{to:e}=this.animation;ht(e)&&_t(e,this)}_set(e,t=!0){const n=Ct(e);if(!Ee.und(n)){const e=Ut(this);if(!e||!Le(n,e.getValue())){const o=tn(n);e&&e.constructor==o?e.setValue(n):Gt(this,o.create(n)),e&&ae.batchedUpdates((()=>{this._onChange(n,t)}))}}return Ut(this)}_onStart(){const e=this.animation;e.changed||(e.changed=!0,$n(this,"onStart",Tn(this,Yn(this,e.to)),this))}_onChange(e,t){t||(this._onStart(),ln(this.animation.onChange,e,this)),ln(this.defaultProps.onChange,e,this),super._onChange(e,t)}_start(){const e=this.animation;Ut(this).reset(Ct(e.to)),e.immediate||(e.fromValues=e.values.map((e=>e.lastPosition))),zn(this)||(Wn(this,!0),Fn(this)||this._resume())}_resume(){Re.skipAnimation?this.finish():Be.start(this)}_stop(e,t){if(zn(this)){Wn(this,!1);const n=this.animation;be(n.values,(e=>{e.done=!0})),n.toValues&&(n.onChange=n.onPause=n.onResume=void 0),ft(this,{type:"idle",parent:this});const o=t?An(this.get()):Tn(this.get(),Yn(this,null!=e?e:n.to));Ne(this._pendingCalls,o),n.changed&&(n.changed=!1,$n(this,"onRest",o,this))}}}function Yn(e,t){const n=yn(t);return Le(yn(e.get()),n)}function Qn(e,t=e.loop,n=e.to){let o=ln(t);if(o){const r=!0!==o&&fn(o),a=(r||e).reverse,i=!r||r.reset;return qn(cn({},e,{loop:t,default:!1,pause:void 0,to:!a||Hn(n)?n:void 0,from:i?e.from:void 0,reset:i},r))}}function qn(e){const{to:t,from:n}=e=fn(e),o=new Set;return Ee.obj(t)&&Jn(t,o),Ee.obj(n)&&Jn(n,o),e.keys=o.size?Array.from(o):null,e}function Jn(e,t){ke(e,((e,n)=>null!=e&&t.add(n)))}const Kn=["onStart","onRest","onChange","onPause","onResume"];function Xn(e,t,n){e.animation[n]=t[n]!==dn(t,n)?un(t[n],e.key):void 0}function $n(e,t,...n){var o,r,a,i;null==(o=(r=e.animation)[t])||o.call(r,...n),null==(a=(i=e.defaultProps)[t])||a.call(i,...n)}const eo=["onStart","onChange","onRest"];let to=1;class no{constructor(e,t){this.id=to++,this.springs={},this.queue=[],this.ref=void 0,this._flush=void 0,this._initialProps=void 0,this._lastAsyncId=0,this._active=new Set,this._changed=new Set,this._started=!1,this._item=void 0,this._state={paused:!1,pauseQueue:new Set,resumeQueue:new Set,timeouts:new Set},this._events={onStart:new Map,onChange:new Map,onRest:new Map},this._onFrame=this._onFrame.bind(this),t&&(this._flush=t),e&&this.start(cn({default:!0},e))}get idle(){return!this._state.asyncTo&&Object.values(this.springs).every((e=>e.idle&&!e.isDelayed&&!e.isPaused))}get item(){return this._item}set item(e){this._item=e}get(){const e={};return this.each(((t,n)=>e[n]=t.get())),e}set(e){for(const t in e){const n=e[t];Ee.und(n)||this.springs[t].set(n)}}update(e){return e&&this.queue.push(qn(e)),this}start(e){let{queue:t}=this;return e?t=Se(e).map(qn):this.queue=[],this._flush?this._flush(this,t):(so(this,t),function(e,t){return Promise.all(t.map((t=>oo(e,t)))).then((t=>Nn(e,t)))}(this,t))}stop(e,t){if(e!==!!e&&(t=e),t){const n=this.springs;be(Se(t),(t=>n[t].stop(!!e)))}else On(this._state,this._lastAsyncId),this.each((t=>t.stop(!!e)));return this}pause(e){if(Ee.und(e))this.start({pause:!0});else{const t=this.springs;be(Se(e),(e=>t[e].pause()))}return this}resume(e){if(Ee.und(e))this.start({pause:!1});else{const t=this.springs;be(Se(e),(e=>t[e].resume()))}return this}each(e){ke(this.springs,e)}_onFrame(){const{onStart:e,onChange:t,onRest:n}=this._events,o=this._active.size>0,r=this._changed.size>0;(o&&!this._started||r&&!this._started)&&(this._started=!0,Me(e,(([e,t])=>{t.value=this.get(),e(t,this,this._item)})));const a=!o&&this._started,i=r||a&&n.size?this.get():null;r&&t.size&&Me(t,(([e,t])=>{t.value=i,e(t,this,this._item)})),a&&(this._started=!1,Me(n,(([e,t])=>{t.value=i,e(t,this,this._item)})))}eventObserved(e){if("change"==e.type)this._changed.add(e.parent),e.idle||this._active.add(e.parent);else{if("idle"!=e.type)return;this._active.delete(e.parent)}ae.onFrame(this._onFrame)}}async function oo(e,t,n){const{keys:o,to:r,from:a,loop:i,onRest:s,onResolve:c}=t,l=Ee.obj(t.default)&&t.default;i&&(t.loop=!1),!1===r&&(t.to=null),!1===a&&(t.from=null);const m=Ee.arr(r)||Ee.fun(r)?r:void 0;m?(t.to=void 0,t.onRest=void 0,l&&(l.onRest=void 0)):be(eo,(n=>{const o=t[n];if(Ee.fun(o)){const r=e._events[n];t[n]=({finished:e,cancelled:t})=>{const n=r.get(o);n?(e||(n.finished=!1),t&&(n.cancelled=!0)):r.set(o,{value:null,finished:e||!1,cancelled:t||!1})},l&&(l[n]=t[n])}}));const u=e._state;t.pause===!u.paused?(u.paused=t.pause,Ne(t.pause?u.pauseQueue:u.resumeQueue)):u.paused&&(t.pause=!0);const d=(o||Object.keys(e.springs)).map((n=>e.springs[n].start(t))),p=!0===t.cancel||!0===dn(t,"cancel");(m||p&&u.asyncId)&&d.push(Mn(++e._lastAsyncId,{props:t,state:u,actions:{pause:ve,resume:ve,start(t,n){p?(On(u,e._lastAsyncId),n(An(e))):(t.onRest=s,n(In(m,t,u,e)))}}})),u.paused&&await new Promise((e=>{u.resumeQueue.add(e)}));const h=Nn(e,await Promise.all(d));if(i&&h.finished&&(!n||!h.noop)){const n=Qn(t,i,r);if(n)return so(e,[n]),oo(e,n,!0)}return c&&ae.batchedUpdates((()=>c(h,e,e.item))),h}function ro(e,t){const n=cn({},e.springs);return t&&be(Se(t),(e=>{Ee.und(e.keys)&&(e=qn(e)),Ee.obj(e.to)||(e=cn({},e,{to:void 0})),io(n,e,(e=>ao(e)))})),function(e,t){ke(t,((t,n)=>{e.springs[n]||(e.springs[n]=t,Ht(t,e))}))}(e,n),n}function ao(e,t){const n=new Gn;return n.key=e,t&&Ht(n,t),n}function io(e,t,n){t.keys&&be(t.keys,(o=>{(e[o]||(e[o]=n(o)))._prepareNode(t)}))}function so(e,t){be(t,(t=>{io(e.springs,t,(t=>ao(t,e)))}))}const co=["children"],lo=e=>{let{children:t}=e,n=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,co);const o=(0,d.useContext)(mo),r=n.pause||!!o.pause,a=n.immediate||!!o.immediate;n=function(e,t){const[n]=(0,d.useState)((()=>({inputs:t,result:e()}))),o=(0,d.useRef)(),r=o.current;let a=r;return a?Boolean(t&&a.inputs&&function(e,t){if(e.length!==t.length)return!1;for(let n=0;n{o.current=a,r==n&&(n.inputs=n.result=void 0)}),[a]),a.result}((()=>({pause:r,immediate:a})),[r,a]);const{Provider:i}=mo;return d.createElement(i,{value:n},t)},mo=(uo=lo,po={},Object.assign(uo,d.createContext(po)),uo.Provider._context=uo,uo.Consumer._context=uo,uo);var uo,po;lo.Provider=mo.Provider,lo.Consumer=mo.Consumer;const ho=()=>{const e=[],t=function(t){Rt(`${It}Directly calling start instead of using the api object is deprecated in v9 (use ".start" instead), this will be removed in later 0.X.0 versions`);const o=[];return be(e,((e,r)=>{if(Ee.und(t))o.push(e.start());else{const a=n(t,e,r);a&&o.push(e.start(a))}})),o};t.current=e,t.add=function(t){e.includes(t)||e.push(t)},t.delete=function(t){const n=e.indexOf(t);~n&&e.splice(n,1)},t.pause=function(){return be(e,(e=>e.pause(...arguments))),this},t.resume=function(){return be(e,(e=>e.resume(...arguments))),this},t.set=function(t){be(e,(e=>e.set(t)))},t.start=function(t){const n=[];return be(e,((e,o)=>{if(Ee.und(t))n.push(e.start());else{const r=this._getProps(t,e,o);r&&n.push(e.start(r))}})),n},t.stop=function(){return be(e,(e=>e.stop(...arguments))),this},t.update=function(t){return be(e,((e,n)=>e.update(this._getProps(t,e,n)))),this};const n=function(e,t,n){return Ee.fun(e)?e(n,t):e};return t._getProps=n,t};let Co;!function(e){e.MOUNT="mount",e.ENTER="enter",e.UPDATE="update",e.LEAVE="leave"}(Co||(Co={}));let go=1;function fo(e,{key:t,keys:n=t},o){if(null===n){const t=new Set;return e.map((e=>{const n=o&&o.find((n=>n.item===e&&n.phase!==Co.LEAVE&&!t.has(n)));return n?(t.add(n),n.key):go++}))}return Ee.und(n)?e:Ee.fun(n)?e.map(n):Se(n)}class yo extends Dn{constructor(e,t){super(),this.key=void 0,this.idle=!0,this.calc=void 0,this._active=new Set,this.source=e,this.calc=mt(...t);const n=this._get(),o=tn(n);Gt(this,o.create(n))}advance(e){const t=this._get();Le(t,this.get())||(Ut(this).setValue(t),this._onChange(t,this.idle)),!this.idle&&Ho(this._active)&&_o(this)}_get(){const e=Ee.arr(this.source)?this.source.map(Ct):Se(Ct(this.source));return this.calc(...e)}_start(){this.idle&&!Ho(this._active)&&(this.idle=!1,be(Yt(this),(e=>{e.done=!1})),Re.skipAnimation?(ae.batchedUpdates((()=>this.advance())),_o(this)):Be.start(this))}_attach(){let e=1;be(Se(this.source),(t=>{ht(t)&&Ht(t,this),Vn(t)&&(t.idle||this._active.add(t),e=Math.max(e,t.priority+1))})),this.priority=e,this._start()}_detach(){be(Se(this.source),(e=>{ht(e)&&_t(e,this)})),this._active.clear(),_o(this)}eventObserved(e){"change"==e.type?e.idle?this.advance():(this._active.add(e.parent),this._start()):"idle"==e.type?this._active.delete(e.parent):"priority"==e.type&&(this.priority=Se(this.source).reduce(((e,t)=>Math.max(e,(Vn(t)?t.priority:0)+1)),0))}}function wo(e){return!1!==e.idle}function Ho(e){return!e.size||Array.from(e).every(wo)}function _o(e){e.idle||(e.idle=!0,be(Yt(e),(e=>{e.done=!0})),ft(e,{type:"idle",parent:e}))}Re.assign({createStringInterpolator:At,to:(e,t)=>new yo(e,t)}),Be.advance;var vo=i(91850);function Eo(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}const Lo=["style","children","scrollTop","scrollLeft"],bo=/^--/;function ko(e,t){return null==t||"boolean"==typeof t||""===t?"":"number"!=typeof t||0===t||bo.test(e)||Mo.hasOwnProperty(e)&&Mo[e]?(""+t).trim():t+"px"}const So={};let Mo={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0};const No=["Webkit","Ms","Moz","O"];Mo=Object.keys(Mo).reduce(((e,t)=>(No.forEach((n=>e[((e,t)=>e+t.charAt(0).toUpperCase()+t.substring(1))(n,t)]=e[t])),e)),Mo);const xo=["x","y","z"],To=/^(matrix|translate|scale|rotate|skew)/,Ao=/^(translate)/,Io=/^(rotate|skew)/,Oo=(e,t)=>Ee.num(e)&&0!==e?e+t:e,Po=(e,t)=>Ee.arr(e)?e.every((e=>Po(e,t))):Ee.num(e)?e===t:parseFloat(e)===t;class Ro extends Xt{constructor(e){let{x:t,y:n,z:o}=e,r=Eo(e,xo);const a=[],i=[];(t||n||o)&&(a.push([t||0,n||0,o||0]),i.push((e=>[`translate3d(${e.map((e=>Oo(e,"px"))).join(",")})`,Po(e,0)]))),ke(r,((e,t)=>{if("transform"===t)a.push([e||""]),i.push((e=>[e,""===e]));else if(To.test(t)){if(delete r[t],Ee.und(e))return;const n=Ao.test(t)?"px":Io.test(t)?"deg":"";a.push(Se(e)),i.push("rotate3d"===t?([e,t,o,r])=>[`rotate3d(${e},${t},${o},${Oo(r,n)})`,Po(r,0)]:e=>[`${t}(${e.map((e=>Oo(e,n))).join(",")})`,Po(e,t.startsWith("scale")?1:0)])}})),a.length&&(r.transform=new Vo(a,i)),super(r)}}class Vo extends yt{constructor(e,t){super(),this._value=null,this.inputs=e,this.transforms=t}get(){return this._value||(this._value=this._get())}_get(){let e="",t=!0;return be(this.inputs,((n,o)=>{const r=Ct(n[0]),[a,i]=this.transforms[o](Ee.arr(r)?r:n.map(Ct));e+=" "+a,t=t&&i})),t?"none":e}observerAdded(e){1==e&&be(this.inputs,(e=>be(e,(e=>ht(e)&&Ht(e,this)))))}observerRemoved(e){0==e&&be(this.inputs,(e=>be(e,(e=>ht(e)&&_t(e,this)))))}eventObserved(e){"change"==e.type&&(this._value=null),ft(this,e)}}const jo=["scrollTop","scrollLeft"];Re.assign({batchedUpdates:vo.unstable_batchedUpdates,createStringInterpolator:At,colors:{transparent:0,aliceblue:4042850303,antiquewhite:4209760255,aqua:16777215,aquamarine:2147472639,azure:4043309055,beige:4126530815,bisque:4293182719,black:255,blanchedalmond:4293643775,blue:65535,blueviolet:2318131967,brown:2771004159,burlywood:3736635391,burntsienna:3934150143,cadetblue:1604231423,chartreuse:2147418367,chocolate:3530104575,coral:4286533887,cornflowerblue:1687547391,cornsilk:4294499583,crimson:3692313855,cyan:16777215,darkblue:35839,darkcyan:9145343,darkgoldenrod:3095792639,darkgray:2846468607,darkgreen:6553855,darkgrey:2846468607,darkkhaki:3182914559,darkmagenta:2332068863,darkolivegreen:1433087999,darkorange:4287365375,darkorchid:2570243327,darkred:2332033279,darksalmon:3918953215,darkseagreen:2411499519,darkslateblue:1211993087,darkslategray:793726975,darkslategrey:793726975,darkturquoise:13554175,darkviolet:2483082239,deeppink:4279538687,deepskyblue:12582911,dimgray:1768516095,dimgrey:1768516095,dodgerblue:512819199,firebrick:2988581631,floralwhite:4294635775,forestgreen:579543807,fuchsia:4278255615,gainsboro:3705462015,ghostwhite:4177068031,gold:4292280575,goldenrod:3668254975,gray:2155905279,green:8388863,greenyellow:2919182335,grey:2155905279,honeydew:4043305215,hotpink:4285117695,indianred:3445382399,indigo:1258324735,ivory:4294963455,khaki:4041641215,lavender:3873897215,lavenderblush:4293981695,lawngreen:2096890111,lemonchiffon:4294626815,lightblue:2916673279,lightcoral:4034953471,lightcyan:3774873599,lightgoldenrodyellow:4210742015,lightgray:3553874943,lightgreen:2431553791,lightgrey:3553874943,lightpink:4290167295,lightsalmon:4288707327,lightseagreen:548580095,lightskyblue:2278488831,lightslategray:2005441023,lightslategrey:2005441023,lightsteelblue:2965692159,lightyellow:4294959359,lime:16711935,limegreen:852308735,linen:4210091775,magenta:4278255615,maroon:2147483903,mediumaquamarine:1724754687,mediumblue:52735,mediumorchid:3126187007,mediumpurple:2473647103,mediumseagreen:1018393087,mediumslateblue:2070474495,mediumspringgreen:16423679,mediumturquoise:1221709055,mediumvioletred:3340076543,midnightblue:421097727,mintcream:4127193855,mistyrose:4293190143,moccasin:4293178879,navajowhite:4292783615,navy:33023,oldlace:4260751103,olive:2155872511,olivedrab:1804477439,orange:4289003775,orangered:4282712319,orchid:3664828159,palegoldenrod:4008225535,palegreen:2566625535,paleturquoise:2951671551,palevioletred:3681588223,papayawhip:4293907967,peachpuff:4292524543,peru:3448061951,pink:4290825215,plum:3718307327,powderblue:2967529215,purple:2147516671,rebeccapurple:1714657791,red:4278190335,rosybrown:3163525119,royalblue:1097458175,saddlebrown:2336560127,salmon:4202722047,sandybrown:4104413439,seagreen:780883967,seashell:4294307583,sienna:2689740287,silver:3233857791,skyblue:2278484991,slateblue:1784335871,slategray:1887473919,slategrey:1887473919,snow:4294638335,springgreen:16744447,steelblue:1182971135,tan:3535047935,teal:8421631,thistle:3636451583,tomato:4284696575,turquoise:1088475391,violet:4001558271,wheat:4125012991,white:4294967295,whitesmoke:4126537215,yellow:4294902015,yellowgreen:2597139199}});const Do=((e,{applyAnimatedValues:t=(()=>!1),createAnimatedStyle:n=(e=>new Xt(e)),getComponentProps:o=(e=>e)}={})=>{const r={applyAnimatedValues:t,createAnimatedStyle:n,getComponentProps:o},a=e=>{const t=sn(e)||"Anonymous";return(e=Ee.str(e)?a[e]||(a[e]=on(e,r)):e[an]||(e[an]=on(e,r))).displayName=`Animated(${t})`,e};return ke(e,((t,n)=>{Ee.arr(e)&&(n=sn(t)),a[n]=a(t)})),{animated:a}})(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"],{applyAnimatedValues:function(e,t){if(!e.nodeType||!e.setAttribute)return!1;const n="filter"===e.nodeName||e.parentNode&&"filter"===e.parentNode.nodeName,o=t,{style:r,children:a,scrollTop:i,scrollLeft:s}=o,c=Eo(o,Lo),l=Object.values(c),m=Object.keys(c).map((t=>n||e.hasAttribute(t)?t:So[t]||(So[t]=t.replace(/([A-Z])/g,(e=>"-"+e.toLowerCase())))));void 0!==a&&(e.textContent=a);for(let t in r)if(r.hasOwnProperty(t)){const n=ko(t,r[t]);bo.test(t)?e.style.setProperty(t,n):e.style[t]=n}m.forEach(((t,n)=>{e.setAttribute(t,l[n])})),void 0!==i&&(e.scrollTop=i),void 0!==s&&(e.scrollLeft=s)},createAnimatedStyle:e=>new Ro(e),getComponentProps:e=>Eo(e,jo)}),Zo=Do.animated;var Bo=i(25158);i(12560);const zo=(0,e.forwardRef)((function(t,n){let{className:o,children:r,spokenMessage:i=r,politeness:s="polite",actions:c=[],onRemove:l=C.noop,icon:m=null,explicitDismiss:u=!1,onDismiss:d=null,__unstableHTML:p=!1}=t;function h(e){e&&e.preventDefault&&e.preventDefault(),d(),l()}d=d||C.noop,function(t,n){const o="string"==typeof t?t:(0,e.renderToString)(t);(0,e.useEffect)((()=>{o&&(0,Bo.speak)(o,n)}),[o,n])}(i,s),(0,e.useEffect)((()=>{const e=setTimeout((()=>{u||(d(),l())}),1e4);return()=>clearTimeout(e)}),[u,d,l]);const g=G()(o,"components-snackbar",{"components-snackbar-explicit-dismiss":!!u});c&&c.length>1&&("undefined"!=typeof process&&process.env,c=[c[0]]);const f=G()("components-snackbar__content",{"components-snackbar__content-with-icon":!!m});return!0===p&&(r=(0,e.createElement)(e.RawHTML,null,r)),(0,e.createElement)("div",{ref:n,className:g,onClick:u?C.noop:h,tabIndex:"0",role:u?"":"button",onKeyPress:u?C.noop:h,"aria-label":u?"":(0,v.__)("Dismiss this notice","woocommerce")},(0,e.createElement)("div",{className:f},m&&(0,e.createElement)("div",{className:"components-snackbar__icon"},m),r,c.map(((t,n)=>{let{label:o,onClick:r,url:i}=t;return(0,e.createElement)(a.Button,{key:n,href:i,isTertiary:!0,onClick:e=>function(e,t){e.stopPropagation(),l(),t&&t(e)}(e,r),className:"components-snackbar__action"},o)})),u&&(0,e.createElement)("span",{role:"button","aria-label":"Dismiss this notice",tabIndex:"0",className:"components-snackbar__dismiss-button",onClick:h,onKeyPress:h},"✕")))})),Fo=function(t){let{notices:n,className:o,children:r,onRemove:a=C.noop,onRemove2:i=C.noop}=t;const s=(0,c.useReducedMotion)(),[l]=(0,e.useState)((()=>new WeakMap)),m=function(e,t,n){const o=Ee.fun(t)&&t,{reset:r,sort:a,trail:i=0,expires:s=!0,exitBeforeEnter:c=!1,onDestroyed:l,ref:m,config:u}=o?o():t,p=(0,d.useMemo)((()=>o||3==arguments.length?ho():void 0),[]),h=Se(e),C=[],g=(0,d.useRef)(null),f=r?null:g.current;Ft((()=>{g.current=C})),jt((()=>()=>{be(g.current,(e=>{e.expired&&clearTimeout(e.expirationId),_n(e.ctrl,p),e.ctrl.stop(!0)}))}));const y=fo(h,o?o():t,f),w=r&&g.current||[];Ft((()=>be(w,(({ctrl:e,item:t,key:n})=>{_n(e,p),ln(l,t,n)}))));const H=[];if(f&&be(f,((e,t)=>{e.expired?(clearTimeout(e.expirationId),w.push(e)):~(t=H[t]=y.indexOf(e.key))&&(C[t]=e)})),be(h,((e,t)=>{C[t]||(C[t]={key:y[t],item:e,phase:Co.MOUNT,ctrl:new no},C[t].ctrl.item=e)})),H.length){let e=-1;const{leave:n}=o?o():t;be(H,((t,o)=>{const r=f[o];~t?(e=C.indexOf(r),C[e]=cn({},r,{item:h[t]})):n&&C.splice(++e,0,r)}))}Ee.fun(a)&&C.sort(((e,t)=>a(e.item,t.item)));let _=-i;const v=Zt(),E=hn(t),L=new Map,b=(0,d.useRef)(new Map),k=(0,d.useRef)(!1);be(C,((e,n)=>{const r=e.key,a=e.phase,l=o?o():t;let d,p,h=ln(l.delay||0,r);if(a==Co.MOUNT)d=l.enter,p=Co.ENTER;else{const e=y.indexOf(r)<0;if(a!=Co.LEAVE)if(e)d=l.leave,p=Co.LEAVE;else{if(!(d=l.update))return;p=Co.UPDATE}else{if(e)return;d=l.enter,p=Co.ENTER}}if(d=ln(d,e.item,n),d=Ee.obj(d)?fn(d):{to:d},!d.config){const t=u||E.config;d.config=ln(t,e.item,n,p)}_+=i;const C=cn({},E,{delay:h+_,ref:m,immediate:l.immediate,reset:!1},d);if(p==Co.ENTER&&Ee.und(C.from)){const r=o?o():t,a=Ee.und(r.initial)||f?r.from:r.initial;C.from=ln(a,e.item,n)}const{onResolve:w}=C;C.onResolve=e=>{ln(w,e);const t=g.current,n=t.find((e=>e.key===r));if(n&&(!e.cancelled||n.phase==Co.UPDATE)&&n.ctrl.idle){const e=t.every((e=>e.ctrl.idle));if(n.phase==Co.LEAVE){const t=ln(s,n.item);if(!1!==t){const o=!0===t?0:t;if(n.expired=!0,!e&&o>0)return void(o<=2147483647&&(n.expirationId=setTimeout(v,o)))}}e&&t.some((e=>e.expired))&&(b.current.delete(n),c&&(k.current=!0),v())}};const H=ro(e.ctrl,C);p===Co.LEAVE&&c?b.current.set(e,{phase:p,springs:H,payload:C}):L.set(e,{phase:p,springs:H,payload:C})}));const S=(0,d.useContext)(lo),M=zt(S),N=S!==M&&wn(S);Ft((()=>{N&&be(C,(e=>{e.ctrl.start({default:S})}))}),[S]),be(L,((e,t)=>{if(b.current.size){const e=C.findIndex((e=>e.key===t.key));C.splice(e,1)}})),Ft((()=>{be(b.current.size?b.current:L,(({phase:e,payload:t},n)=>{const{ctrl:o}=n;n.phase=e,null==p||p.add(o),N&&e==Co.ENTER&&o.start({default:S}),t&&(vn(o,t.ref),o.ref&&!k.current?o.update(t):(o.start(t),k.current&&(k.current=!1)))}))}),r?void 0:n);const x=e=>d.createElement(d.Fragment,null,C.map(((t,n)=>{const{springs:o}=L.get(t)||t.ctrl,r=e(cn({},o),t.item,t,n);return r&&r.type?d.createElement(r.type,cn({},r.props,{key:Ee.str(t.key)||Ee.num(t.key)?t.key:t.ctrl.id,ref:r.ref})):r})));return p?[x,p]:x}(n,{keys:e=>e.id,from:{opacity:0,height:0},enter:e=>async t=>await t({opacity:1,height:l.get(e).offsetHeight}),leave:()=>async e=>{await e({opacity:0}),await e({height:0})},immediate:s});o=G()("components-snackbar-list",o);const u=e=>()=>{a(e.id),i(e.id)};return(0,e.createElement)("div",{className:o},r,m(((t,n)=>(0,e.createElement)(Zo.div,{style:t},(0,e.createElement)("div",{className:"components-snackbar-list__notice-container",ref:e=>e&&l.set(n,e)},(0,e.createElement)(zo,(0,oe.Z)({},(0,C.omit)(n,["content"]),{onRemove:u(n)}),n.content))))))},Wo="woocommerce_admin_transient_notices_queue";function Uo(t){const{removeNotice:n}=(0,l.useDispatch)("core/notices"),{createNotice:r,removeNotice:a}=(0,l.useDispatch)("core/notices2"),{updateOptions:i}=(0,l.useDispatch)(o.OPTIONS_STORE_NAME),{currentUser:s={},notices:c=[],notices2:m=[],noticesQueue:u={}}=(0,l.useSelect)((e=>({currentUser:e(o.USER_STORE_NAME).getCurrentUser(),notices:e("core/notices").getNotices(),notices2:e("core/notices2").getNotices(),noticesQueue:e(o.OPTIONS_STORE_NAME).getOption(Wo)})));(0,e.useEffect)((()=>{Object.values(u).filter((e=>e.user_id===s.id||!e.user_id)).forEach((e=>{const t=(0,_.applyFilters)("woocommerce_admin_queued_notice_filter",e);r(t.status,t.content,{onDismiss:()=>{(e=>{const t={...u};delete t[e],i({[Wo]:t})})(t.id)},...t.options||{}})}))}),[]);const{className:d}=t,p=G()("woocommerce-transient-notices","components-notices__snackbar",d),h=c.concat(m);return(0,e.createElement)(w.WooFooterItem,null,(0,e.createElement)(Fo,{notices:h,className:p,onRemove:n,onRemove2:a}))}Uo.propTypes={className:h().string,notices:h().array};var Go=i(23374),Yo=i(91250),Qo=i(12532);const qo=()=>(0,e.createElement)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("mask",{id:"mask0_2915:6733",maskUnits:"userSpaceOnUse",x:"4",y:"3",width:"16",height:"18"},(0,e.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.5 3.5H13.5L13.9 5.5H19.5V15.5H12.5L12.1 13.5H6.5V20.5H4.5V3.5ZM12.26 7.5L11.86 5.5H6.5V11.5H13.74L14.14 13.5H17.5V7.5H12.26Z",fill:"white"})),(0,e.createElement)("g",{mask:"url(#mask0_2915:6733)"},(0,e.createElement)("rect",{width:"24",height:"24",fill:"#50575E"})));var Jo=i(23322);const Ko={page:1,per_page:o.QUERY_DEFAULTS.pageSize,status:"unactioned",type:o.QUERY_DEFAULTS.noteTypes,orderby:"date",order:"desc"};function Xo(e){const{getNotes:t,getNotesError:n,isResolving:r}=e(o.NOTES_STORE_NAME),{getCurrentUser:a}=e(o.USER_STORE_NAME),i=a(),s=parseInt(i&&i.woocommerce_meta&&i.woocommerce_meta.activity_panel_inbox_last_read,10);if(!s)return null;t(Ko);const c=Boolean(n("getNotes",[Ko])),l=r("getNotes",[Ko]);if(c||l)return null;const m=t(Ko);return(0,Jo.fs)(m,s)>0}const $o=t=>{let{icon:n,title:o,name:r,unread:i,selected:s,isPanelOpen:c,onTabClick:l}=t;const m=G()("woocommerce-layout__activity-panel-tab",{"is-active":c&&s,"has-unread":i}),u=`activity-panel-tab-${r}`;return(0,e.createElement)(a.Button,{role:"tab",className:m,"aria-selected":s,"aria-controls":`activity-panel-${r}`,key:u,id:u,onClick:()=>{l(r)}},n,o," ",i&&(0,e.createElement)("span",{className:"screen-reader-text"},(0,v.__)("unread activity","woocommerce")))},er=t=>{let{tabs:n,onTabClick:o,selectedTab:r,tabOpen:i=!1}=t;const[{tabOpen:s,currentTab:c},l]=(0,e.useState)({tabOpen:i,currentTab:r});return(0,e.useEffect)((()=>{l({tabOpen:i,currentTab:r})}),[i,r]),(0,e.createElement)(a.NavigableMenu,{role:"tablist",orientation:"horizontal",className:"woocommerce-layout__activity-panel-tabs"},n&&n.map(((t,n)=>{if(t.component){const{component:o,options:r}=t;return(0,e.createElement)(o,(0,oe.Z)({key:n},r))}return(0,e.createElement)($o,(0,oe.Z)({key:n,index:n,isPanelOpen:s,selected:c===t.name},t,{onTabClick:()=>{const e=c!==t.name&&""!==c||!s;e&&c===t.name||(0,f.recordEvent)("activity_panel_open",{tab:t.name}),l({tabOpen:e,currentTab:t.name}),o(t,e)}}))})))},tr=t=>{let{setupTasksComplete:n,setupCompletePercent:o}=t;return(0,e.createElement)("svg",{className:"woocommerce-layout__activity-panel-tab-icon setup-progress",viewBox:"0 0 25 25"},(0,e.createElement)("path",{className:"setup-progress-ring",d:"M 12.476 23.237 C 18.369 23.237 23.146 18.414 23.146 12.464 C 23.146 6.512 18.369 1.687 12.476 1.687 C 6.581 1.687 1.803 6.512 1.803 12.464 C 1.803 18.414 6.581 23.237 12.476 23.237 Z"}),(0,e.createElement)("path",{className:"setup-progress-slice",transform:"matrix(-0.034188, 0, 0, 0.034134, 38.373184, -8.278505)",d:"M 522 607 A 237 237 0 0 1 759 370 L 759 607 Z",fill:n>0?"currentColor":"white"}),(0,e.createElement)("path",{className:"setup-progress-slice",transform:"matrix(-0.034188, 0, 0, -0.034134, 38.368454, 33.13131)",d:"M 522 607 A 237 237 0 0 1 759 370 L 759 607 Z",fill:o>=50?"currentColor":"white"}),(0,e.createElement)("path",{className:"setup-progress-slice",transform:"matrix(0.034188, 0, 0, -0.034134, -13.500516, 33.133827)",d:"M 522 607 A 237 237 0 0 1 759 370 L 759 607 Z",fill:o>=75?"currentColor":"white"}),(0,e.createElement)("path",{className:"setup-progress-slice",transform:"matrix(0.034188, 0, 0, 0.034134, -13.495783, -8.281025)",d:"M 522 607 A 237 237 0 0 1 759 370 L 759 607 Z",fill:"white"}))};var nr=i(92342),or=i(70261);const rr="highlight-tooltip__show";function ar(t){let{title:n,closeButtonText:o,content:r,show:i=!0,id:s,onClose:c,delay:l,onShow:m=C.noop,useAnchor:u=!1}=t;const[d,p]=(0,e.useState)(l>0?null:i),[h,g]=(0,e.useState)(null),[f,y]=(0,e.useState)(null);function w(){if(u){const e=document.getElementById(s);y(e.getBoundingClientRect())}}(0,e.useEffect)((()=>{const e=document.getElementById(s);let t,n;e&&!h&&(u?(n=document.createElement("div"),document.body.appendChild(n)):n=e.parentElement,t=document.createElement("div"),t.classList.add("highlight-tooltip__container"),n.appendChild(t),g(t));const o=H(t);return()=>{if(t){const e=t.parentElement;e.removeChild(t),u&&e.remove()}o&&clearTimeout(o)}}),[]),(0,e.useEffect)((()=>{!d&&h&&h.classList.remove(rr)}),[d]),(0,e.useEffect)((()=>{i!==d&&null!==d&&h&&(p(i),i?h&&H(h):h.classList.remove(rr))}),[i]),(0,e.useLayoutEffect)((()=>(window.addEventListener("resize",w),()=>window.removeEventListener("resize",w))),[]);const H=e=>{let t=null;return l>0?t=setTimeout((()=>{t=null,_(e)}),l):d||_(e),t},_=e=>{const t=document.getElementById(s);t&&u&&y(t.getBoundingClientRect()),e&&e.classList.add(rr),p(!0),m()},E=()=>{p(!1),c&&c()};return h?(0,e.createPortal)((0,e.createElement)("div",{className:"highlight-tooltip__portal"},d?(0,e.createElement)(e.Fragment,null,(0,e.createElement)(a.IsolatedEventContainer,{className:"highlight-tooltip__overlay"}),(0,e.createElement)(a.Popover,{className:"highlight-tooltip__popover",noArrow:!1,anchorRect:f,focusOnMount:"container"},(0,e.createElement)(a.Card,{size:"medium"},(0,e.createElement)(a.CardHeader,null,n,(0,e.createElement)(a.Button,{isSmall:!0,onClick:E,icon:or.Z})),(0,e.createElement)(a.CardBody,null,r||null),(0,e.createElement)(a.CardFooter,{isBorderless:!0},(0,e.createElement)(a.Button,{size:"small",isPrimary:!0,onClick:E},o||(0,v.__)("Close","woocommerce")))))):null),h):null}ar.propTypes={id:h().string.isRequired,title:h().string.isRequired,closeButtonText:h().string.isRequired,content:h().oneOfType([h().string,h().node]),show:h().bool,onClose:h().func,delay:h().number,onShow:h().func,useAnchor:h().bool};var ir=i(45904);const sr=["button","submit"];const cr=t=>{let{content:n,isPanelOpen:o,isPanelSwitching:r,currentTab:a,tab:i,closePanel:s,clearPanel:c}=t;const l="woocommerce-layout__activity-panel-wrapper",m=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"firstElement";const n=(0,e.useRef)(t);return(0,e.useEffect)((()=>{n.current=t}),[t]),(0,e.useCallback)((e=>{if(!e||!1===n.current)return;if(e.contains(e.ownerDocument.activeElement))return;let t=e;if("firstElement"===n.current){const n=ir.focus.tabbable.find(e)[0];n&&(t=n)}t.focus()}),[])}(),u=function(t){const n=(0,e.useRef)(t);(0,e.useEffect)((()=>{n.current=t}),[t]);const o=(0,e.useRef)(!1),r=(0,e.useRef)(),a=(0,e.useCallback)((()=>{clearTimeout(r.current)}),[]);(0,e.useEffect)((()=>()=>a()),[]),(0,e.useEffect)((()=>{t||a()}),[t,a]);const i=(0,e.useCallback)((e=>{const{type:t,target:n}=e;(0,C.includes)(["mouseup","touchend"],t)?o.current=!1:function(e){if(!(e instanceof window.HTMLElement))return!1;switch(e.nodeName){case"A":case"BUTTON":return!0;case"INPUT":return(0,C.includes)(sr,e.type)}return!1}(n)&&(o.current=!0)}),[]),s=(0,e.useCallback)((e=>{e.persist(),o.current||(r.current=setTimeout((()=>{document.hasFocus()?"function"==typeof n.current&&n.current(e):e.preventDefault()}),0))}),[]);return{onFocus:a,onMouseDown:i,onMouseUp:i,onTouchStart:i,onTouchEnd:i,onBlur:s}}((e=>{const t=e.relatedTarget&&(e.relatedTarget.closest(".woocommerce-inbox-dismiss-confirmation_modal")||e.relatedTarget.closest(".components-snackbar__action"));o&&!t&&s()})),d=(0,e.useRef)(null),p=(0,e.useCallback)((e=>{d.current=e,m(e)}),[]);if(!i)return(0,e.createElement)("div",{className:l});if(!n)return null;const h=G()(l,{"is-open":o,"is-switching":r});return(0,e.createElement)("div",(0,oe.Z)({className:h,tabIndex:0,role:"tabpanel","aria-label":i.title,onTransitionEnd:e=>{e&&"transform"===e.propertyName&&(c(),d.current&&o&&i&&m(d.current))}},u,{ref:p}),(0,e.createElement)("div",{className:"woocommerce-layout__activity-panel-content",key:"activity-panel-"+a,id:"activity-panel-"+a},(0,e.createElement)(e.Suspense,{fallback:(0,e.createElement)(E.Spinner,null)},n)))};var lr=i(22983),mr=i(14138),ur=i(30554),dr=i(34374),pr=i(74693);const hr=(0,e.lazy)((()=>Promise.all([i.e(9529),i.e(6732)]).then(i.bind(i,37015)))),Cr=(0,e.lazy)((()=>Promise.all([i.e(7846),i.e(8851)]).then(i.bind(i,72122)))),gr=(0,e.lazy)((()=>i.e(7844).then(i.bind(i,28029)))),fr=t=>{let{isEmbedded:a,query:i}=t;const[s,c]=(0,e.useState)(""),[m,u]=(0,e.useState)(!1),[d,p]=(0,e.useState)(!1),[h,y]=(0,e.useState)(!1),{fills:H}=(0,q.useSlot)(ur.$Q),_=Boolean(null==H?void 0:H.length),{updateUserPreferences:L,...b}=(0,o.useUserPreferences)(),k=(0,X.useActiveSetupTasklist)();(0,e.useEffect)((()=>(0,g.addHistoryListener)((()=>{z(),F()}))),[]);const S=(0,w.useExtendLayout)("activity-panel"),M=(e,t)=>{let n={};if("wc-admin"===i.page&&"appearance"===i.task){var r,a,s;const{getTaskLists:i}=e(o.ONBOARDING_STORE_NAME),c=i().reduce(((e,t)=>[...e,...t.tasks]),[]).find((e=>"appearance"===e.id));n={set_notice:t("woocommerce_demo_store_notice")?"Y":"N",create_homepage:!0===(null==c||null===(r=c.additionalData)||void 0===r?void 0:r.hasHomepage)?"Y":"N",upload_logo:null!=c&&null!==(a=c.additionalData)&&void 0!==a&&null!==(s=a.themeMods)&&void 0!==s&&s.custom_logo?"Y":"N"}}return n};function N(e,t,n){const o=(0,lr.sg)(e),r=!!t&&(0,lr.xX)(e,o)>0,a=!!t&&(0,mr.Vh)(e),i=!!t&&(0,lr.ae)(e);return n>0||r||a||i||_}const{hasUnreadNotes:x,hasAbbreviatedNotifications:T,isCompletedTask:A,thingsToDoNextCount:I,requestingTaskListOptions:O,setupTaskListComplete:P,setupTaskListHidden:R,setupTasksCompleteCount:V,setupTasksCount:j,previewSiteBtnTrackData:D}=(0,l.useSelect)((e=>{var t,n;const{getOption:r}=e(o.OPTIONS_STORE_NAME),{getTask:a,getTaskList:s,hasFinishedResolution:c}=e(o.ONBOARDING_STORE_NAME),l=k&&s(k),m=null!==(t=null==l?void 0:l.isHidden)&&void 0!==t&&t,u=(0,o.getVisibleTasks)((null==l?void 0:l.tasks)||[]),d=(p=s("extended"))&&p.tasks.length&&!p.isHidden?p.tasks.filter((e=>e.canView&&!e.isComplete&&!e.isDismissed)).length:0;var p;return{hasUnreadNotes:Xo(e),hasAbbreviatedNotifications:N(e,m,d),thingsToDoNextCount:d,requestingTaskListOptions:!c("getTaskLists"),setupTaskListComplete:null==l?void 0:l.isComplete,setupTaskListHidden:m,setupTasksCount:u.length,setupTasksCompleteCount:u.filter((e=>e.isComplete)).length,isCompletedTask:Boolean(i.task&&(null===(n=a(i.task))||void 0===n?void 0:n.isComplete)),previewSiteBtnTrackData:M(e,r)}})),{showCesModal:Z}=(0,l.useDispatch)(n.STORE_KEY),{currentUserCan:B}=(0,o.useUser)(),z=()=>{u(!0),p(!1)},F=()=>{d||(u(!1),y(!1),c(""))},W=()=>"wc-admin"===i.page&&!i.path,U=()=>{const[e]=function(e){var t,n;const o=null!=e&&e.startsWith("/")?1:0,r=null!=e&&e.endsWith("/")?-1:void 0;return null!==(t=null==e||null===(n=e.slice(o,r))||void 0===n?void 0:n.split("/"))&&void 0!==t?t:[]}(i.path);return"add-product"===e||"product"===e},G=()=>{const e=(0,dr.DP)(window.location.search);return a&&/post-new\.php$/.test(window.location.pathname)&&"product"===(null==e?void 0:e.post_type)},Y=()=>i.task&&!i.path&&(!0===O||!1===R&&!1===P),Q=()=>{const t={name:"activity",title:(0,v.__)("Activity","woocommerce"),icon:(0,e.createElement)(qo,null),unread:x||T,visible:(a||!W())&&!Y()&&!U()},n={name:"feedback",title:(0,v.__)("Feedback","woocommerce"),icon:(0,e.createElement)(pr.A,null),onClick:()=>{c("feedback"),p(!0),Z({action:"product_feedback",title:(0,v.__)("How's your experience with the product editor?","woocommerce"),firstQuestion:(0,v.__)("The product editing screen is easy to use","woocommerce"),secondQuestion:(0,v.__)("The product editing screen's functionality meets my needs","woocommerce")},{onRecordScore:()=>{c(""),p(!1)},onCloseModal:()=>{c(""),p(!1)}},{type:"snackbar",icon:(0,e.createElement)("span",null,"🌟")})},visible:G()},o={name:"setup",title:(0,v.__)("Finish setup","woocommerce"),icon:(0,e.createElement)(tr,{setupTasksComplete:V,setupCompletePercent:Math.ceil(V/j*100)}),visible:B("manage_woocommerce")&&!O&&!P&&!R&&!W()&&!U()},s={name:"help",title:(0,v.__)("Help","woocommerce"),icon:(0,e.createElement)(Go.Z,{icon:Yo.Z}),visible:B("manage_woocommerce")&&(W()&&!a||Y())},l={component:nr.T,visible:B("manage_woocommerce")&&!a&&W()&&!Y()};return[t,n,o,{name:"previewSite",title:(0,v.__)("Preview site","woocommerce"),icon:(0,e.createElement)(Go.Z,{icon:Qo.Z}),visible:W()&&"appearance"===i.task,onClick:()=>(window.open((0,r.O3)("siteUrl")),(0,f.recordEvent)("wcadmin_tasklist_previewsite",D),null)},{name:"previewStore",title:(0,v.__)("Preview store","woocommerce"),icon:(0,e.createElement)(Go.Z,{icon:Qo.Z}),visible:W()&&"appearance"!==i.task,onClick:()=>(window.open((0,r.O3)("shopUrl")),(0,f.recordEvent)("wcadmin_previewstore_click"),null)},l,s].filter((e=>e.visible))},J=Q(),K=(0,C.uniqueId)("activity-panel-header_"),$=(()=>{const{task:e}=i,t=b&&b.task_list_tracked_started_tasks,n=b&&b.help_panel_highlight_shown;return!(!(e&&"yes"!==n&&(t||{})[e]>1)||A)})();return(0,e.createElement)(w.LayoutContextProvider,{value:S},(0,e.createElement)("div",null,(0,e.createElement)(E.H,{id:K,className:"screen-reader-text"},(0,v.__)("Store Activity","woocommerce")),(0,e.createElement)(E.Section,{component:"aside",id:"woocommerce-activity-panel",className:"woocommerce-layout__activity-panel","aria-labelledby":K},(0,e.createElement)(er,{tabs:J,tabOpen:d,selectedTab:s,onTabClick:(e,t)=>{e.onClick?e.onClick():((e,t)=>{let{name:n}=e;const o=n!==s&&""!==s&&t&&d;m||(c(n),p(t),y(o))})(e,t)}}),(0,e.createElement)(cr,{currentTab:!0,isPanelOpen:d,isPanelSwitching:h,tab:(0,C.find)(Q(),{name:s}),content:(t=>{const{task:n}=i;switch(t){case"activity":return(0,e.createElement)(Cr,{hasAbbreviatedNotifications:T,thingsToDoNextCount:I});case"help":return(0,e.createElement)(hr,{taskName:n});case"setup":return(0,e.createElement)(gr,{query:i});default:return null}})(s),closePanel:()=>z(),clearPanel:()=>F()})),$?(0,e.createElement)(ar,{delay:1e3,useAnchor:!0,title:(0,v.__)("We're here for help","woocommerce"),content:(0,v.__)("If you have any questions, feel free to explore the WooCommerce docs listed here.","woocommerce"),closeButtonText:(0,v.__)("Got it","woocommerce"),id:"activity-panel-tab-help",onClose:()=>((0,f.recordEvent)("help_tooltip_click"),void(b&&L&&L({help_panel_highlight_shown:"yes"}))),onShow:()=>(0,f.recordEvent)("help_tooltip_view")}):null))};fr.defaultProps={getHistory:g.getHistory};const yr=fr;(0,y.registerPlugin)("activity-panel-header-item",{render:()=>(0,e.createElement)(w.WooHeaderItem,{order:20},(t=>{let{isEmbedded:n,query:o}=t;return window.wcAdminFeatures["activity-panels"]?(0,e.createElement)(yr,{isEmbedded:n,query:o}):null})),scope:"woocommerce-admin"});var wr=i(46290);const Hr="android",_r=()=>(0,e.createElement)("svg",{width:"37",height:"37",viewBox:"0 0 92 92",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("rect",{width:"92",height:"92",rx:"21.3953",fill:"#7F54B3"}),(0,e.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M72.5937 28.043H19.8094C16.4781 28.0459 13.7783 30.7705 13.7754 34.1324V54.4501C13.7783 57.812 16.4781 60.5366 19.8094 60.5395H44.8229L56.2573 66.9607L53.6672 60.5395H72.599C74.2009 60.5402 75.7374 59.8983 76.8702 58.7552C78.0029 57.612 78.639 56.0614 78.6383 54.4447V34.1324C78.6376 32.5157 78.0002 30.9657 76.8664 29.8235C75.7327 28.6814 74.1956 28.0408 72.5937 28.043ZM19.1057 32.4208C18.4658 32.4324 17.8646 32.7359 17.467 33.2482C17.0888 33.7635 16.9404 34.4175 17.058 35.0502C18.5962 45.0986 20.0338 51.8757 21.371 55.3816C21.8779 56.658 22.4896 57.2703 23.2063 57.2185C24.3075 57.1489 25.6263 55.5968 27.1627 52.5621C27.9964 50.8412 29.2602 48.2662 30.9539 44.837C32.3785 49.88 34.309 53.6787 36.7456 56.2331C37.4291 56.9436 38.1204 57.2748 38.8195 57.2266C39.4185 57.1931 39.953 56.8315 40.217 56.2813C40.4753 55.7358 40.5806 55.1278 40.5211 54.5248C40.3516 52.0703 40.5919 48.667 41.2421 44.3149C41.9081 39.8057 42.7523 36.5818 43.7749 34.6432C43.9822 34.2526 44.0733 33.8087 44.037 33.366C44.0039 32.7587 43.7116 32.1969 43.2374 31.829C42.7745 31.4367 42.1799 31.2446 41.5803 31.2935C40.8334 31.3325 40.1682 31.7885 39.8499 32.4797C38.2331 35.5019 37.0812 40.4109 36.3943 47.2068C35.2823 44.2394 34.4509 41.1703 33.9114 38.0412C33.623 36.4613 32.9037 35.7125 31.7536 35.7946C30.9592 35.8589 30.3063 36.3944 29.7819 37.4012L24.0348 48.5643C23.0997 44.6692 22.2205 39.9289 21.3972 34.3433C21.1997 32.9652 20.4358 32.3244 19.1057 32.4208ZM69.9089 34.6877C71.6969 35.0381 73.2407 36.2 74.1186 37.8559C74.9693 39.3247 75.3946 41.1161 75.3946 43.23C75.4148 45.9567 74.7062 48.6357 73.3477 50.9687C71.7778 53.7023 69.7195 55.0691 67.1727 55.0691C66.6933 55.0668 66.2153 55.0128 65.7467 54.9078C63.9584 54.5581 62.4143 53.396 61.5371 51.7396C60.6864 50.2452 60.261 48.4411 60.261 46.3272C60.2357 43.6127 60.945 40.9454 62.3079 38.6295C63.9023 35.8959 65.9607 34.5291 68.4829 34.5291C68.9623 34.5304 69.4402 34.5836 69.9089 34.6877ZM68.7937 49.4848C69.7707 48.5773 70.4399 47.2269 70.8012 45.4337V45.4419C70.9315 44.7826 70.9959 44.1112 70.9933 43.4382C70.986 42.5849 70.8291 41.74 70.5302 40.9452C70.1443 39.901 69.6304 39.3124 68.9884 39.1793C68.0378 38.9643 67.1239 39.5256 66.2469 40.8632C65.5812 41.8393 65.109 42.9432 64.8577 44.1106C64.7276 44.7708 64.6632 45.4432 64.6657 46.1171C64.6739 46.9677 64.8308 47.8096 65.1287 48.6019C65.5146 49.6388 66.0294 50.2274 66.6731 50.3678C67.3169 50.5081 68.0237 50.2138 68.7937 49.4848ZM57.9079 37.8559C57.0291 36.2008 55.4854 35.0392 53.6976 34.6877C53.2279 34.5837 52.749 34.5306 52.2687 34.5291C49.7443 34.5291 47.6856 35.8959 46.0927 38.6295C44.7295 40.9454 44.0201 43.6127 44.0454 46.3272C44.0454 48.4411 44.4699 50.2452 45.319 51.7396C46.1976 53.3949 47.7414 54.5566 49.5294 54.9078C49.999 55.0126 50.4779 55.0667 50.9582 55.0691C53.5055 55.0691 55.5642 53.7023 57.1343 50.9687C58.4922 48.6355 59.2001 45.9565 59.1789 43.23C59.1789 41.1161 58.7544 39.3247 57.9053 37.8559H57.9079ZM54.5903 45.4337C54.2307 47.2269 53.5614 48.5773 52.5825 49.4848C51.8115 50.2065 51.101 50.5017 50.4589 50.3678C49.8169 50.2338 49.3011 49.6461 48.9169 48.6019C48.6181 47.8097 48.4603 46.9678 48.4511 46.1171C48.4495 45.4431 48.5148 44.7707 48.6459 44.1106C48.8971 42.9432 49.3694 41.8393 50.0353 40.8632C50.9124 39.5256 51.8264 38.9643 52.7773 39.1793C53.4193 39.3124 53.9333 39.901 54.3193 40.9452C54.617 41.7404 54.7739 42.585 54.7824 43.4382C54.785 44.1112 54.7207 44.7826 54.5903 45.4419V45.4337Z",fill:"white"})),vr="wcadmin_mobile_android_banner_click",Er="woocommerce-layout__show-app-banner",Lr=t=>{let{onInstall:n,onDismiss:o}=t;const[r,i]=(0,e.useState)(!1),s=(/iPhone|iPad|iPod/i.test(window.navigator.userAgent)?"ios":/Android/i.test(window.navigator.userAgent)?Hr:"unknown")===Hr&&!r;return(0,e.useEffect)((()=>{const e=document.getElementsByClassName("woocommerce-layout")[0];return s&&e&&e.classList.add(Er),()=>{e&&e.classList.remove(Er)}}),[s]),s?(0,e.createElement)("div",{className:"woocommerce-mobile-app-banner"},(0,e.createElement)(Go.Z,{icon:(0,e.createElement)(wr.Z,{"data-testid":"dismiss-btn"}),onClick:()=>{o(),i(!0),(0,f.recordEvent)(vr,{action:"dismiss"})}}),(0,e.createElement)(_r,null),(0,e.createElement)("div",{className:"woocommerce-mobile-app-banner__description"},(0,e.createElement)("p",{className:"woocommerce-mobile-app-banner__description__text"},(0,v.__)("Run your store from anywhere","woocommerce")),(0,e.createElement)("p",{className:"woocommerce-mobile-app-banner__description__text"},(0,v.__)("Download the WooCommerce app","woocommerce"))),(0,e.createElement)(a.Button,{href:"https://play.google.com/store/apps/details?id=com.woocommerce.android",isSecondary:!0,onClick:()=>{n(),i(!0),(0,f.recordEvent)(vr,{action:"install"})}},(0,v.__)("Install","woocommerce"))):null};(0,y.registerPlugin)("mobile-banner-header-item",{render:()=>{const{updateUserPreferences:t,...n}=(0,o.useUserPreferences)(),r=()=>{t({android_app_banner_dismissed:"yes"})};return"yes"===n.android_app_banner_dismissed?null:(0,e.createElement)(w.WooHeaderItem,null,(0,e.createElement)(Lr,{onDismiss:r,onInstall:r}))},scope:"woocommerce-admin"});const br=e=>0===e.indexOf("http")?e:(0,Q.getAdminLink)(e),kr=e=>{const t=e.replace(/[-\/\\^$*+?.()|[\]{}]/gi,"\\$&"),[n,o,r]=t.split(/\\\?|#/),a=r?`(.*#${r}$)`:"";return"^"+n+(o?o.split("&").reduce(((e,t)=>`${e}(?=.*[?|&]${t}(&|$|#))`),""):"")+a},Sr=e=>{let t=null,n=0;return e.forEach((e=>{const o=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!t)return 0;const o=br(t),{href:r}=e;if(o===r)return Number.MAX_SAFE_INTEGER;const a=kr(o),i=new RegExp(n||a,"i");return(decodeURIComponent(r).match(i)||[]).length}(window.location,e.url,e.matchExpression);o>0&&o>=n&&(n=o,t=e)})),t||null},Mr=["primary","favorites","plugins","secondary"],Nr={woocommerce:{id:"woocommerce",isCategory:!0,menuId:"primary",migrate:!0,order:10,parent:"",title:"WooCommerce"}};var xr=i(70444);const Tr=(0,e.createElement)(xr.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"-2 -2 24 24"},(0,e.createElement)(xr.Path,{d:"M20 10c0-5.51-4.49-10-10-10C4.48 0 0 4.49 0 10c0 5.52 4.48 10 10 10 5.51 0 10-4.48 10-10zM7.78 15.37L4.37 6.22c.55-.02 1.17-.08 1.17-.08.5-.06.44-1.13-.06-1.11 0 0-1.45.11-2.37.11-.18 0-.37 0-.58-.01C4.12 2.69 6.87 1.11 10 1.11c2.33 0 4.45.87 6.05 2.34-.68-.11-1.65.39-1.65 1.58 0 .74.45 1.36.9 2.1.35.61.55 1.36.55 2.46 0 1.49-1.4 5-1.4 5l-3.03-8.37c.54-.02.82-.17.82-.17.5-.05.44-1.25-.06-1.22 0 0-1.44.12-2.38.12-.87 0-2.33-.12-2.33-.12-.5-.03-.56 1.2-.06 1.22l.92.08 1.26 3.41zM17.41 10c.24-.64.74-1.87.43-4.25.7 1.29 1.05 2.71 1.05 4.25 0 3.29-1.73 6.24-4.4 7.78.97-2.59 1.94-5.2 2.92-7.78zM6.1 18.09C3.12 16.65 1.11 13.53 1.11 10c0-1.3.23-2.48.72-3.59C3.25 10.3 4.67 14.2 6.1 18.09zm4.03-6.63l2.58 6.98c-.86.29-1.76.45-2.71.45-.79 0-1.57-.11-2.29-.33.81-2.38 1.62-4.74 2.42-7.1z"})),Ar=()=>{const t=(0,Q.getSetting)("siteTitle",""),n=(0,Q.getSetting)("homeUrl",""),{isScrolled:o}=K(),[r,i]=(0,e.useState)(document.body.classList.contains(!1)),s="is-wc-nav-folded",c="is-wc-nav-expanded",m=()=>{document.body.classList.add(s),document.body.classList.remove(c),i(!0)},u=()=>{document.body.classList.remove(s),document.body.classList.add(c),i(!1)},d=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document.body.clientWidth;e<=960?m():u()};(0,e.useEffect)((()=>{d();const e=[{eventName:"orientationchange",handler:e=>d(e.target.screen.availWidth)},{eventName:"resize",handler:(0,C.debounce)((()=>d()),200)}];for(const{eventName:t,handler:n}of e)window.addEventListener(t,n,!1);(0,g.addHistoryListener)((()=>d()))}),[]);let p=(0,e.createElement)(Go.Z,{size:"36px",icon:Tr});const{isRequestingSiteIcon:h,siteIconUrl:f}=(0,l.useSelect)((e=>{const{isResolving:t}=e("core/data"),{getEntityRecord:n}=e("core"),o=n("root","__unstableBase",void 0)||{};return{isRequestingSiteIcon:t("core","getEntityRecord",["root","__unstableBase",void 0]),siteIconUrl:o.siteIconUrl}}));f?p=(0,e.createElement)("img",{alt:(0,v.__)("Site Icon","woocommerce"),src:f}):h&&(p=null);const y=G()("woocommerce-navigation-header",{"is-scrolled":o});return(0,e.createElement)("div",{className:y},(0,e.createElement)(a.Button,{onClick:()=>{document.body.classList.contains(s)?u():m()},className:"woocommerce-navigation-header__site-icon","aria-label":"Fold navigation",role:"switch","aria-checked":r?"true":"false"},p),(0,e.createElement)(a.Button,{title:t,href:n,className:"woocommerce-navigation-header__site-title",as:"span"},(0,Y.decodeEntities)(t)))},Ir=(0,e.createElement)(xr.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,e.createElement)(xr.Path,{d:"M11.776 4.454a.25.25 0 01.448 0l2.069 4.192a.25.25 0 00.188.137l4.626.672a.25.25 0 01.139.426l-3.348 3.263a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.362.263l-4.138-2.175a.25.25 0 00-.232 0l-4.138 2.175a.25.25 0 01-.363-.263l.79-4.607a.25.25 0 00-.071-.222L4.754 9.881a.25.25 0 01.139-.426l4.626-.672a.25.25 0 00.188-.137l2.069-4.192z"})),Or=(0,e.createElement)(xr.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,e.createElement)(xr.Path,{fillRule:"evenodd",d:"M9.706 8.646a.25.25 0 01-.188.137l-4.626.672a.25.25 0 00-.139.427l3.348 3.262a.25.25 0 01.072.222l-.79 4.607a.25.25 0 00.362.264l4.138-2.176a.25.25 0 01.233 0l4.137 2.175a.25.25 0 00.363-.263l-.79-4.607a.25.25 0 01.072-.222l3.347-3.262a.25.25 0 00-.139-.427l-4.626-.672a.25.25 0 01-.188-.137l-2.069-4.192a.25.25 0 00-.448 0L9.706 8.646zM12 7.39l-.948 1.921a1.75 1.75 0 01-1.317.957l-2.12.308 1.534 1.495c.412.402.6.982.503 1.55l-.362 2.11 1.896-.997a1.75 1.75 0 011.629 0l1.895.997-.362-2.11a1.75 1.75 0 01.504-1.55l1.533-1.495-2.12-.308a1.75 1.75 0 01-1.317-.957L12 7.39z",clipRule:"evenodd"})),Pr=t=>{let{id:n}=t;const{favorites:r,isResolving:i}=(0,l.useSelect)((e=>({favorites:e(o.NAVIGATION_STORE_NAME).getFavorites(),isResolving:e(o.NAVIGATION_STORE_NAME).isResolving("getFavorites")}))),{addFavorite:s,removeFavorite:c}=(0,l.useDispatch)(o.NAVIGATION_STORE_NAME),m=r.includes(n);return i?null:(0,e.createElement)(a.Button,{id:"woocommerce-navigation-favorite-button",className:"woocommerce-navigation-favorite-button",isTertiary:!0,onClick:()=>{(m?c:s)(n),(0,f.recordEvent)("navigation_favorite",{id:n,action:m?"unfavorite":"favorite"})},"aria-label":m?(0,v.__)("Add this item to your favorites.","woocommerce"):(0,v.__)("Remove this item from your favorites.","woocommerce")},(0,e.createElement)(Go.Z,{icon:m?Ir:Or,className:`star-${m?"filled":"empty"}-icon`}))},Rr="woocommerce_navigation_favorites_tooltip_hidden",Vr=()=>{const{isFavoritesResolving:t,isOptionResolving:n,isTooltipHidden:r}=(0,l.useSelect)((e=>{const{getOption:t,isResolving:n}=e(o.OPTIONS_STORE_NAME);return{isFavoritesResolving:e(o.NAVIGATION_STORE_NAME).isResolving("getFavorites"),isOptionResolving:n("getOption",[Rr]),isTooltipHidden:"yes"===t(Rr)}})),{updateOptions:a}=(0,l.useDispatch)(o.OPTIONS_STORE_NAME);return t||r||n||document.body.classList.contains("is-wc-nav-folded")?null:(0,e.createElement)(ar,{delay:1e3,title:(0,v.__)("Introducing favorites","woocommerce"),content:(0,v.__)("You can now favorite your extensions to pin them in the top level of the navigation.","woocommerce"),closeButtonText:(0,v.__)("Got it","woocommerce"),id:"woocommerce-navigation-favorite-button",onClose:()=>a({[Rr]:"yes"}),useAnchor:!0})},jr=t=>{let{category:n}=t;const{id:o,menuId:r,title:a}=n,i="woocommerce-navigation-category-title";return["plugins","favorites"].includes(r)?(0,e.createElement)("span",{className:i},(0,e.createElement)("span",{className:`${i}__text`},a),(0,e.createElement)(Pr,{id:o}),(0,e.createElement)(Vr,null)):(0,e.createElement)("span",{className:i},a)},Dr=t=>{var n;let{item:o}=t;const r=(0,q.useSlot)("woocommerce_navigation_"+o.id),a=Boolean(null==r||null===(n=r.fills)||void 0===n?void 0:n.length),i=e=>{(0,f.recordEvent)("navigation_click",{menu_item:e})};return a&&!o.isCategory?(0,e.createElement)(q.NavigationItem,{key:o.id,item:o.id},(0,e.createElement)("div",{onClick:()=>i(o.id)},(0,e.createElement)(g.WooNavigationItem.Slot,{name:o.id}))):(0,e.createElement)(q.NavigationItem,{key:o.id,item:o.id,title:o.title,badge:o.badge?o.badge:null,href:o.url,navigateToMenu:!o.url&&o.id,onClick:()=>i(o.id),hideIfTargetMenuEmpty:!0})},Zr=t=>{let{category:n,onBackClick:o,pluginItems:r,primaryItems:a}=t;if(!a.length&&!r.length)return null;const i=(0,_.applyFilters)("woocommerce_navigation_root_back_label",(0,v.__)("WordPress Dashboard","woocommerce")),s=(0,_.applyFilters)("woocommerce_navigation_root_back_url",window.wcNavigation.rootBackUrl),c="woocommerce"===n.id&&s;return(0,e.createElement)(q.NavigationMenu,{title:(0,e.createElement)(jr,{category:n}),menu:n.id,parentMenu:n.parent,backButtonLabel:c?i:n.backButtonLabel||null,onBackButtonClick:c?()=>{o("woocommerce"),window.location=s}:()=>o(n.id)},!!a.length&&(0,e.createElement)(q.NavigationGroup,null,a.map((t=>(0,e.createElement)(Dr,{key:t.id,item:t})))),!!r.length&&(0,e.createElement)(q.NavigationGroup,{title:"woocommerce"===n.id?(0,v.__)("Extensions","woocommerce"):null},r.map((t=>(0,e.createElement)(Dr,{key:t.id,item:t})))))},Br=t=>{let{category:n,items:o,onBackClick:r}=t;if(!o.length)return null;const a="woocommerce"===n.id;return(0,e.createElement)(q.NavigationMenu,{className:"components-navigation__menu-secondary",title:!a&&(0,e.createElement)(jr,{category:n}),menu:n.id,parentMenu:n.parent,backButtonLabel:n.backButtonLabel||null,onBackButtonClick:a?null:()=>r(n.id)},(0,e.createElement)(q.NavigationGroup,{onBackButtonClick:()=>r(n.id)},o.map((t=>(0,e.createElement)(Dr,{key:t.id,item:t})))))},zr=(0,o.withNavigationHydration)(window.wcNavigation)((()=>{const{menuItems:t}=(0,l.useSelect)((e=>({menuItems:e(o.NAVIGATION_STORE_NAME).getMenuItems()})));(0,e.useEffect)((()=>{document.documentElement.classList.remove("wp-toolbar"),document.body.classList.add("has-woocommerce-navigation");const e=document.getElementById("adminmenumain");e&&e.classList.add("folded")}),[]);const[n,r]=(0,e.useState)("woocommerce-home"),[a,i]=(0,e.useState)("woocommerce");(0,e.useEffect)((()=>{const e=Sr(t);return e&&n!==e&&(r(e),i(e.parent)),(0,g.addHistoryListener)((()=>{setTimeout((()=>{const e=Sr(t);e&&(r(e),i(e.parent))}),0)}))}),[t]);const{currentUserCan:s}=(0,o.useUser)(),{categories:c,items:m}=(0,e.useMemo)((()=>((e,t)=>{const n={...Nr},o=(e=>e.sort(((e,t)=>e.order===t.order?e.title.localeCompare(t.title):e.order-t.order)))(e).reduce(((e,o)=>{if(e[o.parent]||(e[o.parent]={},Mr.forEach((t=>{e[o.parent][t]=[]}))),!e[o.parent][o.menuId])return e;if(t&&o.capability&&!t(o.capability))return e;o.isCategory&&(n[o.id]=o);const r=e[o.parent][o.menuId];return r&&r.push(o),e}),{});return{items:o,categories:n}})(t,s)),[t,s]),u=(0,e.useRef)(null),d=e=>{(0,f.recordEvent)("navigation_back_click",{category:e})},p="woocommerce"===a,h=G()("woocommerce-navigation",{"is-root":p});return(0,e.createElement)("div",{className:h},(0,e.createElement)(Ar,null),(0,e.createElement)("div",{className:"woocommerce-navigation__wrapper",ref:u},(0,e.createElement)(q.Navigation,{activeItem:n?n.id:null,activeMenu:a,onActivateMenu:function(){u&&u.current&&(u.current.scrollTop=0),i(...arguments)}},Object.values(c).map((t=>{const n=m[t.id];return!!n&&[(0,e.createElement)(Zr,{key:t.id,category:t,onBackClick:d,primaryItems:[...n.primary,...n.favorites],pluginItems:n.plugins}),(0,e.createElement)(Br,{key:`secondary/${t.id}`,category:t,onBackClick:d,items:n.secondary})]})))))}));(0,y.registerPlugin)("wc-admin-navigation",{render:()=>{const{persistedQuery:t}=(0,l.useSelect)((e=>({persistedQuery:e(o.NAVIGATION_STORE_NAME).getPersistedQuery()})));if(!window.wcAdminFeatures.navigation)return null;if(!(0,g.isWCAdmin)())return(0,e.createElement)(w.WooHeaderNavigationItem,{order:-100},(0,e.createElement)(zr,null));const n=(0,b.Z)().filter((e=>e.navArgs)),r=F().filter((e=>e.navArgs)).map((e=>"/analytics/settings"===e.path?{...e,breadcrumbs:[(0,v.__)("Analytics","woocommerce")]}:e));return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(w.WooHeaderNavigationItem,{order:-100},(0,e.createElement)(zr,null)),r.map((n=>(0,e.createElement)(g.WooNavigationItem,{item:n.navArgs.id,key:n.navArgs.id},(0,e.createElement)(E.Link,{className:"components-button",href:(0,g.getNewPath)((0,g.pathIsExcluded)(n.path)?{}:t,n.path,{}),type:"wc-admin"},n.breadcrumbs[n.breadcrumbs.length-1])))),n.map((n=>(0,e.createElement)(g.WooNavigationItem,{item:n.navArgs.id,key:n.navArgs.id},(0,e.createElement)(E.Link,{className:"components-button",href:(0,g.getNewPath)((0,g.pathIsExcluded)(n.report)?{}:t,`/analytics/${n.report}`,{}),type:"wc-admin"},n.title)))))},scope:"woocommerce-navigation"});const Fr=(0,e.lazy)((()=>i.e(8597).then(i.bind(i,4578)))),Wr=(0,e.lazy)((()=>Promise.resolve().then(i.bind(i,52260))));class Ur extends e.Component{render(){const{children:t}=this.props;return(0,e.createElement)("div",{className:"woocommerce-layout__primary",id:"woocommerce-layout__primary"},window.wcAdminFeatures["store-alerts"]&&(0,e.createElement)(e.Suspense,{fallback:null},(0,e.createElement)(Fr,null)),(0,e.createElement)(ne,null),t)}}const Gr=e=>{let{children:t}=e;const n=(0,u.TH)(),o=(0,u.bS)(n.pathname),r={params:(0,u.UO)(),url:o.pathname};return d.Children.toArray(t).map((e=>(0,d.cloneElement)(e,{...e.props,location:n,match:r})))};function Yr(t){var o,r;let{activePlugins:i,installedPlugins:s,isEmbedded:c,isJetpackConnected:l,location:m,match:u,page:d}=t;!function(t){(0,e.useEffect)((()=>{if(!t.path)return;const e=`woocommerce-admin-page_${"/"===(n=t.path)?"_home":n.replace(/:[a-zA-Z?]+/g,(function(e){return(t=e,t.replace(/[A-Z]/g,(e=>`-${e.toLowerCase()}`))).replace(":","");var t})).replace(/\//g,"_")}`;var n;return document.body.classList.add(e),()=>{document.body.classList.remove(e)}}),[t.path])}(d),(0,e.useEffect)((()=>{(0,n.triggerExitPageCesSurvey)()}),[]),(0,e.useEffect)((()=>{!function(){const e={has_navigation:!!window.wcNavigation};if(c){const t=document.location.pathname+document.location.search;return void(0,f.recordPageView)(t,{is_embedded:!0,...e})}const{pathname:t}=m;if(!t)return;let n=t.substring(1).replace(/\//g,"_");0===n.length&&(n="home_screen"),(0,f.recordPageView)(n,{jetpack_installed:s.includes("jetpack"),jetpack_active:i.includes("jetpack"),jetpack_connected:l,...e})}(),setTimeout((()=>{(0,n.triggerExitPageCesSurvey)()}),0)}),[null==m?void 0:m.pathname]);const{breadcrumbs:p,layout:h={header:!0,footer:!0}}=d,{header:H=!0,footer:_=!0}=h,v=(0,g.getQuery)();return(0,e.useEffect)((()=>{const e=document.getElementById("wpbody");H?null==e||e.classList.remove("no-header"):null==e||e.classList.add("no-header")}),[H]),(0,e.createElement)(w.LayoutContextProvider,{value:(0,w.getLayoutContextValue)([(null==d||null===(o=d.navArgs)||void 0===o||null===(r=o.id)||void 0===r?void 0:r.toLowerCase())||"page"])},(0,e.createElement)(a.SlotFillProvider,null,(0,e.createElement)("div",{className:"woocommerce-layout"},H&&(0,e.createElement)($,{sections:(0,C.isFunction)(p)?p({match:u}):p,isEmbedded:c,query:v}),(0,e.createElement)(Uo,null),!c&&(0,e.createElement)(Ur,null,(0,e.createElement)("div",{className:"woocommerce-layout__main"},(0,e.createElement)(W,{page:d,match:u,query:v}))),c&&function(){const{page:e,section:t,tab:n}=(0,g.getQuery)();return"wc-settings"===e&&"checkout"===n&&"woocommerce_payments"===t}()&&(0,e.createElement)(e.Suspense,{fallback:null},(0,e.createElement)(Wr,null)),_&&(0,e.createElement)(ee,null),(0,e.createElement)(n.CustomerEffortScoreModalContainer,null)),(0,e.createElement)(y.PluginArea,{scope:"woocommerce-admin"}),window.wcAdminFeatures.navigation&&(0,e.createElement)(y.PluginArea,{scope:"woocommerce-navigation"}),(0,e.createElement)(y.PluginArea,{scope:"woocommerce-tasks"})))}Yr.propTypes={isEmbedded:h().bool,page:h().shape({container:h().oneOfType([h().func,h().object]),path:h().string,breadcrumbs:h().oneOfType([h().func,h().arrayOf(h().oneOfType([h().arrayOf(h().string),h().string]))]).isRequired,wpOpenMenu:h().string}).isRequired};const Qr=(0,r.O3)("dataEndpoints"),qr=(0,c.compose)((0,o.withPluginsHydration)({...(0,r.O3)("plugins",{}),jetpackStatus:Qr&&Qr.jetpackStatus||!1}),(0,l.withSelect)(((e,t)=>{let{isEmbedded:n}=t;if(n)return;const{getActivePlugins:r,getInstalledPlugins:a,isJetpackConnected:i}=e(o.PLUGINS_STORE_NAME);return{activePlugins:r(),isJetpackConnected:i(),installedPlugins:a()}})))((t=>t.isEmbedded?(0,e.createElement)(Yr,t):(0,e.createElement)(Gr,null,(0,e.createElement)(Yr,t)))),Jr=(0,c.compose)(window.wcSettings.admin?(0,o.withOptionsHydration)({...(0,r.O3)("preloadOptions",{})}):C.identity)((()=>{const{currentUserCan:t}=(0,o.useUser)(),n=document.location.pathname,r=n.substring(0,n.lastIndexOf("/"));return(0,e.createElement)(m.M,{history:(0,g.getHistory)()},(0,e.createElement)(u.Z5,{basename:r},F().filter((e=>!e.capability||t(e.capability))).map((t=>(0,e.createElement)(u.AW,{key:t.path,path:t.path,exact:!0,element:(0,e.createElement)(qr,{page:t})})))))})),Kr=(0,c.compose)((0,r.O3)("preloadOptions")?(0,o.withOptionsHydration)({...(0,r.O3)("preloadOptions")}):C.identity)((()=>(0,e.createElement)(qr,{page:{breadcrumbs:(0,r.O3)("embedBreadcrumbs",[])},isEmbedded:!0}))),Xr="woocommerce_show_marketplace_suggestions",$r=t=>{let{children:n}=t;const{currentUserCan:r}=(0,o.useUser)(),a=(0,l.useSelect)((e=>{const{getOption:t,hasFinishedResolution:n}=e(o.OPTIONS_STORE_NAME),r=n("getOption",[Xr]),a="no"!==t(Xr);return r&&a}));return r("install_plugins")&&a?(0,e.createElement)(e.Fragment,null,n):null},ea=(0,e.lazy)((()=>i.e(5396).then(i.bind(i,22079)))),ta=(0,e.lazy)((()=>window.wcAdminFeatures["shipping-smart-defaults"]?i.e(6125).then(i.bind(i,57418)):i.e(6125).then(i.bind(i,15883)))),na="woocommerce_store_address",oa="woocommerce_store_city",ra="woocommerce_store_postcode",aa=e=>{const t=document.querySelector(e);return!!t&&t.value.length>0},ia=()=>{const{isLoading:t,show:n}=(()=>{const{hasFilledStoreAddress:e,isLoading:t}=(0,l.useSelect)((e=>{const{hasFinishedResolution:t,getOption:n}=e(o.OPTIONS_STORE_NAME);return{isLoading:!t("getOption",[na])||!t("getOption",[oa])||!t("getOption",[ra]),hasFilledStoreAddress:""!==n(na)&&""!==n(oa)&&""!==n(ra)}}));return{isLoading:t,show:!t&&!e}})(),[r,a]=(0,e.useState)(!1),i={steps:[{referenceElements:{desktop:"#store_address-description + table.form-table"},meta:{name:"store-location-tour-step-1",heading:"Add your store location",descriptions:{desktop:(0,v.__)('Add your store location details to help us configure shipping, taxes, currency and more in a fully automated way. Once done, click on the "Save" button at the end of the form.',"woocommerce")},primaryButton:{text:(0,v.__)("Got it","woocommerce")}}}],placement:"bottom-start",options:{effects:{liveResize:{mutation:!0,resize:!0},spotlight:{styles:{inset:"0px auto auto -8px",paddingInline:"8px"},interactivity:{enabled:!0}}}},closeHandler:(e,t,n)=>{const o={address_1:aa("input#woocommerce_store_address"),address_2:aa("input#woocommerce_store_address_2"),city:aa("input#woocommerce_store_city"),postcode:aa("input#woocommerce_store_postcode")};(0,f.recordEvent)("settings_store_address_tour_dismiss",{source:n,fields_filled:o}),a(!0)}};return r||t||!n?null:(0,e.createElement)(E.TourKit,{config:i})},sa=[t=>{let{page:n,tab:o,section:r}=t;return"wc-settings"!==n||"checkout"!==o||r?null:(0,e.createElement)($r,null,(0,e.createElement)(e.Suspense,{fallback:null},(0,e.createElement)(ea,null)))},t=>{let{page:n,tab:o,section:r,zone_id:a}=t;return"wc-settings"!==n||"shipping"!==o||Boolean(r)||Boolean(a)?null:(0,e.createElement)($r,null,(0,e.createElement)(e.Suspense,{fallback:null},(0,e.createElement)(ta,null)))},t=>{let{page:n,tab:o,tutorial:r}=t;return"wc-settings"!==n||"general"!==o&&void 0!==o?null:r?(0,e.createElement)(ia,null):null}],ca=()=>{(0,e.useEffect)((()=>{(0,n.triggerExitPageCesSurvey)()}),[]);const t=(0,H.parse)(location.search.substring(1));let o={page:"",tab:""};void 0!==t.page&&(o=t);const r=(0,_.applyFilters)("woocommerce_admin_embedded_layout_components",sa,o);return(0,e.createElement)(w.LayoutContextProvider,{value:(0,w.getLayoutContextValue)(["page"])},(0,e.createElement)("div",{className:"woocommerce-embedded-layout__primary",id:"woocommerce-embedded-layout__primary"},r.map(((t,n)=>(0,e.createElement)(t,(0,oe.Z)({key:n},o))))))};var la=i(72456),ma=i(90523);const ua=()=>{(0,f.recordEvent)("settings_payments_banner_connect_click")},da=()=>{const t=(0,Q.getAdminLink)("admin.php?wcpay-connect=1&_wpnonce="+(0,r.O3)("wcpay_welcome_page_connect_nonce")),n=(0,r.O3)("isWooPayEligible");return(0,e.createElement)(la.WCPayBanner,null,(0,e.createElement)(la.WCPayBannerBody,{textPosition:"right",actionButton:(0,e.createElement)(a.Button,{href:t,isPrimary:!0,onClick:ua},(0,v.__)("Get started","woocommerce")),isWooPayEligible:n}),(0,e.createElement)(la.WCPayBannerFooter,{isWooPayEligible:n}))},pa=()=>(0,e.createElement)(e.Fragment,null,(0,e.createElement)("h2",null,(0,v.__)("Payment Methods","woocommerce")),(0,e.createElement)("div",{id:"payment_gateways_options-description"},(0,e.createElement)("p",null,(0,v.__)("Installed payment methods are listed below and can be sorted to control their display order on the frontend.","woocommerce")))),ha=()=>{const{hasFinishedResolution:t,shouldShowBanner:n}=(()=>{const{installedPaymentGateways:e,paymentGatewaySuggestions:t,hasFinishedResolution:n}=(0,l.useSelect)((e=>({installedPaymentGateways:e(o.PAYMENT_GATEWAYS_STORE_NAME).getPaymentGateways(),paymentGatewaySuggestions:e(o.ONBOARDING_STORE_NAME).getPaymentGatewaySuggestions(),hasFinishedResolution:e(o.ONBOARDING_STORE_NAME).hasFinishedResolution("getPaymentGatewaySuggestions")&&e(o.PAYMENT_GATEWAYS_STORE_NAME).hasFinishedResolution("getPaymentGateways")}))),r=e.some((e=>"woocommerce_payments"===e.id)),a=e.find((e=>"woocommerce_payments"===e.id&&!1===e.enabled));return{hasFinishedResolution:n,shouldShowBanner:(0,ma.j)(t)&&r&&a}})();return t&&n?(0,e.createElement)(da,null):(0,e.createElement)(pa,null)},{Fill:Ca,Slot:ga}=(0,a.createSlotFill)("__EXPERIMENTAL__WcAdminPaymentsGatewaysSettingsBanner");(0,y.registerPlugin)("woocommerce-admin-paymentsgateways-settings-banner",{scope:"woocommerce-settings",render:()=>(0,e.createElement)(Ca,null,(0,e.createElement)(ha,null))});var fa=i(75283),ya=i(28601),wa=i(31863);const{Fill:Ha,Slot:_a}=(0,a.createSlotFill)("__EXPERIMENTAL__WcAdminConflictError"),va=()=>(0,e.createElement)(a.Button,{href:"https://woocommerce.com/document/setting-up-taxes-in-woocommerce/",target:"_blank"},(0,v.__)("Learn more","woocommerce"));function Ea(e,t){let n=parseInt(e.slice(1,3),16),o=parseInt(e.slice(3,5),16),r=parseInt(e.slice(5,7),16);return n=Math.floor(255*(1-t)+t*n),o=Math.floor(255*(1-t)+t*o),r=Math.floor(255*(1-t)+t*r),"#"+n.toString(16).padStart(2,"0")+o.toString(16).padStart(2,"0")+r.toString(16).padStart(2,"0")}(0,y.registerPlugin)("woocommerce-admin-tax-settings-conflict-warning",{scope:"woocommerce-settings",render:()=>{const[n,o]=(0,e.useState)(!1),[r,i]=(0,e.useState)("yes"===document.forms.mainform.elements.woocommerce_prices_include_tax.value?"incl":"excl"),[s,c]=(0,e.useState)(window.jQuery("#woocommerce_tax_display_shop").val()),[m,u]=(0,e.useState)(window.jQuery("#woocommerce_tax_display_cart").val()),{createNotice:d}=(0,l.useDispatch)(t.store),p=()=>{window.jQuery("#woocommerce_tax_display_shop").val(r).trigger("change"),window.jQuery("#woocommerce_tax_display_cart").val(r).trigger("change"),d("success",(0,v.__)("Recommended settings applied.","woocommerce")),(0,f.recordEvent)("tax_settings_conflict_recommended_settings_clicked")};(0,e.useEffect)((()=>{document.querySelectorAll("input[name='woocommerce_prices_include_tax']").forEach((e=>{e.addEventListener("change",(()=>i("yes"===document.forms.mainform.elements.woocommerce_prices_include_tax.value?"incl":"excl")))}))}),[]),(0,e.useEffect)((()=>{window.jQuery("#woocommerce_tax_display_shop").on("click change",(()=>c(document.getElementById("woocommerce_tax_display_shop").value)))}),[]),(0,e.useEffect)((()=>{window.jQuery("#woocommerce_tax_display_cart").on("click change",(()=>u(document.getElementById("woocommerce_tax_display_cart").value)))}),[]);const[h,C]=(0,e.useState)(!1);return(0,e.useEffect)((()=>{s===r&&m===r?C(!1):(C(!0),(0,f.recordEvent)("tax_settings_conflict",{main:r,shop:s,cart:m}))}),[m,s,r]),!h||n?(0,e.createElement)(Ha,null):(0,e.createElement)(Ha,null,(0,e.createElement)("div",{className:"woocommerce_tax_settings_conflict_error"},(0,e.createElement)(a.Card,null,(0,e.createElement)(a.CardBody,{className:"woocommerce_tax_settings_conflict_error_card_body"},(0,e.createElement)("div",null,(0,e.createElement)("img",{className:"woocommerce_tax_settings_conflict_error_card_body__warning_icon",src:wa,alt:"Warning Icon"})),(0,e.createElement)("div",null,(0,e.createElement)("div",{className:"woocommerce_tax_settings_conflict_error_card_body__body_text"},(0,e.createElement)("p",{style:{fontSize:13}},(0,fa.Z)({mixedString:(0,v.__)("{{b}}Inconsistent tax settings:{{/b}} To avoid possible rounding errors, prices should be entered and displayed consistently in all locations either including, or excluding taxes.","woocommerce"),components:{b:(0,e.createElement)("b",null)}}))),(0,e.createElement)("div",{className:"woocommerce_tax_settings_conflict_error_card_body__buttons"},(0,e.createElement)((()=>(0,e.createElement)(a.Button,{variant:"primary",onClick:p},(0,v.__)("Use recommended settings","woocommerce"))),null)," ",(0,e.createElement)(va,null))),(0,e.createElement)("div",null,(0,e.createElement)(a.Button,{className:"woocommerce_tax_settings_conflict_error_card_body__close_icon",onClick:()=>{o(!0),(0,f.recordEvent)("tax_settings_conflict_dismissed")}},(0,e.createElement)(Go.Z,{icon:ya.Z})))))))}}),i.p=i.g.wcAdminAssets.path;const La=i.u;i.u=e=>`${La(e)}?ver=${window.wcAdminAssets.version}`;const ba=i.miniCssF;i.miniCssF=e=>`${ba(e)}?ver=${window.wcAdminAssets.version}`;const ka=document.getElementById("root"),Sa=document.getElementById("woocommerce-embedded-root"),Ma="wc_admin",Na=(0,r.O3)("currentUserData");if((()=>{const e=window.getComputedStyle(document.body).getPropertyValue("--wp-admin-theme-color").trim();document.documentElement.style.setProperty("--wp-admin-theme-color-background-04",Ea(e,.04)),document.documentElement.style.setProperty("--wp-admin-theme-color-background-25",Ea(e,.25))})(),ka){let t=(0,o.withSettingsHydration)(Ma,window.wcSettings.admin)(Jr);const n=!!window.wcSettings.admin&&window.wcSettings.admin.preloadSettings;n&&n.general&&(t=(0,o.withSettingsHydration)("general",{general:n.general})(t)),Na&&(t=(0,o.withCurrentUserHydration)(Na)(t)),(0,e.render)((0,e.createElement)(t,null),ka)}else if(Sa){let t=(0,o.withSettingsHydration)(Ma,window.wcSettings.admin)(Kr);Na&&(t=(0,o.withCurrentUserHydration)(Na)(t)),(0,e.render)((0,e.createElement)(t,null),Sa),Sa.classList.remove("is-embed-loading");const n=document.getElementById("wpbody-content"),r=document.getElementById("wc_payment_gateways_banner_slotfill");r&&(0,e.render)((0,e.createElement)(e.Fragment,null,(0,e.createElement)(a.SlotFillProvider,null,(0,e.createElement)(ga,null),(0,e.createElement)(y.PluginArea,{scope:"woocommerce-settings"}))),r);const i=document.getElementById("wc_conflict_error_slotfill");i&&(0,e.render)((0,e.createElement)(e.Fragment,null,(0,e.createElement)(a.SlotFillProvider,null,(0,e.createElement)(_a,null),(0,e.createElement)(y.PluginArea,{scope:"woocommerce-settings"}))),i);const s=n.querySelector(".wrap.woocommerce")||document.querySelector("#wpbody-content > .woocommerce")||n.querySelector(".wrap"),c=document.createElement("div");(0,e.render)((0,e.createElement)("div",{className:"woocommerce-layout"},(0,e.createElement)(Ur,null)),n.insertBefore(c,s));const l=document.createElement("div");(0,e.render)((0,e.createElement)(ca,null),n.insertBefore(l,s.nextSibling))}window.wcAdminFeatures&&!0===window.wcAdminFeatures["customer-effort-score-tracks"]&&function(){const t=ka||Sa;(0,e.render)((0,e.createElement)(n.CustomerEffortScoreTracksContainer,null),t.insertBefore(document.createElement("div"),null))}()})(),(window.wc=window.wc||{}).app=s})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/app/style-rtl.css b/wp/wp-content/plugins/woocommerce/assets/client/admin/app/style-rtl.css
index 98337a0b..a815fa83 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/app/style-rtl.css
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/app/style-rtl.css
@@ -1 +1 @@
-.woocommerce-admin-page .wrap{margin:0}.woocommerce-admin-page #wpcontent,.woocommerce-admin-page.woocommerce_page_wc-admin #wpbody-content{padding:0;overflow-x:hidden!important;min-height:calc(100vh - 32px)}@media(min-width:783px){.woocommerce-admin-page #wpbody-content{padding-right:0}}@media(max-width:782px){.woocommerce-admin-page .wp-responsive-open #woocommerce-embedded-root,.woocommerce-admin-page .wp-responsive-open #wpbody{position:relative;left:-14.5em}.woocommerce-admin-page #wpbody-content,.woocommerce-admin-page #wpcontent{min-height:calc(100vh - 46px)}}@media(min-width:961px){.woocommerce-admin-page #toplevel_page_wcadmin--analytics.menu-top>a:focus,.woocommerce-admin-page #toplevel_page_woocommerce.menu-top>a:focus{padding-bottom:1px}}#wpbody,.woocommerce-layout *{box-sizing:border-box}#wpbody{display:inline-block;width:100%;padding-top:0;margin-top:60px}#wpfooter{display:none}.woocommerce_page_wc-admin .woocommerce-filters-date__content:not(.is-mobile){z-index:2}@media(max-width:600px){#wpadminbar{position:fixed}html.wp-toolbar{padding-top:46px}}@media(max-width:782px){.jetpack-masterbar #wpadminbar #wp-admin-bar-menu-toggle{margin-top:-10px}.jetpack-masterbar #wpwrap .woocommerce-layout__header-heading{padding-right:60px}.jetpack-masterbar.wp-admin .wrap h1,.jetpack-masterbar.wp-admin .wrap h2{padding-right:0}}.woocommerce-admin-page .wp-has-current-submenu:after{left:0;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:8px solid transparent;border-left-color:#f1f1f1;top:0;margin-top:10px}@media(max-width:960px){.woocommerce-admin-page .wp-has-current-submenu:after{border-width:4px;margin-top:14px}}:root{--large-gap:40px;--main-gap:24px}@media(max-width:960px){:root{--large-gap:24px}}@media(max-width:782px){:root{--large-gap:16px;--main-gap:16px}}@keyframes loading-fade{0%{opacity:.7}50%{opacity:1}to{opacity:.7}}.woocommerce-layout select:hover{color:#1a1a1a}.woocommerce-layout .components-base-control select.components-select-control__input{max-width:100%;line-height:normal}.woocommerce-layout .components-panel__body>.components-panel__body-title:hover,.woocommerce-layout .woocommerce-experimental-list__item:hover,.woocommerce-layout .woocommerce-inbox-message:hover{background:#f6f7f7}.woocommerce-layout__jitm .jitm-card{margin:3rem 1.25rem 1.25rem}.woocommerce-layout__jitm-hide{display:none}body.woocommerce-admin-page .components-button.is-primary:not(:disabled):not([aria-disabled=true]):hover{color:#fff}body.woocommerce-admin-page .components-snackbar .components-button.is-tertiary{color:#fff}body.woocommerce-admin-page .components-snackbar .components-button.is-tertiary:not(:disabled):not([aria-disabled=true]):hover{color:#fff}.woocommerce-embed-page #wpbody .woocommerce-layout,.woocommerce-embed-page .woocommerce-layout__notice-list-hide+.wrap{padding-top:10px}.woocommerce-embed-page #wpbody-content,.woocommerce-embed-page #wpcontent{overflow-x:initial!important}.woocommerce-embed-page #wpbody-content{padding-top:0}.woocommerce-embed-page #wpbody-content .notice{margin-top:15px}.woocommerce-embed-page .wrap{padding:0 20px}@media(max-width:782px){.woocommerce-embed-page .wrap p.search-box{width:calc(100% - 40px)}}.woocommerce-embed-page .wrap .wrap{padding:0}.woocommerce-embed-page #screen-meta{border-left:0;margin:0}.woocommerce-embed-page #screen-meta-links{position:relative}.woocommerce-embed-page .notice{padding:1px 12px}.woocommerce-embed-page .woocommerce-layout__header.is-scrolled{box-shadow:0 8px 16px 0 rgba(85,93,102,.3)}.woocommerce-embed-page .woocommerce-layout__header .woocommerce-layout__header-heading{margin-top:0;margin-bottom:0}.woocommerce-embed-page #screen-meta-links.is-hidden-by-notices,.woocommerce-embed-page #screen-meta.is-hidden-by-notices{display:none!important}.woocommerce-embed-page .woocommerce-layout__primary{margin:0}@media(max-width:782px){.woocommerce-embed-page .woocommerce-layout__primary{padding-top:10px}}@keyframes isLoaded{0%{opacity:0}to{opacity:1}}.woocommerce-embed-page .woocommerce-layout__activity-panel-tabs{animation:isLoaded;animation-duration:2s}.woocommerce-embed-page .woocommerce-layout__notice-list-show{margin-top:10px;margin-bottom:16px}@media(max-width:600px){.woocommerce-embed-page .woocommerce-layout__notice-list-show{margin-top:80px;margin-bottom:-16px}}@media(min-width:601px)and (max-width:782px){.woocommerce-embed-page .woocommerce-layout__notice-list-show{margin-top:32px}}.woocommerce-embed-page .woocommerce-activity-card__actions a.components-button:not(.is-primary){color:#2e4453}.woocommerce-layout{margin:0;padding:0}.woocommerce-layout__loading{position:absolute;top:0;right:0;width:100%;height:100%}.woocommerce-layout__loading,.woocommerce-layout__no-match{display:flex;align-items:center;justify-content:center}.woocommerce-layout__no-match .components-card{max-width:680px;width:100%}.woocommerce-layout__primary{margin:var(--large-gap) var(--large-gap) 128px 0}@media(max-width:782px){.woocommerce-layout__primary{margin-top:20px}}.woocommerce-layout .woocommerce-layout__main{padding-left:40px;padding-left:var(--large-gap);max-width:100%}.woocommerce-admin-page .update-nag{display:none}.woocommerce-admin-page #wpbody.no-header{display:block;margin-top:0}.woocommerce-admin-page #wpbody.no-header .woocommerce-layout__primary{margin-top:0}.woocommerce-admin-is-loading #adminmenumain,.woocommerce-admin-is-loading #wpadminbar,.woocommerce-admin-is-loading #wpbody-content,.woocommerce-admin-is-loading #wpcontent,.woocommerce-admin-is-loading #wpfooter,.woocommerce-admin-is-loading .components-modal__screen-overlay,.woocommerce-admin-is-loading .error,.woocommerce-admin-is-loading .notice,.woocommerce-admin-is-loading .update-nag,.woocommerce-admin-is-loading .updated,.woocommerce-admin-is-loading .woocommerce-layout__header,.woocommerce-admin-is-loading .woocommerce-message,.woocommerce-admin-is-loading .woocommerce-store-alerts{display:none}.woocommerce-admin-full-screen{background:#f6f7f7;color:#50575e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}.woocommerce-admin-full-screen #wpwrap{top:0}.woocommerce-admin-full-screen #wpbody-content{min-height:100vh!important}.woocommerce-admin-full-screen #adminmenumain,.woocommerce-admin-full-screen #wpcontent>*,.woocommerce-admin-full-screen .error,.woocommerce-admin-full-screen .notice,.woocommerce-admin-full-screen .update-nag,.woocommerce-admin-full-screen .updated,.woocommerce-admin-full-screen .woocommerce-layout__header,.woocommerce-admin-full-screen .woocommerce-message,.woocommerce-admin-full-screen .woocommerce-store-alerts{display:none}.woocommerce-admin-full-screen #wpcontent{margin-right:0!important}.woocommerce-admin-full-screen #wpcontent>#wpbody{display:block;margin-top:0!important}.woocommerce-admin-full-screen.has-woocommerce-navigation #wpbody{padding-right:0}.is-wp-toolbar-disabled #wpadminbar{display:none!important}.wp-toolbar .is-wp-toolbar-disabled{margin-top:-32px}@media(max-width:600px){.wp-toolbar .is-wp-toolbar-disabled{margin-top:-46px}}.woocommerce-admin-page .components-modal__frame .components-button.is-button,.woocommerce-profile-wizard__body .components-button.is-button,.woocommerce-task-dashboard__container .components-button.is-button{height:48px;padding-right:25px;padding-left:25px;text-align:center;font-size:14px;line-height:36px;font-weight:500;align-items:center}.woocommerce-admin-page .components-modal__frame .components-button.is-button:disabled,.woocommerce-profile-wizard__body .components-button.is-button:disabled,.woocommerce-task-dashboard__container .components-button.is-button:disabled{cursor:not-allowed}.components-modal__header .components-button svg+span{display:none}.components-modal__frame.woocommerce-usage-modal{width:600px;max-width:100%}.components-modal__frame.woocommerce-usage-modal .components-modal__header{margin-bottom:0}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__wrapper{flex-grow:1;display:flex;flex-direction:column}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__wrapper a{color:#50575e}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__wrapper button.is-primary{align-self:flex-end}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__actions{display:flex;justify-content:flex-end;margin-top:16px}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__actions button{margin-right:16px}.woocommerce-payments__usage-modal .components-modal__header{height:auto;padding:24px 24px 0}.woocommerce-payments__usage-modal .components-modal__header .components-modal__header-heading{font-size:24px;line-height:32px;margin:0 0 24px}.woocommerce-payments__usage-modal .woocommerce-payments__usage-modal-message{padding:16px 0;font-size:16px;line-height:24px}.woocommerce-payments__usage-modal .woocommerce-payments__usage-footer{display:flex;justify-content:flex-end;padding:16px 0}.woocommerce-payments__usage-modal .woocommerce-payments__usage-footer button{margin-right:16px}.components-modal__frame.woocommerce-cart-modal{width:600px;max-width:100%}.components-modal__frame.woocommerce-cart-modal .components-modal__header{border-bottom:0;margin-bottom:16px;margin-top:16px}.components-modal__frame.woocommerce-cart-modal .components-modal__header button{display:none}.components-modal__frame.woocommerce-cart-modal .components-modal__header-heading{font-style:normal;font-weight:400;font-size:24px;line-height:32px}.components-modal__frame.woocommerce-cart-modal .woocommerce-list{margin-top:24px}.components-modal__frame.woocommerce-cart-modal .woocommerce-list .woocommerce-list__item:first-child{border-top:1px solid #dcdcde}.components-modal__frame.woocommerce-cart-modal .woocommerce-list__item{border-bottom:1px solid #dcdcde}.components-modal__frame.woocommerce-cart-modal .woocommerce-cart-modal__help-text{font-size:16px;line-height:24px}.components-modal__frame.woocommerce-cart-modal .woocommerce-cart-modal__actions{text-align:left}.components-modal__frame.woocommerce-cart-modal .woocommerce-cart-modal__actions button.is-link{margin-left:16px;text-decoration:none;font-weight:600;font-size:14px}.components-modal__frame.woocommerce-cart-modal .woocommerce-cart-modal__actions button.is-primary{align-self:flex-end}.woocommerce-layout__header{background:#fff;box-sizing:border-box;padding:0;position:fixed;width:calc(100% - 160px);top:32px;z-index:1001}.woocommerce-layout__header.is-scrolled{box-shadow:0 8px 8px 0 rgba(85,93,102,.3)}.woocommerce-layout__header .woocommerce-layout__header-wrapper{display:flex;align-items:center;min-height:60px}@media(max-width:782px){.woocommerce-layout__header{flex-flow:row wrap;top:46px;width:100%}}@media(min-width:783px)and (max-width:960px){.woocommerce-layout__header{width:calc(100% - 36px)}}.woocommerce-layout__header .woocommerce-layout__header-breadcrumbs-wrapper{display:flex;justify-content:space-between;flex-direction:row}.woocommerce-layout__header .woocommerce-layout__header-heading{display:flex;align-items:center;padding:0 40px 0 0;padding:0 var(--large-gap) 0 0;flex:1 auto;height:60px;background:#fff;font-weight:600;font-size:14px}.folded .woocommerce-layout__header{width:calc(100% - 36px)}@media(max-width:782px){.folded .woocommerce-layout__header{width:100%}}.is-wp-toolbar-disabled .woocommerce-layout__header{top:0}.has-woocommerce-navigation .woocommerce-layout__header{right:0;width:100%}.woocommerce-admin-page #contextual-help-link-wrap,.woocommerce-admin-page #screen-options-link-wrap{margin-top:-1px}.wp-responsive-open .woocommerce-layout__header{margin-right:2px}.woocommerce-task-payment{display:flex;flex-direction:row;align-items:center;position:relative;overflow:hidden}.woocommerce-task-payment .components-card__media{width:85px;flex-shrink:0;align-self:flex-start}.woocommerce-task-payment .components-card__media .is-placeholder,.woocommerce-task-payment .components-card__media img,.woocommerce-task-payment .components-card__media svg{margin:auto;max-width:36px;display:block}.woocommerce-task-payment .components-card__media .is-placeholder{height:36px}.woocommerce-task-payment .woocommerce-task-payment__footer .is-placeholder{width:70px;height:36px}.woocommerce-task-payment>.components-form-toggle{min-width:52px}.woocommerce-task-payment .woocommerce-task-payment__title{display:flex;align-items:center;font-size:16px;font-weight:500;color:#2c3338;margin-top:0;margin-bottom:8px}.woocommerce-task-payment .woocommerce-task-payment__title .woocommerce-pill{margin-right:8px}.woocommerce-task-payment .woocommerce-task-payment__title .woocommerce-pill.pill-green{color:#008a20;border-color:#008a20}.woocommerce-task-payment .woocommerce-task-payment__content{font-size:14px;color:#50575e;margin:0 0 0 36px}.woocommerce-task-payment .woocommerce-task-payment__content .text-style-strong{font-weight:700}.woocommerce-task-payment .woocommerce-task-payment__content p{font-size:12px}.woocommerce-task-payment .woocommerce-task-payment__transaction-processors_images{padding-top:16px;display:flex;flex-direction:row;flex-wrap:wrap;gap:8px}.woocommerce-task-payment .woocommerce-task-payment__transaction-processors_images img{height:24px}.woocommerce-task-payment .woocommerce-task-payment__description{flex:1}@media(max-width:600px){.woocommerce-task-payment{flex-wrap:wrap}.woocommerce-task-payment .woocommerce-task-payment__content{margin:0}.woocommerce-task-payment .components-card__media{order:1;flex-basis:50%}.woocommerce-task-payment .components-card__media>img,.woocommerce-task-payment .components-card__media>svg{margin:0 24px 0 0}.woocommerce-task-payment .woocommerce-task-payment__description{order:3;padding:24px 24px 0 0}.woocommerce-task-payment .woocommerce-task-payment__footer{flex-basis:50%;align-self:flex-start;order:2;text-align:left}}.woocommerce-payment-gateway-suggestions-list-placeholder .is-placeholder{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent;display:inline-block;max-width:240px;width:80%}.woocommerce-payment-gateway-suggestions-list-placeholder .is-placeholder:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-payment-gateway-suggestions-list-placeholder .is-placeholder{animation:none}}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-label{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent;display:inline-block;width:60%}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-label:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-label{animation:none}}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-icon{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-icon:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-icon{animation:none}}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step:first-child .woocommerce-stepper__step-label{width:30%}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-number{display:none}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner{min-width:100%;margin-bottom:24px}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__body{padding:30px 24px 0 0;justify-content:space-between}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__text_container{width:305px;margin-right:0}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__footer{flex-direction:column;align-items:flex-start;padding:20px 24px 30px 38.2px}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__footer_icon_container{margin-top:12px;margin-right:-5px}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__footer_icon_container>svg{width:38px;height:24px;margin-left:8px}.woocommerce-wcpay-suggestion .woocommerce-wcpay-benefits{margin-bottom:24px}.woocommerce-task-payments .components-card+.components-card{margin-top:24px}.woocommerce-task-payments .woocommerce-task-payment__setup_required{display:flex;align-items:center;font-size:14px;margin-right:12px;font-weight:400;gap:3px}.woocommerce-task-payments .woocommerce-task-payment__setup_required>svg{fill:#efb854}.woocommerce-task-payments .components-card__header{font-size:20px;font-weight:400;line-height:28px;margin:0;display:flex;flex-direction:column;align-items:flex-start}.woocommerce-task-payments .woocommerce-task-payment-header__description{margin:0;color:#757575;font-weight:400;font-size:14px}.woocommerce-task-payments .components-card__footer a.components-button .gridicon{margin-right:4px}.woocommerce-task-payments .woocommerce-task-payment__recommended-pill{border:1px solid #dcdcde;border-radius:28px;display:inline-block;font-size:13px;margin-right:12px;padding:1px 10px}.woocommerce-task-payments .woocommerce-task-payment__recommended-pill span{max-width:70px}.woocommerce-task-payments .components-card__divider:last-child{display:none}.woocommerce-task-payments .woocommerce-task-payment-wcpay{margin-bottom:0}.woocommerce-task-payment-method>h3{margin:0;color:#1d2327}.woocommerce-task-payment-method p{font-size:14px;color:#646970;font-weight:400;margin-top:16px;margin-bottom:16px}.woocommerce-task-payment-method__fields{display:grid;grid-template-columns:1fr 1fr;grid-gap:0 16px;margin-bottom:8px}.woocommerce-task-payment-method__fields .components-base-control{margin-bottom:0}.woocommerce-shipping-rate{display:flex;padding-top:12px;padding-bottom:12px}.woocommerce-shipping-rate .woocommerce-shipping-rate__main{width:100%}.woocommerce-shipping-rate .woocommerce-shipping-rate__icon{padding-top:16px;margin-left:24px}.woocommerce-shipping-rate .woocommerce-shipping-rate__name{align-items:center;display:flex;padding-top:16px;font-size:16px;line-height:22px;color:#1d2327;margin-bottom:12px;border-top:1px solid #dcdcde}.woocommerce-shipping-rate .woocommerce-shipping-rate__name .components-form-toggle{margin-right:auto;height:18px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .components-base-control{margin-bottom:0}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .components-base-control__label{display:block;position:relative;top:-8px;width:100%;font-size:12px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .text-control-with-affixes__prefix,.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .text-control-with-affixes__suffix{font-size:16px;line-height:24px;color:#646970;border:0;padding:0;align-items:center;display:flex;top:-11px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .components-text-control__input{position:relative;top:-11px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .text-control-with-affixes__prefix{margin-left:4px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .text-control-with-affixes__suffix{margin-right:4px}.woocommerce-task-shipping-recommendation__plugins-install{padding:24px 20px;border:1px solid #ddd;border-radius:3px;justify-content:space-around;margin-bottom:24px}.woocommerce-task-shipping-recommendation__plugins-install.dual{display:flex;flex-direction:column;justify-content:flex-start;width:285px}.woocommerce-task-shipping-recommendation__plugins-install.dual p{margin-top:0;margin-bottom:15px;color:#757575}.woocommerce-task-shipping-recommendation__plugins-install.dual .plugins-install__plugin-banner-image{display:flex;margin-bottom:24px}.woocommerce-task-shipping-recommendation__plugins-install.dual .plugins-install__plugin-banner-image img{width:120px;height:28px}.woocommerce-task-shipping-recommendation__plugins-install.single{display:flex}.woocommerce-task-shipping-recommendation__plugins-install.single .plugins-install__list{max-width:360px}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__plugin-banner-image{display:flex;width:150px}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__plugin-banner-image img{width:100%}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__list{display:flex;flex-direction:column;justify-content:space-around;gap:10px}.woocommerce-task-shipping-recommendation__plugins-install .woocommerce-task-shipping-recommendations_plugins-buttons{display:flex;justify-content:space-between;margin-top:24px;flex-grow:1;align-items:flex-end}.woocommerce-task-shipping-recommendation__plugins-install .woocommerce-task-shipping-recommendations_plugins-buttons button{min-width:40%;padding-inline:8px;margin-inline:4px}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__list-item{display:flex;align-items:center}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__list-icon{margin-left:12px}.woocommerce-task-shipping-recommendation_plugins-install-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:10px}.woocommerce-task-shipping-recommendations_skip-button.dual{margin-inline:calc(50% - 34px)}.woocommerce-task-marketing .components-card__header{flex-direction:column;align-items:flex-start;display:flex!important}.woocommerce-task-marketing .components-card__header h2{align-self:start!important;color:#1e1e1e;font-size:20px;margin-bottom:0}.woocommerce-task-marketing .components-card__header span{margin-right:0;margin-top:8px;color:#757575}.woocommerce-plugin-list__plugin{display:flex;padding:24px;border-top:1px solid #e0e0e0}.woocommerce-plugin-list__plugin:first-child{border-top:0}.woocommerce-plugin-list__plugin h4{margin-bottom:12px;font-weight:600;color:#1e1e1e}.woocommerce-plugin-list__plugin p{color:#757575;font-weight:400}.woocommerce-plugin-list__plugin-logo{margin-left:45px;display:flex;align-items:center}.woocommerce-plugin-list__plugin-logo img{width:50px}.woocommerce-plugin-list__plugin-text{max-width:370px;margin-left:16px}.woocommerce-plugin-list__plugin-text .woocommerce-pill{color:#646970;margin-right:12px}.woocommerce-plugin-list__plugin-action{display:flex;align-items:center;margin-right:auto}.woocommerce-plugin-list__title{padding:24px 30px 0;position:relative}.woocommerce-plugin-list__title h3{font-weight:500;color:#000;text-transform:uppercase}.woocommerce-plugin-list__plugin{border-top:none;border-bottom:1px solid #e0e0e0}.woocommerce-tax-partner-card{border:1px solid #ddd;border-radius:3px;margin:0 8px 16px;padding:20px;display:flex;flex-direction:column}.woocommerce-tax-partner-card a{text-decoration:none}.woocommerce-tax-partner-card__logo{margin-bottom:8px}.woocommerce-tax-partner-card__logo img{max-height:35px}.woocommerce-tax-partner-card__description{color:#757575}.woocommerce-tax-partner-card__benefits{color:#1e1e1e;list-style:none}.woocommerce-tax-partner-card__benefits li{margin-bottom:8px;display:flex}.woocommerce-tax-partner-card__benefits li svg{margin-left:10px}.woocommerce-tax-partner-card__action{margin-top:auto}.woocommerce-tax-partner-card__terms{color:#949494;font-size:9px;margin-bottom:8px}.woocommerce-tax-partners__partners{display:grid;grid-template-columns:1fr 1fr}.woocommerce-tax-partners__partners.woocommerce-tax-partners__partners-count-1{grid-template-columns:1fr}@media(max-width:782px){.woocommerce-tax-partners__partners{grid-template-columns:1fr}}.woocommerce-tax-partners__partners-count-1 .woocommerce-tax-partners__partners{grid-template-columns:1fr;justify-items:center}.woocommerce-tax-partners .components-card__body.is-size-medium{padding:36px}.woocommerce-tax-partners .components-card__header{line-height:28px;font-size:20px}.woocommerce-tax-partners__other-actions{text-align:center;list-style:none;display:flex;align-items:center;justify-content:center;margin:0}@media(max-width:782px){.woocommerce-tax-partners__other-actions{flex-direction:column}}.woocommerce-tax-partners__other-actions li{margin-top:16px;margin-left:4px}.woocommerce-tax-partners__other-actions li button.is-tertiary{padding:0;height:auto}.woocommerce-tax-partners__other-actions li:after{content:"•";color:#bbb;margin-right:4px}@media(max-width:782px){.woocommerce-tax-partners__other-actions li:after{content:""}}.woocommerce-tax-partners__other-actions li:last-child{margin-left:0}.woocommerce-tax-partners__other-actions li:last-child:after{content:""}.woocommerce-task-tax__automated-tax-control{display:flex;align-items:center;margin-top:16px}.woocommerce-task-tax__automated-tax-control i{margin-right:16px;margin-left:24px}.woocommerce-task-tax__automated-tax-control .woocommerce-task-tax__automated-tax-control-inner{border-top:1px solid #dcdcde;display:flex;align-items:center;flex:1;font-size:16px;padding-top:16px;padding-bottom:16px}.woocommerce-task-tax__automated-tax-control .components-form-toggle{margin-right:auto}.woocommerce-task-tax__success{display:flex;flex-direction:column;align-items:center;padding:40px;text-align:center}.woocommerce-task-tax__success .woocommerce-task-tax__success-icon{font-size:48px;height:48px;align-items:center;display:flex}.woocommerce-task-tax__success #woocommerce-task-tax__success-message{font-size:32px;font-weight:400}.woocommerce-task-tax__success p{margin-top:0;font-size:16px}.woocommerce-task-dashboard__container .woocommerce-task-card{max-width:680px;margin-right:auto;margin-left:auto;margin-bottom:24px}.woocommerce-task-dashboard__container .woocommerce-task-card .components-card__header.is-size-large{padding-bottom:12px}.woocommerce-task-dashboard__container .woocommerce-task-card .components-card__header.is-size-large .woocommerce-card__menu{margin-top:8px}.woocommerce-task-dashboard__container .woocommerce-task-card .wooocommerce-task-card__header{display:flex}.woocommerce-task-dashboard__container .woocommerce-task-card .wooocommerce-task-card__header .components-text+.woocommerce-badge{margin-right:16px}.woocommerce-task-dashboard__container .woocommerce-task-card .woocommerce-list__item-text .woocommerce-pill{padding:1px 8px;margin-right:8px}.woocommerce-task-dashboard__container .woocommerce-task-card .components-popover__content{min-width:unset}.woocommerce-task-dashboard__container .woocommerce-task-payments{width:680px;margin:auto;max-width:100%}.woocommerce-task-list__item-expandable-content,.woocommerce-task__additional-info,.woocommerce-task__estimated-time{color:#757575;font-weight:400;font-size:12px}.woocommerce-task-list__item-expandable-content{font-size:13px}.components-modal__screen-overlay{background:rgba(43,45,47,.4)}.components-modal__frame .components-modal__header{margin-bottom:0}.components-modal__frame .woocommerce-task-payments__stripe-error-wrapper{align-items:flex-end;flex-grow:1;display:flex;flex-direction:column}.woocommerce-task-dashboard__container .woocommerce-stepper button.components-button.is-primary{margin:0 0 0 8px}.woocommerce-task-dashboard__container button.components-button.is-link{margin:0;height:auto;color:#50575e;font-weight:400}.woocommerce-task-card__prompt{width:100%;min-width:100%;margin-bottom:24px;margin-top:-4px;cursor:default}.woocommerce-task-card__prompt .components-snackbar__content{display:block;align-items:unset;justify-content:unset}.woocommerce-task-card__prompt .components-snackbar__content span{margin-right:-24px}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions button.is-link,.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions button.is-link:active,.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions button.is-link:focus{color:#fff;margin-right:24px;background:transparent}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions button.is-link:hover{color:#fff}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-pointer{border-bottom:10px solid #1e1e1e;border-right:10px solid transparent;border-left:10px solid transparent;position:relative;width:0;height:0;display:inline-block;top:-30px}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-content{display:flex;align-items:baseline;justify-content:space-between;max-height:10px;margin-right:24px;position:relative;top:-40px}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions{margin-left:-16px}.woocommerce-task-card__prompt:hover .woocommerce-task-card__prompt-pointer{border-bottom-color:#1e1e1e}.woocommerce-task-dashboard__container .muriel-component{margin-top:16px;margin-bottom:16px}.woocommerce-task-dashboard__container .components-base-control.has-error{margin-bottom:32px!important;border-color:#d63638}@media(max-width:782px){.woocommerce-task-dashboard__container .components-base-control.has-error{margin-bottom:44px!important}}.woocommerce-task-dashboard__container .components-base-control.has-error .components-base-control__help{top:100%;right:12px;position:absolute;margin-top:4px;font-size:12px;font-style:normal;color:#d63638}.woocommerce-task-dashboard__container .components-form-toggle{display:inline-block}.woocommerce-task-dashboard__container .components-form-toggle label{font-size:14px}.woocommerce-task-dashboard__container .components-form-toggle .components-base-control{display:inline-block}.woocommerce-task-dashboard__container .components-form-toggle .components-base-control__field{margin-bottom:0}.woocommerce-task-dashboard__container .woocommerce-task__caption{color:#757575;margin-top:16px}.woocommerce-task-dashboard__container .woocommerce-task__caption.is-tos{margin-bottom:16px}.woocommerce-task-list__setup .woocommerce-experimental-list .woocommerce-experimental-list__item.complete{text-decoration:line-through;color:var(--wp-admin-theme-color)}.woocommerce-task-list__setup .woocommerce-experimental-list .woocommerce-experimental-list__item.complete .woocommerce-task-list__item-title{color:var(--wp-admin-theme-color)}.woocommerce-task-progress-header{position:relative;min-height:28px}.woocommerce-task-progress-header h1{font-size:24px}.woocommerce-task-progress-header p{color:#757575;font-size:16px;line-height:24px;margin-top:8px}.woocommerce-task-progress-header .woocommerce-task-progress-header__progress-bar{appearance:none;border:1px solid #ddd;border-radius:16px;height:12px;width:100%;margin-bottom:0;background-color:#fff}.woocommerce-task-progress-header .woocommerce-task-progress-header__progress-bar::-moz-progress-bar{background-color:var(--wp-admin-theme-color);border-radius:16px}.woocommerce-task-progress-header .woocommerce-task-progress-header__progress-bar::-webkit-progress-bar{background-color:#fff;border-radius:16px}.woocommerce-task-progress-header .woocommerce-task-progress-header__progress-bar::-webkit-progress-value{background-color:var(--wp-admin-theme-color);border-bottom-right-radius:16px;border-top-right-radius:16px}.woocommerce-task-progress-header .woocommerce-card__menu{position:absolute;left:0;top:-7px}.woocommerce-setup-panel .woocommerce-task-progress-header{padding:16px}.woocommerce-setup-panel .woocommerce-task-progress-header h1{font-size:16px;font-weight:600}.woocommerce-setup-panel .woocommerce-task-progress-header p{font-size:16px}.woocommerce-setup-panel .woocommerce-task-progress-header .woocommerce-card__menu{top:17px}@media(max-width:782px){.woocommerce-task-progress-header{padding-right:var(--large-gap);padding-left:var(--large-gap)}}h1.woocommerce-task-progress-header__title{padding-top:4px}@media(max-width:782px){h1.woocommerce-task-progress-header__title{padding-right:var(--large-gap);padding-left:var(--large-gap)}}.wooocommerce-task-card__header .wooocommerce-task-card__header-subtitle{color:#757575;margin-bottom:24px}.wooocommerce-task-card__finished-header-image{max-width:75%}.customer-feedback-simple__container{height:64px}.woocommerce-task-card__header-menu{position:absolute;left:0;top:0}.wooocommerce-task-card__header-ces-feedback{height:64px;display:flex;justify-content:center;align-items:center}.woocommerce-task-header__contents-container.woocommerce-task-header__customize-store img.svg-background{padding-left:16px;padding-top:9px}.woocommerce-homescreen .woocommerce-task-dashboard__container:empty{margin-bottom:0}.woocommerce-task-dashboard__container .woocommerce-homescreen-card{max-width:none;width:100%}.woocommerce-task-dashboard__container .wooocommerce-task-card__header-container{display:flex;position:relative;border-bottom:1px solid #dcdcde}.woocommerce-task-dashboard__container .wooocommerce-task-card__header{width:100%;flex:1}.woocommerce-task-dashboard__container .woocommerce-ellipsis-menu{position:absolute;top:16px;left:24px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .components-card__header{background:#fff;height:130px;display:block}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .components-card__header .is-placeholder{margin:20px;width:100%;height:90px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .wooocommerce-task-card__header{align-self:inherit}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-task-list__item-before .is-placeholder{height:36px;width:36px;border-radius:50%}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-task-list__item-text .is-placeholder{width:80%}.woocommerce-task-dashboard__container .woocommerce-task-card.completed,.woocommerce-task-dashboard__container .woocommerce-task-card.completed .components-card__header{display:block}.woocommerce-task-dashboard__container .woocommerce-task-card.completed h2{margin-top:24px;margin-bottom:12px}.woocommerce-task-dashboard__container .woocommerce-task-card.completed .wooocommerce-task-card__header{display:block;text-align:center}.woocommerce-task-dashboard__container .woocommerce-task-card.completed button.is-secondary{margin-left:12px}.woocommerce-task-dashboard__container.setup-task-list{max-width:1032px;display:flex;flex-direction:row;margin:0 auto;justify-content:space-between}.woocommerce-task-dashboard__container.setup-task-list ul li.complete .woocommerce-task-list__item-title{font-weight:600;color:#949494}.woocommerce-task-dashboard__container.setup-task-list ul li{display:block;width:100%;border-left:1px solid #e0e0e0;border-top:none;padding:16px 24px}.woocommerce-task-dashboard__container.setup-task-list ul li:last-child{border-left:none}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active{box-shadow:inset 0 -4px 0 0 var(--wp-admin-theme-color)}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active .woocommerce-task-list__item-badge{background-color:#fff;position:relative;z-index:1}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active:after{background-color:var(--wp-admin-theme-color);opacity:.1;content:"";top:0;right:0;position:absolute;width:100%;height:100%;pointer-events:none}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete) .woocommerce-task__icon{border:1px solid var(--wp-admin-theme-color);background:transparent}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item.complete:not(.complete) .woocommerce-task__icon{border:none}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item-before{display:block;padding:0}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item-text{margin-top:10px}.woocommerce-task-dashboard__container.setup-task-list .numbered-circle,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-1 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-2 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-3 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-4 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-5 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-6 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-7 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-8 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-9 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-10 .woocommerce-task__icon:after{justify-content:center;display:flex;align-items:center;height:100%;width:100%}.woocommerce-task-dashboard__container.setup-task-list ul{display:block}.woocommerce-task-dashboard__container.setup-task-list ul li{display:grid;grid-template-columns:48px auto 48px;border-left:none;border-bottom:1px solid #e0e0e0}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active{box-shadow:inset -5px 0 0 0 var(--wp-admin-theme-color);transition:box-shadow .1s linear}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item-text{display:block;padding:0;margin-top:0}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:65%}@media(max-width:600px){.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:100%}}.woocommerce-task-dashboard__container.setup-task-list .svg-background{left:6%}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-1 .woocommerce-task__icon:after{content:"1";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-2 .woocommerce-task__icon:after{content:"2";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-3 .woocommerce-task__icon:after{content:"3";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-4 .woocommerce-task__icon:after{content:"4";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-5 .woocommerce-task__icon:after{content:"5";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-6 .woocommerce-task__icon:after{content:"6";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-7 .woocommerce-task__icon:after{content:"7";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-8 .woocommerce-task__icon:after{content:"8";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-9 .woocommerce-task__icon:after{content:"9";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-10 .woocommerce-task__icon:after{content:"10";color:var(--wp-admin-theme-color);font-weight:700}@media(max-width:782px){.woocommerce-task-dashboard__container.setup-task-list ul{display:block}.woocommerce-task-dashboard__container.setup-task-list ul li{display:grid;grid-template-columns:48px auto 48px;border-left:none;border-bottom:1px solid #e0e0e0}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active{box-shadow:inset -5px 0 0 0 var(--wp-admin-theme-color);transition:box-shadow .1s linear}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item-text{display:block;padding:0;margin-top:0}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:65%}}@media(max-width:782px)and (max-width:782px){.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:380px}}@media(max-width:782px)and (max-width:600px){.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:100%}}@media(max-width:782px){.woocommerce-task-dashboard__container.setup-task-list .svg-background{left:6%}}.woocommerce-setup-panel .woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents-container{padding:16px}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents-container{padding:20px 24px;position:relative;flex:1;overflow:hidden;width:100%}.woocommerce-task-dashboard__container.setup-task-list .svg-background{position:absolute;z-index:0;left:24px;max-width:25%;max-height:150px;width:auto;height:auto}@media(max-width:600px){.woocommerce-task-dashboard__container.setup-task-list .svg-background{display:none}}@media(max-width:782px){.woocommerce-task-dashboard__container.setup-task-list .svg-background{left:.5%;width:40%}}.woocommerce-task-dashboard__container.setup-task-list .svg-background .admin-theme-color{fill:var(--wp-admin-theme-color)}.woocommerce-task-dashboard__container.setup-task-list .svg-background .admin-theme-color-darker-10{fill:var(--wp-admin-theme-color-darker-10)}.woocommerce-task-dashboard__container.setup-task-list .svg-background .admin-theme-color-darker-20{fill:var(--wp-admin-theme-color-darker-20)}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:70%;position:relative;z-index:1}@media(max-width:782px){.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:380px}}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents p,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents span{color:#757575}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents p:first-of-type{margin-top:4px}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__timer{display:flex;align-items:center;line-height:22px;margin-bottom:0}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__timer img{margin-left:6px}.woocommerce-task-dismiss-modal{width:565px;max-width:100%}.woocommerce-task-dismiss-modal .components-modal__header{border-bottom:1px solid #ddd}.woocommerce-task-dismiss-modal .woocommerce-usage-modal__message{box-sizing:border-box;border-bottom:1px solid #ddd;padding:0 32px;display:flex;flex-direction:row;justify-content:space-between;background:#fff;align-items:center;height:60px;z-index:10;position:relative;position:sticky;top:0;margin:0 -32px 24px;font-size:1.2em}.woocommerce-task-dismiss-modal .woocommerce-usage-modal__actions{display:flex;justify-content:flex-end;margin-top:16px}.woocommerce-task-dismiss-modal .woocommerce-usage-modal__actions button{margin-right:16px}.woocommerce-layout__header-back-button{cursor:pointer;margin-right:40px;margin-right:var(--large-gap);margin-left:-16px;display:flex;z-index:2}.woocommerce-layout__header-back-button:focus{box-shadow:inset 1px -1px 0 #757575,inset -1px 1px 0 #757575}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-card__body{border-top:1px solid #dcdcde}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .is-placeholder{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent;display:inline-block;height:16px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .is-placeholder:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .is-placeholder{animation:none}}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-card__title .is-placeholder{width:70%;height:28px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-list__item-before .is-placeholder{height:36px;width:36px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-list__item-text{width:100%}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-list__item-text .woocommerce-list__item-title .is-placeholder{height:22px;width:60%}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-list__item-after .is-placeholder{height:18px;width:60px}.woocommerce-task-list__item.woocommerce-list__item-enter{opacity:0;max-height:0}.woocommerce-task-list__item.woocommerce-list__item-enter-active{opacity:1;max-height:100px;transition:opacity .5s,max-height .5s}.woocommerce-task-list__item.woocommerce-list__item-exit{opacity:1;max-height:100px}.woocommerce-task-list__item.woocommerce-list__item-exit-active{opacity:0;max-height:0;transition:opacity .5s,max-height .5s}.woocommerce-layout__header-tasks-reminder-bar{height:40px;background-color:#007cba;display:flex;justify-content:space-between;align-items:center;color:#fff}.woocommerce-layout__header-tasks-reminder-bar:before{content:""}.woocommerce-layout__header-tasks-reminder-bar button{color:inherit}.woocommerce-layout__header-tasks-reminder-bar button:hover{opacity:.7;color:inherit}.woocommerce-layout__header-tasks-reminder-bar a{color:inherit}.woocommerce-layout__header-tasks-reminder-bar p{font-size:13px}.woocommerce-layout__footer{background:#fff;border-top:1px solid #e0e0e0;box-shadow:0 2px 6px 0 rgba(0,0,0,.05);box-sizing:border-box;padding:0;position:fixed;width:calc(100% - 160px);bottom:-1px;z-index:1001}.woocommerce-profile-wizard__body .woocommerce-layout__footer{width:100%}@media(min-width:783px)and (max-width:960px){.woocommerce-layout__footer{width:calc(100% - 36px)}}@media(max-width:782px){.woocommerce-layout__footer{flex-flow:row wrap;width:100%}}.folded .woocommerce-layout__footer{width:calc(100% - 36px)}.woocommerce-transient-notices{position:absolute;right:16px;bottom:100%;margin-bottom:12px;z-index:100001;width:auto}.woocommerce-profile-wizard__body .woocommerce-transient-notices{right:unset;width:100%}.woocommerce-profile-wizard__body .woocommerce-transient-notices .components-snackbar{margin-right:auto;margin-left:auto}.components-snackbar.components-snackbar-explicit-dismiss{cursor:default}.components-snackbar__content{white-space:pre-line}.components-snackbar .components-snackbar__content-with-icon{margin-right:0}.components-snackbar .components-snackbar__icon{position:static;display:inline-block;margin-left:16px}.components-snackbar .components-snackbar__dismiss-button{margin-right:32px;cursor:pointer}.woocommerce-layout__activity-panel{display:flex;flex-direction:row;align-items:center;height:60px}.woocommerce-layout__activity-panel-tabs{width:100%;display:flex;height:60px;justify-content:flex-end}.woocommerce-layout__activity-panel-tabs .dashicon,.woocommerce-layout__activity-panel-tabs .gridicon{width:100%}.woocommerce-layout__activity-panel-tabs svg{width:24px;height:24px}.woocommerce-layout__activity-panel-tabs svg.woocommerce-layout__activity-panel-tab-icon{fill:none}.woocommerce-layout__activity-panel-tabs svg.woocommerce-layout__activity-panel-tab-icon path,.woocommerce-layout__activity-panel-tabs svg.woocommerce-layout__activity-panel-tab-icon rect{stroke:currentColor}.woocommerce-layout__activity-panel-tabs svg .setup-progress-slice{stroke:none}.woocommerce-layout__activity-panel-tabs svg .setup-progress-ring{stroke-width:2px}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__homescreen-display-options svg.woocommerce-layout__activity-panel-tab-icon{height:14px}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__homescreen-extension-tasklist-toggle{min-width:205px}.woocommerce-layout__activity-panel-tabs .components-icon-button{display:initial;text-indent:0;border-radius:0}.woocommerce-layout__activity-panel-tabs .components-icon-button.has-text svg{margin:0}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab{display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative;border:none;outline:none;cursor:pointer;background-color:#fff;width:100%;height:60px;color:#757575;white-space:nowrap}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:before{background-color:var(--wp-admin-theme-color);bottom:0;content:"";height:0;opacity:0;transition-property:height,opacity;transition-duration:.3s;transition-timing-function:ease-in-out;right:0;position:absolute;left:0}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.is-active,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.is-opened{color:#1e1e1e;box-shadow:none}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.is-active:before,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.is-opened:before{height:3px;opacity:1}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.woocommerce-layout__activity-panel-tab-wordpress-notices:after{content:" ";position:absolute;padding:1px;background:#d94f4f;border:2px solid #fff;width:4px;height:4px;display:inline-block;border-radius:50%;top:8px;right:50%}@media(min-width:783px)and (max-width:960px){.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.woocommerce-layout__activity-panel-tab-wordpress-notices:after{left:18px;right:auto;margin-right:0}}@media(min-width:961px){.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.woocommerce-layout__activity-panel-tab-wordpress-notices:after{left:28px;right:auto;margin-right:0}}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.components-button:not(:disabled):not([aria-disabled=true]):hover,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:hover{background-color:#f0f0f0;box-shadow:none}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.components-button:not(:disabled):not([aria-disabled=true]):hover.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.components-button:not(:disabled):not([aria-disabled=true]):hover.woocommerce-layout__activity-panel-tab-wordpress-notices:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:hover.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:hover.woocommerce-layout__activity-panel-tab-wordpress-notices:after{border-color:#e0e0e0}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.components-button:not(:disabled):not([aria-disabled=true]):focus,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:focus{box-shadow:inset 1px -1px 0 #757575,inset -1px 1px 0 #757575}@media(max-width:782px){.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.display-options{display:none}}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-popover{margin-top:0;z-index:1001}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-popover .components-menu-group{padding:12px}.woocommerce-layout__activity-panel-toggle-bubble.has-unread:after{content:" ";position:absolute;padding:1px;background:#ca4a1f;border:2px solid #fff;width:4px;height:4px;display:inline-block;border-radius:50%;top:6px;left:4px}@keyframes tabSwitch{0%,to{transform:translateX(0)}50%{transform:translateX(-100px)}}.woocommerce-layout__activity-panel-wrapper{height:calc(100vh - 106px);background:#f0f0f0;width:430px;transform:translateX(-100%);transition-property:transform box-shadow;transition-duration:.3s;transition-timing-function:ease-in-out;position:absolute;left:0;top:100%;z-index:1000;overflow-x:hidden;overflow-y:auto}@media(max-width:782px){.woocommerce-layout__activity-panel-wrapper{width:100%}}@media screen and (prefers-reduced-motion:reduce){.woocommerce-layout__activity-panel-wrapper{transition-duration:1ms}}@media(min-width:783px){.woocommerce-layout__activity-panel-wrapper{height:calc(100vh - 92px)}}.has-woocommerce-navigation .woocommerce-layout__activity-panel-wrapper{height:calc(100vh - 60px);top:60px}.woocommerce-layout__activity-panel-wrapper.is-open{transform:none;box-shadow:0 12px 12px 0 rgba(85,93,102,.3)}.woocommerce-layout__activity-panel-wrapper.is-switching{animation:tabSwitch;animation-duration:.3s}@media screen and (prefers-reduced-motion:reduce){.woocommerce-layout__activity-panel-wrapper.is-switching{animation:none}}.woocommerce-layout__activity-panel-wrapper .woocommerce-empty-content{padding-right:24px;padding-left:24px}.woocommerce-layout__activity-panel-avatar-flag-overlay{position:relative;top:-12px}.woocommerce-layout__activity-panel-avatar-flag-overlay .woocommerce-flag{position:relative;top:16px;border:2px solid #fff}.woocommerce-layout__notice-list-hide{display:none}.highlight-tooltip__container{position:absolute;width:0;height:0}.highlight-tooltip__container.highlight-tooltip__show{top:0;right:0;width:100%;height:100%}.highlight-tooltip__portal{width:100%;height:100%;position:relative}.highlight-tooltip__portal .highlight-tooltip__overlay{position:fixed;top:0;left:0;bottom:0;right:0;background-color:rgba(0,0,0,.35);z-index:100000;animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards}@media(prefers-reduced-motion:reduce){.highlight-tooltip__portal .highlight-tooltip__overlay{animation-duration:1ms}}.highlight-tooltip__popover .components-card{min-width:360px}.highlight-tooltip__popover .components-card__header{font-size:16px;font-size:1rem;font-weight:600;box-sizing:border-box}.highlight-tooltip__popover .components-card__footer{justify-content:flex-end;box-sizing:border-box}@media(max-width:782px){.woocommerce-layout__show-app-banner .woocommerce-layout__header-wrapper{padding-top:56px}}.woocommerce-mobile-app-banner{background-color:#3c2861;position:absolute;top:0;right:0;width:100%;display:flex;height:56px;align-items:center;padding:0 4px 0 6px}@media(min-width:401px){.woocommerce-mobile-app-banner{padding:0 10px 0 13px}}@media(min-width:783px){.woocommerce-mobile-app-banner{display:none}}.woocommerce-mobile-app-banner .gridicon{fill:#fff;margin-left:10px}.woocommerce-mobile-app-banner .components-button.is-secondary{margin-right:auto;color:#fff;box-shadow:inset 0 0 0 1px #fff}.woocommerce-mobile-app-banner .components-button.is-secondary:active,.woocommerce-mobile-app-banner .components-button.is-secondary:hover{color:#fff;box-shadow:inset 0 0 0 1px #fff;background:none}.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description{color:#fff;margin-right:8px}@media(min-width:401px){.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description{margin-right:13px}}.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description .woocommerce-mobile-app-banner__description__text{margin:0;font-size:10px}.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description .woocommerce-mobile-app-banner__description__text:first-child{font-weight:700}@media(min-width:401px){.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description .woocommerce-mobile-app-banner__description__text{margin-right:13px;font-size:13px}}.woocommerce-navigation{display:grid;grid-template-rows:min-content 1fr;height:100%}.woocommerce-navigation .woocommerce-navigation__wrapper h2>span{width:100%}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__menu{overflow-y:auto;margin-bottom:0;padding-bottom:24px}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__group+.components-navigation__group{margin-top:24px}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item{margin-bottom:0}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item .components-button{opacity:1}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item:not(:hover) .components-button{color:#ccc}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item:hover .components-button{color:#fff}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item.is-active .components-button{color:#fff}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item a.components-button{padding:6px 16px}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item:not(:hover) a.components-button{color:#ccc}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item.is-active a.components-button{color:#fff}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation{height:100%}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation>div{height:100%;display:grid;grid-template-rows:1fr min-content}.woocommerce-navigation .woocommerce-navigation__wrapper.is-root .components-navigation__menu-secondary{border-top:1px solid #2c3338;margin:0 -8px;padding:16px 8px 12px}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__group-title,.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__menu-title{color:#f0f0f0;opacity:1}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button{color:#ccc;opacity:1}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button,.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button span{font-size:13px;line-height:normal}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button:hover,.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button:hover:not(:disabled){color:#ddd}.woocommerce-navigation-header{display:flex;align-items:center;border:none;border-radius:0;height:auto}.woocommerce-navigation-header .woocommerce-navigation-header__site-icon.components-button{padding:12px;height:60px;color:#fff}.woocommerce-navigation-header .woocommerce-navigation-header__site-icon.components-button:focus,.woocommerce-navigation-header .woocommerce-navigation-header__site-icon.components-button:hover,.woocommerce-navigation-header .woocommerce-navigation-header__site-icon.components-button:not([aria-disabled=true]):active{color:#fff}.woocommerce-navigation-header .woocommerce-navigation-header__site-title.components-button{padding-right:0;color:#ccc;font-weight:600}.woocommerce-navigation-header .woocommerce-navigation-header__site-title.components-button:active,.woocommerce-navigation-header .woocommerce-navigation-header__site-title.components-button:focus,.woocommerce-navigation-header .woocommerce-navigation-header__site-title.components-button:hover{color:#e0e0e0}.woocommerce-navigation-header .woocommerce-navigation-header__site-title{padding-top:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.woocommerce-navigation{position:relative;width:240px;box-sizing:border-box;background-color:#1e1e1e;z-index:1100}@media(max-width:960px){.woocommerce-navigation{width:60px;height:60px}}.woocommerce-navigation .components-navigation{box-sizing:border-box}.woocommerce-navigation .components-navigation__menu-title{overflow:visible}.woocommerce-navigation .components-navigation__menu{scrollbar-color:#757575 #1e1e1e;scrollbar-width:thin}.woocommerce-navigation .components-navigation__menu::-webkit-scrollbar-thumb{border-radius:10px;background-color:#757575}.woocommerce-navigation .components-navigation__menu::-webkit-scrollbar-thumb:hover{background-color:#757575;width:8px;height:8px}.woocommerce-navigation .components-navigation__menu::-webkit-scrollbar{width:8px;height:8px}.woocommerce-navigation__wrapper{background-color:#1e1e1e;position:absolute;top:60px;width:100%;height:calc(100vh - 92px);overflow-y:auto}.is-wp-toolbar-disabled .woocommerce-navigation__wrapper{height:calc(100vh - 60px)}body.is-wc-nav-expanded .woocommerce-navigation{width:240px;height:100%}body.is-wc-nav-expanded font>.xdebug-error{margin-right:256px}body.is-wc-nav-folded .woocommerce-navigation{width:60px;height:60px;overflow:hidden}body.is-wc-nav-folded .woocommerce-navigation .woocommerce-navigation-header>*{display:none}body.is-wc-nav-folded .woocommerce-navigation .woocommerce-navigation-header__site-icon{display:block}body.is-wc-nav-folded .woocommerce-navigation .components-navigation{display:none}body.is-wc-nav-folded .woocommerce-transient-notices{right:16px}body.is-wc-nav-folded #wpbody{padding-right:0}.has-woocommerce-navigation #adminmenuback,.has-woocommerce-navigation #adminmenuwrap{display:none!important}.has-woocommerce-navigation.woocommerce_page_wc-reports .woo-nav-tab-wrapper,.has-woocommerce-navigation.woocommerce_page_wc-settings .woo-nav-tab-wrapper,.has-woocommerce-navigation.woocommerce_page_wc-status .woo-nav-tab-wrapper{display:none}.has-woocommerce-navigation.woocommerce_page_wc-reports .woocommerce .subsubsub,.has-woocommerce-navigation.woocommerce_page_wc-settings .woocommerce .subsubsub,.has-woocommerce-navigation.woocommerce_page_wc-status .woocommerce .subsubsub{font-size:14px;margin:5px 0}.has-woocommerce-navigation #wpcontent,.has-woocommerce-navigation #wpfooter{margin-right:0}@media(max-width:960px){.has-woocommerce-navigation #wpcontent,.has-woocommerce-navigation #wpfooter{margin-right:0}}.has-woocommerce-navigation #wpbody{padding-right:240px}@media(max-width:960px){.has-woocommerce-navigation #wpbody{padding-right:0}}.has-woocommerce-navigation .woocommerce-layout__header.is-embed-loading:before{content:"";position:fixed;width:240px;height:100%;background:#1e1e1e}@media(max-width:960px){.has-woocommerce-navigation .woocommerce-layout__header.is-embed-loading:before{width:60px;height:60px}}.has-woocommerce-navigation #woocommerce-embedded-root.is-embed-loading{margin-bottom:-32px}.has-woocommerce-navigation:not(.is-wp-toolbar-disabled) #wpbody-content{margin-top:32px}.has-woocommerce-navigation font>.xdebug-error{margin-top:60px}.woocommerce-navigation-category-title{display:flex;align-items:center;font-size:20px;line-height:28px}.woocommerce-navigation-category-title .woocommerce-navigation-favorite-button{margin-right:auto}.woocommerce-navigation-favorite-button.components-button .star-empty-icon{color:#949494}.woocommerce-navigation-favorite-button.components-button .star-filled-icon{color:#ffb900}.woocommerce-embedded-layout__primary{padding:0 20px}.woocommerce-embedded-layout__primary .components-card__footer,.woocommerce-embedded-layout__primary .components-card__header{box-sizing:border-box}@media(max-width:782px){.woocommerce-embedded-layout__primary{padding:0}}.woocommerce-recommended-payments-card{margin:0 0 10px 15px;animation:isLoaded;animation-duration:.25s}.woocommerce-recommended-payments-card .woocommerce-list__item:hover{background-color:#fff}.woocommerce-recommended-payments-card .woocommerce-list__item:hover .woocommerce-list__item-title{color:#1e1e1e}.woocommerce-recommended-payments-card .woocommerce-list__item-title{font-size:14px;color:#1e1e1e;font-weight:600}.woocommerce-recommended-payments-card .woocommerce-review-activity-card__section-controls{text-align:center}.woocommerce-recommended-payments-card .woocommerce-pill{margin-right:4px;padding:2px 8px}@media(max-width:480px){.woocommerce-recommended-payments-card .woocommerce-pill{margin-top:4px;margin-bottom:4px}}.woocommerce-recommended-payments-card .components-card__footer .gridicon{margin-right:4px}.woocommerce-recommended-payments-card .woocommerce-list__item-enter{opacity:0;max-height:100vh;transform:none}.woocommerce-recommended-payments-card .woocommerce-list__item-enter-active{opacity:1;transition:opacity .2s}.woocommerce-recommended-payments-card .woocommerce-list__item-after .components-button{margin-right:12px}.woocommerce-recommended-payments-card .woocommerce-list__item-before img{max-width:96px;height:36px;border-radius:8px}.woocommerce-recommended-payments-card .woocommerce-list__item-text,.woocommerce-recommended-payments-card .woocommerce-recommended-payments__header-heading{max-width:749px}@media(max-width:782px){.woocommerce-recommended-payments-card{margin:0 0 10px}}:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}.woocommerce_tax_settings_conflict_error{padding:15px 10px;min-width:400px;width:400px}.woocommerce_tax_settings_conflict_error_card_body{display:flex;flex-direction:row;padding-left:16px!important}.woocommerce_tax_settings_conflict_error_card_body__warning_icon{width:20px;height:20px;margin-block:10px;margin-left:16px}.woocommerce_tax_settings_conflict_error_card_body__body_text{margin-bottom:16px}.woocommerce_tax_settings_conflict_error_card_body__close_icon{padding:0;height:24px;color:grey}.woocommerce_admin_tax_settings_slotfill_td,.woocommerce_admin_tax_settings_slotfill_th{padding:0!important}[aria-labelledby=select2-woocommerce_tax_display_shop-container].is-conflict{border:red!important;border-style:solid!important;border-width:1px!important}
\ No newline at end of file
+.woocommerce-admin-page .wrap{margin:0}.woocommerce-admin-page #wpcontent,.woocommerce-admin-page.woocommerce_page_wc-admin #wpbody-content{padding:0;overflow-x:hidden!important;min-height:calc(100vh - 32px)}@media(min-width:783px){.woocommerce-admin-page #wpbody-content{padding-right:0}}@media(max-width:782px){.woocommerce-admin-page .wp-responsive-open #woocommerce-embedded-root,.woocommerce-admin-page .wp-responsive-open #wpbody{position:relative;left:-14.5em}.woocommerce-admin-page #wpbody-content,.woocommerce-admin-page #wpcontent{min-height:calc(100vh - 46px)}}@media(min-width:961px){.woocommerce-admin-page #toplevel_page_wcadmin--analytics.menu-top>a:focus,.woocommerce-admin-page #toplevel_page_woocommerce.menu-top>a:focus{padding-bottom:1px}}#wpbody,.woocommerce-layout *{box-sizing:border-box}#wpbody{display:inline-block;width:100%;padding-top:0;margin-top:60px}#wpfooter{display:none}.woocommerce_page_wc-admin .woocommerce-filters-date__content:not(.is-mobile){z-index:2}@media(max-width:600px){#wpadminbar{position:fixed}html.wp-toolbar{padding-top:46px}}@media(max-width:782px){.jetpack-masterbar #wpadminbar #wp-admin-bar-menu-toggle{margin-top:-10px}.jetpack-masterbar #wpwrap .woocommerce-layout__header-heading{padding-right:60px}.jetpack-masterbar.wp-admin .wrap h1,.jetpack-masterbar.wp-admin .wrap h2{padding-right:0}}.woocommerce-admin-page .wp-has-current-submenu:after{left:0;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:8px solid transparent;border-left-color:#f1f1f1;top:0;margin-top:10px}@media(max-width:960px){.woocommerce-admin-page .wp-has-current-submenu:after{border-width:4px;margin-top:14px}}:root{--large-gap:40px;--main-gap:24px}@media(max-width:960px){:root{--large-gap:24px}}@media(max-width:782px){:root{--large-gap:16px;--main-gap:16px}}@keyframes loading-fade{0%{opacity:.7}50%{opacity:1}to{opacity:.7}}.woocommerce-layout select:hover{color:#1a1a1a}.woocommerce-layout .components-base-control select.components-select-control__input{max-width:100%;line-height:normal}.woocommerce-layout .components-panel__body>.components-panel__body-title:hover,.woocommerce-layout .woocommerce-experimental-list__item:hover,.woocommerce-layout .woocommerce-inbox-message:hover{background:#f6f7f7}.woocommerce-layout__jitm .jitm-card{margin:3rem 1.25rem 1.25rem}.woocommerce-layout__jitm-hide{display:none}body.woocommerce-admin-page .components-button.is-primary:not(:disabled):not([aria-disabled=true]):hover{color:#fff}body.woocommerce-admin-page .components-snackbar .components-button.is-tertiary{color:#fff}body.woocommerce-admin-page .components-snackbar .components-button.is-tertiary:not(:disabled):not([aria-disabled=true]):hover{color:#fff}.woocommerce-embed-page #wpbody .woocommerce-layout,.woocommerce-embed-page .woocommerce-layout__notice-list-hide+.wrap{padding-top:10px}.woocommerce-embed-page #wpbody-content,.woocommerce-embed-page #wpcontent{overflow-x:initial!important}.woocommerce-embed-page #wpbody-content{padding-top:0}.woocommerce-embed-page #wpbody-content .notice{margin-top:15px}.woocommerce-embed-page .wrap{padding:0 20px}@media(max-width:782px){.woocommerce-embed-page .wrap p.search-box{width:calc(100% - 40px)}}.woocommerce-embed-page .wrap .wrap{padding:0}.woocommerce-embed-page #screen-meta{border-left:0;margin:0}.woocommerce-embed-page #screen-meta-links{position:relative}.woocommerce-embed-page .notice{padding:1px 12px}.woocommerce-embed-page .woocommerce-layout__header.is-scrolled{box-shadow:0 8px 16px 0 rgba(85,93,102,.3)}.woocommerce-embed-page .woocommerce-layout__header .woocommerce-layout__header-heading{margin-top:0;margin-bottom:0}.woocommerce-embed-page #screen-meta-links.is-hidden-by-notices,.woocommerce-embed-page #screen-meta.is-hidden-by-notices{display:none!important}.woocommerce-embed-page .woocommerce-layout__primary{margin:0}@media(max-width:782px){.woocommerce-embed-page .woocommerce-layout__primary{padding-top:10px}}@keyframes isLoaded{0%{opacity:0}to{opacity:1}}.woocommerce-embed-page .woocommerce-layout__activity-panel-tabs{animation:isLoaded;animation-duration:2s}.woocommerce-embed-page .woocommerce-layout__notice-list-show{margin-top:10px;margin-bottom:16px}@media(max-width:600px){.woocommerce-embed-page .woocommerce-layout__notice-list-show{margin-top:80px;margin-bottom:-16px}}@media(min-width:601px)and (max-width:782px){.woocommerce-embed-page .woocommerce-layout__notice-list-show{margin-top:32px}}.woocommerce-embed-page .woocommerce-activity-card__actions a.components-button:not(.is-primary){color:#2e4453}.woocommerce-layout{margin:0;padding:0}.woocommerce-layout__loading{position:absolute;top:0;right:0;width:100%;height:100%}.woocommerce-layout__loading,.woocommerce-layout__no-match{display:flex;align-items:center;justify-content:center}.woocommerce-layout__no-match .components-card{max-width:680px;width:100%}.woocommerce-layout__primary{margin:var(--large-gap) var(--large-gap) 128px 0}@media(max-width:782px){.woocommerce-layout__primary{margin-top:20px}}.woocommerce-layout .woocommerce-layout__main{padding-left:40px;padding-left:var(--large-gap);max-width:100%}.woocommerce-admin-page .update-nag{display:none}.woocommerce-admin-page #wpbody.no-header{display:block;margin-top:0}.woocommerce-admin-page #wpbody.no-header .woocommerce-layout__primary{margin-top:0}.woocommerce-admin-is-loading #adminmenumain,.woocommerce-admin-is-loading #wpadminbar,.woocommerce-admin-is-loading #wpbody-content,.woocommerce-admin-is-loading #wpcontent,.woocommerce-admin-is-loading #wpfooter,.woocommerce-admin-is-loading .components-modal__screen-overlay,.woocommerce-admin-is-loading .error,.woocommerce-admin-is-loading .notice,.woocommerce-admin-is-loading .update-nag,.woocommerce-admin-is-loading .updated,.woocommerce-admin-is-loading .woocommerce-layout__header,.woocommerce-admin-is-loading .woocommerce-message,.woocommerce-admin-is-loading .woocommerce-store-alerts{display:none}.woocommerce-admin-full-screen{background:#f6f7f7;color:#50575e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}.woocommerce-admin-full-screen #wpwrap{top:0}.woocommerce-admin-full-screen #wpbody-content{min-height:100vh!important}.woocommerce-admin-full-screen #adminmenumain,.woocommerce-admin-full-screen #wpcontent>*,.woocommerce-admin-full-screen .error,.woocommerce-admin-full-screen .notice,.woocommerce-admin-full-screen .update-nag,.woocommerce-admin-full-screen .updated,.woocommerce-admin-full-screen .woocommerce-layout__header,.woocommerce-admin-full-screen .woocommerce-message,.woocommerce-admin-full-screen .woocommerce-store-alerts{display:none}.woocommerce-admin-full-screen #wpcontent{margin-right:0!important}.woocommerce-admin-full-screen #wpcontent>#wpbody{display:block;margin-top:0!important}.woocommerce-admin-full-screen.has-woocommerce-navigation #wpbody{padding-right:0}.is-wp-toolbar-disabled #wpadminbar{display:none!important}.wp-toolbar .is-wp-toolbar-disabled{margin-top:-32px}@media(max-width:600px){.wp-toolbar .is-wp-toolbar-disabled{margin-top:-46px}}.woocommerce-admin-page .components-modal__frame .components-button.is-button,.woocommerce-profile-wizard__body .components-button.is-button,.woocommerce-task-dashboard__container .components-button.is-button{height:48px;padding-right:25px;padding-left:25px;text-align:center;font-size:14px;line-height:36px;font-weight:500;align-items:center}.woocommerce-admin-page .components-modal__frame .components-button.is-button:disabled,.woocommerce-profile-wizard__body .components-button.is-button:disabled,.woocommerce-task-dashboard__container .components-button.is-button:disabled{cursor:not-allowed}.components-modal__header .components-button svg+span{display:none}.components-modal__frame.woocommerce-usage-modal{width:600px;max-width:100%}.components-modal__frame.woocommerce-usage-modal .components-modal__header{margin-bottom:0}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__wrapper{flex-grow:1;display:flex;flex-direction:column}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__wrapper a{color:#50575e}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__wrapper button.is-primary{align-self:flex-end}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__actions{display:flex;justify-content:flex-end;margin-top:16px}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__actions button{margin-right:16px}.woocommerce-payments__usage-modal .components-modal__header{height:auto;padding:24px 24px 0}.woocommerce-payments__usage-modal .components-modal__header .components-modal__header-heading{font-size:24px;line-height:32px;margin:0 0 24px}.woocommerce-payments__usage-modal .woocommerce-payments__usage-modal-message{padding:16px 0;font-size:16px;line-height:24px}.woocommerce-payments__usage-modal .woocommerce-payments__usage-footer{display:flex;justify-content:flex-end;padding:16px 0}.woocommerce-payments__usage-modal .woocommerce-payments__usage-footer button{margin-right:16px}.components-modal__frame.woocommerce-cart-modal{width:600px;max-width:100%}.components-modal__frame.woocommerce-cart-modal .components-modal__header{border-bottom:0;margin-bottom:16px;margin-top:16px}.components-modal__frame.woocommerce-cart-modal .components-modal__header button{display:none}.components-modal__frame.woocommerce-cart-modal .components-modal__header-heading{font-style:normal;font-weight:400;font-size:24px;line-height:32px}.components-modal__frame.woocommerce-cart-modal .woocommerce-list{margin-top:24px}.components-modal__frame.woocommerce-cart-modal .woocommerce-list .woocommerce-list__item:first-child{border-top:1px solid #dcdcde}.components-modal__frame.woocommerce-cart-modal .woocommerce-list__item{border-bottom:1px solid #dcdcde}.components-modal__frame.woocommerce-cart-modal .woocommerce-cart-modal__help-text{font-size:16px;line-height:24px}.components-modal__frame.woocommerce-cart-modal .woocommerce-cart-modal__actions{text-align:left}.components-modal__frame.woocommerce-cart-modal .woocommerce-cart-modal__actions button.is-link{margin-left:16px;text-decoration:none;font-weight:600;font-size:14px}.components-modal__frame.woocommerce-cart-modal .woocommerce-cart-modal__actions button.is-primary{align-self:flex-end}.woocommerce-layout__header{background:#fff;box-sizing:border-box;padding:0;position:fixed;width:calc(100% - 160px);top:32px;z-index:1001}.woocommerce-layout__header.is-scrolled{box-shadow:0 8px 8px 0 rgba(85,93,102,.3)}.woocommerce-layout__header .woocommerce-layout__header-wrapper{display:flex;align-items:center;min-height:60px}@media(max-width:782px){.woocommerce-layout__header{flex-flow:row wrap;top:46px;width:100%}}@media(min-width:783px)and (max-width:960px){.woocommerce-layout__header{width:calc(100% - 36px)}}.woocommerce-layout__header .woocommerce-layout__header-breadcrumbs-wrapper{display:flex;justify-content:space-between;flex-direction:row}.woocommerce-layout__header .woocommerce-layout__header-heading{display:flex;align-items:center;padding:0 40px 0 0;padding:0 var(--large-gap) 0 0;flex:1 auto;height:60px;background:#fff;font-weight:600;font-size:14px}.folded .woocommerce-layout__header{width:calc(100% - 36px)}@media(max-width:782px){.folded .woocommerce-layout__header{width:100%}}.is-wp-toolbar-disabled .woocommerce-layout__header{top:0}.has-woocommerce-navigation .woocommerce-layout__header{right:0;width:100%}.woocommerce-admin-page #contextual-help-link-wrap,.woocommerce-admin-page #screen-options-link-wrap{margin-top:-1px}.wp-responsive-open .woocommerce-layout__header{margin-right:2px}.woocommerce-task-payment{display:flex;flex-direction:row;align-items:center;position:relative;overflow:hidden}.woocommerce-task-payment .components-card__media{width:85px;flex-shrink:0;align-self:flex-start}.woocommerce-task-payment .components-card__media .is-placeholder,.woocommerce-task-payment .components-card__media img,.woocommerce-task-payment .components-card__media svg{margin:auto;max-width:36px;display:block}.woocommerce-task-payment .components-card__media .is-placeholder{height:36px}.woocommerce-task-payment .woocommerce-task-payment__footer .is-placeholder{width:70px;height:36px}.woocommerce-task-payment>.components-form-toggle{min-width:52px}.woocommerce-task-payment .woocommerce-task-payment__title{display:flex;align-items:center;font-size:16px;font-weight:500;color:#2c3338;margin-top:0;margin-bottom:8px}.woocommerce-task-payment .woocommerce-task-payment__title .woocommerce-pill{margin-right:8px}.woocommerce-task-payment .woocommerce-task-payment__title .woocommerce-pill.pill-green{color:#008a20;border-color:#008a20}.woocommerce-task-payment .woocommerce-task-payment__content{font-size:14px;color:#50575e;margin:0 0 0 36px}.woocommerce-task-payment .woocommerce-task-payment__content .text-style-strong{font-weight:700}.woocommerce-task-payment .woocommerce-task-payment__content p{font-size:12px}.woocommerce-task-payment .woocommerce-task-payment__transaction-processors_images{padding-top:16px;display:flex;flex-direction:row;flex-wrap:wrap;gap:8px}.woocommerce-task-payment .woocommerce-task-payment__transaction-processors_images img{height:24px}.woocommerce-task-payment .woocommerce-task-payment__description{flex:1}@media(max-width:600px){.woocommerce-task-payment{flex-wrap:wrap}.woocommerce-task-payment .woocommerce-task-payment__content{margin:0}.woocommerce-task-payment .components-card__media{order:1;flex-basis:50%}.woocommerce-task-payment .components-card__media>img,.woocommerce-task-payment .components-card__media>svg{margin:0 24px 0 0}.woocommerce-task-payment .woocommerce-task-payment__description{order:3;padding:24px 24px 0 0}.woocommerce-task-payment .woocommerce-task-payment__footer{flex-basis:50%;align-self:flex-start;order:2;text-align:left}}.woocommerce-payment-gateway-suggestions-list-placeholder .is-placeholder{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent;display:inline-block;max-width:240px;width:80%}.woocommerce-payment-gateway-suggestions-list-placeholder .is-placeholder:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-payment-gateway-suggestions-list-placeholder .is-placeholder{animation:none}}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-label{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent;display:inline-block;width:60%}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-label:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-label{animation:none}}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-icon{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-icon:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-icon{animation:none}}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step:first-child .woocommerce-stepper__step-label{width:30%}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-number{display:none}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner{min-width:100%;margin-bottom:24px}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__body{padding:30px 24px 0 0;justify-content:space-between}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__text_container{width:305px;margin-right:0}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__footer{flex-direction:column;align-items:flex-start;padding:20px 24px 30px 38.2px}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__footer_icon_container{margin-top:12px;margin-right:-5px}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__footer_icon_container>svg{width:38px;height:24px;margin-left:8px}.woocommerce-wcpay-suggestion .woocommerce-wcpay-benefits{margin-bottom:24px}.woocommerce-task-payments .components-card+.components-card{margin-top:24px}.woocommerce-task-payments .woocommerce-task-payment__setup_required{display:flex;align-items:center;font-size:14px;margin-right:12px;font-weight:400;gap:3px}.woocommerce-task-payments .woocommerce-task-payment__setup_required>svg{fill:#efb854}.woocommerce-task-payments .components-card__header{font-size:20px;font-weight:400;line-height:28px;margin:0;display:flex;flex-direction:column;align-items:flex-start}.woocommerce-task-payments .woocommerce-task-payment-header__description{margin:0;color:#757575;font-weight:400;font-size:14px}.woocommerce-task-payments .components-card__footer a.components-button .gridicon{margin-right:4px}.woocommerce-task-payments .woocommerce-task-payment__recommended-pill{border:1px solid #dcdcde;border-radius:28px;display:inline-block;font-size:13px;margin-right:12px;padding:1px 10px}.woocommerce-task-payments .woocommerce-task-payment__recommended-pill span{max-width:70px}.woocommerce-task-payments .components-card__divider:last-child{display:none}.woocommerce-task-payments .woocommerce-task-payment-wcpay{margin-bottom:0}.woocommerce-task-payment-method>h3{margin:0;color:#1d2327}.woocommerce-task-payment-method p{font-size:14px;color:#646970;font-weight:400;margin-top:16px;margin-bottom:16px}.woocommerce-task-payment-method__fields{display:grid;grid-template-columns:1fr 1fr;grid-gap:0 16px;margin-bottom:8px}.woocommerce-task-payment-method__fields .components-base-control{margin-bottom:0}.woocommerce-shipping-rate{display:flex;padding-top:12px;padding-bottom:12px}.woocommerce-shipping-rate .woocommerce-shipping-rate__main{width:100%}.woocommerce-shipping-rate .woocommerce-shipping-rate__icon{padding-top:16px;margin-left:24px}.woocommerce-shipping-rate .woocommerce-shipping-rate__name{align-items:center;display:flex;padding-top:16px;font-size:16px;line-height:22px;color:#1d2327;margin-bottom:12px;border-top:1px solid #dcdcde}.woocommerce-shipping-rate .woocommerce-shipping-rate__name .components-form-toggle{margin-right:auto;height:18px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .components-base-control{margin-bottom:0}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .components-base-control__label{display:block;position:relative;top:-8px;width:100%;font-size:12px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .text-control-with-affixes__prefix,.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .text-control-with-affixes__suffix{font-size:16px;line-height:24px;color:#646970;border:0;padding:0;align-items:center;display:flex;top:-11px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .components-text-control__input{position:relative;top:-11px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .text-control-with-affixes__prefix{margin-left:4px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .text-control-with-affixes__suffix{margin-right:4px}.woocommerce-task-shipping-recommendation__plugins-install{padding:24px 20px;border:1px solid #ddd;border-radius:3px;justify-content:space-around;margin-bottom:24px}.woocommerce-task-shipping-recommendation__plugins-install.dual{display:flex;flex-direction:column;justify-content:flex-start;width:285px}.woocommerce-task-shipping-recommendation__plugins-install.dual p{margin-top:0;margin-bottom:15px;color:#757575}.woocommerce-task-shipping-recommendation__plugins-install.dual .plugins-install__plugin-banner-image{display:flex;margin-bottom:24px}.woocommerce-task-shipping-recommendation__plugins-install.dual .plugins-install__plugin-banner-image img{width:120px;height:28px}.woocommerce-task-shipping-recommendation__plugins-install.single{display:flex}.woocommerce-task-shipping-recommendation__plugins-install.single .plugins-install__list{max-width:360px}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__plugin-banner-image{display:flex;width:150px}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__plugin-banner-image img{width:100%}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__list{display:flex;flex-direction:column;justify-content:space-around;gap:10px}.woocommerce-task-shipping-recommendation__plugins-install .woocommerce-task-shipping-recommendations_plugins-buttons{display:flex;justify-content:space-between;margin-top:24px;flex-grow:1;align-items:flex-end}.woocommerce-task-shipping-recommendation__plugins-install .woocommerce-task-shipping-recommendations_plugins-buttons button{min-width:40%;padding-inline:8px;margin-inline:4px}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__list-item{display:flex;align-items:center}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__list-icon{margin-left:12px}.woocommerce-task-shipping-recommendation_plugins-install-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:10px}.woocommerce-task-shipping-recommendations_skip-button.dual{margin-inline:calc(50% - 34px)}.woocommerce-task-marketing .components-card__header{flex-direction:column;align-items:flex-start;display:flex!important}.woocommerce-task-marketing .components-card__header h2{align-self:start!important;color:#1e1e1e;font-size:20px;margin-bottom:0}.woocommerce-task-marketing .components-card__header span{margin-right:0;margin-top:8px;color:#757575}.woocommerce-plugin-list__plugin{display:flex;padding:24px;border-top:1px solid #e0e0e0}.woocommerce-plugin-list__plugin:first-child{border-top:0}.woocommerce-plugin-list__plugin h4{margin-bottom:12px;font-weight:600;color:#1e1e1e}.woocommerce-plugin-list__plugin p{color:#757575;font-weight:400}.woocommerce-plugin-list__plugin-logo{margin-left:45px;display:flex;align-items:center}.woocommerce-plugin-list__plugin-logo img{width:50px}.woocommerce-plugin-list__plugin-text{max-width:370px;margin-left:16px}.woocommerce-plugin-list__plugin-text .woocommerce-pill{color:#646970;margin-right:12px}.woocommerce-plugin-list__plugin-action{display:flex;align-items:center;margin-right:auto}.woocommerce-plugin-list__title{padding:24px 30px 0;position:relative}.woocommerce-plugin-list__title h3{font-weight:500;color:#000;text-transform:uppercase}.woocommerce-plugin-list__plugin{border-top:none;border-bottom:1px solid #e0e0e0}.woocommerce-tax-partner-card{border:1px solid #ddd;border-radius:3px;margin:0 8px 16px;padding:20px;display:flex;flex-direction:column}.woocommerce-tax-partner-card a{text-decoration:none}.woocommerce-tax-partner-card__logo{margin-bottom:8px}.woocommerce-tax-partner-card__logo img{max-height:35px}.woocommerce-tax-partner-card__description{color:#757575}.woocommerce-tax-partner-card__benefits{color:#1e1e1e;list-style:none}.woocommerce-tax-partner-card__benefits li{margin-bottom:8px;display:flex}.woocommerce-tax-partner-card__benefits li svg{margin-left:10px}.woocommerce-tax-partner-card__action{margin-top:auto}.woocommerce-tax-partner-card__terms{color:#949494;font-size:9px;margin-bottom:8px}.woocommerce-tax-partners__partners{display:grid;grid-template-columns:1fr 1fr}.woocommerce-tax-partners__partners.woocommerce-tax-partners__partners-count-1{grid-template-columns:1fr}@media(max-width:782px){.woocommerce-tax-partners__partners{grid-template-columns:1fr}}.woocommerce-tax-partners__partners-count-1 .woocommerce-tax-partners__partners{grid-template-columns:1fr;justify-items:center}.woocommerce-tax-partners .components-card__body.is-size-medium{padding:36px}.woocommerce-tax-partners .components-card__header{line-height:28px;font-size:20px}.woocommerce-tax-partners__other-actions{text-align:center;list-style:none;display:flex;align-items:center;justify-content:center;margin:0}@media(max-width:782px){.woocommerce-tax-partners__other-actions{flex-direction:column}}.woocommerce-tax-partners__other-actions li{margin-top:16px;margin-left:4px}.woocommerce-tax-partners__other-actions li button.is-tertiary{padding:0;height:auto}.woocommerce-tax-partners__other-actions li:after{content:"•";color:#bbb;margin-right:4px}@media(max-width:782px){.woocommerce-tax-partners__other-actions li:after{content:""}}.woocommerce-tax-partners__other-actions li:last-child{margin-left:0}.woocommerce-tax-partners__other-actions li:last-child:after{content:""}.woocommerce-task-tax__automated-tax-control{display:flex;align-items:center;margin-top:16px}.woocommerce-task-tax__automated-tax-control i{margin-right:16px;margin-left:24px}.woocommerce-task-tax__automated-tax-control .woocommerce-task-tax__automated-tax-control-inner{border-top:1px solid #dcdcde;display:flex;align-items:center;flex:1;font-size:16px;padding-top:16px;padding-bottom:16px}.woocommerce-task-tax__automated-tax-control .components-form-toggle{margin-right:auto}.woocommerce-task-tax__success{display:flex;flex-direction:column;align-items:center;padding:40px;text-align:center}.woocommerce-task-tax__success .woocommerce-task-tax__success-icon{font-size:48px;height:48px;align-items:center;display:flex}.woocommerce-task-tax__success #woocommerce-task-tax__success-message{font-size:32px;font-weight:400}.woocommerce-task-tax__success p{margin-top:0;font-size:16px}.woocommerce-task-dashboard__container .woocommerce-task-card{max-width:680px;margin-right:auto;margin-left:auto;margin-bottom:24px}.woocommerce-task-dashboard__container .woocommerce-task-card .components-card__header.is-size-large{padding-bottom:12px}.woocommerce-task-dashboard__container .woocommerce-task-card .components-card__header.is-size-large .woocommerce-card__menu{margin-top:8px}.woocommerce-task-dashboard__container .woocommerce-task-card .wooocommerce-task-card__header{display:flex}.woocommerce-task-dashboard__container .woocommerce-task-card .wooocommerce-task-card__header .components-text+.woocommerce-badge{margin-right:16px}.woocommerce-task-dashboard__container .woocommerce-task-card .woocommerce-list__item-text .woocommerce-pill{padding:1px 8px;margin-right:8px}.woocommerce-task-dashboard__container .woocommerce-task-card .components-popover__content{min-width:unset}.woocommerce-task-dashboard__container .woocommerce-task-payments{width:680px;margin:auto;max-width:100%}.woocommerce-task-list__item-expandable-content,.woocommerce-task__additional-info,.woocommerce-task__estimated-time{color:#757575;font-weight:400;font-size:12px}.woocommerce-task-list__item-expandable-content{font-size:13px}.components-modal__screen-overlay{background:rgba(43,45,47,.4)}.components-modal__frame .components-modal__header{margin-bottom:0}.components-modal__frame .woocommerce-task-payments__stripe-error-wrapper{align-items:flex-end;flex-grow:1;display:flex;flex-direction:column}.woocommerce-task-dashboard__container .woocommerce-stepper button.components-button.is-primary{margin:0 0 0 8px}.woocommerce-task-dashboard__container button.components-button.is-link{margin:0;height:auto;color:#50575e;font-weight:400}.woocommerce-task-card__prompt{width:100%;min-width:100%;margin-bottom:24px;margin-top:-4px;cursor:default}.woocommerce-task-card__prompt .components-snackbar__content{display:block;align-items:unset;justify-content:unset}.woocommerce-task-card__prompt .components-snackbar__content span{margin-right:-24px}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions button.is-link,.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions button.is-link:active,.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions button.is-link:focus{color:#fff;margin-right:24px;background:transparent}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions button.is-link:hover{color:#fff}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-pointer{border-bottom:10px solid #1e1e1e;border-right:10px solid transparent;border-left:10px solid transparent;position:relative;width:0;height:0;display:inline-block;top:-30px}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-content{display:flex;align-items:baseline;justify-content:space-between;max-height:10px;margin-right:24px;position:relative;top:-40px}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions{margin-left:-16px}.woocommerce-task-card__prompt:hover .woocommerce-task-card__prompt-pointer{border-bottom-color:#1e1e1e}.woocommerce-task-dashboard__container .muriel-component{margin-top:16px;margin-bottom:16px}.woocommerce-task-dashboard__container .components-base-control.has-error{margin-bottom:32px!important;border-color:#d63638}@media(max-width:782px){.woocommerce-task-dashboard__container .components-base-control.has-error{margin-bottom:44px!important}}.woocommerce-task-dashboard__container .components-base-control.has-error .components-base-control__help{top:100%;right:12px;position:absolute;margin-top:4px;font-size:12px;font-style:normal;color:#d63638}.woocommerce-task-dashboard__container .components-form-toggle{display:inline-block}.woocommerce-task-dashboard__container .components-form-toggle label{font-size:14px}.woocommerce-task-dashboard__container .components-form-toggle .components-base-control{display:inline-block}.woocommerce-task-dashboard__container .components-form-toggle .components-base-control__field{margin-bottom:0}.woocommerce-task-dashboard__container .woocommerce-task__caption{color:#757575;margin-top:16px}.woocommerce-task-dashboard__container .woocommerce-task__caption.is-tos{margin-bottom:16px}.woocommerce-task-list__setup .woocommerce-experimental-list .woocommerce-experimental-list__item.complete{text-decoration:line-through;color:var(--wp-admin-theme-color)}.woocommerce-task-list__setup .woocommerce-experimental-list .woocommerce-experimental-list__item.complete .woocommerce-task-list__item-title{color:var(--wp-admin-theme-color)}.woocommerce-task-progress-header{position:relative;min-height:28px}.woocommerce-task-progress-header h1{font-size:24px}.woocommerce-task-progress-header p{color:#757575;font-size:16px;line-height:24px;margin-top:8px}.woocommerce-task-progress-header .woocommerce-task-progress-header__progress-bar{appearance:none;border:1px solid #ddd;border-radius:16px;height:12px;width:100%;margin-bottom:0;background-color:#fff}.woocommerce-task-progress-header .woocommerce-task-progress-header__progress-bar::-moz-progress-bar{background-color:var(--wp-admin-theme-color);border-radius:16px}.woocommerce-task-progress-header .woocommerce-task-progress-header__progress-bar::-webkit-progress-bar{background-color:#fff;border-radius:16px}.woocommerce-task-progress-header .woocommerce-task-progress-header__progress-bar::-webkit-progress-value{background-color:var(--wp-admin-theme-color);border-bottom-right-radius:16px;border-top-right-radius:16px}.woocommerce-task-progress-header .woocommerce-card__menu{position:absolute;left:0;top:-7px}.woocommerce-setup-panel .woocommerce-task-progress-header{padding:16px}.woocommerce-setup-panel .woocommerce-task-progress-header h1{font-size:16px;font-weight:600}.woocommerce-setup-panel .woocommerce-task-progress-header p{font-size:16px}.woocommerce-setup-panel .woocommerce-task-progress-header .woocommerce-card__menu{top:17px}@media(max-width:782px){.woocommerce-task-progress-header{padding-right:var(--large-gap);padding-left:var(--large-gap)}}h1.woocommerce-task-progress-header__title{padding-top:4px}@media(max-width:782px){h1.woocommerce-task-progress-header__title{padding-right:var(--large-gap);padding-left:var(--large-gap)}}.wooocommerce-task-card__header .wooocommerce-task-card__header-subtitle{color:#757575;margin-bottom:24px}.wooocommerce-task-card__finished-header-image{max-width:75%}.customer-feedback-simple__container{height:64px}.woocommerce-task-card__header-menu{position:absolute;left:0;top:0}.wooocommerce-task-card__header-ces-feedback{height:64px;display:flex;justify-content:center;align-items:center}.woocommerce-task-header__contents-container.woocommerce-task-header__customize-store img.svg-background{padding-left:16px;padding-top:9px}.woocommerce-homescreen .woocommerce-task-dashboard__container:empty{margin-bottom:0}.woocommerce-task-dashboard__container .woocommerce-homescreen-card{max-width:none;width:100%}.woocommerce-task-dashboard__container .wooocommerce-task-card__header-container{display:flex;position:relative;border-bottom:1px solid #dcdcde}.woocommerce-task-dashboard__container .wooocommerce-task-card__header{width:100%;flex:1}.woocommerce-task-dashboard__container .woocommerce-ellipsis-menu{position:absolute;top:16px;left:24px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .components-card__header{background:#fff;height:130px;display:block}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .components-card__header .is-placeholder{margin:20px;width:100%;height:90px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .wooocommerce-task-card__header{align-self:inherit}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-task-list__item-before .is-placeholder{height:36px;width:36px;border-radius:50%}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-task-list__item-text .is-placeholder{width:80%}.woocommerce-task-dashboard__container .woocommerce-task-card.completed,.woocommerce-task-dashboard__container .woocommerce-task-card.completed .components-card__header{display:block}.woocommerce-task-dashboard__container .woocommerce-task-card.completed h2{margin-top:24px;margin-bottom:12px}.woocommerce-task-dashboard__container .woocommerce-task-card.completed .wooocommerce-task-card__header{display:block;text-align:center}.woocommerce-task-dashboard__container .woocommerce-task-card.completed button.is-secondary{margin-left:12px}.woocommerce-task-dashboard__container.setup-task-list{max-width:1032px;display:flex;flex-direction:row;margin:0 auto;justify-content:space-between}.woocommerce-task-dashboard__container.setup-task-list ul li.complete .woocommerce-task-list__item-title{font-weight:600;color:#949494}.woocommerce-task-dashboard__container.setup-task-list ul li{display:block;width:100%;border-left:1px solid #e0e0e0;border-top:none;padding:16px 24px}.woocommerce-task-dashboard__container.setup-task-list ul li:last-child{border-left:none}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active{box-shadow:inset 0 -4px 0 0 var(--wp-admin-theme-color)}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active .woocommerce-task-list__item-badge{background-color:#fff;position:relative;z-index:1}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active:after{background-color:var(--wp-admin-theme-color);opacity:.1;content:"";top:0;right:0;position:absolute;width:100%;height:100%;pointer-events:none}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete) .woocommerce-task__icon{border:1px solid var(--wp-admin-theme-color);background:transparent}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item.complete:not(.complete) .woocommerce-task__icon{border:none}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item-before{display:block;padding:0}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item-text{margin-top:10px}.woocommerce-task-dashboard__container.setup-task-list .numbered-circle,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-1 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-2 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-3 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-4 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-5 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-6 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-7 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-8 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-9 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-10 .woocommerce-task__icon:after{justify-content:center;display:flex;align-items:center;height:100%;width:100%}.woocommerce-task-dashboard__container.setup-task-list ul{display:block}.woocommerce-task-dashboard__container.setup-task-list ul li{display:grid;grid-template-columns:48px auto 48px;border-left:none;border-bottom:1px solid #e0e0e0}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active{box-shadow:inset -5px 0 0 0 var(--wp-admin-theme-color);transition:box-shadow .1s linear}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item-text{display:block;padding:0;margin-top:0}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:65%}@media(max-width:600px){.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:100%}}.woocommerce-task-dashboard__container.setup-task-list .svg-background{left:6%}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-1 .woocommerce-task__icon:after{content:"1";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-2 .woocommerce-task__icon:after{content:"2";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-3 .woocommerce-task__icon:after{content:"3";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-4 .woocommerce-task__icon:after{content:"4";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-5 .woocommerce-task__icon:after{content:"5";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-6 .woocommerce-task__icon:after{content:"6";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-7 .woocommerce-task__icon:after{content:"7";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-8 .woocommerce-task__icon:after{content:"8";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-9 .woocommerce-task__icon:after{content:"9";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-10 .woocommerce-task__icon:after{content:"10";color:var(--wp-admin-theme-color);font-weight:700}@media(max-width:782px){.woocommerce-task-dashboard__container.setup-task-list ul{display:block}.woocommerce-task-dashboard__container.setup-task-list ul li{display:grid;grid-template-columns:48px auto 48px;border-left:none;border-bottom:1px solid #e0e0e0}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active{box-shadow:inset -5px 0 0 0 var(--wp-admin-theme-color);transition:box-shadow .1s linear}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item-text{display:block;padding:0;margin-top:0}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:65%}}@media(max-width:782px)and (max-width:782px){.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:380px}}@media(max-width:782px)and (max-width:600px){.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:100%}}@media(max-width:782px){.woocommerce-task-dashboard__container.setup-task-list .svg-background{left:6%}}.woocommerce-setup-panel .woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents-container{padding:16px}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents-container{padding:20px 24px;position:relative;flex:1;overflow:hidden;width:100%}.woocommerce-task-dashboard__container.setup-task-list .svg-background{position:absolute;z-index:0;left:24px;max-width:25%;max-height:150px;width:auto;height:auto}@media(max-width:600px){.woocommerce-task-dashboard__container.setup-task-list .svg-background{display:none}}@media(max-width:782px){.woocommerce-task-dashboard__container.setup-task-list .svg-background{left:.5%;width:40%}}.woocommerce-task-dashboard__container.setup-task-list .svg-background .admin-theme-color{fill:var(--wp-admin-theme-color)}.woocommerce-task-dashboard__container.setup-task-list .svg-background .admin-theme-color-darker-10{fill:var(--wp-admin-theme-color-darker-10)}.woocommerce-task-dashboard__container.setup-task-list .svg-background .admin-theme-color-darker-20{fill:var(--wp-admin-theme-color-darker-20)}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:70%;position:relative;z-index:1}@media(max-width:782px){.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:380px}}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents p,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents span{color:#757575}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents p:first-of-type{margin-top:4px}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__timer{display:flex;align-items:center;line-height:22px;margin-bottom:0}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__timer img{margin-left:6px}.woocommerce-task-dismiss-modal{width:565px;max-width:100%}.woocommerce-task-dismiss-modal .components-modal__header{border-bottom:1px solid #ddd}.woocommerce-task-dismiss-modal .woocommerce-usage-modal__message{box-sizing:border-box;border-bottom:1px solid #ddd;padding:0 32px;display:flex;flex-direction:row;justify-content:space-between;background:#fff;align-items:center;height:60px;z-index:10;position:relative;position:sticky;top:0;margin:0 -32px 24px;font-size:1.2em}.woocommerce-task-dismiss-modal .woocommerce-usage-modal__actions{display:flex;justify-content:flex-end;margin-top:16px}.woocommerce-task-dismiss-modal .woocommerce-usage-modal__actions button{margin-right:16px}.woocommerce-layout__header-back-button{cursor:pointer;margin-right:40px;margin-right:var(--large-gap);margin-left:-16px;display:flex;z-index:2}.woocommerce-layout__header-back-button:focus{box-shadow:inset 1px -1px 0 #757575,inset -1px 1px 0 #757575}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-card__body{border-top:1px solid #dcdcde}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .is-placeholder{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent;display:inline-block;height:16px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .is-placeholder:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .is-placeholder{animation:none}}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-card__title .is-placeholder{width:70%;height:28px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-list__item-before .is-placeholder{height:36px;width:36px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-list__item-text{width:100%}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-list__item-text .woocommerce-list__item-title .is-placeholder{height:22px;width:60%}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-list__item-after .is-placeholder{height:18px;width:60px}.woocommerce-task-list__item.woocommerce-list__item-enter{opacity:0;max-height:0}.woocommerce-task-list__item.woocommerce-list__item-enter-active{opacity:1;max-height:100px;transition:opacity .5s,max-height .5s}.woocommerce-task-list__item.woocommerce-list__item-exit{opacity:1;max-height:100px}.woocommerce-task-list__item.woocommerce-list__item-exit-active{opacity:0;max-height:0;transition:opacity .5s,max-height .5s}.woocommerce-layout__header-tasks-reminder-bar{height:40px;background-color:#007cba;display:flex;justify-content:space-between;align-items:center;color:#fff}.woocommerce-layout__header-tasks-reminder-bar:before{content:""}.woocommerce-layout__header-tasks-reminder-bar button{color:inherit}.woocommerce-layout__header-tasks-reminder-bar button:hover{opacity:.7;color:inherit}.woocommerce-layout__header-tasks-reminder-bar a{color:inherit}.woocommerce-layout__header-tasks-reminder-bar p{font-size:13px}.woocommerce-layout__footer{background:#fff;border-top:1px solid #e0e0e0;box-shadow:0 2px 6px 0 rgba(0,0,0,.05);box-sizing:border-box;padding:0;position:fixed;width:calc(100% - 160px);bottom:-1px;z-index:1001}.woocommerce-profile-wizard__body .woocommerce-layout__footer{width:100%}@media(min-width:783px)and (max-width:960px){.woocommerce-layout__footer{width:calc(100% - 36px)}}@media(max-width:782px){.woocommerce-layout__footer{flex-flow:row wrap;width:100%}}.folded .woocommerce-layout__footer{width:calc(100% - 36px)}.woocommerce-transient-notices{position:absolute;right:16px;bottom:100%;margin-bottom:12px;z-index:100001;width:auto}.woocommerce-profile-wizard__body .woocommerce-transient-notices{right:unset;width:100%}.woocommerce-profile-wizard__body .woocommerce-transient-notices .components-snackbar{margin-right:auto;margin-left:auto}.components-snackbar.components-snackbar-explicit-dismiss{cursor:default}.components-snackbar__content{white-space:pre-line}.components-snackbar .components-snackbar__content-with-icon{margin-right:32px}.components-snackbar .components-snackbar__icon{position:absolute;top:24px;right:26px}.components-snackbar .components-snackbar__dismiss-button{margin-right:32px;cursor:pointer}.woocommerce-layout__activity-panel{display:flex;flex-direction:row;align-items:center;height:60px}.woocommerce-layout__activity-panel-tabs{width:100%;display:flex;height:60px;justify-content:flex-end}.woocommerce-layout__activity-panel-tabs .dashicon,.woocommerce-layout__activity-panel-tabs .gridicon{width:100%}.woocommerce-layout__activity-panel-tabs svg{width:24px;height:24px}.woocommerce-layout__activity-panel-tabs svg.woocommerce-layout__activity-panel-tab-icon{fill:none}.woocommerce-layout__activity-panel-tabs svg.woocommerce-layout__activity-panel-tab-icon path,.woocommerce-layout__activity-panel-tabs svg.woocommerce-layout__activity-panel-tab-icon rect{stroke:currentColor}.woocommerce-layout__activity-panel-tabs svg .setup-progress-slice{stroke:none}.woocommerce-layout__activity-panel-tabs svg .setup-progress-ring{stroke-width:2px}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__homescreen-display-options svg.woocommerce-layout__activity-panel-tab-icon{height:14px}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__homescreen-extension-tasklist-toggle{min-width:205px}.woocommerce-layout__activity-panel-tabs .components-icon-button{display:initial;text-indent:0;border-radius:0}.woocommerce-layout__activity-panel-tabs .components-icon-button.has-text svg{margin:0}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab{display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative;border:none;outline:none;cursor:pointer;background-color:#fff;width:100%;height:60px;color:#757575;white-space:nowrap}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:before{background-color:var(--wp-admin-theme-color);bottom:0;content:"";height:0;opacity:0;transition-property:height,opacity;transition-duration:.3s;transition-timing-function:ease-in-out;right:0;position:absolute;left:0}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.is-active,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.is-opened{color:#1e1e1e;box-shadow:none}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.is-active:before,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.is-opened:before{height:3px;opacity:1}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.woocommerce-layout__activity-panel-tab-wordpress-notices:after{content:" ";position:absolute;padding:1px;background:#d94f4f;border:2px solid #fff;width:4px;height:4px;display:inline-block;border-radius:50%;top:8px;right:50%}@media(min-width:783px)and (max-width:960px){.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.woocommerce-layout__activity-panel-tab-wordpress-notices:after{left:18px;right:auto;margin-right:0}}@media(min-width:961px){.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.woocommerce-layout__activity-panel-tab-wordpress-notices:after{left:28px;right:auto;margin-right:0}}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.components-button:not(:disabled):not([aria-disabled=true]):hover,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:hover{background-color:#f0f0f0;box-shadow:none}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.components-button:not(:disabled):not([aria-disabled=true]):hover.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.components-button:not(:disabled):not([aria-disabled=true]):hover.woocommerce-layout__activity-panel-tab-wordpress-notices:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:hover.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:hover.woocommerce-layout__activity-panel-tab-wordpress-notices:after{border-color:#e0e0e0}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.components-button:not(:disabled):not([aria-disabled=true]):focus,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:focus{box-shadow:inset 1px -1px 0 #757575,inset -1px 1px 0 #757575}@media(max-width:782px){.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.display-options{display:none}}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-popover{margin-top:0;z-index:1001}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-popover .components-menu-group{padding:12px}.woocommerce-layout__activity-panel-toggle-bubble.has-unread:after{content:" ";position:absolute;padding:1px;background:#ca4a1f;border:2px solid #fff;width:4px;height:4px;display:inline-block;border-radius:50%;top:6px;left:4px}@keyframes tabSwitch{0%,to{transform:translateX(0)}50%{transform:translateX(-100px)}}.woocommerce-layout__activity-panel-wrapper{height:calc(100vh - 106px);background:#f0f0f0;width:430px;transform:translateX(-100%);transition-property:transform box-shadow;transition-duration:.3s;transition-timing-function:ease-in-out;position:absolute;left:0;top:100%;z-index:1000;overflow-x:hidden;overflow-y:auto}@media(max-width:782px){.woocommerce-layout__activity-panel-wrapper{width:100%}}@media screen and (prefers-reduced-motion:reduce){.woocommerce-layout__activity-panel-wrapper{transition-duration:1ms}}@media(min-width:783px){.woocommerce-layout__activity-panel-wrapper{height:calc(100vh - 92px)}}.has-woocommerce-navigation .woocommerce-layout__activity-panel-wrapper{height:calc(100vh - 60px);top:60px}.woocommerce-layout__activity-panel-wrapper.is-open{transform:none;box-shadow:0 12px 12px 0 rgba(85,93,102,.3)}.woocommerce-layout__activity-panel-wrapper.is-switching{animation:tabSwitch;animation-duration:.3s}@media screen and (prefers-reduced-motion:reduce){.woocommerce-layout__activity-panel-wrapper.is-switching{animation:none}}.woocommerce-layout__activity-panel-wrapper .woocommerce-empty-content{padding-right:24px;padding-left:24px}.woocommerce-layout__activity-panel-avatar-flag-overlay{position:relative;top:-12px}.woocommerce-layout__activity-panel-avatar-flag-overlay .woocommerce-flag{position:relative;top:16px;border:2px solid #fff}.woocommerce-layout__notice-list-hide{display:none}.highlight-tooltip__container{position:absolute;width:0;height:0}.highlight-tooltip__container.highlight-tooltip__show{top:0;right:0;width:100%;height:100%}.highlight-tooltip__portal{width:100%;height:100%;position:relative}.highlight-tooltip__portal .highlight-tooltip__overlay{position:fixed;top:0;left:0;bottom:0;right:0;background-color:rgba(0,0,0,.35);z-index:100000;animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards}@media(prefers-reduced-motion:reduce){.highlight-tooltip__portal .highlight-tooltip__overlay{animation-duration:1ms}}.highlight-tooltip__popover .components-card{min-width:360px}.highlight-tooltip__popover .components-card__header{font-size:16px;font-size:1rem;font-weight:600;box-sizing:border-box}.highlight-tooltip__popover .components-card__footer{justify-content:flex-end;box-sizing:border-box}@media(max-width:782px){.woocommerce-layout__show-app-banner .woocommerce-layout__header-wrapper{padding-top:56px}}.woocommerce-mobile-app-banner{background-color:#3c2861;position:absolute;top:0;right:0;width:100%;display:flex;height:56px;align-items:center;padding:0 4px 0 6px}@media(min-width:401px){.woocommerce-mobile-app-banner{padding:0 10px 0 13px}}@media(min-width:783px){.woocommerce-mobile-app-banner{display:none}}.woocommerce-mobile-app-banner .gridicon{fill:#fff;margin-left:10px}.woocommerce-mobile-app-banner .components-button.is-secondary{margin-right:auto;color:#fff;box-shadow:inset 0 0 0 1px #fff}.woocommerce-mobile-app-banner .components-button.is-secondary:active,.woocommerce-mobile-app-banner .components-button.is-secondary:hover{color:#fff;box-shadow:inset 0 0 0 1px #fff;background:none}.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description{color:#fff;margin-right:8px}@media(min-width:401px){.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description{margin-right:13px}}.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description .woocommerce-mobile-app-banner__description__text{margin:0;font-size:10px}.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description .woocommerce-mobile-app-banner__description__text:first-child{font-weight:700}@media(min-width:401px){.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description .woocommerce-mobile-app-banner__description__text{margin-right:13px;font-size:13px}}.woocommerce-navigation{display:grid;grid-template-rows:min-content 1fr;height:100%}.woocommerce-navigation .woocommerce-navigation__wrapper h2>span{width:100%}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__menu{overflow-y:auto;margin-bottom:0;padding-bottom:24px}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__group+.components-navigation__group{margin-top:24px}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item{margin-bottom:0}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item .components-button{opacity:1}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item:not(:hover) .components-button{color:#ccc}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item:hover .components-button{color:#fff}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item.is-active .components-button{color:#fff}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item a.components-button{padding:6px 16px}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item:not(:hover) a.components-button{color:#ccc}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item.is-active a.components-button{color:#fff}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation{height:100%}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation>div{height:100%;display:grid;grid-template-rows:1fr min-content}.woocommerce-navigation .woocommerce-navigation__wrapper.is-root .components-navigation__menu-secondary{border-top:1px solid #2c3338;margin:0 -8px;padding:16px 8px 12px}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__group-title,.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__menu-title{color:#f0f0f0;opacity:1}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button{color:#ccc;opacity:1}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button,.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button span{font-size:13px;line-height:normal}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button:hover,.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button:hover:not(:disabled){color:#ddd}.woocommerce-navigation-header{display:flex;align-items:center;border:none;border-radius:0;height:auto}.woocommerce-navigation-header .woocommerce-navigation-header__site-icon.components-button{padding:12px;height:60px;color:#fff}.woocommerce-navigation-header .woocommerce-navigation-header__site-icon.components-button:focus,.woocommerce-navigation-header .woocommerce-navigation-header__site-icon.components-button:hover,.woocommerce-navigation-header .woocommerce-navigation-header__site-icon.components-button:not([aria-disabled=true]):active{color:#fff}.woocommerce-navigation-header .woocommerce-navigation-header__site-title.components-button{padding-right:0;color:#ccc;font-weight:600}.woocommerce-navigation-header .woocommerce-navigation-header__site-title.components-button:active,.woocommerce-navigation-header .woocommerce-navigation-header__site-title.components-button:focus,.woocommerce-navigation-header .woocommerce-navigation-header__site-title.components-button:hover{color:#e0e0e0}.woocommerce-navigation-header .woocommerce-navigation-header__site-title{padding-top:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.woocommerce-navigation{position:relative;width:240px;box-sizing:border-box;background-color:#1e1e1e;z-index:1100}@media(max-width:960px){.woocommerce-navigation{width:60px;height:60px}}.woocommerce-navigation .components-navigation{box-sizing:border-box}.woocommerce-navigation .components-navigation__menu-title{overflow:visible}.woocommerce-navigation .components-navigation__menu{scrollbar-color:#757575 #1e1e1e;scrollbar-width:thin}.woocommerce-navigation .components-navigation__menu::-webkit-scrollbar-thumb{border-radius:10px;background-color:#757575}.woocommerce-navigation .components-navigation__menu::-webkit-scrollbar-thumb:hover{background-color:#757575;width:8px;height:8px}.woocommerce-navigation .components-navigation__menu::-webkit-scrollbar{width:8px;height:8px}.woocommerce-navigation__wrapper{background-color:#1e1e1e;position:absolute;top:60px;width:100%;height:calc(100vh - 92px);overflow-y:auto}.is-wp-toolbar-disabled .woocommerce-navigation__wrapper{height:calc(100vh - 60px)}body.is-wc-nav-expanded .woocommerce-navigation{width:240px;height:100%}body.is-wc-nav-expanded font>.xdebug-error{margin-right:256px}body.is-wc-nav-folded .woocommerce-navigation{width:60px;height:60px;overflow:hidden}body.is-wc-nav-folded .woocommerce-navigation .woocommerce-navigation-header>*{display:none}body.is-wc-nav-folded .woocommerce-navigation .woocommerce-navigation-header__site-icon{display:block}body.is-wc-nav-folded .woocommerce-navigation .components-navigation{display:none}body.is-wc-nav-folded .woocommerce-transient-notices{right:16px}body.is-wc-nav-folded #wpbody{padding-right:0}.has-woocommerce-navigation #adminmenuback,.has-woocommerce-navigation #adminmenuwrap{display:none!important}.has-woocommerce-navigation.woocommerce_page_wc-reports .woo-nav-tab-wrapper,.has-woocommerce-navigation.woocommerce_page_wc-settings .woo-nav-tab-wrapper,.has-woocommerce-navigation.woocommerce_page_wc-status .woo-nav-tab-wrapper{display:none}.has-woocommerce-navigation.woocommerce_page_wc-reports .woocommerce .subsubsub,.has-woocommerce-navigation.woocommerce_page_wc-settings .woocommerce .subsubsub,.has-woocommerce-navigation.woocommerce_page_wc-status .woocommerce .subsubsub{font-size:14px;margin:5px 0}.has-woocommerce-navigation #wpcontent,.has-woocommerce-navigation #wpfooter{margin-right:0}@media(max-width:960px){.has-woocommerce-navigation #wpcontent,.has-woocommerce-navigation #wpfooter{margin-right:0}}.has-woocommerce-navigation #wpbody{padding-right:240px}@media(max-width:960px){.has-woocommerce-navigation #wpbody{padding-right:0}}.has-woocommerce-navigation .woocommerce-layout__header.is-embed-loading:before{content:"";position:fixed;width:240px;height:100%;background:#1e1e1e}@media(max-width:960px){.has-woocommerce-navigation .woocommerce-layout__header.is-embed-loading:before{width:60px;height:60px}}.has-woocommerce-navigation #woocommerce-embedded-root.is-embed-loading{margin-bottom:-32px}.has-woocommerce-navigation:not(.is-wp-toolbar-disabled) #wpbody-content{margin-top:32px}.has-woocommerce-navigation font>.xdebug-error{margin-top:60px}.woocommerce-navigation-category-title{display:flex;align-items:center;font-size:20px;line-height:28px}.woocommerce-navigation-category-title .woocommerce-navigation-favorite-button{margin-right:auto}.woocommerce-navigation-favorite-button.components-button .star-empty-icon{color:#949494}.woocommerce-navigation-favorite-button.components-button .star-filled-icon{color:#ffb900}.woocommerce-embedded-layout__primary{padding:0 20px}.woocommerce-embedded-layout__primary .components-card__footer,.woocommerce-embedded-layout__primary .components-card__header{box-sizing:border-box}@media(max-width:782px){.woocommerce-embedded-layout__primary{padding:0}}.woocommerce-recommended-payments-card{margin:0 0 10px 15px;animation:isLoaded;animation-duration:.25s}.woocommerce-recommended-payments-card .woocommerce-list__item:hover{background-color:#fff}.woocommerce-recommended-payments-card .woocommerce-list__item:hover .woocommerce-list__item-title{color:#1e1e1e}.woocommerce-recommended-payments-card .woocommerce-list__item-title{font-size:14px;color:#1e1e1e;font-weight:600}.woocommerce-recommended-payments-card .woocommerce-review-activity-card__section-controls{text-align:center}.woocommerce-recommended-payments-card .woocommerce-pill{margin-right:4px;padding:2px 8px}@media(max-width:480px){.woocommerce-recommended-payments-card .woocommerce-pill{margin-top:4px;margin-bottom:4px}}.woocommerce-recommended-payments-card .components-card__footer .gridicon{margin-right:4px}.woocommerce-recommended-payments-card .woocommerce-list__item-enter{opacity:0;max-height:100vh;transform:none}.woocommerce-recommended-payments-card .woocommerce-list__item-enter-active{opacity:1;transition:opacity .2s}.woocommerce-recommended-payments-card .woocommerce-list__item-after .components-button{margin-right:12px}.woocommerce-recommended-payments-card .woocommerce-list__item-before img{max-width:96px;height:36px;border-radius:8px}.woocommerce-recommended-payments-card .woocommerce-list__item-text,.woocommerce-recommended-payments-card .woocommerce-recommended-payments__header-heading{max-width:749px}@media(max-width:782px){.woocommerce-recommended-payments-card{margin:0 0 10px}}:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}.woocommerce_tax_settings_conflict_error{padding:15px 10px;min-width:400px;width:400px}.woocommerce_tax_settings_conflict_error_card_body{display:flex;flex-direction:row;padding-left:16px!important}.woocommerce_tax_settings_conflict_error_card_body__warning_icon{width:20px;height:20px;margin-block:10px;margin-left:16px}.woocommerce_tax_settings_conflict_error_card_body__body_text{margin-bottom:16px}.woocommerce_tax_settings_conflict_error_card_body__close_icon{padding:0;height:24px;color:grey}.woocommerce_admin_tax_settings_slotfill_td,.woocommerce_admin_tax_settings_slotfill_th{padding:0!important}[aria-labelledby=select2-woocommerce_tax_display_shop-container].is-conflict{border:red!important;border-style:solid!important;border-width:1px!important}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/app/style.css b/wp/wp-content/plugins/woocommerce/assets/client/admin/app/style.css
index 4dcae671..5ae375f6 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/app/style.css
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/app/style.css
@@ -1 +1 @@
-.woocommerce-admin-page .wrap{margin:0}.woocommerce-admin-page #wpcontent,.woocommerce-admin-page.woocommerce_page_wc-admin #wpbody-content{padding:0;overflow-x:hidden!important;min-height:calc(100vh - 32px)}@media(min-width:783px){.woocommerce-admin-page #wpbody-content{padding-left:0}}@media(max-width:782px){.woocommerce-admin-page .wp-responsive-open #woocommerce-embedded-root,.woocommerce-admin-page .wp-responsive-open #wpbody{position:relative;right:-14.5em}.woocommerce-admin-page #wpbody-content,.woocommerce-admin-page #wpcontent{min-height:calc(100vh - 46px)}}@media(min-width:961px){.woocommerce-admin-page #toplevel_page_wcadmin--analytics.menu-top>a:focus,.woocommerce-admin-page #toplevel_page_woocommerce.menu-top>a:focus{padding-bottom:1px}}#wpbody,.woocommerce-layout *{box-sizing:border-box}#wpbody{display:inline-block;width:100%;padding-top:0;margin-top:60px}#wpfooter{display:none}.woocommerce_page_wc-admin .woocommerce-filters-date__content:not(.is-mobile){z-index:2}@media(max-width:600px){#wpadminbar{position:fixed}html.wp-toolbar{padding-top:46px}}@media(max-width:782px){.jetpack-masterbar #wpadminbar #wp-admin-bar-menu-toggle{margin-top:-10px}.jetpack-masterbar #wpwrap .woocommerce-layout__header-heading{padding-left:60px}.jetpack-masterbar.wp-admin .wrap h1,.jetpack-masterbar.wp-admin .wrap h2{padding-left:0}}.woocommerce-admin-page .wp-has-current-submenu:after{right:0;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:8px solid transparent;border-right-color:#f1f1f1;top:0;margin-top:10px}@media(max-width:960px){.woocommerce-admin-page .wp-has-current-submenu:after{border-width:4px;margin-top:14px}}:root{--large-gap:40px;--main-gap:24px}@media(max-width:960px){:root{--large-gap:24px}}@media(max-width:782px){:root{--large-gap:16px;--main-gap:16px}}@keyframes loading-fade{0%{opacity:.7}50%{opacity:1}to{opacity:.7}}.woocommerce-layout select:hover{color:#1a1a1a}.woocommerce-layout .components-base-control select.components-select-control__input{max-width:100%;line-height:normal}.woocommerce-layout .components-panel__body>.components-panel__body-title:hover,.woocommerce-layout .woocommerce-experimental-list__item:hover,.woocommerce-layout .woocommerce-inbox-message:hover{background:#f6f7f7}.woocommerce-layout__jitm .jitm-card{margin:3rem 1.25rem 1.25rem}.woocommerce-layout__jitm-hide{display:none}body.woocommerce-admin-page .components-button.is-primary:not(:disabled):not([aria-disabled=true]):hover{color:#fff}body.woocommerce-admin-page .components-snackbar .components-button.is-tertiary{color:#fff}body.woocommerce-admin-page .components-snackbar .components-button.is-tertiary:not(:disabled):not([aria-disabled=true]):hover{color:#fff}.woocommerce-embed-page #wpbody .woocommerce-layout,.woocommerce-embed-page .woocommerce-layout__notice-list-hide+.wrap{padding-top:10px}.woocommerce-embed-page #wpbody-content,.woocommerce-embed-page #wpcontent{overflow-x:initial!important}.woocommerce-embed-page #wpbody-content{padding-top:0}.woocommerce-embed-page #wpbody-content .notice{margin-top:15px}.woocommerce-embed-page .wrap{padding:0 20px}@media(max-width:782px){.woocommerce-embed-page .wrap p.search-box{width:calc(100% - 40px)}}.woocommerce-embed-page .wrap .wrap{padding:0}.woocommerce-embed-page #screen-meta{border-right:0;margin:0}.woocommerce-embed-page #screen-meta-links{position:relative}.woocommerce-embed-page .notice{padding:1px 12px}.woocommerce-embed-page .woocommerce-layout__header.is-scrolled{box-shadow:0 8px 16px 0 rgba(85,93,102,.3)}.woocommerce-embed-page .woocommerce-layout__header .woocommerce-layout__header-heading{margin-top:0;margin-bottom:0}.woocommerce-embed-page #screen-meta-links.is-hidden-by-notices,.woocommerce-embed-page #screen-meta.is-hidden-by-notices{display:none!important}.woocommerce-embed-page .woocommerce-layout__primary{margin:0}@media(max-width:782px){.woocommerce-embed-page .woocommerce-layout__primary{padding-top:10px}}@keyframes isLoaded{0%{opacity:0}to{opacity:1}}.woocommerce-embed-page .woocommerce-layout__activity-panel-tabs{animation:isLoaded;animation-duration:2s}.woocommerce-embed-page .woocommerce-layout__notice-list-show{margin-top:10px;margin-bottom:16px}@media(max-width:600px){.woocommerce-embed-page .woocommerce-layout__notice-list-show{margin-top:80px;margin-bottom:-16px}}@media(min-width:601px)and (max-width:782px){.woocommerce-embed-page .woocommerce-layout__notice-list-show{margin-top:32px}}.woocommerce-embed-page .woocommerce-activity-card__actions a.components-button:not(.is-primary){color:#2e4453}.woocommerce-layout{margin:0;padding:0}.woocommerce-layout__loading{position:absolute;top:0;left:0;width:100%;height:100%}.woocommerce-layout__loading,.woocommerce-layout__no-match{display:flex;align-items:center;justify-content:center}.woocommerce-layout__no-match .components-card{max-width:680px;width:100%}.woocommerce-layout__primary{margin:var(--large-gap) 0 128px var(--large-gap)}@media(max-width:782px){.woocommerce-layout__primary{margin-top:20px}}.woocommerce-layout .woocommerce-layout__main{padding-right:40px;padding-right:var(--large-gap);max-width:100%}.woocommerce-admin-page .update-nag{display:none}.woocommerce-admin-page #wpbody.no-header{display:block;margin-top:0}.woocommerce-admin-page #wpbody.no-header .woocommerce-layout__primary{margin-top:0}.woocommerce-admin-is-loading #adminmenumain,.woocommerce-admin-is-loading #wpadminbar,.woocommerce-admin-is-loading #wpbody-content,.woocommerce-admin-is-loading #wpcontent,.woocommerce-admin-is-loading #wpfooter,.woocommerce-admin-is-loading .components-modal__screen-overlay,.woocommerce-admin-is-loading .error,.woocommerce-admin-is-loading .notice,.woocommerce-admin-is-loading .update-nag,.woocommerce-admin-is-loading .updated,.woocommerce-admin-is-loading .woocommerce-layout__header,.woocommerce-admin-is-loading .woocommerce-message,.woocommerce-admin-is-loading .woocommerce-store-alerts{display:none}.woocommerce-admin-full-screen{background:#f6f7f7;color:#50575e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}.woocommerce-admin-full-screen #wpwrap{top:0}.woocommerce-admin-full-screen #wpbody-content{min-height:100vh!important}.woocommerce-admin-full-screen #adminmenumain,.woocommerce-admin-full-screen #wpcontent>*,.woocommerce-admin-full-screen .error,.woocommerce-admin-full-screen .notice,.woocommerce-admin-full-screen .update-nag,.woocommerce-admin-full-screen .updated,.woocommerce-admin-full-screen .woocommerce-layout__header,.woocommerce-admin-full-screen .woocommerce-message,.woocommerce-admin-full-screen .woocommerce-store-alerts{display:none}.woocommerce-admin-full-screen #wpcontent{margin-left:0!important}.woocommerce-admin-full-screen #wpcontent>#wpbody{display:block;margin-top:0!important}.woocommerce-admin-full-screen.has-woocommerce-navigation #wpbody{padding-left:0}.is-wp-toolbar-disabled #wpadminbar{display:none!important}.wp-toolbar .is-wp-toolbar-disabled{margin-top:-32px}@media(max-width:600px){.wp-toolbar .is-wp-toolbar-disabled{margin-top:-46px}}.woocommerce-admin-page .components-modal__frame .components-button.is-button,.woocommerce-profile-wizard__body .components-button.is-button,.woocommerce-task-dashboard__container .components-button.is-button{height:48px;padding-left:25px;padding-right:25px;text-align:center;font-size:14px;line-height:36px;font-weight:500;align-items:center}.woocommerce-admin-page .components-modal__frame .components-button.is-button:disabled,.woocommerce-profile-wizard__body .components-button.is-button:disabled,.woocommerce-task-dashboard__container .components-button.is-button:disabled{cursor:not-allowed}.components-modal__header .components-button svg+span{display:none}.components-modal__frame.woocommerce-usage-modal{width:600px;max-width:100%}.components-modal__frame.woocommerce-usage-modal .components-modal__header{margin-bottom:0}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__wrapper{flex-grow:1;display:flex;flex-direction:column}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__wrapper a{color:#50575e}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__wrapper button.is-primary{align-self:flex-end}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__actions{display:flex;justify-content:flex-end;margin-top:16px}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__actions button{margin-left:16px}.woocommerce-payments__usage-modal .components-modal__header{height:auto;padding:24px 24px 0}.woocommerce-payments__usage-modal .components-modal__header .components-modal__header-heading{font-size:24px;line-height:32px;margin:0 0 24px}.woocommerce-payments__usage-modal .woocommerce-payments__usage-modal-message{padding:16px 0;font-size:16px;line-height:24px}.woocommerce-payments__usage-modal .woocommerce-payments__usage-footer{display:flex;justify-content:flex-end;padding:16px 0}.woocommerce-payments__usage-modal .woocommerce-payments__usage-footer button{margin-left:16px}.components-modal__frame.woocommerce-cart-modal{width:600px;max-width:100%}.components-modal__frame.woocommerce-cart-modal .components-modal__header{border-bottom:0;margin-bottom:16px;margin-top:16px}.components-modal__frame.woocommerce-cart-modal .components-modal__header button{display:none}.components-modal__frame.woocommerce-cart-modal .components-modal__header-heading{font-style:normal;font-weight:400;font-size:24px;line-height:32px}.components-modal__frame.woocommerce-cart-modal .woocommerce-list{margin-top:24px}.components-modal__frame.woocommerce-cart-modal .woocommerce-list .woocommerce-list__item:first-child{border-top:1px solid #dcdcde}.components-modal__frame.woocommerce-cart-modal .woocommerce-list__item{border-bottom:1px solid #dcdcde}.components-modal__frame.woocommerce-cart-modal .woocommerce-cart-modal__help-text{font-size:16px;line-height:24px}.components-modal__frame.woocommerce-cart-modal .woocommerce-cart-modal__actions{text-align:right}.components-modal__frame.woocommerce-cart-modal .woocommerce-cart-modal__actions button.is-link{margin-right:16px;text-decoration:none;font-weight:600;font-size:14px}.components-modal__frame.woocommerce-cart-modal .woocommerce-cart-modal__actions button.is-primary{align-self:flex-end}.woocommerce-layout__header{background:#fff;box-sizing:border-box;padding:0;position:fixed;width:calc(100% - 160px);top:32px;z-index:1001}.woocommerce-layout__header.is-scrolled{box-shadow:0 8px 8px 0 rgba(85,93,102,.3)}.woocommerce-layout__header .woocommerce-layout__header-wrapper{display:flex;align-items:center;min-height:60px}@media(max-width:782px){.woocommerce-layout__header{flex-flow:row wrap;top:46px;width:100%}}@media(min-width:783px)and (max-width:960px){.woocommerce-layout__header{width:calc(100% - 36px)}}.woocommerce-layout__header .woocommerce-layout__header-breadcrumbs-wrapper{display:flex;justify-content:space-between;flex-direction:row}.woocommerce-layout__header .woocommerce-layout__header-heading{display:flex;align-items:center;padding:0 0 0 40px;padding:0 0 0 var(--large-gap);flex:1 auto;height:60px;background:#fff;font-weight:600;font-size:14px}.folded .woocommerce-layout__header{width:calc(100% - 36px)}@media(max-width:782px){.folded .woocommerce-layout__header{width:100%}}.is-wp-toolbar-disabled .woocommerce-layout__header{top:0}.has-woocommerce-navigation .woocommerce-layout__header{left:0;width:100%}.woocommerce-admin-page #contextual-help-link-wrap,.woocommerce-admin-page #screen-options-link-wrap{margin-top:-1px}.wp-responsive-open .woocommerce-layout__header{margin-left:2px}.woocommerce-task-payment{display:flex;flex-direction:row;align-items:center;position:relative;overflow:hidden}.woocommerce-task-payment .components-card__media{width:85px;flex-shrink:0;align-self:flex-start}.woocommerce-task-payment .components-card__media .is-placeholder,.woocommerce-task-payment .components-card__media img,.woocommerce-task-payment .components-card__media svg{margin:auto;max-width:36px;display:block}.woocommerce-task-payment .components-card__media .is-placeholder{height:36px}.woocommerce-task-payment .woocommerce-task-payment__footer .is-placeholder{width:70px;height:36px}.woocommerce-task-payment>.components-form-toggle{min-width:52px}.woocommerce-task-payment .woocommerce-task-payment__title{display:flex;align-items:center;font-size:16px;font-weight:500;color:#2c3338;margin-top:0;margin-bottom:8px}.woocommerce-task-payment .woocommerce-task-payment__title .woocommerce-pill{margin-left:8px}.woocommerce-task-payment .woocommerce-task-payment__title .woocommerce-pill.pill-green{color:#008a20;border-color:#008a20}.woocommerce-task-payment .woocommerce-task-payment__content{font-size:14px;color:#50575e;margin:0 36px 0 0}.woocommerce-task-payment .woocommerce-task-payment__content .text-style-strong{font-weight:700}.woocommerce-task-payment .woocommerce-task-payment__content p{font-size:12px}.woocommerce-task-payment .woocommerce-task-payment__transaction-processors_images{padding-top:16px;display:flex;flex-direction:row;flex-wrap:wrap;gap:8px}.woocommerce-task-payment .woocommerce-task-payment__transaction-processors_images img{height:24px}.woocommerce-task-payment .woocommerce-task-payment__description{flex:1}@media(max-width:600px){.woocommerce-task-payment{flex-wrap:wrap}.woocommerce-task-payment .woocommerce-task-payment__content{margin:0}.woocommerce-task-payment .components-card__media{order:1;flex-basis:50%}.woocommerce-task-payment .components-card__media>img,.woocommerce-task-payment .components-card__media>svg{margin:0 0 0 24px}.woocommerce-task-payment .woocommerce-task-payment__description{order:3;padding:24px 0 0 24px}.woocommerce-task-payment .woocommerce-task-payment__footer{flex-basis:50%;align-self:flex-start;order:2;text-align:right}}.woocommerce-payment-gateway-suggestions-list-placeholder .is-placeholder{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent;display:inline-block;max-width:240px;width:80%}.woocommerce-payment-gateway-suggestions-list-placeholder .is-placeholder:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-payment-gateway-suggestions-list-placeholder .is-placeholder{animation:none}}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-label{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent;display:inline-block;width:60%}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-label:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-label{animation:none}}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-icon{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-icon:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-icon{animation:none}}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step:first-child .woocommerce-stepper__step-label{width:30%}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-number{display:none}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner{min-width:100%;margin-bottom:24px}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__body{padding:30px 0 0 24px;justify-content:space-between}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__text_container{width:305px;margin-left:0}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__footer{flex-direction:column;align-items:flex-start;padding:20px 38.2px 30px 24px}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__footer_icon_container{margin-top:12px;margin-left:-5px}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__footer_icon_container>svg{width:38px;height:24px;margin-right:8px}.woocommerce-wcpay-suggestion .woocommerce-wcpay-benefits{margin-bottom:24px}.woocommerce-task-payments .components-card+.components-card{margin-top:24px}.woocommerce-task-payments .woocommerce-task-payment__setup_required{display:flex;align-items:center;font-size:14px;margin-left:12px;font-weight:400;gap:3px}.woocommerce-task-payments .woocommerce-task-payment__setup_required>svg{fill:#efb854}.woocommerce-task-payments .components-card__header{font-size:20px;font-weight:400;line-height:28px;margin:0;display:flex;flex-direction:column;align-items:flex-start}.woocommerce-task-payments .woocommerce-task-payment-header__description{margin:0;color:#757575;font-weight:400;font-size:14px}.woocommerce-task-payments .components-card__footer a.components-button .gridicon{margin-left:4px}.woocommerce-task-payments .woocommerce-task-payment__recommended-pill{border:1px solid #dcdcde;border-radius:28px;display:inline-block;font-size:13px;margin-left:12px;padding:1px 10px}.woocommerce-task-payments .woocommerce-task-payment__recommended-pill span{max-width:70px}.woocommerce-task-payments .components-card__divider:last-child{display:none}.woocommerce-task-payments .woocommerce-task-payment-wcpay{margin-bottom:0}.woocommerce-task-payment-method>h3{margin:0;color:#1d2327}.woocommerce-task-payment-method p{font-size:14px;color:#646970;font-weight:400;margin-top:16px;margin-bottom:16px}.woocommerce-task-payment-method__fields{display:grid;grid-template-columns:1fr 1fr;grid-gap:0 16px;margin-bottom:8px}.woocommerce-task-payment-method__fields .components-base-control{margin-bottom:0}.woocommerce-shipping-rate{display:flex;padding-top:12px;padding-bottom:12px}.woocommerce-shipping-rate .woocommerce-shipping-rate__main{width:100%}.woocommerce-shipping-rate .woocommerce-shipping-rate__icon{padding-top:16px;margin-right:24px}.woocommerce-shipping-rate .woocommerce-shipping-rate__name{align-items:center;display:flex;padding-top:16px;font-size:16px;line-height:22px;color:#1d2327;margin-bottom:12px;border-top:1px solid #dcdcde}.woocommerce-shipping-rate .woocommerce-shipping-rate__name .components-form-toggle{margin-left:auto;height:18px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .components-base-control{margin-bottom:0}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .components-base-control__label{display:block;position:relative;top:-8px;width:100%;font-size:12px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .text-control-with-affixes__prefix,.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .text-control-with-affixes__suffix{font-size:16px;line-height:24px;color:#646970;border:0;padding:0;align-items:center;display:flex;top:-11px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .components-text-control__input{position:relative;top:-11px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .text-control-with-affixes__prefix{margin-right:4px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .text-control-with-affixes__suffix{margin-left:4px}.woocommerce-task-shipping-recommendation__plugins-install{padding:24px 20px;border:1px solid #ddd;border-radius:3px;justify-content:space-around;margin-bottom:24px}.woocommerce-task-shipping-recommendation__plugins-install.dual{display:flex;flex-direction:column;justify-content:flex-start;width:285px}.woocommerce-task-shipping-recommendation__plugins-install.dual p{margin-top:0;margin-bottom:15px;color:#757575}.woocommerce-task-shipping-recommendation__plugins-install.dual .plugins-install__plugin-banner-image{display:flex;margin-bottom:24px}.woocommerce-task-shipping-recommendation__plugins-install.dual .plugins-install__plugin-banner-image img{width:120px;height:28px}.woocommerce-task-shipping-recommendation__plugins-install.single{display:flex}.woocommerce-task-shipping-recommendation__plugins-install.single .plugins-install__list{max-width:360px}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__plugin-banner-image{display:flex;width:150px}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__plugin-banner-image img{width:100%}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__list{display:flex;flex-direction:column;justify-content:space-around;gap:10px}.woocommerce-task-shipping-recommendation__plugins-install .woocommerce-task-shipping-recommendations_plugins-buttons{display:flex;justify-content:space-between;margin-top:24px;flex-grow:1;align-items:flex-end}.woocommerce-task-shipping-recommendation__plugins-install .woocommerce-task-shipping-recommendations_plugins-buttons button{min-width:40%;padding-inline:8px;margin-inline:4px}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__list-item{display:flex;align-items:center}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__list-icon{margin-right:12px}.woocommerce-task-shipping-recommendation_plugins-install-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:10px}.woocommerce-task-shipping-recommendations_skip-button.dual{margin-inline:calc(50% - 34px)}.woocommerce-task-marketing .components-card__header{flex-direction:column;align-items:flex-start;display:flex!important}.woocommerce-task-marketing .components-card__header h2{align-self:start!important;color:#1e1e1e;font-size:20px;margin-bottom:0}.woocommerce-task-marketing .components-card__header span{margin-left:0;margin-top:8px;color:#757575}.woocommerce-plugin-list__plugin{display:flex;padding:24px;border-top:1px solid #e0e0e0}.woocommerce-plugin-list__plugin:first-child{border-top:0}.woocommerce-plugin-list__plugin h4{margin-bottom:12px;font-weight:600;color:#1e1e1e}.woocommerce-plugin-list__plugin p{color:#757575;font-weight:400}.woocommerce-plugin-list__plugin-logo{margin-right:45px;display:flex;align-items:center}.woocommerce-plugin-list__plugin-logo img{width:50px}.woocommerce-plugin-list__plugin-text{max-width:370px;margin-right:16px}.woocommerce-plugin-list__plugin-text .woocommerce-pill{color:#646970;margin-left:12px}.woocommerce-plugin-list__plugin-action{display:flex;align-items:center;margin-left:auto}.woocommerce-plugin-list__title{padding:24px 30px 0;position:relative}.woocommerce-plugin-list__title h3{font-weight:500;color:#000;text-transform:uppercase}.woocommerce-plugin-list__plugin{border-top:none;border-bottom:1px solid #e0e0e0}.woocommerce-tax-partner-card{border:1px solid #ddd;border-radius:3px;margin:0 8px 16px;padding:20px;display:flex;flex-direction:column}.woocommerce-tax-partner-card a{text-decoration:none}.woocommerce-tax-partner-card__logo{margin-bottom:8px}.woocommerce-tax-partner-card__logo img{max-height:35px}.woocommerce-tax-partner-card__description{color:#757575}.woocommerce-tax-partner-card__benefits{color:#1e1e1e;list-style:none}.woocommerce-tax-partner-card__benefits li{margin-bottom:8px;display:flex}.woocommerce-tax-partner-card__benefits li svg{margin-right:10px}.woocommerce-tax-partner-card__action{margin-top:auto}.woocommerce-tax-partner-card__terms{color:#949494;font-size:9px;margin-bottom:8px}.woocommerce-tax-partners__partners{display:grid;grid-template-columns:1fr 1fr}.woocommerce-tax-partners__partners.woocommerce-tax-partners__partners-count-1{grid-template-columns:1fr}@media(max-width:782px){.woocommerce-tax-partners__partners{grid-template-columns:1fr}}.woocommerce-tax-partners__partners-count-1 .woocommerce-tax-partners__partners{grid-template-columns:1fr;justify-items:center}.woocommerce-tax-partners .components-card__body.is-size-medium{padding:36px}.woocommerce-tax-partners .components-card__header{line-height:28px;font-size:20px}.woocommerce-tax-partners__other-actions{text-align:center;list-style:none;display:flex;align-items:center;justify-content:center;margin:0}@media(max-width:782px){.woocommerce-tax-partners__other-actions{flex-direction:column}}.woocommerce-tax-partners__other-actions li{margin-top:16px;margin-right:4px}.woocommerce-tax-partners__other-actions li button.is-tertiary{padding:0;height:auto}.woocommerce-tax-partners__other-actions li:after{content:"•";color:#bbb;margin-left:4px}@media(max-width:782px){.woocommerce-tax-partners__other-actions li:after{content:""}}.woocommerce-tax-partners__other-actions li:last-child{margin-right:0}.woocommerce-tax-partners__other-actions li:last-child:after{content:""}.woocommerce-task-tax__automated-tax-control{display:flex;align-items:center;margin-top:16px}.woocommerce-task-tax__automated-tax-control i{margin-left:16px;margin-right:24px}.woocommerce-task-tax__automated-tax-control .woocommerce-task-tax__automated-tax-control-inner{border-top:1px solid #dcdcde;display:flex;align-items:center;flex:1;font-size:16px;padding-top:16px;padding-bottom:16px}.woocommerce-task-tax__automated-tax-control .components-form-toggle{margin-left:auto}.woocommerce-task-tax__success{display:flex;flex-direction:column;align-items:center;padding:40px;text-align:center}.woocommerce-task-tax__success .woocommerce-task-tax__success-icon{font-size:48px;height:48px;align-items:center;display:flex}.woocommerce-task-tax__success #woocommerce-task-tax__success-message{font-size:32px;font-weight:400}.woocommerce-task-tax__success p{margin-top:0;font-size:16px}.woocommerce-task-dashboard__container .woocommerce-task-card{max-width:680px;margin-left:auto;margin-right:auto;margin-bottom:24px}.woocommerce-task-dashboard__container .woocommerce-task-card .components-card__header.is-size-large{padding-bottom:12px}.woocommerce-task-dashboard__container .woocommerce-task-card .components-card__header.is-size-large .woocommerce-card__menu{margin-top:8px}.woocommerce-task-dashboard__container .woocommerce-task-card .wooocommerce-task-card__header{display:flex}.woocommerce-task-dashboard__container .woocommerce-task-card .wooocommerce-task-card__header .components-text+.woocommerce-badge{margin-left:16px}.woocommerce-task-dashboard__container .woocommerce-task-card .woocommerce-list__item-text .woocommerce-pill{padding:1px 8px;margin-left:8px}.woocommerce-task-dashboard__container .woocommerce-task-card .components-popover__content{min-width:unset}.woocommerce-task-dashboard__container .woocommerce-task-payments{width:680px;margin:auto;max-width:100%}.woocommerce-task-list__item-expandable-content,.woocommerce-task__additional-info,.woocommerce-task__estimated-time{color:#757575;font-weight:400;font-size:12px}.woocommerce-task-list__item-expandable-content{font-size:13px}.components-modal__screen-overlay{background:rgba(43,45,47,.4)}.components-modal__frame .components-modal__header{margin-bottom:0}.components-modal__frame .woocommerce-task-payments__stripe-error-wrapper{align-items:flex-end;flex-grow:1;display:flex;flex-direction:column}.woocommerce-task-dashboard__container .woocommerce-stepper button.components-button.is-primary{margin:0 8px 0 0}.woocommerce-task-dashboard__container button.components-button.is-link{margin:0;height:auto;color:#50575e;font-weight:400}.woocommerce-task-card__prompt{width:100%;min-width:100%;margin-bottom:24px;margin-top:-4px;cursor:default}.woocommerce-task-card__prompt .components-snackbar__content{display:block;align-items:unset;justify-content:unset}.woocommerce-task-card__prompt .components-snackbar__content span{margin-left:-24px}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions button.is-link,.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions button.is-link:active,.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions button.is-link:focus{color:#fff;margin-left:24px;background:transparent}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions button.is-link:hover{color:#fff}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-pointer{border-bottom:10px solid #1e1e1e;border-left:10px solid transparent;border-right:10px solid transparent;position:relative;width:0;height:0;display:inline-block;top:-30px}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-content{display:flex;align-items:baseline;justify-content:space-between;max-height:10px;margin-left:24px;position:relative;top:-40px}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions{margin-right:-16px}.woocommerce-task-card__prompt:hover .woocommerce-task-card__prompt-pointer{border-bottom-color:#1e1e1e}.woocommerce-task-dashboard__container .muriel-component{margin-top:16px;margin-bottom:16px}.woocommerce-task-dashboard__container .components-base-control.has-error{margin-bottom:32px!important;border-color:#d63638}@media(max-width:782px){.woocommerce-task-dashboard__container .components-base-control.has-error{margin-bottom:44px!important}}.woocommerce-task-dashboard__container .components-base-control.has-error .components-base-control__help{top:100%;left:12px;position:absolute;margin-top:4px;font-size:12px;font-style:normal;color:#d63638}.woocommerce-task-dashboard__container .components-form-toggle{display:inline-block}.woocommerce-task-dashboard__container .components-form-toggle label{font-size:14px}.woocommerce-task-dashboard__container .components-form-toggle .components-base-control{display:inline-block}.woocommerce-task-dashboard__container .components-form-toggle .components-base-control__field{margin-bottom:0}.woocommerce-task-dashboard__container .woocommerce-task__caption{color:#757575;margin-top:16px}.woocommerce-task-dashboard__container .woocommerce-task__caption.is-tos{margin-bottom:16px}.woocommerce-task-list__setup .woocommerce-experimental-list .woocommerce-experimental-list__item.complete{text-decoration:line-through;color:var(--wp-admin-theme-color)}.woocommerce-task-list__setup .woocommerce-experimental-list .woocommerce-experimental-list__item.complete .woocommerce-task-list__item-title{color:var(--wp-admin-theme-color)}.woocommerce-task-progress-header{position:relative;min-height:28px}.woocommerce-task-progress-header h1{font-size:24px}.woocommerce-task-progress-header p{color:#757575;font-size:16px;line-height:24px;margin-top:8px}.woocommerce-task-progress-header .woocommerce-task-progress-header__progress-bar{appearance:none;border:1px solid #ddd;border-radius:16px;height:12px;width:100%;margin-bottom:0;background-color:#fff}.woocommerce-task-progress-header .woocommerce-task-progress-header__progress-bar::-moz-progress-bar{background-color:var(--wp-admin-theme-color);border-radius:16px}.woocommerce-task-progress-header .woocommerce-task-progress-header__progress-bar::-webkit-progress-bar{background-color:#fff;border-radius:16px}.woocommerce-task-progress-header .woocommerce-task-progress-header__progress-bar::-webkit-progress-value{background-color:var(--wp-admin-theme-color);border-bottom-left-radius:16px;border-top-left-radius:16px}.woocommerce-task-progress-header .woocommerce-card__menu{position:absolute;right:0;top:-7px}.woocommerce-setup-panel .woocommerce-task-progress-header{padding:16px}.woocommerce-setup-panel .woocommerce-task-progress-header h1{font-size:16px;font-weight:600}.woocommerce-setup-panel .woocommerce-task-progress-header p{font-size:16px}.woocommerce-setup-panel .woocommerce-task-progress-header .woocommerce-card__menu{top:17px}@media(max-width:782px){.woocommerce-task-progress-header{padding-left:var(--large-gap);padding-right:var(--large-gap)}}h1.woocommerce-task-progress-header__title{padding-top:4px}@media(max-width:782px){h1.woocommerce-task-progress-header__title{padding-left:var(--large-gap);padding-right:var(--large-gap)}}.wooocommerce-task-card__header .wooocommerce-task-card__header-subtitle{color:#757575;margin-bottom:24px}.wooocommerce-task-card__finished-header-image{max-width:75%}.customer-feedback-simple__container{height:64px}.woocommerce-task-card__header-menu{position:absolute;right:0;top:0}.wooocommerce-task-card__header-ces-feedback{height:64px;display:flex;justify-content:center;align-items:center}.woocommerce-task-header__contents-container.woocommerce-task-header__customize-store img.svg-background{padding-right:16px;padding-top:9px}.woocommerce-homescreen .woocommerce-task-dashboard__container:empty{margin-bottom:0}.woocommerce-task-dashboard__container .woocommerce-homescreen-card{max-width:none;width:100%}.woocommerce-task-dashboard__container .wooocommerce-task-card__header-container{display:flex;position:relative;border-bottom:1px solid #dcdcde}.woocommerce-task-dashboard__container .wooocommerce-task-card__header{width:100%;flex:1}.woocommerce-task-dashboard__container .woocommerce-ellipsis-menu{position:absolute;top:16px;right:24px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .components-card__header{background:#fff;height:130px;display:block}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .components-card__header .is-placeholder{margin:20px;width:100%;height:90px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .wooocommerce-task-card__header{align-self:inherit}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-task-list__item-before .is-placeholder{height:36px;width:36px;border-radius:50%}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-task-list__item-text .is-placeholder{width:80%}.woocommerce-task-dashboard__container .woocommerce-task-card.completed,.woocommerce-task-dashboard__container .woocommerce-task-card.completed .components-card__header{display:block}.woocommerce-task-dashboard__container .woocommerce-task-card.completed h2{margin-top:24px;margin-bottom:12px}.woocommerce-task-dashboard__container .woocommerce-task-card.completed .wooocommerce-task-card__header{display:block;text-align:center}.woocommerce-task-dashboard__container .woocommerce-task-card.completed button.is-secondary{margin-right:12px}.woocommerce-task-dashboard__container.setup-task-list{max-width:1032px;display:flex;flex-direction:row;margin:0 auto;justify-content:space-between}.woocommerce-task-dashboard__container.setup-task-list ul li.complete .woocommerce-task-list__item-title{font-weight:600;color:#949494}.woocommerce-task-dashboard__container.setup-task-list ul li{display:block;width:100%;border-right:1px solid #e0e0e0;border-top:none;padding:16px 24px}.woocommerce-task-dashboard__container.setup-task-list ul li:last-child{border-right:none}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active{box-shadow:inset 0 -4px 0 0 var(--wp-admin-theme-color)}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active .woocommerce-task-list__item-badge{background-color:#fff;position:relative;z-index:1}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active:after{background-color:var(--wp-admin-theme-color);opacity:.1;content:"";top:0;left:0;position:absolute;width:100%;height:100%;pointer-events:none}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete) .woocommerce-task__icon{border:1px solid var(--wp-admin-theme-color);background:transparent}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item.complete:not(.complete) .woocommerce-task__icon{border:none}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item-before{display:block;padding:0}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item-text{margin-top:10px}.woocommerce-task-dashboard__container.setup-task-list .numbered-circle,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-1 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-2 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-3 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-4 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-5 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-6 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-7 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-8 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-9 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-10 .woocommerce-task__icon:after{justify-content:center;display:flex;align-items:center;height:100%;width:100%}.woocommerce-task-dashboard__container.setup-task-list ul{display:block}.woocommerce-task-dashboard__container.setup-task-list ul li{display:grid;grid-template-columns:48px auto 48px;border-right:none;border-bottom:1px solid #e0e0e0}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active{box-shadow:inset 5px 0 0 0 var(--wp-admin-theme-color);transition:box-shadow .1s linear}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item-text{display:block;padding:0;margin-top:0}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:65%}@media(max-width:600px){.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:100%}}.woocommerce-task-dashboard__container.setup-task-list .svg-background{right:6%}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-1 .woocommerce-task__icon:after{content:"1";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-2 .woocommerce-task__icon:after{content:"2";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-3 .woocommerce-task__icon:after{content:"3";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-4 .woocommerce-task__icon:after{content:"4";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-5 .woocommerce-task__icon:after{content:"5";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-6 .woocommerce-task__icon:after{content:"6";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-7 .woocommerce-task__icon:after{content:"7";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-8 .woocommerce-task__icon:after{content:"8";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-9 .woocommerce-task__icon:after{content:"9";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-10 .woocommerce-task__icon:after{content:"10";color:var(--wp-admin-theme-color);font-weight:700}@media(max-width:782px){.woocommerce-task-dashboard__container.setup-task-list ul{display:block}.woocommerce-task-dashboard__container.setup-task-list ul li{display:grid;grid-template-columns:48px auto 48px;border-right:none;border-bottom:1px solid #e0e0e0}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active{box-shadow:inset 5px 0 0 0 var(--wp-admin-theme-color);transition:box-shadow .1s linear}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item-text{display:block;padding:0;margin-top:0}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:65%}}@media(max-width:782px)and (max-width:782px){.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:380px}}@media(max-width:782px)and (max-width:600px){.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:100%}}@media(max-width:782px){.woocommerce-task-dashboard__container.setup-task-list .svg-background{right:6%}}.woocommerce-setup-panel .woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents-container{padding:16px}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents-container{padding:20px 24px;position:relative;flex:1;overflow:hidden;width:100%}.woocommerce-task-dashboard__container.setup-task-list .svg-background{position:absolute;z-index:0;right:24px;max-width:25%;max-height:150px;width:auto;height:auto}@media(max-width:600px){.woocommerce-task-dashboard__container.setup-task-list .svg-background{display:none}}@media(max-width:782px){.woocommerce-task-dashboard__container.setup-task-list .svg-background{right:.5%;width:40%}}.woocommerce-task-dashboard__container.setup-task-list .svg-background .admin-theme-color{fill:var(--wp-admin-theme-color)}.woocommerce-task-dashboard__container.setup-task-list .svg-background .admin-theme-color-darker-10{fill:var(--wp-admin-theme-color-darker-10)}.woocommerce-task-dashboard__container.setup-task-list .svg-background .admin-theme-color-darker-20{fill:var(--wp-admin-theme-color-darker-20)}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:70%;position:relative;z-index:1}@media(max-width:782px){.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:380px}}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents p,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents span{color:#757575}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents p:first-of-type{margin-top:4px}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__timer{display:flex;align-items:center;line-height:22px;margin-bottom:0}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__timer img{margin-right:6px}.woocommerce-task-dismiss-modal{width:565px;max-width:100%}.woocommerce-task-dismiss-modal .components-modal__header{border-bottom:1px solid #ddd}.woocommerce-task-dismiss-modal .woocommerce-usage-modal__message{box-sizing:border-box;border-bottom:1px solid #ddd;padding:0 32px;display:flex;flex-direction:row;justify-content:space-between;background:#fff;align-items:center;height:60px;z-index:10;position:relative;position:sticky;top:0;margin:0 -32px 24px;font-size:1.2em}.woocommerce-task-dismiss-modal .woocommerce-usage-modal__actions{display:flex;justify-content:flex-end;margin-top:16px}.woocommerce-task-dismiss-modal .woocommerce-usage-modal__actions button{margin-left:16px}.woocommerce-layout__header-back-button{cursor:pointer;margin-left:40px;margin-left:var(--large-gap);margin-right:-16px;display:flex;z-index:2}.woocommerce-layout__header-back-button:focus{box-shadow:inset -1px -1px 0 #757575,inset 1px 1px 0 #757575}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-card__body{border-top:1px solid #dcdcde}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .is-placeholder{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent;display:inline-block;height:16px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .is-placeholder:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .is-placeholder{animation:none}}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-card__title .is-placeholder{width:70%;height:28px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-list__item-before .is-placeholder{height:36px;width:36px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-list__item-text{width:100%}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-list__item-text .woocommerce-list__item-title .is-placeholder{height:22px;width:60%}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-list__item-after .is-placeholder{height:18px;width:60px}.woocommerce-task-list__item.woocommerce-list__item-enter{opacity:0;max-height:0}.woocommerce-task-list__item.woocommerce-list__item-enter-active{opacity:1;max-height:100px;transition:opacity .5s,max-height .5s}.woocommerce-task-list__item.woocommerce-list__item-exit{opacity:1;max-height:100px}.woocommerce-task-list__item.woocommerce-list__item-exit-active{opacity:0;max-height:0;transition:opacity .5s,max-height .5s}.woocommerce-layout__header-tasks-reminder-bar{height:40px;background-color:#007cba;display:flex;justify-content:space-between;align-items:center;color:#fff}.woocommerce-layout__header-tasks-reminder-bar:before{content:""}.woocommerce-layout__header-tasks-reminder-bar button{color:inherit}.woocommerce-layout__header-tasks-reminder-bar button:hover{opacity:.7;color:inherit}.woocommerce-layout__header-tasks-reminder-bar a{color:inherit}.woocommerce-layout__header-tasks-reminder-bar p{font-size:13px}.woocommerce-layout__footer{background:#fff;border-top:1px solid #e0e0e0;box-shadow:0 2px 6px 0 rgba(0,0,0,.05);box-sizing:border-box;padding:0;position:fixed;width:calc(100% - 160px);bottom:-1px;z-index:1001}.woocommerce-profile-wizard__body .woocommerce-layout__footer{width:100%}@media(min-width:783px)and (max-width:960px){.woocommerce-layout__footer{width:calc(100% - 36px)}}@media(max-width:782px){.woocommerce-layout__footer{flex-flow:row wrap;width:100%}}.folded .woocommerce-layout__footer{width:calc(100% - 36px)}.woocommerce-transient-notices{position:absolute;left:16px;bottom:100%;margin-bottom:12px;z-index:100001;width:auto}.woocommerce-profile-wizard__body .woocommerce-transient-notices{left:unset;width:100%}.woocommerce-profile-wizard__body .woocommerce-transient-notices .components-snackbar{margin-left:auto;margin-right:auto}.components-snackbar.components-snackbar-explicit-dismiss{cursor:default}.components-snackbar__content{white-space:pre-line}.components-snackbar .components-snackbar__content-with-icon{margin-left:0}.components-snackbar .components-snackbar__icon{position:static;display:inline-block;margin-right:16px}.components-snackbar .components-snackbar__dismiss-button{margin-left:32px;cursor:pointer}.woocommerce-layout__activity-panel{display:flex;flex-direction:row;align-items:center;height:60px}.woocommerce-layout__activity-panel-tabs{width:100%;display:flex;height:60px;justify-content:flex-end}.woocommerce-layout__activity-panel-tabs .dashicon,.woocommerce-layout__activity-panel-tabs .gridicon{width:100%}.woocommerce-layout__activity-panel-tabs svg{width:24px;height:24px}.woocommerce-layout__activity-panel-tabs svg.woocommerce-layout__activity-panel-tab-icon{fill:none}.woocommerce-layout__activity-panel-tabs svg.woocommerce-layout__activity-panel-tab-icon path,.woocommerce-layout__activity-panel-tabs svg.woocommerce-layout__activity-panel-tab-icon rect{stroke:currentColor}.woocommerce-layout__activity-panel-tabs svg .setup-progress-slice{stroke:none}.woocommerce-layout__activity-panel-tabs svg .setup-progress-ring{stroke-width:2px}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__homescreen-display-options svg.woocommerce-layout__activity-panel-tab-icon{height:14px}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__homescreen-extension-tasklist-toggle{min-width:205px}.woocommerce-layout__activity-panel-tabs .components-icon-button{display:initial;text-indent:0;border-radius:0}.woocommerce-layout__activity-panel-tabs .components-icon-button.has-text svg{margin:0}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab{display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative;border:none;outline:none;cursor:pointer;background-color:#fff;width:100%;height:60px;color:#757575;white-space:nowrap}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:before{background-color:var(--wp-admin-theme-color);bottom:0;content:"";height:0;opacity:0;transition-property:height,opacity;transition-duration:.3s;transition-timing-function:ease-in-out;left:0;position:absolute;right:0}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.is-active,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.is-opened{color:#1e1e1e;box-shadow:none}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.is-active:before,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.is-opened:before{height:3px;opacity:1}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.woocommerce-layout__activity-panel-tab-wordpress-notices:after{content:" ";position:absolute;padding:1px;background:#d94f4f;border:2px solid #fff;width:4px;height:4px;display:inline-block;border-radius:50%;top:8px;left:50%}@media(min-width:783px)and (max-width:960px){.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.woocommerce-layout__activity-panel-tab-wordpress-notices:after{right:18px;left:auto;margin-left:0}}@media(min-width:961px){.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.woocommerce-layout__activity-panel-tab-wordpress-notices:after{right:28px;left:auto;margin-left:0}}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.components-button:not(:disabled):not([aria-disabled=true]):hover,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:hover{background-color:#f0f0f0;box-shadow:none}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.components-button:not(:disabled):not([aria-disabled=true]):hover.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.components-button:not(:disabled):not([aria-disabled=true]):hover.woocommerce-layout__activity-panel-tab-wordpress-notices:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:hover.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:hover.woocommerce-layout__activity-panel-tab-wordpress-notices:after{border-color:#e0e0e0}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.components-button:not(:disabled):not([aria-disabled=true]):focus,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:focus{box-shadow:inset -1px -1px 0 #757575,inset 1px 1px 0 #757575}@media(max-width:782px){.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.display-options{display:none}}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-popover{margin-top:0;z-index:1001}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-popover .components-menu-group{padding:12px}.woocommerce-layout__activity-panel-toggle-bubble.has-unread:after{content:" ";position:absolute;padding:1px;background:#ca4a1f;border:2px solid #fff;width:4px;height:4px;display:inline-block;border-radius:50%;top:6px;right:4px}@keyframes tabSwitch{0%,to{transform:translateX(0)}50%{transform:translateX(100px)}}.woocommerce-layout__activity-panel-wrapper{height:calc(100vh - 106px);background:#f0f0f0;width:430px;transform:translateX(100%);transition-property:transform box-shadow;transition-duration:.3s;transition-timing-function:ease-in-out;position:absolute;right:0;top:100%;z-index:1000;overflow-x:hidden;overflow-y:auto}@media(max-width:782px){.woocommerce-layout__activity-panel-wrapper{width:100%}}@media screen and (prefers-reduced-motion:reduce){.woocommerce-layout__activity-panel-wrapper{transition-duration:1ms}}@media(min-width:783px){.woocommerce-layout__activity-panel-wrapper{height:calc(100vh - 92px)}}.has-woocommerce-navigation .woocommerce-layout__activity-panel-wrapper{height:calc(100vh - 60px);top:60px}.woocommerce-layout__activity-panel-wrapper.is-open{transform:none;box-shadow:0 12px 12px 0 rgba(85,93,102,.3)}.woocommerce-layout__activity-panel-wrapper.is-switching{animation:tabSwitch;animation-duration:.3s}@media screen and (prefers-reduced-motion:reduce){.woocommerce-layout__activity-panel-wrapper.is-switching{animation:none}}.woocommerce-layout__activity-panel-wrapper .woocommerce-empty-content{padding-left:24px;padding-right:24px}.woocommerce-layout__activity-panel-avatar-flag-overlay{position:relative;top:-12px}.woocommerce-layout__activity-panel-avatar-flag-overlay .woocommerce-flag{position:relative;top:16px;border:2px solid #fff}.woocommerce-layout__notice-list-hide{display:none}.highlight-tooltip__container{position:absolute;width:0;height:0}.highlight-tooltip__container.highlight-tooltip__show{top:0;left:0;width:100%;height:100%}.highlight-tooltip__portal{width:100%;height:100%;position:relative}.highlight-tooltip__portal .highlight-tooltip__overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.35);z-index:100000;animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards}@media(prefers-reduced-motion:reduce){.highlight-tooltip__portal .highlight-tooltip__overlay{animation-duration:1ms}}.highlight-tooltip__popover .components-card{min-width:360px}.highlight-tooltip__popover .components-card__header{font-size:16px;font-size:1rem;font-weight:600;box-sizing:border-box}.highlight-tooltip__popover .components-card__footer{justify-content:flex-end;box-sizing:border-box}@media(max-width:782px){.woocommerce-layout__show-app-banner .woocommerce-layout__header-wrapper{padding-top:56px}}.woocommerce-mobile-app-banner{background-color:#3c2861;position:absolute;top:0;left:0;width:100%;display:flex;height:56px;align-items:center;padding:0 6px 0 4px}@media(min-width:401px){.woocommerce-mobile-app-banner{padding:0 13px 0 10px}}@media(min-width:783px){.woocommerce-mobile-app-banner{display:none}}.woocommerce-mobile-app-banner .gridicon{fill:#fff;margin-right:10px}.woocommerce-mobile-app-banner .components-button.is-secondary{margin-left:auto;color:#fff;box-shadow:inset 0 0 0 1px #fff}.woocommerce-mobile-app-banner .components-button.is-secondary:active,.woocommerce-mobile-app-banner .components-button.is-secondary:hover{color:#fff;box-shadow:inset 0 0 0 1px #fff;background:none}.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description{color:#fff;margin-left:8px}@media(min-width:401px){.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description{margin-left:13px}}.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description .woocommerce-mobile-app-banner__description__text{margin:0;font-size:10px}.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description .woocommerce-mobile-app-banner__description__text:first-child{font-weight:700}@media(min-width:401px){.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description .woocommerce-mobile-app-banner__description__text{margin-left:13px;font-size:13px}}.woocommerce-navigation{display:grid;grid-template-rows:min-content 1fr;height:100%}.woocommerce-navigation .woocommerce-navigation__wrapper h2>span{width:100%}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__menu{overflow-y:auto;margin-bottom:0;padding-bottom:24px}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__group+.components-navigation__group{margin-top:24px}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item{margin-bottom:0}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item .components-button{opacity:1}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item:not(:hover) .components-button{color:#ccc}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item:hover .components-button{color:#fff}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item.is-active .components-button{color:#fff}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item a.components-button{padding:6px 16px}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item:not(:hover) a.components-button{color:#ccc}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item.is-active a.components-button{color:#fff}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation{height:100%}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation>div{height:100%;display:grid;grid-template-rows:1fr min-content}.woocommerce-navigation .woocommerce-navigation__wrapper.is-root .components-navigation__menu-secondary{border-top:1px solid #2c3338;margin:0 -8px;padding:16px 8px 12px}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__group-title,.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__menu-title{color:#f0f0f0;opacity:1}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button{color:#ccc;opacity:1}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button,.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button span{font-size:13px;line-height:normal}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button:hover,.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button:hover:not(:disabled){color:#ddd}.woocommerce-navigation-header{display:flex;align-items:center;border:none;border-radius:0;height:auto}.woocommerce-navigation-header .woocommerce-navigation-header__site-icon.components-button{padding:12px;height:60px;color:#fff}.woocommerce-navigation-header .woocommerce-navigation-header__site-icon.components-button:focus,.woocommerce-navigation-header .woocommerce-navigation-header__site-icon.components-button:hover,.woocommerce-navigation-header .woocommerce-navigation-header__site-icon.components-button:not([aria-disabled=true]):active{color:#fff}.woocommerce-navigation-header .woocommerce-navigation-header__site-title.components-button{padding-left:0;color:#ccc;font-weight:600}.woocommerce-navigation-header .woocommerce-navigation-header__site-title.components-button:active,.woocommerce-navigation-header .woocommerce-navigation-header__site-title.components-button:focus,.woocommerce-navigation-header .woocommerce-navigation-header__site-title.components-button:hover{color:#e0e0e0}.woocommerce-navigation-header .woocommerce-navigation-header__site-title{padding-top:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.woocommerce-navigation{position:relative;width:240px;box-sizing:border-box;background-color:#1e1e1e;z-index:1100}@media(max-width:960px){.woocommerce-navigation{width:60px;height:60px}}.woocommerce-navigation .components-navigation{box-sizing:border-box}.woocommerce-navigation .components-navigation__menu-title{overflow:visible}.woocommerce-navigation .components-navigation__menu{scrollbar-color:#757575 #1e1e1e;scrollbar-width:thin}.woocommerce-navigation .components-navigation__menu::-webkit-scrollbar-thumb{border-radius:10px;background-color:#757575}.woocommerce-navigation .components-navigation__menu::-webkit-scrollbar-thumb:hover{background-color:#757575;width:8px;height:8px}.woocommerce-navigation .components-navigation__menu::-webkit-scrollbar{width:8px;height:8px}.woocommerce-navigation__wrapper{background-color:#1e1e1e;position:absolute;top:60px;width:100%;height:calc(100vh - 92px);overflow-y:auto}.is-wp-toolbar-disabled .woocommerce-navigation__wrapper{height:calc(100vh - 60px)}body.is-wc-nav-expanded .woocommerce-navigation{width:240px;height:100%}body.is-wc-nav-expanded font>.xdebug-error{margin-left:256px}body.is-wc-nav-folded .woocommerce-navigation{width:60px;height:60px;overflow:hidden}body.is-wc-nav-folded .woocommerce-navigation .woocommerce-navigation-header>*{display:none}body.is-wc-nav-folded .woocommerce-navigation .woocommerce-navigation-header__site-icon{display:block}body.is-wc-nav-folded .woocommerce-navigation .components-navigation{display:none}body.is-wc-nav-folded .woocommerce-transient-notices{left:16px}body.is-wc-nav-folded #wpbody{padding-left:0}.has-woocommerce-navigation #adminmenuback,.has-woocommerce-navigation #adminmenuwrap{display:none!important}.has-woocommerce-navigation.woocommerce_page_wc-reports .woo-nav-tab-wrapper,.has-woocommerce-navigation.woocommerce_page_wc-settings .woo-nav-tab-wrapper,.has-woocommerce-navigation.woocommerce_page_wc-status .woo-nav-tab-wrapper{display:none}.has-woocommerce-navigation.woocommerce_page_wc-reports .woocommerce .subsubsub,.has-woocommerce-navigation.woocommerce_page_wc-settings .woocommerce .subsubsub,.has-woocommerce-navigation.woocommerce_page_wc-status .woocommerce .subsubsub{font-size:14px;margin:5px 0}.has-woocommerce-navigation #wpcontent,.has-woocommerce-navigation #wpfooter{margin-left:0}@media(max-width:960px){.has-woocommerce-navigation #wpcontent,.has-woocommerce-navigation #wpfooter{margin-left:0}}.has-woocommerce-navigation #wpbody{padding-left:240px}@media(max-width:960px){.has-woocommerce-navigation #wpbody{padding-left:0}}.has-woocommerce-navigation .woocommerce-layout__header.is-embed-loading:before{content:"";position:fixed;width:240px;height:100%;background:#1e1e1e}@media(max-width:960px){.has-woocommerce-navigation .woocommerce-layout__header.is-embed-loading:before{width:60px;height:60px}}.has-woocommerce-navigation #woocommerce-embedded-root.is-embed-loading{margin-bottom:-32px}.has-woocommerce-navigation:not(.is-wp-toolbar-disabled) #wpbody-content{margin-top:32px}.has-woocommerce-navigation font>.xdebug-error{margin-top:60px}.woocommerce-navigation-category-title{display:flex;align-items:center;font-size:20px;line-height:28px}.woocommerce-navigation-category-title .woocommerce-navigation-favorite-button{margin-left:auto}.woocommerce-navigation-favorite-button.components-button .star-empty-icon{color:#949494}.woocommerce-navigation-favorite-button.components-button .star-filled-icon{color:#ffb900}.woocommerce-embedded-layout__primary{padding:0 20px}.woocommerce-embedded-layout__primary .components-card__footer,.woocommerce-embedded-layout__primary .components-card__header{box-sizing:border-box}@media(max-width:782px){.woocommerce-embedded-layout__primary{padding:0}}.woocommerce-recommended-payments-card{margin:0 15px 10px 0;animation:isLoaded;animation-duration:.25s}.woocommerce-recommended-payments-card .woocommerce-list__item:hover{background-color:#fff}.woocommerce-recommended-payments-card .woocommerce-list__item:hover .woocommerce-list__item-title{color:#1e1e1e}.woocommerce-recommended-payments-card .woocommerce-list__item-title{font-size:14px;color:#1e1e1e;font-weight:600}.woocommerce-recommended-payments-card .woocommerce-review-activity-card__section-controls{text-align:center}.woocommerce-recommended-payments-card .woocommerce-pill{margin-left:4px;padding:2px 8px}@media(max-width:480px){.woocommerce-recommended-payments-card .woocommerce-pill{margin-top:4px;margin-bottom:4px}}.woocommerce-recommended-payments-card .components-card__footer .gridicon{margin-left:4px}.woocommerce-recommended-payments-card .woocommerce-list__item-enter{opacity:0;max-height:100vh;transform:none}.woocommerce-recommended-payments-card .woocommerce-list__item-enter-active{opacity:1;transition:opacity .2s}.woocommerce-recommended-payments-card .woocommerce-list__item-after .components-button{margin-left:12px}.woocommerce-recommended-payments-card .woocommerce-list__item-before img{max-width:96px;height:36px;border-radius:8px}.woocommerce-recommended-payments-card .woocommerce-list__item-text,.woocommerce-recommended-payments-card .woocommerce-recommended-payments__header-heading{max-width:749px}@media(max-width:782px){.woocommerce-recommended-payments-card{margin:0 0 10px}}:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}.woocommerce_tax_settings_conflict_error{padding:15px 10px;min-width:400px;width:400px}.woocommerce_tax_settings_conflict_error_card_body{display:flex;flex-direction:row;padding-right:16px!important}.woocommerce_tax_settings_conflict_error_card_body__warning_icon{width:20px;height:20px;margin-block:10px;margin-right:16px}.woocommerce_tax_settings_conflict_error_card_body__body_text{margin-bottom:16px}.woocommerce_tax_settings_conflict_error_card_body__close_icon{padding:0;height:24px;color:grey}.woocommerce_admin_tax_settings_slotfill_td,.woocommerce_admin_tax_settings_slotfill_th{padding:0!important}[aria-labelledby=select2-woocommerce_tax_display_shop-container].is-conflict{border:red!important;border-style:solid!important;border-width:1px!important}
\ No newline at end of file
+.woocommerce-admin-page .wrap{margin:0}.woocommerce-admin-page #wpcontent,.woocommerce-admin-page.woocommerce_page_wc-admin #wpbody-content{padding:0;overflow-x:hidden!important;min-height:calc(100vh - 32px)}@media(min-width:783px){.woocommerce-admin-page #wpbody-content{padding-left:0}}@media(max-width:782px){.woocommerce-admin-page .wp-responsive-open #woocommerce-embedded-root,.woocommerce-admin-page .wp-responsive-open #wpbody{position:relative;right:-14.5em}.woocommerce-admin-page #wpbody-content,.woocommerce-admin-page #wpcontent{min-height:calc(100vh - 46px)}}@media(min-width:961px){.woocommerce-admin-page #toplevel_page_wcadmin--analytics.menu-top>a:focus,.woocommerce-admin-page #toplevel_page_woocommerce.menu-top>a:focus{padding-bottom:1px}}#wpbody,.woocommerce-layout *{box-sizing:border-box}#wpbody{display:inline-block;width:100%;padding-top:0;margin-top:60px}#wpfooter{display:none}.woocommerce_page_wc-admin .woocommerce-filters-date__content:not(.is-mobile){z-index:2}@media(max-width:600px){#wpadminbar{position:fixed}html.wp-toolbar{padding-top:46px}}@media(max-width:782px){.jetpack-masterbar #wpadminbar #wp-admin-bar-menu-toggle{margin-top:-10px}.jetpack-masterbar #wpwrap .woocommerce-layout__header-heading{padding-left:60px}.jetpack-masterbar.wp-admin .wrap h1,.jetpack-masterbar.wp-admin .wrap h2{padding-left:0}}.woocommerce-admin-page .wp-has-current-submenu:after{right:0;content:" ";height:0;width:0;position:absolute;pointer-events:none;border:8px solid transparent;border-right-color:#f1f1f1;top:0;margin-top:10px}@media(max-width:960px){.woocommerce-admin-page .wp-has-current-submenu:after{border-width:4px;margin-top:14px}}:root{--large-gap:40px;--main-gap:24px}@media(max-width:960px){:root{--large-gap:24px}}@media(max-width:782px){:root{--large-gap:16px;--main-gap:16px}}@keyframes loading-fade{0%{opacity:.7}50%{opacity:1}to{opacity:.7}}.woocommerce-layout select:hover{color:#1a1a1a}.woocommerce-layout .components-base-control select.components-select-control__input{max-width:100%;line-height:normal}.woocommerce-layout .components-panel__body>.components-panel__body-title:hover,.woocommerce-layout .woocommerce-experimental-list__item:hover,.woocommerce-layout .woocommerce-inbox-message:hover{background:#f6f7f7}.woocommerce-layout__jitm .jitm-card{margin:3rem 1.25rem 1.25rem}.woocommerce-layout__jitm-hide{display:none}body.woocommerce-admin-page .components-button.is-primary:not(:disabled):not([aria-disabled=true]):hover{color:#fff}body.woocommerce-admin-page .components-snackbar .components-button.is-tertiary{color:#fff}body.woocommerce-admin-page .components-snackbar .components-button.is-tertiary:not(:disabled):not([aria-disabled=true]):hover{color:#fff}.woocommerce-embed-page #wpbody .woocommerce-layout,.woocommerce-embed-page .woocommerce-layout__notice-list-hide+.wrap{padding-top:10px}.woocommerce-embed-page #wpbody-content,.woocommerce-embed-page #wpcontent{overflow-x:initial!important}.woocommerce-embed-page #wpbody-content{padding-top:0}.woocommerce-embed-page #wpbody-content .notice{margin-top:15px}.woocommerce-embed-page .wrap{padding:0 20px}@media(max-width:782px){.woocommerce-embed-page .wrap p.search-box{width:calc(100% - 40px)}}.woocommerce-embed-page .wrap .wrap{padding:0}.woocommerce-embed-page #screen-meta{border-right:0;margin:0}.woocommerce-embed-page #screen-meta-links{position:relative}.woocommerce-embed-page .notice{padding:1px 12px}.woocommerce-embed-page .woocommerce-layout__header.is-scrolled{box-shadow:0 8px 16px 0 rgba(85,93,102,.3)}.woocommerce-embed-page .woocommerce-layout__header .woocommerce-layout__header-heading{margin-top:0;margin-bottom:0}.woocommerce-embed-page #screen-meta-links.is-hidden-by-notices,.woocommerce-embed-page #screen-meta.is-hidden-by-notices{display:none!important}.woocommerce-embed-page .woocommerce-layout__primary{margin:0}@media(max-width:782px){.woocommerce-embed-page .woocommerce-layout__primary{padding-top:10px}}@keyframes isLoaded{0%{opacity:0}to{opacity:1}}.woocommerce-embed-page .woocommerce-layout__activity-panel-tabs{animation:isLoaded;animation-duration:2s}.woocommerce-embed-page .woocommerce-layout__notice-list-show{margin-top:10px;margin-bottom:16px}@media(max-width:600px){.woocommerce-embed-page .woocommerce-layout__notice-list-show{margin-top:80px;margin-bottom:-16px}}@media(min-width:601px)and (max-width:782px){.woocommerce-embed-page .woocommerce-layout__notice-list-show{margin-top:32px}}.woocommerce-embed-page .woocommerce-activity-card__actions a.components-button:not(.is-primary){color:#2e4453}.woocommerce-layout{margin:0;padding:0}.woocommerce-layout__loading{position:absolute;top:0;left:0;width:100%;height:100%}.woocommerce-layout__loading,.woocommerce-layout__no-match{display:flex;align-items:center;justify-content:center}.woocommerce-layout__no-match .components-card{max-width:680px;width:100%}.woocommerce-layout__primary{margin:var(--large-gap) 0 128px var(--large-gap)}@media(max-width:782px){.woocommerce-layout__primary{margin-top:20px}}.woocommerce-layout .woocommerce-layout__main{padding-right:40px;padding-right:var(--large-gap);max-width:100%}.woocommerce-admin-page .update-nag{display:none}.woocommerce-admin-page #wpbody.no-header{display:block;margin-top:0}.woocommerce-admin-page #wpbody.no-header .woocommerce-layout__primary{margin-top:0}.woocommerce-admin-is-loading #adminmenumain,.woocommerce-admin-is-loading #wpadminbar,.woocommerce-admin-is-loading #wpbody-content,.woocommerce-admin-is-loading #wpcontent,.woocommerce-admin-is-loading #wpfooter,.woocommerce-admin-is-loading .components-modal__screen-overlay,.woocommerce-admin-is-loading .error,.woocommerce-admin-is-loading .notice,.woocommerce-admin-is-loading .update-nag,.woocommerce-admin-is-loading .updated,.woocommerce-admin-is-loading .woocommerce-layout__header,.woocommerce-admin-is-loading .woocommerce-message,.woocommerce-admin-is-loading .woocommerce-store-alerts{display:none}.woocommerce-admin-full-screen{background:#f6f7f7;color:#50575e;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}.woocommerce-admin-full-screen #wpwrap{top:0}.woocommerce-admin-full-screen #wpbody-content{min-height:100vh!important}.woocommerce-admin-full-screen #adminmenumain,.woocommerce-admin-full-screen #wpcontent>*,.woocommerce-admin-full-screen .error,.woocommerce-admin-full-screen .notice,.woocommerce-admin-full-screen .update-nag,.woocommerce-admin-full-screen .updated,.woocommerce-admin-full-screen .woocommerce-layout__header,.woocommerce-admin-full-screen .woocommerce-message,.woocommerce-admin-full-screen .woocommerce-store-alerts{display:none}.woocommerce-admin-full-screen #wpcontent{margin-left:0!important}.woocommerce-admin-full-screen #wpcontent>#wpbody{display:block;margin-top:0!important}.woocommerce-admin-full-screen.has-woocommerce-navigation #wpbody{padding-left:0}.is-wp-toolbar-disabled #wpadminbar{display:none!important}.wp-toolbar .is-wp-toolbar-disabled{margin-top:-32px}@media(max-width:600px){.wp-toolbar .is-wp-toolbar-disabled{margin-top:-46px}}.woocommerce-admin-page .components-modal__frame .components-button.is-button,.woocommerce-profile-wizard__body .components-button.is-button,.woocommerce-task-dashboard__container .components-button.is-button{height:48px;padding-left:25px;padding-right:25px;text-align:center;font-size:14px;line-height:36px;font-weight:500;align-items:center}.woocommerce-admin-page .components-modal__frame .components-button.is-button:disabled,.woocommerce-profile-wizard__body .components-button.is-button:disabled,.woocommerce-task-dashboard__container .components-button.is-button:disabled{cursor:not-allowed}.components-modal__header .components-button svg+span{display:none}.components-modal__frame.woocommerce-usage-modal{width:600px;max-width:100%}.components-modal__frame.woocommerce-usage-modal .components-modal__header{margin-bottom:0}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__wrapper{flex-grow:1;display:flex;flex-direction:column}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__wrapper a{color:#50575e}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__wrapper button.is-primary{align-self:flex-end}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__actions{display:flex;justify-content:flex-end;margin-top:16px}.components-modal__frame.woocommerce-usage-modal .woocommerce-usage-modal__actions button{margin-left:16px}.woocommerce-payments__usage-modal .components-modal__header{height:auto;padding:24px 24px 0}.woocommerce-payments__usage-modal .components-modal__header .components-modal__header-heading{font-size:24px;line-height:32px;margin:0 0 24px}.woocommerce-payments__usage-modal .woocommerce-payments__usage-modal-message{padding:16px 0;font-size:16px;line-height:24px}.woocommerce-payments__usage-modal .woocommerce-payments__usage-footer{display:flex;justify-content:flex-end;padding:16px 0}.woocommerce-payments__usage-modal .woocommerce-payments__usage-footer button{margin-left:16px}.components-modal__frame.woocommerce-cart-modal{width:600px;max-width:100%}.components-modal__frame.woocommerce-cart-modal .components-modal__header{border-bottom:0;margin-bottom:16px;margin-top:16px}.components-modal__frame.woocommerce-cart-modal .components-modal__header button{display:none}.components-modal__frame.woocommerce-cart-modal .components-modal__header-heading{font-style:normal;font-weight:400;font-size:24px;line-height:32px}.components-modal__frame.woocommerce-cart-modal .woocommerce-list{margin-top:24px}.components-modal__frame.woocommerce-cart-modal .woocommerce-list .woocommerce-list__item:first-child{border-top:1px solid #dcdcde}.components-modal__frame.woocommerce-cart-modal .woocommerce-list__item{border-bottom:1px solid #dcdcde}.components-modal__frame.woocommerce-cart-modal .woocommerce-cart-modal__help-text{font-size:16px;line-height:24px}.components-modal__frame.woocommerce-cart-modal .woocommerce-cart-modal__actions{text-align:right}.components-modal__frame.woocommerce-cart-modal .woocommerce-cart-modal__actions button.is-link{margin-right:16px;text-decoration:none;font-weight:600;font-size:14px}.components-modal__frame.woocommerce-cart-modal .woocommerce-cart-modal__actions button.is-primary{align-self:flex-end}.woocommerce-layout__header{background:#fff;box-sizing:border-box;padding:0;position:fixed;width:calc(100% - 160px);top:32px;z-index:1001}.woocommerce-layout__header.is-scrolled{box-shadow:0 8px 8px 0 rgba(85,93,102,.3)}.woocommerce-layout__header .woocommerce-layout__header-wrapper{display:flex;align-items:center;min-height:60px}@media(max-width:782px){.woocommerce-layout__header{flex-flow:row wrap;top:46px;width:100%}}@media(min-width:783px)and (max-width:960px){.woocommerce-layout__header{width:calc(100% - 36px)}}.woocommerce-layout__header .woocommerce-layout__header-breadcrumbs-wrapper{display:flex;justify-content:space-between;flex-direction:row}.woocommerce-layout__header .woocommerce-layout__header-heading{display:flex;align-items:center;padding:0 0 0 40px;padding:0 0 0 var(--large-gap);flex:1 auto;height:60px;background:#fff;font-weight:600;font-size:14px}.folded .woocommerce-layout__header{width:calc(100% - 36px)}@media(max-width:782px){.folded .woocommerce-layout__header{width:100%}}.is-wp-toolbar-disabled .woocommerce-layout__header{top:0}.has-woocommerce-navigation .woocommerce-layout__header{left:0;width:100%}.woocommerce-admin-page #contextual-help-link-wrap,.woocommerce-admin-page #screen-options-link-wrap{margin-top:-1px}.wp-responsive-open .woocommerce-layout__header{margin-left:2px}.woocommerce-task-payment{display:flex;flex-direction:row;align-items:center;position:relative;overflow:hidden}.woocommerce-task-payment .components-card__media{width:85px;flex-shrink:0;align-self:flex-start}.woocommerce-task-payment .components-card__media .is-placeholder,.woocommerce-task-payment .components-card__media img,.woocommerce-task-payment .components-card__media svg{margin:auto;max-width:36px;display:block}.woocommerce-task-payment .components-card__media .is-placeholder{height:36px}.woocommerce-task-payment .woocommerce-task-payment__footer .is-placeholder{width:70px;height:36px}.woocommerce-task-payment>.components-form-toggle{min-width:52px}.woocommerce-task-payment .woocommerce-task-payment__title{display:flex;align-items:center;font-size:16px;font-weight:500;color:#2c3338;margin-top:0;margin-bottom:8px}.woocommerce-task-payment .woocommerce-task-payment__title .woocommerce-pill{margin-left:8px}.woocommerce-task-payment .woocommerce-task-payment__title .woocommerce-pill.pill-green{color:#008a20;border-color:#008a20}.woocommerce-task-payment .woocommerce-task-payment__content{font-size:14px;color:#50575e;margin:0 36px 0 0}.woocommerce-task-payment .woocommerce-task-payment__content .text-style-strong{font-weight:700}.woocommerce-task-payment .woocommerce-task-payment__content p{font-size:12px}.woocommerce-task-payment .woocommerce-task-payment__transaction-processors_images{padding-top:16px;display:flex;flex-direction:row;flex-wrap:wrap;gap:8px}.woocommerce-task-payment .woocommerce-task-payment__transaction-processors_images img{height:24px}.woocommerce-task-payment .woocommerce-task-payment__description{flex:1}@media(max-width:600px){.woocommerce-task-payment{flex-wrap:wrap}.woocommerce-task-payment .woocommerce-task-payment__content{margin:0}.woocommerce-task-payment .components-card__media{order:1;flex-basis:50%}.woocommerce-task-payment .components-card__media>img,.woocommerce-task-payment .components-card__media>svg{margin:0 0 0 24px}.woocommerce-task-payment .woocommerce-task-payment__description{order:3;padding:24px 0 0 24px}.woocommerce-task-payment .woocommerce-task-payment__footer{flex-basis:50%;align-self:flex-start;order:2;text-align:right}}.woocommerce-payment-gateway-suggestions-list-placeholder .is-placeholder{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent;display:inline-block;max-width:240px;width:80%}.woocommerce-payment-gateway-suggestions-list-placeholder .is-placeholder:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-payment-gateway-suggestions-list-placeholder .is-placeholder{animation:none}}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-label{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent;display:inline-block;width:60%}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-label:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-label{animation:none}}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-icon{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-icon:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-icon{animation:none}}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step:first-child .woocommerce-stepper__step-label{width:30%}.woocommerce-task-payment-method.is-loading .woocommerce-stepper__step-number{display:none}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner{min-width:100%;margin-bottom:24px}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__body{padding:30px 0 0 24px;justify-content:space-between}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__text_container{width:305px;margin-left:0}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__footer{flex-direction:column;align-items:flex-start;padding:20px 38.2px 30px 24px}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__footer_icon_container{margin-top:12px;margin-left:-5px}.woocommerce-wcpay-suggestion .woocommerce-recommended-payments-banner .woocommerce-recommended-payments-banner__footer_icon_container>svg{width:38px;height:24px;margin-right:8px}.woocommerce-wcpay-suggestion .woocommerce-wcpay-benefits{margin-bottom:24px}.woocommerce-task-payments .components-card+.components-card{margin-top:24px}.woocommerce-task-payments .woocommerce-task-payment__setup_required{display:flex;align-items:center;font-size:14px;margin-left:12px;font-weight:400;gap:3px}.woocommerce-task-payments .woocommerce-task-payment__setup_required>svg{fill:#efb854}.woocommerce-task-payments .components-card__header{font-size:20px;font-weight:400;line-height:28px;margin:0;display:flex;flex-direction:column;align-items:flex-start}.woocommerce-task-payments .woocommerce-task-payment-header__description{margin:0;color:#757575;font-weight:400;font-size:14px}.woocommerce-task-payments .components-card__footer a.components-button .gridicon{margin-left:4px}.woocommerce-task-payments .woocommerce-task-payment__recommended-pill{border:1px solid #dcdcde;border-radius:28px;display:inline-block;font-size:13px;margin-left:12px;padding:1px 10px}.woocommerce-task-payments .woocommerce-task-payment__recommended-pill span{max-width:70px}.woocommerce-task-payments .components-card__divider:last-child{display:none}.woocommerce-task-payments .woocommerce-task-payment-wcpay{margin-bottom:0}.woocommerce-task-payment-method>h3{margin:0;color:#1d2327}.woocommerce-task-payment-method p{font-size:14px;color:#646970;font-weight:400;margin-top:16px;margin-bottom:16px}.woocommerce-task-payment-method__fields{display:grid;grid-template-columns:1fr 1fr;grid-gap:0 16px;margin-bottom:8px}.woocommerce-task-payment-method__fields .components-base-control{margin-bottom:0}.woocommerce-shipping-rate{display:flex;padding-top:12px;padding-bottom:12px}.woocommerce-shipping-rate .woocommerce-shipping-rate__main{width:100%}.woocommerce-shipping-rate .woocommerce-shipping-rate__icon{padding-top:16px;margin-right:24px}.woocommerce-shipping-rate .woocommerce-shipping-rate__name{align-items:center;display:flex;padding-top:16px;font-size:16px;line-height:22px;color:#1d2327;margin-bottom:12px;border-top:1px solid #dcdcde}.woocommerce-shipping-rate .woocommerce-shipping-rate__name .components-form-toggle{margin-left:auto;height:18px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .components-base-control{margin-bottom:0}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .components-base-control__label{display:block;position:relative;top:-8px;width:100%;font-size:12px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .text-control-with-affixes__prefix,.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .text-control-with-affixes__suffix{font-size:16px;line-height:24px;color:#646970;border:0;padding:0;align-items:center;display:flex;top:-11px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .components-text-control__input{position:relative;top:-11px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .text-control-with-affixes__prefix{margin-right:4px}.woocommerce-shipping-rate .woocommerce-shipping-rate__control-wrapper .text-control-with-affixes__suffix{margin-left:4px}.woocommerce-task-shipping-recommendation__plugins-install{padding:24px 20px;border:1px solid #ddd;border-radius:3px;justify-content:space-around;margin-bottom:24px}.woocommerce-task-shipping-recommendation__plugins-install.dual{display:flex;flex-direction:column;justify-content:flex-start;width:285px}.woocommerce-task-shipping-recommendation__plugins-install.dual p{margin-top:0;margin-bottom:15px;color:#757575}.woocommerce-task-shipping-recommendation__plugins-install.dual .plugins-install__plugin-banner-image{display:flex;margin-bottom:24px}.woocommerce-task-shipping-recommendation__plugins-install.dual .plugins-install__plugin-banner-image img{width:120px;height:28px}.woocommerce-task-shipping-recommendation__plugins-install.single{display:flex}.woocommerce-task-shipping-recommendation__plugins-install.single .plugins-install__list{max-width:360px}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__plugin-banner-image{display:flex;width:150px}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__plugin-banner-image img{width:100%}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__list{display:flex;flex-direction:column;justify-content:space-around;gap:10px}.woocommerce-task-shipping-recommendation__plugins-install .woocommerce-task-shipping-recommendations_plugins-buttons{display:flex;justify-content:space-between;margin-top:24px;flex-grow:1;align-items:flex-end}.woocommerce-task-shipping-recommendation__plugins-install .woocommerce-task-shipping-recommendations_plugins-buttons button{min-width:40%;padding-inline:8px;margin-inline:4px}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__list-item{display:flex;align-items:center}.woocommerce-task-shipping-recommendation__plugins-install .plugins-install__list-icon{margin-right:12px}.woocommerce-task-shipping-recommendation_plugins-install-container{display:flex;flex-direction:row;flex-wrap:wrap;gap:10px}.woocommerce-task-shipping-recommendations_skip-button.dual{margin-inline:calc(50% - 34px)}.woocommerce-task-marketing .components-card__header{flex-direction:column;align-items:flex-start;display:flex!important}.woocommerce-task-marketing .components-card__header h2{align-self:start!important;color:#1e1e1e;font-size:20px;margin-bottom:0}.woocommerce-task-marketing .components-card__header span{margin-left:0;margin-top:8px;color:#757575}.woocommerce-plugin-list__plugin{display:flex;padding:24px;border-top:1px solid #e0e0e0}.woocommerce-plugin-list__plugin:first-child{border-top:0}.woocommerce-plugin-list__plugin h4{margin-bottom:12px;font-weight:600;color:#1e1e1e}.woocommerce-plugin-list__plugin p{color:#757575;font-weight:400}.woocommerce-plugin-list__plugin-logo{margin-right:45px;display:flex;align-items:center}.woocommerce-plugin-list__plugin-logo img{width:50px}.woocommerce-plugin-list__plugin-text{max-width:370px;margin-right:16px}.woocommerce-plugin-list__plugin-text .woocommerce-pill{color:#646970;margin-left:12px}.woocommerce-plugin-list__plugin-action{display:flex;align-items:center;margin-left:auto}.woocommerce-plugin-list__title{padding:24px 30px 0;position:relative}.woocommerce-plugin-list__title h3{font-weight:500;color:#000;text-transform:uppercase}.woocommerce-plugin-list__plugin{border-top:none;border-bottom:1px solid #e0e0e0}.woocommerce-tax-partner-card{border:1px solid #ddd;border-radius:3px;margin:0 8px 16px;padding:20px;display:flex;flex-direction:column}.woocommerce-tax-partner-card a{text-decoration:none}.woocommerce-tax-partner-card__logo{margin-bottom:8px}.woocommerce-tax-partner-card__logo img{max-height:35px}.woocommerce-tax-partner-card__description{color:#757575}.woocommerce-tax-partner-card__benefits{color:#1e1e1e;list-style:none}.woocommerce-tax-partner-card__benefits li{margin-bottom:8px;display:flex}.woocommerce-tax-partner-card__benefits li svg{margin-right:10px}.woocommerce-tax-partner-card__action{margin-top:auto}.woocommerce-tax-partner-card__terms{color:#949494;font-size:9px;margin-bottom:8px}.woocommerce-tax-partners__partners{display:grid;grid-template-columns:1fr 1fr}.woocommerce-tax-partners__partners.woocommerce-tax-partners__partners-count-1{grid-template-columns:1fr}@media(max-width:782px){.woocommerce-tax-partners__partners{grid-template-columns:1fr}}.woocommerce-tax-partners__partners-count-1 .woocommerce-tax-partners__partners{grid-template-columns:1fr;justify-items:center}.woocommerce-tax-partners .components-card__body.is-size-medium{padding:36px}.woocommerce-tax-partners .components-card__header{line-height:28px;font-size:20px}.woocommerce-tax-partners__other-actions{text-align:center;list-style:none;display:flex;align-items:center;justify-content:center;margin:0}@media(max-width:782px){.woocommerce-tax-partners__other-actions{flex-direction:column}}.woocommerce-tax-partners__other-actions li{margin-top:16px;margin-right:4px}.woocommerce-tax-partners__other-actions li button.is-tertiary{padding:0;height:auto}.woocommerce-tax-partners__other-actions li:after{content:"•";color:#bbb;margin-left:4px}@media(max-width:782px){.woocommerce-tax-partners__other-actions li:after{content:""}}.woocommerce-tax-partners__other-actions li:last-child{margin-right:0}.woocommerce-tax-partners__other-actions li:last-child:after{content:""}.woocommerce-task-tax__automated-tax-control{display:flex;align-items:center;margin-top:16px}.woocommerce-task-tax__automated-tax-control i{margin-left:16px;margin-right:24px}.woocommerce-task-tax__automated-tax-control .woocommerce-task-tax__automated-tax-control-inner{border-top:1px solid #dcdcde;display:flex;align-items:center;flex:1;font-size:16px;padding-top:16px;padding-bottom:16px}.woocommerce-task-tax__automated-tax-control .components-form-toggle{margin-left:auto}.woocommerce-task-tax__success{display:flex;flex-direction:column;align-items:center;padding:40px;text-align:center}.woocommerce-task-tax__success .woocommerce-task-tax__success-icon{font-size:48px;height:48px;align-items:center;display:flex}.woocommerce-task-tax__success #woocommerce-task-tax__success-message{font-size:32px;font-weight:400}.woocommerce-task-tax__success p{margin-top:0;font-size:16px}.woocommerce-task-dashboard__container .woocommerce-task-card{max-width:680px;margin-left:auto;margin-right:auto;margin-bottom:24px}.woocommerce-task-dashboard__container .woocommerce-task-card .components-card__header.is-size-large{padding-bottom:12px}.woocommerce-task-dashboard__container .woocommerce-task-card .components-card__header.is-size-large .woocommerce-card__menu{margin-top:8px}.woocommerce-task-dashboard__container .woocommerce-task-card .wooocommerce-task-card__header{display:flex}.woocommerce-task-dashboard__container .woocommerce-task-card .wooocommerce-task-card__header .components-text+.woocommerce-badge{margin-left:16px}.woocommerce-task-dashboard__container .woocommerce-task-card .woocommerce-list__item-text .woocommerce-pill{padding:1px 8px;margin-left:8px}.woocommerce-task-dashboard__container .woocommerce-task-card .components-popover__content{min-width:unset}.woocommerce-task-dashboard__container .woocommerce-task-payments{width:680px;margin:auto;max-width:100%}.woocommerce-task-list__item-expandable-content,.woocommerce-task__additional-info,.woocommerce-task__estimated-time{color:#757575;font-weight:400;font-size:12px}.woocommerce-task-list__item-expandable-content{font-size:13px}.components-modal__screen-overlay{background:rgba(43,45,47,.4)}.components-modal__frame .components-modal__header{margin-bottom:0}.components-modal__frame .woocommerce-task-payments__stripe-error-wrapper{align-items:flex-end;flex-grow:1;display:flex;flex-direction:column}.woocommerce-task-dashboard__container .woocommerce-stepper button.components-button.is-primary{margin:0 8px 0 0}.woocommerce-task-dashboard__container button.components-button.is-link{margin:0;height:auto;color:#50575e;font-weight:400}.woocommerce-task-card__prompt{width:100%;min-width:100%;margin-bottom:24px;margin-top:-4px;cursor:default}.woocommerce-task-card__prompt .components-snackbar__content{display:block;align-items:unset;justify-content:unset}.woocommerce-task-card__prompt .components-snackbar__content span{margin-left:-24px}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions button.is-link,.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions button.is-link:active,.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions button.is-link:focus{color:#fff;margin-left:24px;background:transparent}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions button.is-link:hover{color:#fff}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-pointer{border-bottom:10px solid #1e1e1e;border-left:10px solid transparent;border-right:10px solid transparent;position:relative;width:0;height:0;display:inline-block;top:-30px}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-content{display:flex;align-items:baseline;justify-content:space-between;max-height:10px;margin-left:24px;position:relative;top:-40px}.woocommerce-task-card__prompt .woocommerce-task-card__prompt-actions{margin-right:-16px}.woocommerce-task-card__prompt:hover .woocommerce-task-card__prompt-pointer{border-bottom-color:#1e1e1e}.woocommerce-task-dashboard__container .muriel-component{margin-top:16px;margin-bottom:16px}.woocommerce-task-dashboard__container .components-base-control.has-error{margin-bottom:32px!important;border-color:#d63638}@media(max-width:782px){.woocommerce-task-dashboard__container .components-base-control.has-error{margin-bottom:44px!important}}.woocommerce-task-dashboard__container .components-base-control.has-error .components-base-control__help{top:100%;left:12px;position:absolute;margin-top:4px;font-size:12px;font-style:normal;color:#d63638}.woocommerce-task-dashboard__container .components-form-toggle{display:inline-block}.woocommerce-task-dashboard__container .components-form-toggle label{font-size:14px}.woocommerce-task-dashboard__container .components-form-toggle .components-base-control{display:inline-block}.woocommerce-task-dashboard__container .components-form-toggle .components-base-control__field{margin-bottom:0}.woocommerce-task-dashboard__container .woocommerce-task__caption{color:#757575;margin-top:16px}.woocommerce-task-dashboard__container .woocommerce-task__caption.is-tos{margin-bottom:16px}.woocommerce-task-list__setup .woocommerce-experimental-list .woocommerce-experimental-list__item.complete{text-decoration:line-through;color:var(--wp-admin-theme-color)}.woocommerce-task-list__setup .woocommerce-experimental-list .woocommerce-experimental-list__item.complete .woocommerce-task-list__item-title{color:var(--wp-admin-theme-color)}.woocommerce-task-progress-header{position:relative;min-height:28px}.woocommerce-task-progress-header h1{font-size:24px}.woocommerce-task-progress-header p{color:#757575;font-size:16px;line-height:24px;margin-top:8px}.woocommerce-task-progress-header .woocommerce-task-progress-header__progress-bar{appearance:none;border:1px solid #ddd;border-radius:16px;height:12px;width:100%;margin-bottom:0;background-color:#fff}.woocommerce-task-progress-header .woocommerce-task-progress-header__progress-bar::-moz-progress-bar{background-color:var(--wp-admin-theme-color);border-radius:16px}.woocommerce-task-progress-header .woocommerce-task-progress-header__progress-bar::-webkit-progress-bar{background-color:#fff;border-radius:16px}.woocommerce-task-progress-header .woocommerce-task-progress-header__progress-bar::-webkit-progress-value{background-color:var(--wp-admin-theme-color);border-bottom-left-radius:16px;border-top-left-radius:16px}.woocommerce-task-progress-header .woocommerce-card__menu{position:absolute;right:0;top:-7px}.woocommerce-setup-panel .woocommerce-task-progress-header{padding:16px}.woocommerce-setup-panel .woocommerce-task-progress-header h1{font-size:16px;font-weight:600}.woocommerce-setup-panel .woocommerce-task-progress-header p{font-size:16px}.woocommerce-setup-panel .woocommerce-task-progress-header .woocommerce-card__menu{top:17px}@media(max-width:782px){.woocommerce-task-progress-header{padding-left:var(--large-gap);padding-right:var(--large-gap)}}h1.woocommerce-task-progress-header__title{padding-top:4px}@media(max-width:782px){h1.woocommerce-task-progress-header__title{padding-left:var(--large-gap);padding-right:var(--large-gap)}}.wooocommerce-task-card__header .wooocommerce-task-card__header-subtitle{color:#757575;margin-bottom:24px}.wooocommerce-task-card__finished-header-image{max-width:75%}.customer-feedback-simple__container{height:64px}.woocommerce-task-card__header-menu{position:absolute;right:0;top:0}.wooocommerce-task-card__header-ces-feedback{height:64px;display:flex;justify-content:center;align-items:center}.woocommerce-task-header__contents-container.woocommerce-task-header__customize-store img.svg-background{padding-right:16px;padding-top:9px}.woocommerce-homescreen .woocommerce-task-dashboard__container:empty{margin-bottom:0}.woocommerce-task-dashboard__container .woocommerce-homescreen-card{max-width:none;width:100%}.woocommerce-task-dashboard__container .wooocommerce-task-card__header-container{display:flex;position:relative;border-bottom:1px solid #dcdcde}.woocommerce-task-dashboard__container .wooocommerce-task-card__header{width:100%;flex:1}.woocommerce-task-dashboard__container .woocommerce-ellipsis-menu{position:absolute;top:16px;right:24px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .components-card__header{background:#fff;height:130px;display:block}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .components-card__header .is-placeholder{margin:20px;width:100%;height:90px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .wooocommerce-task-card__header{align-self:inherit}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-task-list__item-before .is-placeholder{height:36px;width:36px;border-radius:50%}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-task-list__item-text .is-placeholder{width:80%}.woocommerce-task-dashboard__container .woocommerce-task-card.completed,.woocommerce-task-dashboard__container .woocommerce-task-card.completed .components-card__header{display:block}.woocommerce-task-dashboard__container .woocommerce-task-card.completed h2{margin-top:24px;margin-bottom:12px}.woocommerce-task-dashboard__container .woocommerce-task-card.completed .wooocommerce-task-card__header{display:block;text-align:center}.woocommerce-task-dashboard__container .woocommerce-task-card.completed button.is-secondary{margin-right:12px}.woocommerce-task-dashboard__container.setup-task-list{max-width:1032px;display:flex;flex-direction:row;margin:0 auto;justify-content:space-between}.woocommerce-task-dashboard__container.setup-task-list ul li.complete .woocommerce-task-list__item-title{font-weight:600;color:#949494}.woocommerce-task-dashboard__container.setup-task-list ul li{display:block;width:100%;border-right:1px solid #e0e0e0;border-top:none;padding:16px 24px}.woocommerce-task-dashboard__container.setup-task-list ul li:last-child{border-right:none}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active{box-shadow:inset 0 -4px 0 0 var(--wp-admin-theme-color)}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active .woocommerce-task-list__item-badge{background-color:#fff;position:relative;z-index:1}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active:after{background-color:var(--wp-admin-theme-color);opacity:.1;content:"";top:0;left:0;position:absolute;width:100%;height:100%;pointer-events:none}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete) .woocommerce-task__icon{border:1px solid var(--wp-admin-theme-color);background:transparent}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item.complete:not(.complete) .woocommerce-task__icon{border:none}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item-before{display:block;padding:0}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item-text{margin-top:10px}.woocommerce-task-dashboard__container.setup-task-list .numbered-circle,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-1 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-2 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-3 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-4 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-5 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-6 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-7 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-8 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-9 .woocommerce-task__icon:after,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-10 .woocommerce-task__icon:after{justify-content:center;display:flex;align-items:center;height:100%;width:100%}.woocommerce-task-dashboard__container.setup-task-list ul{display:block}.woocommerce-task-dashboard__container.setup-task-list ul li{display:grid;grid-template-columns:48px auto 48px;border-right:none;border-bottom:1px solid #e0e0e0}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active{box-shadow:inset 5px 0 0 0 var(--wp-admin-theme-color);transition:box-shadow .1s linear}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item-text{display:block;padding:0;margin-top:0}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:65%}@media(max-width:600px){.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:100%}}.woocommerce-task-dashboard__container.setup-task-list .svg-background{right:6%}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-1 .woocommerce-task__icon:after{content:"1";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-2 .woocommerce-task__icon:after{content:"2";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-3 .woocommerce-task__icon:after{content:"3";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-4 .woocommerce-task__icon:after{content:"4";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-5 .woocommerce-task__icon:after{content:"5";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-6 .woocommerce-task__icon:after{content:"6";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-7 .woocommerce-task__icon:after{content:"7";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-8 .woocommerce-task__icon:after{content:"8";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-9 .woocommerce-task__icon:after{content:"9";color:var(--wp-admin-theme-color);font-weight:700}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item:not(.complete).index-10 .woocommerce-task__icon:after{content:"10";color:var(--wp-admin-theme-color);font-weight:700}@media(max-width:782px){.woocommerce-task-dashboard__container.setup-task-list ul{display:block}.woocommerce-task-dashboard__container.setup-task-list ul li{display:grid;grid-template-columns:48px auto 48px;border-right:none;border-bottom:1px solid #e0e0e0}.woocommerce-task-dashboard__container.setup-task-list ul li.is-active{box-shadow:inset 5px 0 0 0 var(--wp-admin-theme-color);transition:box-shadow .1s linear}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-list__item-text{display:block;padding:0;margin-top:0}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:65%}}@media(max-width:782px)and (max-width:782px){.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:380px}}@media(max-width:782px)and (max-width:600px){.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:100%}}@media(max-width:782px){.woocommerce-task-dashboard__container.setup-task-list .svg-background{right:6%}}.woocommerce-setup-panel .woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents-container{padding:16px}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents-container{padding:20px 24px;position:relative;flex:1;overflow:hidden;width:100%}.woocommerce-task-dashboard__container.setup-task-list .svg-background{position:absolute;z-index:0;right:24px;max-width:25%;max-height:150px;width:auto;height:auto}@media(max-width:600px){.woocommerce-task-dashboard__container.setup-task-list .svg-background{display:none}}@media(max-width:782px){.woocommerce-task-dashboard__container.setup-task-list .svg-background{right:.5%;width:40%}}.woocommerce-task-dashboard__container.setup-task-list .svg-background .admin-theme-color{fill:var(--wp-admin-theme-color)}.woocommerce-task-dashboard__container.setup-task-list .svg-background .admin-theme-color-darker-10{fill:var(--wp-admin-theme-color-darker-10)}.woocommerce-task-dashboard__container.setup-task-list .svg-background .admin-theme-color-darker-20{fill:var(--wp-admin-theme-color-darker-20)}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:70%;position:relative;z-index:1}@media(max-width:782px){.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents{max-width:380px}}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents p,.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents span{color:#757575}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__contents p:first-of-type{margin-top:4px}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__timer{display:flex;align-items:center;line-height:22px;margin-bottom:0}.woocommerce-task-dashboard__container.setup-task-list .woocommerce-task-header__timer img{margin-right:6px}.woocommerce-task-dismiss-modal{width:565px;max-width:100%}.woocommerce-task-dismiss-modal .components-modal__header{border-bottom:1px solid #ddd}.woocommerce-task-dismiss-modal .woocommerce-usage-modal__message{box-sizing:border-box;border-bottom:1px solid #ddd;padding:0 32px;display:flex;flex-direction:row;justify-content:space-between;background:#fff;align-items:center;height:60px;z-index:10;position:relative;position:sticky;top:0;margin:0 -32px 24px;font-size:1.2em}.woocommerce-task-dismiss-modal .woocommerce-usage-modal__actions{display:flex;justify-content:flex-end;margin-top:16px}.woocommerce-task-dismiss-modal .woocommerce-usage-modal__actions button{margin-left:16px}.woocommerce-layout__header-back-button{cursor:pointer;margin-left:40px;margin-left:var(--large-gap);margin-right:-16px;display:flex;z-index:2}.woocommerce-layout__header-back-button:focus{box-shadow:inset -1px -1px 0 #757575,inset 1px 1px 0 #757575}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-card__body{border-top:1px solid #dcdcde}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .is-placeholder{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent;display:inline-block;height:16px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .is-placeholder:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .is-placeholder{animation:none}}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-card__title .is-placeholder{width:70%;height:28px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-list__item-before .is-placeholder{height:36px;width:36px}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-list__item-text{width:100%}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-list__item-text .woocommerce-list__item-title .is-placeholder{height:22px;width:60%}.woocommerce-task-dashboard__container .woocommerce-task-card.is-loading .woocommerce-list__item-after .is-placeholder{height:18px;width:60px}.woocommerce-task-list__item.woocommerce-list__item-enter{opacity:0;max-height:0}.woocommerce-task-list__item.woocommerce-list__item-enter-active{opacity:1;max-height:100px;transition:opacity .5s,max-height .5s}.woocommerce-task-list__item.woocommerce-list__item-exit{opacity:1;max-height:100px}.woocommerce-task-list__item.woocommerce-list__item-exit-active{opacity:0;max-height:0;transition:opacity .5s,max-height .5s}.woocommerce-layout__header-tasks-reminder-bar{height:40px;background-color:#007cba;display:flex;justify-content:space-between;align-items:center;color:#fff}.woocommerce-layout__header-tasks-reminder-bar:before{content:""}.woocommerce-layout__header-tasks-reminder-bar button{color:inherit}.woocommerce-layout__header-tasks-reminder-bar button:hover{opacity:.7;color:inherit}.woocommerce-layout__header-tasks-reminder-bar a{color:inherit}.woocommerce-layout__header-tasks-reminder-bar p{font-size:13px}.woocommerce-layout__footer{background:#fff;border-top:1px solid #e0e0e0;box-shadow:0 2px 6px 0 rgba(0,0,0,.05);box-sizing:border-box;padding:0;position:fixed;width:calc(100% - 160px);bottom:-1px;z-index:1001}.woocommerce-profile-wizard__body .woocommerce-layout__footer{width:100%}@media(min-width:783px)and (max-width:960px){.woocommerce-layout__footer{width:calc(100% - 36px)}}@media(max-width:782px){.woocommerce-layout__footer{flex-flow:row wrap;width:100%}}.folded .woocommerce-layout__footer{width:calc(100% - 36px)}.woocommerce-transient-notices{position:absolute;left:16px;bottom:100%;margin-bottom:12px;z-index:100001;width:auto}.woocommerce-profile-wizard__body .woocommerce-transient-notices{left:unset;width:100%}.woocommerce-profile-wizard__body .woocommerce-transient-notices .components-snackbar{margin-left:auto;margin-right:auto}.components-snackbar.components-snackbar-explicit-dismiss{cursor:default}.components-snackbar__content{white-space:pre-line}.components-snackbar .components-snackbar__content-with-icon{margin-left:32px}.components-snackbar .components-snackbar__icon{position:absolute;top:24px;left:26px}.components-snackbar .components-snackbar__dismiss-button{margin-left:32px;cursor:pointer}.woocommerce-layout__activity-panel{display:flex;flex-direction:row;align-items:center;height:60px}.woocommerce-layout__activity-panel-tabs{width:100%;display:flex;height:60px;justify-content:flex-end}.woocommerce-layout__activity-panel-tabs .dashicon,.woocommerce-layout__activity-panel-tabs .gridicon{width:100%}.woocommerce-layout__activity-panel-tabs svg{width:24px;height:24px}.woocommerce-layout__activity-panel-tabs svg.woocommerce-layout__activity-panel-tab-icon{fill:none}.woocommerce-layout__activity-panel-tabs svg.woocommerce-layout__activity-panel-tab-icon path,.woocommerce-layout__activity-panel-tabs svg.woocommerce-layout__activity-panel-tab-icon rect{stroke:currentColor}.woocommerce-layout__activity-panel-tabs svg .setup-progress-slice{stroke:none}.woocommerce-layout__activity-panel-tabs svg .setup-progress-ring{stroke-width:2px}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__homescreen-display-options svg.woocommerce-layout__activity-panel-tab-icon{height:14px}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__homescreen-extension-tasklist-toggle{min-width:205px}.woocommerce-layout__activity-panel-tabs .components-icon-button{display:initial;text-indent:0;border-radius:0}.woocommerce-layout__activity-panel-tabs .components-icon-button.has-text svg{margin:0}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab{display:flex;flex-direction:column;justify-content:center;align-items:center;position:relative;border:none;outline:none;cursor:pointer;background-color:#fff;width:100%;height:60px;color:#757575;white-space:nowrap}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:before{background-color:var(--wp-admin-theme-color);bottom:0;content:"";height:0;opacity:0;transition-property:height,opacity;transition-duration:.3s;transition-timing-function:ease-in-out;left:0;position:absolute;right:0}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.is-active,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.is-opened{color:#1e1e1e;box-shadow:none}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.is-active:before,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.is-opened:before{height:3px;opacity:1}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.woocommerce-layout__activity-panel-tab-wordpress-notices:after{content:" ";position:absolute;padding:1px;background:#d94f4f;border:2px solid #fff;width:4px;height:4px;display:inline-block;border-radius:50%;top:8px;left:50%}@media(min-width:783px)and (max-width:960px){.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.woocommerce-layout__activity-panel-tab-wordpress-notices:after{right:18px;left:auto;margin-left:0}}@media(min-width:961px){.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.woocommerce-layout__activity-panel-tab-wordpress-notices:after{right:28px;left:auto;margin-left:0}}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.components-button:not(:disabled):not([aria-disabled=true]):hover,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:hover{background-color:#f0f0f0;box-shadow:none}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.components-button:not(:disabled):not([aria-disabled=true]):hover.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.components-button:not(:disabled):not([aria-disabled=true]):hover.woocommerce-layout__activity-panel-tab-wordpress-notices:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:hover.has-unread:after,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:hover.woocommerce-layout__activity-panel-tab-wordpress-notices:after{border-color:#e0e0e0}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.components-button:not(:disabled):not([aria-disabled=true]):focus,.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab:focus{box-shadow:inset -1px -1px 0 #757575,inset 1px 1px 0 #757575}@media(max-width:782px){.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-tab.display-options{display:none}}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-popover{margin-top:0;z-index:1001}.woocommerce-layout__activity-panel-tabs .woocommerce-layout__activity-panel-popover .components-menu-group{padding:12px}.woocommerce-layout__activity-panel-toggle-bubble.has-unread:after{content:" ";position:absolute;padding:1px;background:#ca4a1f;border:2px solid #fff;width:4px;height:4px;display:inline-block;border-radius:50%;top:6px;right:4px}@keyframes tabSwitch{0%,to{transform:translateX(0)}50%{transform:translateX(100px)}}.woocommerce-layout__activity-panel-wrapper{height:calc(100vh - 106px);background:#f0f0f0;width:430px;transform:translateX(100%);transition-property:transform box-shadow;transition-duration:.3s;transition-timing-function:ease-in-out;position:absolute;right:0;top:100%;z-index:1000;overflow-x:hidden;overflow-y:auto}@media(max-width:782px){.woocommerce-layout__activity-panel-wrapper{width:100%}}@media screen and (prefers-reduced-motion:reduce){.woocommerce-layout__activity-panel-wrapper{transition-duration:1ms}}@media(min-width:783px){.woocommerce-layout__activity-panel-wrapper{height:calc(100vh - 92px)}}.has-woocommerce-navigation .woocommerce-layout__activity-panel-wrapper{height:calc(100vh - 60px);top:60px}.woocommerce-layout__activity-panel-wrapper.is-open{transform:none;box-shadow:0 12px 12px 0 rgba(85,93,102,.3)}.woocommerce-layout__activity-panel-wrapper.is-switching{animation:tabSwitch;animation-duration:.3s}@media screen and (prefers-reduced-motion:reduce){.woocommerce-layout__activity-panel-wrapper.is-switching{animation:none}}.woocommerce-layout__activity-panel-wrapper .woocommerce-empty-content{padding-left:24px;padding-right:24px}.woocommerce-layout__activity-panel-avatar-flag-overlay{position:relative;top:-12px}.woocommerce-layout__activity-panel-avatar-flag-overlay .woocommerce-flag{position:relative;top:16px;border:2px solid #fff}.woocommerce-layout__notice-list-hide{display:none}.highlight-tooltip__container{position:absolute;width:0;height:0}.highlight-tooltip__container.highlight-tooltip__show{top:0;left:0;width:100%;height:100%}.highlight-tooltip__portal{width:100%;height:100%;position:relative}.highlight-tooltip__portal .highlight-tooltip__overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:rgba(0,0,0,.35);z-index:100000;animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards}@media(prefers-reduced-motion:reduce){.highlight-tooltip__portal .highlight-tooltip__overlay{animation-duration:1ms}}.highlight-tooltip__popover .components-card{min-width:360px}.highlight-tooltip__popover .components-card__header{font-size:16px;font-size:1rem;font-weight:600;box-sizing:border-box}.highlight-tooltip__popover .components-card__footer{justify-content:flex-end;box-sizing:border-box}@media(max-width:782px){.woocommerce-layout__show-app-banner .woocommerce-layout__header-wrapper{padding-top:56px}}.woocommerce-mobile-app-banner{background-color:#3c2861;position:absolute;top:0;left:0;width:100%;display:flex;height:56px;align-items:center;padding:0 6px 0 4px}@media(min-width:401px){.woocommerce-mobile-app-banner{padding:0 13px 0 10px}}@media(min-width:783px){.woocommerce-mobile-app-banner{display:none}}.woocommerce-mobile-app-banner .gridicon{fill:#fff;margin-right:10px}.woocommerce-mobile-app-banner .components-button.is-secondary{margin-left:auto;color:#fff;box-shadow:inset 0 0 0 1px #fff}.woocommerce-mobile-app-banner .components-button.is-secondary:active,.woocommerce-mobile-app-banner .components-button.is-secondary:hover{color:#fff;box-shadow:inset 0 0 0 1px #fff;background:none}.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description{color:#fff;margin-left:8px}@media(min-width:401px){.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description{margin-left:13px}}.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description .woocommerce-mobile-app-banner__description__text{margin:0;font-size:10px}.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description .woocommerce-mobile-app-banner__description__text:first-child{font-weight:700}@media(min-width:401px){.woocommerce-mobile-app-banner .woocommerce-mobile-app-banner__description .woocommerce-mobile-app-banner__description__text{margin-left:13px;font-size:13px}}.woocommerce-navigation{display:grid;grid-template-rows:min-content 1fr;height:100%}.woocommerce-navigation .woocommerce-navigation__wrapper h2>span{width:100%}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__menu{overflow-y:auto;margin-bottom:0;padding-bottom:24px}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__group+.components-navigation__group{margin-top:24px}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item{margin-bottom:0}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item .components-button{opacity:1}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item:not(:hover) .components-button{color:#ccc}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item:hover .components-button{color:#fff}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item.is-active .components-button{color:#fff}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item a.components-button{padding:6px 16px}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item:not(:hover) a.components-button{color:#ccc}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__item.is-active a.components-button{color:#fff}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation{height:100%}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation>div{height:100%;display:grid;grid-template-rows:1fr min-content}.woocommerce-navigation .woocommerce-navigation__wrapper.is-root .components-navigation__menu-secondary{border-top:1px solid #2c3338;margin:0 -8px;padding:16px 8px 12px}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__group-title,.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__menu-title{color:#f0f0f0;opacity:1}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button{color:#ccc;opacity:1}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button,.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button span{font-size:13px;line-height:normal}.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button:hover,.woocommerce-navigation .woocommerce-navigation__wrapper .components-navigation__back-button:hover:not(:disabled){color:#ddd}.woocommerce-navigation-header{display:flex;align-items:center;border:none;border-radius:0;height:auto}.woocommerce-navigation-header .woocommerce-navigation-header__site-icon.components-button{padding:12px;height:60px;color:#fff}.woocommerce-navigation-header .woocommerce-navigation-header__site-icon.components-button:focus,.woocommerce-navigation-header .woocommerce-navigation-header__site-icon.components-button:hover,.woocommerce-navigation-header .woocommerce-navigation-header__site-icon.components-button:not([aria-disabled=true]):active{color:#fff}.woocommerce-navigation-header .woocommerce-navigation-header__site-title.components-button{padding-left:0;color:#ccc;font-weight:600}.woocommerce-navigation-header .woocommerce-navigation-header__site-title.components-button:active,.woocommerce-navigation-header .woocommerce-navigation-header__site-title.components-button:focus,.woocommerce-navigation-header .woocommerce-navigation-header__site-title.components-button:hover{color:#e0e0e0}.woocommerce-navigation-header .woocommerce-navigation-header__site-title{padding-top:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.woocommerce-navigation{position:relative;width:240px;box-sizing:border-box;background-color:#1e1e1e;z-index:1100}@media(max-width:960px){.woocommerce-navigation{width:60px;height:60px}}.woocommerce-navigation .components-navigation{box-sizing:border-box}.woocommerce-navigation .components-navigation__menu-title{overflow:visible}.woocommerce-navigation .components-navigation__menu{scrollbar-color:#757575 #1e1e1e;scrollbar-width:thin}.woocommerce-navigation .components-navigation__menu::-webkit-scrollbar-thumb{border-radius:10px;background-color:#757575}.woocommerce-navigation .components-navigation__menu::-webkit-scrollbar-thumb:hover{background-color:#757575;width:8px;height:8px}.woocommerce-navigation .components-navigation__menu::-webkit-scrollbar{width:8px;height:8px}.woocommerce-navigation__wrapper{background-color:#1e1e1e;position:absolute;top:60px;width:100%;height:calc(100vh - 92px);overflow-y:auto}.is-wp-toolbar-disabled .woocommerce-navigation__wrapper{height:calc(100vh - 60px)}body.is-wc-nav-expanded .woocommerce-navigation{width:240px;height:100%}body.is-wc-nav-expanded font>.xdebug-error{margin-left:256px}body.is-wc-nav-folded .woocommerce-navigation{width:60px;height:60px;overflow:hidden}body.is-wc-nav-folded .woocommerce-navigation .woocommerce-navigation-header>*{display:none}body.is-wc-nav-folded .woocommerce-navigation .woocommerce-navigation-header__site-icon{display:block}body.is-wc-nav-folded .woocommerce-navigation .components-navigation{display:none}body.is-wc-nav-folded .woocommerce-transient-notices{left:16px}body.is-wc-nav-folded #wpbody{padding-left:0}.has-woocommerce-navigation #adminmenuback,.has-woocommerce-navigation #adminmenuwrap{display:none!important}.has-woocommerce-navigation.woocommerce_page_wc-reports .woo-nav-tab-wrapper,.has-woocommerce-navigation.woocommerce_page_wc-settings .woo-nav-tab-wrapper,.has-woocommerce-navigation.woocommerce_page_wc-status .woo-nav-tab-wrapper{display:none}.has-woocommerce-navigation.woocommerce_page_wc-reports .woocommerce .subsubsub,.has-woocommerce-navigation.woocommerce_page_wc-settings .woocommerce .subsubsub,.has-woocommerce-navigation.woocommerce_page_wc-status .woocommerce .subsubsub{font-size:14px;margin:5px 0}.has-woocommerce-navigation #wpcontent,.has-woocommerce-navigation #wpfooter{margin-left:0}@media(max-width:960px){.has-woocommerce-navigation #wpcontent,.has-woocommerce-navigation #wpfooter{margin-left:0}}.has-woocommerce-navigation #wpbody{padding-left:240px}@media(max-width:960px){.has-woocommerce-navigation #wpbody{padding-left:0}}.has-woocommerce-navigation .woocommerce-layout__header.is-embed-loading:before{content:"";position:fixed;width:240px;height:100%;background:#1e1e1e}@media(max-width:960px){.has-woocommerce-navigation .woocommerce-layout__header.is-embed-loading:before{width:60px;height:60px}}.has-woocommerce-navigation #woocommerce-embedded-root.is-embed-loading{margin-bottom:-32px}.has-woocommerce-navigation:not(.is-wp-toolbar-disabled) #wpbody-content{margin-top:32px}.has-woocommerce-navigation font>.xdebug-error{margin-top:60px}.woocommerce-navigation-category-title{display:flex;align-items:center;font-size:20px;line-height:28px}.woocommerce-navigation-category-title .woocommerce-navigation-favorite-button{margin-left:auto}.woocommerce-navigation-favorite-button.components-button .star-empty-icon{color:#949494}.woocommerce-navigation-favorite-button.components-button .star-filled-icon{color:#ffb900}.woocommerce-embedded-layout__primary{padding:0 20px}.woocommerce-embedded-layout__primary .components-card__footer,.woocommerce-embedded-layout__primary .components-card__header{box-sizing:border-box}@media(max-width:782px){.woocommerce-embedded-layout__primary{padding:0}}.woocommerce-recommended-payments-card{margin:0 15px 10px 0;animation:isLoaded;animation-duration:.25s}.woocommerce-recommended-payments-card .woocommerce-list__item:hover{background-color:#fff}.woocommerce-recommended-payments-card .woocommerce-list__item:hover .woocommerce-list__item-title{color:#1e1e1e}.woocommerce-recommended-payments-card .woocommerce-list__item-title{font-size:14px;color:#1e1e1e;font-weight:600}.woocommerce-recommended-payments-card .woocommerce-review-activity-card__section-controls{text-align:center}.woocommerce-recommended-payments-card .woocommerce-pill{margin-left:4px;padding:2px 8px}@media(max-width:480px){.woocommerce-recommended-payments-card .woocommerce-pill{margin-top:4px;margin-bottom:4px}}.woocommerce-recommended-payments-card .components-card__footer .gridicon{margin-left:4px}.woocommerce-recommended-payments-card .woocommerce-list__item-enter{opacity:0;max-height:100vh;transform:none}.woocommerce-recommended-payments-card .woocommerce-list__item-enter-active{opacity:1;transition:opacity .2s}.woocommerce-recommended-payments-card .woocommerce-list__item-after .components-button{margin-left:12px}.woocommerce-recommended-payments-card .woocommerce-list__item-before img{max-width:96px;height:36px;border-radius:8px}.woocommerce-recommended-payments-card .woocommerce-list__item-text,.woocommerce-recommended-payments-card .woocommerce-recommended-payments__header-heading{max-width:749px}@media(max-width:782px){.woocommerce-recommended-payments-card{margin:0 0 10px}}:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}.woocommerce_tax_settings_conflict_error{padding:15px 10px;min-width:400px;width:400px}.woocommerce_tax_settings_conflict_error_card_body{display:flex;flex-direction:row;padding-right:16px!important}.woocommerce_tax_settings_conflict_error_card_body__warning_icon{width:20px;height:20px;margin-block:10px;margin-right:16px}.woocommerce_tax_settings_conflict_error_card_body__body_text{margin-bottom:16px}.woocommerce_tax_settings_conflict_error_card_body__close_icon{padding:0;height:24px;color:grey}.woocommerce_admin_tax_settings_slotfill_td,.woocommerce_admin_tax_settings_slotfill_th{padding:0!important}[aria-labelledby=select2-woocommerce_tax_display_shop-container].is-conflict{border:red!important;border-style:solid!important;border-width:1px!important}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/block-templates/index.asset.php b/wp/wp-content/plugins/woocommerce/assets/client/admin/block-templates/index.asset.php
index 1cd8bc67..de89dced 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/block-templates/index.asset.php
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/block-templates/index.asset.php
@@ -1 +1 @@
- array('wp-block-editor', 'wp-blocks', 'wp-data', 'wp-element'), 'version' => '623b56b7c1bb3ab1963cdde562f565f4');
\ No newline at end of file
+ array('wp-block-editor', 'wp-blocks', 'wp-data', 'wp-element'), 'version' => '96e5e114336f1fa562e0c2c4b6183f65');
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/block-templates/index.js b/wp/wp-content/plugins/woocommerce/assets/client/admin/block-templates/index.js
index 346f5ee0..d86a4b01 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/block-templates/index.js
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/block-templates/index.js
@@ -1 +1 @@
-(()=>{var __webpack_modules__={86657:(e,t,u)=>{"use strict";const n=u(87602),r={findRule(e,t){for(let u=0;ue.alternatives.every(a),sequence:e=>e.elements.some(a),simple_and:o,simple_not:o,optional:o,zero_or_more:o,repeated(e){const t=e.min?e.min:e.max;return!("constant"!==t.type||0===t.value||!a(e.expression)&&!(t.value>1&&e.delimiter&&a(e.delimiter)))},semantic_and:o,semantic_not:o,rule_ref(t){const u=r.findRule(e,t.name);return u?a(u):void 0},literal:e=>""!==e.value,class:u,any:u});return a(t)}};e.exports=r},73629:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";const generateBytecode=__webpack_require__(27713),generateJS=__webpack_require__(72365),inferenceMatchResult=__webpack_require__(51358),removeProxyRules=__webpack_require__(47349),reportDuplicateLabels=__webpack_require__(13747),reportDuplicateRules=__webpack_require__(7937),reportInfiniteRecursion=__webpack_require__(47771),reportInfiniteRepetition=__webpack_require__(74414),reportUndefinedRules=__webpack_require__(78277),reportIncorrectPlucking=__webpack_require__(43046),Session=__webpack_require__(52399),visitor=__webpack_require__(87602),{base64}=__webpack_require__(93758);function processOptions(e,t){const u={};return Object.keys(e).forEach((t=>{u[t]=e[t]})),Object.keys(t).forEach((e=>{Object.prototype.hasOwnProperty.call(u,e)||(u[e]=t[e])})),u}function isSourceMapCapable(e){return"string"==typeof e?e.length>0:e&&"function"==typeof e.offset}const compiler={visitor,passes:{check:[reportUndefinedRules,reportDuplicateRules,reportDuplicateLabels,reportInfiniteRecursion,reportInfiniteRepetition,reportIncorrectPlucking],transform:[removeProxyRules,inferenceMatchResult],generate:[generateBytecode,generateJS]},compile(ast,passes,options){if(options=void 0!==options?options:{},options=processOptions(options,{allowedStartRules:[ast.rules[0].name],cache:!1,dependencies:{},exportVar:null,format:"bare",output:"parser",trace:!1}),!Array.isArray(options.allowedStartRules))throw new Error("allowedStartRules must be an array");if(0===options.allowedStartRules.length)throw new Error("Must have at least one start rule");const allRules=ast.rules.map((e=>e.name));if(options.allowedStartRules.some((e=>"*"===e)))options.allowedStartRules=allRules;else for(const e of options.allowedStartRules)if(-1===allRules.indexOf(e))throw new Error(`Unknown start rule "${e}"`);if(("source-and-map"===options.output||"source-with-inline-map"===options.output)&&!isSourceMapCapable(options.grammarSource))throw new Error("Must provide grammarSource (as a string or GrammarLocation) in order to generate source maps");const session=new Session(options);switch(Object.keys(passes).forEach((e=>{session.stage=e,session.info(`Process stage ${e}`),passes[e].forEach((t=>{session.info(`Process pass ${e}.${t.name}`),t(ast,options,session)})),session.checkErrors()})),options.output){case"parser":return eval(ast.code.toString());case"source":return ast.code.toString();case"source-and-map":return ast.code;case"source-with-inline-map":{if("undefined"==typeof TextEncoder)throw new Error("TextEncoder is not supported by this platform");const e=ast.code.toStringWithSourceMap(),t=new TextEncoder,u=base64(t.encode(JSON.stringify(e.map.toJSON())));return e.code+`//# sourceMappingURL=data:application/json;charset=utf-8;base64,${u}\n`}case"ast":return ast;default:throw new Error("Invalid output format: "+options.output+".")}}};module.exports=compiler},10818:e=>{"use strict";e.exports={PUSH:0,PUSH_EMPTY_STRING:35,PUSH_UNDEFINED:1,PUSH_NULL:2,PUSH_FAILED:3,PUSH_EMPTY_ARRAY:4,PUSH_CURR_POS:5,POP:6,POP_CURR_POS:7,POP_N:8,NIP:9,APPEND:10,WRAP:11,TEXT:12,PLUCK:36,IF:13,IF_ERROR:14,IF_NOT_ERROR:15,IF_LT:30,IF_GE:31,IF_LT_DYNAMIC:32,IF_GE_DYNAMIC:33,WHILE_NOT_ERROR:16,MATCH_ANY:17,MATCH_STRING:18,MATCH_STRING_IC:19,MATCH_CHAR_CLASS:20,MATCH_REGEXP:20,ACCEPT_N:21,ACCEPT_STRING:22,FAIL:23,LOAD_SAVED_POS:24,UPDATE_SAVED_POS:25,CALL:26,RULE:27,SILENT_FAILS_ON:28,SILENT_FAILS_OFF:29,SOURCE_MAP_PUSH:37,SOURCE_MAP_POP:38,SOURCE_MAP_LABEL_PUSH:39,SOURCE_MAP_LABEL_POP:40}},27713:(e,t,u)=>{"use strict";const n=u(86657),r=u(10818),o=u(87602),{ALWAYS_MATCH:a,SOMETIMES_MATCH:s,NEVER_MATCH:i}=u(51358);e.exports=function(e,t){const u=[],c=[],l=[],p=[],A=[];function h(e){const t=u.indexOf(e);return-1===t?u.push(e)-1:t}function E(e){const t=JSON.stringify(e),u=l.findIndex((e=>JSON.stringify(e)===t));return-1===u?l.push(e)-1:u}function d(e,t,u){const n={predicate:e,params:t,body:u.code,location:u.codeLocation},r=JSON.stringify(n),o=p.findIndex((e=>JSON.stringify(e)===r));return-1===o?p.push(n)-1:o}function f(e){return A.push(e)-1}function C(e){const t={};return Object.keys(e).forEach((u=>{t[u]=e[u]})),t}function g(e,...t){return e.concat(...t)}function m(e,t,u,n){return e===a?u:e===i?n:t.concat([u.length,n.length],u,n)}function F(e,t,u,n){const o=Object.keys(u).map((e=>n-u[e]));return[r.CALL,e,t,o.length].concat(o)}function _(e,t,u){const n=0|e.match;return g([r.PUSH_CURR_POS],[r.SILENT_FAILS_ON],y(e,{sp:u.sp+1,env:C(u.env),action:null}),[r.SILENT_FAILS_OFF],m(t?-n:n,[t?r.IF_ERROR:r.IF_NOT_ERROR],g([r.POP],[t?r.POP:r.POP_CURR_POS],[r.PUSH_UNDEFINED]),g([r.POP],[t?r.POP_CURR_POS:r.POP],[r.PUSH_FAILED])))}function D(e,t,u){const n=d(!0,Object.keys(u.env),e);return g([r.UPDATE_SAVED_POS],F(n,0,u.env,u.sp),m(0|e.match,[r.IF],g([r.POP],t?[r.PUSH_FAILED]:[r.PUSH_UNDEFINED]),g([r.POP],t?[r.PUSH_UNDEFINED]:[r.PUSH_FAILED])))}function B(e){return t=[r.WHILE_NOT_ERROR],u=g([r.APPEND],e),t.concat([u.length],u);var t,u}function x(e,t,u,n){switch(e.type){case"constant":return{pre:[],post:[],sp:u};case"variable":return e.sp=n+u-t[e.value],{pre:[],post:[],sp:u};case"function":return e.sp=n,{pre:F(d(!0,Object.keys(t),{code:e.value,codeLocation:e.codeLocation}),0,t,u),post:[r.NIP],sp:u+1};default:throw new Error(`Unknown boundary type "${e.type}" for the "repeated" node`)}}function v(e,t){if(null!==t.value){const u="constant"===t.type?[r.IF_GE,t.value]:[r.IF_GE_DYNAMIC,t.sp];return m(s,u,[r.PUSH_FAILED],e)}return e}const y=(S={grammar(e){e.rules.forEach(y),e.literals=u,e.classes=c,e.expectations=l,e.functions=p,e.locations=A},rule(e){e.bytecode=y(e.expression,{sp:-1,env:{},pluck:[],action:null})},named(e,t){const u=0|e.match,n=u===i?null:E({type:"rule",value:e.name});return g([r.SILENT_FAILS_ON],y(e.expression,t),[r.SILENT_FAILS_OFF],m(u,[r.IF_ERROR],[r.FAIL,n],[]))},choice:(e,t)=>function e(t,u){const n=0|t[0].match,o=y(t[0],{sp:u.sp,env:C(u.env),action:null});return n===a?o:g(o,t.length>1?m(s,[r.IF_ERROR],g([r.POP],e(t.slice(1),u)),[]):[])}(e.alternatives,t),action(e,t){const u=C(t.env),n="sequence"!==e.expression.type||0===e.expression.elements.length,o=y(e.expression,{sp:t.sp+(n?1:0),env:u,action:e}),a=0|e.expression.match,s=n&&a!==i?d(!1,Object.keys(u),e):null;return n?g([r.PUSH_CURR_POS],o,m(a,[r.IF_NOT_ERROR],g([r.LOAD_SAVED_POS,1],F(s,1,u,t.sp+2)),[]),[r.NIP]):o},sequence:(e,t)=>g([r.PUSH_CURR_POS],function t(u,n){if(u.length>0){const o=e.elements.length-u.length+1;return g(y(u[0],{sp:n.sp,env:n.env,pluck:n.pluck,action:null}),m(0|u[0].match,[r.IF_NOT_ERROR],t(u.slice(1),{sp:n.sp+1,env:n.env,pluck:n.pluck,action:n.action}),g(o>1?[r.POP_N,o]:[r.POP],[r.POP_CURR_POS],[r.PUSH_FAILED])))}if(n.pluck.length>0)return g([r.PLUCK,e.elements.length+1,n.pluck.length],n.pluck.map((e=>n.sp-e)));if(n.action){const t=d(!1,Object.keys(n.env),n.action);return g([r.LOAD_SAVED_POS,e.elements.length],F(t,e.elements.length+1,n.env,n.sp))}return g([r.WRAP,e.elements.length],[r.NIP])}(e.elements,{sp:t.sp+1,env:t.env,pluck:[],action:t.action})),labeled(e,u){let n=u.env;const o=e.label,a=u.sp+1;o&&(n=C(u.env),u.env[e.label]=a),e.pick&&u.pluck.push(a);const s=y(e.expression,{sp:u.sp,env:n,action:null});return o&&e.labelLocation&&t&&"source-and-map"===t.output?g([r.SOURCE_MAP_LABEL_PUSH,a,h(o),f(e.labelLocation)],s,[r.SOURCE_MAP_LABEL_POP,a]):s},text:(e,t)=>g([r.PUSH_CURR_POS],y(e.expression,{sp:t.sp+1,env:C(t.env),action:null}),m(0|e.match,[r.IF_NOT_ERROR],g([r.POP],[r.TEXT]),[r.NIP])),simple_and:(e,t)=>_(e.expression,!1,t),simple_not:(e,t)=>_(e.expression,!0,t),optional:(e,t)=>g(y(e.expression,{sp:t.sp,env:C(t.env),action:null}),m(-(0|e.expression.match),[r.IF_ERROR],g([r.POP],[r.PUSH_NULL]),[])),zero_or_more(e,t){const u=y(e.expression,{sp:t.sp+1,env:C(t.env),action:null});return g([r.PUSH_EMPTY_ARRAY],u,B(u),[r.POP])},one_or_more(e,t){const u=y(e.expression,{sp:t.sp+1,env:C(t.env),action:null});return g([r.PUSH_EMPTY_ARRAY],u,m(0|e.expression.match,[r.IF_NOT_ERROR],g(B(u),[r.POP]),g([r.POP],[r.POP],[r.PUSH_FAILED])))},repeated(e,t){const u=e.min?e.min:e.max,n="constant"!==u.type||u.value>0,o="constant"!==e.max.type&&null!==e.max.value,a=n?2:1,i=e.min?x(e.min,t.env,t.sp,2+("function"===e.max.type?1:0)):{pre:[],post:[],sp:t.sp},c=x(e.max,t.env,i.sp,a),l=y(e.expression,{sp:c.sp+a,env:C(t.env),action:null}),p=null!==e.delimiter?y(e.expression,{sp:c.sp+a+1,env:C(t.env),action:null}):l,A=function(e,t,u,n,o){return e?g([r.PUSH_CURR_POS],y(e,{sp:n.sp+o+1,env:C(n.env),action:null}),m(0|e.match,[r.IF_NOT_ERROR],g([r.POP],u,m(-t,[r.IF_ERROR],[r.POP,r.POP_CURR_POS,r.PUSH_FAILED],[r.NIP])),[r.NIP])):u}(e.delimiter,0|e.expression.match,p,t,a),h=v(A,e.max),E=o?v(l,e.max):l,d=g(n?[r.PUSH_CURR_POS]:[],[r.PUSH_EMPTY_ARRAY],E,B(h),[r.POP]);return g(i.pre,c.pre,n?function(e,t){const u="constant"===t.type?[r.IF_LT,t.value]:[r.IF_LT_DYNAMIC,t.sp];return g(e,m(s,u,[r.POP,r.POP_CURR_POS,r.PUSH_FAILED],[r.NIP]))}(d,u):d,c.post,i.post)},group:(e,t)=>y(e.expression,{sp:t.sp,env:C(t.env),action:null}),semantic_and:(e,t)=>D(e,!1,t),semantic_not:(e,t)=>D(e,!0,t),rule_ref:t=>[r.RULE,n.indexOfRule(e,t.name)],literal(e){if(e.value.length>0){const t=0|e.match,u=t===s||t===a&&!e.ignoreCase?h(e.ignoreCase?e.value.toLowerCase():e.value):null,n=t!==a?E({type:"literal",value:e.value,ignoreCase:e.ignoreCase}):null;return m(t,e.ignoreCase?[r.MATCH_STRING_IC,u]:[r.MATCH_STRING,u],e.ignoreCase?[r.ACCEPT_N,e.value.length]:[r.ACCEPT_STRING,u],[r.FAIL,n])}return[r.PUSH_EMPTY_STRING]},class(e){const t=0|e.match,u=t===s?function(e){const t={value:e.parts,inverted:e.inverted,ignoreCase:e.ignoreCase},u=JSON.stringify(t),n=c.findIndex((e=>JSON.stringify(e)===u));return-1===n?c.push(t)-1:n}(e):null,n=t!==a?E({type:"class",value:e.parts,inverted:e.inverted,ignoreCase:e.ignoreCase}):null;return m(t,[r.MATCH_CHAR_CLASS,u],[r.ACCEPT_N,1],[r.FAIL,n])},any(e){const t=0|e.match,u=t!==a?E({type:"any"}):null;return m(t,[r.MATCH_ANY],[r.ACCEPT_N,1],[r.FAIL,u])}},t&&"source-and-map"===t.output&&Object.entries(S).forEach((([e,t])=>{S[e]=function(e,...u){const n=t(e,...u);return void 0!==n&&e.location?g([r.SOURCE_MAP_PUSH,f(e.location)],n,[r.SOURCE_MAP_POP]):n}})),o.build(S));var S;y(e)}},72365:(e,t,u)=>{"use strict";const n=u(86657),r=u(10818),o=u(82169),a=u(62415),{stringEscape:s,regexpClassEscape:i}=u(93758),{SourceNode:c}=u(10782),l=u(49002);function p(e,t,u){const n=l.offsetStart(t),r=n.line,o=n.column-1,a=e.split("\n");return 1===a.length?new c(r,o,String(t.source),e,u):new c(null,null,String(t.source),a.map(((e,n)=>new c(r+n,0===n?o:0,String(t.source),n===a.length-1?e:[e,"\n"],u))))}function A(e,t,u,n,r){if(u){const o=l.offsetEnd(u);return new c(null,null,String(u.source),[e,p(t,u,r),new c(o.line,o.column-1,String(u.source),n)])}return new c(null,null,null,[e,t,n])}e.exports=function(e,t){function u(e){let t=!0,u=0;return function e(n){return Array.isArray(n)?n.map(e):n instanceof c?(u++,n.children=e(n.children),u--,n):(n=t?n.replace(/^(.+)$/gm," $1"):n.replace(/\n(\s*\S)/g,"\n $1"),t=!u||n.endsWith("\n"),n)}(e)}function l(e){return"peg$c"+e}function h(e){return"peg$r"+e}function E(e){return"peg$e"+e}function d(e){return"peg$f"+e}function f(e){return"peg$parse"+e}function C(e){return e.codeLocation?p(e.code,e.codeLocation,"$"+e.type):e.code}e.code=function(e){function n(){return[`// Generated by Peggy ${a}.`,"//","// https://peggyjs.org/"]}function r(){return t.trace?["{"," SyntaxError: peg$SyntaxError,"," DefaultTracer: peg$DefaultTracer,"," parse: peg$parse","}"].join("\n"):["{"," SyntaxError: peg$SyntaxError,"," parse: peg$parse","}"].join("\n")}const o={bare:()=>[...n(),"(function() {",' "use strict";',"",e,"",u("return "+r()+";"),"})()"],commonjs(){const u=Object.keys(t.dependencies),o=n();return o.push("",'"use strict";',""),u.length>0&&(u.forEach((e=>{o.push("var "+e+' = require("'+s(t.dependencies[e])+'");')})),o.push("")),o.push(e,"","module.exports = "+r()+";"),o},es(){const u=Object.keys(t.dependencies),r=n();return r.push(""),u.length>0&&(u.forEach((e=>{r.push("import "+e+' from "'+s(t.dependencies[e])+'";')})),r.push("")),r.push(e,"","export {"," peg$SyntaxError as SyntaxError,",t.trace?" peg$DefaultTracer as DefaultTracer,":""," peg$parse as parse","};"),r},amd(){const o=Object.keys(t.dependencies),a="["+o.map((e=>t.dependencies[e])).map((e=>'"'+s(e)+'"')).join(", ")+"]",i=o.join(", ");return[...n(),"define("+a+", function("+i+") {",' "use strict";',"",e,"",u("return "+r()+";"),"});"]},globals:()=>[...n(),"(function(root) {",' "use strict";',"",e,"",u("root."+t.exportVar+" = "+r()+";"),"})(this);"],umd(){const o=Object.keys(t.dependencies),a=o.map((e=>t.dependencies[e])),i="["+a.map((e=>'"'+s(e)+'"')).join(", ")+"]",c=a.map((e=>'require("'+s(e)+'")')).join(", "),l=o.join(", "),p=n();return p.push("(function(root, factory) {",' if (typeof define === "function" && define.amd) {'," define("+i+", factory);",' } else if (typeof module === "object" && module.exports) {'," module.exports = factory("+c+");"),null!==t.exportVar&&p.push(" } else {"," root."+t.exportVar+" = factory();"),p.push(" }","})(this, function("+l+") {",' "use strict";',"",e,"",u("return "+r()+";"),"});"),p}},i=o[t.format]();return new c(null,null,t.grammarSource,i.map((e=>e instanceof c?e:e+"\n")))}(function(){const a=[];e.topLevelInitializer&&(a.push(C(e.topLevelInitializer)),a.push("")),a.push("function peg$subclass(child, parent) {"," function C() { this.constructor = child; }"," C.prototype = parent.prototype;"," child.prototype = new C();","}","","function peg$SyntaxError(message, expected, found, location) {"," var self = Error.call(this, message);"," // istanbul ignore next Check is a necessary evil to support older environments"," if (Object.setPrototypeOf) {"," Object.setPrototypeOf(self, peg$SyntaxError.prototype);"," }"," self.expected = expected;"," self.found = found;"," self.location = location;",' self.name = "SyntaxError";'," return self;","}","","peg$subclass(peg$SyntaxError, Error);","","function peg$padEnd(str, targetLength, padString) {",' padString = padString || " ";'," if (str.length > targetLength) { return str; }"," targetLength -= str.length;"," padString += padString.repeat(targetLength);"," return str + padString.slice(0, targetLength);","}","","peg$SyntaxError.prototype.format = function(sources) {",' var str = "Error: " + this.message;'," if (this.location) {"," var src = null;"," var k;"," for (k = 0; k < sources.length; k++) {"," if (sources[k].source === this.location.source) {"," src = sources[k].text.split(/\\r\\n|\\n|\\r/g);"," break;"," }"," }"," var s = this.location.start;",' var offset_s = (this.location.source && (typeof this.location.source.offset === "function"))'," ? this.location.source.offset(s)"," : s;",' var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column;'," if (src) {"," var e = this.location.end;"," var filler = peg$padEnd(\"\", offset_s.line.toString().length, ' ');"," var line = src[s.line - 1];"," var last = s.line === e.line ? e.column : line.length + 1;"," var hatLen = (last - s.column) || 1;",' str += "\\n --\x3e " + loc + "\\n"',' + filler + " |\\n"',' + offset_s.line + " | " + line + "\\n"',' + filler + " | " + peg$padEnd("", s.column - 1, \' \')',' + peg$padEnd("", hatLen, "^");'," } else {",' str += "\\n at " + loc;'," }"," }"," return str;","};","","peg$SyntaxError.buildMessage = function(expected, found) {"," var DESCRIBE_EXPECTATION_FNS = {"," literal: function(expectation) {",' return "\\"" + literalEscape(expectation.text) + "\\"";'," },",""," class: function(expectation) {"," var escapedParts = expectation.parts.map(function(part) {"," return Array.isArray(part)",' ? classEscape(part[0]) + "-" + classEscape(part[1])'," : classEscape(part);"," });","",' return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]";'," },",""," any: function() {",' return "any character";'," },",""," end: function() {",' return "end of input";'," },",""," other: function(expectation) {"," return expectation.description;"," }"," };",""," function hex(ch) {"," return ch.charCodeAt(0).toString(16).toUpperCase();"," }",""," function literalEscape(s) {"," return s",' .replace(/\\\\/g, "\\\\\\\\")',' .replace(/"/g, "\\\\\\"")',' .replace(/\\0/g, "\\\\0")',' .replace(/\\t/g, "\\\\t")',' .replace(/\\n/g, "\\\\n")',' .replace(/\\r/g, "\\\\r")',' .replace(/[\\x00-\\x0F]/g, function(ch) { return "\\\\x0" + hex(ch); })',' .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return "\\\\x" + hex(ch); });'," }",""," function classEscape(s) {"," return s",' .replace(/\\\\/g, "\\\\\\\\")',' .replace(/\\]/g, "\\\\]")',' .replace(/\\^/g, "\\\\^")',' .replace(/-/g, "\\\\-")',' .replace(/\\0/g, "\\\\0")',' .replace(/\\t/g, "\\\\t")',' .replace(/\\n/g, "\\\\n")',' .replace(/\\r/g, "\\\\r")',' .replace(/[\\x00-\\x0F]/g, function(ch) { return "\\\\x0" + hex(ch); })',' .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return "\\\\x" + hex(ch); });'," }",""," function describeExpectation(expectation) {"," return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);"," }",""," function describeExpected(expected) {"," var descriptions = expected.map(describeExpectation);"," var i, j;",""," descriptions.sort();",""," if (descriptions.length > 0) {"," for (i = 1, j = 1; i < descriptions.length; i++) {"," if (descriptions[i - 1] !== descriptions[i]) {"," descriptions[j] = descriptions[i];"," j++;"," }"," }"," descriptions.length = j;"," }",""," switch (descriptions.length) {"," case 1:"," return descriptions[0];",""," case 2:",' return descriptions[0] + " or " + descriptions[1];',""," default:",' return descriptions.slice(0, -1).join(", ")',' + ", or "'," + descriptions[descriptions.length - 1];"," }"," }",""," function describeFound(found) {",' return found ? "\\"" + literalEscape(found) + "\\"" : "end of input";'," }","",' return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";',"};",""),t.trace&&a.push("function peg$DefaultTracer() {"," this.indentLevel = 0;","}","","peg$DefaultTracer.prototype.trace = function(event) {"," var that = this;",""," function log(event) {"," function repeat(string, n) {",' var result = "", i;',""," for (i = 0; i < n; i++) {"," result += string;"," }",""," return result;"," }",""," function pad(string, length) {",' return string + repeat(" ", length - string.length);'," }","",' if (typeof console === "object") {'," console.log(",' event.location.start.line + ":" + event.location.start.column + "-"',' + event.location.end.line + ":" + event.location.end.column + " "',' + pad(event.type, 10) + " "',' + repeat(" ", that.indentLevel) + event.rule'," );"," }"," }",""," switch (event.type) {",' case "rule.enter":'," log(event);"," this.indentLevel++;"," break;","",' case "rule.match":'," this.indentLevel--;"," log(event);"," break;","",' case "rule.fail":'," this.indentLevel--;"," log(event);"," break;",""," default:",' throw new Error("Invalid event type: " + event.type + ".");'," }","};","");const p="{ "+t.allowedStartRules.map((e=>e+": "+f(e))).join(", ")+" }",g=f(t.allowedStartRules[0]);return a.push("function peg$parse(input, options) {"," options = options !== undefined ? options : {};",""," var peg$FAILED = {};"," var peg$source = options.grammarSource;",""," var peg$startRuleFunctions = "+p+";"," var peg$startRuleFunction = "+g+";","",new c(null,null,t.grammarSource,[e.literals.map(((e,t)=>" var "+l(t)+' = "'+s(e)+'";')).concat("",e.classes.map(((e,t)=>{return" var "+h(t)+" = /^["+((u=e).inverted?"^":"")+u.value.map((e=>Array.isArray(e)?i(e[0])+"-"+i(e[1]):i(e))).join("")+"]/"+(u.ignoreCase?"i":"")+";";var u}))).concat("",e.expectations.map(((e,t)=>" var "+E(t)+" = "+function(e){switch(e.type){case"rule":return'peg$otherExpectation("'+s(e.value)+'")';case"literal":return'peg$literalExpectation("'+s(e.value)+'", '+e.ignoreCase+")";case"class":return"peg$classExpectation(["+e.value.map((e=>Array.isArray(e)?'["'+s(e[0])+'", "'+s(e[1])+'"]':'"'+s(e)+'"')).join(", ")+"], "+e.inverted+", "+e.ignoreCase+")";case"any":return"peg$anyExpectation()";default:throw new Error("Unknown expectation type ("+JSON.stringify(e)+")")}}(e)+";"))).concat("").join("\n"),e.functions.map((function(e,t){return A(`\n var ${d(t)} = function(${e.params.join(", ")}) {`,e.body,e.location,"};")}))]),""," var peg$currPos = 0;"," var peg$savedPos = 0;"," var peg$posDetailsCache = [{ line: 1, column: 1 }];"," var peg$maxFailPos = 0;"," var peg$maxFailExpected = [];"," var peg$silentFails = 0;",""),t.cache&&a.push(" var peg$resultsCache = {};",""),t.trace&&a.push(' var peg$tracer = "tracer" in options ? options.tracer : new peg$DefaultTracer();',""),a.push(" var peg$result;","",' if ("startRule" in options) {'," if (!(options.startRule in peg$startRuleFunctions)) {",' throw new Error("Can\'t start parsing from rule \\"" + options.startRule + "\\".");'," }",""," peg$startRuleFunction = peg$startRuleFunctions[options.startRule];"," }",""," function text() {"," return input.substring(peg$savedPos, peg$currPos);"," }",""," function offset() {"," return peg$savedPos;"," }",""," function range() {"," return {"," source: peg$source,"," start: peg$savedPos,"," end: peg$currPos"," };"," }",""," function location() {"," return peg$computeLocation(peg$savedPos, peg$currPos);"," }",""," function expected(description, location) {"," location = location !== undefined"," ? location"," : peg$computeLocation(peg$savedPos, peg$currPos);",""," throw peg$buildStructuredError("," [peg$otherExpectation(description)],"," input.substring(peg$savedPos, peg$currPos),"," location"," );"," }",""," function error(message, location) {"," location = location !== undefined"," ? location"," : peg$computeLocation(peg$savedPos, peg$currPos);",""," throw peg$buildSimpleError(message, location);"," }",""," function peg$literalExpectation(text, ignoreCase) {",' return { type: "literal", text: text, ignoreCase: ignoreCase };'," }",""," function peg$classExpectation(parts, inverted, ignoreCase) {",' return { type: "class", parts: parts, inverted: inverted, ignoreCase: ignoreCase };'," }",""," function peg$anyExpectation() {",' return { type: "any" };'," }",""," function peg$endExpectation() {",' return { type: "end" };'," }",""," function peg$otherExpectation(description) {",' return { type: "other", description: description };'," }",""," function peg$computePosDetails(pos) {"," var details = peg$posDetailsCache[pos];"," var p;",""," if (details) {"," return details;"," } else {"," p = pos - 1;"," while (!peg$posDetailsCache[p]) {"," p--;"," }",""," details = peg$posDetailsCache[p];"," details = {"," line: details.line,"," column: details.column"," };",""," while (p < pos) {"," if (input.charCodeAt(p) === 10) {"," details.line++;"," details.column = 1;"," } else {"," details.column++;"," }",""," p++;"," }",""," peg$posDetailsCache[pos] = details;",""," return details;"," }"," }",""," function peg$computeLocation(startPos, endPos, offset) {"," var startPosDetails = peg$computePosDetails(startPos);"," var endPosDetails = peg$computePosDetails(endPos);",""," var res = {"," source: peg$source,"," start: {"," offset: startPos,"," line: startPosDetails.line,"," column: startPosDetails.column"," },"," end: {"," offset: endPos,"," line: endPosDetails.line,"," column: endPosDetails.column"," }"," };",' if (offset && peg$source && (typeof peg$source.offset === "function")) {'," res.start = peg$source.offset(res.start);"," res.end = peg$source.offset(res.end);"," }"," return res;"," }",""," function peg$fail(expected) {"," if (peg$currPos < peg$maxFailPos) { return; }",""," if (peg$currPos > peg$maxFailPos) {"," peg$maxFailPos = peg$currPos;"," peg$maxFailExpected = [];"," }",""," peg$maxFailExpected.push(expected);"," }",""," function peg$buildSimpleError(message, location) {"," return new peg$SyntaxError(message, null, null, location);"," }",""," function peg$buildStructuredError(expected, found, location) {"," return new peg$SyntaxError("," peg$SyntaxError.buildMessage(expected, found),"," expected,"," found,"," location"," );"," }",""),e.rules.forEach((i=>{a.push(...u(function(a){const i=[],c=new o(a.name,"s","var",a.bytecode),p=function t(n){let o=0;const s=n.length,i=[];let p;function A(e,r){const a=r+3,s=n[o+a-2],l=n[o+a-1];let p,A;c.checkedIf(o,(()=>{o+=a,p=t(n.slice(o,o+s)),o+=s}),l>0?()=>{A=t(n.slice(o,o+l)),o+=l}:null),i.push("if ("+e+") {"),i.push(...u(p)),l>0&&(i.push("} else {"),i.push(...u(A))),i.push("}")}function C(e){const r=n[o+2-1];let a;c.checkedLoop(o,(()=>{o+=2,a=t(n.slice(o,o+r)),o+=r})),i.push("while ("+e+") {"),i.push(...u(a)),i.push("}")}function g(e){const t=n[o+e-1];return d(n[o+1])+"("+n.slice(o+e,o+e+t).map((e=>c.index(e))).join(", ")+")"}for(;oc.index(e))).join(", ")} ]`,c.pop(n[o+1]),i.push(c.push(p)),o+=u;break}case r.IF:A(c.top(),0);break;case r.IF_ERROR:A(c.top()+" === peg$FAILED",0);break;case r.IF_NOT_ERROR:A(c.top()+" !== peg$FAILED",0);break;case r.IF_LT:A(c.top()+".length < "+n[o+1],1);break;case r.IF_GE:A(c.top()+".length >= "+n[o+1],1);break;case r.IF_LT_DYNAMIC:A(c.top()+".length < ("+c.index(n[o+1])+"|0)",1);break;case r.IF_GE_DYNAMIC:A(c.top()+".length >= ("+c.index(n[o+1])+"|0)",1);break;case r.WHILE_NOT_ERROR:C(c.top()+" !== peg$FAILED");break;case r.MATCH_ANY:A("input.length > peg$currPos",0);break;case r.MATCH_STRING:A(e.literals[n[o+1]].length>1?"input.substr(peg$currPos, "+e.literals[n[o+1]].length+") === "+l(n[o+1]):"input.charCodeAt(peg$currPos) === "+e.literals[n[o+1]].charCodeAt(0),1);break;case r.MATCH_STRING_IC:A("input.substr(peg$currPos, "+e.literals[n[o+1]].length+").toLowerCase() === "+l(n[o+1]),1);break;case r.MATCH_CHAR_CLASS:A(h(n[o+1])+".test(input.charAt(peg$currPos))",1);break;case r.ACCEPT_N:i.push(c.push(n[o+1]>1?"input.substr(peg$currPos, "+n[o+1]+")":"input.charAt(peg$currPos)")),i.push(n[o+1]>1?"peg$currPos += "+n[o+1]+";":"peg$currPos++;"),o+=2;break;case r.ACCEPT_STRING:i.push(c.push(l(n[o+1]))),i.push(e.literals[n[o+1]].length>1?"peg$currPos += "+e.literals[n[o+1]].length+";":"peg$currPos++;"),o+=2;break;case r.FAIL:i.push(c.push("peg$FAILED")),i.push("if (peg$silentFails === 0) { peg$fail("+E(n[o+1])+"); }"),o+=2;break;case r.LOAD_SAVED_POS:i.push("peg$savedPos = "+c.index(n[o+1])+";"),o+=2;break;case r.UPDATE_SAVED_POS:i.push("peg$savedPos = peg$currPos;"),o++;break;case r.CALL:p=g(4),c.pop(n[o+2]),i.push(c.push(p)),o+=4+n[o+3];break;case r.RULE:i.push(c.push(f(e.rules[n[o+1]].name)+"()")),o+=2;break;case r.SILENT_FAILS_ON:i.push("peg$silentFails++;"),o++;break;case r.SILENT_FAILS_OFF:i.push("peg$silentFails--;"),o++;break;case r.SOURCE_MAP_PUSH:c.sourceMapPush(i,e.locations[n[o+1]]),o+=2;break;case r.SOURCE_MAP_POP:c.sourceMapPop(),o++;break;case r.SOURCE_MAP_LABEL_PUSH:c.labels[n[o+1]]={label:e.literals[n[o+2]],location:e.locations[n[o+3]]},o+=4;break;case r.SOURCE_MAP_LABEL_POP:delete c.labels[n[o+1]],o+=2;break;default:throw new Error("Invalid opcode: "+n[o]+".",{rule:a.name,bytecode:n})}return i}(a.bytecode);return i.push(A("function ",f(a.name),a.nameLocation,"() {\n",a.name)),t.trace&&i.push(" var startPos = peg$currPos;"),i.push(u(c.defines())),i.push(...u(function(u,n){const r=[];return r.push(""),t.trace&&r.push("peg$tracer.trace({",' type: "rule.enter",'," rule: "+u+","," location: peg$computeLocation(startPos, startPos, true)","});",""),t.cache&&(r.push("var key = peg$currPos * "+e.rules.length+" + "+n+";","var cached = peg$resultsCache[key];","","if (cached) {"," peg$currPos = cached.nextPos;",""),t.trace&&r.push("if (cached.result !== peg$FAILED) {"," peg$tracer.trace({",' type: "rule.match",'," rule: "+u+","," result: cached.result,"," location: peg$computeLocation(startPos, peg$currPos, true)"," });","} else {"," peg$tracer.trace({",' type: "rule.fail",'," rule: "+u+","," location: peg$computeLocation(startPos, startPos, true)"," });","}",""),r.push(" return cached.result;","}","")),r}('"'+s(a.name)+'"',n.indexOfRule(e,a.name)))),i.push(...u(p)),i.push(...u(function(e,u){const n=[];return t.cache&&n.push("","peg$resultsCache[key] = { nextPos: peg$currPos, result: "+u+" };"),t.trace&&n.push("","if ("+u+" !== peg$FAILED) {"," peg$tracer.trace({",' type: "rule.match",'," rule: "+e+","," result: "+u+","," location: peg$computeLocation(startPos, peg$currPos, true)"," });","} else {"," peg$tracer.trace({",' type: "rule.fail",'," rule: "+e+","," location: peg$computeLocation(startPos, startPos, true)"," });","}"),n.push("","return "+u+";"),n}('"'+s(a.name)+'"',c.result()))),i.push("}"),i}(i))),a.push("")})),e.initializer&&(a.push(C(e.initializer)),a.push("")),a.push(" peg$result = peg$startRuleFunction();",""," if (peg$result !== peg$FAILED && peg$currPos === input.length) {"," return peg$result;"," } else {"," if (peg$result !== peg$FAILED && peg$currPos < input.length) {"," peg$fail(peg$endExpectation());"," }",""," throw peg$buildStructuredError("," peg$maxFailExpected,"," peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,"," peg$maxFailPos < input.length"," ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)"," : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)"," );"," }","}"),new c(null,null,t.grammarSource,a.map((e=>e instanceof c?e:e+"\n")))}())}},51358:(e,t,u)=>{"use strict";const n=u(87602),r=u(86657),o=u(48256),a=-1;function s(e){function t(e){return e.match=0}function u(e){return c(e.expression),e.match=1}function s(e){return e.match=c(e.expression)}function i(e,t){const u=e.length;let n=0,r=0;for(let t=0;t0?a:0}const c=n.build({rule(e){let t,u=0;if(void 0===e.match){e.match=0;do{if(t=e.match,e.match=c(e.expression),++u>6)throw new o("Infinity cycle detected when trying to evaluate node match result",e.location)}while(t!==e.match)}return e.match},named:s,choice:e=>e.match=i(e.alternatives,!0),action:s,sequence:e=>e.match=i(e.elements,!1),labeled:s,text:s,simple_and:s,simple_not:e=>e.match=-c(e.expression),optional:u,zero_or_more:u,one_or_more:s,repeated(e){const t=c(e.expression),u=e.delimiter?c(e.delimiter):a,n=e.min?e.min:e.max;return"constant"!==n.type||"constant"!==e.max.type?e.match=0:0===e.max.value||null!==e.max.value&&n.value>e.max.value?e.match=a:t===a?e.match=0===n.value?1:a:1===t?e.delimiter&&n.value>=2?e.match=u:e.match=1:e.delimiter&&n.value>=2?e.match=u===a?a:0:e.match=0===n.value?1:0},group:s,semantic_and:t,semantic_not:t,rule_ref(t){const u=r.findRule(e,t.name);return t.match=c(u)},literal(e){const t=0===e.value.length?1:0;return e.match=t},class(e){const t=0===e.parts.length?a:0;return e.match=t},any:t});c(e)}s.ALWAYS_MATCH=1,s.SOMETIMES_MATCH=0,s.NEVER_MATCH=a,e.exports=s},47349:(e,t,u)=>{"use strict";const n=u(86657),r=u(87602);e.exports=function(e,t,u){const o=[];e.rules.forEach(((a,s)=>{var i;"rule"===(i=a).type&&"rule_ref"===i.expression.type&&(function(e,t,o){r.build({rule_ref(r){r.name===t&&(r.name=o,u.info(`Proxy rule "${t}" replaced by the rule "${o}"`,r.location,[{message:"This rule will be used",location:n.findRule(e,o).nameLocation}]))}})(e)}(e,a.name,a.expression.name),-1===t.allowedStartRules.indexOf(a.name)&&o.push(s))})),o.reverse(),o.forEach((t=>{e.rules.splice(t,1)}))}},13747:(e,t,u)=>{"use strict";const n=u(87602);e.exports=function(e,t,u){function r(e){const t={};return Object.keys(e).forEach((u=>{t[u]=e[u]})),t}function o(e,t){a(e.expression,r(t))}const a=n.build({rule(e){a(e.expression,{})},choice(e,t){e.alternatives.forEach((e=>{a(e,r(t))}))},action:o,labeled(e,t){const n=e.label;n&&Object.prototype.hasOwnProperty.call(t,n)&&u.error(`Label "${e.label}" is already defined`,e.labelLocation,[{message:"Original label location",location:t[n]}]),a(e.expression,t),t[e.label]=e.labelLocation},text:o,simple_and:o,simple_not:o,optional:o,zero_or_more:o,one_or_more:o,repeated(e,t){e.delimiter&&a(e.delimiter,r(t)),a(e.expression,r(t))},group:o});a(e)}},7937:(e,t,u)=>{"use strict";const n=u(87602);e.exports=function(e,t,u){const r={};n.build({rule(e){Object.prototype.hasOwnProperty.call(r,e.name)?u.error(`Rule "${e.name}" is already defined`,e.nameLocation,[{message:"Original rule location",location:r[e.name]}]):r[e.name]=e.nameLocation}})(e)}},43046:(e,t,u)=>{"use strict";const n=u(87602);e.exports=function(e,t,u){const r=n.build({action(e){r(e.expression,e)},labeled(e,t){e.pick&&t&&u.error('"@" cannot be used with an action block',e.labelLocation,[{message:"Action block location",location:t.codeLocation}]),r(e.expression)}});r(e)}},47771:(e,t,u)=>{"use strict";const n=u(86657),r=u(87602);e.exports=function(e,t,u){const o=[],a=[],s=r.build({rule(e){o.push(e.name),s(e.expression),o.pop()},sequence(t){t.elements.every((t=>(s(t),!n.alwaysConsumesOnSuccess(e,t))))},repeated(t){s(t.expression),t.delimiter&&!n.alwaysConsumesOnSuccess(e,t.expression)&&s(t.delimiter)},rule_ref(t){a.push(t);const r=n.findRule(e,t.name);if(-1!==o.indexOf(t.name))return o.push(t.name),void u.error("Possible infinite loop when parsing (left recursion: "+o.join(" -> ")+")",r.nameLocation,a.map(((e,t,u)=>({message:t+1!==u.length?`Step ${t+1}: call of the rule "${e.name}" without input consumption`:`Step ${t+1}: call itself without input consumption - left recursion`,location:e.location}))));r&&s(r),a.pop()}});s(e)}},74414:(e,t,u)=>{"use strict";const n=u(86657),r=u(87602);e.exports=function(e,t,u){const o=r.build({zero_or_more(t){n.alwaysConsumesOnSuccess(e,t.expression)||u.error("Possible infinite loop when parsing (repetition used with an expression that may not consume any input)",t.location)},one_or_more(t){n.alwaysConsumesOnSuccess(e,t.expression)||u.error("Possible infinite loop when parsing (repetition used with an expression that may not consume any input)",t.location)},repeated(t){if(t.delimiter&&o(t.delimiter),!(n.alwaysConsumesOnSuccess(e,t.expression)||t.delimiter&&n.alwaysConsumesOnSuccess(e,t.delimiter)))if(null===t.max.value)u.error("Possible infinite loop when parsing (unbounded range repetition used with an expression that may not consume any input)",t.location);else{const e=t.min?t.min:t.max;u.warning("constant"===e.type&&"constant"===t.max.type?`An expression may not consume any input and may always match ${t.max.value} times`:"An expression may not consume any input and may always match with a maximum repetition count",t.location)}}});o(e)}},78277:(e,t,u)=>{"use strict";const n=u(86657),r=u(87602);e.exports=function(e,t,u){r.build({rule_ref(t){n.findRule(e,t.name)||u.error(`Rule "${t.name}" is not defined`,t.location)}})(e)}},52399:(e,t,u)=>{"use strict";const n=u(48256);class r{constructor(e){"function"==typeof(e=void 0!==e?e:{}).error&&(this.error=e.error),"function"==typeof e.warning&&(this.warning=e.warning),"function"==typeof e.info&&(this.info=e.info)}error(){}warning(){}info(){}}e.exports=class{constructor(e){this._callbacks=new r(e),this._firstError=null,this.errors=0,this.problems=[],this.stage=null}error(...e){++this.errors,null===this._firstError&&(this._firstError=new n(...e),this._firstError.stage=this.stage,this._firstError.problems=this.problems),this.problems.push(["error",...e]),this._callbacks.error(this.stage,...e)}warning(...e){this.problems.push(["warning",...e]),this._callbacks.warning(this.stage,...e)}info(...e){this.problems.push(["info",...e]),this._callbacks.info(this.stage,...e)}checkErrors(){if(0!==this.errors)throw this._firstError}}},82169:(e,t,u)=>{"use strict";const{SourceNode:n}=u(10782),r=u(49002);class o{constructor(e,t,u,n){this.sp=-1,this.maxSp=-1,this.varName=t,this.ruleName=e,this.type=u,this.bytecode=n,this.labels={},this.sourceMapStack=[]}name(e){if(e<0)throw new RangeError(`Rule '${this.ruleName}': The variable stack underflow: attempt to use a variable '${this.varName}' at an index ${e}.\nBytecode: ${this.bytecode}`);return this.varName+e}static sourceNode(e,t,u){const o=r.offsetStart(e);return new n(o.line,o.column?o.column-1:null,String(e.source),t,u)}push(e){++this.sp>this.maxSp&&(this.maxSp=this.sp);const t=this.labels[this.sp],u=[this.name(this.sp)," = ",e,";"];if(t){if(this.sourceMapStack.length){const e=o.sourceNode(t.location,u.splice(0,2),t.label),{parts:r,location:a}=this.sourceMapPopInternal(),s=a.start.offsetthis.name(this.sp+1+t)))):this.name(this.sp--)}top(){return this.name(this.sp)}index(e){if(e<0)throw new RangeError(`Rule '${this.ruleName}': The variable stack overflow: attempt to get a variable at a negative index ${e}.\nBytecode: ${this.bytecode}`);return this.name(this.sp-e)}result(){if(this.maxSp<0)throw new RangeError(`Rule '${this.ruleName}': The variable stack is empty, can't get the result.\nBytecode: ${this.bytecode}`);return this.name(0)}defines(){return this.maxSp<0?"":this.type+" "+Array.from({length:this.maxSp+1},((e,t)=>this.name(t))).join(", ")+";"}checkedIf(e,t,u){const n=this.sp;if(t(),u){const t=this.sp;if(this.sp=n,u(),t!==this.sp)throw new Error("Rule '"+this.ruleName+"', position "+e+": Branches of a condition can't move the stack pointer differently (before: "+n+", after then: "+t+", after else: "+this.sp+"). Bytecode: "+this.bytecode)}}checkedLoop(e,t){const u=this.sp;if(t(),u!==this.sp)throw new Error("Rule '"+this.ruleName+"', position "+e+": Body of a loop can't move the stack pointer (before: "+u+", after: "+this.sp+"). Bytecode: "+this.bytecode)}sourceMapPush(e,t){if(this.sourceMapStack.length){const e=this.sourceMapStack[this.sourceMapStack.length-1];e[2].start.offset===t.start.offset&&e[2].end.offset>t.end.offset&&(e[2]={start:t.end,end:e[2].end,source:e[2].source})}this.sourceMapStack.push([e,e.length,t])}sourceMapPopInternal(){const[e,t,u]=this.sourceMapStack.pop(),o=e.splice(t).map((e=>e instanceof n?e:e+"\n"));if(o.length){const t=r.offsetStart(u);e.push(new n(t.line,t.column-1,String(u.source),o))}return{parts:e,location:u}}sourceMapPop(e){const{location:t}=this.sourceMapPopInternal();if(this.sourceMapStack.length&&t.end.offset{"use strict";function u(e){return e.charCodeAt(0).toString(16).toUpperCase()}t.hex=u,t.stringEscape=function(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\v/g,"\\v").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(e=>"\\x0"+u(e))).replace(/[\x10-\x1F\x7F-\xFF]/g,(e=>"\\x"+u(e))).replace(/[\u0100-\u0FFF]/g,(e=>"\\u0"+u(e))).replace(/[\u1000-\uFFFF]/g,(e=>"\\u"+u(e)))},t.regexpClassEscape=function(e){return e.replace(/\\/g,"\\\\").replace(/\//g,"\\/").replace(/]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\v/g,"\\v").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(e=>"\\x0"+u(e))).replace(/[\x10-\x1F\x7F-\xFF]/g,(e=>"\\x"+u(e))).replace(/[\u0100-\u0FFF]/g,(e=>"\\u0"+u(e))).replace(/[\u1000-\uFFFF]/g,(e=>"\\u"+u(e)))},t.base64=function(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u=e.length%3,n=e.length-u;let r="";for(let u=0;u>2],r+=t[(3&e[u])<<4|e[u+1]>>4],r+=t[(15&e[u+1])<<2|e[u+2]>>6],r+=t[63&e[u+2]];return 1===u?(r+=t[e[n]>>2],r+=t[(3&e[n])<<4],r+="=="):2===u&&(r+=t[e[n]>>2],r+=t[(3&e[n])<<4|e[n+1]>>4],r+=t[(15&e[n+1])<<2],r+="="),r}},87602:e=>{"use strict";const t={build(e){function t(t,...u){return e[t.type](t,...u)}function u(){}function n(e,...u){return t(e.expression,...u)}function r(e){return function(u,...n){u[e].forEach((e=>t(e,...n)))}}const o={grammar(e,...u){e.topLevelInitializer&&t(e.topLevelInitializer,...u),e.initializer&&t(e.initializer,...u),e.rules.forEach((e=>t(e,...u)))},top_level_initializer:u,initializer:u,rule:n,named:n,choice:r("alternatives"),action:n,sequence:r("elements"),labeled:n,text:n,simple_and:n,simple_not:n,optional:n,zero_or_more:n,one_or_more:n,repeated:(e,...u)=>(e.delimiter&&t(e.delimiter,...u),t(e.expression,...u)),group:n,semantic_and:u,semantic_not:u,rule_ref:u,literal:u,class:u,any:u};return Object.keys(o).forEach((t=>{Object.prototype.hasOwnProperty.call(e,t)||(e[t]=o[t])})),t}};e.exports=t},48256:(e,t,u)=>{"use strict";const n=u(49002),r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(const u in t)Object.prototype.hasOwnProperty.call(t,u)&&(e[u]=t[u])};class o extends Error{constructor(e,t,u){super(e),r(this,o.prototype),this.name="GrammarError",this.location=t,void 0===u&&(u=[]),this.diagnostics=u,this.stage=null,this.problems=[["error",e,t,u]]}toString(){let e=super.toString();this.location&&(e+="\n at ",void 0!==this.location.source&&null!==this.location.source&&(e+=`${this.location.source}:`),e+=`${this.location.start.line}:${this.location.start.column}`);for(const t of this.diagnostics)e+="\n from ",void 0!==t.location.source&&null!==t.location.source&&(e+=`${t.location.source}:`),e+=`${t.location.start.line}:${t.location.start.column}: ${t.message}`;return e}format(e){const t=e.map((({source:e,text:t})=>({source:e,text:null!=t?String(t).split(/\r\n|\n|\r/g):[]})));function u(e,u,r=""){let o="";const a=t.find((({source:t})=>t===e.source)),s=e.start,i=n.offsetStart(e);if(a){const t=e.end,n=a.text[s.line-1],c=(s.line===t.line?t.column:n.length+1)-s.column||1;r&&(o+=`\nnote: ${r}`),o+=`\n --\x3e ${e.source}:${i.line}:${i.column}\n${"".padEnd(u)} |\n${i.line.toString().padStart(u)} | ${n}\n${"".padEnd(u)} | ${"".padEnd(s.column-1)}${"".padEnd(c,"^")}`}else o+=`\n at ${e.source}:${i.line}:${i.column}`,r&&(o+=`: ${r}`);return o}return this.problems.filter((e=>"info"!==e[0])).map((e=>function(e,t,r,o=[]){let a=-1/0;a=r?o.reduce(((e,{location:t})=>Math.max(e,n.offsetStart(t).line)),r.start.line):Math.max.apply(null,o.map((e=>e.location.start.line))),a=a.toString().length;let s=`${e}: ${t}`;r&&(s+=u(r,a));for(const e of o)s+=u(e.location,a,e.message);return s}(...e))).join("\n\n")}}e.exports=o},49002:e=>{"use strict";e.exports=class{constructor(e,t){this.source=e,this.start=t}toString(){return String(this.source)}offset(e){return{line:e.line+this.start.line-1,column:1===e.line?e.column+this.start.column-1:e.column,offset:e.offset+this.start.offset}}static offsetStart(e){return e.source&&"function"==typeof e.source.offset?e.source.offset(e.start):e.start}static offsetEnd(e){return e.source&&"function"==typeof e.source.offset?e.source.offset(e.end):e.end}}},68189:e=>{"use strict";const t={$:"text","&":"simple_and","!":"simple_not"},u={"?":"optional","*":"zero_or_more","+":"one_or_more"},n={"&":"semantic_and","!":"semantic_not"};function r(e,t,u,n){var o=Error.call(this,e);return Object.setPrototypeOf&&Object.setPrototypeOf(o,r.prototype),o.expected=t,o.found=u,o.location=n,o.name="SyntaxError",o}function o(e,t,u){return u=u||" ",e.length>t?e:(t-=e.length,e+(u+=u.repeat(t)).slice(0,t))}!function(e,t){function u(){this.constructor=e}u.prototype=t.prototype,e.prototype=new u}(r,Error),r.prototype.format=function(e){var t="Error: "+this.message;if(this.location){var u,n=null;for(u=0;u0){for(t=1,u=1;tot&&(ot=ut,at=[]),at.push(e))}function ft(){var t,u,n,r,o,a;if(t=ut,Jt(),u=ut,n=function(){var t,u,n,r,o;return t=ut,123===e.charCodeAt(ut)?(u=p,ut++):(u=s,0===st&&dt(R)),u!==s&&(n=Yt())!==s?(125===e.charCodeAt(ut)?(r=A,ut++):(r=s,0===st&&dt(L)),r!==s&&Xt()!==s?(nt=t,t={type:"top_level_initializer",code:(o=n)[0],codeLocation:o[1],location:it()}):(ut=t,t=s)):(ut=t,t=s),t}(),n!==s?(r=Jt(),u=n):(ut=u,u=s),u===s&&(u=null),n=ut,r=function(){var e,t,u;return e=ut,(t=Yt())!==s&&Xt()!==s?(nt=e,e={type:"initializer",code:(u=t)[0],codeLocation:u[1],location:it()}):(ut=e,e=s),e}(),r!==s?(o=Jt(),n=r):(ut=n,n=s),n===s&&(n=null),r=[],o=ut,(a=Ct())!==s?(Jt(),o=a):(ut=o,o=s),o!==s)for(;o!==s;)r.push(o),o=ut,(a=Ct())!==s?(Jt(),o=a):(ut=o,o=s);else r=s;return r!==s?(nt=t,t={type:"grammar",topLevelInitializer:u,initializer:n,rules:r,location:it()}):(ut=t,t=s),t}function Ct(){var t,u,n,r,o,a,i,c;return t=ut,(u=Rt())!==s?(Jt(),n=ut,(r=It())!==s?(Jt(),n=r):(ut=n,n=s),n===s&&(n=null),61===e.charCodeAt(ut)?(r="=",ut++):(r=s,0===st&&dt(k)),r!==s?(Jt(),(o=gt())!==s&&Xt()!==s?(nt=t,i=n,c=o,t={type:"rule",name:(a=u)[0],nameLocation:a[1],expression:null!==i?{type:"named",name:i,expression:c,location:it()}:c,location:it()}):(ut=t,t=s)):(ut=t,t=s)):(ut=t,t=s),t}function gt(){var t,u,n,r,o,a,i,c;if(t=ut,(u=mt())!==s){for(n=[],r=ut,Jt(),47===e.charCodeAt(ut)?(o="/",ut++):(o=s,0===st&&dt(I)),o!==s?(Jt(),(a=mt())!==s?r=a:(ut=r,r=s)):(ut=r,r=s);r!==s;)n.push(r),r=ut,Jt(),47===e.charCodeAt(ut)?(o="/",ut++):(o=s,0===st&&dt(I)),o!==s?(Jt(),(a=mt())!==s?r=a:(ut=r,r=s)):(ut=r,r=s);nt=t,i=u,t=(c=n).length>0?{type:"choice",alternatives:[i].concat(c),location:it()}:i}else ut=t,t=s;return t}function mt(){var e,t,u,n,r,o;return e=ut,t=function(){var e,t,u,n,r,o,a;if(e=ut,(t=Ft())!==s){for(u=[],n=ut,Jt(),(r=Ft())!==s?n=r:(ut=n,n=s);n!==s;)u.push(n),n=ut,Jt(),(r=Ft())!==s?n=r:(ut=n,n=s);nt=e,o=t,e=(a=u).length>0||"labeled"===o.type&&o.pick?{type:"sequence",elements:[o].concat(a),location:it()}:o}else ut=e,e=s;return e}(),t!==s?(u=ut,Jt(),(n=Yt())!==s?u=n:(ut=u,u=s),u===s&&(u=null),nt=e,r=t,e=null!==(o=u)?{type:"action",expression:r,code:o[0],codeLocation:o[1],location:it()}:r):(ut=e,e=s),e}function Ft(){var t,u,n,r,o,a,i;return t=ut,u=function(){var t,u;return t=ut,64===e.charCodeAt(ut)?(u="@",ut++):(u=s,0===st&&dt(N)),u!==s&&(nt=t,u=it()),u}(),u!==s?((n=_t())===s&&(n=null),(r=Dt())!==s?(nt=t,o=u,a=n,(i=r).type.startsWith("semantic_")&&ct('"@" cannot be used on a semantic predicate',o),t={type:"labeled",label:null!==a?a[0]:null,labelLocation:null!==a?a[1]:o,pick:!0,expression:i,location:it()}):(ut=t,t=s)):(ut=t,t=s),t===s&&(t=ut,(u=_t())!==s?(n=Jt(),(r=Dt())!==s?(nt=t,t=function(e,t){return{type:"labeled",label:e[0],labelLocation:e[1],expression:t,location:it()}}(u,r)):(ut=t,t=s)):(ut=t,t=s),t===s&&(t=Dt())),t}function _t(){var t,u,n,r;return t=ut,(u=Rt())!==s?(Jt(),58===e.charCodeAt(ut)?(n=":",ut++):(n=s,0===st&&dt(T)),n!==s?(nt=t,r=u,Zt.indexOf(r[0])>=0&&ct(`Label can't be a reserved word "${r[0]}"`,r[1]),t=r):(ut=t,t=s)):(ut=t,t=s),t}function Dt(){var u,n,r;return u=ut,n=function(){var t;return 36===e.charCodeAt(ut)?(t="$",ut++):(t=s,0===st&&dt(M)),t===s&&(38===e.charCodeAt(ut)?(t="&",ut++):(t=s,0===st&&dt(U)),t===s&&(33===e.charCodeAt(ut)?(t="!",ut++):(t=s,0===st&&dt(j)))),t}(),n!==s?(Jt(),(r=Bt())!==s?(nt=u,u={type:t[n],expression:r,location:it()}):(ut=u,u=s)):(ut=u,u=s),u===s&&(u=Bt()),u}function Bt(){var t,n,r;return t=ut,(n=vt())!==s?(Jt(),r=function(){var t;return 63===e.charCodeAt(ut)?(t="?",ut++):(t=s,0===st&&dt(H)),t===s&&(42===e.charCodeAt(ut)?(t="*",ut++):(t=s,0===st&&dt(q)),t===s&&(43===e.charCodeAt(ut)?(t="+",ut++):(t=s,0===st&&dt(G)))),t}(),r!==s?(nt=t,t={type:u[r],expression:n,location:it()}):(ut=t,t=s)):(ut=t,t=s),t===s&&(t=function(){var t,u,n,r,o,a,i;return t=ut,(u=vt())!==s?(Jt(),124===e.charCodeAt(ut)?(n="|",ut++):(n=s,0===st&&dt(z)),n!==s?(Jt(),r=function(){var t,u,n,r,o,a;return t=ut,(u=xt())===s&&(u=null),Jt(),".."===e.substr(ut,2)?(n="..",ut+=2):(n=s,0===st&&dt(Y)),n!==s?(Jt(),(r=xt())===s&&(r=null),nt=t,t=[null!==(o=u)?o:{type:"constant",value:0},null!==(a=r)?a:{type:"constant",value:null}]):(ut=t,t=s),t===s&&(t=ut,(u=xt())!==s&&(nt=t,u=[null,u]),t=u),t}(),r!==s?(Jt(),o=ut,44===e.charCodeAt(ut)?(a=",",ut++):(a=s,0===st&&dt(W)),a!==s?(Jt(),(i=gt())!==s?(Jt(),o=i):(ut=o,o=s)):(ut=o,o=s),o===s&&(o=null),124===e.charCodeAt(ut)?(a="|",ut++):(a=s,0===st&&dt(z)),a!==s?(nt=t,t=function(e,t,u){let n=t[0],r=t[1];return"constant"===r.type&&0===r.value&&ct("The maximum count of repetitions of the rule must be > 0",r.location),{type:"repeated",min:n,max:r,expression:e,delimiter:u,location:it()}}(u,r,o)):(ut=t,t=s)):(ut=t,t=s)):(ut=t,t=s)):(ut=t,t=s),t}(),t===s&&(t=vt())),t}function xt(){var t,u;return t=ut,u=function(){var t,u,n,r;if(t=ut,u=ut,n=[],(r=zt())!==s)for(;r!==s;)n.push(r),r=zt();else n=s;return(u=n!==s?e.substring(u,ut):n)!==s&&(nt=t,u=parseInt(u,10)),u}(),u!==s&&(nt=t,u={type:"constant",value:u,location:it()}),(t=u)===s&&(t=ut,(u=Rt())!==s&&(nt=t,u={type:"variable",value:u[0],location:it()}),(t=u)===s&&(t=ut,(u=Yt())!==s&&(nt=t,u=function(e){return{type:"function",value:e[0],codeLocation:e[1],location:it()}}(u)),t=u)),t}function vt(){var t,u,r,o,a;return t=function(){var t,u,n;return st++,t=ut,(u=It())!==s?(105===e.charCodeAt(ut)?(n="i",ut++):(n=s,0===st&&dt(_e)),n===s&&(n=null),nt=t,t={type:"literal",value:u,ignoreCase:null!==n,location:it()}):(ut=t,t=s),st--,t===s&&(u=s,0===st&&dt(Fe)),t}(),t===s&&(t=function(){var t,u,n,r,o,a,i,c;if(st++,t=ut,91===e.charCodeAt(ut)?(u="[",ut++):(u=s,0===st&&dt(ye)),u!==s){for(94===e.charCodeAt(ut)?(n="^",ut++):(n=s,0===st&&dt(Se)),n===s&&(n=null),r=[],(o=Mt())===s&&(o=Ut());o!==s;)r.push(o),(o=Mt())===s&&(o=Ut());93===e.charCodeAt(ut)?(o="]",ut++):(o=s,0===st&&dt(be)),o!==s?(105===e.charCodeAt(ut)?(a="i",ut++):(a=s,0===st&&dt(_e)),a===s&&(a=null),nt=t,i=n,c=a,t={type:"class",parts:r.filter((e=>""!==e)),inverted:null!==i,ignoreCase:null!==c,location:it()}):(ut=t,t=s)}else ut=t,t=s;return st--,t===s&&(u=s,0===st&&dt(ve)),t}(),t===s&&(t=function(){var t,u;return t=ut,46===e.charCodeAt(ut)?(u=".",ut++):(u=s,0===st&&dt(je)),u!==s&&(nt=t,u={type:"any",location:it()}),u}(),t===s&&(t=function(){var t,u,n,r,o,a,i;return t=ut,(u=Rt())!==s?(n=ut,st++,r=ut,o=Jt(),a=ut,(i=It())!==s?a=i=[i,Jt()]:(ut=a,a=s),a===s&&(a=null),61===e.charCodeAt(ut)?(i="=",ut++):(i=s,0===st&&dt(k)),i!==s?r=o=[o,a,i]:(ut=r,r=s),st--,r===s?n=void 0:(ut=n,n=s),n!==s?(nt=t,t={type:"rule_ref",name:u[0],location:it()}):(ut=t,t=s)):(ut=t,t=s),t}(),t===s&&(t=function(){var t,u,r,o;return t=ut,u=function(){var t;return 38===e.charCodeAt(ut)?(t="&",ut++):(t=s,0===st&&dt(U)),t===s&&(33===e.charCodeAt(ut)?(t="!",ut++):(t=s,0===st&&dt(j))),t}(),u!==s?(Jt(),(r=Yt())!==s?(nt=t,t={type:n[u],code:(o=r)[0],codeLocation:o[1],location:it()}):(ut=t,t=s)):(ut=t,t=s),t}(),t===s&&(t=ut,40===e.charCodeAt(ut)?(u="(",ut++):(u=s,0===st&&dt(V)),u!==s?(Jt(),(r=gt())!==s?(Jt(),41===e.charCodeAt(ut)?(o=")",ut++):(o=s,0===st&&dt(J)),o!==s?(nt=t,t="labeled"===(a=r).type||"sequence"===a.type?{type:"group",expression:a,location:it()}:a):(ut=t,t=s)):(ut=t,t=s)):(ut=t,t=s)))))),t}function yt(){var t;return e.length>ut?(t=e.charAt(ut),ut++):(t=s,0===st&&dt(X)),t}function St(){var t;return st++,9===e.charCodeAt(ut)?(t="\t",ut++):(t=s,0===st&&dt(Q)),t===s&&(11===e.charCodeAt(ut)?(t="\v",ut++):(t=s,0===st&&dt(K)),t===s&&(12===e.charCodeAt(ut)?(t="\f",ut++):(t=s,0===st&&dt(ee)),t===s&&(32===e.charCodeAt(ut)?(t=" ",ut++):(t=s,0===st&&dt(te)),t===s&&(160===e.charCodeAt(ut)?(t=" ",ut++):(t=s,0===st&&dt(ue)),t===s&&(65279===e.charCodeAt(ut)?(t="\ufeff",ut++):(t=s,0===st&&dt(ne)),t===s&&(t=function(){var t;return $.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=s,0===st&&dt(et)),t}())))))),st--,t===s&&0===st&&dt(Z),t}function bt(){var t;return g.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=s,0===st&&dt(re)),t}function Pt(){var t;return st++,10===e.charCodeAt(ut)?(t="\n",ut++):(t=s,0===st&&dt(ae)),t===s&&("\r\n"===e.substr(ut,2)?(t="\r\n",ut+=2):(t=s,0===st&&dt(se)),t===s&&(13===e.charCodeAt(ut)?(t="\r",ut++):(t=s,0===st&&dt(ie)),t===s&&(8232===e.charCodeAt(ut)?(t="\u2028",ut++):(t=s,0===st&&dt(ce)),t===s&&(8233===e.charCodeAt(ut)?(t="\u2029",ut++):(t=s,0===st&&dt(le)))))),st--,t===s&&0===st&&dt(oe),t}function Ot(){var t;return st++,(t=function(){var t,u,n,r,o,a;if(t=ut,e.substr(ut,2)===h?(u=h,ut+=2):(u=s,0===st&&dt(Ae)),u!==s){for(n=[],r=ut,o=ut,st++,e.substr(ut,2)===E?(a=E,ut+=2):(a=s,0===st&&dt(he)),st--,a===s?o=void 0:(ut=o,o=s),o!==s&&(a=yt())!==s?r=o=[o,a]:(ut=r,r=s);r!==s;)n.push(r),r=ut,o=ut,st++,e.substr(ut,2)===E?(a=E,ut+=2):(a=s,0===st&&dt(he)),st--,a===s?o=void 0:(ut=o,o=s),o!==s&&(a=yt())!==s?r=o=[o,a]:(ut=r,r=s);e.substr(ut,2)===E?(r=E,ut+=2):(r=s,0===st&&dt(he)),r!==s?t=u=[u,n,r]:(ut=t,t=s)}else ut=t,t=s;return t}())===s&&(t=$t()),st--,t===s&&0===st&&dt(pe),t}function wt(){var t,u,n,r,o,a;if(t=ut,e.substr(ut,2)===h?(u=h,ut+=2):(u=s,0===st&&dt(Ae)),u!==s){for(n=[],r=ut,o=ut,st++,e.substr(ut,2)===E?(a=E,ut+=2):(a=s,0===st&&dt(he)),a===s&&(a=bt()),st--,a===s?o=void 0:(ut=o,o=s),o!==s&&(a=yt())!==s?r=o=[o,a]:(ut=r,r=s);r!==s;)n.push(r),r=ut,o=ut,st++,e.substr(ut,2)===E?(a=E,ut+=2):(a=s,0===st&&dt(he)),a===s&&(a=bt()),st--,a===s?o=void 0:(ut=o,o=s),o!==s&&(a=yt())!==s?r=o=[o,a]:(ut=r,r=s);e.substr(ut,2)===E?(r=E,ut+=2):(r=s,0===st&&dt(he)),r!==s?t=u=[u,n,r]:(ut=t,t=s)}else ut=t,t=s;return t}function $t(){var t,u,n,r,o,a;if(t=ut,"//"===e.substr(ut,2)?(u="//",ut+=2):(u=s,0===st&&dt(Ee)),u!==s){for(n=[],r=ut,o=ut,st++,a=bt(),st--,a===s?o=void 0:(ut=o,o=s),o!==s&&(a=yt())!==s?r=o=[o,a]:(ut=r,r=s);r!==s;)n.push(r),r=ut,o=ut,st++,a=bt(),st--,a===s?o=void 0:(ut=o,o=s),o!==s&&(a=yt())!==s?r=o=[o,a]:(ut=r,r=s);t=u=[u,n]}else ut=t,t=s;return t}function Rt(){var e,t,u,n;if(st++,e=ut,(t=Lt())!==s){for(u=[],n=kt();n!==s;)u.push(n),n=kt();nt=e,e=[t+u.join(""),it()]}else ut=e,e=s;return st--,e===s&&(t=s,0===st&&dt(de)),e}function Lt(){var t,u,n;return(t=function(){var t;return(t=function(){var t;return y.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=s,0===st&&dt(Ve)),t}())===s&&(t=function(){var t;return D.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=s,0===st&&dt(Ge)),t}())===s&&(t=function(){var t;return v.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=s,0===st&&dt(Ye)),t}())===s&&(t=function(){var t;return B.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=s,0===st&&dt(ze)),t}())===s&&(t=function(){var t;return x.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=s,0===st&&dt(We)),t}())===s&&(t=function(){var t;return O.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=s,0===st&&dt(Qe)),t}()),t}())===s&&(95===e.charCodeAt(ut)?(t="_",ut++):(t=s,0===st&&dt(fe)),t===s&&(t=ut,92===e.charCodeAt(ut)?(u=d,ut++):(u=s,0===st&&dt(Ce)),u!==s&&(n=Gt())!==s?t=n:(ut=t,t=s))),t}function kt(){var t;return(t=Lt())===s&&(36===e.charCodeAt(ut)?(t="$",ut++):(t=s,0===st&&dt(M)),t===s&&(t=function(){var t;return(t=function(){var t;return b.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=s,0===st&&dt(Xe)),t}())===s&&(t=function(){var t;return S.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=s,0===st&&dt(Je)),t}()),t}())===s&&(t=function(){var t;return P.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=s,0===st&&dt(Ze)),t}())===s&&(t=function(){var t;return w.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=s,0===st&&dt(Ke)),t}())===s&&(8204===e.charCodeAt(ut)?(t="",ut++):(t=s,0===st&&dt(ge)),t===s&&(8205===e.charCodeAt(ut)?(t="",ut++):(t=s,0===st&&dt(me))))),t}function It(){var t,u,n,r;if(st++,t=ut,34===e.charCodeAt(ut)?(u=f,ut++):(u=s,0===st&&dt(Be)),u!==s){for(n=[],r=Nt();r!==s;)n.push(r),r=Nt();34===e.charCodeAt(ut)?(r=f,ut++):(r=s,0===st&&dt(Be)),r!==s?(nt=t,t=n.join("")):(ut=t,t=s)}else ut=t,t=s;if(t===s)if(t=ut,39===e.charCodeAt(ut)?(u=C,ut++):(u=s,0===st&&dt(xe)),u!==s){for(n=[],r=Tt();r!==s;)n.push(r),r=Tt();39===e.charCodeAt(ut)?(r=C,ut++):(r=s,0===st&&dt(xe)),r!==s?(nt=t,t=n.join("")):(ut=t,t=s)}else ut=t,t=s;return st--,t===s&&(u=s,0===st&&dt(De)),t}function Nt(){var t,u,n,r;return t=ut,u=ut,n=ut,st++,34===e.charCodeAt(ut)?(r=f,ut++):(r=s,0===st&&dt(Be)),r===s&&(92===e.charCodeAt(ut)?(r=d,ut++):(r=s,0===st&&dt(Ce)),r===s&&(r=bt())),st--,r===s?n=void 0:(ut=n,n=s),n!==s&&(r=yt())!==s?u=n=[n,r]:(ut=u,u=s),(t=u!==s?e.substring(t,ut):u)===s&&(t=ut,92===e.charCodeAt(ut)?(u=d,ut++):(u=s,0===st&&dt(Ce)),u!==s&&(n=Ht())!==s?t=n:(ut=t,t=s),t===s&&(t=jt())),t}function Tt(){var t,u,n,r;return t=ut,u=ut,n=ut,st++,39===e.charCodeAt(ut)?(r=C,ut++):(r=s,0===st&&dt(xe)),r===s&&(92===e.charCodeAt(ut)?(r=d,ut++):(r=s,0===st&&dt(Ce)),r===s&&(r=bt())),st--,r===s?n=void 0:(ut=n,n=s),n!==s&&(r=yt())!==s?u=n=[n,r]:(ut=u,u=s),(t=u!==s?e.substring(t,ut):u)===s&&(t=ut,92===e.charCodeAt(ut)?(u=d,ut++):(u=s,0===st&&dt(Ce)),u!==s&&(n=Ht())!==s?t=n:(ut=t,t=s),t===s&&(t=jt())),t}function Mt(){var t,u,n,r,o,a;return t=ut,(u=Ut())!==s?(45===e.charCodeAt(ut)?(n="-",ut++):(n=s,0===st&&dt(Pe)),n!==s&&(r=Ut())!==s?(nt=t,a=r,(o=u).charCodeAt(0)>a.charCodeAt(0)&&ct("Invalid character range: "+e.substring(nt,ut)+"."),t=[o,a]):(ut=t,t=s)):(ut=t,t=s),t}function Ut(){var t,u,n,r;return t=ut,u=ut,n=ut,st++,93===e.charCodeAt(ut)?(r="]",ut++):(r=s,0===st&&dt(be)),r===s&&(92===e.charCodeAt(ut)?(r=d,ut++):(r=s,0===st&&dt(Ce)),r===s&&(r=bt())),st--,r===s?n=void 0:(ut=n,n=s),n!==s&&(r=yt())!==s?u=n=[n,r]:(ut=u,u=s),(t=u!==s?e.substring(t,ut):u)===s&&(t=ut,92===e.charCodeAt(ut)?(u=d,ut++):(u=s,0===st&&dt(Ce)),u!==s&&(n=Ht())!==s?t=n:(ut=t,t=s),t===s&&(t=jt())),t}function jt(){var t,u;return t=ut,92===e.charCodeAt(ut)?(u=d,ut++):(u=s,0===st&&dt(Ce)),u!==s&&Pt()!==s?(nt=t,t=""):(ut=t,t=s),t}function Ht(){var t,u,n,r;return t=function(){var t;return(t=qt())===s&&(t=function(){var t,u,n,r;return t=ut,u=ut,n=ut,st++,r=function(){var t;return(t=qt())===s&&(t=zt())===s&&(120===e.charCodeAt(ut)?(t="x",ut++):(t=s,0===st&&dt(Ne)),t===s&&(117===e.charCodeAt(ut)?(t="u",ut++):(t=s,0===st&&dt(Te)))),t}(),r===s&&(r=bt()),st--,r===s?n=void 0:(ut=n,n=s),n!==s&&(r=yt())!==s?u=n=[n,r]:(ut=u,u=s),t=u!==s?e.substring(t,ut):u}()),t}(),t===s&&(t=ut,48===e.charCodeAt(ut)?(u="0",ut++):(u=s,0===st&&dt(Oe)),u!==s?(n=ut,st++,r=zt(),st--,r===s?n=void 0:(ut=n,n=s),n!==s?(nt=t,t="\0"):(ut=t,t=s)):(ut=t,t=s),t===s&&(t=function(){var t,u,n,r,o,a,i;return t=ut,120===e.charCodeAt(ut)?(u="x",ut++):(u=s,0===st&&dt(Ne)),u!==s?(n=ut,r=ut,(o=Wt())!==s&&(a=Wt())!==s?r=o=[o,a]:(ut=r,r=s),(n=r!==s?e.substring(n,ut):r)!==s?(nt=t,i=n,t=String.fromCharCode(parseInt(i,16))):(ut=t,t=s)):(ut=t,t=s),t}(),t===s&&(t=Gt()))),t}function qt(){var t,u;return 39===e.charCodeAt(ut)?(t=C,ut++):(t=s,0===st&&dt(xe)),t===s&&(34===e.charCodeAt(ut)?(t=f,ut++):(t=s,0===st&&dt(Be)),t===s&&(92===e.charCodeAt(ut)?(t=d,ut++):(t=s,0===st&&dt(Ce)),t===s&&(t=ut,98===e.charCodeAt(ut)?(u="b",ut++):(u=s,0===st&&dt(we)),u!==s&&(nt=t,u="\b"),(t=u)===s&&(t=ut,102===e.charCodeAt(ut)?(u="f",ut++):(u=s,0===st&&dt($e)),u!==s&&(nt=t,u="\f"),(t=u)===s&&(t=ut,110===e.charCodeAt(ut)?(u="n",ut++):(u=s,0===st&&dt(Re)),u!==s&&(nt=t,u="\n"),(t=u)===s&&(t=ut,114===e.charCodeAt(ut)?(u="r",ut++):(u=s,0===st&&dt(Le)),u!==s&&(nt=t,u="\r"),(t=u)===s&&(t=ut,116===e.charCodeAt(ut)?(u="t",ut++):(u=s,0===st&&dt(ke)),u!==s&&(nt=t,u="\t"),(t=u)===s&&(t=ut,118===e.charCodeAt(ut)?(u="v",ut++):(u=s,0===st&&dt(Ie)),u!==s&&(nt=t,u="\v"),t=u)))))))),t}function Gt(){var t,u,n,r,o,a,i,c,l;return t=ut,117===e.charCodeAt(ut)?(u="u",ut++):(u=s,0===st&&dt(Te)),u!==s?(n=ut,r=ut,(o=Wt())!==s&&(a=Wt())!==s&&(i=Wt())!==s&&(c=Wt())!==s?r=o=[o,a,i,c]:(ut=r,r=s),(n=r!==s?e.substring(n,ut):r)!==s?(nt=t,l=n,t=String.fromCharCode(parseInt(l,16))):(ut=t,t=s)):(ut=t,t=s),t}function zt(){var t;return m.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=s,0===st&&dt(Me)),t}function Wt(){var t;return F.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=s,0===st&&dt(Ue)),t}function Yt(){var t,u,n,r;return st++,t=ut,123===e.charCodeAt(ut)?(u=p,ut++):(u=s,0===st&&dt(R)),u!==s?(n=function(){var e,t;return e=ut,t=Vt(),nt=e,t=[t,it()]}(),125===e.charCodeAt(ut)?(r=A,ut++):(r=s,0===st&&dt(L)),r!==s?t=n:(ut=t,t=s)):(ut=t,t=s),st--,t===s&&(u=s,0===st&&dt(He)),t}function Vt(){var t,u,n,r,o,a;if(t=ut,u=[],n=[],r=ut,o=ut,st++,_.test(e.charAt(ut))?(a=e.charAt(ut),ut++):(a=s,0===st&&dt(qe)),st--,a===s?o=void 0:(ut=o,o=s),o!==s&&(a=yt())!==s?r=o=[o,a]:(ut=r,r=s),r!==s)for(;r!==s;)n.push(r),r=ut,o=ut,st++,_.test(e.charAt(ut))?(a=e.charAt(ut),ut++):(a=s,0===st&&dt(qe)),st--,a===s?o=void 0:(ut=o,o=s),o!==s&&(a=yt())!==s?r=o=[o,a]:(ut=r,r=s);else n=s;for(n===s&&(n=ut,123===e.charCodeAt(ut)?(r=p,ut++):(r=s,0===st&&dt(R)),r!==s?(o=Vt(),125===e.charCodeAt(ut)?(a=A,ut++):(a=s,0===st&&dt(L)),a!==s?n=r=[r,o,a]:(ut=n,n=s)):(ut=n,n=s));n!==s;){if(u.push(n),n=[],r=ut,o=ut,st++,_.test(e.charAt(ut))?(a=e.charAt(ut),ut++):(a=s,0===st&&dt(qe)),st--,a===s?o=void 0:(ut=o,o=s),o!==s&&(a=yt())!==s?r=o=[o,a]:(ut=r,r=s),r!==s)for(;r!==s;)n.push(r),r=ut,o=ut,st++,_.test(e.charAt(ut))?(a=e.charAt(ut),ut++):(a=s,0===st&&dt(qe)),st--,a===s?o=void 0:(ut=o,o=s),o!==s&&(a=yt())!==s?r=o=[o,a]:(ut=r,r=s);else n=s;n===s&&(n=ut,123===e.charCodeAt(ut)?(r=p,ut++):(r=s,0===st&&dt(R)),r!==s?(o=Vt(),125===e.charCodeAt(ut)?(a=A,ut++):(a=s,0===st&&dt(L)),a!==s?n=r=[r,o,a]:(ut=n,n=s)):(ut=n,n=s))}return e.substring(t,ut)}function Jt(){var e,t;for(e=[],(t=St())===s&&(t=Pt())===s&&(t=Ot());t!==s;)e.push(t),(t=St())===s&&(t=Pt())===s&&(t=Ot());return e}function Xt(){var t,u,n,r;if(t=[],u=ut,n=Jt(),59===e.charCodeAt(ut)?(r=";",ut++):(r=s,0===st&&dt(tt)),r!==s?u=n=[n,r]:(ut=u,u=s),u!==s)for(;u!==s;)t.push(u),u=ut,n=Jt(),59===e.charCodeAt(ut)?(r=";",ut++):(r=s,0===st&&dt(tt)),r!==s?u=n=[n,r]:(ut=u,u=s);else t=s;return t===s&&(t=ut,u=function(){var e,t;for(e=[],(t=St())===s&&(t=wt());t!==s;)e.push(t),(t=St())===s&&(t=wt());return e}(),(n=$t())===s&&(n=null),(r=Pt())!==s?t=u=[u,n,r]:(ut=t,t=s),t===s&&(t=ut,u=Jt(),n=function(){var t,u;return t=ut,st++,e.length>ut?(u=e.charAt(ut),ut++):(u=s,0===st&&dt(X)),st--,u===s?t=void 0:(ut=t,t=s),t}(),n!==s?t=u=[u,n]:(ut=t,t=s))),t}const Zt=o.reservedWords||[];if((a=l())!==s&&ut===e.length)return a;throw a!==s&&ut{"use strict";const n=u(48256),r=u(49002),o=u(73629),a=u(68189),s={VERSION:u(62415),RESERVED_WORDS:["break","case","catch","class","const","continue","debugger","default","delete","do","else","export","extends","finally","for","function","if","import","in","instanceof","new","return","super","switch","this","throw","try","typeof","var","void","while","with","null","true","false","enum","implements","interface","let","package","private","protected","public","static","yield","await","arguments","eval"],GrammarError:n,GrammarLocation:r,parser:a,compiler:o,generate(e,t){const u="plugins"in(t=void 0!==t?t:{})?t.plugins:[],n={parser:s.parser,passes:function(e){const t={};return Object.keys(e).forEach((u=>{t[u]=e[u].slice()})),t}(s.compiler.passes),reservedWords:s.RESERVED_WORDS.slice()};return u.forEach((e=>{e.use(n,t)})),s.compiler.compile(n.parser.parse(e,{grammarSource:t.grammarSource,reservedWords:n.reservedWords}),n.passes,t)}};e.exports=s},62415:e=>{"use strict";e.exports="3.0.2"},12443:(e,t)=>{class u{constructor(){this._array=[],this._set=new Map}static fromArray(e,t){const n=new u;for(let u=0,r=e.length;u=0)return t;throw new Error('"'+e+'" is not in the set.')}at(e){if(e>=0&&e{const n=u(39286);t.encode=function(e){let t,u="",r=function(e){return e<0?1+(-e<<1):0+(e<<1)}(e);do{t=31&r,r>>>=5,r>0&&(t|=32),u+=n.encode(t)}while(r>0);return u}},39286:(e,t)=>{const u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");t.encode=function(e){if(0<=e&&e{const n=u(8023);t.H=class{constructor(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}unsortedForEach(e,t){this._array.forEach(e,t)}add(e){!function(e,t){const u=e.generatedLine,r=t.generatedLine,o=e.generatedColumn,a=t.generatedColumn;return r>u||r==u&&a>=o||n.compareByGeneratedPositionsInflated(e,t)<=0}(this._last,e)?(this._sorted=!1,this._array.push(e)):(this._last=e,this._array.push(e))}toArray(){return this._sorted||(this._array.sort(n.compareByGeneratedPositionsInflated),this._sorted=!0),this._array}}},41393:(e,t,u)=>{const n=u(61944),r=u(8023),o=u(12443).I,a=u(85460).H;class s{constructor(e){e||(e={}),this._file=r.getArg(e,"file",null),this._sourceRoot=r.getArg(e,"sourceRoot",null),this._skipValidation=r.getArg(e,"skipValidation",!1),this._sources=new o,this._names=new o,this._mappings=new a,this._sourcesContents=null}static fromSourceMap(e){const t=e.sourceRoot,u=new s({file:e.file,sourceRoot:t});return e.eachMapping((function(e){const n={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(n.source=e.source,null!=t&&(n.source=r.relative(t,n.source)),n.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(n.name=e.name)),u.addMapping(n)})),e.sources.forEach((function(n){let o=n;null!=t&&(o=r.relative(t,n)),u._sources.has(o)||u._sources.add(o);const a=e.sourceContentFor(n);null!=a&&u.setSourceContent(n,a)})),u}addMapping(e){const t=r.getArg(e,"generated"),u=r.getArg(e,"original",null);let n=r.getArg(e,"source",null),o=r.getArg(e,"name",null);this._skipValidation||this._validateMapping(t,u,n,o),null!=n&&(n=String(n),this._sources.has(n)||this._sources.add(n)),null!=o&&(o=String(o),this._names.has(o)||this._names.add(o)),this._mappings.add({generatedLine:t.line,generatedColumn:t.column,originalLine:u&&u.line,originalColumn:u&&u.column,source:n,name:o})}setSourceContent(e,t){let u=e;null!=this._sourceRoot&&(u=r.relative(this._sourceRoot,u)),null!=t?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[r.toSetString(u)]=t):this._sourcesContents&&(delete this._sourcesContents[r.toSetString(u)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))}applySourceMap(e,t,u){let n=t;if(null==t){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');n=e.file}const a=this._sourceRoot;null!=a&&(n=r.relative(a,n));const s=this._mappings.toArray().length>0?new o:this._sources,i=new o;this._mappings.unsortedForEach((function(t){if(t.source===n&&null!=t.originalLine){const n=e.originalPositionFor({line:t.originalLine,column:t.originalColumn});null!=n.source&&(t.source=n.source,null!=u&&(t.source=r.join(u,t.source)),null!=a&&(t.source=r.relative(a,t.source)),t.originalLine=n.line,t.originalColumn=n.column,null!=n.name&&(t.name=n.name))}const o=t.source;null==o||s.has(o)||s.add(o);const c=t.name;null==c||i.has(c)||i.add(c)}),this),this._sources=s,this._names=i,e.sources.forEach((function(t){const n=e.sourceContentFor(t);null!=n&&(null!=u&&(t=r.join(u,t)),null!=a&&(t=r.relative(a,t)),this.setSourceContent(t,n))}),this)}_validateMapping(e,t,u,n){if(t&&"number"!=typeof t.line&&"number"!=typeof t.column)throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0&&!t&&!u&&!n);else if(!(e&&"line"in e&&"column"in e&&t&&"line"in t&&"column"in t&&e.line>0&&e.column>=0&&t.line>0&&t.column>=0&&u))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:u,original:t,name:n}))}_serializeMappings(){let e,t,u,o,a=0,s=1,i=0,c=0,l=0,p=0,A="";const h=this._mappings.toArray();for(let E=0,d=h.length;E0){if(!r.compareByGeneratedPositionsInflated(t,h[E-1]))continue;e+=","}e+=n.encode(t.generatedColumn-a),a=t.generatedColumn,null!=t.source&&(o=this._sources.indexOf(t.source),e+=n.encode(o-p),p=o,e+=n.encode(t.originalLine-1-c),c=t.originalLine-1,e+=n.encode(t.originalColumn-i),i=t.originalColumn,null!=t.name&&(u=this._names.indexOf(t.name),e+=n.encode(u-l),l=u)),A+=e}return A}_generateSourcesContent(e,t){return e.map((function(e){if(!this._sourcesContents)return null;null!=t&&(e=r.relative(t,e));const u=r.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,u)?this._sourcesContents[u]:null}),this)}toJSON(){const e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e}toString(){return JSON.stringify(this.toJSON())}}s.prototype._version=3,t.SourceMapGenerator=s},5440:(e,t,u)=>{const n=u(41393).SourceMapGenerator,r=u(8023),o=/(\r?\n)/,a="$$$isSourceNode$$$";class s{constructor(e,t,u,n,r){this.children=[],this.sourceContents={},this.line=null==e?null:e,this.column=null==t?null:t,this.source=null==u?null:u,this.name=null==r?null:r,this[a]=!0,null!=n&&this.add(n)}static fromStringWithSourceMap(e,t,u){const n=new s,a=e.split(o);let i=0;const c=function(){return e()+(e()||"");function e(){return i=0;t--)this.prepend(e[t]);else{if(!e[a]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this}walk(e){let t;for(let u=0,n=this.children.length;u0){for(t=[],u=0;u{t.getArg=function(e,t,u){if(t in e)return e[t];if(3===arguments.length)return u;throw new Error('"'+t+'" is a required argument.')};const u=!("__proto__"in Object.create(null));function n(e){return e}function r(e){if(!e)return!1;const t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(let u=t-10;u>=0;u--)if(36!==e.charCodeAt(u))return!1;return!0}function o(e,t){return e===t?0:null===e?1:null===t?-1:e>t?1:-1}t.toSetString=u?n:function(e){return r(e)?"$"+e:e},t.fromSetString=u?n:function(e){return r(e)?e.slice(1):e},t.compareByGeneratedPositionsInflated=function(e,t){let u=e.generatedLine-t.generatedLine;return 0!==u?u:(u=e.generatedColumn-t.generatedColumn,0!==u?u:(u=o(e.source,t.source),0!==u?u:(u=e.originalLine-t.originalLine,0!==u?u:(u=e.originalColumn-t.originalColumn,0!==u?u:o(e.name,t.name)))))};const a="http:",s="http://host";function i(e){return t=>{const u=A(t),n=l(t),r=new URL(t,n);e(r);const o=r.toString();return"absolute"===u?o:"scheme-relative"===u?o.slice(a.length):"path-absolute"===u?o.slice(s.length):h(n,o)}}function c(e,t){return new URL(e,t).toString()}function l(e){const t=e.split("..").length-1,u=function(e,t){let u=0;for(;;){const e="p"+u++;if(-1===t.indexOf(e))return e}}(0,e);let n="http://host/";for(let e=0;e0&&!n[n.length-1]&&n.pop();u.length>0&&n.length>0&&u[0]===n[0];)u.shift(),n.shift();return n.map((()=>"..")).concat(u).join("/")+t.search+t.hash}const E=i((e=>{e.pathname=e.pathname.replace(/\/?$/,"/")})),d=i((e=>{}));t.normalize=d,t.join=function(e,t){const u=A(t),n=A(e);if(e=E(e),"absolute"===u)return c(t,void 0);if("absolute"===n)return c(t,e);if("scheme-relative"===u)return d(t);if("scheme-relative"===n)return c(t,c(e,s)).slice(a.length);if("path-absolute"===u)return d(t);if("path-absolute"===n)return c(t,c(e,s)).slice(s.length);const r=l(t+e);return h(r,c(t,c(e,r)))},t.relative=function(e,t){const u=function(e,t){if(A(e)!==A(t))return null;const u=l(e+t),n=new URL(e,u),r=new URL(t,u);try{new URL("",r.toString())}catch(e){return null}return r.protocol!==n.protocol||r.user!==n.user||r.password!==n.password||r.hostname!==n.hostname||r.port!==n.port?null:h(n,r)}(e,t);return"string"==typeof u?u:d(t)}},10782:(e,t,u)=>{t.SourceMapGenerator=u(41393).SourceMapGenerator,t.SourceNode=u(5440).SourceNode}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var u=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](u,u.exports,__webpack_require__),u.exports}__webpack_require__.d=(e,t)=>{for(var u in t)__webpack_require__.o(t,u)&&!__webpack_require__.o(e,u)&&Object.defineProperty(e,u,{enumerable:!0,get:t[u]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};(()=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{registerWooBlockType:()=>c,useWooBlockProps:()=>t});const e=window.wp.blockEditor,t=function(t){let u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n={"data-template-block-id":t._templateBlockId,"data-template-block-order":t._templateBlockOrder,tabIndex:-1,...u};return(0,e.useBlockProps)(n)},u=window.wp.blocks,n=window.wp.element,r=__webpack_require__(80154).generate('\n{{\n\tfunction evaluateUnaryExpression( operator, operand ) {\n\t\tswitch ( operator ) {\n\t\t\tcase \'!\':\n\t\t\t\treturn !operand;\n\t\t\t\tbreak;\n\t\t\tcase \'-\':\n\t\t\t\treturn -operand;\n\t\t\t\tbreak;\n\t\t\tcase \'+\':\n\t\t\t\treturn +operand;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn undefined;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tfunction evaluateBinaryExpression( head, tail ) {\n\t\treturn tail.reduce( ( leftOperand, tailElement ) => {\n\t\t\tconst operator = tailElement[ 1 ];\n\t\t\tconst rightOperand = tailElement[ 3 ];\n\n\t\t\tswitch ( operator ) {\n\t\t\t\tcase \'&&\':\n\t\t\t\t\treturn leftOperand && rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'||\':\n\t\t\t\t\treturn leftOperand || rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'===\':\n\t\t\t\t\treturn leftOperand === rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'!==\':\n\t\t\t\t\treturn leftOperand !== rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'==\':\n\t\t\t\t\treturn leftOperand == rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'!=\':\n\t\t\t\t\treturn leftOperand != rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'<=\':\n\t\t\t\t\treturn leftOperand <= rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'<\':\n\t\t\t\t\treturn leftOperand < rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'>=\':\n\t\t\t\t\treturn leftOperand >= rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'>\':\n\t\t\t\t\treturn leftOperand > rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'+\':\n\t\t\t\t\treturn leftOperand + rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'-\':\n\t\t\t\t\treturn leftOperand - rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'*\':\n\t\t\t\t\treturn leftOperand * rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'/\':\n\t\t\t\t\treturn leftOperand / rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'%\':\n\t\t\t\t\treturn leftOperand % rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn undefined;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}, head );\n\t}\n\n\tfunction getPropertyValue( obj, propertyName ) {\n\t\tif ( Object.hasOwn( obj, propertyName ) ) {\n\t\t\treturn obj[ propertyName ];\n\t\t} else if (\n\t\t\tArray.isArray( obj ) &&\n\t\t\tobj.length > 0 &&\n\t\t\tObject.hasOwn( obj[ 0 ], \'key\' ) &&\n\t\t\tObject.hasOwn( obj[ 0 ], \'value\' )\n\t\t) {\n\t\t\t// We likely dealing with an array of objects with key/value pairs (like post meta data)\n\t\t\tconst item = obj.find( ( item ) => item.key === propertyName );\n\t\t\treturn item?.value;\n\t\t}\n\n\t\treturn undefined;\n\t}\n}}\n\nStart\n\t= Expression\n\nSourceCharacter\n\t= .\n\nWhiteSpace\n\t= " "\n\t/ "\\t"\n\nLineTerminator\n\t= "\\n"\n\t/ "\\r"\n\t/ "\\u2028"\n\t/ "\\u2029"\n\nLineTerminatorSequence\n\t= "\\n"\n\t/ "\\r\\n"\n\t/ "\\r"\n\t/ "\\u2028"\n\t/ "\\u2029"\n\nComment "comment"\n\t= MultiLineComment\n\nMultiLineComment\n\t= "/*" (!"*/" SourceCharacter)* "*/"\n\n__ "skipped"\n\t= (WhiteSpace / LineTerminatorSequence / Comment)*\n\nIdentifierPath\n\t= variable:Identifier accessor:(__ "." __ Identifier)* {\n\t\tconst path = variable.split( \'.\' );\n\t\tlet result = path.reduce( getPropertyValue, options.context );\n\n\t\tfor ( let i = 0; i < accessor.length; i++ ) {\n\t\t\tresult = getPropertyValue( result, accessor[ i ][ 3 ] );\n\t\t}\n\n\t\treturn result;\n\t}\n\nIdentifier\n\t= !ReservedWord name:IdentifierName {\n\t\treturn name;\n\t}\n\nIdentifierName\n\t= first:IdentifierStart rest:IdentifierPart* {\n\t\treturn text();\n\t}\n\nIdentifierStart\n\t= [a-zA-Z]\n\t/ "_"\n\t/ "$"\n\nIdentifierPart\n\t= IdentifierStart\n\nReservedWord\n\t= NullLiteral\n\t/ BooleanLiteral\n\n// Literals\n\nLiteral\n\t= NullLiteral\n\t/ BooleanLiteral\n\t/ NumericLiteral\n\t/ StringLiteral\n\nNullLiteral\n\t= NullToken { return null; }\n\nBooleanLiteral\n\t= "true" { return true; }\n\t/ "false" { return false; }\n\nNumericLiteral\n\t= literal:HexIntegerLiteral !(IdentifierStart / DecimalDigit) {\n\t\treturn literal;\n\t}\n\t/ literal:DecimalLiteral !(IdentifierStart / DecimalDigit) {\n\t\treturn literal;\n\t}\n\nHexIntegerLiteral\n\t= "0x"i digits:$HexDigit+ {\n\t\treturn parseInt( digits, 16 );\n\t}\n\nHexDigit\n\t= [0-9a-f]i\n\nDecimalLiteral\n\t= DecimalIntegerLiteral "." DecimalDigit* ExponentPart? {\n\t\treturn parseFloat( text() );\n\t}\n\t/ "." DecimalDigit+ ExponentPart? {\n\t\treturn parseFloat( text() );\n\t}\n\t/ DecimalIntegerLiteral ExponentPart? {\n\t\treturn parseFloat( text() );\n\t}\n\nDecimalIntegerLiteral\n\t= "0"\n\t/ NonZeroDigit DecimalDigit*\n\nDecimalDigit\n\t= [0-9]\n\nNonZeroDigit\n\t= [1-9]\n\nExponentPart\n\t= ExponentIndicator SignedInteger\n\nExponentIndicator\n\t= "e"i\n\nSignedInteger\n\t= [+-]? DecimalDigit+\n\nStringLiteral\n\t= \'"\' chars:DoubleQuotedStringCharacter* \'"\' {\n\t\treturn chars.join( \'\' );\n\t}\n\t/ "\'" chars:SingleQuotedStringCharacter* "\'" {\n\t\treturn chars.join( \'\' );\n\t}\n\nDoubleQuotedStringCharacter\n\t= !(\'"\' / "\\\\" / LineTerminator) SourceCharacter {\n\t\treturn text();\n\t}\n\t/ "\\\\" escapeSequence:EscapeSequence {\n\t\treturn escapeSequence;\n\t}\n\t/ LineContinuation\n\nSingleQuotedStringCharacter\n\t= !("\'" / "\\\\" / LineTerminator) SourceCharacter {\n\t\treturn text();\n\t}\n\t/ "\\\\" escapeSequence:EscapeSequence {\n\t\treturn escapeSequence;\n\t}\n\t/ LineContinuation\n\nLineContinuation\n\t= "\\\\" LineTerminatorSequence {\n\t\treturn \'\';\n\t}\n\nEscapeSequence\n\t= CharacterEscapeSequence\n\t/ "0" !DecimalDigit {\n\t\treturn "\\0";\n\t}\n\t/ HexEscapeSequence\n\t/ UnicodeEscapeSequence\n\nCharacterEscapeSequence\n\t= SingleEscapeCharacter\n\t/ NonEscapeCharacter\n\nSingleEscapeCharacter\n\t= "\'"\n\t/ \'"\'\n\t/ "\\\\"\n\t/ "b" {\n\t\treturn "\\b";\n\t}\n\t/ "f" {\n\t\treturn "\\f";\n\t}\n\t/ "n" {\n\t\treturn "\\n";\n\t}\n\t/ "r" {\n\t\treturn "\\r";\n\t}\n\t/ "t" {\n\t\treturn "\\t";\n\t}\n\t/ "v" {\n\t\treturn "\\v";\n\t}\n\nNonEscapeCharacter\n\t= (!EscapeCharacter / LineTerminator) SourceCharacter {\n\t\treturn text();\n\t}\n\nEscapeCharacter\n\t= SingleEscapeCharacter\n\t/ DecimalDigit\n\t/ "x"\n\t/ "u"\n\nHexEscapeSequence\n\t= "x" digits:$(HexDigit HexDigit) {\n\t\treturn String.fromCharCode( parseInt( digits, 16 ) );\n\t}\n\nUnicodeEscapeSequence\n\t= "u" digits:$(HexDigit HexDigit HexDigit HexDigit) {\n\t\treturn String.fromCharCode( parseInt( digits, 16 ) );\n\t}\n\n// Tokens\n\nNullToken\n\t= "null" !IdentifierPart\n\nTrueToken\n\t= "true" !IdentifierPart\n\nFalseToken\n\t= "false" !IdentifierPart\n\n// Expressions\n\nPrimaryExpression\n\t= IdentifierPath\n\t/ Literal\n\t/ "(" __ expression:Expression __ ")" {\n\t\treturn expression;\n\t}\n\nUnaryExpression\n\t= PrimaryExpression\n\t/ operator:UnaryOperator __ operand:UnaryExpression {\n\t\treturn evaluateUnaryExpression( operator, operand );\n\t}\n\nUnaryOperator\n\t= "!"\n\t/ "-"\n\t/ "+"\n\nMultiplicativeExpression\n\t= head:UnaryExpression tail:(__ MultiplicativeOperator __ UnaryExpression)* {\n\t\treturn evaluateBinaryExpression( head, tail );\n\t}\n\nMultiplicativeOperator\n\t= "*"\n\t/ "/"\n\t/ "%"\n\nAdditiveExpression\n\t= head:MultiplicativeExpression tail:(__ AdditiveOperator __ MultiplicativeExpression)* {\n\t\treturn evaluateBinaryExpression( head, tail );\n\t}\n\nAdditiveOperator\n\t= "+"\n\t/ "-"\n\nRelationalExpression\n\t= head:AdditiveExpression tail:(__ RelationalOperator __ AdditiveExpression)* {\n\t\treturn evaluateBinaryExpression( head, tail );\n\t}\n\nRelationalOperator\n\t= "<="\n\t/ "<"\n\t/ ">="\n\t/ ">"\n\nEqualityExpression\n\t= head:RelationalExpression tail:(__ EqualityOperator __ RelationalExpression)* {\n\t\treturn evaluateBinaryExpression( head, tail );\n\t}\n\nEqualityOperator\n\t= "==="\n\t/ "!=="\n\t/ "=="\n\t/ "!="\n\nLogicalAndExpression\n\t= head:EqualityExpression tail:(__ LogicalAndOperator __ EqualityExpression)* {\n\t\treturn evaluateBinaryExpression( head, tail );\n\t}\n\nLogicalAndOperator\n\t= "&&"\n\nLogicalOrExpression\n\t= head:LogicalAndExpression tail:(__ LogicalOrOperator __ LogicalAndExpression)* {\n\t\treturn evaluateBinaryExpression( head, tail );\n\t}\n\nLogicalOrOperator\n\t= "||"\n\nConditionalExpression\n\t= condition:LogicalOrExpression __ ConditionalTrueOperator __ expressionIfTrue:ConditionalExpression __ ConditionalFalseOperator __ expressionIfFalse:ConditionalExpression {\n\t\treturn condition ? expressionIfTrue : expressionIfFalse;\n\t}\n\t/ LogicalOrExpression\n\nConditionalTrueOperator\n\t= "?"\n\nConditionalFalseOperator\n\t= ":"\n\nExpression\n\t= __ expression:ConditionalExpression __ {\n\t\treturn expression;\n\t}\n');function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return r.parse(e,{context:t})}const a=window.wp.data;function s(e){return{getEvaluationContext:()=>e}}function i(e,t){return u=>{const{context:r}=u,{_templateBlockHideConditions:s,_templateBlockDisableConditions:i}=u.attributes,{getEvaluationContext:c}=t(r),{shouldHide:l,shouldDisable:p}=(0,a.useSelect)((e=>{const t=c(e);return{shouldHide:s&&Array.isArray(s)&&s.some((e=>o(e.expression,t))),shouldDisable:i&&Array.isArray(i)&&i.some((e=>o(e.expression,t)))}}),[c,s,i]);return!e||l?null:(0,n.createElement)(e,{...u,attributes:{...u.attributes,disabled:u.attributes.disabled||p}})}}function c(e,t){if(!e)return;const{metadata:n,settings:r,name:o}=e,{edit:a}=r;if(!a)return;const c={...n,attributes:(l=n.attributes,{...l,_templateBlockId:{type:"string",__experimentalRole:"content"},_templateBlockOrder:{type:"integer",__experimentalRole:"content"},_templateBlockHideConditions:{type:"array",__experimentalRole:"content"},_templateBlockDisableConditions:{type:"array",__experimentalRole:"content"},disabled:l.disabled||{type:"boolean",__experimentalRole:"content"}})};var l;return(0,u.registerBlockType)({name:o,...c},{...r,edit:i(a,null!=t?t:s)})}})(),(window.wc=window.wc||{}).blockTemplates=__webpack_exports__})();
\ No newline at end of file
+(()=>{var __webpack_modules__={86657:(e,t,u)=>{"use strict";const n=u(87602),r={findRule(e,t){for(let u=0;ue.alternatives.every(s),sequence:e=>e.elements.some(s),simple_and:o,simple_not:o,optional:o,zero_or_more:o,repeated(e){const t=e.min?e.min:e.max;return!("constant"!==t.type||0===t.value||!s(e.expression)&&!(t.value>1&&e.delimiter&&s(e.delimiter)))},semantic_and:o,semantic_not:o,rule_ref(t){const u=r.findRule(e,t.name);return u?s(u):void 0},literal:e=>""!==e.value,class:u,any:u});return s(t)}};e.exports=r},73629:(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";const generateBytecode=__webpack_require__(27713),generateJS=__webpack_require__(72365),inferenceMatchResult=__webpack_require__(51358),removeProxyRules=__webpack_require__(47349),reportDuplicateLabels=__webpack_require__(13747),reportDuplicateRules=__webpack_require__(7937),reportInfiniteRecursion=__webpack_require__(47771),reportInfiniteRepetition=__webpack_require__(74414),reportUndefinedRules=__webpack_require__(78277),reportIncorrectPlucking=__webpack_require__(43046),Session=__webpack_require__(52399),visitor=__webpack_require__(87602),{base64}=__webpack_require__(93758);function processOptions(e,t){const u={};return Object.keys(e).forEach((t=>{u[t]=e[t]})),Object.keys(t).forEach((e=>{Object.prototype.hasOwnProperty.call(u,e)||(u[e]=t[e])})),u}function isSourceMapCapable(e){return"string"==typeof e?e.length>0:e&&"function"==typeof e.offset}const compiler={visitor,passes:{check:[reportUndefinedRules,reportDuplicateRules,reportDuplicateLabels,reportInfiniteRecursion,reportInfiniteRepetition,reportIncorrectPlucking],transform:[removeProxyRules,inferenceMatchResult],generate:[generateBytecode,generateJS]},compile(ast,passes,options){if(options=void 0!==options?options:{},options=processOptions(options,{allowedStartRules:[ast.rules[0].name],cache:!1,dependencies:{},exportVar:null,format:"bare",output:"parser",trace:!1}),!Array.isArray(options.allowedStartRules))throw new Error("allowedStartRules must be an array");if(0===options.allowedStartRules.length)throw new Error("Must have at least one start rule");const allRules=ast.rules.map((e=>e.name));if(options.allowedStartRules.some((e=>"*"===e)))options.allowedStartRules=allRules;else for(const e of options.allowedStartRules)if(-1===allRules.indexOf(e))throw new Error(`Unknown start rule "${e}"`);if(("source-and-map"===options.output||"source-with-inline-map"===options.output)&&!isSourceMapCapable(options.grammarSource))throw new Error("Must provide grammarSource (as a string or GrammarLocation) in order to generate source maps");const session=new Session(options);switch(Object.keys(passes).forEach((e=>{session.stage=e,session.info(`Process stage ${e}`),passes[e].forEach((t=>{session.info(`Process pass ${e}.${t.name}`),t(ast,options,session)})),session.checkErrors()})),options.output){case"parser":return eval(ast.code.toString());case"source":return ast.code.toString();case"source-and-map":return ast.code;case"source-with-inline-map":{if("undefined"==typeof TextEncoder)throw new Error("TextEncoder is not supported by this platform");const e=ast.code.toStringWithSourceMap(),t=new TextEncoder,u=base64(t.encode(JSON.stringify(e.map.toJSON())));return e.code+`//# sourceMappingURL=data:application/json;charset=utf-8;base64,${u}\n`}case"ast":return ast;default:throw new Error("Invalid output format: "+options.output+".")}}};module.exports=compiler},10818:e=>{"use strict";e.exports={PUSH:0,PUSH_EMPTY_STRING:35,PUSH_UNDEFINED:1,PUSH_NULL:2,PUSH_FAILED:3,PUSH_EMPTY_ARRAY:4,PUSH_CURR_POS:5,POP:6,POP_CURR_POS:7,POP_N:8,NIP:9,APPEND:10,WRAP:11,TEXT:12,PLUCK:36,IF:13,IF_ERROR:14,IF_NOT_ERROR:15,IF_LT:30,IF_GE:31,IF_LT_DYNAMIC:32,IF_GE_DYNAMIC:33,WHILE_NOT_ERROR:16,MATCH_ANY:17,MATCH_STRING:18,MATCH_STRING_IC:19,MATCH_CHAR_CLASS:20,MATCH_REGEXP:20,ACCEPT_N:21,ACCEPT_STRING:22,FAIL:23,LOAD_SAVED_POS:24,UPDATE_SAVED_POS:25,CALL:26,RULE:27,SILENT_FAILS_ON:28,SILENT_FAILS_OFF:29,SOURCE_MAP_PUSH:37,SOURCE_MAP_POP:38,SOURCE_MAP_LABEL_PUSH:39,SOURCE_MAP_LABEL_POP:40}},27713:(e,t,u)=>{"use strict";const n=u(86657),r=u(10818),o=u(87602),{ALWAYS_MATCH:s,SOMETIMES_MATCH:a,NEVER_MATCH:i}=u(51358);e.exports=function(e,t){const u=[],c=[],l=[],p=[],A=[];function h(e){const t=u.indexOf(e);return-1===t?u.push(e)-1:t}function E(e){const t=JSON.stringify(e),u=l.findIndex((e=>JSON.stringify(e)===t));return-1===u?l.push(e)-1:u}function d(e,t,u){const n={predicate:e,params:t,body:u.code,location:u.codeLocation},r=JSON.stringify(n),o=p.findIndex((e=>JSON.stringify(e)===r));return-1===o?p.push(n)-1:o}function f(e){return A.push(e)-1}function C(e){const t={};return Object.keys(e).forEach((u=>{t[u]=e[u]})),t}function g(e,...t){return e.concat(...t)}function F(e,t,u,n){return e===s?u:e===i?n:t.concat([u.length,n.length],u,n)}function m(e,t,u,n){const o=Object.keys(u).map((e=>n-u[e]));return[r.CALL,e,t,o.length].concat(o)}function _(e,t,u){const n=0|e.match;return g([r.PUSH_CURR_POS],[r.SILENT_FAILS_ON],y(e,{sp:u.sp+1,env:C(u.env),action:null}),[r.SILENT_FAILS_OFF],F(t?-n:n,[t?r.IF_ERROR:r.IF_NOT_ERROR],g([r.POP],[t?r.POP:r.POP_CURR_POS],[r.PUSH_UNDEFINED]),g([r.POP],[t?r.POP_CURR_POS:r.POP],[r.PUSH_FAILED])))}function D(e,t,u){const n=d(!0,Object.keys(u.env),e);return g([r.UPDATE_SAVED_POS],m(n,0,u.env,u.sp),F(0|e.match,[r.IF],g([r.POP],t?[r.PUSH_FAILED]:[r.PUSH_UNDEFINED]),g([r.POP],t?[r.PUSH_UNDEFINED]:[r.PUSH_FAILED])))}function B(e){return t=[r.WHILE_NOT_ERROR],u=g([r.APPEND],e),t.concat([u.length],u);var t,u}function x(e,t,u,n){switch(e.type){case"constant":return{pre:[],post:[],sp:u};case"variable":return e.sp=n+u-t[e.value],{pre:[],post:[],sp:u};case"function":return e.sp=n,{pre:m(d(!0,Object.keys(t),{code:e.value,codeLocation:e.codeLocation}),0,t,u),post:[r.NIP],sp:u+1};default:throw new Error(`Unknown boundary type "${e.type}" for the "repeated" node`)}}function v(e,t){if(null!==t.value){const u="constant"===t.type?[r.IF_GE,t.value]:[r.IF_GE_DYNAMIC,t.sp];return F(a,u,[r.PUSH_FAILED],e)}return e}const y=(S={grammar(e){e.rules.forEach(y),e.literals=u,e.classes=c,e.expectations=l,e.functions=p,e.locations=A},rule(e){e.bytecode=y(e.expression,{sp:-1,env:{},pluck:[],action:null})},named(e,t){const u=0|e.match,n=u===i?null:E({type:"rule",value:e.name});return g([r.SILENT_FAILS_ON],y(e.expression,t),[r.SILENT_FAILS_OFF],F(u,[r.IF_ERROR],[r.FAIL,n],[]))},choice:(e,t)=>function e(t,u){const n=0|t[0].match,o=y(t[0],{sp:u.sp,env:C(u.env),action:null});return n===s?o:g(o,t.length>1?F(a,[r.IF_ERROR],g([r.POP],e(t.slice(1),u)),[]):[])}(e.alternatives,t),action(e,t){const u=C(t.env),n="sequence"!==e.expression.type||0===e.expression.elements.length,o=y(e.expression,{sp:t.sp+(n?1:0),env:u,action:e}),s=0|e.expression.match,a=n&&s!==i?d(!1,Object.keys(u),e):null;return n?g([r.PUSH_CURR_POS],o,F(s,[r.IF_NOT_ERROR],g([r.LOAD_SAVED_POS,1],m(a,1,u,t.sp+2)),[]),[r.NIP]):o},sequence:(e,t)=>g([r.PUSH_CURR_POS],function t(u,n){if(u.length>0){const o=e.elements.length-u.length+1;return g(y(u[0],{sp:n.sp,env:n.env,pluck:n.pluck,action:null}),F(0|u[0].match,[r.IF_NOT_ERROR],t(u.slice(1),{sp:n.sp+1,env:n.env,pluck:n.pluck,action:n.action}),g(o>1?[r.POP_N,o]:[r.POP],[r.POP_CURR_POS],[r.PUSH_FAILED])))}if(n.pluck.length>0)return g([r.PLUCK,e.elements.length+1,n.pluck.length],n.pluck.map((e=>n.sp-e)));if(n.action){const t=d(!1,Object.keys(n.env),n.action);return g([r.LOAD_SAVED_POS,e.elements.length],m(t,e.elements.length+1,n.env,n.sp))}return g([r.WRAP,e.elements.length],[r.NIP])}(e.elements,{sp:t.sp+1,env:t.env,pluck:[],action:t.action})),labeled(e,u){let n=u.env;const o=e.label,s=u.sp+1;o&&(n=C(u.env),u.env[e.label]=s),e.pick&&u.pluck.push(s);const a=y(e.expression,{sp:u.sp,env:n,action:null});return o&&e.labelLocation&&t&&"source-and-map"===t.output?g([r.SOURCE_MAP_LABEL_PUSH,s,h(o),f(e.labelLocation)],a,[r.SOURCE_MAP_LABEL_POP,s]):a},text:(e,t)=>g([r.PUSH_CURR_POS],y(e.expression,{sp:t.sp+1,env:C(t.env),action:null}),F(0|e.match,[r.IF_NOT_ERROR],g([r.POP],[r.TEXT]),[r.NIP])),simple_and:(e,t)=>_(e.expression,!1,t),simple_not:(e,t)=>_(e.expression,!0,t),optional:(e,t)=>g(y(e.expression,{sp:t.sp,env:C(t.env),action:null}),F(-(0|e.expression.match),[r.IF_ERROR],g([r.POP],[r.PUSH_NULL]),[])),zero_or_more(e,t){const u=y(e.expression,{sp:t.sp+1,env:C(t.env),action:null});return g([r.PUSH_EMPTY_ARRAY],u,B(u),[r.POP])},one_or_more(e,t){const u=y(e.expression,{sp:t.sp+1,env:C(t.env),action:null});return g([r.PUSH_EMPTY_ARRAY],u,F(0|e.expression.match,[r.IF_NOT_ERROR],g(B(u),[r.POP]),g([r.POP],[r.POP],[r.PUSH_FAILED])))},repeated(e,t){const u=e.min?e.min:e.max,n="constant"!==u.type||u.value>0,o="constant"!==e.max.type&&null!==e.max.value,s=n?2:1,i=e.min?x(e.min,t.env,t.sp,2+("function"===e.max.type?1:0)):{pre:[],post:[],sp:t.sp},c=x(e.max,t.env,i.sp,s),l=y(e.expression,{sp:c.sp+s,env:C(t.env),action:null}),p=null!==e.delimiter?y(e.expression,{sp:c.sp+s+1,env:C(t.env),action:null}):l,A=function(e,t,u,n,o){return e?g([r.PUSH_CURR_POS],y(e,{sp:n.sp+o+1,env:C(n.env),action:null}),F(0|e.match,[r.IF_NOT_ERROR],g([r.POP],u,F(-t,[r.IF_ERROR],[r.POP,r.POP_CURR_POS,r.PUSH_FAILED],[r.NIP])),[r.NIP])):u}(e.delimiter,0|e.expression.match,p,t,s),h=v(A,e.max),E=o?v(l,e.max):l,d=g(n?[r.PUSH_CURR_POS]:[],[r.PUSH_EMPTY_ARRAY],E,B(h),[r.POP]);return g(i.pre,c.pre,n?function(e,t){const u="constant"===t.type?[r.IF_LT,t.value]:[r.IF_LT_DYNAMIC,t.sp];return g(e,F(a,u,[r.POP,r.POP_CURR_POS,r.PUSH_FAILED],[r.NIP]))}(d,u):d,c.post,i.post)},group:(e,t)=>y(e.expression,{sp:t.sp,env:C(t.env),action:null}),semantic_and:(e,t)=>D(e,!1,t),semantic_not:(e,t)=>D(e,!0,t),rule_ref:t=>[r.RULE,n.indexOfRule(e,t.name)],literal(e){if(e.value.length>0){const t=0|e.match,u=t===a||t===s&&!e.ignoreCase?h(e.ignoreCase?e.value.toLowerCase():e.value):null,n=t!==s?E({type:"literal",value:e.value,ignoreCase:e.ignoreCase}):null;return F(t,e.ignoreCase?[r.MATCH_STRING_IC,u]:[r.MATCH_STRING,u],e.ignoreCase?[r.ACCEPT_N,e.value.length]:[r.ACCEPT_STRING,u],[r.FAIL,n])}return[r.PUSH_EMPTY_STRING]},class(e){const t=0|e.match,u=t===a?function(e){const t={value:e.parts,inverted:e.inverted,ignoreCase:e.ignoreCase},u=JSON.stringify(t),n=c.findIndex((e=>JSON.stringify(e)===u));return-1===n?c.push(t)-1:n}(e):null,n=t!==s?E({type:"class",value:e.parts,inverted:e.inverted,ignoreCase:e.ignoreCase}):null;return F(t,[r.MATCH_CHAR_CLASS,u],[r.ACCEPT_N,1],[r.FAIL,n])},any(e){const t=0|e.match,u=t!==s?E({type:"any"}):null;return F(t,[r.MATCH_ANY],[r.ACCEPT_N,1],[r.FAIL,u])}},t&&"source-and-map"===t.output&&Object.entries(S).forEach((([e,t])=>{S[e]=function(e,...u){const n=t(e,...u);return void 0!==n&&e.location?g([r.SOURCE_MAP_PUSH,f(e.location)],n,[r.SOURCE_MAP_POP]):n}})),o.build(S));var S;y(e)}},72365:(e,t,u)=>{"use strict";const n=u(86657),r=u(10818),o=u(82169),s=u(62415),{stringEscape:a,regexpClassEscape:i}=u(93758),{SourceNode:c}=u(10782),l=u(49002);function p(e,t,u){const n=l.offsetStart(t),r=n.line,o=n.column-1,s=e.split("\n");return 1===s.length?new c(r,o,String(t.source),e,u):new c(null,null,String(t.source),s.map(((e,n)=>new c(r+n,0===n?o:0,String(t.source),n===s.length-1?e:[e,"\n"],u))))}function A(e,t,u,n,r){if(u){const o=l.offsetEnd(u);return new c(null,null,String(u.source),[e,p(t,u,r),new c(o.line,o.column-1,String(u.source),n)])}return new c(null,null,null,[e,t,n])}e.exports=function(e,t){function u(e){let t=!0,u=0;return function e(n){return Array.isArray(n)?n.map(e):n instanceof c?(u++,n.children=e(n.children),u--,n):(n=t?n.replace(/^(.+)$/gm," $1"):n.replace(/\n(\s*\S)/g,"\n $1"),t=!u||n.endsWith("\n"),n)}(e)}function l(e){return"peg$c"+e}function h(e){return"peg$r"+e}function E(e){return"peg$e"+e}function d(e){return"peg$f"+e}function f(e){return"peg$parse"+e}function C(e){return e.codeLocation?p(e.code,e.codeLocation,"$"+e.type):e.code}e.code=function(e){function n(){return[`// Generated by Peggy ${s}.`,"//","// https://peggyjs.org/"]}function r(){return t.trace?["{"," SyntaxError: peg$SyntaxError,"," DefaultTracer: peg$DefaultTracer,"," parse: peg$parse","}"].join("\n"):["{"," SyntaxError: peg$SyntaxError,"," parse: peg$parse","}"].join("\n")}const o={bare:()=>[...n(),"(function() {",' "use strict";',"",e,"",u("return "+r()+";"),"})()"],commonjs(){const u=Object.keys(t.dependencies),o=n();return o.push("",'"use strict";',""),u.length>0&&(u.forEach((e=>{o.push("var "+e+' = require("'+a(t.dependencies[e])+'");')})),o.push("")),o.push(e,"","module.exports = "+r()+";"),o},es(){const u=Object.keys(t.dependencies),r=n();return r.push(""),u.length>0&&(u.forEach((e=>{r.push("import "+e+' from "'+a(t.dependencies[e])+'";')})),r.push("")),r.push(e,"","export {"," peg$SyntaxError as SyntaxError,",t.trace?" peg$DefaultTracer as DefaultTracer,":""," peg$parse as parse","};"),r},amd(){const o=Object.keys(t.dependencies),s="["+o.map((e=>t.dependencies[e])).map((e=>'"'+a(e)+'"')).join(", ")+"]",i=o.join(", ");return[...n(),"define("+s+", function("+i+") {",' "use strict";',"",e,"",u("return "+r()+";"),"});"]},globals:()=>[...n(),"(function(root) {",' "use strict";',"",e,"",u("root."+t.exportVar+" = "+r()+";"),"})(this);"],umd(){const o=Object.keys(t.dependencies),s=o.map((e=>t.dependencies[e])),i="["+s.map((e=>'"'+a(e)+'"')).join(", ")+"]",c=s.map((e=>'require("'+a(e)+'")')).join(", "),l=o.join(", "),p=n();return p.push("(function(root, factory) {",' if (typeof define === "function" && define.amd) {'," define("+i+", factory);",' } else if (typeof module === "object" && module.exports) {'," module.exports = factory("+c+");"),null!==t.exportVar&&p.push(" } else {"," root."+t.exportVar+" = factory();"),p.push(" }","})(this, function("+l+") {",' "use strict";',"",e,"",u("return "+r()+";"),"});"),p}},i=o[t.format]();return new c(null,null,t.grammarSource,i.map((e=>e instanceof c?e:e+"\n")))}(function(){const s=[];e.topLevelInitializer&&(s.push(C(e.topLevelInitializer)),s.push("")),s.push("function peg$subclass(child, parent) {"," function C() { this.constructor = child; }"," C.prototype = parent.prototype;"," child.prototype = new C();","}","","function peg$SyntaxError(message, expected, found, location) {"," var self = Error.call(this, message);"," // istanbul ignore next Check is a necessary evil to support older environments"," if (Object.setPrototypeOf) {"," Object.setPrototypeOf(self, peg$SyntaxError.prototype);"," }"," self.expected = expected;"," self.found = found;"," self.location = location;",' self.name = "SyntaxError";'," return self;","}","","peg$subclass(peg$SyntaxError, Error);","","function peg$padEnd(str, targetLength, padString) {",' padString = padString || " ";'," if (str.length > targetLength) { return str; }"," targetLength -= str.length;"," padString += padString.repeat(targetLength);"," return str + padString.slice(0, targetLength);","}","","peg$SyntaxError.prototype.format = function(sources) {",' var str = "Error: " + this.message;'," if (this.location) {"," var src = null;"," var k;"," for (k = 0; k < sources.length; k++) {"," if (sources[k].source === this.location.source) {"," src = sources[k].text.split(/\\r\\n|\\n|\\r/g);"," break;"," }"," }"," var s = this.location.start;",' var offset_s = (this.location.source && (typeof this.location.source.offset === "function"))'," ? this.location.source.offset(s)"," : s;",' var loc = this.location.source + ":" + offset_s.line + ":" + offset_s.column;'," if (src) {"," var e = this.location.end;"," var filler = peg$padEnd(\"\", offset_s.line.toString().length, ' ');"," var line = src[s.line - 1];"," var last = s.line === e.line ? e.column : line.length + 1;"," var hatLen = (last - s.column) || 1;",' str += "\\n --\x3e " + loc + "\\n"',' + filler + " |\\n"',' + offset_s.line + " | " + line + "\\n"',' + filler + " | " + peg$padEnd("", s.column - 1, \' \')',' + peg$padEnd("", hatLen, "^");'," } else {",' str += "\\n at " + loc;'," }"," }"," return str;","};","","peg$SyntaxError.buildMessage = function(expected, found) {"," var DESCRIBE_EXPECTATION_FNS = {"," literal: function(expectation) {",' return "\\"" + literalEscape(expectation.text) + "\\"";'," },",""," class: function(expectation) {"," var escapedParts = expectation.parts.map(function(part) {"," return Array.isArray(part)",' ? classEscape(part[0]) + "-" + classEscape(part[1])'," : classEscape(part);"," });","",' return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]";'," },",""," any: function() {",' return "any character";'," },",""," end: function() {",' return "end of input";'," },",""," other: function(expectation) {"," return expectation.description;"," }"," };",""," function hex(ch) {"," return ch.charCodeAt(0).toString(16).toUpperCase();"," }",""," function literalEscape(s) {"," return s",' .replace(/\\\\/g, "\\\\\\\\")',' .replace(/"/g, "\\\\\\"")',' .replace(/\\0/g, "\\\\0")',' .replace(/\\t/g, "\\\\t")',' .replace(/\\n/g, "\\\\n")',' .replace(/\\r/g, "\\\\r")',' .replace(/[\\x00-\\x0F]/g, function(ch) { return "\\\\x0" + hex(ch); })',' .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return "\\\\x" + hex(ch); });'," }",""," function classEscape(s) {"," return s",' .replace(/\\\\/g, "\\\\\\\\")',' .replace(/\\]/g, "\\\\]")',' .replace(/\\^/g, "\\\\^")',' .replace(/-/g, "\\\\-")',' .replace(/\\0/g, "\\\\0")',' .replace(/\\t/g, "\\\\t")',' .replace(/\\n/g, "\\\\n")',' .replace(/\\r/g, "\\\\r")',' .replace(/[\\x00-\\x0F]/g, function(ch) { return "\\\\x0" + hex(ch); })',' .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return "\\\\x" + hex(ch); });'," }",""," function describeExpectation(expectation) {"," return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);"," }",""," function describeExpected(expected) {"," var descriptions = expected.map(describeExpectation);"," var i, j;",""," descriptions.sort();",""," if (descriptions.length > 0) {"," for (i = 1, j = 1; i < descriptions.length; i++) {"," if (descriptions[i - 1] !== descriptions[i]) {"," descriptions[j] = descriptions[i];"," j++;"," }"," }"," descriptions.length = j;"," }",""," switch (descriptions.length) {"," case 1:"," return descriptions[0];",""," case 2:",' return descriptions[0] + " or " + descriptions[1];',""," default:",' return descriptions.slice(0, -1).join(", ")',' + ", or "'," + descriptions[descriptions.length - 1];"," }"," }",""," function describeFound(found) {",' return found ? "\\"" + literalEscape(found) + "\\"" : "end of input";'," }","",' return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";',"};",""),t.trace&&s.push("function peg$DefaultTracer() {"," this.indentLevel = 0;","}","","peg$DefaultTracer.prototype.trace = function(event) {"," var that = this;",""," function log(event) {"," function repeat(string, n) {",' var result = "", i;',""," for (i = 0; i < n; i++) {"," result += string;"," }",""," return result;"," }",""," function pad(string, length) {",' return string + repeat(" ", length - string.length);'," }","",' if (typeof console === "object") {'," console.log(",' event.location.start.line + ":" + event.location.start.column + "-"',' + event.location.end.line + ":" + event.location.end.column + " "',' + pad(event.type, 10) + " "',' + repeat(" ", that.indentLevel) + event.rule'," );"," }"," }",""," switch (event.type) {",' case "rule.enter":'," log(event);"," this.indentLevel++;"," break;","",' case "rule.match":'," this.indentLevel--;"," log(event);"," break;","",' case "rule.fail":'," this.indentLevel--;"," log(event);"," break;",""," default:",' throw new Error("Invalid event type: " + event.type + ".");'," }","};","");const p="{ "+t.allowedStartRules.map((e=>e+": "+f(e))).join(", ")+" }",g=f(t.allowedStartRules[0]);return s.push("function peg$parse(input, options) {"," options = options !== undefined ? options : {};",""," var peg$FAILED = {};"," var peg$source = options.grammarSource;",""," var peg$startRuleFunctions = "+p+";"," var peg$startRuleFunction = "+g+";","",new c(null,null,t.grammarSource,[e.literals.map(((e,t)=>" var "+l(t)+' = "'+a(e)+'";')).concat("",e.classes.map(((e,t)=>{return" var "+h(t)+" = /^["+((u=e).inverted?"^":"")+u.value.map((e=>Array.isArray(e)?i(e[0])+"-"+i(e[1]):i(e))).join("")+"]/"+(u.ignoreCase?"i":"")+";";var u}))).concat("",e.expectations.map(((e,t)=>" var "+E(t)+" = "+function(e){switch(e.type){case"rule":return'peg$otherExpectation("'+a(e.value)+'")';case"literal":return'peg$literalExpectation("'+a(e.value)+'", '+e.ignoreCase+")";case"class":return"peg$classExpectation(["+e.value.map((e=>Array.isArray(e)?'["'+a(e[0])+'", "'+a(e[1])+'"]':'"'+a(e)+'"')).join(", ")+"], "+e.inverted+", "+e.ignoreCase+")";case"any":return"peg$anyExpectation()";default:throw new Error("Unknown expectation type ("+JSON.stringify(e)+")")}}(e)+";"))).concat("").join("\n"),e.functions.map((function(e,t){return A(`\n var ${d(t)} = function(${e.params.join(", ")}) {`,e.body,e.location,"};")}))]),""," var peg$currPos = 0;"," var peg$savedPos = 0;"," var peg$posDetailsCache = [{ line: 1, column: 1 }];"," var peg$maxFailPos = 0;"," var peg$maxFailExpected = [];"," var peg$silentFails = 0;",""),t.cache&&s.push(" var peg$resultsCache = {};",""),t.trace&&s.push(' var peg$tracer = "tracer" in options ? options.tracer : new peg$DefaultTracer();',""),s.push(" var peg$result;","",' if ("startRule" in options) {'," if (!(options.startRule in peg$startRuleFunctions)) {",' throw new Error("Can\'t start parsing from rule \\"" + options.startRule + "\\".");'," }",""," peg$startRuleFunction = peg$startRuleFunctions[options.startRule];"," }",""," function text() {"," return input.substring(peg$savedPos, peg$currPos);"," }",""," function offset() {"," return peg$savedPos;"," }",""," function range() {"," return {"," source: peg$source,"," start: peg$savedPos,"," end: peg$currPos"," };"," }",""," function location() {"," return peg$computeLocation(peg$savedPos, peg$currPos);"," }",""," function expected(description, location) {"," location = location !== undefined"," ? location"," : peg$computeLocation(peg$savedPos, peg$currPos);",""," throw peg$buildStructuredError("," [peg$otherExpectation(description)],"," input.substring(peg$savedPos, peg$currPos),"," location"," );"," }",""," function error(message, location) {"," location = location !== undefined"," ? location"," : peg$computeLocation(peg$savedPos, peg$currPos);",""," throw peg$buildSimpleError(message, location);"," }",""," function peg$literalExpectation(text, ignoreCase) {",' return { type: "literal", text: text, ignoreCase: ignoreCase };'," }",""," function peg$classExpectation(parts, inverted, ignoreCase) {",' return { type: "class", parts: parts, inverted: inverted, ignoreCase: ignoreCase };'," }",""," function peg$anyExpectation() {",' return { type: "any" };'," }",""," function peg$endExpectation() {",' return { type: "end" };'," }",""," function peg$otherExpectation(description) {",' return { type: "other", description: description };'," }",""," function peg$computePosDetails(pos) {"," var details = peg$posDetailsCache[pos];"," var p;",""," if (details) {"," return details;"," } else {"," p = pos - 1;"," while (!peg$posDetailsCache[p]) {"," p--;"," }",""," details = peg$posDetailsCache[p];"," details = {"," line: details.line,"," column: details.column"," };",""," while (p < pos) {"," if (input.charCodeAt(p) === 10) {"," details.line++;"," details.column = 1;"," } else {"," details.column++;"," }",""," p++;"," }",""," peg$posDetailsCache[pos] = details;",""," return details;"," }"," }",""," function peg$computeLocation(startPos, endPos, offset) {"," var startPosDetails = peg$computePosDetails(startPos);"," var endPosDetails = peg$computePosDetails(endPos);",""," var res = {"," source: peg$source,"," start: {"," offset: startPos,"," line: startPosDetails.line,"," column: startPosDetails.column"," },"," end: {"," offset: endPos,"," line: endPosDetails.line,"," column: endPosDetails.column"," }"," };",' if (offset && peg$source && (typeof peg$source.offset === "function")) {'," res.start = peg$source.offset(res.start);"," res.end = peg$source.offset(res.end);"," }"," return res;"," }",""," function peg$fail(expected) {"," if (peg$currPos < peg$maxFailPos) { return; }",""," if (peg$currPos > peg$maxFailPos) {"," peg$maxFailPos = peg$currPos;"," peg$maxFailExpected = [];"," }",""," peg$maxFailExpected.push(expected);"," }",""," function peg$buildSimpleError(message, location) {"," return new peg$SyntaxError(message, null, null, location);"," }",""," function peg$buildStructuredError(expected, found, location) {"," return new peg$SyntaxError("," peg$SyntaxError.buildMessage(expected, found),"," expected,"," found,"," location"," );"," }",""),e.rules.forEach((i=>{s.push(...u(function(s){const i=[],c=new o(s.name,"s","var",s.bytecode),p=function t(n){let o=0;const a=n.length,i=[];let p;function A(e,r){const s=r+3,a=n[o+s-2],l=n[o+s-1];let p,A;c.checkedIf(o,(()=>{o+=s,p=t(n.slice(o,o+a)),o+=a}),l>0?()=>{A=t(n.slice(o,o+l)),o+=l}:null),i.push("if ("+e+") {"),i.push(...u(p)),l>0&&(i.push("} else {"),i.push(...u(A))),i.push("}")}function C(e){const r=n[o+2-1];let s;c.checkedLoop(o,(()=>{o+=2,s=t(n.slice(o,o+r)),o+=r})),i.push("while ("+e+") {"),i.push(...u(s)),i.push("}")}function g(e){const t=n[o+e-1];return d(n[o+1])+"("+n.slice(o+e,o+e+t).map((e=>c.index(e))).join(", ")+")"}for(;oc.index(e))).join(", ")} ]`,c.pop(n[o+1]),i.push(c.push(p)),o+=u;break}case r.IF:A(c.top(),0);break;case r.IF_ERROR:A(c.top()+" === peg$FAILED",0);break;case r.IF_NOT_ERROR:A(c.top()+" !== peg$FAILED",0);break;case r.IF_LT:A(c.top()+".length < "+n[o+1],1);break;case r.IF_GE:A(c.top()+".length >= "+n[o+1],1);break;case r.IF_LT_DYNAMIC:A(c.top()+".length < ("+c.index(n[o+1])+"|0)",1);break;case r.IF_GE_DYNAMIC:A(c.top()+".length >= ("+c.index(n[o+1])+"|0)",1);break;case r.WHILE_NOT_ERROR:C(c.top()+" !== peg$FAILED");break;case r.MATCH_ANY:A("input.length > peg$currPos",0);break;case r.MATCH_STRING:A(e.literals[n[o+1]].length>1?"input.substr(peg$currPos, "+e.literals[n[o+1]].length+") === "+l(n[o+1]):"input.charCodeAt(peg$currPos) === "+e.literals[n[o+1]].charCodeAt(0),1);break;case r.MATCH_STRING_IC:A("input.substr(peg$currPos, "+e.literals[n[o+1]].length+").toLowerCase() === "+l(n[o+1]),1);break;case r.MATCH_CHAR_CLASS:A(h(n[o+1])+".test(input.charAt(peg$currPos))",1);break;case r.ACCEPT_N:i.push(c.push(n[o+1]>1?"input.substr(peg$currPos, "+n[o+1]+")":"input.charAt(peg$currPos)")),i.push(n[o+1]>1?"peg$currPos += "+n[o+1]+";":"peg$currPos++;"),o+=2;break;case r.ACCEPT_STRING:i.push(c.push(l(n[o+1]))),i.push(e.literals[n[o+1]].length>1?"peg$currPos += "+e.literals[n[o+1]].length+";":"peg$currPos++;"),o+=2;break;case r.FAIL:i.push(c.push("peg$FAILED")),i.push("if (peg$silentFails === 0) { peg$fail("+E(n[o+1])+"); }"),o+=2;break;case r.LOAD_SAVED_POS:i.push("peg$savedPos = "+c.index(n[o+1])+";"),o+=2;break;case r.UPDATE_SAVED_POS:i.push("peg$savedPos = peg$currPos;"),o++;break;case r.CALL:p=g(4),c.pop(n[o+2]),i.push(c.push(p)),o+=4+n[o+3];break;case r.RULE:i.push(c.push(f(e.rules[n[o+1]].name)+"()")),o+=2;break;case r.SILENT_FAILS_ON:i.push("peg$silentFails++;"),o++;break;case r.SILENT_FAILS_OFF:i.push("peg$silentFails--;"),o++;break;case r.SOURCE_MAP_PUSH:c.sourceMapPush(i,e.locations[n[o+1]]),o+=2;break;case r.SOURCE_MAP_POP:c.sourceMapPop(),o++;break;case r.SOURCE_MAP_LABEL_PUSH:c.labels[n[o+1]]={label:e.literals[n[o+2]],location:e.locations[n[o+3]]},o+=4;break;case r.SOURCE_MAP_LABEL_POP:delete c.labels[n[o+1]],o+=2;break;default:throw new Error("Invalid opcode: "+n[o]+".",{rule:s.name,bytecode:n})}return i}(s.bytecode);return i.push(A("function ",f(s.name),s.nameLocation,"() {\n",s.name)),t.trace&&i.push(" var startPos = peg$currPos;"),i.push(u(c.defines())),i.push(...u(function(u,n){const r=[];return r.push(""),t.trace&&r.push("peg$tracer.trace({",' type: "rule.enter",'," rule: "+u+","," location: peg$computeLocation(startPos, startPos, true)","});",""),t.cache&&(r.push("var key = peg$currPos * "+e.rules.length+" + "+n+";","var cached = peg$resultsCache[key];","","if (cached) {"," peg$currPos = cached.nextPos;",""),t.trace&&r.push("if (cached.result !== peg$FAILED) {"," peg$tracer.trace({",' type: "rule.match",'," rule: "+u+","," result: cached.result,"," location: peg$computeLocation(startPos, peg$currPos, true)"," });","} else {"," peg$tracer.trace({",' type: "rule.fail",'," rule: "+u+","," location: peg$computeLocation(startPos, startPos, true)"," });","}",""),r.push(" return cached.result;","}","")),r}('"'+a(s.name)+'"',n.indexOfRule(e,s.name)))),i.push(...u(p)),i.push(...u(function(e,u){const n=[];return t.cache&&n.push("","peg$resultsCache[key] = { nextPos: peg$currPos, result: "+u+" };"),t.trace&&n.push("","if ("+u+" !== peg$FAILED) {"," peg$tracer.trace({",' type: "rule.match",'," rule: "+e+","," result: "+u+","," location: peg$computeLocation(startPos, peg$currPos, true)"," });","} else {"," peg$tracer.trace({",' type: "rule.fail",'," rule: "+e+","," location: peg$computeLocation(startPos, startPos, true)"," });","}"),n.push("","return "+u+";"),n}('"'+a(s.name)+'"',c.result()))),i.push("}"),i}(i))),s.push("")})),e.initializer&&(s.push(C(e.initializer)),s.push("")),s.push(" peg$result = peg$startRuleFunction();",""," if (peg$result !== peg$FAILED && peg$currPos === input.length) {"," return peg$result;"," } else {"," if (peg$result !== peg$FAILED && peg$currPos < input.length) {"," peg$fail(peg$endExpectation());"," }",""," throw peg$buildStructuredError("," peg$maxFailExpected,"," peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,"," peg$maxFailPos < input.length"," ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)"," : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)"," );"," }","}"),new c(null,null,t.grammarSource,s.map((e=>e instanceof c?e:e+"\n")))}())}},51358:(e,t,u)=>{"use strict";const n=u(87602),r=u(86657),o=u(48256),s=-1;function a(e){function t(e){return e.match=0}function u(e){return c(e.expression),e.match=1}function a(e){return e.match=c(e.expression)}function i(e,t){const u=e.length;let n=0,r=0;for(let t=0;t0?s:0}const c=n.build({rule(e){let t,u=0;if(void 0===e.match){e.match=0;do{if(t=e.match,e.match=c(e.expression),++u>6)throw new o("Infinity cycle detected when trying to evaluate node match result",e.location)}while(t!==e.match)}return e.match},named:a,choice:e=>e.match=i(e.alternatives,!0),action:a,sequence:e=>e.match=i(e.elements,!1),labeled:a,text:a,simple_and:a,simple_not:e=>e.match=-c(e.expression),optional:u,zero_or_more:u,one_or_more:a,repeated(e){const t=c(e.expression),u=e.delimiter?c(e.delimiter):s,n=e.min?e.min:e.max;return"constant"!==n.type||"constant"!==e.max.type?e.match=0:0===e.max.value||null!==e.max.value&&n.value>e.max.value?e.match=s:t===s?e.match=0===n.value?1:s:1===t?e.delimiter&&n.value>=2?e.match=u:e.match=1:e.delimiter&&n.value>=2?e.match=u===s?s:0:e.match=0===n.value?1:0},group:a,semantic_and:t,semantic_not:t,rule_ref(t){const u=r.findRule(e,t.name);return t.match=c(u)},literal(e){const t=0===e.value.length?1:0;return e.match=t},class(e){const t=0===e.parts.length?s:0;return e.match=t},any:t});c(e)}a.ALWAYS_MATCH=1,a.SOMETIMES_MATCH=0,a.NEVER_MATCH=s,e.exports=a},47349:(e,t,u)=>{"use strict";const n=u(86657),r=u(87602);e.exports=function(e,t,u){const o=[];e.rules.forEach(((s,a)=>{var i;"rule"===(i=s).type&&"rule_ref"===i.expression.type&&(function(e,t,o){r.build({rule_ref(r){r.name===t&&(r.name=o,u.info(`Proxy rule "${t}" replaced by the rule "${o}"`,r.location,[{message:"This rule will be used",location:n.findRule(e,o).nameLocation}]))}})(e)}(e,s.name,s.expression.name),-1===t.allowedStartRules.indexOf(s.name)&&o.push(a))})),o.reverse(),o.forEach((t=>{e.rules.splice(t,1)}))}},13747:(e,t,u)=>{"use strict";const n=u(87602);e.exports=function(e,t,u){function r(e){const t={};return Object.keys(e).forEach((u=>{t[u]=e[u]})),t}function o(e,t){s(e.expression,r(t))}const s=n.build({rule(e){s(e.expression,{})},choice(e,t){e.alternatives.forEach((e=>{s(e,r(t))}))},action:o,labeled(e,t){const n=e.label;n&&Object.prototype.hasOwnProperty.call(t,n)&&u.error(`Label "${e.label}" is already defined`,e.labelLocation,[{message:"Original label location",location:t[n]}]),s(e.expression,t),t[e.label]=e.labelLocation},text:o,simple_and:o,simple_not:o,optional:o,zero_or_more:o,one_or_more:o,repeated(e,t){e.delimiter&&s(e.delimiter,r(t)),s(e.expression,r(t))},group:o});s(e)}},7937:(e,t,u)=>{"use strict";const n=u(87602);e.exports=function(e,t,u){const r={};n.build({rule(e){Object.prototype.hasOwnProperty.call(r,e.name)?u.error(`Rule "${e.name}" is already defined`,e.nameLocation,[{message:"Original rule location",location:r[e.name]}]):r[e.name]=e.nameLocation}})(e)}},43046:(e,t,u)=>{"use strict";const n=u(87602);e.exports=function(e,t,u){const r=n.build({action(e){r(e.expression,e)},labeled(e,t){e.pick&&t&&u.error('"@" cannot be used with an action block',e.labelLocation,[{message:"Action block location",location:t.codeLocation}]),r(e.expression)}});r(e)}},47771:(e,t,u)=>{"use strict";const n=u(86657),r=u(87602);e.exports=function(e,t,u){const o=[],s=[],a=r.build({rule(e){o.push(e.name),a(e.expression),o.pop()},sequence(t){t.elements.every((t=>(a(t),!n.alwaysConsumesOnSuccess(e,t))))},repeated(t){a(t.expression),t.delimiter&&!n.alwaysConsumesOnSuccess(e,t.expression)&&a(t.delimiter)},rule_ref(t){s.push(t);const r=n.findRule(e,t.name);if(-1!==o.indexOf(t.name))return o.push(t.name),void u.error("Possible infinite loop when parsing (left recursion: "+o.join(" -> ")+")",r.nameLocation,s.map(((e,t,u)=>({message:t+1!==u.length?`Step ${t+1}: call of the rule "${e.name}" without input consumption`:`Step ${t+1}: call itself without input consumption - left recursion`,location:e.location}))));r&&a(r),s.pop()}});a(e)}},74414:(e,t,u)=>{"use strict";const n=u(86657),r=u(87602);e.exports=function(e,t,u){const o=r.build({zero_or_more(t){n.alwaysConsumesOnSuccess(e,t.expression)||u.error("Possible infinite loop when parsing (repetition used with an expression that may not consume any input)",t.location)},one_or_more(t){n.alwaysConsumesOnSuccess(e,t.expression)||u.error("Possible infinite loop when parsing (repetition used with an expression that may not consume any input)",t.location)},repeated(t){if(t.delimiter&&o(t.delimiter),!(n.alwaysConsumesOnSuccess(e,t.expression)||t.delimiter&&n.alwaysConsumesOnSuccess(e,t.delimiter)))if(null===t.max.value)u.error("Possible infinite loop when parsing (unbounded range repetition used with an expression that may not consume any input)",t.location);else{const e=t.min?t.min:t.max;u.warning("constant"===e.type&&"constant"===t.max.type?`An expression may not consume any input and may always match ${t.max.value} times`:"An expression may not consume any input and may always match with a maximum repetition count",t.location)}}});o(e)}},78277:(e,t,u)=>{"use strict";const n=u(86657),r=u(87602);e.exports=function(e,t,u){r.build({rule_ref(t){n.findRule(e,t.name)||u.error(`Rule "${t.name}" is not defined`,t.location)}})(e)}},52399:(e,t,u)=>{"use strict";const n=u(48256);class r{constructor(e){"function"==typeof(e=void 0!==e?e:{}).error&&(this.error=e.error),"function"==typeof e.warning&&(this.warning=e.warning),"function"==typeof e.info&&(this.info=e.info)}error(){}warning(){}info(){}}e.exports=class{constructor(e){this._callbacks=new r(e),this._firstError=null,this.errors=0,this.problems=[],this.stage=null}error(...e){++this.errors,null===this._firstError&&(this._firstError=new n(...e),this._firstError.stage=this.stage,this._firstError.problems=this.problems),this.problems.push(["error",...e]),this._callbacks.error(this.stage,...e)}warning(...e){this.problems.push(["warning",...e]),this._callbacks.warning(this.stage,...e)}info(...e){this.problems.push(["info",...e]),this._callbacks.info(this.stage,...e)}checkErrors(){if(0!==this.errors)throw this._firstError}}},82169:(e,t,u)=>{"use strict";const{SourceNode:n}=u(10782),r=u(49002);class o{constructor(e,t,u,n){this.sp=-1,this.maxSp=-1,this.varName=t,this.ruleName=e,this.type=u,this.bytecode=n,this.labels={},this.sourceMapStack=[]}name(e){if(e<0)throw new RangeError(`Rule '${this.ruleName}': The variable stack underflow: attempt to use a variable '${this.varName}' at an index ${e}.\nBytecode: ${this.bytecode}`);return this.varName+e}static sourceNode(e,t,u){const o=r.offsetStart(e);return new n(o.line,o.column?o.column-1:null,String(e.source),t,u)}push(e){++this.sp>this.maxSp&&(this.maxSp=this.sp);const t=this.labels[this.sp],u=[this.name(this.sp)," = ",e,";"];if(t){if(this.sourceMapStack.length){const e=o.sourceNode(t.location,u.splice(0,2),t.label),{parts:r,location:s}=this.sourceMapPopInternal(),a=s.start.offsetthis.name(this.sp+1+t)))):this.name(this.sp--)}top(){return this.name(this.sp)}index(e){if(e<0)throw new RangeError(`Rule '${this.ruleName}': The variable stack overflow: attempt to get a variable at a negative index ${e}.\nBytecode: ${this.bytecode}`);return this.name(this.sp-e)}result(){if(this.maxSp<0)throw new RangeError(`Rule '${this.ruleName}': The variable stack is empty, can't get the result.\nBytecode: ${this.bytecode}`);return this.name(0)}defines(){return this.maxSp<0?"":this.type+" "+Array.from({length:this.maxSp+1},((e,t)=>this.name(t))).join(", ")+";"}checkedIf(e,t,u){const n=this.sp;if(t(),u){const t=this.sp;if(this.sp=n,u(),t!==this.sp)throw new Error("Rule '"+this.ruleName+"', position "+e+": Branches of a condition can't move the stack pointer differently (before: "+n+", after then: "+t+", after else: "+this.sp+"). Bytecode: "+this.bytecode)}}checkedLoop(e,t){const u=this.sp;if(t(),u!==this.sp)throw new Error("Rule '"+this.ruleName+"', position "+e+": Body of a loop can't move the stack pointer (before: "+u+", after: "+this.sp+"). Bytecode: "+this.bytecode)}sourceMapPush(e,t){if(this.sourceMapStack.length){const e=this.sourceMapStack[this.sourceMapStack.length-1];e[2].start.offset===t.start.offset&&e[2].end.offset>t.end.offset&&(e[2]={start:t.end,end:e[2].end,source:e[2].source})}this.sourceMapStack.push([e,e.length,t])}sourceMapPopInternal(){const[e,t,u]=this.sourceMapStack.pop(),o=e.splice(t).map((e=>e instanceof n?e:e+"\n"));if(o.length){const t=r.offsetStart(u);e.push(new n(t.line,t.column-1,String(u.source),o))}return{parts:e,location:u}}sourceMapPop(e){const{location:t}=this.sourceMapPopInternal();if(this.sourceMapStack.length&&t.end.offset{"use strict";function u(e){return e.charCodeAt(0).toString(16).toUpperCase()}t.hex=u,t.stringEscape=function(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\v/g,"\\v").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(e=>"\\x0"+u(e))).replace(/[\x10-\x1F\x7F-\xFF]/g,(e=>"\\x"+u(e))).replace(/[\u0100-\u0FFF]/g,(e=>"\\u0"+u(e))).replace(/[\u1000-\uFFFF]/g,(e=>"\\u"+u(e)))},t.regexpClassEscape=function(e){return e.replace(/\\/g,"\\\\").replace(/\//g,"\\/").replace(/]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\v/g,"\\v").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,(e=>"\\x0"+u(e))).replace(/[\x10-\x1F\x7F-\xFF]/g,(e=>"\\x"+u(e))).replace(/[\u0100-\u0FFF]/g,(e=>"\\u0"+u(e))).replace(/[\u1000-\uFFFF]/g,(e=>"\\u"+u(e)))},t.base64=function(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u=e.length%3,n=e.length-u;let r="";for(let u=0;u>2],r+=t[(3&e[u])<<4|e[u+1]>>4],r+=t[(15&e[u+1])<<2|e[u+2]>>6],r+=t[63&e[u+2]];return 1===u?(r+=t[e[n]>>2],r+=t[(3&e[n])<<4],r+="=="):2===u&&(r+=t[e[n]>>2],r+=t[(3&e[n])<<4|e[n+1]>>4],r+=t[(15&e[n+1])<<2],r+="="),r}},87602:e=>{"use strict";const t={build(e){function t(t,...u){return e[t.type](t,...u)}function u(){}function n(e,...u){return t(e.expression,...u)}function r(e){return function(u,...n){u[e].forEach((e=>t(e,...n)))}}const o={grammar(e,...u){e.topLevelInitializer&&t(e.topLevelInitializer,...u),e.initializer&&t(e.initializer,...u),e.rules.forEach((e=>t(e,...u)))},top_level_initializer:u,initializer:u,rule:n,named:n,choice:r("alternatives"),action:n,sequence:r("elements"),labeled:n,text:n,simple_and:n,simple_not:n,optional:n,zero_or_more:n,one_or_more:n,repeated:(e,...u)=>(e.delimiter&&t(e.delimiter,...u),t(e.expression,...u)),group:n,semantic_and:u,semantic_not:u,rule_ref:u,literal:u,class:u,any:u};return Object.keys(o).forEach((t=>{Object.prototype.hasOwnProperty.call(e,t)||(e[t]=o[t])})),t}};e.exports=t},48256:(e,t,u)=>{"use strict";const n=u(49002),r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(const u in t)Object.prototype.hasOwnProperty.call(t,u)&&(e[u]=t[u])};class o extends Error{constructor(e,t,u){super(e),r(this,o.prototype),this.name="GrammarError",this.location=t,void 0===u&&(u=[]),this.diagnostics=u,this.stage=null,this.problems=[["error",e,t,u]]}toString(){let e=super.toString();this.location&&(e+="\n at ",void 0!==this.location.source&&null!==this.location.source&&(e+=`${this.location.source}:`),e+=`${this.location.start.line}:${this.location.start.column}`);for(const t of this.diagnostics)e+="\n from ",void 0!==t.location.source&&null!==t.location.source&&(e+=`${t.location.source}:`),e+=`${t.location.start.line}:${t.location.start.column}: ${t.message}`;return e}format(e){const t=e.map((({source:e,text:t})=>({source:e,text:null!=t?String(t).split(/\r\n|\n|\r/g):[]})));function u(e,u,r=""){let o="";const s=t.find((({source:t})=>t===e.source)),a=e.start,i=n.offsetStart(e);if(s){const t=e.end,n=s.text[a.line-1],c=(a.line===t.line?t.column:n.length+1)-a.column||1;r&&(o+=`\nnote: ${r}`),o+=`\n --\x3e ${e.source}:${i.line}:${i.column}\n${"".padEnd(u)} |\n${i.line.toString().padStart(u)} | ${n}\n${"".padEnd(u)} | ${"".padEnd(a.column-1)}${"".padEnd(c,"^")}`}else o+=`\n at ${e.source}:${i.line}:${i.column}`,r&&(o+=`: ${r}`);return o}return this.problems.filter((e=>"info"!==e[0])).map((e=>function(e,t,r,o=[]){let s=-1/0;s=r?o.reduce(((e,{location:t})=>Math.max(e,n.offsetStart(t).line)),r.start.line):Math.max.apply(null,o.map((e=>e.location.start.line))),s=s.toString().length;let a=`${e}: ${t}`;r&&(a+=u(r,s));for(const e of o)a+=u(e.location,s,e.message);return a}(...e))).join("\n\n")}}e.exports=o},49002:e=>{"use strict";e.exports=class{constructor(e,t){this.source=e,this.start=t}toString(){return String(this.source)}offset(e){return{line:e.line+this.start.line-1,column:1===e.line?e.column+this.start.column-1:e.column,offset:e.offset+this.start.offset}}static offsetStart(e){return e.source&&"function"==typeof e.source.offset?e.source.offset(e.start):e.start}static offsetEnd(e){return e.source&&"function"==typeof e.source.offset?e.source.offset(e.end):e.end}}},68189:e=>{"use strict";const t={$:"text","&":"simple_and","!":"simple_not"},u={"?":"optional","*":"zero_or_more","+":"one_or_more"},n={"&":"semantic_and","!":"semantic_not"};function r(e,t,u,n){var o=Error.call(this,e);return Object.setPrototypeOf&&Object.setPrototypeOf(o,r.prototype),o.expected=t,o.found=u,o.location=n,o.name="SyntaxError",o}function o(e,t,u){return u=u||" ",e.length>t?e:(t-=e.length,e+(u+=u.repeat(t)).slice(0,t))}!function(e,t){function u(){this.constructor=e}u.prototype=t.prototype,e.prototype=new u}(r,Error),r.prototype.format=function(e){var t="Error: "+this.message;if(this.location){var u,n=null;for(u=0;u0){for(t=1,u=1;tot&&(ot=ut,st=[]),st.push(e))}function ft(){var t,u,n,r,o,s;if(t=ut,Jt(),u=ut,n=function(){var t,u,n,r,o;return t=ut,123===e.charCodeAt(ut)?(u=p,ut++):(u=a,0===at&&dt(R)),u!==a&&(n=Yt())!==a?(125===e.charCodeAt(ut)?(r=A,ut++):(r=a,0===at&&dt(L)),r!==a&&Xt()!==a?(nt=t,t={type:"top_level_initializer",code:(o=n)[0],codeLocation:o[1],location:it()}):(ut=t,t=a)):(ut=t,t=a),t}(),n!==a?(r=Jt(),u=n):(ut=u,u=a),u===a&&(u=null),n=ut,r=function(){var e,t,u;return e=ut,(t=Yt())!==a&&Xt()!==a?(nt=e,e={type:"initializer",code:(u=t)[0],codeLocation:u[1],location:it()}):(ut=e,e=a),e}(),r!==a?(o=Jt(),n=r):(ut=n,n=a),n===a&&(n=null),r=[],o=ut,(s=Ct())!==a?(Jt(),o=s):(ut=o,o=a),o!==a)for(;o!==a;)r.push(o),o=ut,(s=Ct())!==a?(Jt(),o=s):(ut=o,o=a);else r=a;return r!==a?(nt=t,t={type:"grammar",topLevelInitializer:u,initializer:n,rules:r,location:it()}):(ut=t,t=a),t}function Ct(){var t,u,n,r,o,s,i,c;return t=ut,(u=Rt())!==a?(Jt(),n=ut,(r=It())!==a?(Jt(),n=r):(ut=n,n=a),n===a&&(n=null),61===e.charCodeAt(ut)?(r="=",ut++):(r=a,0===at&&dt(k)),r!==a?(Jt(),(o=gt())!==a&&Xt()!==a?(nt=t,i=n,c=o,t={type:"rule",name:(s=u)[0],nameLocation:s[1],expression:null!==i?{type:"named",name:i,expression:c,location:it()}:c,location:it()}):(ut=t,t=a)):(ut=t,t=a)):(ut=t,t=a),t}function gt(){var t,u,n,r,o,s,i,c;if(t=ut,(u=Ft())!==a){for(n=[],r=ut,Jt(),47===e.charCodeAt(ut)?(o="/",ut++):(o=a,0===at&&dt(I)),o!==a?(Jt(),(s=Ft())!==a?r=s:(ut=r,r=a)):(ut=r,r=a);r!==a;)n.push(r),r=ut,Jt(),47===e.charCodeAt(ut)?(o="/",ut++):(o=a,0===at&&dt(I)),o!==a?(Jt(),(s=Ft())!==a?r=s:(ut=r,r=a)):(ut=r,r=a);nt=t,i=u,t=(c=n).length>0?{type:"choice",alternatives:[i].concat(c),location:it()}:i}else ut=t,t=a;return t}function Ft(){var e,t,u,n,r,o;return e=ut,t=function(){var e,t,u,n,r,o,s;if(e=ut,(t=mt())!==a){for(u=[],n=ut,Jt(),(r=mt())!==a?n=r:(ut=n,n=a);n!==a;)u.push(n),n=ut,Jt(),(r=mt())!==a?n=r:(ut=n,n=a);nt=e,o=t,e=(s=u).length>0||"labeled"===o.type&&o.pick?{type:"sequence",elements:[o].concat(s),location:it()}:o}else ut=e,e=a;return e}(),t!==a?(u=ut,Jt(),(n=Yt())!==a?u=n:(ut=u,u=a),u===a&&(u=null),nt=e,r=t,e=null!==(o=u)?{type:"action",expression:r,code:o[0],codeLocation:o[1],location:it()}:r):(ut=e,e=a),e}function mt(){var t,u,n,r,o,s,i;return t=ut,u=function(){var t,u;return t=ut,64===e.charCodeAt(ut)?(u="@",ut++):(u=a,0===at&&dt(N)),u!==a&&(nt=t,u=it()),u}(),u!==a?((n=_t())===a&&(n=null),(r=Dt())!==a?(nt=t,o=u,s=n,(i=r).type.startsWith("semantic_")&&ct('"@" cannot be used on a semantic predicate',o),t={type:"labeled",label:null!==s?s[0]:null,labelLocation:null!==s?s[1]:o,pick:!0,expression:i,location:it()}):(ut=t,t=a)):(ut=t,t=a),t===a&&(t=ut,(u=_t())!==a?(n=Jt(),(r=Dt())!==a?(nt=t,t=function(e,t){return{type:"labeled",label:e[0],labelLocation:e[1],expression:t,location:it()}}(u,r)):(ut=t,t=a)):(ut=t,t=a),t===a&&(t=Dt())),t}function _t(){var t,u,n,r;return t=ut,(u=Rt())!==a?(Jt(),58===e.charCodeAt(ut)?(n=":",ut++):(n=a,0===at&&dt(T)),n!==a?(nt=t,r=u,Zt.indexOf(r[0])>=0&&ct(`Label can't be a reserved word "${r[0]}"`,r[1]),t=r):(ut=t,t=a)):(ut=t,t=a),t}function Dt(){var u,n,r;return u=ut,n=function(){var t;return 36===e.charCodeAt(ut)?(t="$",ut++):(t=a,0===at&&dt(M)),t===a&&(38===e.charCodeAt(ut)?(t="&",ut++):(t=a,0===at&&dt(U)),t===a&&(33===e.charCodeAt(ut)?(t="!",ut++):(t=a,0===at&&dt(j)))),t}(),n!==a?(Jt(),(r=Bt())!==a?(nt=u,u={type:t[n],expression:r,location:it()}):(ut=u,u=a)):(ut=u,u=a),u===a&&(u=Bt()),u}function Bt(){var t,n,r;return t=ut,(n=vt())!==a?(Jt(),r=function(){var t;return 63===e.charCodeAt(ut)?(t="?",ut++):(t=a,0===at&&dt(H)),t===a&&(42===e.charCodeAt(ut)?(t="*",ut++):(t=a,0===at&&dt(q)),t===a&&(43===e.charCodeAt(ut)?(t="+",ut++):(t=a,0===at&&dt(G)))),t}(),r!==a?(nt=t,t={type:u[r],expression:n,location:it()}):(ut=t,t=a)):(ut=t,t=a),t===a&&(t=function(){var t,u,n,r,o,s,i;return t=ut,(u=vt())!==a?(Jt(),124===e.charCodeAt(ut)?(n="|",ut++):(n=a,0===at&&dt(z)),n!==a?(Jt(),r=function(){var t,u,n,r,o,s;return t=ut,(u=xt())===a&&(u=null),Jt(),".."===e.substr(ut,2)?(n="..",ut+=2):(n=a,0===at&&dt(Y)),n!==a?(Jt(),(r=xt())===a&&(r=null),nt=t,t=[null!==(o=u)?o:{type:"constant",value:0},null!==(s=r)?s:{type:"constant",value:null}]):(ut=t,t=a),t===a&&(t=ut,(u=xt())!==a&&(nt=t,u=[null,u]),t=u),t}(),r!==a?(Jt(),o=ut,44===e.charCodeAt(ut)?(s=",",ut++):(s=a,0===at&&dt(W)),s!==a?(Jt(),(i=gt())!==a?(Jt(),o=i):(ut=o,o=a)):(ut=o,o=a),o===a&&(o=null),124===e.charCodeAt(ut)?(s="|",ut++):(s=a,0===at&&dt(z)),s!==a?(nt=t,t=function(e,t,u){let n=t[0],r=t[1];return"constant"===r.type&&0===r.value&&ct("The maximum count of repetitions of the rule must be > 0",r.location),{type:"repeated",min:n,max:r,expression:e,delimiter:u,location:it()}}(u,r,o)):(ut=t,t=a)):(ut=t,t=a)):(ut=t,t=a)):(ut=t,t=a),t}(),t===a&&(t=vt())),t}function xt(){var t,u;return t=ut,u=function(){var t,u,n,r;if(t=ut,u=ut,n=[],(r=zt())!==a)for(;r!==a;)n.push(r),r=zt();else n=a;return(u=n!==a?e.substring(u,ut):n)!==a&&(nt=t,u=parseInt(u,10)),u}(),u!==a&&(nt=t,u={type:"constant",value:u,location:it()}),(t=u)===a&&(t=ut,(u=Rt())!==a&&(nt=t,u={type:"variable",value:u[0],location:it()}),(t=u)===a&&(t=ut,(u=Yt())!==a&&(nt=t,u=function(e){return{type:"function",value:e[0],codeLocation:e[1],location:it()}}(u)),t=u)),t}function vt(){var t,u,r,o,s;return t=function(){var t,u,n;return at++,t=ut,(u=It())!==a?(105===e.charCodeAt(ut)?(n="i",ut++):(n=a,0===at&&dt(_e)),n===a&&(n=null),nt=t,t={type:"literal",value:u,ignoreCase:null!==n,location:it()}):(ut=t,t=a),at--,t===a&&(u=a,0===at&&dt(me)),t}(),t===a&&(t=function(){var t,u,n,r,o,s,i,c;if(at++,t=ut,91===e.charCodeAt(ut)?(u="[",ut++):(u=a,0===at&&dt(ye)),u!==a){for(94===e.charCodeAt(ut)?(n="^",ut++):(n=a,0===at&&dt(Se)),n===a&&(n=null),r=[],(o=Mt())===a&&(o=Ut());o!==a;)r.push(o),(o=Mt())===a&&(o=Ut());93===e.charCodeAt(ut)?(o="]",ut++):(o=a,0===at&&dt(be)),o!==a?(105===e.charCodeAt(ut)?(s="i",ut++):(s=a,0===at&&dt(_e)),s===a&&(s=null),nt=t,i=n,c=s,t={type:"class",parts:r.filter((e=>""!==e)),inverted:null!==i,ignoreCase:null!==c,location:it()}):(ut=t,t=a)}else ut=t,t=a;return at--,t===a&&(u=a,0===at&&dt(ve)),t}(),t===a&&(t=function(){var t,u;return t=ut,46===e.charCodeAt(ut)?(u=".",ut++):(u=a,0===at&&dt(je)),u!==a&&(nt=t,u={type:"any",location:it()}),u}(),t===a&&(t=function(){var t,u,n,r,o,s,i;return t=ut,(u=Rt())!==a?(n=ut,at++,r=ut,o=Jt(),s=ut,(i=It())!==a?s=i=[i,Jt()]:(ut=s,s=a),s===a&&(s=null),61===e.charCodeAt(ut)?(i="=",ut++):(i=a,0===at&&dt(k)),i!==a?r=o=[o,s,i]:(ut=r,r=a),at--,r===a?n=void 0:(ut=n,n=a),n!==a?(nt=t,t={type:"rule_ref",name:u[0],location:it()}):(ut=t,t=a)):(ut=t,t=a),t}(),t===a&&(t=function(){var t,u,r,o;return t=ut,u=function(){var t;return 38===e.charCodeAt(ut)?(t="&",ut++):(t=a,0===at&&dt(U)),t===a&&(33===e.charCodeAt(ut)?(t="!",ut++):(t=a,0===at&&dt(j))),t}(),u!==a?(Jt(),(r=Yt())!==a?(nt=t,t={type:n[u],code:(o=r)[0],codeLocation:o[1],location:it()}):(ut=t,t=a)):(ut=t,t=a),t}(),t===a&&(t=ut,40===e.charCodeAt(ut)?(u="(",ut++):(u=a,0===at&&dt(V)),u!==a?(Jt(),(r=gt())!==a?(Jt(),41===e.charCodeAt(ut)?(o=")",ut++):(o=a,0===at&&dt(J)),o!==a?(nt=t,t="labeled"===(s=r).type||"sequence"===s.type?{type:"group",expression:s,location:it()}:s):(ut=t,t=a)):(ut=t,t=a)):(ut=t,t=a)))))),t}function yt(){var t;return e.length>ut?(t=e.charAt(ut),ut++):(t=a,0===at&&dt(X)),t}function St(){var t;return at++,9===e.charCodeAt(ut)?(t="\t",ut++):(t=a,0===at&&dt(Q)),t===a&&(11===e.charCodeAt(ut)?(t="\v",ut++):(t=a,0===at&&dt(K)),t===a&&(12===e.charCodeAt(ut)?(t="\f",ut++):(t=a,0===at&&dt(ee)),t===a&&(32===e.charCodeAt(ut)?(t=" ",ut++):(t=a,0===at&&dt(te)),t===a&&(160===e.charCodeAt(ut)?(t=" ",ut++):(t=a,0===at&&dt(ue)),t===a&&(65279===e.charCodeAt(ut)?(t="\ufeff",ut++):(t=a,0===at&&dt(ne)),t===a&&(t=function(){var t;return $.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=a,0===at&&dt(et)),t}())))))),at--,t===a&&0===at&&dt(Z),t}function bt(){var t;return g.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=a,0===at&&dt(re)),t}function Pt(){var t;return at++,10===e.charCodeAt(ut)?(t="\n",ut++):(t=a,0===at&&dt(se)),t===a&&("\r\n"===e.substr(ut,2)?(t="\r\n",ut+=2):(t=a,0===at&&dt(ae)),t===a&&(13===e.charCodeAt(ut)?(t="\r",ut++):(t=a,0===at&&dt(ie)),t===a&&(8232===e.charCodeAt(ut)?(t="\u2028",ut++):(t=a,0===at&&dt(ce)),t===a&&(8233===e.charCodeAt(ut)?(t="\u2029",ut++):(t=a,0===at&&dt(le)))))),at--,t===a&&0===at&&dt(oe),t}function Ot(){var t;return at++,(t=function(){var t,u,n,r,o,s;if(t=ut,e.substr(ut,2)===h?(u=h,ut+=2):(u=a,0===at&&dt(Ae)),u!==a){for(n=[],r=ut,o=ut,at++,e.substr(ut,2)===E?(s=E,ut+=2):(s=a,0===at&&dt(he)),at--,s===a?o=void 0:(ut=o,o=a),o!==a&&(s=yt())!==a?r=o=[o,s]:(ut=r,r=a);r!==a;)n.push(r),r=ut,o=ut,at++,e.substr(ut,2)===E?(s=E,ut+=2):(s=a,0===at&&dt(he)),at--,s===a?o=void 0:(ut=o,o=a),o!==a&&(s=yt())!==a?r=o=[o,s]:(ut=r,r=a);e.substr(ut,2)===E?(r=E,ut+=2):(r=a,0===at&&dt(he)),r!==a?t=u=[u,n,r]:(ut=t,t=a)}else ut=t,t=a;return t}())===a&&(t=$t()),at--,t===a&&0===at&&dt(pe),t}function wt(){var t,u,n,r,o,s;if(t=ut,e.substr(ut,2)===h?(u=h,ut+=2):(u=a,0===at&&dt(Ae)),u!==a){for(n=[],r=ut,o=ut,at++,e.substr(ut,2)===E?(s=E,ut+=2):(s=a,0===at&&dt(he)),s===a&&(s=bt()),at--,s===a?o=void 0:(ut=o,o=a),o!==a&&(s=yt())!==a?r=o=[o,s]:(ut=r,r=a);r!==a;)n.push(r),r=ut,o=ut,at++,e.substr(ut,2)===E?(s=E,ut+=2):(s=a,0===at&&dt(he)),s===a&&(s=bt()),at--,s===a?o=void 0:(ut=o,o=a),o!==a&&(s=yt())!==a?r=o=[o,s]:(ut=r,r=a);e.substr(ut,2)===E?(r=E,ut+=2):(r=a,0===at&&dt(he)),r!==a?t=u=[u,n,r]:(ut=t,t=a)}else ut=t,t=a;return t}function $t(){var t,u,n,r,o,s;if(t=ut,"//"===e.substr(ut,2)?(u="//",ut+=2):(u=a,0===at&&dt(Ee)),u!==a){for(n=[],r=ut,o=ut,at++,s=bt(),at--,s===a?o=void 0:(ut=o,o=a),o!==a&&(s=yt())!==a?r=o=[o,s]:(ut=r,r=a);r!==a;)n.push(r),r=ut,o=ut,at++,s=bt(),at--,s===a?o=void 0:(ut=o,o=a),o!==a&&(s=yt())!==a?r=o=[o,s]:(ut=r,r=a);t=u=[u,n]}else ut=t,t=a;return t}function Rt(){var e,t,u,n;if(at++,e=ut,(t=Lt())!==a){for(u=[],n=kt();n!==a;)u.push(n),n=kt();nt=e,e=[t+u.join(""),it()]}else ut=e,e=a;return at--,e===a&&(t=a,0===at&&dt(de)),e}function Lt(){var t,u,n;return(t=function(){var t;return(t=function(){var t;return y.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=a,0===at&&dt(Ve)),t}())===a&&(t=function(){var t;return D.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=a,0===at&&dt(Ge)),t}())===a&&(t=function(){var t;return v.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=a,0===at&&dt(Ye)),t}())===a&&(t=function(){var t;return B.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=a,0===at&&dt(ze)),t}())===a&&(t=function(){var t;return x.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=a,0===at&&dt(We)),t}())===a&&(t=function(){var t;return O.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=a,0===at&&dt(Qe)),t}()),t}())===a&&(95===e.charCodeAt(ut)?(t="_",ut++):(t=a,0===at&&dt(fe)),t===a&&(t=ut,92===e.charCodeAt(ut)?(u=d,ut++):(u=a,0===at&&dt(Ce)),u!==a&&(n=Gt())!==a?t=n:(ut=t,t=a))),t}function kt(){var t;return(t=Lt())===a&&(36===e.charCodeAt(ut)?(t="$",ut++):(t=a,0===at&&dt(M)),t===a&&(t=function(){var t;return(t=function(){var t;return b.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=a,0===at&&dt(Xe)),t}())===a&&(t=function(){var t;return S.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=a,0===at&&dt(Je)),t}()),t}())===a&&(t=function(){var t;return P.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=a,0===at&&dt(Ze)),t}())===a&&(t=function(){var t;return w.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=a,0===at&&dt(Ke)),t}())===a&&(8204===e.charCodeAt(ut)?(t="",ut++):(t=a,0===at&&dt(ge)),t===a&&(8205===e.charCodeAt(ut)?(t="",ut++):(t=a,0===at&&dt(Fe))))),t}function It(){var t,u,n,r;if(at++,t=ut,34===e.charCodeAt(ut)?(u=f,ut++):(u=a,0===at&&dt(Be)),u!==a){for(n=[],r=Nt();r!==a;)n.push(r),r=Nt();34===e.charCodeAt(ut)?(r=f,ut++):(r=a,0===at&&dt(Be)),r!==a?(nt=t,t=n.join("")):(ut=t,t=a)}else ut=t,t=a;if(t===a)if(t=ut,39===e.charCodeAt(ut)?(u=C,ut++):(u=a,0===at&&dt(xe)),u!==a){for(n=[],r=Tt();r!==a;)n.push(r),r=Tt();39===e.charCodeAt(ut)?(r=C,ut++):(r=a,0===at&&dt(xe)),r!==a?(nt=t,t=n.join("")):(ut=t,t=a)}else ut=t,t=a;return at--,t===a&&(u=a,0===at&&dt(De)),t}function Nt(){var t,u,n,r;return t=ut,u=ut,n=ut,at++,34===e.charCodeAt(ut)?(r=f,ut++):(r=a,0===at&&dt(Be)),r===a&&(92===e.charCodeAt(ut)?(r=d,ut++):(r=a,0===at&&dt(Ce)),r===a&&(r=bt())),at--,r===a?n=void 0:(ut=n,n=a),n!==a&&(r=yt())!==a?u=n=[n,r]:(ut=u,u=a),(t=u!==a?e.substring(t,ut):u)===a&&(t=ut,92===e.charCodeAt(ut)?(u=d,ut++):(u=a,0===at&&dt(Ce)),u!==a&&(n=Ht())!==a?t=n:(ut=t,t=a),t===a&&(t=jt())),t}function Tt(){var t,u,n,r;return t=ut,u=ut,n=ut,at++,39===e.charCodeAt(ut)?(r=C,ut++):(r=a,0===at&&dt(xe)),r===a&&(92===e.charCodeAt(ut)?(r=d,ut++):(r=a,0===at&&dt(Ce)),r===a&&(r=bt())),at--,r===a?n=void 0:(ut=n,n=a),n!==a&&(r=yt())!==a?u=n=[n,r]:(ut=u,u=a),(t=u!==a?e.substring(t,ut):u)===a&&(t=ut,92===e.charCodeAt(ut)?(u=d,ut++):(u=a,0===at&&dt(Ce)),u!==a&&(n=Ht())!==a?t=n:(ut=t,t=a),t===a&&(t=jt())),t}function Mt(){var t,u,n,r,o,s;return t=ut,(u=Ut())!==a?(45===e.charCodeAt(ut)?(n="-",ut++):(n=a,0===at&&dt(Pe)),n!==a&&(r=Ut())!==a?(nt=t,s=r,(o=u).charCodeAt(0)>s.charCodeAt(0)&&ct("Invalid character range: "+e.substring(nt,ut)+"."),t=[o,s]):(ut=t,t=a)):(ut=t,t=a),t}function Ut(){var t,u,n,r;return t=ut,u=ut,n=ut,at++,93===e.charCodeAt(ut)?(r="]",ut++):(r=a,0===at&&dt(be)),r===a&&(92===e.charCodeAt(ut)?(r=d,ut++):(r=a,0===at&&dt(Ce)),r===a&&(r=bt())),at--,r===a?n=void 0:(ut=n,n=a),n!==a&&(r=yt())!==a?u=n=[n,r]:(ut=u,u=a),(t=u!==a?e.substring(t,ut):u)===a&&(t=ut,92===e.charCodeAt(ut)?(u=d,ut++):(u=a,0===at&&dt(Ce)),u!==a&&(n=Ht())!==a?t=n:(ut=t,t=a),t===a&&(t=jt())),t}function jt(){var t,u;return t=ut,92===e.charCodeAt(ut)?(u=d,ut++):(u=a,0===at&&dt(Ce)),u!==a&&Pt()!==a?(nt=t,t=""):(ut=t,t=a),t}function Ht(){var t,u,n,r;return t=function(){var t;return(t=qt())===a&&(t=function(){var t,u,n,r;return t=ut,u=ut,n=ut,at++,r=function(){var t;return(t=qt())===a&&(t=zt())===a&&(120===e.charCodeAt(ut)?(t="x",ut++):(t=a,0===at&&dt(Ne)),t===a&&(117===e.charCodeAt(ut)?(t="u",ut++):(t=a,0===at&&dt(Te)))),t}(),r===a&&(r=bt()),at--,r===a?n=void 0:(ut=n,n=a),n!==a&&(r=yt())!==a?u=n=[n,r]:(ut=u,u=a),t=u!==a?e.substring(t,ut):u}()),t}(),t===a&&(t=ut,48===e.charCodeAt(ut)?(u="0",ut++):(u=a,0===at&&dt(Oe)),u!==a?(n=ut,at++,r=zt(),at--,r===a?n=void 0:(ut=n,n=a),n!==a?(nt=t,t="\0"):(ut=t,t=a)):(ut=t,t=a),t===a&&(t=function(){var t,u,n,r,o,s,i;return t=ut,120===e.charCodeAt(ut)?(u="x",ut++):(u=a,0===at&&dt(Ne)),u!==a?(n=ut,r=ut,(o=Wt())!==a&&(s=Wt())!==a?r=o=[o,s]:(ut=r,r=a),(n=r!==a?e.substring(n,ut):r)!==a?(nt=t,i=n,t=String.fromCharCode(parseInt(i,16))):(ut=t,t=a)):(ut=t,t=a),t}(),t===a&&(t=Gt()))),t}function qt(){var t,u;return 39===e.charCodeAt(ut)?(t=C,ut++):(t=a,0===at&&dt(xe)),t===a&&(34===e.charCodeAt(ut)?(t=f,ut++):(t=a,0===at&&dt(Be)),t===a&&(92===e.charCodeAt(ut)?(t=d,ut++):(t=a,0===at&&dt(Ce)),t===a&&(t=ut,98===e.charCodeAt(ut)?(u="b",ut++):(u=a,0===at&&dt(we)),u!==a&&(nt=t,u="\b"),(t=u)===a&&(t=ut,102===e.charCodeAt(ut)?(u="f",ut++):(u=a,0===at&&dt($e)),u!==a&&(nt=t,u="\f"),(t=u)===a&&(t=ut,110===e.charCodeAt(ut)?(u="n",ut++):(u=a,0===at&&dt(Re)),u!==a&&(nt=t,u="\n"),(t=u)===a&&(t=ut,114===e.charCodeAt(ut)?(u="r",ut++):(u=a,0===at&&dt(Le)),u!==a&&(nt=t,u="\r"),(t=u)===a&&(t=ut,116===e.charCodeAt(ut)?(u="t",ut++):(u=a,0===at&&dt(ke)),u!==a&&(nt=t,u="\t"),(t=u)===a&&(t=ut,118===e.charCodeAt(ut)?(u="v",ut++):(u=a,0===at&&dt(Ie)),u!==a&&(nt=t,u="\v"),t=u)))))))),t}function Gt(){var t,u,n,r,o,s,i,c,l;return t=ut,117===e.charCodeAt(ut)?(u="u",ut++):(u=a,0===at&&dt(Te)),u!==a?(n=ut,r=ut,(o=Wt())!==a&&(s=Wt())!==a&&(i=Wt())!==a&&(c=Wt())!==a?r=o=[o,s,i,c]:(ut=r,r=a),(n=r!==a?e.substring(n,ut):r)!==a?(nt=t,l=n,t=String.fromCharCode(parseInt(l,16))):(ut=t,t=a)):(ut=t,t=a),t}function zt(){var t;return F.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=a,0===at&&dt(Me)),t}function Wt(){var t;return m.test(e.charAt(ut))?(t=e.charAt(ut),ut++):(t=a,0===at&&dt(Ue)),t}function Yt(){var t,u,n,r;return at++,t=ut,123===e.charCodeAt(ut)?(u=p,ut++):(u=a,0===at&&dt(R)),u!==a?(n=function(){var e,t;return e=ut,t=Vt(),nt=e,t=[t,it()]}(),125===e.charCodeAt(ut)?(r=A,ut++):(r=a,0===at&&dt(L)),r!==a?t=n:(ut=t,t=a)):(ut=t,t=a),at--,t===a&&(u=a,0===at&&dt(He)),t}function Vt(){var t,u,n,r,o,s;if(t=ut,u=[],n=[],r=ut,o=ut,at++,_.test(e.charAt(ut))?(s=e.charAt(ut),ut++):(s=a,0===at&&dt(qe)),at--,s===a?o=void 0:(ut=o,o=a),o!==a&&(s=yt())!==a?r=o=[o,s]:(ut=r,r=a),r!==a)for(;r!==a;)n.push(r),r=ut,o=ut,at++,_.test(e.charAt(ut))?(s=e.charAt(ut),ut++):(s=a,0===at&&dt(qe)),at--,s===a?o=void 0:(ut=o,o=a),o!==a&&(s=yt())!==a?r=o=[o,s]:(ut=r,r=a);else n=a;for(n===a&&(n=ut,123===e.charCodeAt(ut)?(r=p,ut++):(r=a,0===at&&dt(R)),r!==a?(o=Vt(),125===e.charCodeAt(ut)?(s=A,ut++):(s=a,0===at&&dt(L)),s!==a?n=r=[r,o,s]:(ut=n,n=a)):(ut=n,n=a));n!==a;){if(u.push(n),n=[],r=ut,o=ut,at++,_.test(e.charAt(ut))?(s=e.charAt(ut),ut++):(s=a,0===at&&dt(qe)),at--,s===a?o=void 0:(ut=o,o=a),o!==a&&(s=yt())!==a?r=o=[o,s]:(ut=r,r=a),r!==a)for(;r!==a;)n.push(r),r=ut,o=ut,at++,_.test(e.charAt(ut))?(s=e.charAt(ut),ut++):(s=a,0===at&&dt(qe)),at--,s===a?o=void 0:(ut=o,o=a),o!==a&&(s=yt())!==a?r=o=[o,s]:(ut=r,r=a);else n=a;n===a&&(n=ut,123===e.charCodeAt(ut)?(r=p,ut++):(r=a,0===at&&dt(R)),r!==a?(o=Vt(),125===e.charCodeAt(ut)?(s=A,ut++):(s=a,0===at&&dt(L)),s!==a?n=r=[r,o,s]:(ut=n,n=a)):(ut=n,n=a))}return e.substring(t,ut)}function Jt(){var e,t;for(e=[],(t=St())===a&&(t=Pt())===a&&(t=Ot());t!==a;)e.push(t),(t=St())===a&&(t=Pt())===a&&(t=Ot());return e}function Xt(){var t,u,n,r;if(t=[],u=ut,n=Jt(),59===e.charCodeAt(ut)?(r=";",ut++):(r=a,0===at&&dt(tt)),r!==a?u=n=[n,r]:(ut=u,u=a),u!==a)for(;u!==a;)t.push(u),u=ut,n=Jt(),59===e.charCodeAt(ut)?(r=";",ut++):(r=a,0===at&&dt(tt)),r!==a?u=n=[n,r]:(ut=u,u=a);else t=a;return t===a&&(t=ut,u=function(){var e,t;for(e=[],(t=St())===a&&(t=wt());t!==a;)e.push(t),(t=St())===a&&(t=wt());return e}(),(n=$t())===a&&(n=null),(r=Pt())!==a?t=u=[u,n,r]:(ut=t,t=a),t===a&&(t=ut,u=Jt(),n=function(){var t,u;return t=ut,at++,e.length>ut?(u=e.charAt(ut),ut++):(u=a,0===at&&dt(X)),at--,u===a?t=void 0:(ut=t,t=a),t}(),n!==a?t=u=[u,n]:(ut=t,t=a))),t}const Zt=o.reservedWords||[];if((s=l())!==a&&ut===e.length)return s;throw s!==a&&ut{"use strict";const n=u(48256),r=u(49002),o=u(73629),s=u(68189),a={VERSION:u(62415),RESERVED_WORDS:["break","case","catch","class","const","continue","debugger","default","delete","do","else","export","extends","finally","for","function","if","import","in","instanceof","new","return","super","switch","this","throw","try","typeof","var","void","while","with","null","true","false","enum","implements","interface","let","package","private","protected","public","static","yield","await","arguments","eval"],GrammarError:n,GrammarLocation:r,parser:s,compiler:o,generate(e,t){const u="plugins"in(t=void 0!==t?t:{})?t.plugins:[],n={parser:a.parser,passes:function(e){const t={};return Object.keys(e).forEach((u=>{t[u]=e[u].slice()})),t}(a.compiler.passes),reservedWords:a.RESERVED_WORDS.slice()};return u.forEach((e=>{e.use(n,t)})),a.compiler.compile(n.parser.parse(e,{grammarSource:t.grammarSource,reservedWords:n.reservedWords}),n.passes,t)}};e.exports=a},62415:e=>{"use strict";e.exports="3.0.2"},12443:(e,t)=>{class u{constructor(){this._array=[],this._set=new Map}static fromArray(e,t){const n=new u;for(let u=0,r=e.length;u=0)return t;throw new Error('"'+e+'" is not in the set.')}at(e){if(e>=0&&e{const n=u(39286);t.encode=function(e){let t,u="",r=function(e){return e<0?1+(-e<<1):0+(e<<1)}(e);do{t=31&r,r>>>=5,r>0&&(t|=32),u+=n.encode(t)}while(r>0);return u}},39286:(e,t)=>{const u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");t.encode=function(e){if(0<=e&&e{const n=u(8023);t.H=class{constructor(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}unsortedForEach(e,t){this._array.forEach(e,t)}add(e){!function(e,t){const u=e.generatedLine,r=t.generatedLine,o=e.generatedColumn,s=t.generatedColumn;return r>u||r==u&&s>=o||n.compareByGeneratedPositionsInflated(e,t)<=0}(this._last,e)?(this._sorted=!1,this._array.push(e)):(this._last=e,this._array.push(e))}toArray(){return this._sorted||(this._array.sort(n.compareByGeneratedPositionsInflated),this._sorted=!0),this._array}}},41393:(e,t,u)=>{const n=u(61944),r=u(8023),o=u(12443).I,s=u(85460).H;class a{constructor(e){e||(e={}),this._file=r.getArg(e,"file",null),this._sourceRoot=r.getArg(e,"sourceRoot",null),this._skipValidation=r.getArg(e,"skipValidation",!1),this._sources=new o,this._names=new o,this._mappings=new s,this._sourcesContents=null}static fromSourceMap(e){const t=e.sourceRoot,u=new a({file:e.file,sourceRoot:t});return e.eachMapping((function(e){const n={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(n.source=e.source,null!=t&&(n.source=r.relative(t,n.source)),n.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(n.name=e.name)),u.addMapping(n)})),e.sources.forEach((function(n){let o=n;null!=t&&(o=r.relative(t,n)),u._sources.has(o)||u._sources.add(o);const s=e.sourceContentFor(n);null!=s&&u.setSourceContent(n,s)})),u}addMapping(e){const t=r.getArg(e,"generated"),u=r.getArg(e,"original",null);let n=r.getArg(e,"source",null),o=r.getArg(e,"name",null);this._skipValidation||this._validateMapping(t,u,n,o),null!=n&&(n=String(n),this._sources.has(n)||this._sources.add(n)),null!=o&&(o=String(o),this._names.has(o)||this._names.add(o)),this._mappings.add({generatedLine:t.line,generatedColumn:t.column,originalLine:u&&u.line,originalColumn:u&&u.column,source:n,name:o})}setSourceContent(e,t){let u=e;null!=this._sourceRoot&&(u=r.relative(this._sourceRoot,u)),null!=t?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[r.toSetString(u)]=t):this._sourcesContents&&(delete this._sourcesContents[r.toSetString(u)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))}applySourceMap(e,t,u){let n=t;if(null==t){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');n=e.file}const s=this._sourceRoot;null!=s&&(n=r.relative(s,n));const a=this._mappings.toArray().length>0?new o:this._sources,i=new o;this._mappings.unsortedForEach((function(t){if(t.source===n&&null!=t.originalLine){const n=e.originalPositionFor({line:t.originalLine,column:t.originalColumn});null!=n.source&&(t.source=n.source,null!=u&&(t.source=r.join(u,t.source)),null!=s&&(t.source=r.relative(s,t.source)),t.originalLine=n.line,t.originalColumn=n.column,null!=n.name&&(t.name=n.name))}const o=t.source;null==o||a.has(o)||a.add(o);const c=t.name;null==c||i.has(c)||i.add(c)}),this),this._sources=a,this._names=i,e.sources.forEach((function(t){const n=e.sourceContentFor(t);null!=n&&(null!=u&&(t=r.join(u,t)),null!=s&&(t=r.relative(s,t)),this.setSourceContent(t,n))}),this)}_validateMapping(e,t,u,n){if(t&&"number"!=typeof t.line&&"number"!=typeof t.column)throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0&&!t&&!u&&!n);else if(!(e&&"line"in e&&"column"in e&&t&&"line"in t&&"column"in t&&e.line>0&&e.column>=0&&t.line>0&&t.column>=0&&u))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:u,original:t,name:n}))}_serializeMappings(){let e,t,u,o,s=0,a=1,i=0,c=0,l=0,p=0,A="";const h=this._mappings.toArray();for(let E=0,d=h.length;E0){if(!r.compareByGeneratedPositionsInflated(t,h[E-1]))continue;e+=","}e+=n.encode(t.generatedColumn-s),s=t.generatedColumn,null!=t.source&&(o=this._sources.indexOf(t.source),e+=n.encode(o-p),p=o,e+=n.encode(t.originalLine-1-c),c=t.originalLine-1,e+=n.encode(t.originalColumn-i),i=t.originalColumn,null!=t.name&&(u=this._names.indexOf(t.name),e+=n.encode(u-l),l=u)),A+=e}return A}_generateSourcesContent(e,t){return e.map((function(e){if(!this._sourcesContents)return null;null!=t&&(e=r.relative(t,e));const u=r.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,u)?this._sourcesContents[u]:null}),this)}toJSON(){const e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e}toString(){return JSON.stringify(this.toJSON())}}a.prototype._version=3,t.SourceMapGenerator=a},5440:(e,t,u)=>{const n=u(41393).SourceMapGenerator,r=u(8023),o=/(\r?\n)/,s="$$$isSourceNode$$$";class a{constructor(e,t,u,n,r){this.children=[],this.sourceContents={},this.line=null==e?null:e,this.column=null==t?null:t,this.source=null==u?null:u,this.name=null==r?null:r,this[s]=!0,null!=n&&this.add(n)}static fromStringWithSourceMap(e,t,u){const n=new a,s=e.split(o);let i=0;const c=function(){return e()+(e()||"");function e(){return i=0;t--)this.prepend(e[t]);else{if(!e[s]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this}walk(e){let t;for(let u=0,n=this.children.length;u0){for(t=[],u=0;u{t.getArg=function(e,t,u){if(t in e)return e[t];if(3===arguments.length)return u;throw new Error('"'+t+'" is a required argument.')};const u=!("__proto__"in Object.create(null));function n(e){return e}function r(e){if(!e)return!1;const t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(let u=t-10;u>=0;u--)if(36!==e.charCodeAt(u))return!1;return!0}function o(e,t){return e===t?0:null===e?1:null===t?-1:e>t?1:-1}t.toSetString=u?n:function(e){return r(e)?"$"+e:e},t.fromSetString=u?n:function(e){return r(e)?e.slice(1):e},t.compareByGeneratedPositionsInflated=function(e,t){let u=e.generatedLine-t.generatedLine;return 0!==u?u:(u=e.generatedColumn-t.generatedColumn,0!==u?u:(u=o(e.source,t.source),0!==u?u:(u=e.originalLine-t.originalLine,0!==u?u:(u=e.originalColumn-t.originalColumn,0!==u?u:o(e.name,t.name)))))};const s="http:",a="http://host";function i(e){return t=>{const u=A(t),n=l(t),r=new URL(t,n);e(r);const o=r.toString();return"absolute"===u?o:"scheme-relative"===u?o.slice(s.length):"path-absolute"===u?o.slice(a.length):h(n,o)}}function c(e,t){return new URL(e,t).toString()}function l(e){const t=e.split("..").length-1,u=function(e,t){let u=0;for(;;){const e="p"+u++;if(-1===t.indexOf(e))return e}}(0,e);let n="http://host/";for(let e=0;e0&&!n[n.length-1]&&n.pop();u.length>0&&n.length>0&&u[0]===n[0];)u.shift(),n.shift();return n.map((()=>"..")).concat(u).join("/")+t.search+t.hash}const E=i((e=>{e.pathname=e.pathname.replace(/\/?$/,"/")})),d=i((e=>{}));t.normalize=d,t.join=function(e,t){const u=A(t),n=A(e);if(e=E(e),"absolute"===u)return c(t,void 0);if("absolute"===n)return c(t,e);if("scheme-relative"===u)return d(t);if("scheme-relative"===n)return c(t,c(e,a)).slice(s.length);if("path-absolute"===u)return d(t);if("path-absolute"===n)return c(t,c(e,a)).slice(a.length);const r=l(t+e);return h(r,c(t,c(e,r)))},t.relative=function(e,t){const u=function(e,t){if(A(e)!==A(t))return null;const u=l(e+t),n=new URL(e,u),r=new URL(t,u);try{new URL("",r.toString())}catch(e){return null}return r.protocol!==n.protocol||r.user!==n.user||r.password!==n.password||r.hostname!==n.hostname||r.port!==n.port?null:h(n,r)}(e,t);return"string"==typeof u?u:d(t)}},10782:(e,t,u)=>{t.SourceMapGenerator=u(41393).SourceMapGenerator,t.SourceNode=u(5440).SourceNode}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var u=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](u,u.exports,__webpack_require__),u.exports}__webpack_require__.d=(e,t)=>{for(var u in t)__webpack_require__.o(t,u)&&!__webpack_require__.o(e,u)&&Object.defineProperty(e,u,{enumerable:!0,get:t[u]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};(()=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{registerWooBlockType:()=>i,useWooBlockProps:()=>t});const e=window.wp.blockEditor,t=function(t){let u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n={"data-template-block-id":t._templateBlockId,"data-template-block-order":t._templateBlockOrder,...u};return(0,e.useBlockProps)(n)},u=window.wp.blocks,n=window.wp.element,r=__webpack_require__(80154).generate('\n{{\n\tfunction evaluateUnaryExpression( operator, operand ) {\n\t\tswitch ( operator ) {\n\t\t\tcase \'!\':\n\t\t\t\treturn !operand;\n\t\t\t\tbreak;\n\t\t\tcase \'-\':\n\t\t\t\treturn -operand;\n\t\t\t\tbreak;\n\t\t\tcase \'+\':\n\t\t\t\treturn +operand;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn undefined;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tfunction evaluateBinaryExpression( head, tail ) {\n\t\treturn tail.reduce( ( leftOperand, tailElement ) => {\n\t\t\tconst operator = tailElement[ 1 ];\n\t\t\tconst rightOperand = tailElement[ 3 ];\n\n\t\t\tswitch ( operator ) {\n\t\t\t\tcase \'&&\':\n\t\t\t\t\treturn leftOperand && rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'||\':\n\t\t\t\t\treturn leftOperand || rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'===\':\n\t\t\t\t\treturn leftOperand === rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'!==\':\n\t\t\t\t\treturn leftOperand !== rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'==\':\n\t\t\t\t\treturn leftOperand == rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'!=\':\n\t\t\t\t\treturn leftOperand != rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'<=\':\n\t\t\t\t\treturn leftOperand <= rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'<\':\n\t\t\t\t\treturn leftOperand < rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'>=\':\n\t\t\t\t\treturn leftOperand >= rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'>\':\n\t\t\t\t\treturn leftOperand > rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'+\':\n\t\t\t\t\treturn leftOperand + rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'-\':\n\t\t\t\t\treturn leftOperand - rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'*\':\n\t\t\t\t\treturn leftOperand * rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'/\':\n\t\t\t\t\treturn leftOperand / rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \'%\':\n\t\t\t\t\treturn leftOperand % rightOperand;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn undefined;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}, head );\n\t}\n}}\n\nStart\n\t= Expression\n\nSourceCharacter\n\t= .\n\nWhiteSpace\n\t= " "\n\t/ "\\t"\n\nLineTerminator\n\t= "\\n"\n\t/ "\\r"\n\t/ "\\u2028"\n\t/ "\\u2029"\n\nLineTerminatorSequence\n\t= "\\n"\n\t/ "\\r\\n"\n\t/ "\\r"\n\t/ "\\u2028"\n\t/ "\\u2029"\n\nComment "comment"\n\t= MultiLineComment\n\nMultiLineComment\n\t= "/*" (!"*/" SourceCharacter)* "*/"\n\n__ "skipped"\n\t= (WhiteSpace / LineTerminatorSequence / Comment)*\n\nIdentifierPath\n\t= variable:Identifier accessor:(__ "." __ Identifier)* {\n\t\tconst path = variable.split( \'.\' );\n\t\tlet result = path.reduce( ( nextObject, propertyName ) => nextObject[ propertyName ], options.context );\n\n\t\tfor ( let i = 0; i < accessor.length; i++ ) {\n\t\t\tresult = result[ accessor[ i ][ 3 ] ];\n\t\t}\n\n\t\treturn result;\n\t}\n\nIdentifier\n\t= !ReservedWord name:IdentifierName {\n\t\treturn name;\n\t}\n\nIdentifierName\n\t= first:IdentifierStart rest:IdentifierPart* {\n\t\treturn text();\n\t}\n\nIdentifierStart\n\t= [a-zA-Z]\n\t/ "_"\n\t/ "$"\n\nIdentifierPart\n\t= IdentifierStart\n\nReservedWord\n\t= NullLiteral\n\t/ BooleanLiteral\n\n// Literals\n\nLiteral\n\t= NullLiteral\n\t/ BooleanLiteral\n\t/ NumericLiteral\n\t/ StringLiteral\n\nNullLiteral\n\t= NullToken { return null; }\n\nBooleanLiteral\n\t= "true" { return true; }\n\t/ "false" { return false; }\n\nNumericLiteral\n\t= literal:HexIntegerLiteral !(IdentifierStart / DecimalDigit) {\n\t\treturn literal;\n\t}\n\t/ literal:DecimalLiteral !(IdentifierStart / DecimalDigit) {\n\t\treturn literal;\n\t}\n\nHexIntegerLiteral\n\t= "0x"i digits:$HexDigit+ {\n\t\treturn parseInt( digits, 16 );\n\t}\n\nHexDigit\n\t= [0-9a-f]i\n\nDecimalLiteral\n\t= DecimalIntegerLiteral "." DecimalDigit* ExponentPart? {\n\t\treturn parseFloat( text() );\n\t}\n\t/ "." DecimalDigit+ ExponentPart? {\n\t\treturn parseFloat( text() );\n\t}\n\t/ DecimalIntegerLiteral ExponentPart? {\n\t\treturn parseFloat( text() );\n\t}\n\nDecimalIntegerLiteral\n\t= "0"\n\t/ NonZeroDigit DecimalDigit*\n\nDecimalDigit\n\t= [0-9]\n\nNonZeroDigit\n\t= [1-9]\n\nExponentPart\n\t= ExponentIndicator SignedInteger\n\nExponentIndicator\n\t= "e"i\n\nSignedInteger\n\t= [+-]? DecimalDigit+\n\nStringLiteral\n\t= \'"\' chars:DoubleQuotedStringCharacter* \'"\' {\n\t\treturn chars.join( \'\' );\n\t}\n\t/ "\'" chars:SingleQuotedStringCharacter* "\'" {\n\t\treturn chars.join( \'\' );\n\t}\n\nDoubleQuotedStringCharacter\n\t= !(\'"\' / "\\\\" / LineTerminator) SourceCharacter {\n\t\treturn text();\n\t}\n\t/ "\\\\" escapeSequence:EscapeSequence {\n\t\treturn escapeSequence;\n\t}\n\t/ LineContinuation\n\nSingleQuotedStringCharacter\n\t= !("\'" / "\\\\" / LineTerminator) SourceCharacter {\n\t\treturn text();\n\t}\n\t/ "\\\\" escapeSequence:EscapeSequence {\n\t\treturn escapeSequence;\n\t}\n\t/ LineContinuation\n\nLineContinuation\n\t= "\\\\" LineTerminatorSequence {\n\t\treturn \'\';\n\t}\n\nEscapeSequence\n\t= CharacterEscapeSequence\n\t/ "0" !DecimalDigit {\n\t\treturn "\\0";\n\t}\n\t/ HexEscapeSequence\n\t/ UnicodeEscapeSequence\n\nCharacterEscapeSequence\n\t= SingleEscapeCharacter\n\t/ NonEscapeCharacter\n\nSingleEscapeCharacter\n\t= "\'"\n\t/ \'"\'\n\t/ "\\\\"\n\t/ "b" {\n\t\treturn "\\b";\n\t}\n\t/ "f" {\n\t\treturn "\\f";\n\t}\n\t/ "n" {\n\t\treturn "\\n";\n\t}\n\t/ "r" {\n\t\treturn "\\r";\n\t}\n\t/ "t" {\n\t\treturn "\\t";\n\t}\n\t/ "v" {\n\t\treturn "\\v";\n\t}\n\nNonEscapeCharacter\n\t= (!EscapeCharacter / LineTerminator) SourceCharacter {\n\t\treturn text();\n\t}\n\nEscapeCharacter\n\t= SingleEscapeCharacter\n\t/ DecimalDigit\n\t/ "x"\n\t/ "u"\n\nHexEscapeSequence\n\t= "x" digits:$(HexDigit HexDigit) {\n\t\treturn String.fromCharCode( parseInt( digits, 16 ) );\n\t}\n\nUnicodeEscapeSequence\n\t= "u" digits:$(HexDigit HexDigit HexDigit HexDigit) {\n\t\treturn String.fromCharCode( parseInt( digits, 16 ) );\n\t}\n\n// Tokens\n\nNullToken\n\t= "null" !IdentifierPart\n\nTrueToken\n\t= "true" !IdentifierPart\n\nFalseToken\n\t= "false" !IdentifierPart\n\n// Expressions\n\nPrimaryExpression\n\t= IdentifierPath\n\t/ Literal\n\t/ "(" __ expression:Expression __ ")" {\n\t\treturn expression;\n\t}\n\nUnaryExpression\n\t= PrimaryExpression\n\t/ operator:UnaryOperator __ operand:UnaryExpression {\n\t\treturn evaluateUnaryExpression( operator, operand );\n\t}\n\nUnaryOperator\n\t= "!"\n\t/ "-"\n\t/ "+"\n\nMultiplicativeExpression\n\t= head:UnaryExpression tail:(__ MultiplicativeOperator __ UnaryExpression)* {\n\t\treturn evaluateBinaryExpression( head, tail );\n\t}\n\nMultiplicativeOperator\n\t= "*"\n\t/ "/"\n\t/ "%"\n\nAdditiveExpression\n\t= head:MultiplicativeExpression tail:(__ AdditiveOperator __ MultiplicativeExpression)* {\n\t\treturn evaluateBinaryExpression( head, tail );\n\t}\n\nAdditiveOperator\n\t= "+"\n\t/ "-"\n\nRelationalExpression\n\t= head:AdditiveExpression tail:(__ RelationalOperator __ AdditiveExpression)* {\n\t\treturn evaluateBinaryExpression( head, tail );\n\t}\n\nRelationalOperator\n\t= "<="\n\t/ "<"\n\t/ ">="\n\t/ ">"\n\nEqualityExpression\n\t= head:RelationalExpression tail:(__ EqualityOperator __ RelationalExpression)* {\n\t\treturn evaluateBinaryExpression( head, tail );\n\t}\n\nEqualityOperator\n\t= "==="\n\t/ "!=="\n\t/ "=="\n\t/ "!="\n\nLogicalAndExpression\n\t= head:EqualityExpression tail:(__ LogicalAndOperator __ EqualityExpression)* {\n\t\treturn evaluateBinaryExpression( head, tail );\n\t}\n\nLogicalAndOperator\n\t= "&&"\n\nLogicalOrExpression\n\t= head:LogicalAndExpression tail:(__ LogicalOrOperator __ LogicalAndExpression)* {\n\t\treturn evaluateBinaryExpression( head, tail );\n\t}\n\nLogicalOrOperator\n\t= "||"\n\nConditionalExpression\n\t= condition:LogicalOrExpression __ ConditionalTrueOperator __ expressionIfTrue:ConditionalExpression __ ConditionalFalseOperator __ expressionIfFalse:ConditionalExpression {\n\t\treturn condition ? expressionIfTrue : expressionIfFalse;\n\t}\n\t/ LogicalOrExpression\n\nConditionalTrueOperator\n\t= "?"\n\nConditionalFalseOperator\n\t= ":"\n\nExpression\n\t= __ expression:ConditionalExpression __ {\n\t\treturn expression;\n\t}\n'),o=window.wp.data;function s(e){return{getEvaluationContext:()=>e}}function a(e,t){return u=>{const{context:s}=u,{_templateBlockHideConditions:a}=u.attributes,{getEvaluationContext:i}=t(s),c=(0,o.useSelect)((e=>{if(!a||!Array.isArray(a))return!1;const t=i(e);return a.some((e=>function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return r.parse(e,{context:t})}(e.expression,t)))}),[i,a]);return!e||c?null:(0,n.createElement)(e,u)}}function i(e,t){if(!e)return;const{metadata:n,settings:r,name:o}=e,{edit:i}=r;if(!i)return;const c={...n,attributes:(l=n.attributes,{...l,_templateBlockId:{type:"string",__experimentalRole:"content"},_templateBlockOrder:{type:"integer",__experimentalRole:"content"},_templateBlockHideConditions:{type:"array",__experimentalRole:"content"}})};var l;return(0,u.registerBlockType)({name:o,...c},{...r,edit:a(i,null!=t?t:s)})}})(),(window.wc=window.wc||{}).blockTemplates=__webpack_exports__})();
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/3307.style.css b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/3307.style.css
index 6e7dd2d5..31156b7f 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/3307.style.css
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/3307.style.css
@@ -1 +1 @@
-.woocommerce-product-form-more-menu{margin-right:24px}.woocommerce-product-settings__panel{position:absolute;top:100%;right:0;height:calc(100vh - 92px);width:280px}.woocommerce-product-settings__panel .components-panel__body>.components-base-control{margin-top:22px}.woocommerce-product-settings__panel .components-panel__body .components-panel__body-title+.components-base-control{margin-top:0}.woocommerce-product-settings__panel .components-panel__body.is-opened>.components-panel__body-title{margin-bottom:10px}.woocommerce-product-settings__panel .components-panel__header .components-button.has-icon{margin:0 0 0 auto;padding:0;min-width:24px;height:24px}.woocommerce-product-settings__toggle{margin-left:-16px}@media(max-width:782px){.woocommerce-product-settings__panel,.woocommerce-product-settings__toggle{display:none}}.woocommerce-product-breadcrumbs{display:flex;align-items:center}.woocommerce-product-breadcrumbs__item{font-weight:400;color:#757575}.woocommerce-product-breadcrumbs__item a{color:#757575;text-decoration:none}.woocommerce-product-breadcrumbs__item a:hover{text-decoration:underline}.woocommerce-product-breadcrumbs__separator{display:inline-flex}.woocommerce-product-breadcrumbs__separator path{fill:#757575}.woocommerce-product-status{margin-left:8px;padding-top:1px;padding-bottom:1px;color:#757575;border-color:#757575}.woocommerce-product-status.is-instock{color:#00a32a;border-color:#00a32a}.woocommerce-product-status.is-outofstock{color:#cc1818;border-color:#cc1818}.woocommerce-product-title{display:flex;align-items:center}@media(max-width:782px){.woocommerce-product-title{flex-direction:column;align-items:baseline}.woocommerce-product-title .woocommerce-product-breadcrumbs{font-size:13px}}.product-form-layout{max-width:1032px;margin:0 auto}.product-form-layout .components-radio-control .components-base-control__label,.product-form-layout h4{font-size:14px;font-weight:600;margin-bottom:18px;margin-top:26px;text-transform:none}.product-form-layout .components-card__body h4:first-child,.product-form-layout .components-radio-control:first-child .components-base-control__label{margin-top:0}.product-form-layout__category:not(:first-child){margin-top:48px}.product-form-layout .components-tab-panel__tabs{position:fixed;top:92px;left:160px;width:calc(100% - 160px);background:#fff;z-index:1000;border-bottom:1px solid #ccc;border-top:1px solid #ccc;padding:0 var(--large-gap) 0 var(--large-gap)}@media(max-width:782px){.product-form-layout .components-tab-panel__tabs{top:106px;width:100%;left:0}}@media(min-width:783px)and (max-width:960px){.product-form-layout .components-tab-panel__tabs{width:calc(100% - 36px);left:36px}}.product-form-layout .components-tab-panel__tabs-item{min-height:56px;padding-left:0;padding-right:0;margin-right:24px;font-weight:400}.product-form-layout .components-tab-panel__tabs-item:last-child{margin-right:0}.product-form-layout .components-tab-panel__tabs-item.is-active{font-weight:600;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) transparent,inset 0 -3px 0 0 var(--wp-admin-theme-color)}.product-form-layout .components-tab-panel__tabs-item:disabled,.product-form-layout .components-tab-panel__tabs-item[aria-disabled=true]{opacity:1}.product-form-layout .components-tab-panel__tabs-item:disabled .woocommerce-product-form-tab__item-inner-text,.product-form-layout .components-tab-panel__tabs-item[aria-disabled=true] .woocommerce-product-form-tab__item-inner-text{opacity:.3}.product-form-layout .components-tab-panel__tabs-item .woocommerce-product-form-tab__item-inner{min-height:56px;display:flex;align-items:center}.woocommerce-admin-product-layout .woocommerce-layout__primary{padding-top:56px}.woocommerce-admin-product-layout .woocommerce-layout__header.is-scrolled{box-shadow:none}.woocommerce-admin-product-layout .woocommerce-layout__header.is-scrolled~.woocommerce-layout__primary .product-form-layout .components-tab-panel__tabs{box-shadow:0 8px 8px 0 rgba(85,93,102,.3)}.woocommerce-product-tour-modal{max-width:400px;position:fixed;left:184px;bottom:24px;z-index:31}@media(max-width:960px){.woocommerce-product-tour-modal{left:60px}}@media(max-width:782px){.woocommerce-product-tour-modal{display:none}}.woocommerce-product-tour-modal .components-modal__content{display:flex;flex-direction:column;margin:0;padding:0}.woocommerce-product-tour-modal .components-modal__header{position:static;padding-top:16px;padding-left:16px;padding-right:16px;height:auto}.woocommerce-product-tour-modal .components-modal__header .components-button{position:absolute;top:16px;right:16px;left:auto}.woocommerce-product-tour-modal .components-modal__header .components-modal__header-heading{font-size:16px;line-height:24px}.woocommerce-product-tour-modal .woocommerce-product-tour-modal__header-img{background:#c5d9ed;order:-1;padding:28px 28px 0}.woocommerce-product-tour-modal .woocommerce-product-tour-modal__header-img img{max-width:286px;display:block;margin:0 auto}.woocommerce-product-tour-modal .woocommerce-product-tour-modal__content{padding:8px 16px 16px}.woocommerce-product-tour-modal .woocommerce-product-tour-modal__content>p:first-child{margin-top:0}.woocommerce-product-tour-modal .woocommerce-product-tour-modal__actions{text-align:right;margin-top:28px}.woocommerce-product-tour-modal .woocommerce-product-tour-modal__actions button{margin-left:8px}.woocommerce-product-tour-modal__overlay{position:static}.woocommerce-add-product .woocommerce-product-form-actions,.woocommerce-edit-product .woocommerce-product-form-actions{margin-top:48px}.woocommerce-add-product .components-checkbox-control>*,.woocommerce-add-product .components-toggle-control>*,.woocommerce-edit-product .components-checkbox-control>*,.woocommerce-edit-product .components-toggle-control>*{margin-bottom:0}.woocommerce-add-product .components-input-control__prefix,.woocommerce-edit-product .components-input-control__prefix{margin-left:8px}.woocommerce-add-product .components-input-control__suffix,.woocommerce-edit-product .components-input-control__suffix{margin-right:8px}.woocommerce-add-product .components-currency-control .components-input-control__prefix,.woocommerce-edit-product .components-currency-control .components-input-control__prefix{color:#757575;word-break:normal}.woocommerce-add-product .components-currency-control .components-input-control__input,.woocommerce-edit-product .components-currency-control .components-input-control__input{text-align:right}.woocommerce-add-product .components-checkbox-control__label,.woocommerce-edit-product .components-checkbox-control__label{display:flex;align-items:center}.woocommerce-add-product .components-checkbox-control__input-container,.woocommerce-edit-product .components-checkbox-control__input-container{align-self:center}.woocommerce-add-product .components-checkbox-control .components-base-control__field,.woocommerce-edit-product .components-checkbox-control .components-base-control__field{display:flex}.woocommerce-add-product .components-toggle-control .components-base-control__field .components-toggle-control__label,.woocommerce-edit-product .components-toggle-control .components-base-control__field .components-toggle-control__label{display:flex;align-items:center}.woocommerce-add-product .woocommerce-tooltip,.woocommerce-edit-product .woocommerce-tooltip{margin-left:8px}.woocommerce-add-product .woocommerce-tooltip__button,.woocommerce-edit-product .woocommerce-tooltip__button{padding:0}.woocommerce-add-product .woocommerce-product-form__custom-label-input,.woocommerce-edit-product .woocommerce-product-form__custom-label-input{display:flex;flex-direction:column}.woocommerce-add-product .woocommerce-product-form__custom-label-input label,.woocommerce-edit-product .woocommerce-product-form__custom-label-input label{display:block;margin-bottom:8px}.woocommerce-add-product .woocommerce-product-form__optional-input,.woocommerce-edit-product .woocommerce-product-form__optional-input{color:#757575}.woocommerce-add-product .woocommerce-product-form__secondary-text,.woocommerce-edit-product .woocommerce-product-form__secondary-text{font-size:12px;color:#757575;margin-top:8px}.woocommerce-add-product .has-error .components-base-control__help,.woocommerce-edit-product .has-error .components-base-control__help{color:#d63638;margin-bottom:0}.woocommerce-add-product .woocommerce-product-form__tooltip-disabled-overlay,.woocommerce-edit-product .woocommerce-product-form__tooltip-disabled-overlay{position:relative;display:inline-block}.woocommerce-add-product .woocommerce-product-form__tooltip-disabled-overlay:after,.woocommerce-edit-product .woocommerce-product-form__tooltip-disabled-overlay:after{content:"";display:inline-block;position:absolute;width:100%;height:100%;background:transparent;left:0;top:0;cursor:default}.woocommerce-add-product .woocommerce-product-form__tooltip-disabled-overlay .components-base-control,.woocommerce-edit-product .woocommerce-product-form__tooltip-disabled-overlay .components-base-control{margin-bottom:0}.woocommerce-add-product .half-width-field,.woocommerce-edit-product .half-width-field{width:50%}@media(max-width:960px){.woocommerce-add-product .half-width-field,.woocommerce-edit-product .half-width-field{width:100%}}.woocommerce-add-product .components-base-control__label .woocommerce-product-form__secondary-text,.woocommerce-edit-product .components-base-control__label .woocommerce-product-form__secondary-text{display:block;font-weight:400}.woocommerce-edit-product{position:relative}.woocommerce-edit-product__error{background:#fff;text-align:center;border:1px solid #ccc;border-radius:2px;padding:1em 2em}.woocommerce-edit-product__spinner{display:flex;align-items:center;justify-content:center;position:absolute;width:100%;height:100%}.posts-navigation{display:flex;align-items:center;background:#fff;border:1px solid #ccc;border-radius:2px;width:fit-content;height:48px}.posts-navigation__action,.posts-navigation__next,.posts-navigation__prev{display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:12px;text-decoration:none;height:100%;color:#1e1e1e}.posts-navigation__action:focus,.posts-navigation__next:focus,.posts-navigation__prev:focus{z-index:1}.posts-navigation__action:disabled,.posts-navigation__action[aria-disabled=true],.posts-navigation__next:disabled,.posts-navigation__next[aria-disabled=true],.posts-navigation__prev:disabled,.posts-navigation__prev[aria-disabled=true]{color:#ccc}.posts-navigation__action{border-right:1px solid #ccc;border-left:1px solid #ccc}.posts-navigation .screen-reader-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}.product-variation-form__navigation{display:flex;align-items:flex-end;justify-content:center;width:100%;position:fixed;bottom:16px;left:0;right:0;padding-left:160px}@media(min-width:783px)and (max-width:960px){.product-variation-form__navigation{padding-left:18px}}@media(max-width:782px){.product-variation-form__navigation{padding-left:0;bottom:85px}}.product-variation-form__navigation .simple-navigation{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.05)}
\ No newline at end of file
+.woocommerce-product-form-more-menu{margin-right:24px}.woocommerce-product-settings__panel{position:absolute;top:100%;right:0;height:calc(100vh - 92px);width:280px}.woocommerce-product-settings__panel .components-panel__body>.components-base-control{margin-top:22px}.woocommerce-product-settings__panel .components-panel__body .components-panel__body-title+.components-base-control{margin-top:0}.woocommerce-product-settings__panel .components-panel__body.is-opened>.components-panel__body-title{margin-bottom:10px}.woocommerce-product-settings__panel .components-panel__header .components-button.has-icon{margin:0 0 0 auto;padding:0;min-width:24px;height:24px}.woocommerce-product-settings__toggle{margin-left:-16px}@media(max-width:782px){.woocommerce-product-settings__panel,.woocommerce-product-settings__toggle{display:none}}.woocommerce-product-breadcrumbs{display:flex;align-items:center}.woocommerce-product-breadcrumbs__item{font-weight:400;color:#757575}.woocommerce-product-breadcrumbs__item a{color:#757575;text-decoration:none}.woocommerce-product-breadcrumbs__item a:hover{text-decoration:underline}.woocommerce-product-breadcrumbs__separator{display:inline-flex}.woocommerce-product-breadcrumbs__separator path{fill:#757575}.woocommerce-product-status{margin-left:8px;padding-top:1px;padding-bottom:1px;color:#757575;border-color:#757575}.woocommerce-product-status.is-instock{color:#00a32a;border-color:#00a32a}.woocommerce-product-status.is-outofstock{color:#cc1818;border-color:#cc1818}.woocommerce-product-title{display:flex;align-items:center}@media(max-width:782px){.woocommerce-product-title{flex-direction:column;align-items:baseline}.woocommerce-product-title .woocommerce-product-breadcrumbs{font-size:13px}}.product-form-layout{max-width:1032px;margin:0 auto}.product-form-layout .components-radio-control .components-base-control__label,.product-form-layout h4{font-size:14px;font-weight:600;margin-bottom:18px;margin-top:26px;text-transform:none}.product-form-layout .components-card__body h4:first-child,.product-form-layout .components-radio-control:first-child .components-base-control__label{margin-top:0}.product-form-layout__category:not(:first-child){margin-top:48px}.product-form-layout .components-tab-panel__tabs{position:fixed;top:92px;left:160px;width:calc(100% - 160px);background:#fff;z-index:1000;border-bottom:1px solid #ccc;border-top:1px solid #ccc;padding:0 var(--large-gap) 0 var(--large-gap)}@media(max-width:782px){.product-form-layout .components-tab-panel__tabs{top:106px;width:100%;left:0}}@media(min-width:783px)and (max-width:960px){.product-form-layout .components-tab-panel__tabs{width:calc(100% - 36px);left:36px}}.product-form-layout .components-tab-panel__tabs-item{min-height:56px;padding-left:0;padding-right:0;margin-right:24px;font-weight:400}.product-form-layout .components-tab-panel__tabs-item:last-child{margin-right:0}.product-form-layout .components-tab-panel__tabs-item.is-active{font-weight:600;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) transparent,inset 0 -3px 0 0 var(--wp-admin-theme-color)}.product-form-layout .components-tab-panel__tabs-item:disabled,.product-form-layout .components-tab-panel__tabs-item[aria-disabled=true]{opacity:1}.product-form-layout .components-tab-panel__tabs-item:disabled .woocommerce-product-form-tab__item-inner-text,.product-form-layout .components-tab-panel__tabs-item[aria-disabled=true] .woocommerce-product-form-tab__item-inner-text{opacity:.3}.product-form-layout .components-tab-panel__tabs-item .woocommerce-product-form-tab__item-inner{min-height:56px;display:flex;align-items:center}.woocommerce-admin-product-layout .woocommerce-layout__primary{padding-top:56px}.woocommerce-admin-product-layout .woocommerce-layout__header.is-scrolled{box-shadow:none}.woocommerce-admin-product-layout .woocommerce-layout__header.is-scrolled~.woocommerce-layout__primary .product-form-layout .components-tab-panel__tabs{box-shadow:0 8px 8px 0 rgba(85,93,102,.3)}.woocommerce-product-tour-modal{max-width:400px;position:fixed;left:184px;bottom:24px;z-index:31}@media(max-width:960px){.woocommerce-product-tour-modal{left:60px}}@media(max-width:782px){.woocommerce-product-tour-modal{display:none}}.woocommerce-product-tour-modal .components-modal__content{display:flex;flex-direction:column;margin:0;padding:0}.woocommerce-product-tour-modal .components-modal__header{position:static;padding-top:16px;padding-left:16px;padding-right:16px;height:auto}.woocommerce-product-tour-modal .components-modal__header .components-button{position:absolute;top:16px;right:16px;left:auto}.woocommerce-product-tour-modal .components-modal__header .components-modal__header-heading{font-size:16px;line-height:24px}.woocommerce-product-tour-modal .woocommerce-product-tour-modal__header-img{background:#c5d9ed;order:-1;padding:28px 28px 0}.woocommerce-product-tour-modal .woocommerce-product-tour-modal__header-img img{max-width:286px;display:block;margin:0 auto}.woocommerce-product-tour-modal .woocommerce-product-tour-modal__content{padding:8px 16px 16px}.woocommerce-product-tour-modal .woocommerce-product-tour-modal__content>p:first-child{margin-top:0}.woocommerce-product-tour-modal .woocommerce-product-tour-modal__actions{text-align:right;margin-top:28px}.woocommerce-product-tour-modal .woocommerce-product-tour-modal__actions button{margin-left:8px}.woocommerce-product-tour-modal__overlay{position:static}.woocommerce-add-product .woocommerce-product-form-actions,.woocommerce-edit-product .woocommerce-product-form-actions{margin-top:48px}.woocommerce-add-product .components-checkbox-control>*,.woocommerce-add-product .components-toggle-control>*,.woocommerce-edit-product .components-checkbox-control>*,.woocommerce-edit-product .components-toggle-control>*{margin-bottom:0}.woocommerce-add-product .components-input-control__prefix,.woocommerce-edit-product .components-input-control__prefix{margin-left:8px}.woocommerce-add-product .components-input-control__suffix,.woocommerce-edit-product .components-input-control__suffix{margin-right:8px}.woocommerce-add-product .components-currency-control .components-input-control__prefix,.woocommerce-edit-product .components-currency-control .components-input-control__prefix{color:#757575}.woocommerce-add-product .components-currency-control .components-input-control__input,.woocommerce-edit-product .components-currency-control .components-input-control__input{text-align:right}.woocommerce-add-product .components-checkbox-control__label,.woocommerce-edit-product .components-checkbox-control__label{display:flex;align-items:center}.woocommerce-add-product .components-checkbox-control__input-container,.woocommerce-edit-product .components-checkbox-control__input-container{align-self:center}.woocommerce-add-product .components-checkbox-control .components-base-control__field,.woocommerce-edit-product .components-checkbox-control .components-base-control__field{display:flex}.woocommerce-add-product .components-toggle-control .components-base-control__field .components-toggle-control__label,.woocommerce-edit-product .components-toggle-control .components-base-control__field .components-toggle-control__label{display:flex;align-items:center}.woocommerce-add-product .woocommerce-tooltip,.woocommerce-edit-product .woocommerce-tooltip{margin-left:8px}.woocommerce-add-product .woocommerce-tooltip__button,.woocommerce-edit-product .woocommerce-tooltip__button{padding:0}.woocommerce-add-product .woocommerce-product-form__custom-label-input,.woocommerce-edit-product .woocommerce-product-form__custom-label-input{display:flex;flex-direction:column}.woocommerce-add-product .woocommerce-product-form__custom-label-input label,.woocommerce-edit-product .woocommerce-product-form__custom-label-input label{display:block;margin-bottom:8px}.woocommerce-add-product .woocommerce-product-form__optional-input,.woocommerce-edit-product .woocommerce-product-form__optional-input{color:#757575}.woocommerce-add-product .woocommerce-product-form__secondary-text,.woocommerce-edit-product .woocommerce-product-form__secondary-text{font-size:12px;color:#757575;margin-top:8px}.woocommerce-add-product .has-error .components-base-control__help,.woocommerce-edit-product .has-error .components-base-control__help{color:#d63638;margin-bottom:0}.woocommerce-add-product .woocommerce-product-form__tooltip-disabled-overlay,.woocommerce-edit-product .woocommerce-product-form__tooltip-disabled-overlay{position:relative;display:inline-block}.woocommerce-add-product .woocommerce-product-form__tooltip-disabled-overlay:after,.woocommerce-edit-product .woocommerce-product-form__tooltip-disabled-overlay:after{content:"";display:inline-block;position:absolute;width:100%;height:100%;background:transparent;left:0;top:0;cursor:default}.woocommerce-add-product .woocommerce-product-form__tooltip-disabled-overlay .components-base-control,.woocommerce-edit-product .woocommerce-product-form__tooltip-disabled-overlay .components-base-control{margin-bottom:0}.woocommerce-add-product .half-width-field,.woocommerce-edit-product .half-width-field{width:50%}@media(max-width:960px){.woocommerce-add-product .half-width-field,.woocommerce-edit-product .half-width-field{width:100%}}.woocommerce-add-product .components-base-control__label .woocommerce-product-form__secondary-text,.woocommerce-edit-product .components-base-control__label .woocommerce-product-form__secondary-text{display:block;font-weight:400}.woocommerce-edit-product{position:relative}.woocommerce-edit-product__error{background:#fff;text-align:center;border:1px solid #ccc;border-radius:2px;padding:1em 2em}.woocommerce-edit-product__spinner{display:flex;align-items:center;justify-content:center;position:absolute;width:100%;height:100%}.posts-navigation{display:flex;align-items:center;background:#fff;border:1px solid #ccc;border-radius:2px;width:fit-content;height:48px}.posts-navigation__action,.posts-navigation__next,.posts-navigation__prev{display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:12px;text-decoration:none;height:100%;color:#1e1e1e}.posts-navigation__action:focus,.posts-navigation__next:focus,.posts-navigation__prev:focus{z-index:1}.posts-navigation__action:disabled,.posts-navigation__action[aria-disabled=true],.posts-navigation__next:disabled,.posts-navigation__next[aria-disabled=true],.posts-navigation__prev:disabled,.posts-navigation__prev[aria-disabled=true]{color:#ccc}.posts-navigation__action{border-right:1px solid #ccc;border-left:1px solid #ccc}.posts-navigation .screen-reader-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}.product-variation-form__navigation{display:flex;align-items:flex-end;justify-content:center;width:100%;position:fixed;bottom:16px;left:0;right:0;padding-left:160px}@media(min-width:783px)and (max-width:960px){.product-variation-form__navigation{padding-left:18px}}@media(max-width:782px){.product-variation-form__navigation{padding-left:0;bottom:85px}}.product-variation-form__navigation .simple-navigation{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.05)}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/4891.js b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/4891.js
index 35693bb4..fdc1b6d2 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/4891.js
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/4891.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunk_wcAdmin_webpackJsonp=globalThis.webpackChunk_wcAdmin_webpackJsonp||[]).push([[4891],{68589:(e,t,o)=>{o.d(t,{Z:()=>i});var r=o(69307),c=o(65736),a=o(55609),n=o(14812);const i=e=>{let{onCancel:t,onImport:o}=e;return(0,r.createElement)(a.Modal,{className:"woocommerce-products-load-sample-product-confirm-modal",overlayClassName:"woocommerce-products-load-sample-product-confirm-modal-overlay",title:(0,c.__)("Load sample products","woocommerce"),onRequestClose:t},(0,r.createElement)(n.Text,{className:"woocommerce-confirmation-modal__message"},(0,c.__)("We'll import images from Woo.com to set up your sample products.","woocommerce")),(0,r.createElement)("div",{className:"woocommerce-confirmation-modal-actions"},(0,r.createElement)(a.Button,{isSecondary:!0,onClick:t},(0,c.__)("Cancel","woocommerce")),(0,r.createElement)(a.Button,{isPrimary:!0,onClick:o},(0,c.__)("Import sample products","woocommerce"))))}},48451:(e,t,o)=>{o.d(t,{Z:()=>s});var r=o(69307),c=o(65736),a=o(55609),n=o(34928),i=o(14812);const s=()=>(0,r.createElement)(a.Modal,{className:"woocommerce-products-load-sample-product-modal",overlayClassName:"woocommerce-products-load-sample-product-modal-overlay",title:"",onRequestClose:()=>{}},(0,r.createElement)(n.Spinner,{color:"#007cba",size:48}),(0,r.createElement)(i.Text,{className:"woocommerce-load-sample-product-modal__title"},(0,c.__)("Loading sample products","woocommerce")),(0,r.createElement)(i.Text,{className:"woocommerce-load-sample-product-modal__description"},(0,c.__)("We are loading 9 sample products into your store","woocommerce")))},42896:(e,t,o)=>{o.d(t,{Z:()=>d});var r=o(65736),c=o(86989),a=o.n(c),n=o(67221),i=o(9818),s=o(69307),l=o(14599),m=o(31611);const d=e=>{let{redirectUrlAfterSuccess:t}=e;const[o,c]=(0,s.useState)(!1),{createNotice:d}=(0,i.useDispatch)("core/notices"),{recordCompletionTime:p}=(0,m.Z)("products");return{loadSampleProduct:async()=>{(0,l.recordEvent)("tasklist_add_product",{method:"sample_product"}),p(),c(!0);try{if(await a()({path:`${n.WC_ADMIN_NAMESPACE}/onboarding/tasks/import_sample_products`,method:"POST"}),t)return void(window.location.href=t)}catch(e){const t=e instanceof Error&&e.message?e.message:(0,r.__)("There was an error importing the sample products","woocommerce");d("error",t)}c(!1)},isLoadingSampleProducts:o}}},14891:(e,t,o)=>{o.r(t),o.d(t,{Products:()=>C});var r=o(69307),c=o(72456),a=o(98817),n=o(65736),i=o(23374),s=o(86241),l=o(73224),m=o(55609),d=o(74617),p=o(14599),u=o(25247),_=o(86020);const w=e=>{let{items:t}=e;return(0,r.createElement)("div",{className:"woocommerce-products-card-list"},(0,r.createElement)(_.List,{items:t}))};var h=o(3680);const k=[{key:"from-csv",title:(0,n.__)("FROM A CSV FILE","woocommerce"),content:(0,n.__)("Import all products at once by uploading a CSV file.","woocommerce"),before:(0,r.createElement)(h.Z,null),onClick:()=>{(0,p.recordEvent)("tasklist_add_product",{method:"import"}),window.location.href=(0,d.getAdminLink)("edit.php?post_type=product&page=product_importer&wc_onboarding_active_task=products")}}];var g=o(19460),v=o(70422),f=o(48451),y=o(42896),E=o(68589),b=o(31611);const C=()=>{const[e,t]=(0,r.useState)(!1),{recordCompletionTime:o}=(0,b.Z)("products"),[c,a]=(0,r.useState)(!1),_=(0,r.useMemo)((()=>k.map((e=>({...e,onClick:()=>{e.onClick(),o()}})))),[o]),{loadSampleProduct:h,isLoadingSampleProducts:C}=(0,y.Z)({redirectUrlAfterSuccess:(0,d.getAdminLink)("edit.php?post_type=product&wc_onboarding_active_task=products")}),{productTypes:Z}=(0,g.Z)((0,v.Q)({exclude:["subscription"]}),[],{onClick:o}),L=(0,r.createElement)(u.Z,{items:Z,onClickLoadSampleProduct:()=>a(!0)});return(0,r.createElement)("div",{className:"woocommerce-task-import-products"},(0,r.createElement)("h1",null,(0,n.__)("Import your products","woocommerce")),(0,r.createElement)(w,{items:_}),(0,r.createElement)("div",{className:"woocommerce-task-import-products-stacks"},(0,r.createElement)(m.Button,{onClick:()=>{(0,p.recordEvent)("tasklist_add_product_from_scratch_click"),t(!e)}},(0,n.__)("Or add your products from scratch","woocommerce"),(0,r.createElement)(i.Z,{icon:e?s.Z:l.Z})),e&&L),C?(0,r.createElement)(f.Z,null):c&&(0,r.createElement)(E.Z,{onCancel:()=>{a(!1),(0,p.recordEvent)("tasklist_cancel_load_sample_products_click")},onImport:()=>{a(!1),h()}}))};(0,a.registerPlugin)("wc-admin-onboarding-task-products",{scope:"woocommerce-tasks",render:()=>(0,r.createElement)(c.WooOnboardingTask,{id:"products"},(0,r.createElement)(C,null))})},25247:(e,t,o)=>{o.d(t,{Z:()=>d});var r=o(69307),c=o(65736),a=o(86020),n=o(14812),i=o(75283),s=o(74617),l=o(14599),m=o(31611);const d=e=>{let{items:t,onClickLoadSampleProduct:o,showOtherOptions:d=!0,isTaskListItemClicked:p=!1}=e;const{recordCompletionTime:u}=(0,m.Z)("products");return(0,r.createElement)("div",{className:"woocommerce-products-stack"},p&&(0,r.createElement)("div",{className:"woocommerce-stack__overlay-spinner"},(0,r.createElement)(a.Spinner,{className:"list-overlay"})),(0,r.createElement)(a.List,{items:t}),d&&(0,r.createElement)(n.Text,{className:"woocommerce-stack__other-options"},(0,i.Z)({mixedString:(0,c.__)("Can’t find your product type? {{sbLink}}Start Blank{{/sbLink}} or {{LspLink}}Load Sample Products{{/LspLink}} to see what they look like in your store.","woocommerce"),components:{sbLink:(0,r.createElement)(a.Link,{onClick:()=>((0,l.recordEvent)("tasklist_add_product",{method:"manually"}),u(),window.location.href=(0,s.getAdminLink)("post-new.php?post_type=product&wc_onboarding_active_task=products&tutorial=true"),!1),href:"",type:"wc-admin"},(0,r.createElement)(r.Fragment,null)),LspLink:(0,r.createElement)(a.Link,{href:"",type:"wc-admin",onClick:()=>(o(),!1)},(0,r.createElement)(r.Fragment,null))}})))}},19460:(e,t,o)=>{o.d(t,{Z:()=>u});var r=o(69307),c=o(14599),a=o(9818),n=o(67221),i=o(10431),s=o(74617),l=o(73516),m=o(34704),d=o(73463);const p=()=>{const{createProductFromTemplate:e}=(0,a.useDispatch)(n.ITEMS_STORE_NAME),[t,o]=(0,r.useState)(!1),c=window.wcAdminFeatures["new-product-management-experience"];return{createProductByType:async t=>{if("subscription"!==t){if(o(!0),"physical"===t||"variable"===t||"digital"===t){if(c)return void(0,i.navigateTo)({url:(0,i.getNewPath)({},"/add-product",{})});if("treatment"===(await(0,l.loadExperimentAssignment)("woocommerce_product_creation_experience_add_digital_202311_v1")).variationName){const e=(0,d.O3)("_feature_nonce");return void(window.location.href=(0,s.getAdminLink)(`post-new.php?post_type=product&product_block_editor=1&_feature_nonce=${e}`))}}try{const o=await e({template_name:t,status:"draft"},{_fields:["id"]});if(o&&o.id){const e=(0,s.getAdminLink)(`post.php?post=${o.id}&action=edit&wc_onboarding_active_task=products&tutorial=true`);return void(window.location.href=e)}throw new Error("Unexpected empty data response from server")}catch(e){(0,m.a)(e)}o(!1)}else window.location.href=(0,s.getAdminLink)("post-new.php?post_type=product&subscription_pointers=true")},isRequesting:t}},u=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],{onClick:o}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{createProductByType:a,isRequesting:n}=p(),i=(0,r.useMemo)((()=>e.map((e=>({...e,onClick:()=>{a(e.key),(0,c.recordEvent)("tasklist_add_product",{method:"product_template"}),(0,c.recordEvent)("tasklist_product_template_selection",{product_type:e.key,is_suggested:t.includes(e.key)}),"function"==typeof o&&o()}})))),[a]);return{productTypes:i,isRequesting:n}}},70422:(e,t,o)=>{o.d(t,{Q:()=>h,r:()=>k});var r=o(92819),c=o(69307),a=o(65736),n=o(90391),i=o(96898),s=o(7480),l=o(48349),m=o(23374),d=o(83619);const p=Object.freeze([{key:"physical",title:(0,a.__)("Physical product","woocommerce"),content:(0,a.__)("A tangible item that gets delivered to customers.","woocommerce"),before:(0,c.createElement)(n.Z,null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"digital",title:(0,a.__)("Digital product","woocommerce"),content:(0,a.__)("A digital product like service, downloadable book, music or video.","woocommerce"),before:(0,c.createElement)(i.Z,null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"variable",title:(0,a.__)("Variable product","woocommerce"),content:(0,a.__)("A product with variations like color or size.","woocommerce"),before:(0,c.createElement)(s.Z,null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"subscription",title:(0,a.__)("Subscription product","woocommerce"),content:(0,a.__)("Item that customers receive on a regular basis.","woocommerce"),before:(0,c.createElement)(l.Z,null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"grouped",title:(0,a.__)("Grouped product","woocommerce"),content:(0,a.__)("A collection of related products.","woocommerce"),before:(0,c.createElement)((()=>(0,c.createElement)("svg",{width:"25",height:"24",viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,c.createElement)("mask",{id:"mask0_1133_132667",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"2",y:"2",width:"21",height:"20"},(0,c.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M16.5 2.34497L10.84 7.99497V3.65497H2.84003V11.655H10.84V7.99497L16.5 13.655H12.84V21.655H20.84V13.655H16.5L22.16 7.99497L16.5 2.34497ZM19.33 8.00497L16.5 5.17497L13.67 8.00497L16.5 10.835L19.33 8.00497ZM8.84003 9.65497V5.65497H4.84003V9.65497H8.84003ZM18.84 15.655V19.655H14.84V15.655H18.84ZM8.84003 19.655V15.655H4.84003V19.655H8.84003ZM2.84003 13.655H10.84V21.655H2.84003V13.655Z",fill:"white"})),(0,c.createElement)("g",{mask:"url(#mask0_1133_132667)"},(0,c.createElement)("rect",{x:"0.5",width:"24",height:"24"})))),null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"external",title:(0,a.__)("External product","woocommerce"),content:(0,a.__)("Link a product to an external website.","woocommerce"),before:(0,c.createElement)((()=>(0,c.createElement)("svg",{width:"25",height:"24",viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,c.createElement)("mask",{id:"mask0_1133_132681",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"2",y:"7",width:"21",height:"10"},(0,c.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.5 15H7.5C5.85 15 4.5 13.65 4.5 12C4.5 10.35 5.85 9 7.5 9H11.5V7H7.5C4.74 7 2.5 9.24 2.5 12C2.5 14.76 4.74 17 7.5 17H11.5V15ZM17.5 7H13.5V9H17.5C19.15 9 20.5 10.35 20.5 12C20.5 13.65 19.15 15 17.5 15H13.5V17H17.5C20.26 17 22.5 14.76 22.5 12C22.5 9.24 20.26 7 17.5 7ZM16.5 11H8.5V13H16.5V11Z",fill:"white"})),(0,c.createElement)("g",{mask:"url(#mask0_1133_132681)"},(0,c.createElement)("rect",{x:"0.5",width:"24",height:"24"})))),null),after:(0,c.createElement)(m.Z,{icon:d.Z})}]),u=((0,a.__)("can’t decide?","woocommerce"),(0,a.__)("Load sample products and see what they look like in your store.","woocommerce"),(0,c.createElement)((()=>(0,c.createElement)("svg",{width:"25",height:"24",viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,c.createElement)("mask",{id:"mask0_1133_132689",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"5",y:"2",width:"15",height:"20"},(0,c.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.5 2C8.64 2 5.5 5.14 5.5 9C5.5 11.38 6.69 13.47 8.5 14.74V17C8.5 17.55 8.95 18 9.5 18H15.5C16.05 18 16.5 17.55 16.5 17V14.74C18.31 13.47 19.5 11.38 19.5 9C19.5 5.14 16.36 2 12.5 2ZM9.5 21C9.5 21.55 9.95 22 10.5 22H14.5C15.05 22 15.5 21.55 15.5 21V20H9.5V21ZM14.5 13.7L15.35 13.1C16.7 12.16 17.5 10.63 17.5 9C17.5 6.24 15.26 4 12.5 4C9.74 4 7.5 6.24 7.5 9C7.5 10.63 8.3 12.16 9.65 13.1L10.5 13.7V16H14.5V13.7Z",fill:"white"})),(0,c.createElement)("g",{mask:"url(#mask0_1133_132689)"},(0,c.createElement)("rect",{x:"0.5",width:"24",height:"24",fill:"#757575"})))),null),(0,c.createElement)(m.Z,{icon:d.Z}),Object.freeze({physical:["physical","variable","grouped"],subscriptions:["subscription"],downloads:["digital"],"physical,subscriptions":["physical","subscription"],"downloads,physical":["physical","digital"],"downloads,subscriptions":["digital","subscription"],"downloads,physical,subscriptions":["physical","digital","subscription"]})),_=u.physical,w=["physical","subscriptions","downloads"],h=function(){let{exclude:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e&&(null==e?void 0:e.length)>0?p.filter((t=>!e.includes(t.key))):[...p]},k=e=>{const t=(0,r.intersection)(e,w).sort().join(",");return u.hasOwnProperty(t)?u[t]:_}},31611:(e,t,o)=>{o.d(t,{Z:()=>n});var r=o(69307),c=o(14599),a=o(34374);const n=(e,t)=>{const o=(0,r.useRef)(t||window.performance.now());return{recordCompletionTime:()=>{(0,c.recordEvent)("task_completion_time",{task_name:e,time:(0,a.Jm)(window.performance.now()-o.current)})}}}},3680:(e,t,o)=>{t.Z=function(e){var t=e.size,o=void 0===t?24:t,r=e.onClick,i=(e.icon,e.className),s=function(e,t){if(null==e)return{};var o,r,c=function(e,t){if(null==e)return{};var o,r,c={},a=Object.keys(e);for(r=0;r{o.d(t,{Z:()=>i});var r=o(69307),c=o(65736),a=o(55609),n=o(14812);const i=e=>{let{onCancel:t,onImport:o}=e;return(0,r.createElement)(a.Modal,{className:"woocommerce-products-load-sample-product-confirm-modal",overlayClassName:"woocommerce-products-load-sample-product-confirm-modal-overlay",title:(0,c.__)("Load sample products","woocommerce"),onRequestClose:t},(0,r.createElement)(n.Text,{className:"woocommerce-confirmation-modal__message"},(0,c.__)("We'll import images from woocommerce.com to set up your sample products.","woocommerce")),(0,r.createElement)("div",{className:"woocommerce-confirmation-modal-actions"},(0,r.createElement)(a.Button,{isSecondary:!0,onClick:t},(0,c.__)("Cancel","woocommerce")),(0,r.createElement)(a.Button,{isPrimary:!0,onClick:o},(0,c.__)("Import sample products","woocommerce"))))}},48451:(e,t,o)=>{o.d(t,{Z:()=>s});var r=o(69307),c=o(65736),a=o(55609),n=o(34928),i=o(14812);const s=()=>(0,r.createElement)(a.Modal,{className:"woocommerce-products-load-sample-product-modal",overlayClassName:"woocommerce-products-load-sample-product-modal-overlay",title:"",onRequestClose:()=>{}},(0,r.createElement)(n.Spinner,{color:"#007cba",size:48}),(0,r.createElement)(i.Text,{className:"woocommerce-load-sample-product-modal__title"},(0,c.__)("Loading sample products","woocommerce")),(0,r.createElement)(i.Text,{className:"woocommerce-load-sample-product-modal__description"},(0,c.__)("We are loading 9 sample products into your store","woocommerce")))},42896:(e,t,o)=>{o.d(t,{Z:()=>d});var r=o(65736),c=o(86989),a=o.n(c),n=o(67221),i=o(9818),s=o(69307),l=o(14599),m=o(31611);const d=e=>{let{redirectUrlAfterSuccess:t}=e;const[o,c]=(0,s.useState)(!1),{createNotice:d}=(0,i.useDispatch)("core/notices"),{recordCompletionTime:p}=(0,m.Z)("products");return{loadSampleProduct:async()=>{(0,l.recordEvent)("tasklist_add_product",{method:"sample_product"}),p(),c(!0);try{if(await a()({path:`${n.WC_ADMIN_NAMESPACE}/onboarding/tasks/import_sample_products`,method:"POST"}),t)return void(window.location.href=t)}catch(e){const t=e instanceof Error&&e.message?e.message:(0,r.__)("There was an error importing the sample products","woocommerce");d("error",t)}c(!1)},isLoadingSampleProducts:o}}},14891:(e,t,o)=>{o.r(t),o.d(t,{Products:()=>C});var r=o(69307),c=o(72456),a=o(98817),n=o(65736),i=o(23374),s=o(86241),l=o(73224),m=o(55609),d=o(74617),p=o(14599),u=o(25247),_=o(86020);const w=e=>{let{items:t}=e;return(0,r.createElement)("div",{className:"woocommerce-products-card-list"},(0,r.createElement)(_.List,{items:t}))};var h=o(3680);const k=[{key:"from-csv",title:(0,n.__)("FROM A CSV FILE","woocommerce"),content:(0,n.__)("Import all products at once by uploading a CSV file.","woocommerce"),before:(0,r.createElement)(h.Z,null),onClick:()=>{(0,p.recordEvent)("tasklist_add_product",{method:"import"}),window.location.href=(0,d.getAdminLink)("edit.php?post_type=product&page=product_importer&wc_onboarding_active_task=products")}}];var g=o(19460),v=o(70422),f=o(48451),y=o(42896),E=o(68589),b=o(31611);const C=()=>{const[e,t]=(0,r.useState)(!1),{recordCompletionTime:o}=(0,b.Z)("products"),[c,a]=(0,r.useState)(!1),_=(0,r.useMemo)((()=>k.map((e=>({...e,onClick:()=>{e.onClick(),o()}})))),[o]),{loadSampleProduct:h,isLoadingSampleProducts:C}=(0,y.Z)({redirectUrlAfterSuccess:(0,d.getAdminLink)("edit.php?post_type=product&wc_onboarding_active_task=products")}),{productTypes:Z}=(0,g.Z)((0,v.Q)({exclude:["subscription"]}),[],{onClick:o}),L=(0,r.createElement)(u.Z,{items:Z,onClickLoadSampleProduct:()=>a(!0)});return(0,r.createElement)("div",{className:"woocommerce-task-import-products"},(0,r.createElement)("h1",null,(0,n.__)("Import your products","woocommerce")),(0,r.createElement)(w,{items:_}),(0,r.createElement)("div",{className:"woocommerce-task-import-products-stacks"},(0,r.createElement)(m.Button,{onClick:()=>{(0,p.recordEvent)("tasklist_add_product_from_scratch_click"),t(!e)}},(0,n.__)("Or add your products from scratch","woocommerce"),(0,r.createElement)(i.Z,{icon:e?s.Z:l.Z})),e&&L),C?(0,r.createElement)(f.Z,null):c&&(0,r.createElement)(E.Z,{onCancel:()=>{a(!1),(0,p.recordEvent)("tasklist_cancel_load_sample_products_click")},onImport:()=>{a(!1),h()}}))};(0,a.registerPlugin)("wc-admin-onboarding-task-products",{scope:"woocommerce-tasks",render:()=>(0,r.createElement)(c.WooOnboardingTask,{id:"products"},(0,r.createElement)(C,null))})},25247:(e,t,o)=>{o.d(t,{Z:()=>d});var r=o(69307),c=o(65736),a=o(86020),n=o(14812),i=o(75283),s=o(74617),l=o(14599),m=o(31611);const d=e=>{let{items:t,onClickLoadSampleProduct:o,showOtherOptions:d=!0,isTaskListItemClicked:p=!1}=e;const{recordCompletionTime:u}=(0,m.Z)("products");return(0,r.createElement)("div",{className:"woocommerce-products-stack"},p&&(0,r.createElement)("div",{className:"woocommerce-stack__overlay-spinner"},(0,r.createElement)(a.Spinner,{className:"list-overlay"})),(0,r.createElement)(a.List,{items:t}),d&&(0,r.createElement)(n.Text,{className:"woocommerce-stack__other-options"},(0,i.Z)({mixedString:(0,c.__)("Can’t find your product type? {{sbLink}}Start Blank{{/sbLink}} or {{LspLink}}Load Sample Products{{/LspLink}} to see what they look like in your store.","woocommerce"),components:{sbLink:(0,r.createElement)(a.Link,{onClick:()=>((0,l.recordEvent)("tasklist_add_product",{method:"manually"}),u(),window.location.href=(0,s.getAdminLink)("post-new.php?post_type=product&wc_onboarding_active_task=products&tutorial=true"),!1),href:"",type:"wc-admin"},(0,r.createElement)(r.Fragment,null)),LspLink:(0,r.createElement)(a.Link,{href:"",type:"wc-admin",onClick:()=>(o(),!1)},(0,r.createElement)(r.Fragment,null))}})))}},19460:(e,t,o)=>{o.d(t,{Z:()=>u});var r=o(69307),c=o(14599),a=o(9818),n=o(67221),i=o(10431),s=o(74617),l=o(73516),m=o(34704),d=o(73463);const p=()=>{const{createProductFromTemplate:e}=(0,a.useDispatch)(n.ITEMS_STORE_NAME),[t,o]=(0,r.useState)(!1),c=window.wcAdminFeatures["new-product-management-experience"];return{createProductByType:async t=>{if("subscription"!==t){if(o(!0),"physical"===t||"variable"===t){if(c)return void(0,i.navigateTo)({url:(0,i.getNewPath)({},"/add-product",{})});if("treatment"===(await(0,l.loadExperimentAssignment)("woocommerce_product_creation_experience_add_variations_202310_v2")).variationName){const e=(0,d.O3)("_feature_nonce");return void(window.location.href=(0,s.getAdminLink)(`post-new.php?post_type=product&product_block_editor=1&_feature_nonce=${e}`))}}try{const o=await e({template_name:t,status:"draft"},{_fields:["id"]});if(o&&o.id){const e=(0,s.getAdminLink)(`post.php?post=${o.id}&action=edit&wc_onboarding_active_task=products&tutorial=true`);return void(window.location.href=e)}throw new Error("Unexpected empty data response from server")}catch(e){(0,m.a)(e)}o(!1)}else window.location.href=(0,s.getAdminLink)("post-new.php?post_type=product&subscription_pointers=true")},isRequesting:t}},u=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],{onClick:o}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{createProductByType:a,isRequesting:n}=p(),i=(0,r.useMemo)((()=>e.map((e=>({...e,onClick:()=>{a(e.key),(0,c.recordEvent)("tasklist_add_product",{method:"product_template"}),(0,c.recordEvent)("tasklist_product_template_selection",{product_type:e.key,is_suggested:t.includes(e.key)}),"function"==typeof o&&o()}})))),[a]);return{productTypes:i,isRequesting:n}}},70422:(e,t,o)=>{o.d(t,{Q:()=>h,r:()=>k});var r=o(92819),c=o(69307),a=o(65736),n=o(90391),i=o(96898),s=o(7480),l=o(48349),m=o(23374),d=o(83619);const p=Object.freeze([{key:"physical",title:(0,a.__)("Physical product","woocommerce"),content:(0,a.__)("A tangible item that gets delivered to customers.","woocommerce"),before:(0,c.createElement)(n.Z,null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"digital",title:(0,a.__)("Digital product","woocommerce"),content:(0,a.__)("A digital product like service, downloadable book, music or video.","woocommerce"),before:(0,c.createElement)(i.Z,null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"variable",title:(0,a.__)("Variable product","woocommerce"),content:(0,a.__)("A product with variations like color or size.","woocommerce"),before:(0,c.createElement)(s.Z,null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"subscription",title:(0,a.__)("Subscription product","woocommerce"),content:(0,a.__)("Item that customers receive on a regular basis.","woocommerce"),before:(0,c.createElement)(l.Z,null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"grouped",title:(0,a.__)("Grouped product","woocommerce"),content:(0,a.__)("A collection of related products.","woocommerce"),before:(0,c.createElement)((()=>(0,c.createElement)("svg",{width:"25",height:"24",viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,c.createElement)("mask",{id:"mask0_1133_132667",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"2",y:"2",width:"21",height:"20"},(0,c.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M16.5 2.34497L10.84 7.99497V3.65497H2.84003V11.655H10.84V7.99497L16.5 13.655H12.84V21.655H20.84V13.655H16.5L22.16 7.99497L16.5 2.34497ZM19.33 8.00497L16.5 5.17497L13.67 8.00497L16.5 10.835L19.33 8.00497ZM8.84003 9.65497V5.65497H4.84003V9.65497H8.84003ZM18.84 15.655V19.655H14.84V15.655H18.84ZM8.84003 19.655V15.655H4.84003V19.655H8.84003ZM2.84003 13.655H10.84V21.655H2.84003V13.655Z",fill:"white"})),(0,c.createElement)("g",{mask:"url(#mask0_1133_132667)"},(0,c.createElement)("rect",{x:"0.5",width:"24",height:"24"})))),null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"external",title:(0,a.__)("External product","woocommerce"),content:(0,a.__)("Link a product to an external website.","woocommerce"),before:(0,c.createElement)((()=>(0,c.createElement)("svg",{width:"25",height:"24",viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,c.createElement)("mask",{id:"mask0_1133_132681",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"2",y:"7",width:"21",height:"10"},(0,c.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.5 15H7.5C5.85 15 4.5 13.65 4.5 12C4.5 10.35 5.85 9 7.5 9H11.5V7H7.5C4.74 7 2.5 9.24 2.5 12C2.5 14.76 4.74 17 7.5 17H11.5V15ZM17.5 7H13.5V9H17.5C19.15 9 20.5 10.35 20.5 12C20.5 13.65 19.15 15 17.5 15H13.5V17H17.5C20.26 17 22.5 14.76 22.5 12C22.5 9.24 20.26 7 17.5 7ZM16.5 11H8.5V13H16.5V11Z",fill:"white"})),(0,c.createElement)("g",{mask:"url(#mask0_1133_132681)"},(0,c.createElement)("rect",{x:"0.5",width:"24",height:"24"})))),null),after:(0,c.createElement)(m.Z,{icon:d.Z})}]),u=((0,a.__)("can’t decide?","woocommerce"),(0,a.__)("Load sample products and see what they look like in your store.","woocommerce"),(0,c.createElement)((()=>(0,c.createElement)("svg",{width:"25",height:"24",viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,c.createElement)("mask",{id:"mask0_1133_132689",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"5",y:"2",width:"15",height:"20"},(0,c.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.5 2C8.64 2 5.5 5.14 5.5 9C5.5 11.38 6.69 13.47 8.5 14.74V17C8.5 17.55 8.95 18 9.5 18H15.5C16.05 18 16.5 17.55 16.5 17V14.74C18.31 13.47 19.5 11.38 19.5 9C19.5 5.14 16.36 2 12.5 2ZM9.5 21C9.5 21.55 9.95 22 10.5 22H14.5C15.05 22 15.5 21.55 15.5 21V20H9.5V21ZM14.5 13.7L15.35 13.1C16.7 12.16 17.5 10.63 17.5 9C17.5 6.24 15.26 4 12.5 4C9.74 4 7.5 6.24 7.5 9C7.5 10.63 8.3 12.16 9.65 13.1L10.5 13.7V16H14.5V13.7Z",fill:"white"})),(0,c.createElement)("g",{mask:"url(#mask0_1133_132689)"},(0,c.createElement)("rect",{x:"0.5",width:"24",height:"24",fill:"#757575"})))),null),(0,c.createElement)(m.Z,{icon:d.Z}),Object.freeze({physical:["physical","variable","grouped"],subscriptions:["subscription"],downloads:["digital"],"physical,subscriptions":["physical","subscription"],"downloads,physical":["physical","digital"],"downloads,subscriptions":["digital","subscription"],"downloads,physical,subscriptions":["physical","digital","subscription"]})),_=u.physical,w=["physical","subscriptions","downloads"],h=function(){let{exclude:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e&&(null==e?void 0:e.length)>0?p.filter((t=>!e.includes(t.key))):[...p]},k=e=>{const t=(0,r.intersection)(e,w).sort().join(",");return u.hasOwnProperty(t)?u[t]:_}},31611:(e,t,o)=>{o.d(t,{Z:()=>n});var r=o(69307),c=o(14599),a=o(34374);const n=(e,t)=>{const o=(0,r.useRef)(t||window.performance.now());return{recordCompletionTime:()=>{(0,c.recordEvent)("task_completion_time",{task_name:e,time:(0,a.Jm)(window.performance.now()-o.current)})}}}},3680:(e,t,o)=>{t.Z=function(e){var t=e.size,o=void 0===t?24:t,r=e.onClick,i=(e.icon,e.className),s=function(e,t){if(null==e)return{};var o,r,c=function(e,t){if(null==e)return{};var o,r,c={},a=Object.keys(e);for(r=0;r{"use strict";r.d(t,{Z:()=>f});var n=r(9818),s=r(69307),a=r(37798),o=r(83357),i=r(37557),c=r(65736),l=r(22629);const d=(e,t)=>`${t} `,u=e=>`href="${e}" target="_blank" rel="noreferrer noopener"`,p=e=>{const{title:t,foreign_landing_url:r,creator:n,creator_url:s,license:a,license_version:o,license_url:i}=e,p=((e,t)=>{let r=e.trim();return"pdm"!==e&&(r=e.toUpperCase().replace("SAMPLING","Sampling")),t&&(r+=` ${t}`),["pdm","cc0"].includes(e)||(r=`CC ${r}`),r})(a,o),m=(0,l.decodeEntities)(n);let g;return g=m?t?(0,c.sprintf)((0,c._x)('"%1$s" by %2$s/ %3$s',"caption"),d(r,(0,l.decodeEntities)(t)),s?d(s,m):m,i?d(`${i}?ref=openverse`,p):p):(0,c.sprintf)((0,c._x)("Work by %2$s/ %3$s","caption"),u(r),s?d(s,m):m,i?d(`${i}?ref=openverse`,p):p):t?(0,c.sprintf)((0,c._x)('"%1$s"/ %2$s',"caption"),d(r,(0,l.decodeEntities)(t)),i?d(`${i}?ref=openverse`,p):p):(0,c.sprintf)((0,c._x)("Work / %3$s","caption"),u(r),i?d(`${i}?ref=openverse`,p):p),g.replace(/\s{2}/g," ")},m=async(e={})=>(await(0,n.resolveSelect)(a.store).getMediaItems({...e,orderBy:e?.search?"relevance":"date"})).map((e=>({...e,alt:e.alt_text,url:e.source_url,previewUrl:e.media_details?.sizes?.medium?.source_url,caption:e.caption?.raw}))),g=[{name:"images",labels:{name:(0,c.__)("Images"),search_items:(0,c.__)("Search images")},mediaType:"image",fetch:async(e={})=>m({...e,media_type:"image"})},{name:"videos",labels:{name:(0,c.__)("Videos"),search_items:(0,c.__)("Search videos")},mediaType:"video",fetch:async(e={})=>m({...e,media_type:"video"})},{name:"audio",labels:{name:(0,c.__)("Audio"),search_items:(0,c.__)("Search audio")},mediaType:"audio",fetch:async(e={})=>m({...e,media_type:"audio"})},{name:"openverse",labels:{name:(0,c.__)("Openverse"),search_items:(0,c.__)("Search Openverse")},mediaType:"image",async fetch(e={}){const t={...e,mature:!1,excluded_source:"flickr,inaturalist,wikimedia",license:"pdm,cc0"},r={per_page:"page_size",search:"q"},n=new URL("https://api.openverse.engineering/v1/images/");Object.entries(t).forEach((([e,t])=>{const s=r[e]||e;n.searchParams.set(s,t)}));const s=await window.fetch(n,{headers:{"User-Agent":"WordPress/inserter-media-fetch"}});return(await s.json()).results.map((e=>({...e,title:e.title?.toLowerCase().startsWith("file:")?e.title.slice(5):e.title,sourceId:e.id,id:void 0,caption:p(e),previewUrl:e.thumbnail})))},getReportUrl:({sourceId:e})=>`https://wordpress.org/openverse/image/${e}/report/`,isExternalResource:!0}];function f(){var e,t;const{setIsInserterOpened:r}=(0,n.useDispatch)(o.h),{storedSettings:c,canvasMode:l,templateType:d}=(0,n.useSelect)((e=>{const{getSettings:t,getCanvasMode:n,getEditedPostType:s}=(0,i.U)(e(o.h));return{storedSettings:t(r),canvasMode:n(),templateType:s()}}),[r]),u=null!==(e=c.__experimentalAdditionalBlockPatterns)&&void 0!==e?e:c.__experimentalBlockPatterns,p=null!==(t=c.__experimentalAdditionalBlockPatternCategories)&&void 0!==t?t:c.__experimentalBlockPatternCategories,{restBlockPatterns:m,restBlockPatternCategories:f,templateSlug:y}=(0,n.useSelect)((e=>{const{getEditedPostType:t,getEditedPostId:r}=e(o.h),{getEditedEntityRecord:n}=e(a.store),s=n("postType",t(),r());return{restBlockPatterns:e(a.store).getBlockPatterns(),restBlockPatternCategories:e(a.store).getBlockPatternCategories(),templateSlug:s.slug}}),[]),h=function(e){const t=e?.match(/^(category|tag|taxonomy-([^-]+))$|^(((category|tag)|taxonomy-([^-]+))-(.+))$/);let r,s;return t&&(t[1]?r=t[2]?t[2]:t[1]:t[3]&&(r=t[6]?t[6]:t[4],s=t[7]),r="tag"===r?"post_tag":r),(0,n.useSelect)((e=>{const{getEntityRecords:t,getTaxonomy:n}=e(a.store);let o,i;if(r&&(o=n(r)?.labels?.singular_name),s){const e=t("taxonomy",r,{slug:s,per_page:1});e&&e[0]&&(i=e[0].name)}return{archiveTypeLabel:o,archiveNameLabel:i}}),[r,s])}(y),v=(0,s.useMemo)((()=>[...u||[],...m||[]].filter(((e,t,r)=>t===r.findIndex((t=>e.name===t.name)))).filter((({postTypes:e})=>!e||Array.isArray(e)&&e.includes(d)))),[u,m,d]),_=(0,s.useMemo)((()=>[...p||[],...f||[]].filter(((e,t,r)=>t===r.findIndex((t=>e.name===t.name))))),[p,f]);return(0,s.useMemo)((()=>{const{__experimentalAdditionalBlockPatterns:e,__experimentalAdditionalBlockPatternCategories:t,focusMode:r,...n}=c;return{...n,inserterMediaCategories:g,__experimentalBlockPatterns:v,__experimentalBlockPatternCategories:_,focusMode:("view"!==l||!r)&&r,__experimentalArchiveTitleTypeLabel:h.archiveTypeLabel,__experimentalArchiveTitleNameLabel:h.archiveNameLabel}}),[c,v,_,l,h.archiveTypeLabel,h.archiveNameLabel])}},14168:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});var n=r(69307),s=r(55609);function a(){return(0,n.createElement)("div",{className:"edit-site-canvas-spinner"},(0,n.createElement)(s.Spinner,null))}},9059:(e,t,r)=>{"use strict";r.d(t,{Z:()=>u});var n=r(69307),s=r(65736),a=r(92694),o=r(55609),i=r(52175),c=r(94333);function l({text:e,children:t}){const r=(0,c.useCopyToClipboard)(e);return(0,n.createElement)(o.Button,{variant:"secondary",ref:r},t)}function d({message:e,error:t}){const r=[(0,n.createElement)(l,{key:"copy-error",text:t.stack},(0,s.__)("Copy Error"))];return(0,n.createElement)(i.Warning,{className:"editor-error-boundary",actions:r},e)}class u extends n.Component{constructor(){super(...arguments),this.state={error:null}}componentDidCatch(e){(0,a.doAction)("editor.ErrorBoundary.errorLogged",e)}static getDerivedStateFromError(e){return{error:e}}render(){return this.state.error?(0,n.createElement)(d,{message:(0,s.__)("The editor has encountered an unexpected error."),error:this.state.error}):this.props.children}}},40592:(e,t,r)=>{"use strict";r.d(t,{w:()=>l});var n=r(69307),s=r(9818),a=r(52175),o=r(83357),i=r(37557);const{useGlobalStylesOutput:c}=(0,i.U)(a.privateApis);function l(){return function(){const[e,t]=c(),{getSettings:r}=(0,s.useSelect)(o.h),{updateSettings:a}=(0,s.useDispatch)(o.h);(0,n.useEffect)((()=>{var n;if(!e||!t)return;const s=r(),o=Object.values(null!==(n=s.styles)&&void 0!==n?n:[]).filter((e=>!e.isGlobalStyles));a({...s,styles:[...o,...e],__experimentalFeatures:t})}),[e,t])}(),null}},64567:(e,t,r)=>{"use strict";r.d(t,{V:()=>f,X:()=>g});var n=r(69307),s=r(14298),a=r.n(s);function o(e){return"[object Object]"===Object.prototype.toString.call(e)}function i(e){var t,r;return!1!==o(e)&&(void 0===(t=e.constructor)||!1!==o(r=t.prototype)&&!1!==r.hasOwnProperty("isPrototypeOf"))}var c=r(9818),l=r(37798),d=r(52175),u=r(37557);const{GlobalStylesContext:p,cleanEmptyObject:m}=(0,u.U)(d.privateApis);function g(e,t){return a()(e,t,{isMergeableObject:i})}function f({children:e}){const t=function(){const[e,t,r]=function(){const{globalStylesId:e,isReady:t,settings:r,styles:s}=(0,c.useSelect)((e=>{const{getEditedEntityRecord:t,hasFinishedResolution:r}=e(l.store),n=e(l.store).__experimentalGetCurrentGlobalStylesId(),s=n?t("root","globalStyles",n):void 0;let a=!1;return r("__experimentalGetCurrentGlobalStylesId")&&(a=!n||r("getEditedEntityRecord",["root","globalStyles",n])),{globalStylesId:n,isReady:a,settings:s?.settings,styles:s?.styles}}),[]),{getEditedEntityRecord:a}=(0,c.useSelect)(l.store),{editEntityRecord:o}=(0,c.useDispatch)(l.store);return[t,(0,n.useMemo)((()=>({settings:null!=r?r:{},styles:null!=s?s:{}})),[r,s]),(0,n.useCallback)(((t,r={})=>{var n,s;const i=a("root","globalStyles",e),c=t({styles:null!==(n=i?.styles)&&void 0!==n?n:{},settings:null!==(s=i?.settings)&&void 0!==s?s:{}});o("root","globalStyles",e,{styles:m(c.styles)||{},settings:m(c.settings)||{}},r)}),[e])]}(),[s,a]=function(){const e=(0,c.useSelect)((e=>e(l.store).__experimentalGetCurrentThemeBaseGlobalStyles()),[]);return[!!e,e]}(),o=(0,n.useMemo)((()=>a&&t?g(a,t):{}),[t,a]);return(0,n.useMemo)((()=>({isReady:e&&s,user:t,base:a,merged:o,setUserConfig:r})),[o,t,a,r,e,s])}();return t.isReady?(0,n.createElement)(p.Provider,{value:t},e):null}},43302:(e,t,r)=>{"use strict";r.d(t,{T:()=>i});var n=r(69307),s=r(9818),a=r(37798),o=r(76989);function i(){const{isLoaded:e}=(0,o.Z)(),[t,r]=(0,n.useState)(!1),i=(0,s.useSelect)((e=>{const r=e(a.store).hasResolvingSelectors();return!t&&!r}),[t]);return(0,n.useEffect)((()=>{let e;return t||(e=setTimeout((()=>{r(!0)}),1e4)),()=>{clearTimeout(e)}}),[t]),(0,n.useEffect)((()=>{if(i){const e=setTimeout((()=>{r(!0)}),1e3);return()=>{clearTimeout(e)}}}),[i]),!t||!e}},3262:(e,t,r)=>{"use strict";r.d(t,{Z:()=>i});var n=r(69307),s=r(83849),a=r.n(s),o=r(55609);function i(e){return(0,n.createElement)(o.Button,{...e,className:a()("edit-site-sidebar-button",e.className)})}},38536:(e,t,r)=>{"use strict";r.d(t,{Z:()=>p});var n=r(69307),s=r(83849),a=r.n(s),o=r(55609),i=r(65736);const c=function({icon:e,size:t=24,...r}){return(0,n.cloneElement)(e,{width:t,height:t,...r})};var l=r(70444);const d=(0,n.createElement)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(l.Path,{d:"m13.1 16-3.4-4 3.4-4 1.1 1-2.6 3 2.6 3-1.1 1z"})),u=(0,n.createElement)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(l.Path,{d:"M10.8622 8.04053L14.2805 12.0286L10.8622 16.0167L9.72327 15.0405L12.3049 12.0286L9.72327 9.01672L10.8622 8.04053Z"}));function p({className:e,icon:t,withChevron:r=!1,suffix:s,children:l,...p}){return(0,n.createElement)(o.__experimentalItem,{className:a()("edit-site-sidebar-navigation-item",{"with-suffix":!r&&s},e),...p},(0,n.createElement)(o.__experimentalHStack,{justify:"flex-start"},t&&(0,n.createElement)(c,{style:{fill:"currentcolor"},icon:t,size:24}),(0,n.createElement)(o.FlexBlock,null,l),r&&(0,n.createElement)(c,{icon:(0,i.isRTL)()?d:u,className:"edit-site-sidebar-navigation-item__drilldown-indicator",size:24}),!r&&s))}},40800:(e,t,r)=>{"use strict";r.d(t,{Z:()=>p});var n=r(69307),s=r(83849),a=r.n(s),o=r(9818),i=r(55609),c=r(65736),l=r(70444);const d=(0,n.createElement)(l.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"-2 -2 24 24"},(0,n.createElement)(l.Path,{d:"M20 10c0-5.51-4.49-10-10-10C4.48 0 0 4.49 0 10c0 5.52 4.48 10 10 10 5.51 0 10-4.48 10-10zM7.78 15.37L4.37 6.22c.55-.02 1.17-.08 1.17-.08.5-.06.44-1.13-.06-1.11 0 0-1.45.11-2.37.11-.18 0-.37 0-.58-.01C4.12 2.69 6.87 1.11 10 1.11c2.33 0 4.45.87 6.05 2.34-.68-.11-1.65.39-1.65 1.58 0 .74.45 1.36.9 2.1.35.61.55 1.36.55 2.46 0 1.49-1.4 5-1.4 5l-3.03-8.37c.54-.02.82-.17.82-.17.5-.05.44-1.25-.06-1.22 0 0-1.44.12-2.38.12-.87 0-2.33-.12-2.33-.12-.5-.03-.56 1.2-.06 1.22l.92.08 1.26 3.41zM17.41 10c.24-.64.74-1.87.43-4.25.7 1.29 1.05 2.71 1.05 4.25 0 3.29-1.73 6.24-4.4 7.78.97-2.59 1.94-5.2 2.92-7.78zM6.1 18.09C3.12 16.65 1.11 13.53 1.11 10c0-1.3.23-2.48.72-3.59C3.25 10.3 4.67 14.2 6.1 18.09zm4.03-6.63l2.58 6.98c-.86.29-1.76.45-2.71.45-.79 0-1.57-.11-2.29-.33.81-2.38 1.62-4.74 2.42-7.1z"}));var u=r(37798);const p=function({className:e}){const{isRequestingSite:t,siteIconUrl:r}=(0,o.useSelect)((e=>{const{getEntityRecord:t}=e(u.store),r=t("root","__unstableBase",void 0);return{isRequestingSite:!r,siteIconUrl:r?.site_icon_url}}),[]);if(t&&!r)return(0,n.createElement)("div",{className:"edit-site-site-icon__image"});const s=r?(0,n.createElement)("img",{className:"edit-site-site-icon__image",alt:(0,c.__)("Site Icon"),src:r}):(0,n.createElement)(i.Icon,{className:"edit-site-site-icon__icon",size:"48px",icon:d});return(0,n.createElement)("div",{className:a()(e,"edit-site-site-icon")},s)}},17547:(e,t,r)=>{"use strict";r.d(t,{Z:()=>u});var n=r(69307),s=r(9818),a=r(37798),o=r(86802),i=r(83357),c=r(37557),l=r(32334);const{useLocation:d}=(0,c.U)(o.privateApis);function u(){const{params:e}=d(),{postType:t}=e,r=(0,l.Z)(e?.postId),{isRequestingSite:o,homepageId:c,url:u}=(0,s.useSelect)((e=>{const{getSite:t,getUnstableBase:r}=e(a.store),n=t(),s=r();return{isRequestingSite:!s,homepageId:"page"===n?.show_on_front?n.page_on_front:null,url:s?.home}}),[]),{setEditedEntity:p,setTemplate:m,setTemplatePart:g,setPage:f,setNavigationMenu:y}=(0,s.useDispatch)(i.h);(0,n.useEffect)((()=>{if(t&&r)switch(t){case"wp_template":m(r);break;case"wp_template_part":g(r);break;case"wp_navigation":y(r);break;case"wp_block":p(t,r);break;default:f({context:{postType:t,postId:r}})}else c?f({context:{postType:"page",postId:Number(c)}}):o||f({path:u})}),[u,r,t,c,o,p,f,m,g,y])}},76989:(e,t,r)=>{"use strict";r.d(t,{Z:()=>l});var n=r(9818),s=r(37798),a=r(12238),o=r(22629),i=r(83357),c=r(32334);function l(e,t){const{record:r,title:l,description:d,isLoaded:u,icon:p}=(0,n.useSelect)((r=>{const{getEditedPostType:n,getEditedPostId:o}=r(i.h),{getEditedEntityRecord:l,hasFinishedResolution:d}=r(s.store),{__experimentalGetTemplateInfo:u}=r(a.store),p=null!=e?e:n();let m=null!=t?t:o();m=(0,c.Z)(m,p);const g=l("postType",p,m),f=m&&d("getEditedEntityRecord",["postType",p,m]),y=u(g);return{record:g,title:y.title,description:y.description,isLoaded:f,icon:y.icon}}),[e,t]);return{isLoaded:u,icon:p,record:r,getTitle:()=>l?(0,o.decodeEntities)(l):null,getDescription:()=>d?(0,o.decodeEntities)(d):null}}},83357:(e,t,r)=>{"use strict";r.d(t,{h:()=>Pe});var n={};r.r(n),r.d(n,{__experimentalSetPreviewDeviceType:()=>T,addTemplate:()=>I,closeGeneralSidebar:()=>j,openGeneralSidebar:()=>U,openNavigationPanelToMenu:()=>D,removeTemplate:()=>P,revertTemplate:()=>$,setEditedEntity:()=>F,setEditedPostContext:()=>M,setHasPageContentFocus:()=>H,setHomeTemplateId:()=>k,setIsInserterOpened:()=>V,setIsListViewOpened:()=>z,setIsNavigationPanelOpened:()=>L,setIsSaveViewOpened:()=>G,setNavigationMenu:()=>N,setNavigationPanelActiveMenu:()=>R,setPage:()=>O,setTemplate:()=>x,setTemplatePart:()=>A,switchEditorMode:()=>Z,toggleFeature:()=>S,updateSettings:()=>B});var s={};r.r(s),r.d(s,{setCanvasMode:()=>W,setEditorCanvasContainerView:()=>q});var a={};r.r(a),r.d(a,{__experimentalGetInsertionPoint:()=>ge,__experimentalGetPreviewDeviceType:()=>se,__unstableGetPreference:()=>re,getCanUserCreateMedia:()=>ae,getCurrentTemplateNavigationPanelSubMenu:()=>_e,getCurrentTemplateTemplateParts:()=>he,getEditedPostContext:()=>ue,getEditedPostId:()=>de,getEditedPostType:()=>le,getEditorMode:()=>ve,getHomeTemplateId:()=>ce,getNavigationPanelActiveMenu:()=>Ee,getPage:()=>pe,getReusableBlocks:()=>oe,getSettings:()=>ie,hasPageContentFocus:()=>we,isFeatureActive:()=>ne,isInserterOpened:()=>me,isListViewOpened:()=>fe,isNavigationOpened:()=>Ce,isPage:()=>be,isSaveViewOpened:()=>ye});var o={};r.r(o),r.d(o,{getCanvasMode:()=>Se,getEditorCanvasContainerView:()=>Te});var i=r(9818);const c=(0,i.combineReducers)({deviceType:function(e="Desktop",t){return"SET_PREVIEW_DEVICE_TYPE"===t.type?t.deviceType:e},settings:function(e={},t){return"UPDATE_SETTINGS"===t.type?{...e,...t.settings}:e},editedPost:function(e={},t){switch(t.type){case"SET_EDITED_POST":return{postType:t.postType,id:t.id,context:t.context};case"SET_EDITED_POST_CONTEXT":return{...e,context:t.context}}return e},blockInserterPanel:function(e=!1,t){switch(t.type){case"SET_IS_LIST_VIEW_OPENED":return!t.isOpen&&e;case"SET_IS_INSERTER_OPENED":return t.value;case"SET_CANVAS_MODE":return!1}return e},listViewPanel:function(e=!1,t){switch(t.type){case"SET_IS_INSERTER_OPENED":return!t.value&&e;case"SET_IS_LIST_VIEW_OPENED":return t.isOpen;case"SET_CANVAS_MODE":return!1}return e},saveViewPanel:function(e=!1,t){switch(t.type){case"SET_IS_SAVE_VIEW_OPENED":return t.isOpen;case"SET_CANVAS_MODE":return!1}return e},canvasMode:function(e="init",t){return"SET_CANVAS_MODE"===t.type?t.mode:e},editorCanvasContainerView:function(e,t){return"SET_EDITOR_CANVAS_CONTAINER_VIEW"===t.type?t.view:e},hasPageContentFocus:function(e=!1,t){switch(t.type){case"SET_EDITED_POST":return!!t.context?.postId;case"SET_HAS_PAGE_CONTENT_FOCUS":return t.hasPageContentFocus}return e}});var l=r(86989),d=r.n(l),u=r(4981),p=r(37180),m=r.n(p),g=r(96483),f=r(65736),y=r(53961),h=r(37798),v=r(9480),_=r(52175),E=r(25158),C=r(55815),b=r(22629);const w="core/edit-site";function S(e){return function({registry:t}){m()("select( 'core/edit-site' ).toggleFeature( featureName )",{since:"6.0",alternative:"select( 'core/preferences').toggle( 'core/edit-site', featureName )"}),t.dispatch(C.store).toggle("core/edit-site",e)}}function T(e){return{type:"SET_PREVIEW_DEVICE_TYPE",deviceType:e}}const x=(e,t)=>async({dispatch:r,registry:n})=>{if(!t)try{const r=await n.resolveSelect(h.store).getEntityRecord("postType","wp_template",e);t=r?.slug}catch(e){}r({type:"SET_EDITED_POST",postType:"wp_template",id:e,context:{templateSlug:t}})},I=e=>async({dispatch:t,registry:r})=>{const n=await r.dispatch(h.store).saveEntityRecord("postType","wp_template",e);e.content&&r.dispatch(h.store).editEntityRecord("postType","wp_template",n.id,{blocks:(0,u.parse)(e.content)},{undoIgnore:!0}),t({type:"SET_EDITED_POST",postType:"wp_template",id:n.id,context:{templateSlug:n.slug}})},P=e=>async({registry:t})=>{try{await t.dispatch(h.store).deleteEntityRecord("postType",e.type,e.id,{force:!0});const r=t.select(h.store).getLastEntityDeleteError("postType",e.type,e.id);if(r)throw r;const n="string"==typeof e.title?e.title:e.title?.rendered;t.dispatch(y.store).createSuccessNotice((0,f.sprintf)((0,f.__)('"%s" deleted.'),(0,b.decodeEntities)(n)),{type:"snackbar",id:"site-editor-template-deleted-success"})}catch(e){const r=e.message&&"unknown_error"!==e.code?e.message:(0,f.__)("An error occurred while deleting the template.");t.dispatch(y.store).createErrorNotice(r,{type:"snackbar"})}};function A(e){return{type:"SET_EDITED_POST",postType:"wp_template_part",id:e}}function N(e){return{type:"SET_EDITED_POST",postType:"wp_navigation",id:e}}function F(e,t){return{type:"SET_EDITED_POST",postType:e,id:t}}function k(){return m()("dispatch( 'core/edit-site' ).setHomeTemplateId",{since:"6.2",version:"6.4"}),{type:"NOTHING"}}function M(e){return{type:"SET_EDITED_POST_CONTEXT",context:e}}const O=e=>async({dispatch:t,registry:r})=>{if(!e.path&&e.context?.postId){const t=await r.resolveSelect(h.store).getEntityRecord("postType",e.context.postType||"post",e.context.postId);e.path=(0,g.getPathAndQueryString)(t?.link)}const n=await r.resolveSelect(h.store).__experimentalGetTemplateForLink(e.path);if(n)return t({type:"SET_EDITED_POST",postType:"wp_template",id:n.id,context:{...e.context,templateSlug:n.slug}}),n.id};function R(){return m()("dispatch( 'core/edit-site' ).setNavigationPanelActiveMenu",{since:"6.2",version:"6.4"}),{type:"NOTHING"}}function D(){return m()("dispatch( 'core/edit-site' ).openNavigationPanelToMenu",{since:"6.2",version:"6.4"}),{type:"NOTHING"}}function L(){return m()("dispatch( 'core/edit-site' ).setIsNavigationPanelOpened",{since:"6.2",version:"6.4"}),{type:"NOTHING"}}function V(e){return{type:"SET_IS_INSERTER_OPENED",value:e}}function B(e){return{type:"UPDATE_SETTINGS",settings:e}}function z(e){return{type:"SET_IS_LIST_VIEW_OPENED",isOpen:e}}function G(e){return{type:"SET_IS_SAVE_VIEW_OPENED",isOpen:e}}const $=(e,{allowUndo:t=!0}={})=>async({registry:r})=>{const n="edit-site-template-reverted";if(r.dispatch(y.store).removeNotice(n),function(e){return!!e&&"custom"===e?.source&&e?.has_theme_file}(e))try{const s=r.select(h.store).getEntityConfig("postType",e.type);if(!s)return void r.dispatch(y.store).createErrorNotice((0,f.__)("The editor has encountered an unexpected error. Please reload."),{type:"snackbar"});const a=(0,g.addQueryArgs)(`${s.baseURL}/${e.id}`,{context:"edit",source:"theme"}),o=await d()({path:a});if(!o)return void r.dispatch(y.store).createErrorNotice((0,f.__)("The editor has encountered an unexpected error. Please reload."),{type:"snackbar"});const i=({blocks:e=[]})=>(0,u.__unstableSerializeAndClean)(e),c=r.select(h.store).getEditedEntityRecord("postType",e.type,e.id);r.dispatch(h.store).editEntityRecord("postType",e.type,e.id,{content:i,blocks:c.blocks,source:"custom"},{undoIgnore:!0});const l=(0,u.parse)(o?.content?.raw);if(r.dispatch(h.store).editEntityRecord("postType",e.type,o.id,{content:i,blocks:l,source:"theme"}),t){const t=()=>{r.dispatch(h.store).editEntityRecord("postType",e.type,c.id,{content:i,blocks:c.blocks,source:"custom"})};r.dispatch(y.store).createSuccessNotice((0,f.__)("Template reverted."),{type:"snackbar",id:n,actions:[{label:(0,f.__)("Undo"),onClick:t}]})}}catch(e){const t=e.message&&"unknown_error"!==e.code?e.message:(0,f.__)("Template revert failed. Please reload.");r.dispatch(y.store).createErrorNotice(t,{type:"snackbar"})}else r.dispatch(y.store).createErrorNotice((0,f.__)("This template is not revertable."),{type:"snackbar"})},U=e=>({registry:t})=>{t.dispatch(v.h).enableComplementaryArea(w,e)},j=()=>({registry:e})=>{e.dispatch(v.h).disableComplementaryArea(w)},Z=e=>({registry:t})=>{t.dispatch("core/preferences").set("core/edit-site","editorMode",e),"visual"!==e&&t.dispatch(_.store).clearSelectedBlock(),"visual"===e?(0,E.speak)((0,f.__)("Visual editor selected"),"assertive"):"text"===e&&(0,E.speak)((0,f.__)("Code editor selected"),"assertive")},H=e=>({dispatch:t,registry:r})=>{e&&r.dispatch(_.store).clearSelectedBlock(),t({type:"SET_HAS_PAGE_CONTENT_FOCUS",hasPageContentFocus:e})},W=e=>({registry:t,dispatch:r,select:n})=>{t.dispatch(_.store).__unstableSetEditorMode("edit"),r({type:"SET_CANVAS_MODE",mode:e}),"edit"===e&&t.select(C.store).get("core/edit-site","showListViewByDefault")&&r.setIsListViewOpened(!0),"view"===e&&n.isPage()&&r.setHasPageContentFocus(!0)},q=e=>({dispatch:t})=>{t({type:"SET_EDITOR_CANVAS_CONTAINER_VIEW",view:e})};var Y={};function J(e){return[e]}function X(e,t,r){var n;if(e.length!==t.length)return!1;for(n=r;n({...e,[t.id]:t})),{}):{},n=[],s=[...e];for(;s.length;){const{innerBlocks:e,...t}=s.shift();if(s.unshift(...e),(0,u.isTemplatePart)(t)){const{attributes:{theme:e,slug:s}}=t,a=r[`${e}//${s}`];a&&n.push({templatePart:a,block:t})}}return n})),re=(0,i.createRegistrySelector)((e=>(t,r)=>e(C.store).get("core/edit-site",r)));function ne(e,t){return m()("select( 'core/edit-site' ).isFeatureActive",{since:"6.0",alternative:"select( 'core/preferences' ).get"}),!!re(e,t)}function se(e){return e.deviceType}const ae=(0,i.createRegistrySelector)((e=>()=>e(h.store).canUser("create","media"))),oe=(0,i.createRegistrySelector)((e=>()=>"web"===K.Platform.OS?e(h.store).getEntityRecords("postType","wp_block",{per_page:-1}):[])),ie=function(e,t){var r,n=(e=>[ae(e),e.settings,re(e,"focusMode"),re(e,"distractionFree"),re(e,"fixedToolbar"),re(e,"keepCaretInsideBlock"),re(e,"showIconLabels"),oe(e),le(e)])||J;function s(e){var t,n,s,a,o,i=r,c=!0;for(t=0;t{const r={...e.settings,outlineMode:!0,focusMode:!!re(e,"focusMode"),isDistractionFree:!!re(e,"distractionFree"),hasFixedToolbar:!!re(e,"fixedToolbar"),keepCaretInsideBlock:!!re(e,"keepCaretInsideBlock"),showIconLabels:!!re(e,"showIconLabels"),__experimentalSetIsInserterOpened:t,__experimentalReusableBlocks:oe(e),__experimentalPreferPatternsOnRoot:"wp_template"===le(e)};return ae(e)?(r.mediaUpload=({onError:t,...r})=>{(0,Q.uploadMedia)({wpAllowedMimeTypes:e.settings.allowedMimeTypes,onError:({message:e})=>t(e),...r})},r):r}));function ce(){m()("select( 'core/edit-site' ).getHomeTemplateId",{since:"6.2",version:"6.4"})}function le(e){return e.editedPost.postType}function de(e){return e.editedPost.id}function ue(e){return e.editedPost.context}function pe(e){return{context:e.editedPost.context}}function me(e){return!!e.blockInserterPanel}const ge=(0,i.createRegistrySelector)((e=>t=>{if("object"==typeof t.blockInserterPanel){const{rootClientId:e,insertionIndex:r,filterValue:n}=t.blockInserterPanel;return{rootClientId:e,insertionIndex:r,filterValue:n}}if(we(t)){const[t]=e(_.store).__experimentalGetGlobalBlocksByName("core/post-content");if(t)return{rootClientId:t,insertionIndex:void 0,filterValue:void 0}}return{rootClientId:void 0,insertionIndex:void 0,filterValue:void 0}}));function fe(e){return e.listViewPanel}function ye(e){return e.saveViewPanel}const he=(0,i.createRegistrySelector)((e=>t=>{const r=le(t),n=de(t),s=e(h.store).getEditedEntityRecord("postType",r,n),a=e(h.store).getEntityRecords("postType","wp_template_part",{per_page:-1});return te(s.blocks,a)}));function ve(e){return re(e,"editorMode")}function _e(){m()("dispatch( 'core/edit-site' ).getCurrentTemplateNavigationPanelSubMenu",{since:"6.2",version:"6.4"})}function Ee(){m()("dispatch( 'core/edit-site' ).getNavigationPanelActiveMenu",{since:"6.2",version:"6.4"})}function Ce(){m()("dispatch( 'core/edit-site' ).isNavigationOpened",{since:"6.2",version:"6.4"})}function be(e){return!!e.editedPost.context?.postId}function we(e){return!!be(e)&&e.hasPageContentFocus}function Se(e){return e.canvasMode}function Te(e){return e.editorCanvasContainerView}var xe=r(37557);const Ie={reducer:c,actions:n,selectors:a},Pe=(0,i.createReduxStore)(w,Ie);(0,i.register)(Pe),(0,xe.U)(Pe).registerPrivateSelectors(o),(0,xe.U)(Pe).registerPrivateActions(s)},32334:(e,t,r)=>{"use strict";function n(e){return/^\s*\d+\s*$/.test(e)&&(e=Number(e)),e}r.d(t,{Z:()=>n})},83619:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});var n=r(69307),s=r(70444);const a=(0,n.createElement)(s.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(s.Path,{d:"M10.6 6L9.4 7l4.6 5-4.6 5 1.2 1 5.4-6z"}))},68591:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});var n=r(69307),s=r(70444);const a=(0,n.createElement)(s.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,n.createElement)(s.Path,{d:"M17.2 10.9c-.5-1-1.2-2.1-2.1-3.2-.6-.9-1.3-1.7-2.1-2.6L12 4l-1 1.1c-.6.9-1.3 1.7-2 2.6-.8 1.2-1.5 2.3-2 3.2-.6 1.2-1 2.2-1 3 0 3.4 2.7 6.1 6.1 6.1s6.1-2.7 6.1-6.1c0-.8-.3-1.8-1-3zm-5.1 7.6c-2.5 0-4.6-2.1-4.6-4.6 0-.3.1-1 .8-2.3.5-.9 1.1-1.9 2-3.1.7-.9 1.3-1.7 1.8-2.3.7.8 1.3 1.6 1.8 2.3.8 1.1 1.5 2.2 2 3.1.7 1.3.8 2 .8 2.3 0 2.5-2.1 4.6-4.6 4.6z"}))},41890:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});var n=r(69307),s=r(70444);const a=(0,n.createElement)(s.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(s.Path,{fillRule:"evenodd",d:"M18 5.5h-8v8h8.5V6a.5.5 0 00-.5-.5zm-9.5 8h-3V6a.5.5 0 01.5-.5h2.5v8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z"}))},28897:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});var n=r(69307),s=r(70444);const a=(0,n.createElement)(s.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(s.Path,{d:"M18.5 10.5H10v8h8a.5.5 0 00.5-.5v-7.5zm-10 0h-3V18a.5.5 0 00.5.5h2.5v-8zM6 4h12a2 2 0 012 2v12a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2z"}))},58358:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});var n=r(69307),s=r(70444);const a=(0,n.createElement)(s.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(s.Path,{d:"M12 4L4 7.9V20h16V7.9L12 4zm6.5 14.5H14V13h-4v5.5H5.5V8.8L12 5.7l6.5 3.1v9.7z"}))},85797:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});var n=r(69307),s=r(70444);const a=(0,n.createElement)(s.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(s.Path,{d:"M13 19h-2v-2h2v2zm0-6h-2v-2h2v2zm0-6h-2V5h2v2z"}))},63623:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});var n=r(69307),s=r(70444);const a=(0,n.createElement)(s.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(s.Path,{d:"M12 3c-5 0-9 4-9 9s4 9 9 9 9-4 9-9-4-9-9-9zm0 1.5c4.1 0 7.5 3.4 7.5 7.5v.1c-1.4-.8-3.3-1.7-3.4-1.8-.2-.1-.5-.1-.8.1l-2.9 2.1L9 11.3c-.2-.1-.4 0-.6.1l-3.7 2.2c-.1-.5-.2-1-.2-1.5 0-4.2 3.4-7.6 7.5-7.6zm0 15c-3.1 0-5.7-1.9-6.9-4.5l3.7-2.2 3.5 1.2c.2.1.5 0 .7-.1l2.9-2.1c.8.4 2.5 1.2 3.5 1.9-.9 3.3-3.9 5.8-7.4 5.8z"}))},89690:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});var n=r(69307),s=r(70444);const a=(0,n.createElement)(s.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(s.Path,{d:"M6.9 7L3 17.8h1.7l1-2.8h4.1l1 2.8h1.7L8.6 7H6.9zm-.7 6.6l1.5-4.3 1.5 4.3h-3zM21.6 17c-.1.1-.2.2-.3.2-.1.1-.2.1-.4.1s-.3-.1-.4-.2c-.1-.1-.1-.3-.1-.6V12c0-.5 0-1-.1-1.4-.1-.4-.3-.7-.5-1-.2-.2-.5-.4-.9-.5-.4 0-.8-.1-1.3-.1s-1 .1-1.4.2c-.4.1-.7.3-1 .4-.2.2-.4.3-.6.5-.1.2-.2.4-.2.7 0 .3.1.5.2.8.2.2.4.3.8.3.3 0 .6-.1.8-.3.2-.2.3-.4.3-.7 0-.3-.1-.5-.2-.7-.2-.2-.4-.3-.6-.4.2-.2.4-.3.7-.4.3-.1.6-.1.8-.1.3 0 .6 0 .8.1.2.1.4.3.5.5.1.2.2.5.2.9v1.1c0 .3-.1.5-.3.6-.2.2-.5.3-.9.4-.3.1-.7.3-1.1.4-.4.1-.8.3-1.1.5-.3.2-.6.4-.8.7-.2.3-.3.7-.3 1.2 0 .6.2 1.1.5 1.4.3.4.9.5 1.6.5.5 0 1-.1 1.4-.3.4-.2.8-.6 1.1-1.1 0 .4.1.7.3 1 .2.3.6.4 1.2.4.4 0 .7-.1.9-.2.2-.1.5-.3.7-.4h-.3zm-3-.9c-.2.4-.5.7-.8.8-.3.2-.6.2-.8.2-.4 0-.6-.1-.9-.3-.2-.2-.3-.6-.3-1.1 0-.5.1-.9.3-1.2s.5-.5.8-.7c.3-.2.7-.3 1-.5.3-.1.6-.3.7-.6v3.4z"}))},23799:(e,t,r)=>{"use strict";r.d(t,{Z:()=>a});var n=r(69307),s=r(70444);const a=(0,n.createElement)(s.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(s.Path,{d:"M18.5 15v3.5H13V6.7l4.5 4.1 1-1.1-6.2-5.8-5.8 5.8 1 1.1 4-4v11.7h-6V15H4v5h16v-5z"}))},9480:(e,t,r)=>{"use strict";r.d(t,{v4:()=>m,XD:()=>u,h:()=>O});var n={};r.r(n),r.d(n,{closeModal:()=>I,disableComplementaryArea:()=>E,enableComplementaryArea:()=>_,openModal:()=>x,pinItem:()=>C,setDefaultComplementaryArea:()=>v,setFeatureDefaults:()=>T,setFeatureValue:()=>S,toggleFeature:()=>w,unpinItem:()=>b});var s={};r.r(s),r.d(s,{getActiveComplementaryArea:()=>P,isComplementaryAreaLoading:()=>A,isFeatureActive:()=>F,isItemPinned:()=>N,isModalActive:()=>k});var a=r(69307),o=r(83849),i=r.n(o),c=r(55609),l=r(65736),d=r(94333);function u({children:e,className:t,ariaLabel:r,as:n="div",...s}){return(0,a.createElement)(n,{className:i()("interface-navigable-region",t),"aria-label":r,role:"region",tabIndex:"-1",...s},e)}const p={hidden:{opacity:0},hover:{opacity:1,transition:{type:"tween",delay:.2,delayChildren:.2}},distractionFreeInactive:{opacity:1,transition:{delay:0}}},m=(0,a.forwardRef)((function({isDistractionFree:e,footer:t,header:r,editorNotices:n,sidebar:s,secondarySidebar:o,notices:m,content:g,actions:f,labels:y,className:h,enableRegionNavigation:v=!0,shortcuts:_},E){const C=(0,c.__unstableUseNavigateRegions)(_);!function(e){(0,a.useEffect)((()=>{const t=document&&document.querySelector(`html:not(.${e})`);if(t)return t.classList.toggle(e),()=>{t.classList.toggle(e)}}),[e])}("interface-interface-skeleton__html-container");const b={header:(0,l.__)("Header"),body:(0,l.__)("Content"),secondarySidebar:(0,l.__)("Block Library"),sidebar:(0,l.__)("Settings"),actions:(0,l.__)("Publish"),footer:(0,l.__)("Footer"),...y};return(0,a.createElement)("div",{...v?C:{},ref:(0,d.useMergeRefs)([E,v?C.ref:void 0]),className:i()(h,"interface-interface-skeleton",C.className,!!t&&"has-footer")},(0,a.createElement)("div",{className:"interface-interface-skeleton__editor"},!!r&&(0,a.createElement)(u,{as:c.__unstableMotion.div,className:"interface-interface-skeleton__header","aria-label":b.header,initial:e?"hidden":"distractionFreeInactive",whileHover:e?"hover":"distractionFreeInactive",animate:e?"hidden":"distractionFreeInactive",variants:p,transition:e?{type:"tween",delay:.8}:void 0},r),e&&(0,a.createElement)("div",{className:"interface-interface-skeleton__header"},n),(0,a.createElement)("div",{className:"interface-interface-skeleton__body"},!!o&&(0,a.createElement)(u,{className:"interface-interface-skeleton__secondary-sidebar",ariaLabel:b.secondarySidebar},o),!!m&&(0,a.createElement)("div",{className:"interface-interface-skeleton__notices"},m),(0,a.createElement)(u,{className:"interface-interface-skeleton__content",ariaLabel:b.body},g),!!s&&(0,a.createElement)(u,{className:"interface-interface-skeleton__sidebar",ariaLabel:b.sidebar},s),!!f&&(0,a.createElement)(u,{className:"interface-interface-skeleton__actions",ariaLabel:b.actions},f))),!!t&&(0,a.createElement)(u,{className:"interface-interface-skeleton__footer",ariaLabel:b.footer},t))}));var g=r(9818),f=r(37180),y=r.n(f),h=r(55815);const v=(e,t)=>({type:"SET_DEFAULT_COMPLEMENTARY_AREA",scope:e,area:t}),_=(e,t)=>({registry:r,dispatch:n})=>{t&&(r.select(h.store).get(e,"isComplementaryAreaVisible")||r.dispatch(h.store).set(e,"isComplementaryAreaVisible",!0),n({type:"ENABLE_COMPLEMENTARY_AREA",scope:e,area:t}))},E=e=>({registry:t})=>{t.select(h.store).get(e,"isComplementaryAreaVisible")&&t.dispatch(h.store).set(e,"isComplementaryAreaVisible",!1)},C=(e,t)=>({registry:r})=>{if(!t)return;const n=r.select(h.store).get(e,"pinnedItems");!0!==n?.[t]&&r.dispatch(h.store).set(e,"pinnedItems",{...n,[t]:!0})},b=(e,t)=>({registry:r})=>{if(!t)return;const n=r.select(h.store).get(e,"pinnedItems");r.dispatch(h.store).set(e,"pinnedItems",{...n,[t]:!1})};function w(e,t){return function({registry:r}){y()("dispatch( 'core/interface' ).toggleFeature",{since:"6.0",alternative:"dispatch( 'core/preferences' ).toggle"}),r.dispatch(h.store).toggle(e,t)}}function S(e,t,r){return function({registry:n}){y()("dispatch( 'core/interface' ).setFeatureValue",{since:"6.0",alternative:"dispatch( 'core/preferences' ).set"}),n.dispatch(h.store).set(e,t,!!r)}}function T(e,t){return function({registry:r}){y()("dispatch( 'core/interface' ).setFeatureDefaults",{since:"6.0",alternative:"dispatch( 'core/preferences' ).setDefaults"}),r.dispatch(h.store).setDefaults(e,t)}}function x(e){return{type:"OPEN_MODAL",name:e}}function I(){return{type:"CLOSE_MODAL"}}const P=(0,g.createRegistrySelector)((e=>(t,r)=>{const n=e(h.store).get(r,"isComplementaryAreaVisible");if(void 0!==n)return!1===n?null:t?.complementaryAreas?.[r]})),A=(0,g.createRegistrySelector)((e=>(t,r)=>{const n=e(h.store).get(r,"isComplementaryAreaVisible"),s=t?.complementaryAreas?.[r];return n&&void 0===s})),N=(0,g.createRegistrySelector)((e=>(t,r,n)=>{var s;return null===(s=e(h.store).get(r,"pinnedItems")?.[n])||void 0===s||s})),F=(0,g.createRegistrySelector)((e=>(t,r,n)=>(y()("select( 'core/interface' ).isFeatureActive( scope, featureName )",{since:"6.0",alternative:"select( 'core/preferences' ).get( scope, featureName )"}),!!e(h.store).get(r,n))));function k(e,t){return e.activeModal===t}const M=(0,g.combineReducers)({complementaryAreas:function(e={},t){switch(t.type){case"SET_DEFAULT_COMPLEMENTARY_AREA":{const{scope:r,area:n}=t;return e[r]?e:{...e,[r]:n}}case"ENABLE_COMPLEMENTARY_AREA":{const{scope:r,area:n}=t;return{...e,[r]:n}}}return e},activeModal:function(e=null,t){switch(t.type){case"OPEN_MODAL":return t.name;case"CLOSE_MODAL":return null}return e}}),O=(0,g.createReduxStore)("core/interface",{reducer:M,actions:n,selectors:s});(0,g.register)(O)},25516:(e,t,r)=>{t.formatArgs=function(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const r="color: "+this.color;t.splice(1,0,r,"color: inherit");let n=0,s=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(n++,"%c"===e&&(s=n))})),t.splice(s,0,r)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function(){let e;try{e=t.storage.getItem("debug")}catch(e){}return!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG),e},t.useColors=function(){return!("undefined"==typeof window||!window.process||"renderer"!==window.process.type&&!window.process.__nwjs)||("undefined"==typeof navigator||!navigator.userAgent||!navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},t.storage=function(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=r(90480)(t);const{formatters:n}=e.exports;n.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},90480:(e,t,r)=>{e.exports=function(e){function t(e){let r,s,a,o=null;function i(...e){if(!i.enabled)return;const n=i,s=Number(new Date),a=s-(r||s);n.diff=a,n.prev=r,n.curr=s,r=s,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let o=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((r,s)=>{if("%%"===r)return"%";o++;const a=t.formatters[s];if("function"==typeof a){const t=e[o];r=a.call(n,t),e.splice(o,1),o--}return r})),t.formatArgs.call(n,e),(n.log||t.log).apply(n,e)}return i.namespace=e,i.useColors=t.useColors(),i.color=t.selectColor(e),i.extend=n,i.destroy=t.destroy,Object.defineProperty(i,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==o?o:(s!==t.namespaces&&(s=t.namespaces,a=t.enabled(e)),a),set:e=>{o=e}}),"function"==typeof t.init&&t.init(i),i}function n(e,r){const n=t(this.namespace+(void 0===r?":":r)+e);return n.log=this.log,n}function s(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){const e=[...t.names.map(s),...t.skips.map(s).map((e=>"-"+e))].join(",");return t.enable(""),e},t.enable=function(e){let r;t.save(e),t.namespaces=e,t.names=[],t.skips=[];const n=("string"==typeof e?e:"").split(/[\s,]+/),s=n.length;for(r=0;r{t[r]=e[r]})),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let r=0;for(let t=0;t{"use strict";var t=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===r}(e)}(e)},r="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function n(e,t){return!1!==t.clone&&t.isMergeableObject(e)?i((r=e,Array.isArray(r)?[]:{}),e,t):e;var r}function s(e,t,r){return e.concat(t).map((function(e){return n(e,r)}))}function a(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return Object.propertyIsEnumerable.call(e,t)})):[]}(e))}function o(e,t){try{return t in e}catch(e){return!1}}function i(e,r,c){(c=c||{}).arrayMerge=c.arrayMerge||s,c.isMergeableObject=c.isMergeableObject||t,c.cloneUnlessOtherwiseSpecified=n;var l=Array.isArray(r);return l===Array.isArray(e)?l?c.arrayMerge(e,r,c):function(e,t,r){var s={};return r.isMergeableObject(e)&&a(e).forEach((function(t){s[t]=n(e[t],r)})),a(t).forEach((function(a){(function(e,t){return o(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))})(e,a)||(o(e,a)&&r.isMergeableObject(t[a])?s[a]=function(e,t){if(!t.customMerge)return i;var r=t.customMerge(e);return"function"==typeof r?r:i}(a,r)(e[a],t[a],r):s[a]=n(t[a],r))})),s}(e,r,c):n(r,c)}i.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,r){return i(e,r,t)}),{})};var c=i;e.exports=c},44247:e=>{var t=1e3,r=60*t,n=60*r,s=24*n;function a(e,t,r,n){var s=t>=1.5*r;return Math.round(e/r)+" "+n+(s?"s":"")}e.exports=function(e,o){o=o||{};var i,c,l=typeof e;if("string"===l&&e.length>0)return function(e){if(!((e=String(e)).length>100)){var a=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(a){var o=parseFloat(a[1]);switch((a[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*o;case"weeks":case"week":case"w":return 6048e5*o;case"days":case"day":case"d":return o*s;case"hours":case"hour":case"hrs":case"hr":case"h":return o*n;case"minutes":case"minute":case"mins":case"min":case"m":return o*r;case"seconds":case"second":case"secs":case"sec":case"s":return o*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return o;default:return}}}}(e);if("number"===l&&isFinite(e))return o.long?(i=e,(c=Math.abs(i))>=s?a(i,c,s,"day"):c>=n?a(i,c,n,"hour"):c>=r?a(i,c,r,"minute"):c>=t?a(i,c,t,"second"):i+" ms"):function(e){var a=Math.abs(e);return a>=s?Math.round(e/s)+"d":a>=n?Math.round(e/n)+"h":a>=r?Math.round(e/r)+"m":a>=t?Math.round(e/t)+"s":e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}}}]);
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/4894.js.LICENSE.txt b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/4894.js.LICENSE.txt
deleted file mode 100644
index fe4c1fe3..00000000
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/4894.js.LICENSE.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
- * is-plain-object
- *
- * Copyright (c) 2014-2017, Jon Schlinkert.
- * Released under the MIT License.
- */
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/5792.js b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/5792.js
index 17590c94..bbb2bfef 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/5792.js
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/5792.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunk_wcAdmin_webpackJsonp=globalThis.webpackChunk_wcAdmin_webpackJsonp||[]).push([[5792],{68589:(e,t,o)=>{o.d(t,{Z:()=>s});var r=o(69307),c=o(65736),n=o(55609),a=o(14812);const s=e=>{let{onCancel:t,onImport:o}=e;return(0,r.createElement)(n.Modal,{className:"woocommerce-products-load-sample-product-confirm-modal",overlayClassName:"woocommerce-products-load-sample-product-confirm-modal-overlay",title:(0,c.__)("Load sample products","woocommerce"),onRequestClose:t},(0,r.createElement)(a.Text,{className:"woocommerce-confirmation-modal__message"},(0,c.__)("We'll import images from Woo.com to set up your sample products.","woocommerce")),(0,r.createElement)("div",{className:"woocommerce-confirmation-modal-actions"},(0,r.createElement)(n.Button,{isSecondary:!0,onClick:t},(0,c.__)("Cancel","woocommerce")),(0,r.createElement)(n.Button,{isPrimary:!0,onClick:o},(0,c.__)("Import sample products","woocommerce"))))}},48451:(e,t,o)=>{o.d(t,{Z:()=>i});var r=o(69307),c=o(65736),n=o(55609),a=o(34928),s=o(14812);const i=()=>(0,r.createElement)(n.Modal,{className:"woocommerce-products-load-sample-product-modal",overlayClassName:"woocommerce-products-load-sample-product-modal-overlay",title:"",onRequestClose:()=>{}},(0,r.createElement)(a.Spinner,{color:"#007cba",size:48}),(0,r.createElement)(s.Text,{className:"woocommerce-load-sample-product-modal__title"},(0,c.__)("Loading sample products","woocommerce")),(0,r.createElement)(s.Text,{className:"woocommerce-load-sample-product-modal__description"},(0,c.__)("We are loading 9 sample products into your store","woocommerce")))},42896:(e,t,o)=>{o.d(t,{Z:()=>d});var r=o(65736),c=o(86989),n=o.n(c),a=o(67221),s=o(9818),i=o(69307),l=o(14599),m=o(31611);const d=e=>{let{redirectUrlAfterSuccess:t}=e;const[o,c]=(0,i.useState)(!1),{createNotice:d}=(0,s.useDispatch)("core/notices"),{recordCompletionTime:p}=(0,m.Z)("products");return{loadSampleProduct:async()=>{(0,l.recordEvent)("tasklist_add_product",{method:"sample_product"}),p(),c(!0);try{if(await n()({path:`${a.WC_ADMIN_NAMESPACE}/onboarding/tasks/import_sample_products`,method:"POST"}),t)return void(window.location.href=t)}catch(e){const t=e instanceof Error&&e.message?e.message:(0,r.__)("There was an error importing the sample products","woocommerce");d("error",t)}c(!1)},isLoadingSampleProducts:o}}},65792:(e,t,o)=>{o.r(t),o.d(t,{Products:()=>x});var r=o(69307),c=o(65736),n=o(72456),a=o(14812),s=o(98817),i=o(55609),l=o(74617),m=o(23374),d=o(86241),p=o(73224),u=o(14599),_=o(67221),w=o(9818),h=o(73463),k=o(70422),g=o(19460),E=o(25247),y=o(75283),f=o(86020),v=o(31611);const C=()=>{const{recordCompletionTime:e}=(0,v.Z)("products");return(0,r.createElement)("div",{className:"woocommerce-products-footer"},(0,r.createElement)(a.Text,{className:"woocommerce-products-footer__selling-somewhere-else"},"Are you already selling somewhere else?"),(0,r.createElement)(a.Text,{className:"woocommerce-products-footer__import-options"},(0,y.Z)({mixedString:(0,c.__)("{{importCSVLink}}Import your products from a CSV file{{/importCSVLink}}.","woocommerce"),components:{importCSVLink:(0,r.createElement)(f.Link,{onClick:()=>((0,u.recordEvent)("tasklist_add_product",{method:"import"}),e(),window.location.href=(0,l.getAdminLink)("edit.php?post_type=product&page=product_importer&wc_onboarding_active_task=products"),!1),href:"",type:"wc-admin"},(0,r.createElement)(r.Fragment,null))}})))};var b=o(48451),Z=o(42896),L=o(68589),S=o(82580);const T=e=>{let{isExpanded:t,onClick:o}=e;return(0,r.createElement)(i.Button,{className:"woocommerce-task-products__button-view-less-product-types",onClick:o},t?(0,c.__)("View less product types","woocommerce"):(0,c.__)("View more product types","woocommerce"),(0,r.createElement)(m.Z,{icon:t?d.Z:p.Z}))},x=()=>{const[e,t]=(0,r.useState)(!1),[o,n]=(0,r.useState)(!1),{isStoreInUS:s}=(0,w.useSelect)((e=>{const{getSettings:t}=e(_.SETTINGS_STORE_NAME),{general:o={}}=t("general"),r="string"==typeof o.woocommerce_default_country?o.woocommerce_default_country:"";return{isStoreInUS:"US"===(0,S.so)(r)}})),i=(0,k.r)((()=>{const e=(0,h.O3)("onboarding");return(null==e?void 0:e.profile)&&(null==e?void 0:e.profile.product_types)||["physical"]})()),{productTypes:m,isRequesting:d}=(0,g.Z)((0,k.Q)({exclude:s?[]:["subscription"]}),i),{recordCompletionTime:p}=(0,v.Z)("products"),y=(0,r.useMemo)((()=>m.map((e=>({...e,onClick:()=>{e.onClick(),p()}})))),[p,m]),{loadSampleProduct:f,isLoadingSampleProducts:x}=(0,Z.Z)({redirectUrlAfterSuccess:(0,l.getAdminLink)("edit.php?post_type=product&wc_onboarding_active_task=products")}),V=(0,r.useMemo)((()=>{const t=y.filter((e=>i.includes(e.key)));return e&&y.forEach((e=>!t.includes(e)&&t.push(e))),t}),[i,e,y]);return(0,r.createElement)("div",{className:"woocommerce-task-products"},(0,r.createElement)(a.Text,{variant:"title",as:"h2",className:"woocommerce-task-products__title"},(0,c.__)("What product do you want to add?","woocommerce")),(0,r.createElement)("div",{className:"woocommerce-product-content"},(0,r.createElement)(E.Z,{items:V,onClickLoadSampleProduct:()=>n(!0),showOtherOptions:e,isTaskListItemClicked:d}),(0,r.createElement)(T,{isExpanded:e,onClick:()=>{e||(0,u.recordEvent)("tasklist_view_more_product_types_click"),t(!e)}}),(0,r.createElement)(C,null)),x?(0,r.createElement)(b.Z,null):o&&(0,r.createElement)(L.Z,{onCancel:()=>{n(!1),(0,u.recordEvent)("tasklist_cancel_load_sample_products_click")},onImport:()=>{n(!1),f()}}))},V=()=>(0,r.createElement)(n.WooOnboardingTask,{id:"products"},(0,r.createElement)(x,null));(0,s.registerPlugin)("wc-admin-onboarding-task-products",{scope:"woocommerce-tasks",render:()=>(0,r.createElement)(V,null)})},25247:(e,t,o)=>{o.d(t,{Z:()=>d});var r=o(69307),c=o(65736),n=o(86020),a=o(14812),s=o(75283),i=o(74617),l=o(14599),m=o(31611);const d=e=>{let{items:t,onClickLoadSampleProduct:o,showOtherOptions:d=!0,isTaskListItemClicked:p=!1}=e;const{recordCompletionTime:u}=(0,m.Z)("products");return(0,r.createElement)("div",{className:"woocommerce-products-stack"},p&&(0,r.createElement)("div",{className:"woocommerce-stack__overlay-spinner"},(0,r.createElement)(n.Spinner,{className:"list-overlay"})),(0,r.createElement)(n.List,{items:t}),d&&(0,r.createElement)(a.Text,{className:"woocommerce-stack__other-options"},(0,s.Z)({mixedString:(0,c.__)("Can’t find your product type? {{sbLink}}Start Blank{{/sbLink}} or {{LspLink}}Load Sample Products{{/LspLink}} to see what they look like in your store.","woocommerce"),components:{sbLink:(0,r.createElement)(n.Link,{onClick:()=>((0,l.recordEvent)("tasklist_add_product",{method:"manually"}),u(),window.location.href=(0,i.getAdminLink)("post-new.php?post_type=product&wc_onboarding_active_task=products&tutorial=true"),!1),href:"",type:"wc-admin"},(0,r.createElement)(r.Fragment,null)),LspLink:(0,r.createElement)(n.Link,{href:"",type:"wc-admin",onClick:()=>(o(),!1)},(0,r.createElement)(r.Fragment,null))}})))}},19460:(e,t,o)=>{o.d(t,{Z:()=>u});var r=o(69307),c=o(14599),n=o(9818),a=o(67221),s=o(10431),i=o(74617),l=o(73516),m=o(34704),d=o(73463);const p=()=>{const{createProductFromTemplate:e}=(0,n.useDispatch)(a.ITEMS_STORE_NAME),[t,o]=(0,r.useState)(!1),c=window.wcAdminFeatures["new-product-management-experience"];return{createProductByType:async t=>{if("subscription"!==t){if(o(!0),"physical"===t||"variable"===t||"digital"===t){if(c)return void(0,s.navigateTo)({url:(0,s.getNewPath)({},"/add-product",{})});if("treatment"===(await(0,l.loadExperimentAssignment)("woocommerce_product_creation_experience_add_digital_202311_v1")).variationName){const e=(0,d.O3)("_feature_nonce");return void(window.location.href=(0,i.getAdminLink)(`post-new.php?post_type=product&product_block_editor=1&_feature_nonce=${e}`))}}try{const o=await e({template_name:t,status:"draft"},{_fields:["id"]});if(o&&o.id){const e=(0,i.getAdminLink)(`post.php?post=${o.id}&action=edit&wc_onboarding_active_task=products&tutorial=true`);return void(window.location.href=e)}throw new Error("Unexpected empty data response from server")}catch(e){(0,m.a)(e)}o(!1)}else window.location.href=(0,i.getAdminLink)("post-new.php?post_type=product&subscription_pointers=true")},isRequesting:t}},u=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],{onClick:o}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{createProductByType:n,isRequesting:a}=p(),s=(0,r.useMemo)((()=>e.map((e=>({...e,onClick:()=>{n(e.key),(0,c.recordEvent)("tasklist_add_product",{method:"product_template"}),(0,c.recordEvent)("tasklist_product_template_selection",{product_type:e.key,is_suggested:t.includes(e.key)}),"function"==typeof o&&o()}})))),[n]);return{productTypes:s,isRequesting:a}}},70422:(e,t,o)=>{o.d(t,{Q:()=>h,r:()=>k});var r=o(92819),c=o(69307),n=o(65736),a=o(90391),s=o(96898),i=o(7480),l=o(48349),m=o(23374),d=o(83619);const p=Object.freeze([{key:"physical",title:(0,n.__)("Physical product","woocommerce"),content:(0,n.__)("A tangible item that gets delivered to customers.","woocommerce"),before:(0,c.createElement)(a.Z,null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"digital",title:(0,n.__)("Digital product","woocommerce"),content:(0,n.__)("A digital product like service, downloadable book, music or video.","woocommerce"),before:(0,c.createElement)(s.Z,null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"variable",title:(0,n.__)("Variable product","woocommerce"),content:(0,n.__)("A product with variations like color or size.","woocommerce"),before:(0,c.createElement)(i.Z,null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"subscription",title:(0,n.__)("Subscription product","woocommerce"),content:(0,n.__)("Item that customers receive on a regular basis.","woocommerce"),before:(0,c.createElement)(l.Z,null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"grouped",title:(0,n.__)("Grouped product","woocommerce"),content:(0,n.__)("A collection of related products.","woocommerce"),before:(0,c.createElement)((()=>(0,c.createElement)("svg",{width:"25",height:"24",viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,c.createElement)("mask",{id:"mask0_1133_132667",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"2",y:"2",width:"21",height:"20"},(0,c.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M16.5 2.34497L10.84 7.99497V3.65497H2.84003V11.655H10.84V7.99497L16.5 13.655H12.84V21.655H20.84V13.655H16.5L22.16 7.99497L16.5 2.34497ZM19.33 8.00497L16.5 5.17497L13.67 8.00497L16.5 10.835L19.33 8.00497ZM8.84003 9.65497V5.65497H4.84003V9.65497H8.84003ZM18.84 15.655V19.655H14.84V15.655H18.84ZM8.84003 19.655V15.655H4.84003V19.655H8.84003ZM2.84003 13.655H10.84V21.655H2.84003V13.655Z",fill:"white"})),(0,c.createElement)("g",{mask:"url(#mask0_1133_132667)"},(0,c.createElement)("rect",{x:"0.5",width:"24",height:"24"})))),null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"external",title:(0,n.__)("External product","woocommerce"),content:(0,n.__)("Link a product to an external website.","woocommerce"),before:(0,c.createElement)((()=>(0,c.createElement)("svg",{width:"25",height:"24",viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,c.createElement)("mask",{id:"mask0_1133_132681",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"2",y:"7",width:"21",height:"10"},(0,c.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.5 15H7.5C5.85 15 4.5 13.65 4.5 12C4.5 10.35 5.85 9 7.5 9H11.5V7H7.5C4.74 7 2.5 9.24 2.5 12C2.5 14.76 4.74 17 7.5 17H11.5V15ZM17.5 7H13.5V9H17.5C19.15 9 20.5 10.35 20.5 12C20.5 13.65 19.15 15 17.5 15H13.5V17H17.5C20.26 17 22.5 14.76 22.5 12C22.5 9.24 20.26 7 17.5 7ZM16.5 11H8.5V13H16.5V11Z",fill:"white"})),(0,c.createElement)("g",{mask:"url(#mask0_1133_132681)"},(0,c.createElement)("rect",{x:"0.5",width:"24",height:"24"})))),null),after:(0,c.createElement)(m.Z,{icon:d.Z})}]),u=((0,n.__)("can’t decide?","woocommerce"),(0,n.__)("Load sample products and see what they look like in your store.","woocommerce"),(0,c.createElement)((()=>(0,c.createElement)("svg",{width:"25",height:"24",viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,c.createElement)("mask",{id:"mask0_1133_132689",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"5",y:"2",width:"15",height:"20"},(0,c.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.5 2C8.64 2 5.5 5.14 5.5 9C5.5 11.38 6.69 13.47 8.5 14.74V17C8.5 17.55 8.95 18 9.5 18H15.5C16.05 18 16.5 17.55 16.5 17V14.74C18.31 13.47 19.5 11.38 19.5 9C19.5 5.14 16.36 2 12.5 2ZM9.5 21C9.5 21.55 9.95 22 10.5 22H14.5C15.05 22 15.5 21.55 15.5 21V20H9.5V21ZM14.5 13.7L15.35 13.1C16.7 12.16 17.5 10.63 17.5 9C17.5 6.24 15.26 4 12.5 4C9.74 4 7.5 6.24 7.5 9C7.5 10.63 8.3 12.16 9.65 13.1L10.5 13.7V16H14.5V13.7Z",fill:"white"})),(0,c.createElement)("g",{mask:"url(#mask0_1133_132689)"},(0,c.createElement)("rect",{x:"0.5",width:"24",height:"24",fill:"#757575"})))),null),(0,c.createElement)(m.Z,{icon:d.Z}),Object.freeze({physical:["physical","variable","grouped"],subscriptions:["subscription"],downloads:["digital"],"physical,subscriptions":["physical","subscription"],"downloads,physical":["physical","digital"],"downloads,subscriptions":["digital","subscription"],"downloads,physical,subscriptions":["physical","digital","subscription"]})),_=u.physical,w=["physical","subscriptions","downloads"],h=function(){let{exclude:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e&&(null==e?void 0:e.length)>0?p.filter((t=>!e.includes(t.key))):[...p]},k=e=>{const t=(0,r.intersection)(e,w).sort().join(",");return u.hasOwnProperty(t)?u[t]:_}},31611:(e,t,o)=>{o.d(t,{Z:()=>a});var r=o(69307),c=o(14599),n=o(34374);const a=(e,t)=>{const o=(0,r.useRef)(t||window.performance.now());return{recordCompletionTime:()=>{(0,c.recordEvent)("task_completion_time",{task_name:e,time:(0,n.Jm)(window.performance.now()-o.current)})}}}}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunk_wcAdmin_webpackJsonp=globalThis.webpackChunk_wcAdmin_webpackJsonp||[]).push([[5792],{68589:(e,t,o)=>{o.d(t,{Z:()=>s});var r=o(69307),c=o(65736),n=o(55609),a=o(14812);const s=e=>{let{onCancel:t,onImport:o}=e;return(0,r.createElement)(n.Modal,{className:"woocommerce-products-load-sample-product-confirm-modal",overlayClassName:"woocommerce-products-load-sample-product-confirm-modal-overlay",title:(0,c.__)("Load sample products","woocommerce"),onRequestClose:t},(0,r.createElement)(a.Text,{className:"woocommerce-confirmation-modal__message"},(0,c.__)("We'll import images from woocommerce.com to set up your sample products.","woocommerce")),(0,r.createElement)("div",{className:"woocommerce-confirmation-modal-actions"},(0,r.createElement)(n.Button,{isSecondary:!0,onClick:t},(0,c.__)("Cancel","woocommerce")),(0,r.createElement)(n.Button,{isPrimary:!0,onClick:o},(0,c.__)("Import sample products","woocommerce"))))}},48451:(e,t,o)=>{o.d(t,{Z:()=>i});var r=o(69307),c=o(65736),n=o(55609),a=o(34928),s=o(14812);const i=()=>(0,r.createElement)(n.Modal,{className:"woocommerce-products-load-sample-product-modal",overlayClassName:"woocommerce-products-load-sample-product-modal-overlay",title:"",onRequestClose:()=>{}},(0,r.createElement)(a.Spinner,{color:"#007cba",size:48}),(0,r.createElement)(s.Text,{className:"woocommerce-load-sample-product-modal__title"},(0,c.__)("Loading sample products","woocommerce")),(0,r.createElement)(s.Text,{className:"woocommerce-load-sample-product-modal__description"},(0,c.__)("We are loading 9 sample products into your store","woocommerce")))},42896:(e,t,o)=>{o.d(t,{Z:()=>d});var r=o(65736),c=o(86989),n=o.n(c),a=o(67221),s=o(9818),i=o(69307),l=o(14599),m=o(31611);const d=e=>{let{redirectUrlAfterSuccess:t}=e;const[o,c]=(0,i.useState)(!1),{createNotice:d}=(0,s.useDispatch)("core/notices"),{recordCompletionTime:p}=(0,m.Z)("products");return{loadSampleProduct:async()=>{(0,l.recordEvent)("tasklist_add_product",{method:"sample_product"}),p(),c(!0);try{if(await n()({path:`${a.WC_ADMIN_NAMESPACE}/onboarding/tasks/import_sample_products`,method:"POST"}),t)return void(window.location.href=t)}catch(e){const t=e instanceof Error&&e.message?e.message:(0,r.__)("There was an error importing the sample products","woocommerce");d("error",t)}c(!1)},isLoadingSampleProducts:o}}},65792:(e,t,o)=>{o.r(t),o.d(t,{Products:()=>x});var r=o(69307),c=o(65736),n=o(72456),a=o(14812),s=o(98817),i=o(55609),l=o(74617),m=o(23374),d=o(86241),p=o(73224),u=o(14599),_=o(67221),w=o(9818),h=o(73463),k=o(70422),E=o(19460),g=o(25247),y=o(75283),f=o(86020),v=o(31611);const C=()=>{const{recordCompletionTime:e}=(0,v.Z)("products");return(0,r.createElement)("div",{className:"woocommerce-products-footer"},(0,r.createElement)(a.Text,{className:"woocommerce-products-footer__selling-somewhere-else"},"Are you already selling somewhere else?"),(0,r.createElement)(a.Text,{className:"woocommerce-products-footer__import-options"},(0,y.Z)({mixedString:(0,c.__)("{{importCSVLink}}Import your products from a CSV file{{/importCSVLink}}.","woocommerce"),components:{importCSVLink:(0,r.createElement)(f.Link,{onClick:()=>((0,u.recordEvent)("tasklist_add_product",{method:"import"}),e(),window.location.href=(0,l.getAdminLink)("edit.php?post_type=product&page=product_importer&wc_onboarding_active_task=products"),!1),href:"",type:"wc-admin"},(0,r.createElement)(r.Fragment,null))}})))};var b=o(48451),Z=o(42896),L=o(68589),S=o(82580);const T=e=>{let{isExpanded:t,onClick:o}=e;return(0,r.createElement)(i.Button,{className:"woocommerce-task-products__button-view-less-product-types",onClick:o},t?(0,c.__)("View less product types","woocommerce"):(0,c.__)("View more product types","woocommerce"),(0,r.createElement)(m.Z,{icon:t?d.Z:p.Z}))},x=()=>{const[e,t]=(0,r.useState)(!1),[o,n]=(0,r.useState)(!1),{isStoreInUS:s}=(0,w.useSelect)((e=>{const{getSettings:t}=e(_.SETTINGS_STORE_NAME),{general:o={}}=t("general"),r="string"==typeof o.woocommerce_default_country?o.woocommerce_default_country:"";return{isStoreInUS:"US"===(0,S.so)(r)}})),i=(0,k.r)((()=>{const e=(0,h.O3)("onboarding");return(null==e?void 0:e.profile)&&(null==e?void 0:e.profile.product_types)||["physical"]})()),{productTypes:m,isRequesting:d}=(0,E.Z)((0,k.Q)({exclude:s?[]:["subscription"]}),i),{recordCompletionTime:p}=(0,v.Z)("products"),y=(0,r.useMemo)((()=>m.map((e=>({...e,onClick:()=>{e.onClick(),p()}})))),[p,m]),{loadSampleProduct:f,isLoadingSampleProducts:x}=(0,Z.Z)({redirectUrlAfterSuccess:(0,l.getAdminLink)("edit.php?post_type=product&wc_onboarding_active_task=products")}),V=(0,r.useMemo)((()=>{const t=y.filter((e=>i.includes(e.key)));return e&&y.forEach((e=>!t.includes(e)&&t.push(e))),t}),[i,e,y]);return(0,r.createElement)("div",{className:"woocommerce-task-products"},(0,r.createElement)(a.Text,{variant:"title",as:"h2",className:"woocommerce-task-products__title"},(0,c.__)("What product do you want to add?","woocommerce")),(0,r.createElement)("div",{className:"woocommerce-product-content"},(0,r.createElement)(g.Z,{items:V,onClickLoadSampleProduct:()=>n(!0),showOtherOptions:e,isTaskListItemClicked:d}),(0,r.createElement)(T,{isExpanded:e,onClick:()=>{e||(0,u.recordEvent)("tasklist_view_more_product_types_click"),t(!e)}}),(0,r.createElement)(C,null)),x?(0,r.createElement)(b.Z,null):o&&(0,r.createElement)(L.Z,{onCancel:()=>{n(!1),(0,u.recordEvent)("tasklist_cancel_load_sample_products_click")},onImport:()=>{n(!1),f()}}))},V=()=>(0,r.createElement)(n.WooOnboardingTask,{id:"products"},(0,r.createElement)(x,null));(0,s.registerPlugin)("wc-admin-onboarding-task-products",{scope:"woocommerce-tasks",render:()=>(0,r.createElement)(V,null)})},25247:(e,t,o)=>{o.d(t,{Z:()=>d});var r=o(69307),c=o(65736),n=o(86020),a=o(14812),s=o(75283),i=o(74617),l=o(14599),m=o(31611);const d=e=>{let{items:t,onClickLoadSampleProduct:o,showOtherOptions:d=!0,isTaskListItemClicked:p=!1}=e;const{recordCompletionTime:u}=(0,m.Z)("products");return(0,r.createElement)("div",{className:"woocommerce-products-stack"},p&&(0,r.createElement)("div",{className:"woocommerce-stack__overlay-spinner"},(0,r.createElement)(n.Spinner,{className:"list-overlay"})),(0,r.createElement)(n.List,{items:t}),d&&(0,r.createElement)(a.Text,{className:"woocommerce-stack__other-options"},(0,s.Z)({mixedString:(0,c.__)("Can’t find your product type? {{sbLink}}Start Blank{{/sbLink}} or {{LspLink}}Load Sample Products{{/LspLink}} to see what they look like in your store.","woocommerce"),components:{sbLink:(0,r.createElement)(n.Link,{onClick:()=>((0,l.recordEvent)("tasklist_add_product",{method:"manually"}),u(),window.location.href=(0,i.getAdminLink)("post-new.php?post_type=product&wc_onboarding_active_task=products&tutorial=true"),!1),href:"",type:"wc-admin"},(0,r.createElement)(r.Fragment,null)),LspLink:(0,r.createElement)(n.Link,{href:"",type:"wc-admin",onClick:()=>(o(),!1)},(0,r.createElement)(r.Fragment,null))}})))}},19460:(e,t,o)=>{o.d(t,{Z:()=>u});var r=o(69307),c=o(14599),n=o(9818),a=o(67221),s=o(10431),i=o(74617),l=o(73516),m=o(34704),d=o(73463);const p=()=>{const{createProductFromTemplate:e}=(0,n.useDispatch)(a.ITEMS_STORE_NAME),[t,o]=(0,r.useState)(!1),c=window.wcAdminFeatures["new-product-management-experience"];return{createProductByType:async t=>{if("subscription"!==t){if(o(!0),"physical"===t||"variable"===t){if(c)return void(0,s.navigateTo)({url:(0,s.getNewPath)({},"/add-product",{})});if("treatment"===(await(0,l.loadExperimentAssignment)("woocommerce_product_creation_experience_add_variations_202310_v2")).variationName){const e=(0,d.O3)("_feature_nonce");return void(window.location.href=(0,i.getAdminLink)(`post-new.php?post_type=product&product_block_editor=1&_feature_nonce=${e}`))}}try{const o=await e({template_name:t,status:"draft"},{_fields:["id"]});if(o&&o.id){const e=(0,i.getAdminLink)(`post.php?post=${o.id}&action=edit&wc_onboarding_active_task=products&tutorial=true`);return void(window.location.href=e)}throw new Error("Unexpected empty data response from server")}catch(e){(0,m.a)(e)}o(!1)}else window.location.href=(0,i.getAdminLink)("post-new.php?post_type=product&subscription_pointers=true")},isRequesting:t}},u=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],{onClick:o}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{createProductByType:n,isRequesting:a}=p(),s=(0,r.useMemo)((()=>e.map((e=>({...e,onClick:()=>{n(e.key),(0,c.recordEvent)("tasklist_add_product",{method:"product_template"}),(0,c.recordEvent)("tasklist_product_template_selection",{product_type:e.key,is_suggested:t.includes(e.key)}),"function"==typeof o&&o()}})))),[n]);return{productTypes:s,isRequesting:a}}},70422:(e,t,o)=>{o.d(t,{Q:()=>h,r:()=>k});var r=o(92819),c=o(69307),n=o(65736),a=o(90391),s=o(96898),i=o(7480),l=o(48349),m=o(23374),d=o(83619);const p=Object.freeze([{key:"physical",title:(0,n.__)("Physical product","woocommerce"),content:(0,n.__)("A tangible item that gets delivered to customers.","woocommerce"),before:(0,c.createElement)(a.Z,null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"digital",title:(0,n.__)("Digital product","woocommerce"),content:(0,n.__)("A digital product like service, downloadable book, music or video.","woocommerce"),before:(0,c.createElement)(s.Z,null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"variable",title:(0,n.__)("Variable product","woocommerce"),content:(0,n.__)("A product with variations like color or size.","woocommerce"),before:(0,c.createElement)(i.Z,null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"subscription",title:(0,n.__)("Subscription product","woocommerce"),content:(0,n.__)("Item that customers receive on a regular basis.","woocommerce"),before:(0,c.createElement)(l.Z,null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"grouped",title:(0,n.__)("Grouped product","woocommerce"),content:(0,n.__)("A collection of related products.","woocommerce"),before:(0,c.createElement)((()=>(0,c.createElement)("svg",{width:"25",height:"24",viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,c.createElement)("mask",{id:"mask0_1133_132667",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"2",y:"2",width:"21",height:"20"},(0,c.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M16.5 2.34497L10.84 7.99497V3.65497H2.84003V11.655H10.84V7.99497L16.5 13.655H12.84V21.655H20.84V13.655H16.5L22.16 7.99497L16.5 2.34497ZM19.33 8.00497L16.5 5.17497L13.67 8.00497L16.5 10.835L19.33 8.00497ZM8.84003 9.65497V5.65497H4.84003V9.65497H8.84003ZM18.84 15.655V19.655H14.84V15.655H18.84ZM8.84003 19.655V15.655H4.84003V19.655H8.84003ZM2.84003 13.655H10.84V21.655H2.84003V13.655Z",fill:"white"})),(0,c.createElement)("g",{mask:"url(#mask0_1133_132667)"},(0,c.createElement)("rect",{x:"0.5",width:"24",height:"24"})))),null),after:(0,c.createElement)(m.Z,{icon:d.Z})},{key:"external",title:(0,n.__)("External product","woocommerce"),content:(0,n.__)("Link a product to an external website.","woocommerce"),before:(0,c.createElement)((()=>(0,c.createElement)("svg",{width:"25",height:"24",viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,c.createElement)("mask",{id:"mask0_1133_132681",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"2",y:"7",width:"21",height:"10"},(0,c.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.5 15H7.5C5.85 15 4.5 13.65 4.5 12C4.5 10.35 5.85 9 7.5 9H11.5V7H7.5C4.74 7 2.5 9.24 2.5 12C2.5 14.76 4.74 17 7.5 17H11.5V15ZM17.5 7H13.5V9H17.5C19.15 9 20.5 10.35 20.5 12C20.5 13.65 19.15 15 17.5 15H13.5V17H17.5C20.26 17 22.5 14.76 22.5 12C22.5 9.24 20.26 7 17.5 7ZM16.5 11H8.5V13H16.5V11Z",fill:"white"})),(0,c.createElement)("g",{mask:"url(#mask0_1133_132681)"},(0,c.createElement)("rect",{x:"0.5",width:"24",height:"24"})))),null),after:(0,c.createElement)(m.Z,{icon:d.Z})}]),u=((0,n.__)("can’t decide?","woocommerce"),(0,n.__)("Load sample products and see what they look like in your store.","woocommerce"),(0,c.createElement)((()=>(0,c.createElement)("svg",{width:"25",height:"24",viewBox:"0 0 25 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,c.createElement)("mask",{id:"mask0_1133_132689",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"5",y:"2",width:"15",height:"20"},(0,c.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.5 2C8.64 2 5.5 5.14 5.5 9C5.5 11.38 6.69 13.47 8.5 14.74V17C8.5 17.55 8.95 18 9.5 18H15.5C16.05 18 16.5 17.55 16.5 17V14.74C18.31 13.47 19.5 11.38 19.5 9C19.5 5.14 16.36 2 12.5 2ZM9.5 21C9.5 21.55 9.95 22 10.5 22H14.5C15.05 22 15.5 21.55 15.5 21V20H9.5V21ZM14.5 13.7L15.35 13.1C16.7 12.16 17.5 10.63 17.5 9C17.5 6.24 15.26 4 12.5 4C9.74 4 7.5 6.24 7.5 9C7.5 10.63 8.3 12.16 9.65 13.1L10.5 13.7V16H14.5V13.7Z",fill:"white"})),(0,c.createElement)("g",{mask:"url(#mask0_1133_132689)"},(0,c.createElement)("rect",{x:"0.5",width:"24",height:"24",fill:"#757575"})))),null),(0,c.createElement)(m.Z,{icon:d.Z}),Object.freeze({physical:["physical","variable","grouped"],subscriptions:["subscription"],downloads:["digital"],"physical,subscriptions":["physical","subscription"],"downloads,physical":["physical","digital"],"downloads,subscriptions":["digital","subscription"],"downloads,physical,subscriptions":["physical","digital","subscription"]})),_=u.physical,w=["physical","subscriptions","downloads"],h=function(){let{exclude:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e&&(null==e?void 0:e.length)>0?p.filter((t=>!e.includes(t.key))):[...p]},k=e=>{const t=(0,r.intersection)(e,w).sort().join(",");return u.hasOwnProperty(t)?u[t]:_}},31611:(e,t,o)=>{o.d(t,{Z:()=>a});var r=o(69307),c=o(14599),n=o(34374);const a=(e,t)=>{const o=(0,r.useRef)(t||window.performance.now());return{recordCompletionTime:()=>{(0,c.recordEvent)("task_completion_time",{task_name:e,time:(0,n.Jm)(window.performance.now()-o.current)})}}}}}]);
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/71.js b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/71.js
index 82deb6bd..95c692d6 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/71.js
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/71.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunk_wcAdmin_webpackJsonp=globalThis.webpackChunk_wcAdmin_webpackJsonp||[]).push([[71],{84560:(e,t,o)=>{o.d(t,{Z:()=>c});var n=o(69307),r=o(70444);const c=(0,n.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(r.Path,{d:"M12 3.2c-4.8 0-8.8 3.9-8.8 8.8 0 4.8 3.9 8.8 8.8 8.8 4.8 0 8.8-3.9 8.8-8.8 0-4.8-4-8.8-8.8-8.8zm0 16c-4 0-7.2-3.3-7.2-7.2C4.8 8 8 4.8 12 4.8s7.2 3.3 7.2 7.2c0 4-3.2 7.2-7.2 7.2zM11 17h2v-6h-2v6zm0-8h2V7h-2v2z"}))},66602:(e,t,o)=>{o.d(t,{_$:()=>v,U_:()=>h,XG:()=>T,b:()=>m});var n=o(69307),r=o(65736),c=o(55609),a=o(9818),i=o(75606),l=o(46530),s=o(51393),d=o(74693);const m=e=>{let{onClick:t}=e;const{showCesModal:o}=(0,a.useDispatch)(i.STORE_KEY),{isDescendantOf:m}=(0,l.useLayoutContext)();return(0,n.createElement)(c.MenuItem,{onClick:()=>{o({action:"new_product",showDescription:!1,title:(0,r.__)("What do you think of the new product form?","woocommerce"),firstQuestion:(0,r.__)("The product editing screen is easy to use","woocommerce"),secondQuestion:(0,r.__)("The product editing screen's functionality meets my needs","woocommerce"),onsubmitLabel:(0,r.__)("Thanks for the feedback — we'll put it to good use!","woocommerce"),getExtraFieldsToBeShown:(e,t,o)=>(0,n.createElement)(n.Fragment,null,(0,n.createElement)(c.BaseControl,{id:"feedback_additional_thoughts",className:"woocommerce-product-feedback__additional-thoughts",label:(0,n.createInterpolateElement)((0,r.__)("ADDITIONAL THOUGHTS ","woocommerce"),{optional:(0,n.createElement)("span",{className:"woocommerce-product-feedback__optional-input"},(0,r.__)("(OPTIONAL)","woocommerce"))})},(0,n.createElement)(c.TextareaControl,{value:e.additional_thoughts||"",onChange:o=>t({...e,additional_thoughts:o}),help:(null==o?void 0:o.additional_thoughts)||""})),(0,n.createElement)(c.BaseControl,{id:"feedback_email",className:"woocommerce-product-feedback__email",label:(0,n.createInterpolateElement)((0,r.__)("YOUR EMAIL ADDRESS ","woocommerce"),{optional:(0,n.createElement)("span",{className:"woocommerce-product-feedback__optional-input"},(0,r.__)("(OPTIONAL)","woocommerce"))})},(0,n.createElement)(c.TextControl,{value:e.email||"",onChange:o=>t({...e,email:o}),help:(null==o?void 0:o.email)||""}),(0,n.createElement)("span",null,(0,r.__)("In case you want to participate in further discussion and future user research.","woocommerce")))),validateExtraFields:e=>{let{email:t="",additional_thoughts:o=""}=e;const n={};return t.length>0&&!(0,s.isValidEmail)(t)&&(n.email=(0,r.__)("Please enter a valid email address.","woocommerce")),(null==o?void 0:o.length)>500&&(n.additional_thoughts=(0,r.__)("Please enter no more than 500 characters.","woocommerce")),n}},{shouldShowComments:()=>!1},{type:"snackbar"},{block_editor:m("product-block-editor")}),t()},icon:(0,n.createElement)(d.A,null),iconPosition:"right"},(0,r.__)("Share feedback","woocommerce"))};var u=o(74617),_=o(67221),p=o(73463);const h=e=>{let{onClick:t,productId:o}=e;const{showProductMVPFeedbackModal:l}=(0,a.useDispatch)(i.STORE_KEY),{allowTracking:s,resolving:d}=(0,a.useSelect)((e=>{const{getOption:t,hasFinishedResolution:o}=e(_.OPTIONS_STORE_NAME);return{allowTracking:"yes"===(t(i.ALLOW_TRACKING_OPTION_NAME)||"no"),resolving:!o("getOption",[i.ALLOW_TRACKING_OPTION_NAME])}})),m=(0,p.O3)("_feature_nonce"),h=o?(0,u.getAdminLink)(`post.php?post=${o}&action=edit&product_block_editor=0&_feature_nonce=${m}`):(0,u.getAdminLink)(`post-new.php?post_type=product&product_block_editor=0&_feature_nonce=${m}`);return d?null:(0,n.createElement)(c.MenuItem,{onClick:function(){s?l():window.location.href=h,t()},info:(0,r.__)("Save changes and go back to the classic product editing screen.","woocommerce")},(0,r.__)("Turn off the new product form","woocommerce"))};var g=o(23374),w=o(84560),E=o(90495),f=o(65545);const v=e=>{let{onClick:t=(()=>null),onCloseGuide:o}=e;const[a,i]=(0,n.useState)(!1),{isNewUser:l}=(0,f.E)();return(0,n.createElement)(n.Fragment,null,(0,n.createElement)(c.MenuItem,{onClick:()=>{i(!0),t()},icon:(0,n.createElement)(g.Z,{icon:w.Z}),iconPosition:"right"},(0,r.__)("About the form…","woocommerce")),a&&(0,n.createElement)(E.Z,{isNewUser:l,onCloseGuide:()=>{i(!1),o()}}))};var b=o(85597),k=o(10431),C=o(14599),y=o(37798);const T=e=>{let{onClose:t}=e;const[o,i]=(0,n.useState)(!1),{productId:l}=(0,b.UO)(),d=(0,y.useEntityId)("postType","product_variation"),{invalidateVariationList:m,goToNextVariation:u,goToPreviousVariation:p,numberOfVariations:h}=(0,s.__experimentalUseVariationSwitcher)({parentId:l?parseInt(l,10):void 0,variationId:d}),[g]=(0,y.useEntityProp)("postType","product_variation","name"),[w]=(0,y.useEntityProp)("postType","product_variation","status"),{deleteProductVariation:E}=(0,a.useDispatch)(_.EXPERIMENTAL_PRODUCT_VARIATIONS_STORE_NAME),{createSuccessNotice:f,createErrorNotice:v}=(0,a.useDispatch)("core/notices");return(0,n.createElement)(n.Fragment,null,(0,n.createElement)(c.MenuGroup,null,(0,n.createElement)(c.MenuItem,{isDestructive:!0,variant:"tertiary",onClick:function(){(0,C.recordEvent)("product_dropdown_option_click",{selected_option:"delete_variation",product_id:l,variation_id:d,product_status:w}),i(!0)}},(0,r.__)("Delete variation","woocommerce"))),o&&(0,n.createElement)(s.RemoveConfirmationModal,{title:(0,r.sprintf)((0,r.__)("Delete %s?","woocommerce"),g),description:(0,n.createElement)(n.Fragment,null,(0,n.createElement)("p",null,(0,r.__)("If you continue, this variation with all of its information will be deleted and customers will no longer be able to purchase it.","woocommerce")),(0,n.createElement)("strong",null,(0,r.__)("Deleted variations cannot be restored.","woocommerce"))),onRemove:async function(){return(0,C.recordEvent)("product_delete_variation_modal",{action:"delete",product_id:l,variation_id:d,product_status:w}),E({product_id:l,id:d}).then((()=>{f((0,r.sprintf)((0,r.__)("%s deleted.","woocommerce"),g)),i(!1),t(),m(),h&&h>1?u()||p():(0,k.navigateTo)({url:(0,k.getNewPath)({},`/product/${l}`)})})).catch((()=>{v((0,r.__)("Failed to delete the variation.","woocommerce"))}))},onCancel:function(){(0,C.recordEvent)("product_delete_variation_modal",{action:"close",product_id:l,variation_id:d,product_status:w}),i(!1)}}))}},81596:(e,t,o)=>{o.d(t,{e:()=>d});var n=o(69307),r=o(55609),c=o(65736),a=o(14599),i=o(9818),l=o(37798),s=o(66602);const d=e=>{var t;let{productType:o="product",onClose:d}=e;const[m]=(0,l.useEntityProp)("postType",o,"id"),u=(0,i.useSelect)((e=>{const{getEntityRecord:t}=e("core");return t("postType",o,m)}),[m,o]),_=e=>{(0,a.recordEvent)("product_dropdown_option_click",{selected_option:e,product_type:u.type,product_status:u.status})};return(0,n.createElement)(n.Fragment,null,(0,n.createElement)(r.MenuGroup,{label:(0,c.__)("New product form (Beta)","woocommerce")},(0,n.createElement)(s._$,{onClick:()=>{_("about")},onCloseGuide:()=>{d()}}),(0,n.createElement)(s.b,{onClick:()=>{_("feedback"),d()}})),(0,n.createElement)(r.MenuGroup,null,(0,n.createElement)(s.U_,{productId:null!==(t=u.parent_id)&&void 0!==t?t:u.id,onClick:()=>{_("classic_editor"),d()}})))}},90495:(e,t,o)=>{o.d(t,{Z:()=>p});var n=o(69307),r=o(65736),c=o(83849),a=o.n(c),i=o(55609),l=o(70444);const s=e=>{let{isSelected:t}=e;return(0,n.createElement)(l.SVG,{width:"8",height:"8",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,n.createElement)(l.Circle,{cx:"4",cy:"4",r:"4",fill:t?"#419ECD":"#E1E3E6"}))};function d(e){let{currentPage:t,numberOfPages:o,setCurrentPage:c}=e;return(0,n.createElement)("ul",{className:"components-guide__page-control","aria-label":(0,r.__)("Guide controls","woocommerce")},Array.from({length:o}).map(((e,a)=>(0,n.createElement)("li",{key:a,"aria-current":a===t?"step":void 0},(0,n.createElement)(i.Button,{key:a,icon:(0,n.createElement)(s,{isSelected:a===t}),"aria-label":(0,r.sprintf)((0,r.__)("Page %1$d of %2$d","woocommerce"),a+1,o),onClick:()=>c(a)})))))}const m=function(e){let{className:t,contentLabel:o,finishButtonText:c=(0,r.__)("Finish","woocommerce"),finishButtonLink:l,onFinish:s,pages:m=[]}=e;const u=(0,n.useRef)(null),[_,p]=(0,n.useState)(0),h=_>0,g=_{h&&p(_-1)},E=()=>{g&&p(_+1)};return 0===m.length?null:(0,n.createElement)(i.Modal,{className:a()("components-guide",t),title:o,onRequestClose:()=>{s(_,"close")},onKeyDown:e=>{"ArrowLeft"===e.code?(w(),e.preventDefault()):"ArrowRight"===e.code&&(E(),e.preventDefault())},ref:u},(0,n.createElement)("div",{className:"components-guide__container"},(0,n.createElement)("div",{className:"components-guide__page"},m[_].image,m.length>1&&(0,n.createElement)(d,{currentPage:_,numberOfPages:m.length,setCurrentPage:p}),m[_].content),(0,n.createElement)("div",{className:"components-guide__footer"},h&&(0,n.createElement)(i.Button,{className:"components-guide__back-button",variant:"tertiary",onClick:w},(0,r.__)("Previous","woocommerce")),g&&(0,n.createElement)(i.Button,{className:"components-guide__forward-button",variant:"primary",onClick:E},(0,r.__)("Next","woocommerce")),!g&&(0,n.createElement)(i.Button,{className:"components-guide__finish-button",variant:"primary",href:l,target:l?"_blank":void 0,rel:l?"noopener":void 0,onClick:()=>s(_,"finish")},c))))},u=e=>{let{page:t}=e;return(0,n.createElement)(n.Fragment,null,(0,n.createElement)("h1",{className:"woocommerce-block-editor-guide__heading"},t.heading),(0,n.createElement)("p",{className:"woocommerce-block-editor-guide__text"},t.text))},_=e=>{let{page:t}=e;return(0,n.createElement)("div",{className:`woocommerce-block-editor-guide__header woocommerce-block-editor-guide__header-${t.index+1}`})},p=e=>{let{onCloseGuide:t}=e;const o=[{heading:(0,r.__)("Fresh and modern interface","woocommerce"),text:(0,r.__)("Everything you need to create and sell your products, all in one place. From photos and descriptions to pricing and inventory, all of your product settings can be found here.","woocommerce")},{heading:(0,r.__)("Content-rich product descriptions","woocommerce"),text:(0,r.__)("Show off what's great about your products and engage your customers with content-rich product descriptions. Add images, videos, and any other content they might need to make a purchase.","woocommerce")},{heading:(0,r.__)("Lightning fast performance ","woocommerce"),text:(0,r.__)("Get your products listed and available for purchase in no time! Our modern technology ensures a reliable and streamlined experience.","woocommerce")},{heading:(0,r.__)("More features are on the way","woocommerce"),text:(0,r.__)("We're actively working on adding more features to the product form, including the ability to add digital products, variations, and more. Watch this space!","woocommerce")}].map(((e,t)=>({content:(0,n.createElement)(u,{page:e}),image:(0,n.createElement)(_,{page:{...e,index:t}})})));return(0,n.createElement)(m,{className:"woocommerce-block-editor-guide",contentLabel:"",finishButtonText:(0,r.__)("Tell me more","woocommerce"),finishButtonLink:"https://woo.com/product-form-beta",onFinish:t,pages:o})}},65545:(e,t,o)=>{o.d(t,{E:()=>a});var n=o(67221),r=o(9818);const c={status:"publish",_fields:["id"]},a=()=>(0,r.useSelect)((e=>{const{getProductsTotalCount:t,hasFinishedResolution:o}=e(n.PRODUCTS_STORE_NAME),r=t(c,0);return{publishedProductsCount:r,loadingPublishedProductsCount:!o("getProductsTotalCount",[c,0]),isNewUser:r<1}}))}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunk_wcAdmin_webpackJsonp=globalThis.webpackChunk_wcAdmin_webpackJsonp||[]).push([[71],{84560:(e,t,o)=>{o.d(t,{Z:()=>c});var n=o(69307),r=o(70444);const c=(0,n.createElement)(r.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,n.createElement)(r.Path,{d:"M12 3.2c-4.8 0-8.8 3.9-8.8 8.8 0 4.8 3.9 8.8 8.8 8.8 4.8 0 8.8-3.9 8.8-8.8 0-4.8-4-8.8-8.8-8.8zm0 16c-4 0-7.2-3.3-7.2-7.2C4.8 8 8 4.8 12 4.8s7.2 3.3 7.2 7.2c0 4-3.2 7.2-7.2 7.2zM11 17h2v-6h-2v6zm0-8h2V7h-2v2z"}))},66602:(e,t,o)=>{o.d(t,{_$:()=>v,U_:()=>h,XG:()=>T,b:()=>m});var n=o(69307),r=o(65736),c=o(55609),a=o(9818),i=o(75606),l=o(46530),s=o(51393),d=o(74693);const m=e=>{let{onClick:t}=e;const{showCesModal:o}=(0,a.useDispatch)(i.STORE_KEY),{isDescendantOf:m}=(0,l.useLayoutContext)();return(0,n.createElement)(c.MenuItem,{onClick:()=>{o({action:"new_product",showDescription:!1,title:(0,r.__)("What do you think of the new product form?","woocommerce"),firstQuestion:(0,r.__)("The product editing screen is easy to use","woocommerce"),secondQuestion:(0,r.__)("The product editing screen's functionality meets my needs","woocommerce"),onsubmitLabel:(0,r.__)("Thanks for the feedback — we'll put it to good use!","woocommerce"),getExtraFieldsToBeShown:(e,t,o)=>(0,n.createElement)(n.Fragment,null,(0,n.createElement)(c.BaseControl,{id:"feedback_additional_thoughts",className:"woocommerce-product-feedback__additional-thoughts",label:(0,n.createInterpolateElement)((0,r.__)("ADDITIONAL THOUGHTS ","woocommerce"),{optional:(0,n.createElement)("span",{className:"woocommerce-product-feedback__optional-input"},(0,r.__)("(OPTIONAL)","woocommerce"))})},(0,n.createElement)(c.TextareaControl,{value:e.additional_thoughts||"",onChange:o=>t({...e,additional_thoughts:o}),help:(null==o?void 0:o.additional_thoughts)||""})),(0,n.createElement)(c.BaseControl,{id:"feedback_email",className:"woocommerce-product-feedback__email",label:(0,n.createInterpolateElement)((0,r.__)("YOUR EMAIL ADDRESS ","woocommerce"),{optional:(0,n.createElement)("span",{className:"woocommerce-product-feedback__optional-input"},(0,r.__)("(OPTIONAL)","woocommerce"))})},(0,n.createElement)(c.TextControl,{value:e.email||"",onChange:o=>t({...e,email:o}),help:(null==o?void 0:o.email)||""}),(0,n.createElement)("span",null,(0,r.__)("In case you want to participate in further discussion and future user research.","woocommerce")))),validateExtraFields:e=>{let{email:t="",additional_thoughts:o=""}=e;const n={};return t.length>0&&!(0,s.isValidEmail)(t)&&(n.email=(0,r.__)("Please enter a valid email address.","woocommerce")),(null==o?void 0:o.length)>500&&(n.additional_thoughts=(0,r.__)("Please enter no more than 500 characters.","woocommerce")),n}},{shouldShowComments:()=>!1},{type:"snackbar"},{block_editor:m("product-block-editor")}),t()},icon:(0,n.createElement)(d.A,null),iconPosition:"right"},(0,r.__)("Share feedback","woocommerce"))};var u=o(74617),_=o(67221),p=o(73463);const h=e=>{let{onClick:t,productId:o}=e;const{showProductMVPFeedbackModal:l}=(0,a.useDispatch)(i.STORE_KEY),{allowTracking:s,resolving:d}=(0,a.useSelect)((e=>{const{getOption:t,hasFinishedResolution:o}=e(_.OPTIONS_STORE_NAME);return{allowTracking:"yes"===(t(i.ALLOW_TRACKING_OPTION_NAME)||"no"),resolving:!o("getOption",[i.ALLOW_TRACKING_OPTION_NAME])}})),m=(0,p.O3)("_feature_nonce"),h=o?(0,u.getAdminLink)(`post.php?post=${o}&action=edit&product_block_editor=0&_feature_nonce=${m}`):(0,u.getAdminLink)(`post-new.php?post_type=product&product_block_editor=0&_feature_nonce=${m}`);return d?null:(0,n.createElement)(c.MenuItem,{onClick:function(){s?l():window.location.href=h,t()},info:(0,r.__)("Save changes and go back to the classic product editing screen.","woocommerce")},(0,r.__)("Turn off the new product form","woocommerce"))};var g=o(23374),w=o(84560),E=o(90495),f=o(65545);const v=e=>{let{onClick:t=(()=>null),onCloseGuide:o}=e;const[a,i]=(0,n.useState)(!1),{isNewUser:l}=(0,f.E)();return(0,n.createElement)(n.Fragment,null,(0,n.createElement)(c.MenuItem,{onClick:()=>{i(!0),t()},icon:(0,n.createElement)(g.Z,{icon:w.Z}),iconPosition:"right"},(0,r.__)("About the form…","woocommerce")),a&&(0,n.createElement)(E.Z,{isNewUser:l,onCloseGuide:()=>{i(!1),o()}}))};var b=o(85597),k=o(10431),C=o(14599),y=o(37798);const T=e=>{let{onClose:t}=e;const[o,i]=(0,n.useState)(!1),{productId:l}=(0,b.UO)(),d=(0,y.useEntityId)("postType","product_variation"),{invalidateVariationList:m,goToNextVariation:u,goToPreviousVariation:p,numberOfVariations:h}=(0,s.__experimentalUseVariationSwitcher)({parentId:l?parseInt(l,10):void 0,variationId:d}),[g]=(0,y.useEntityProp)("postType","product_variation","name"),[w]=(0,y.useEntityProp)("postType","product_variation","status"),{deleteProductVariation:E}=(0,a.useDispatch)(_.EXPERIMENTAL_PRODUCT_VARIATIONS_STORE_NAME),{createSuccessNotice:f,createErrorNotice:v}=(0,a.useDispatch)("core/notices");return(0,n.createElement)(n.Fragment,null,(0,n.createElement)(c.MenuGroup,null,(0,n.createElement)(c.MenuItem,{isDestructive:!0,variant:"tertiary",onClick:function(){(0,C.recordEvent)("product_dropdown_option_click",{selected_option:"delete_variation",product_id:l,variation_id:d,product_status:w}),i(!0)}},(0,r.__)("Delete variation","woocommerce"))),o&&(0,n.createElement)(s.RemoveConfirmationModal,{title:(0,r.sprintf)((0,r.__)("Delete %s?","woocommerce"),g),description:(0,n.createElement)(n.Fragment,null,(0,n.createElement)("p",null,(0,r.__)("If you continue, this variation with all of its information will be deleted and customers will no longer be able to purchase it.","woocommerce")),(0,n.createElement)("strong",null,(0,r.__)("Deleted variations cannot be restored.","woocommerce"))),onRemove:async function(){return(0,C.recordEvent)("product_delete_variation_modal",{action:"delete",product_id:l,variation_id:d,product_status:w}),E({product_id:l,id:d}).then((()=>{f((0,r.sprintf)((0,r.__)("%s deleted.","woocommerce"),g)),i(!1),t(),m(),h&&h>1?u()||p():(0,k.navigateTo)({url:(0,k.getNewPath)({},`/product/${l}`)})})).catch((()=>{v((0,r.__)("Failed to delete the variation.","woocommerce"))}))},onCancel:function(){(0,C.recordEvent)("product_delete_variation_modal",{action:"close",product_id:l,variation_id:d,product_status:w}),i(!1)}}))}},81596:(e,t,o)=>{o.d(t,{e:()=>d});var n=o(69307),r=o(55609),c=o(65736),a=o(14599),i=o(9818),l=o(37798),s=o(66602);const d=e=>{var t;let{productType:o="product",onClose:d}=e;const[m]=(0,l.useEntityProp)("postType",o,"id"),u=(0,i.useSelect)((e=>{const{getEntityRecord:t}=e("core");return t("postType",o,m)}),[m,o]),_=e=>{(0,a.recordEvent)("product_dropdown_option_click",{selected_option:e,product_type:u.type,product_status:u.status})};return(0,n.createElement)(n.Fragment,null,(0,n.createElement)(r.MenuGroup,{label:(0,c.__)("New product form (Beta)","woocommerce")},(0,n.createElement)(s._$,{onClick:()=>{_("about")},onCloseGuide:()=>{d()}}),(0,n.createElement)(s.b,{onClick:()=>{_("feedback"),d()}})),(0,n.createElement)(r.MenuGroup,null,(0,n.createElement)(s.U_,{productId:null!==(t=u.parent_id)&&void 0!==t?t:u.id,onClick:()=>{_("classic_editor"),d()}})))}},90495:(e,t,o)=>{o.d(t,{Z:()=>p});var n=o(69307),r=o(65736),c=o(83849),a=o.n(c),i=o(55609),l=o(70444);const s=e=>{let{isSelected:t}=e;return(0,n.createElement)(l.SVG,{width:"8",height:"8",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,n.createElement)(l.Circle,{cx:"4",cy:"4",r:"4",fill:t?"#419ECD":"#E1E3E6"}))};function d(e){let{currentPage:t,numberOfPages:o,setCurrentPage:c}=e;return(0,n.createElement)("ul",{className:"components-guide__page-control","aria-label":(0,r.__)("Guide controls","woocommerce")},Array.from({length:o}).map(((e,a)=>(0,n.createElement)("li",{key:a,"aria-current":a===t?"step":void 0},(0,n.createElement)(i.Button,{key:a,icon:(0,n.createElement)(s,{isSelected:a===t}),"aria-label":(0,r.sprintf)((0,r.__)("Page %1$d of %2$d","woocommerce"),a+1,o),onClick:()=>c(a)})))))}const m=function(e){let{className:t,contentLabel:o,finishButtonText:c=(0,r.__)("Finish","woocommerce"),finishButtonLink:l,onFinish:s,pages:m=[]}=e;const u=(0,n.useRef)(null),[_,p]=(0,n.useState)(0),h=_>0,g=_{h&&p(_-1)},E=()=>{g&&p(_+1)};return 0===m.length?null:(0,n.createElement)(i.Modal,{className:a()("components-guide",t),title:o,onRequestClose:()=>{s(_,"close")},onKeyDown:e=>{"ArrowLeft"===e.code?(w(),e.preventDefault()):"ArrowRight"===e.code&&(E(),e.preventDefault())},ref:u},(0,n.createElement)("div",{className:"components-guide__container"},(0,n.createElement)("div",{className:"components-guide__page"},m[_].image,m.length>1&&(0,n.createElement)(d,{currentPage:_,numberOfPages:m.length,setCurrentPage:p}),m[_].content),(0,n.createElement)("div",{className:"components-guide__footer"},h&&(0,n.createElement)(i.Button,{className:"components-guide__back-button",variant:"tertiary",onClick:w},(0,r.__)("Previous","woocommerce")),g&&(0,n.createElement)(i.Button,{className:"components-guide__forward-button",variant:"primary",onClick:E},(0,r.__)("Next","woocommerce")),!g&&(0,n.createElement)(i.Button,{className:"components-guide__finish-button",variant:"primary",href:l,target:l?"_blank":void 0,rel:l?"noopener":void 0,onClick:()=>s(_,"finish")},c))))},u=e=>{let{page:t}=e;return(0,n.createElement)(n.Fragment,null,(0,n.createElement)("h1",{className:"woocommerce-block-editor-guide__heading"},t.heading),(0,n.createElement)("p",{className:"woocommerce-block-editor-guide__text"},t.text))},_=e=>{let{page:t}=e;return(0,n.createElement)("div",{className:`woocommerce-block-editor-guide__header woocommerce-block-editor-guide__header-${t.index+1}`})},p=e=>{let{onCloseGuide:t}=e;const o=[{heading:(0,r.__)("Fresh and modern interface","woocommerce"),text:(0,r.__)("Everything you need to create and sell your products, all in one place. From photos and descriptions to pricing and inventory, all of your product settings can be found here.","woocommerce")},{heading:(0,r.__)("Content-rich product descriptions","woocommerce"),text:(0,r.__)("Show off what's great about your products and engage your customers with content-rich product descriptions. Add images, videos, and any other content they might need to make a purchase.","woocommerce")},{heading:(0,r.__)("Lightning fast performance ","woocommerce"),text:(0,r.__)("Get your products listed and available for purchase in no time! Our modern technology ensures a reliable and streamlined experience.","woocommerce")},{heading:(0,r.__)("More features are on the way","woocommerce"),text:(0,r.__)("We're actively working on adding more features to the product form, including the ability to add digital products, variations, and more. Watch this space!","woocommerce")}].map(((e,t)=>({content:(0,n.createElement)(u,{page:e}),image:(0,n.createElement)(_,{page:{...e,index:t}})})));return(0,n.createElement)(m,{className:"woocommerce-block-editor-guide",contentLabel:"",finishButtonText:(0,r.__)("Tell me more","woocommerce"),finishButtonLink:"https://woocommerce.com/product-form-beta",onFinish:t,pages:o})}},65545:(e,t,o)=>{o.d(t,{E:()=>a});var n=o(67221),r=o(9818);const c={status:"publish",_fields:["id"]},a=()=>(0,r.useSelect)((e=>{const{getProductsTotalCount:t,hasFinishedResolution:o}=e(n.PRODUCTS_STORE_NAME),r=t(c,0);return{publishedProductsCount:r,loadingPublishedProductsCount:!o("getProductsTotalCount",[c,0]),isNewUser:r<1}}))}}]);
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/71.style.css b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/71.style.css
index 8e8304e6..843969c2 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/71.style.css
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/71.style.css
@@ -1 +1 @@
-.woocommerce-block-editor-guide__header{width:312px;height:222px;background-color:#f6f7f7;background-size:cover}.woocommerce-block-editor-guide__header-1{background-image:url(../838cedcc9d9dfff18d8a.png)}.woocommerce-block-editor-guide__header-2{background-image:url(../df4b3b75be51b9e11f96.png)}.woocommerce-block-editor-guide__header-3{background-image:url(../cc33bd6b007cb731bcc3.png)}.woocommerce-block-editor-guide__header-4{background-image:url(../7a66c49439f3a365c211.png)}.woocommerce-block-editor-guide.components-modal__frame{max-width:312px}.woocommerce-block-editor-guide__heading,.woocommerce-block-editor-guide__text{margin:12px 24px}.woocommerce-block-editor-guide__heading{font-size:24px;line-height:30px}.woocommerce-block-editor-guide .components-guide__page-control{margin-top:12px}.woocommerce-block-editor-guide .components-guide__footer{width:unset;margin:24px}.woocommerce-block-editor-guide .components-guide__footer .components-guide__back-button{left:0;padding:8px 12px}.woocommerce-block-editor-guide .components-guide__footer .components-guide__forward-button{right:0;padding:8px 12px}.woocommerce-block-editor-guide .components-guide__footer .components-guide__finish-button{right:0}.woocommerce-block-editor-tourkit .woocommerce-tour-kit-step{width:381px}.woocommerce-block-editor-tourkit .woocommerce-tour-kit-step .components-card__header{align-items:flex-start;height:194px;background-color:#d4aaf6;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzgxIiBoZWlnaHQ9IjE5NCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTg2NV8xOTgzNjcpIj48cGF0aCBmaWxsPSIjRDRBQUY2IiBkPSJNMCAwaDM4MXYxOTQuMzFIMHoiLz48ZyBjbGlwLXBhdGg9InVybCgjY2xpcDFfMTg2NV8xOTgzNjcpIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNTQuNTc2IDI3LjM3NWgyNzIuODMydjE2Ny4xMjNINTQuNTc2eiIvPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMl8xODY1XzE5ODM2NykiPjxyZWN0IHg9IjEyOC4xNjIiIHk9IjExMy41NjIiIHdpZHRoPSI1MS4yODQiIGhlaWdodD0iNS45MjMiIHJ4PSIxLjc5NSIgZmlsbD0iI0UwRTBFMCIvPjxyZWN0IHg9IjEyOC40MTciIHk9Ijg5Ljc4OCIgd2lkdGg9Ijc0Ljk0NCIgaGVpZ2h0PSIzLjU5IiByeD0iMS43OTUiIGZpbGw9IiNFMEUwRTAiLz48cmVjdCB4PSIxNDIuNTIxIiB5PSIxMjMuODYzIiB3aWR0aD0iMzUuMjgzIiBoZWlnaHQ9IjMuMzg1IiByeD0iMS42OTIiIGZpbGw9IiNFMEUwRTAiLz48cmVjdCB4PSIxMjguNDE3IiB5PSI5Ni4wNzEiIHdpZHRoPSI5NC4yNCIgaGVpZ2h0PSIzLjU5IiByeD0iMS43OTUiIGZpbGw9IiNFMEUwRTAiLz48cmVjdCB4PSIxNDIuNTIxIiB5PSIxMzEuNDU5IiB3aWR0aD0iNDQuMzEiIGhlaWdodD0iMy4zODUiIHJ4PSIxLjY5MiIgZmlsbD0iI0UwRTBFMCIvPjxyZWN0IHg9IjEyOC40MTciIHk9IjEwMi4zNTQiIHdpZHRoPSIzMy4yMDkiIGhlaWdodD0iMy41OSIgcng9IjEuNzk1IiBmaWxsPSIjRTBFMEUwIi8+PHJlY3QgeD0iMTQyLjUyMSIgeT0iMTM5LjA1NSIgd2lkdGg9IjM1LjI4MyIgaGVpZ2h0PSIzLjM4NSIgcng9IjEuNjkyIiBmaWxsPSIjRTBFMEUwIi8+PGVsbGlwc2UgY3g9IjEzNi41MDYiIGN5PSIxMjUuNjYyIiByeD0iMS4zNTgiIHJ5PSIxLjM5OSIgZmlsbD0iIzAwN0NCQSIvPjxyZWN0IHg9IjEyOC40MTIiIHk9IjEyMi45MTMiIHdpZHRoPSIxMC43NTUiIGhlaWdodD0iNS40OTciIHJ4PSIyLjc0OCIgc3Ryb2tlPSIjQkJCIiBzdHJva2Utd2lkdGg9Ii41Ii8+PGVsbGlwc2UgY3g9IjEzMS40NiIgY3k9IjEzMy4yNTgiIHJ4PSIxLjM1OCIgcnk9IjEuMzk5IiBmaWxsPSIjQ0NDIi8+PHJlY3QgeD0iMTI4LjQxMiIgeT0iMTMwLjUxIiB3aWR0aD0iMTAuNzU1IiBoZWlnaHQ9IjUuNDk3IiByeD0iMi43NDgiIHN0cm9rZT0iI0JCQiIgc3Ryb2tlLXdpZHRoPSIuNSIvPjxlbGxpcHNlIGN4PSIxMzYuNTA2IiBjeT0iMTQwLjg1NSIgcng9IjEuMzU4IiByeT0iMS4zOTkiIGZpbGw9IiMwMDdDQkEiLz48cmVjdCB4PSIxMjguNDEyIiB5PSIxMzguMTA2IiB3aWR0aD0iMTAuNzU1IiBoZWlnaHQ9IjUuNDk3IiByeD0iMi43NDgiIHN0cm9rZT0iI0JCQiIgc3Ryb2tlLXdpZHRoPSIuNSIvPjwvZz48cmVjdCB4PSIxMjguMDQ4IiB5PSI3NC4yMzMiIHdpZHRoPSI1MS4yODQiIGhlaWdodD0iNS45MjMiIHJ4PSIxLjc5NSIgZmlsbD0iI0UwRTBFMCIvPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwM18xODY1XzE5ODM2NykiIGZpbGw9IiNFMEUwRTAiPjxyZWN0IHg9IjEyOC4zNDciIHk9IjE1NS45NzkiIHdpZHRoPSIzNy4yNTciIGhlaWdodD0iMTQuNzkzIiByeD0iMS43OTUiLz48cmVjdCBvcGFjaXR5PSIuNiIgeD0iMTY5LjA5NyIgeT0iMTU1Ljk3OSIgd2lkdGg9IjM3LjI1NyIgaGVpZ2h0PSIxNC43OTMiIHJ4PSIxLjc5NSIvPjxyZWN0IG9wYWNpdHk9Ii42IiB4PSIyMDkuODQ3IiB5PSIxNTUuOTc5IiB3aWR0aD0iMzcuMjU3IiBoZWlnaHQ9IjE0Ljc5MyIgcng9IjEuNzk1Ii8+PHJlY3QgeD0iMTI4LjQxNCIgeT0iMTc3Ljk2OSIgd2lkdGg9IjUxLjI4NCIgaGVpZ2h0PSI1LjkyMyIgcng9IjEuNzk1Ii8+PHJlY3QgeD0iMTI4LjQxNCIgeT0iMTg4LjEyNCIgd2lkdGg9IjM1LjI4MyIgaGVpZ2h0PSIzLjM4NSIgcng9IjEuNjkyIi8+PC9nPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwNF8xODY1XzE5ODM2NykiPjxtYXNrIGlkPSJhIiBmaWxsPSIjZmZmIj48cGF0aCBkPSJNNTQuMzcxIDI3LjExM2gyNzMuMjk3VjU3LjE4SDU0LjM3MVYyNy4xMTN6Ii8+PC9tYXNrPjxwYXRoIGQ9Ik01NC4zNzEgMjcuMTEzaDI3My4yOTdWNTcuMThINTQuMzcxVjI3LjExM3oiIGZpbGw9IiNmZmYiLz48cmVjdCB4PSIxNjAuMTIzIiB5PSIzNC4zMTIiIHdpZHRoPSI2MC45NDgiIGhlaWdodD0iNC42NTgiIHJ4PSIxLjc5NSIgZmlsbD0iI0UwRTBFMCIvPjxyZWN0IHg9IjI4OC40ODgiIHk9IjMxLjc3MSIgd2lkdGg9IjMzLjM3NiIgaGVpZ2h0PSI5Ljc0IiByeD0iMS43OTUiIGZpbGw9IiMwMDdDQkEiLz48cmVjdCB4PSIyNTguOTgxIiB5PSIzNC4zMTIiIHdpZHRoPSIyNC42NjkiIGhlaWdodD0iNC42NTgiIHJ4PSIxLjc5NSIgZmlsbD0iI0UwRTBFMCIvPjxyZWN0IHg9IjEyNS43MzIiIHk9IjQ4LjQxMSIgd2lkdGg9IjIxLjI4MyIgaGVpZ2h0PSIzLjM4OCIgcng9IjEuNjk0IiBmaWxsPSIjRTBFMEUwIi8+PHBhdGggZmlsbD0iIzAwN0NCQSIgZD0iTTEyNS43MzIgNTUuNjExaDIxLjI4M3YxLjY5NGgtMjEuMjgzeiIvPjxyZWN0IHg9IjE3OS45MDgiIHk9IjQ4LjQxMSIgd2lkdGg9IjIxLjI4MyIgaGVpZ2h0PSIzLjM4OCIgcng9IjEuNjk0IiBmaWxsPSIjRTBFMEUwIi8+PHJlY3QgeD0iMTUyLjgyIiB5PSI0OC40MTEiIHdpZHRoPSIyMS4yODMiIGhlaWdodD0iMy4zODgiIHJ4PSIxLjY5NCIgZmlsbD0iI0UwRTBFMCIvPjxyZWN0IHg9IjIwNi45OTYiIHk9IjQ4LjQxMSIgd2lkdGg9IjIxLjI4MyIgaGVpZ2h0PSIzLjM4OCIgcng9IjEuNjk0IiBmaWxsPSIjRTBFMEUwIi8+PHJlY3QgeD0iMjM0LjA4MyIgeT0iNDguNDExIiB3aWR0aD0iMjEuMjgzIiBoZWlnaHQ9IjMuMzg4IiByeD0iMS42OTQiIGZpbGw9IiNFMEUwRTAiLz48cGF0aCBmaWxsPSIjMjMyODJEIiBkPSJNNTQuMTI3IDI2LjkyNmgxNy45NTF2MTcuOTVINTQuMTI3eiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNjcuNjU0IDM1LjcwOGE0Ljc1MiA0Ljc1MiAwIDAwLTQuNzQ1LTQuNzQzIDQuNzQ5IDQuNzQ5IDAgMDAtNC43NDQgNC43NDMgNC43NDYgNC43NDYgMCAwMDQuNzQ0IDQuNzQ0IDQuNzQ5IDQuNzQ5IDAgMDA0Ljc0NS00Ljc0NHptLTUuNzk4IDIuNTQ3bC0xLjYxOC00LjM0Yy4yNjEtLjAxLjU1NS0uMDM4LjU1NS0uMDM4LjIzOC0uMDI4LjIxLS41MzYtLjAyOC0uNTI2IDAgMC0uNjg4LjA1Mi0xLjEyNS4wNTItLjA4NSAwLS4xNzUgMC0uMjc1LS4wMDVhNC4yMDkgNC4yMDkgMCAwMTMuNTQ0LTEuOTA3YzEuMTA2IDAgMi4xMTEuNDEzIDIuODcgMS4xMS0uMzIyLS4wNTItLjc4Mi4xODUtLjc4Mi43NSAwIC4zMDcuMTYzLjU3LjM0OC44NjdsLjA3OS4xMjljLjE2Ni4yOS4yNi42NDUuMjYgMS4xNjcgMCAuNzA3LS42NjMgMi4zNzEtLjY2MyAyLjM3MWwtMS40MzgtMy45N2EuOTYzLjk2MyAwIDAwLjM4OS0uMDhjLjIzNy0uMDI0LjIwOS0uNTkzLS4wMjgtLjU3OSAwIDAtLjY4NC4wNTctMS4xMy4wNTctLjQxMiAwLTEuMTA1LS4wNTctMS4xMDUtLjA1Ny0uMjM3LS4wMTQtLjI2Ni41Ny0uMDI5LjU3OWwuNDM3LjAzOC41OTggMS42MTctLjg1OSAyLjc2NXptNC41OC0yLjU3NGwtLjAxMS4wMjdhNTQ4LjM5NiA1NDguMzk2IDAgMDAtMS4zODUgMy42OWMxLjI2Ni0uNzMgMi4wODctMi4xMyAyLjA4Ny0zLjY5IDAtLjczLS4xNjYtMS40MDQtLjQ5OC0yLjAxNi4xNDMgMS4wOTYtLjA3NyAxLjY3OC0uMTk0IDEuOTg5em0tNS4zNzcgMy44NjVjLTEuNDE0LS42ODMtMi4zNjctMi4xNjMtMi4zNjctMy44MzggMC0uNjE2LjEwOS0xLjE3Ni4zNDEtMS43MDNsLjQyNyAxLjE2OGMuNTMxIDEuNDU4IDEuMDY0IDIuOTE3IDEuNiA0LjM3M3ptMy4xMzYuMTY2TDYyLjk3MSAzNi40Yy0uMjI1LjY2NS0uNDUzIDEuMzMtLjY4IDEuOTk3bC0uNDY4IDEuMzdjLjM0MS4xMDUuNzEyLjE1NyAxLjA4Ni4xNTcuNDUxIDAgLjg3OC0uMDc2IDEuMjg2LS4yMTN6IiBmaWxsPSIjZmZmIi8+PC9nPjxwYXRoIGQ9Ik0zMjcuNjY4IDU2LjUwN0g1NC4zNzF2MS4zNDZoMjczLjI5N3YtMS4zNDZ6IiBmaWxsPSIjRjBGMEYwIiBtYXNrPSJ1cmwoI2EpIi8+PC9nPjxwYXRoIGQ9Ik0zMzUuOTQzIDEyNS42NzdjNC40NDgtNC4yMTEgMy43NTktMTkuNzUxIDMuNzU5LTIxLjU2NGguNzg1YzAgMS44MTMtLjY4NiAxNy4zNTMgMy43NTkgMjEuNTY0IDMuMjgxIDMuMTA3IDUuNTkgNC4yOTIgMTkuMDYzIDQuMjkydi43MDljLTEzLjQ3MyAwLTE1Ljc4MiAxLjE4NS0xOS4wNjMgNC4yOTItNC40NDkgNC4yMTItMy43NTkgMTkuNzUxLTMuNzU5IDIxLjU2NGgtLjc4NWMwLTEuODEzLjY4Ni0xNy4zNTItMy43NTktMjEuNTY0LTMuMjgyLTMuMTA3LTUuNTkxLTQuMjkyLTE5LjA2NC00LjI5MnYtLjcwOWMxMy40NzMgMCAxNS43ODItMS4xODUgMTkuMDY0LTQuMjkyeiIgZmlsbD0iI0Y0Qzc1OSIvPjxwYXRoIG9wYWNpdHk9Ii41IiBkPSJNMjk2LjI3MyAxMTguNDQ1YzEuOTA2LTEuODAzIDEuNjExLTguNDU1IDEuNjExLTkuMjMyaC4zMzZjMCAuNzc3LS4yOTQgNy40MjkgMS42MTEgOS4yMzIgMS40MDUgMS4zMyAyLjM5NSAxLjgzOCA4LjE2NyAxLjgzOHYuMzAzYy01Ljc3MiAwLTYuNzYyLjUwNy04LjE2NyAxLjgzOC0xLjkwNiAxLjgwMi0xLjYxMSA4LjQ1NS0xLjYxMSA5LjIzMWgtLjMzNmMwLS43NzYuMjk0LTcuNDI5LTEuNjExLTkuMjMxLTEuNDA2LTEuMzMxLTIuMzk1LTEuODM4LTguMTY3LTEuODM4di0uMzAzYzUuNzcyIDAgNi43NjEtLjUwOCA4LjE2Ny0xLjgzOHoiIGZpbGw9IiNGNEM3NTkiLz48cGF0aCBvcGFjaXR5PSIuNyIgZD0iTTMwNC40OTYgMTU4LjY1NWMyLjQzMS0yLjMwMiAyLjA1NC0xMC43OTMgMi4wNTQtMTEuNzg0aC40MjljMCAuOTkxLS4zNzUgOS40ODIgMi4wNTQgMTEuNzg0IDEuNzkzIDEuNjk4IDMuMDU1IDIuMzQ1IDEwLjQxNyAyLjM0NXYuMzg3Yy03LjM2MiAwLTguNjI0LjY0OC0xMC40MTcgMi4zNDYtMi40MzEgMi4zMDEtMi4wNTQgMTAuNzkzLTIuMDU0IDExLjc4M2gtLjQyOWMwLS45OS4zNzUtOS40ODItMi4wNTQtMTEuNzgzLTEuNzkzLTEuNjk4LTMuMDU1LTIuMzQ2LTEwLjQxNy0yLjM0NlYxNjFjNy4zNjIgMCA4LjYyNC0uNjQ3IDEwLjQxNy0yLjM0NXoiIGZpbGw9IiNGNEM3NTkiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJjbGlwMF8xODY1XzE5ODM2NyI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgzODF2MTk0LjMxSDB6Ii8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9ImNsaXAxXzE4NjVfMTk4MzY3Ij48cGF0aCBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1NC41NzYgMjcuMzc1KSIgZD0iTTAgMGgyNzIuODMydjE2Ny4xMjNIMHoiLz48L2NsaXBQYXRoPjxjbGlwUGF0aCBpZD0iY2xpcDJfMTg2NV8xOTgzNjciPjxwYXRoIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyNy45NjggODkuNzg4KSIgZD0iTTAgMGgxMjYuMTAydjYxLjQ4MUgweiIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJjbGlwM18xODY1XzE5ODM2NyI+PHBhdGggZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTI4LjE3MyAxNTUuNzIxKSIgZD0iTTAgMGgxMTkuMzcxdjQ4LjkxNUgweiIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJjbGlwNF8xODY1XzE5ODM2NyI+PHBhdGggZD0iTTU0LjM3MSAyNy4xMTNoMjczLjI5N1Y1Ny4xOEg1NC4zNzFWMjcuMTEzeiIgZmlsbD0iI2ZmZiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==);border-bottom:1px solid #e0e0e0;margin-bottom:16px}.woocommerce-block-editor-tourkit .woocommerce-tour-kit-step__heading .woocommerce-pill{margin-left:12px;background-color:#f5e6b3;border:0}:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}.woocommerce-admin-page__add-product .woocommerce-store-alerts,.woocommerce-admin-page__product_product-id .woocommerce-store-alerts,.woocommerce-admin-page__product_product-id_variation_variation-id .woocommerce-store-alerts{display:none}.woocommerce-admin-page__add-product .woocommerce-layout__primary,.woocommerce-admin-page__product_product-id .woocommerce-layout__primary,.woocommerce-admin-page__product_product-id_variation_variation-id .woocommerce-layout__primary{margin-left:0;margin-right:0;margin-bottom:0}.woocommerce-admin-page__add-product .woocommerce-layout .woocommerce-layout__main,.woocommerce-admin-page__product_product-id .woocommerce-layout .woocommerce-layout__main,.woocommerce-admin-page__product_product-id_variation_variation-id .woocommerce-layout .woocommerce-layout__main{padding:0}.woocommerce-admin-page__add-product .interface-interface-skeleton,.woocommerce-admin-page__product_product-id .interface-interface-skeleton,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton{background-color:#fff;position:static}.woocommerce-admin-page__add-product .interface-interface-skeleton__sidebar,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__sidebar,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__sidebar{width:280px}.woocommerce-admin-page__add-product .interface-interface-skeleton__footer,.woocommerce-admin-page__add-product .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__header{background-color:#fff;position:fixed;width:calc(100% - 160px);left:160px;z-index:80}@media(max-width:960px){.woocommerce-admin-page__add-product .interface-interface-skeleton__footer,.woocommerce-admin-page__add-product .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__header{left:36px;width:calc(100% - 36px)}}@media(max-width:782px){.woocommerce-admin-page__add-product .interface-interface-skeleton__footer,.woocommerce-admin-page__add-product .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__header{left:0;width:100%}}.woocommerce-admin-page__add-product.folded .interface-interface-skeleton__footer,.woocommerce-admin-page__add-product.folded .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id.folded .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id.folded .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id_variation_variation-id.folded .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id_variation_variation-id.folded .interface-interface-skeleton__header{width:calc(100% - 36px);left:36px}.woocommerce-admin-page__add-product .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__header{top:32px}@media(max-width:782px){.woocommerce-admin-page__add-product .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__header{top:46px}}.woocommerce-admin-page__add-product .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__footer{display:flex}.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__content{overflow:hidden}@media(max-width:782px){html.interface-interface-skeleton__html-container{position:inherit}}html.interface-interface-skeleton__html-container .woocommerce-layout__footer.at-bottom{border-top:none;box-shadow:none}body{background-color:#fff}body.woocommerce-admin-page.woocommerce_page_wc-admin #wpbody-content{min-height:calc(100vh - 96px)}
\ No newline at end of file
+@media(min-width:600px){.components-guide{width:600px}}.components-guide .components-modal__content{padding:0;margin-top:0;border-radius:2px}.components-guide .components-modal__content:before{content:none}.components-guide .components-modal__header{border-bottom:none;padding:0;position:sticky;height:60px}.components-guide .components-modal__header .components-button{align-self:flex-start;margin:8px 8px 0 0;position:static}.components-guide .components-modal__header .components-button:hover svg{fill:#fff}.components-guide__container{display:flex;flex-direction:column;justify-content:space-between;margin-top:-60px;min-height:100%}.components-guide__page{display:flex;flex-direction:column;justify-content:center;position:relative}@media(min-width:600px){.components-guide__page{min-height:300px}}.components-guide__footer{align-content:center;display:flex;height:30px;justify-content:center;margin:0 0 24px;padding:0 32px;position:relative;width:100%}.components-guide__footer .components-button.components-guide__back-button,.components-guide__footer .components-button.components-guide__finish-button,.components-guide__footer .components-button.components-guide__forward-button{height:30px;position:absolute;font-weight:inherit}.components-guide__footer .components-button.components-guide__back-button.is-primary,.components-guide__footer .components-button.components-guide__finish-button.is-primary,.components-guide__footer .components-button.components-guide__forward-button.is-primary{color:var(--wp-components-color-accent-inverted,#fff)}.components-guide__footer .components-button.components-guide__back-button:hover,.components-guide__footer .components-button.components-guide__finish-button:hover,.components-guide__footer .components-button.components-guide__forward-button:hover{text-decoration:none}.components-guide__footer .components-button.components-guide__back-button,.components-guide__footer .components-button.components-guide__forward-button{font-size:13px;padding:4px 2px}.components-guide__footer .components-button.components-guide__back-button.has-text svg,.components-guide__footer .components-button.components-guide__forward-button.has-text svg{margin:0}.components-guide__footer .components-button.components-guide__back-button{left:32px}.components-guide__footer .components-button.components-guide__finish-button,.components-guide__footer .components-button.components-guide__forward-button{right:32px}.components-guide__page-control{margin:0;text-align:center}.components-guide__page-control li{display:inline-block;margin:0}.components-guide__page-control .components-button{height:30px;min-width:20px;margin:-6px 0}.components-modal__frame.components-guide{border:none;min-width:312px;height:80vh;max-height:575px}@media(max-width:600px){.components-modal__frame.components-guide{margin:auto;max-width:calc(100vw - 32px)}}.woocommerce-block-editor-guide__header{width:312px;height:222px;background-color:#f6f7f7;background-size:cover}.woocommerce-block-editor-guide__header-1{background-image:url(../838cedcc9d9dfff18d8a.png)}.woocommerce-block-editor-guide__header-2{background-image:url(../df4b3b75be51b9e11f96.png)}.woocommerce-block-editor-guide__header-3{background-image:url(../cc33bd6b007cb731bcc3.png)}.woocommerce-block-editor-guide__header-4{background-image:url(../7a66c49439f3a365c211.png)}.woocommerce-block-editor-guide.components-modal__frame{max-width:312px}.woocommerce-block-editor-guide__heading,.woocommerce-block-editor-guide__text{margin:12px 24px}.woocommerce-block-editor-guide__heading{font-size:24px;line-height:30px}.woocommerce-block-editor-guide .components-guide__page-control{margin-top:12px}.woocommerce-block-editor-guide .components-guide__footer{width:unset;margin:24px}.woocommerce-block-editor-guide .components-guide__footer .components-guide__back-button{left:0;padding:8px 12px}.woocommerce-block-editor-guide .components-guide__footer .components-guide__forward-button{right:0;padding:8px 12px}.woocommerce-block-editor-guide .components-guide__footer .components-guide__finish-button{right:0}.woocommerce-block-editor-tourkit .woocommerce-tour-kit-step{width:381px}.woocommerce-block-editor-tourkit .woocommerce-tour-kit-step .components-card__header{align-items:flex-start;height:194px;background-color:#d4aaf6;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzgxIiBoZWlnaHQ9IjE5NCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTg2NV8xOTgzNjcpIj48cGF0aCBmaWxsPSIjRDRBQUY2IiBkPSJNMCAwaDM4MXYxOTQuMzFIMHoiLz48ZyBjbGlwLXBhdGg9InVybCgjY2xpcDFfMTg2NV8xOTgzNjcpIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNTQuNTc2IDI3LjM3NWgyNzIuODMydjE2Ny4xMjNINTQuNTc2eiIvPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMl8xODY1XzE5ODM2NykiPjxyZWN0IHg9IjEyOC4xNjIiIHk9IjExMy41NjIiIHdpZHRoPSI1MS4yODQiIGhlaWdodD0iNS45MjMiIHJ4PSIxLjc5NSIgZmlsbD0iI0UwRTBFMCIvPjxyZWN0IHg9IjEyOC40MTciIHk9Ijg5Ljc4OCIgd2lkdGg9Ijc0Ljk0NCIgaGVpZ2h0PSIzLjU5IiByeD0iMS43OTUiIGZpbGw9IiNFMEUwRTAiLz48cmVjdCB4PSIxNDIuNTIxIiB5PSIxMjMuODYzIiB3aWR0aD0iMzUuMjgzIiBoZWlnaHQ9IjMuMzg1IiByeD0iMS42OTIiIGZpbGw9IiNFMEUwRTAiLz48cmVjdCB4PSIxMjguNDE3IiB5PSI5Ni4wNzEiIHdpZHRoPSI5NC4yNCIgaGVpZ2h0PSIzLjU5IiByeD0iMS43OTUiIGZpbGw9IiNFMEUwRTAiLz48cmVjdCB4PSIxNDIuNTIxIiB5PSIxMzEuNDU5IiB3aWR0aD0iNDQuMzEiIGhlaWdodD0iMy4zODUiIHJ4PSIxLjY5MiIgZmlsbD0iI0UwRTBFMCIvPjxyZWN0IHg9IjEyOC40MTciIHk9IjEwMi4zNTQiIHdpZHRoPSIzMy4yMDkiIGhlaWdodD0iMy41OSIgcng9IjEuNzk1IiBmaWxsPSIjRTBFMEUwIi8+PHJlY3QgeD0iMTQyLjUyMSIgeT0iMTM5LjA1NSIgd2lkdGg9IjM1LjI4MyIgaGVpZ2h0PSIzLjM4NSIgcng9IjEuNjkyIiBmaWxsPSIjRTBFMEUwIi8+PGVsbGlwc2UgY3g9IjEzNi41MDYiIGN5PSIxMjUuNjYyIiByeD0iMS4zNTgiIHJ5PSIxLjM5OSIgZmlsbD0iIzAwN0NCQSIvPjxyZWN0IHg9IjEyOC40MTIiIHk9IjEyMi45MTMiIHdpZHRoPSIxMC43NTUiIGhlaWdodD0iNS40OTciIHJ4PSIyLjc0OCIgc3Ryb2tlPSIjQkJCIiBzdHJva2Utd2lkdGg9Ii41Ii8+PGVsbGlwc2UgY3g9IjEzMS40NiIgY3k9IjEzMy4yNTgiIHJ4PSIxLjM1OCIgcnk9IjEuMzk5IiBmaWxsPSIjQ0NDIi8+PHJlY3QgeD0iMTI4LjQxMiIgeT0iMTMwLjUxIiB3aWR0aD0iMTAuNzU1IiBoZWlnaHQ9IjUuNDk3IiByeD0iMi43NDgiIHN0cm9rZT0iI0JCQiIgc3Ryb2tlLXdpZHRoPSIuNSIvPjxlbGxpcHNlIGN4PSIxMzYuNTA2IiBjeT0iMTQwLjg1NSIgcng9IjEuMzU4IiByeT0iMS4zOTkiIGZpbGw9IiMwMDdDQkEiLz48cmVjdCB4PSIxMjguNDEyIiB5PSIxMzguMTA2IiB3aWR0aD0iMTAuNzU1IiBoZWlnaHQ9IjUuNDk3IiByeD0iMi43NDgiIHN0cm9rZT0iI0JCQiIgc3Ryb2tlLXdpZHRoPSIuNSIvPjwvZz48cmVjdCB4PSIxMjguMDQ4IiB5PSI3NC4yMzMiIHdpZHRoPSI1MS4yODQiIGhlaWdodD0iNS45MjMiIHJ4PSIxLjc5NSIgZmlsbD0iI0UwRTBFMCIvPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwM18xODY1XzE5ODM2NykiIGZpbGw9IiNFMEUwRTAiPjxyZWN0IHg9IjEyOC4zNDciIHk9IjE1NS45NzkiIHdpZHRoPSIzNy4yNTciIGhlaWdodD0iMTQuNzkzIiByeD0iMS43OTUiLz48cmVjdCBvcGFjaXR5PSIuNiIgeD0iMTY5LjA5NyIgeT0iMTU1Ljk3OSIgd2lkdGg9IjM3LjI1NyIgaGVpZ2h0PSIxNC43OTMiIHJ4PSIxLjc5NSIvPjxyZWN0IG9wYWNpdHk9Ii42IiB4PSIyMDkuODQ3IiB5PSIxNTUuOTc5IiB3aWR0aD0iMzcuMjU3IiBoZWlnaHQ9IjE0Ljc5MyIgcng9IjEuNzk1Ii8+PHJlY3QgeD0iMTI4LjQxNCIgeT0iMTc3Ljk2OSIgd2lkdGg9IjUxLjI4NCIgaGVpZ2h0PSI1LjkyMyIgcng9IjEuNzk1Ii8+PHJlY3QgeD0iMTI4LjQxNCIgeT0iMTg4LjEyNCIgd2lkdGg9IjM1LjI4MyIgaGVpZ2h0PSIzLjM4NSIgcng9IjEuNjkyIi8+PC9nPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwNF8xODY1XzE5ODM2NykiPjxtYXNrIGlkPSJhIiBmaWxsPSIjZmZmIj48cGF0aCBkPSJNNTQuMzcxIDI3LjExM2gyNzMuMjk3VjU3LjE4SDU0LjM3MVYyNy4xMTN6Ii8+PC9tYXNrPjxwYXRoIGQ9Ik01NC4zNzEgMjcuMTEzaDI3My4yOTdWNTcuMThINTQuMzcxVjI3LjExM3oiIGZpbGw9IiNmZmYiLz48cmVjdCB4PSIxNjAuMTIzIiB5PSIzNC4zMTIiIHdpZHRoPSI2MC45NDgiIGhlaWdodD0iNC42NTgiIHJ4PSIxLjc5NSIgZmlsbD0iI0UwRTBFMCIvPjxyZWN0IHg9IjI4OC40ODgiIHk9IjMxLjc3MSIgd2lkdGg9IjMzLjM3NiIgaGVpZ2h0PSI5Ljc0IiByeD0iMS43OTUiIGZpbGw9IiMwMDdDQkEiLz48cmVjdCB4PSIyNTguOTgxIiB5PSIzNC4zMTIiIHdpZHRoPSIyNC42NjkiIGhlaWdodD0iNC42NTgiIHJ4PSIxLjc5NSIgZmlsbD0iI0UwRTBFMCIvPjxyZWN0IHg9IjEyNS43MzIiIHk9IjQ4LjQxMSIgd2lkdGg9IjIxLjI4MyIgaGVpZ2h0PSIzLjM4OCIgcng9IjEuNjk0IiBmaWxsPSIjRTBFMEUwIi8+PHBhdGggZmlsbD0iIzAwN0NCQSIgZD0iTTEyNS43MzIgNTUuNjExaDIxLjI4M3YxLjY5NGgtMjEuMjgzeiIvPjxyZWN0IHg9IjE3OS45MDgiIHk9IjQ4LjQxMSIgd2lkdGg9IjIxLjI4MyIgaGVpZ2h0PSIzLjM4OCIgcng9IjEuNjk0IiBmaWxsPSIjRTBFMEUwIi8+PHJlY3QgeD0iMTUyLjgyIiB5PSI0OC40MTEiIHdpZHRoPSIyMS4yODMiIGhlaWdodD0iMy4zODgiIHJ4PSIxLjY5NCIgZmlsbD0iI0UwRTBFMCIvPjxyZWN0IHg9IjIwNi45OTYiIHk9IjQ4LjQxMSIgd2lkdGg9IjIxLjI4MyIgaGVpZ2h0PSIzLjM4OCIgcng9IjEuNjk0IiBmaWxsPSIjRTBFMEUwIi8+PHJlY3QgeD0iMjM0LjA4MyIgeT0iNDguNDExIiB3aWR0aD0iMjEuMjgzIiBoZWlnaHQ9IjMuMzg4IiByeD0iMS42OTQiIGZpbGw9IiNFMEUwRTAiLz48cGF0aCBmaWxsPSIjMjMyODJEIiBkPSJNNTQuMTI3IDI2LjkyNmgxNy45NTF2MTcuOTVINTQuMTI3eiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNjcuNjU0IDM1LjcwOGE0Ljc1MiA0Ljc1MiAwIDAwLTQuNzQ1LTQuNzQzIDQuNzQ5IDQuNzQ5IDAgMDAtNC43NDQgNC43NDMgNC43NDYgNC43NDYgMCAwMDQuNzQ0IDQuNzQ0IDQuNzQ5IDQuNzQ5IDAgMDA0Ljc0NS00Ljc0NHptLTUuNzk4IDIuNTQ3bC0xLjYxOC00LjM0Yy4yNjEtLjAxLjU1NS0uMDM4LjU1NS0uMDM4LjIzOC0uMDI4LjIxLS41MzYtLjAyOC0uNTI2IDAgMC0uNjg4LjA1Mi0xLjEyNS4wNTItLjA4NSAwLS4xNzUgMC0uMjc1LS4wMDVhNC4yMDkgNC4yMDkgMCAwMTMuNTQ0LTEuOTA3YzEuMTA2IDAgMi4xMTEuNDEzIDIuODcgMS4xMS0uMzIyLS4wNTItLjc4Mi4xODUtLjc4Mi43NSAwIC4zMDcuMTYzLjU3LjM0OC44NjdsLjA3OS4xMjljLjE2Ni4yOS4yNi42NDUuMjYgMS4xNjcgMCAuNzA3LS42NjMgMi4zNzEtLjY2MyAyLjM3MWwtMS40MzgtMy45N2EuOTYzLjk2MyAwIDAwLjM4OS0uMDhjLjIzNy0uMDI0LjIwOS0uNTkzLS4wMjgtLjU3OSAwIDAtLjY4NC4wNTctMS4xMy4wNTctLjQxMiAwLTEuMTA1LS4wNTctMS4xMDUtLjA1Ny0uMjM3LS4wMTQtLjI2Ni41Ny0uMDI5LjU3OWwuNDM3LjAzOC41OTggMS42MTctLjg1OSAyLjc2NXptNC41OC0yLjU3NGwtLjAxMS4wMjdhNTQ4LjM5NiA1NDguMzk2IDAgMDAtMS4zODUgMy42OWMxLjI2Ni0uNzMgMi4wODctMi4xMyAyLjA4Ny0zLjY5IDAtLjczLS4xNjYtMS40MDQtLjQ5OC0yLjAxNi4xNDMgMS4wOTYtLjA3NyAxLjY3OC0uMTk0IDEuOTg5em0tNS4zNzcgMy44NjVjLTEuNDE0LS42ODMtMi4zNjctMi4xNjMtMi4zNjctMy44MzggMC0uNjE2LjEwOS0xLjE3Ni4zNDEtMS43MDNsLjQyNyAxLjE2OGMuNTMxIDEuNDU4IDEuMDY0IDIuOTE3IDEuNiA0LjM3M3ptMy4xMzYuMTY2TDYyLjk3MSAzNi40Yy0uMjI1LjY2NS0uNDUzIDEuMzMtLjY4IDEuOTk3bC0uNDY4IDEuMzdjLjM0MS4xMDUuNzEyLjE1NyAxLjA4Ni4xNTcuNDUxIDAgLjg3OC0uMDc2IDEuMjg2LS4yMTN6IiBmaWxsPSIjZmZmIi8+PC9nPjxwYXRoIGQ9Ik0zMjcuNjY4IDU2LjUwN0g1NC4zNzF2MS4zNDZoMjczLjI5N3YtMS4zNDZ6IiBmaWxsPSIjRjBGMEYwIiBtYXNrPSJ1cmwoI2EpIi8+PC9nPjxwYXRoIGQ9Ik0zMzUuOTQzIDEyNS42NzdjNC40NDgtNC4yMTEgMy43NTktMTkuNzUxIDMuNzU5LTIxLjU2NGguNzg1YzAgMS44MTMtLjY4NiAxNy4zNTMgMy43NTkgMjEuNTY0IDMuMjgxIDMuMTA3IDUuNTkgNC4yOTIgMTkuMDYzIDQuMjkydi43MDljLTEzLjQ3MyAwLTE1Ljc4MiAxLjE4NS0xOS4wNjMgNC4yOTItNC40NDkgNC4yMTItMy43NTkgMTkuNzUxLTMuNzU5IDIxLjU2NGgtLjc4NWMwLTEuODEzLjY4Ni0xNy4zNTItMy43NTktMjEuNTY0LTMuMjgyLTMuMTA3LTUuNTkxLTQuMjkyLTE5LjA2NC00LjI5MnYtLjcwOWMxMy40NzMgMCAxNS43ODItMS4xODUgMTkuMDY0LTQuMjkyeiIgZmlsbD0iI0Y0Qzc1OSIvPjxwYXRoIG9wYWNpdHk9Ii41IiBkPSJNMjk2LjI3MyAxMTguNDQ1YzEuOTA2LTEuODAzIDEuNjExLTguNDU1IDEuNjExLTkuMjMyaC4zMzZjMCAuNzc3LS4yOTQgNy40MjkgMS42MTEgOS4yMzIgMS40MDUgMS4zMyAyLjM5NSAxLjgzOCA4LjE2NyAxLjgzOHYuMzAzYy01Ljc3MiAwLTYuNzYyLjUwNy04LjE2NyAxLjgzOC0xLjkwNiAxLjgwMi0xLjYxMSA4LjQ1NS0xLjYxMSA5LjIzMWgtLjMzNmMwLS43NzYuMjk0LTcuNDI5LTEuNjExLTkuMjMxLTEuNDA2LTEuMzMxLTIuMzk1LTEuODM4LTguMTY3LTEuODM4di0uMzAzYzUuNzcyIDAgNi43NjEtLjUwOCA4LjE2Ny0xLjgzOHoiIGZpbGw9IiNGNEM3NTkiLz48cGF0aCBvcGFjaXR5PSIuNyIgZD0iTTMwNC40OTYgMTU4LjY1NWMyLjQzMS0yLjMwMiAyLjA1NC0xMC43OTMgMi4wNTQtMTEuNzg0aC40MjljMCAuOTkxLS4zNzUgOS40ODIgMi4wNTQgMTEuNzg0IDEuNzkzIDEuNjk4IDMuMDU1IDIuMzQ1IDEwLjQxNyAyLjM0NXYuMzg3Yy03LjM2MiAwLTguNjI0LjY0OC0xMC40MTcgMi4zNDYtMi40MzEgMi4zMDEtMi4wNTQgMTAuNzkzLTIuMDU0IDExLjc4M2gtLjQyOWMwLS45OS4zNzUtOS40ODItMi4wNTQtMTEuNzgzLTEuNzkzLTEuNjk4LTMuMDU1LTIuMzQ2LTEwLjQxNy0yLjM0NlYxNjFjNy4zNjIgMCA4LjYyNC0uNjQ3IDEwLjQxNy0yLjM0NXoiIGZpbGw9IiNGNEM3NTkiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJjbGlwMF8xODY1XzE5ODM2NyI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgzODF2MTk0LjMxSDB6Ii8+PC9jbGlwUGF0aD48Y2xpcFBhdGggaWQ9ImNsaXAxXzE4NjVfMTk4MzY3Ij48cGF0aCBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1NC41NzYgMjcuMzc1KSIgZD0iTTAgMGgyNzIuODMydjE2Ny4xMjNIMHoiLz48L2NsaXBQYXRoPjxjbGlwUGF0aCBpZD0iY2xpcDJfMTg2NV8xOTgzNjciPjxwYXRoIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyNy45NjggODkuNzg4KSIgZD0iTTAgMGgxMjYuMTAydjYxLjQ4MUgweiIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJjbGlwM18xODY1XzE5ODM2NyI+PHBhdGggZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTI4LjE3MyAxNTUuNzIxKSIgZD0iTTAgMGgxMTkuMzcxdjQ4LjkxNUgweiIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGlkPSJjbGlwNF8xODY1XzE5ODM2NyI+PHBhdGggZD0iTTU0LjM3MSAyNy4xMTNoMjczLjI5N1Y1Ny4xOEg1NC4zNzFWMjcuMTEzeiIgZmlsbD0iI2ZmZiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==);border-bottom:1px solid #e0e0e0;margin-bottom:16px}.woocommerce-block-editor-tourkit .woocommerce-tour-kit-step__heading .woocommerce-pill{margin-left:12px;background-color:#f5e6b3;border:0}:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}.woocommerce-admin-page__add-product .woocommerce-store-alerts,.woocommerce-admin-page__product_product-id .woocommerce-store-alerts,.woocommerce-admin-page__product_product-id_variation_variation-id .woocommerce-store-alerts{display:none}.woocommerce-admin-page__add-product .woocommerce-layout__primary,.woocommerce-admin-page__product_product-id .woocommerce-layout__primary,.woocommerce-admin-page__product_product-id_variation_variation-id .woocommerce-layout__primary{margin-left:0;margin-right:0;margin-bottom:0}.woocommerce-admin-page__add-product .woocommerce-layout .woocommerce-layout__main,.woocommerce-admin-page__product_product-id .woocommerce-layout .woocommerce-layout__main,.woocommerce-admin-page__product_product-id_variation_variation-id .woocommerce-layout .woocommerce-layout__main{padding:0}.woocommerce-admin-page__add-product .interface-interface-skeleton,.woocommerce-admin-page__product_product-id .interface-interface-skeleton,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton{background-color:#fff;position:static}.woocommerce-admin-page__add-product .interface-interface-skeleton__sidebar,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__sidebar,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__sidebar{width:280px}.woocommerce-admin-page__add-product .interface-interface-skeleton__footer,.woocommerce-admin-page__add-product .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__header{background-color:#fff;position:fixed;width:calc(100% - 160px);left:160px;z-index:80}@media(max-width:960px){.woocommerce-admin-page__add-product .interface-interface-skeleton__footer,.woocommerce-admin-page__add-product .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__header{left:36px;width:calc(100% - 36px)}}@media(max-width:782px){.woocommerce-admin-page__add-product .interface-interface-skeleton__footer,.woocommerce-admin-page__add-product .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__header{left:0;width:100%}}.woocommerce-admin-page__add-product.folded .interface-interface-skeleton__footer,.woocommerce-admin-page__add-product.folded .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id.folded .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id.folded .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id_variation_variation-id.folded .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id_variation_variation-id.folded .interface-interface-skeleton__header{width:calc(100% - 36px);left:36px}.woocommerce-admin-page__add-product .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__header{top:32px}@media(max-width:782px){.woocommerce-admin-page__add-product .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__header,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__header{top:46px}}.woocommerce-admin-page__add-product .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id .interface-interface-skeleton__footer,.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__footer{display:flex}.woocommerce-admin-page__product_product-id_variation_variation-id .interface-interface-skeleton__content{overflow:hidden}@media(max-width:782px){html.interface-interface-skeleton__html-container{position:inherit}}html.interface-interface-skeleton__html-container .woocommerce-layout__footer.at-bottom{border-top:none;box-shadow:none}body{background-color:#fff}body.woocommerce-admin-page.woocommerce_page_wc-admin #wpbody-content{min-height:calc(100vh - 96px)}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/925.style.css b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/925.style.css
index 5ced01b4..6b0044db 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/925.style.css
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/925.style.css
@@ -1 +1 @@
-.woocommerce-customize-store__container{display:flex;flex-direction:column}.woocommerce-customize-store__container button{cursor:pointer}.woocommerce-customize-store-header{min-height:64px;padding:1rem;width:100%}.woocommerce-customize-store-header .edit-site-site-hub__view-mode-toggle-container{background-color:transparent;height:32px;width:32px}.woocommerce-customize-store-header .edit-site-site-icon{line-height:0}.woocommerce-customize-store-header .edit-site-site-icon svg{height:32px;width:32px}.woocommerce-customize-store-header .edit-site-site-hub__site-title{font-size:.8125rem;font-weight:500;margin:0;padding:0 0 0 .75rem;line-height:2rem;color:#1e1e1e}.woocommerce-customize-store-container{display:flex;flex-direction:row}.woocommerce-customize-store-sidebar{flex:0 0 380px;padding:1rem}.woocommerce-customize-store-sidebar .woocommerce-customize-store-sidebar__title{color:#1e1e1e;font-size:1rem;font-weight:600;margin:0;padding:0;line-height:2.5}.woocommerce-customize-store-sidebar button{background-color:transparent;border:none;line-height:1;padding-right:0;vertical-align:middle}.woocommerce-customize-store-sidebar svg{color:inherit;height:24px;width:24px;margin:.25rem}.woocommerce-customize-store-sidebar p{padding:0 1rem;color:#757575;max-width:20rem}.woocommerce-customize-store-main{margin-right:2.5rem;width:100%;min-width:820px}.woocommerce-customize-store-main p{color:#2f2f2f;font-size:.813rem;line-height:1.5;margin:0;padding:0}.woocommerce-customize-store-main p.select-theme-text{font-size:1rem;font-weight:500;color:#1e1e1e;margin-bottom:24px}.woocommerce-customize-store-banner{background:rgba(242,237,255,.6) url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjc0IiBoZWlnaHQ9IjIxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMzQ0LjcxNyA5OS42ODJjMTUuNTQyLTE0LjIyOCA1LjM5MS00Ni41OC0yMi42NjMtNzIuMjY0LTI4LjA2LTI1LjY4OC02My40LTM0Ljk3Ni03OC45NDItMjAuNzU0LTkuNzc3IDguOTUyLTkuMzg0IDI1LjA4OS0uNzU0IDQyLjIxNy00My41ODktMjcuODYyLTg5LjU5Ny0zNC43OTYtMTEyLjI4Ny0xNC4wMy0yMi42ODMgMjAuNzY2LTE1LjEwOSA2Mi44ODYgMTUuMzI1IDEwMi43OTctMTguNzE1LTcuOS0zNi4zMzYtOC4yNjctNDYuMTEzLjY5LTE1LjU0MiAxNC4yMjktNS4zOSA0Ni41ODEgMjIuNjYzIDcyLjI2NCAyOC4wNTQgMjUuNjgzIDYzLjQgMzQuOTc2IDc4LjkzNSAyMC43NDggOS43NzctOC45NTEgOS4zODQtMjUuMDg4Ljc1NC00Mi4yMTYgNDMuNTg5IDI3Ljg2MiA4OS41OTggMzQuNzk2IDExMi4yODcgMTQuMDI0IDIyLjY4My0yMC43NjYgMTUuMTA5LTYyLjg4Ni0xNS4zMjUtMTAyLjc5NyAxOC43MTYgNy45IDM2LjMzNiA4LjI2IDQ2LjExNC0uNjlsLjAwNi4wMTF6IiBmaWxsPSIjREZEMUZCIiBmaWxsLW9wYWNpdHk9Ii4zIi8+PHBhdGggZD0iTTYzIDk1aDk0djQ0LjYxNmMwIDEuMzE3LTEuMTY5IDIuMzg0LTIuNjEzIDIuMzg0SDY1LjYxM0M2NC4xNyAxNDIgNjMgMTQwLjkzMyA2MyAxMzkuNjE2Vjk1eiIgZmlsbD0iI0JFQTBGMiIvPjxwYXRoIGQ9Ik02NS42MTMgODdoODguNzc0YzEuNDQ0IDAgMi42MTMgMS4yMTIgMi42MTMgMi43MDdWOTVINjN2LTUuMjkzQzYzIDg4LjIxMiA2NC4xNyA4NyA2NS42MTMgODd6IiBmaWxsPSIjMjcxQjNEIi8+PHBhdGggZD0iTTY4LjIxMyA5Mi4yNzZjLjcwOCAwIDEuMjgyLS41MjUgMS4yODItMS4xNzMgMC0uNjQ3LS41NzQtMS4xNzItMS4yODItMS4xNzItLjcwNyAwLTEuMjgxLjUyNS0xLjI4MSAxLjE3MiAwIC42NDguNTczIDEuMTczIDEuMjgxIDEuMTczek03My44NTggOTIuMjc2Yy43MDggMCAxLjI4Mi0uNTI1IDEuMjgyLTEuMTczIDAtLjY0Ny0uNTc0LTEuMTcyLTEuMjgyLTEuMTcyLS43MDggMC0xLjI4MS41MjUtMS4yODEgMS4xNzIgMCAuNjQ4LjU3MyAxLjE3MyAxLjI4MSAxLjE3M3pNNzkuNTAxIDkyLjI3NmMuNzA4IDAgMS4yODItLjUyNSAxLjI4Mi0xLjE3MyAwLS42NDctLjU3NC0xLjE3Mi0xLjI4Mi0xLjE3Mi0uNzA3IDAtMS4yODEuNTI1LTEuMjgxIDEuMTcyIDAgLjY0OC41NzQgMS4xNzMgMS4yODEgMS4xNzN6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTMuOTU2IDE2Ny4yMjlMMCAxNjMuNjFsNTAuMjE1LTQ0LjI2MSAyLjExNCAxLjkzNS00OC4zNzMgNDUuOTQ1eiIgZmlsbD0iI0JFQTBGMiIvPjxwYXRoIGQ9Ik00MC45MjcgMTMyLjE4NGwxMS40MDItMTAuOS0yLjExNC0xLjkzNS0xMS45MTMgMTAuNDMzIDIuNjI1IDIuNDAyek0xNDYuODAxIDEyMC42MjhIOTguNDk2djIuOTc3aDQ4LjMwNXYtMi45Nzd6TTEzMC40ODQgMTI4Ljc0M0g5OC40OTZ2Mi45NzZoMzEuOTg4di0yLjk3NnpNMTQ2LjgwMSAxMTIuNTE0SDk4LjQ5NnYyLjk3N2g0OC4zMDV2LTIuOTc3ek0xMTQuNjAyIDQ1aDU4LjUxMWMxLjQzNyAwIDIuNjAyIDEuMDY2IDIuNjAyIDIuMzgxdjQuNjU1SDExMnYtNC42NTVjMC0xLjMxNSAxLjE2NS0yLjM4MSAyLjYwMi0yLjM4MXoiIGZpbGw9IiMyNzFCM0QiLz48cGF0aCBkPSJNMTczLjM4OSA0Ny4xN2wtLjI0Ny0uMjI2LTEuNDc0IDEuMzQ4LTEuNDc0LTEuMzQ4LS4yNDcuMjI2IDEuNDc0IDEuMzQ4LTEuNDc0IDEuMzQ5LjI0Ny4yMjYgMS40NzQtMS4zNDkgMS40NzQgMS4zNDkuMjQ3LS4yMjYtMS40NzQtMS4zNDkgMS40NzQtMS4zNDh6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTExMiA1Mi4wMjV2MjYuNDE0YzAgMS4zMTUgMS4xNjUgMi4zOCAyLjYwMiAyLjM4aDU4LjQ3NWMxLjQzOCAwIDIuNjAyLTEuMDY1IDIuNjAyLTIuMzhWNTIuMDI1SDExMnoiIGZpbGw9IiNCRUEwRjIiLz48cGF0aCBkPSJNNTcuMjgzIDEwOS40MDljMCAzLjU1MS0zLjEzIDYuNzg5LTIuMzQ5IDcuNTAxLjc3OC43MTEgNC4zMTctMi4xNDkgOC4xOTgtMi4xNDkgMy44OCAwIDcuNDIgMi44NjMgOC4xOTggMi4xNDkuNzc3LS43MTUtMi4zNDktMy45NS0yLjM0OS03LjUwMXMzLjEzLTYuNzkgMi4zNDktNy41MDFjLS43NzgtLjcxMS00LjMxNyAyLjE0OS04LjE5OCAyLjE0OS0zLjg4MSAwLTcuNDItMi44NjMtOC4xOTgtMi4xNDktLjc3Ny43MTEgMi4zNDkgMy45NSAyLjM0OSA3LjUwMXpNNTIuNTg2IDk5Ljc2YzEuNDQ2LTEuMzI0IDEuODcyLTMuMDc4Ljk1My0zLjkyLS45Mi0uODQxLTIuODM4LS40NTEtNC4yODQuODcyLTEuNDQ1IDEuMzIyLTEuODcyIDMuMDc3LS45NTIgMy45MTkuOTIuODQxIDIuODM4LjQ1MSA0LjI4My0uODcyek00Ni44MzYgOTQuNDk0Yy45ODktLjkwNSAxLjI4LTIuMTA0LjY1MS0yLjY4LS42MjgtLjU3NS0xLjk0LS4zMDgtMi45MjguNTk2LS45ODguOTA0LTEuMjggMi4xMDQtLjY1IDIuNjguNjI4LjU3NSAxLjk0LjMwOCAyLjkyNy0uNTk2eiIgZmlsbD0iIzI3MUIzRCIvPjxwYXRoIGQ9Ik0xNzYuNDg4IDEzNy4zOTJjMC0yLjY1My0yLjM0OC00LjgwNC01LjI0NC00LjgwNC0yLjg5NyAwLTUuMjQ1IDIuMTUxLTUuMjQ1IDQuODA0IDAgMi42NTMgMi4zNDggNC44MDMgNS4yNDUgNC44MDMgMi44OTYgMCA1LjI0NC0yLjE1IDUuMjQ0LTQuODAzeiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik0xNzYuNDg4IDEyMi4xYzAtMi42NTMtMi4zNDgtNC44MDQtNS4yNDQtNC44MDQtMi44OTcgMC01LjI0NSAyLjE1MS01LjI0NSA0LjgwNCAwIDIuNjUzIDIuMzQ4IDQuODAzIDUuMjQ1IDQuODAzIDIuODk2IDAgNS4yNDQtMi4xNSA1LjI0NC00LjgwM3oiIGZpbGw9IiNCRUEwRjIiLz48cGF0aCBkPSJNMTc2LjQ4OCAxMDYuODA0YzAtMi42NTMtMi4zNDgtNC44MDQtNS4yNDQtNC44MDQtMi44OTcgMC01LjI0NSAyLjE1MS01LjI0NSA0LjgwNCAwIDIuNjUzIDIuMzQ4IDQuODAzIDUuMjQ1IDQuODAzIDIuODk2IDAgNS4yNDQtMi4xNSA1LjI0NC00LjgwM3oiIGZpbGw9IiMyNzFCM0QiLz48L3N2Zz4=) no-repeat 100%;background-size:auto 218px;background-position-y:29px;border-radius:4px;display:flex;margin:1.25rem 0 3.375rem;min-height:248px;width:100%;align-items:center}.woocommerce-customize-store-banner.offline-banner{background:rgba(242,237,255,.6) url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjM5IiBoZWlnaHQ9IjIxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMzA5LjcxNyA5OS42ODJjMTUuNTQyLTE0LjIyOCA1LjM5MS00Ni41OC0yMi42NjMtNzIuMjY0LTI4LjA2LTI1LjY4OC02My40LTM0Ljk3Ni03OC45NDItMjAuNzU0LTkuNzc3IDguOTUyLTkuMzg0IDI1LjA4OS0uNzU0IDQyLjIxNy00My41ODktMjcuODYyLTg5LjU5Ny0zNC43OTYtMTEyLjI4Ny0xNC4wMy0yMi42ODMgMjAuNzY2LTE1LjEwOSA2Mi44ODYgMTUuMzI1IDEwMi43OTctMTguNzE1LTcuOS0zNi4zMzYtOC4yNjctNDYuMTEzLjY5LTE1LjU0MiAxNC4yMjktNS4zOSA0Ni41ODEgMjIuNjYzIDcyLjI2NCAyOC4wNTQgMjUuNjgzIDYzLjQgMzQuOTc2IDc4LjkzNSAyMC43NDggOS43NzctOC45NTEgOS4zODQtMjUuMDg4Ljc1NC00Mi4yMTYgNDMuNTg5IDI3Ljg2MiA4OS41OTggMzQuNzk2IDExMi4yODcgMTQuMDI0IDIyLjY4My0yMC43NjYgMTUuMTA5LTYyLjg4Ni0xNS4zMjUtMTAyLjc5NyAxOC43MTYgNy45IDM2LjMzNiA4LjI2IDQ2LjExNC0uNjlsLjAwNi4wMTF6IiBmaWxsPSIjREZEMUZCIiBmaWxsLW9wYWNpdHk9Ii4zIi8+PHBhdGggZD0iTTE4LjIxOCA1OWMtMTYuNSAwLTIzLjcxNCA5LTEwIDI0IDE2LjAwMSAxNy41IDE3LjAwMSAyOCAwIDQ0LjUiIHN0cm9rZT0iIzAwMCIvPjxwYXRoIGQ9Ik0yOC4yMzggOTQuNTg0aDkzLjYwN3Y0NC41NjFjMCAxLjMxNi0xLjE2NCAyLjM4MS0yLjYwMiAyLjM4MUgzMC44NGMtMS40MzggMC0yLjYwMi0xLjA2NS0yLjYwMi0yLjM4MVY5NC41ODR6IiBmaWxsPSIjQkVBMEYyIi8+PHBhdGggZD0iTTMwLjg0IDg3LjU4NWg4OC40MDNjMS40MzggMCAyLjYwMiAxLjA2NiAyLjYwMiAyLjM4MnY0LjY1NUgyOC4yMzh2LTQuNjU1YzAtMS4zMTYgMS4xNjQtMi4zODIgMi42MDItMi4zODJ6IiBmaWxsPSIjMjcxQjNEIi8+PHBhdGggZD0iTTMzLjM5IDkyLjI3NmMuNzA5IDAgMS4yODItLjUyNSAxLjI4Mi0xLjE3MyAwLS42NDctLjU3My0xLjE3Mi0xLjI4MS0xLjE3MnMtMS4yODIuNTI1LTEuMjgyIDEuMTcyYzAgLjY0OC41NzQgMS4xNzMgMS4yODIgMS4xNzN6TTM5LjAzNiA5Mi4yNzZjLjcwNyAwIDEuMjgxLS41MjUgMS4yODEtMS4xNzMgMC0uNjQ3LS41NzQtMS4xNzItMS4yODEtMS4xNzItLjcwOCAwLTEuMjgyLjUyNS0xLjI4MiAxLjE3MiAwIC42NDguNTc0IDEuMTczIDEuMjgyIDEuMTczek00NC42NzkgOTIuMjc2Yy43MDggMCAxLjI4MS0uNTI1IDEuMjgxLTEuMTczIDAtLjY0Ny0uNTczLTEuMTcyLTEuMjgxLTEuMTcycy0xLjI4Mi41MjUtMS4yODIgMS4xNzJjMCAuNjQ4LjU3NCAxLjE3MyAxLjI4MiAxLjE3M3oiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTExLjk3OCAxMjAuNjI4SDYzLjY3M3YyLjk3N2g0OC4zMDV2LTIuOTc3ek05NS42NiAxMjguNzQySDYzLjY3NHYyLjk3N2gzMS45ODh2LTIuOTc3ek0xMTEuOTc4IDExMi41MTRINjMuNjczdjIuOTc3aDQ4LjMwNXYtMi45Nzd6TTc5Ljc4IDQ1aDU4LjUxYzEuNDM4IDAgMi42MDIgMS4wNjYgMi42MDIgMi4zODF2NC42NTVINzcuMTc3di00LjY1NWMwLTEuMzE1IDEuMTY1LTIuMzgxIDIuNjAzLTIuMzgxeiIgZmlsbD0iIzI3MUIzRCIvPjxwYXRoIGQ9Ik0xMzguNTY2IDQ3LjE3bC0uMjQ3LS4yMjYtMS40NzQgMS4zNDgtMS40NzMtMS4zNDgtLjI0Ny4yMjYgMS40NzMgMS4zNDgtMS40NzMgMS4zNDkuMjQ3LjIyNiAxLjQ3My0xLjM0OSAxLjQ3NCAxLjM0OS4yNDctLjIyNy0xLjQ3My0xLjM0OCAxLjQ3My0xLjM0OHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNNzcuMTc3IDUyLjAyNXYyNi40MTRjMCAxLjMxNSAxLjE2NSAyLjM4IDIuNjAzIDIuMzhoNTguNDc0YzEuNDM4IDAgMi42MDItMS4wNjUgMi42MDItMi4zOFY1Mi4wMjVINzcuMTc3ek0yOC4yMzggOTUuNTg0aDkzLjYwN3Y0NC41NjFjMCAxLjMxNi0xLjE2NCAyLjM4MS0yLjYwMiAyLjM4MUgzMC44NGMtMS40MzggMC0yLjYwMi0xLjA2NS0yLjYwMi0yLjM4MVY5NS41ODR6IiBmaWxsPSIjQkVBMEYyIi8+PHBhdGggZD0iTTMwLjg0IDg4LjU4NWg4OC40MDNjMS40MzggMCAyLjYwMiAxLjA2NiAyLjYwMiAyLjM4MnY0LjY1NUgyOC4yMzh2LTQuNjU1YzAtMS4zMTYgMS4xNjQtMi4zODIgMi42MDItMi4zODJ6IiBmaWxsPSIjMjcxQjNEIi8+PHBhdGggZD0iTTMzLjM5IDkzLjI3NmMuNzA5IDAgMS4yODItLjUyNSAxLjI4Mi0xLjE3MyAwLS42NDctLjU3My0xLjE3Mi0xLjI4MS0xLjE3MnMtMS4yODIuNTI1LTEuMjgyIDEuMTcyYzAgLjY0OC41NzQgMS4xNzMgMS4yODIgMS4xNzN6TTM5LjAzNiA5My4yNzZjLjcwNyAwIDEuMjgxLS41MjUgMS4yODEtMS4xNzMgMC0uNjQ3LS41NzQtMS4xNzItMS4yODEtMS4xNzItLjcwOCAwLTEuMjgyLjUyNS0xLjI4MiAxLjE3MiAwIC42NDguNTc0IDEuMTczIDEuMjgyIDEuMTczek00NC42NzkgOTMuMjc2Yy43MDggMCAxLjI4MS0uNTI1IDEuMjgxLTEuMTczIDAtLjY0Ny0uNTczLTEuMTcyLTEuMjgxLTEuMTcycy0xLjI4Mi41MjUtMS4yODIgMS4xNzJjMCAuNjQ4LjU3NCAxLjE3MyAxLjI4MiAxLjE3M3oiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNNzkuNzkxIDQ2aDU4Ljc3MmMxLjQ0NCAwIDIuNjE0IDEuMDYgMi42MTQgMi4zNjlWNTNoLTY0di00LjYzMWMwLTEuMzA5IDEuMTctMi4zNjkgMi42MTQtMi4zNjl6IiBmaWxsPSIjMjcxQjNEIi8+PHBhdGggZD0iTTEzOC41NjYgNDguMTdsLS4yNDctLjIyNi0xLjQ3NCAxLjM0OC0xLjQ3My0xLjM0OC0uMjQ3LjIyNiAxLjQ3MyAxLjM0OC0xLjQ3MyAxLjM0OS4yNDcuMjI2IDEuNDczLTEuMzQ5IDEuNDc0IDEuMzQ5LjI0Ny0uMjI3LTEuNDczLTEuMzQ4IDEuNDczLTEuMzQ4eiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik03Ny4xNzcgNTN2MjYuNjAyYzAgMS4zMjUgMS4xNyAyLjM5OCAyLjYxNiAyLjM5OGg1OC43NjljMS40NDUgMCAyLjYxNS0xLjA3MyAyLjYxNS0yLjM5OFY1M2gtNjR6IiBmaWxsPSIjQkVBMEYyIi8+PHBhdGggZD0iTTgzLjYwOSAxMzZsMi4zNS0yLjM1Yy03LjA1NS02LjY1Ni0xOC4xMzctNi42NTYtMjUuMTkyIDBsMi4zNSAyLjM1YzUuNzU4LTUuMzYzIDE0LjczMy01LjM2MyAyMC40OTIgMHoiIGZpbGw9IiMyNzFCM0QiLz48cGF0aCBkPSJNOTEuNDE0IDEyOC4xOTVsMi4zNS0yLjM1Yy01LjUxNC01LjI5Mi0xMi43MzUtOC4yMDMtMjAuNC04LjIwMy03LjY2NiAwLTE0Ljg4NyAyLjkwOC0yMC40IDguMjAzbDIuMzUgMi4zNWM0Ljg4Ni00LjY2NiAxMS4yNzItNy4yMjkgMTguMDUtNy4yMjkgNi43NzggMCAxMy4xNjYgMi41NjMgMTguMDUgNy4yMjl6IiBmaWxsPSIjMjcxQjNEIi8+PHBhdGggZD0iTTk5LjIwMSAxMjAuNDA4bDIuMzUtMi4zNWMtNy42LTcuMzYzLTE3LjU4MS0xMS40MDktMjguMTg3LTExLjQwOS0xMC42MDYgMC0yMC41ODcgNC4wNDktMjguMTg3IDExLjQwOWwyLjM1IDIuMzVjNi45Ny02LjczMyAxNi4xMi0xMC40MzcgMjUuODM3LTEwLjQzNyA5LjcxOCAwIDE4Ljg2NyAzLjcwMSAyNS44MzcgMTAuNDM3eiIgZmlsbD0iIzI3MUIzRCIvPjxwYXRoIGQ9Ik05OS4xNTYgMTE1LjUzMmE3Ljc2NiA3Ljc2NiAwIDEwMC0xNS41MzIgNy43NjYgNy43NjYgMCAwMDAgMTUuNTMyeiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik0xMDIuMjgzIDEwNS4wOWwtLjQ1MS0uNDQ4LTIuNjc2IDIuNjc2LTIuNjc3LTIuNjc2LS40NS40NDggMi42NzkgMi42NzYtMi42OCAyLjY3Ni40NTEuNDUxIDIuNjc3LTIuNjc3IDIuNjc2IDIuNjc3LjQ1MS0uNDUxLTIuNjc3LTIuNjc2IDIuNjc3LTIuNjc2ek00MC4zNDggNjcuNzI5aDIyLjMxOGMxLjAxIDAgMS44MjYtLjc3MyAxLjgyNi0yLjAzNCAwLTEuMjYxLS44MTctMi4yMjQtMS44MjYtMi4yMjRINDAuMzQ4djQuMjU4ek00MC4zNDggNTQuMjg4aDIyLjMxOGMxLjAxIDAgMS44MjYtLjc3MiAxLjgyNi0yLjAzM3MtLjgxNy0yLjIyNS0xLjgyNi0yLjIyNUg0MC4zNDh2NC4yNTh6IiBmaWxsPSIjMjcxQjNEIi8+PHBhdGggZD0iTTY0LjQ5MiA1Mi4yNTVjMC0xLjI2MS0uODE3LTIuMjI1LTEuODI2LTIuMjI1aC0yLjA3djQuMjU4aDIuMDdjMS4wMSAwIDEuODI2LS43NzIgMS44MjYtMi4wMzN6TTY0LjQ5MiA2NS42OTVjMC0xLjI2MS0uODE3LTIuMjI0LTEuODI2LTIuMjI0aC0yLjA3djQuMjU4aDIuMDdjMS4wMSAwIDEuODI2LS43NzMgMS44MjYtMi4wMzR6TTUwLjAyIDQ1SDM3LjY0Yy01LjAxNCAwLTguNzI3IDIuOTg5LTEwLjUwOCA3LjQ3N2gtMS44OTFjLTEuMDc5IDAtMS43ODguMjMtMi44MjYgMS44MzQtLjMxNy40ODktLjY2NiAxLjA1LTEuODYgMS4wNWgtLjY5N2MtLjk3NiAwLTEuNzY2LjgwNC0xLjc2NiAxLjc5NXYzLjY4OGMwIC45OTEuNzkgMS43OTUgMS43NjYgMS43OTVoLjY5N2MxLjE5NCAwIDEuNTQzLjU2MSAxLjg2IDEuMDUgMS4wMzggMS42MDQgMS43NDcgMS44MzQgMi44MjYgMS44MzRoMS44OTZjMS43ODMgNC40ODMgNS40OTMgNy40NjcgMTAuNTA2IDcuNDY3IDQuMTY3IDAgMTIuMzc5LjAxIDEyLjM3OS4wMS45MjIgMCAxLjY3LS43NiAxLjY3LTEuNjk3di0yNC42MUExLjY4IDEuNjggMCAwMDUwLjAyMiA0NWgtLjAwM3oiIGZpbGw9IiNCRUEwRjIiLz48L3N2Zz4=) no-repeat 100%;background-size:auto 218px;background-position-y:29px}.woocommerce-customize-store-banner.existing-ai-theme-banner{background:#f6f7f7}.woocommerce-customize-store-banner.existing-ai-theme-banner .woocommerce-customize-store-banner-content{width:100%;display:flex}.woocommerce-customize-store-banner.existing-ai-theme-banner .woocommerce-block-preview-container{flex:1;position:relative}.woocommerce-customize-store-banner.existing-ai-theme-banner .iframe-container{pointer-events:none;overflow:hidden;position:absolute;top:-24px;right:15%}.woocommerce-customize-store-banner.existing-ai-theme-banner .preview-iframe{width:480px;height:301px;zoom:2.5;-moz-transform:scale(.3);-moz-transform-origin:top right;-o-transform:scale(.3);-o-transform-origin:top right;-webkit-transform:scale(.3);-webkit-transform-origin:top right;border-top-left-radius:8px;border-top-right-radius:8px}.woocommerce-customize-store-banner .woocommerce-customize-store-banner-content{width:450px;margin-left:50px}@media only screen and (min-width:1400px){.woocommerce-customize-store-banner .woocommerce-customize-store-banner-content{width:700px}}.woocommerce-customize-store-banner .woocommerce-customize-store-banner-content button.is-link{color:var(--wp-admin-theme-color,#3858e9);text-decoration:none;font-weight:500}.woocommerce-customize-store-banner .woocommerce-customize-store-banner-content button.components-button{padding:8px 16px;height:40px}.woocommerce-customize-store-banner .woocommerce-customize-store-banner-content button.components-button+button.components-button{margin-left:12px}.woocommerce-customize-store-banner .woocommerce-customize-store-banner-content h1{font-size:1.25rem;line-height:23.87px;font-weight:500;color:#000;margin-top:28px;padding:0}.woocommerce-customize-store-banner .woocommerce-customize-store-banner-content p{margin:12px 0 28px;color:#2f2f2f;line-height:16px}.woocommerce-customize-store-banner .woocommerce-customize-store-banner-content p.ai-disclaimer{color:#757575;font-size:12px;margin-top:10px;line-height:18px}.woocommerce-customize-store-banner .woocommerce-customize-store-banner-content p.ai-disclaimer a{text-decoration:none}.woocommerce-customize-store-theme-cards{display:grid;flex-wrap:wrap;gap:32px;row-gap:54px;grid-template-columns:repeat(2,1fr)}@media only screen and (min-width:1600px){.woocommerce-customize-store-theme-cards{grid-template-columns:repeat(4,1fr)}}.woocommerce-customize-store-theme-cards .theme-card{display:block;text-decoration:none}.woocommerce-customize-store-theme-cards .theme-card a:focus{box-shadow:none}.woocommerce-customize-store-theme-cards .theme-card img{border-radius:4px;border:1px solid #e9e9e9;width:100%;height:240px;-o-object-fit:cover;object-fit:cover;-o-object-position:0 0;object-position:0 0}.woocommerce-customize-store-theme-cards .theme-card .theme-card__title{font-size:1rem;margin:0;padding:0;font-weight:600}.woocommerce-customize-store-theme-cards .theme-card .theme-card__info{margin:24px 0 8px;display:flex}.woocommerce-customize-store-theme-cards .theme-card .theme-card__info .theme-card__color-palettes{margin-left:auto}.woocommerce-customize-store-theme-cards .theme-card .theme-card__color-palettes{display:flex;margin:0 0 0 auto;padding:0;gap:5px}.woocommerce-customize-store-theme-cards .theme-card .theme-card__color-palettes li{width:20px;height:20px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.2);border-radius:50%;margin-bottom:0}.woocommerce-customize-store-theme-cards .theme-card .theme-card__color-palettes li.more_palettes{box-shadow:none;font-size:11px;text-align:center}.woocommerce-customize-store-theme-cards .theme-card .theme-card__active{border-radius:100px;background:rgba(56,88,233,.2);padding:5px 10px;justify-content:flex-end;align-items:center;gap:10px;color:#1d35b4;font-size:12px;font-style:normal;font-weight:500;line-height:20px;margin-right:10px}.woocommerce-customize-store-theme-cards .theme-card .theme-card__free{color:#1e1e1e;font-size:14px;font-style:normal;font-weight:400;line-height:16px}.woocommerce-customize-store-browse-themes{text-align:center}.woocommerce-customize-store-browse-themes button{background-color:#fff;border:1px solid var(--wp-admin-theme-color,#3858e9);border-radius:2px;color:var(--wp-admin-theme-color,#3858e9);display:inline-block;font-size:.8125rem;margin:3.75rem 0;padding:.5rem .75rem}.woocommerce-customize-store__design-change-warning-modal{width:480px;max-width:480px}.woocommerce-customize-store__design-change-warning-modal .components-modal__header{padding-top:32px}.woocommerce-customize-store__design-change-warning-modal p{padding:16px 0;margin:0}.woocommerce-customize-store__design-change-warning-modal a,.woocommerce-customize-store__design-change-warning-modal button{text-decoration:none!important}.woocommerce-customize-store__design-change-warning-modal .components-button{padding:8px 16px}.woocommerce-customize-store__design-change-warning-modal h1{line-height:28px;font-size:20px;color:#1e1e1e}.woocommerce-customize-store__design-change-warning-modal .woocommerce-customize-store__design-change-warning-modal-footer{display:flex;gap:12px;justify-content:flex-end}.close-cys-design-with-ai{transition:none;border:none;padding:0;margin:20px 0 0 20px;height:24px}.close-cys-design-with-ai:focus{outline:0!important;box-shadow:none!important}.woocommerce-cys-choice-container{display:flex;flex-direction:column;padding:16px;border:1px solid #e0e0e0;border-radius:2px;width:100%;cursor:pointer}.woocommerce-cys-choice-container[data-selected]{border-radius:2px;border-color:transparent;box-shadow:0 0 0 2px var(--wp-admin-theme-color)}.woocommerce-cys-choice-container:focus-visible{border:2px solid var(--wp-admin-theme-color);padding:24px 16px}.woocommerce-cys-choice{display:flex;flex-direction:column}.woocommerce-cys-choice .woocommerce-cys-choice-input{opacity:0;position:absolute}.woocommerce-cys-choice label{color:#1e1e1e;font-size:16px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:-.24px;margin-bottom:8px}.woocommerce-cys-choice p{margin:0;color:#757575;font-size:13px;font-style:normal;font-weight:400;line-height:16px}.woocommerce-onboarding-loader{min-height:100vh;display:flex;justify-content:center;align-items:center;flex-direction:column;background-color:#fff}.woocommerce-onboarding-loader .woocommerce-onboarding-loader-wrapper{align-items:flex-start;display:flex;flex-direction:column;justify-content:center;max-width:520px;min-height:400px}.woocommerce-onboarding-loader .woocommerce-onboarding-loader-wrapper .woocommerce-onboarding-loader-container{text-align:center;min-height:400px}.woocommerce-onboarding-loader .woocommerce-onboarding-loader-wrapper .loader-hearticon{position:relative;top:2px;left:2px}.woocommerce-customize-store__step-designWithAi .woocommerce-onboarding-loader-wrapper,.woocommerce-customize-store__step-designWithAi .woocommerce-onboarding-loader-wrapper .woocommerce-onboarding-loader-container{min-height:auto}.progress-bar.smooth-transition .woocommerce-onboarding-progress-bar__filler{transition:width 1s linear}.global-styles-variation-container__iframe{border-radius:3px;box-shadow:0 0 0 1px rgba(0,0,0,.1);border:0;display:block;max-width:100%}.color-block-support-panel{padding:0;border-top:0}.color-block-support-panel .components-tools-panel-header{display:none}.color-block-support-panel .block-editor-tools-panel-color-gradient-settings__dropdown .components-button{color:#1e1e1e;font-size:.8125rem;font-style:normal;font-weight:400;line-height:16px}.color-block-support-panel .block-editor-tools-panel-color-gradient-settings__dropdown .components-button.is-open{background:initial;color:#1e1e1e}.color-block-support-panel .block-editor-tools-panel-color-gradient-settings__dropdown .components-button:focus{box-shadow:none}.color-block-support-panel .block-editor-panel-color-gradient-settings__dropdown{padding:12px 0}.color-block-support-panel .block-editor-panel-color-gradient-settings__dropdown .components-flex{flex-direction:row-reverse;justify-content:space-between}.color-block-support-panel .color-block-support-panel__inner-wrapper .block-editor-tools-panel-color-gradient-settings__item{border:0;order:10}.color-block-support-panel .color-block-support-panel__inner-wrapper .block-editor-tools-panel-color-gradient-settings__item:nth-child(2){order:1}.color-block-support-panel .color-block-support-panel__inner-wrapper .block-editor-tools-panel-color-gradient-settings__item.first{border-top:0;order:2}.color-block-support-panel .color-block-support-panel__inner-wrapper .block-editor-tools-panel-color-gradient-settings__item:nth-child(6){order:3}.color-block-support-panel .color-block-support-panel__inner-wrapper .block-editor-tools-panel-color-gradient-settings__item:nth-child(5){order:4}.color-block-support-panel .color-block-support-panel__inner-wrapper .block-editor-tools-panel-color-gradient-settings__item:nth-child(3){order:5}.block-editor-color-gradient-control__panel>.components-flex>.components-h-stack.components-v-stack{display:none}.block-editor-color-gradient-control__panel>.components-spacer>.components-flex>.components-h-stack.components-v-stack:not(.components-custom-gradient-picker){display:none}.woocommerce-customize-store__transitional{display:flex;flex-direction:column;width:100vw;height:100vh}.woocommerce-customize-store__transitional .edit-site-site-hub.edit-site-layout__hub{height:64px;padding:16px;gap:12px;width:100%;position:static}.woocommerce-customize-store__transitional .edit-site-site-hub.edit-site-layout__hub .edit-site-site-hub__view-mode-toggle-container,.woocommerce-customize-store__transitional .edit-site-site-hub.edit-site-layout__hub .edit-site-site-icon__image,.woocommerce-customize-store__transitional .edit-site-site-hub.edit-site-layout__hub svg{height:32px;width:32px;background:transparent}.woocommerce-customize-store__transitional .edit-site-site-hub.edit-site-layout__hub .edit-site-site-hub__site-title{margin-left:12px;color:#1e1e1e;font-size:13px;font-style:normal;font-weight:500;line-height:20px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-content{flex:1;display:flex;flex-direction:column;align-items:center;padding-top:40px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-heading{color:#1e1e1e;text-align:center;font-feature-settings:"clig" off,"liga" off;font-size:32px;font-style:normal;font-weight:400;line-height:60px;letter-spacing:-.32px;margin:0}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-subheading{color:#757575;text-align:center;font-size:16px;font-style:normal;font-weight:400;line-height:24px;letter-spacing:-.1px;margin:4px 0 0;width:560px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-main-actions{margin:20px 0 0;display:flex;gap:20px;flex-direction:row}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-main-actions .components-button{padding:8px 16px;height:40px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container{border-radius:16px;margin-top:50px;background:#f6f7f7;box-shadow:0 6px 6px 0 rgba(0,0,0,.02),0 13px 10px 0 rgba(0,0,0,.03),0 15px 20px 0 rgba(0,0,0,.04);width:600px;height:371px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container div{position:relative;border-radius:24px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container .woocommerce-customize-store__edit-site-editor{height:100%}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container .woocommerce-customize-store__block-editor{position:relative;display:flex;align-items:center;justify-content:center;width:100%;height:100%}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container .interface-navigable-region{overflow:hidden}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container .auto-block-preview__container,.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container .block-editor-block-preview__content{width:588px;height:363px;position:relative}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container iframe{border-radius:24px;width:1176px;height:726px;transform:scale(.5);left:-50%;position:relative;top:-50%}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container.is-loading{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container.is-loading:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container.is-loading{animation:none}}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container.is-loading iframe{visibility:hidden;opacity:.5}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-actions{display:flex;flex-direction:row;margin-top:50px;gap:40px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-actions .woocommerce-customize-store__transitional-action{display:flex;flex-direction:column;width:280px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-actions .woocommerce-customize-store__transitional-action h3{color:#1e1e1e;font-size:16px;font-style:normal;font-weight:500;line-height:24px;margin:0}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-actions .woocommerce-customize-store__transitional-action p{margin:5px 0 0;color:#757575;font-size:13px;font-style:normal;font-weight:400;line-height:16px;height:48px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-actions .woocommerce-customize-store__transitional-action .components-button{margin-top:16px;padding:0;margin-left:0;height:20px;width:fit-content}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-actions .woocommerce-customize-store__transitional-action .components-button:hover{background:transparent}.woocommerce-ai-survey-modal{max-height:100%;max-width:620px}.woocommerce-ai-survey-modal .components-modal__header{padding:32px 32px 24px}.woocommerce-ai-survey-modal .components-modal__header .components-modal__header-heading{font-size:20px;font-style:normal;font-weight:400;line-height:28px}.woocommerce-ai-survey-modal .components-modal__content{padding-top:0;padding-bottom:16px}.woocommerce-ai-survey-form .woocommerce-ai-survey-form__description{margin:0 0 12px;font-size:13px;font-style:normal;font-weight:400;line-height:20px}.woocommerce-ai-survey-form h4{font-size:13px;font-style:normal;font-weight:600;line-height:16px;margin-top:0;margin-bottom:12px}.woocommerce-ai-survey-form .woocommerce-survey-star-rating button{background-color:transparent;border:none;outline:none;cursor:pointer;padding:0 6px 0 0;font-size:20px}.woocommerce-ai-survey-form .woocommerce-survey-star-rating .woocommerce-survey-star-rating__button-on{color:#000}.woocommerce-ai-survey-form .woocommerce-survey-star-rating .woocommerce-survey-star-rating__button-off{color:var(--gray-gray-5,#dcdcde)}.woocommerce-ai-survey-form hr{color:var(--gutenberg-gray-100,#f0f0f0);margin:20px 0}.woocommerce-ai-survey-form .components-checkbox-control__input{border:1px solid #949494;border-radius:2px}.woocommerce-ai-survey-form .components-checkbox-control:last-child{margin-bottom:4px}.woocommerce-ai-survey-form .buttons{display:flex;justify-content:flex-end;gap:12px}.woocommerce-ai-survey-form .buttons .components-button{padding:8px 16px}.woocommerce-ai-survey-form .components-textarea-control__input{resize:none;height:72px;margin-bottom:20px;font-size:13px;font-style:normal;font-weight:400;line-height:16px;color:#1e1e1e}@keyframes containerFadeIn{0%,80%{opacity:0}to{opacity:1}}.woocommerce-customize-store .edit-site-site-hub__view-mode-toggle-container a{color:unset}.woocommerce-customize-store__step-assemblerHub a{text-decoration:none}.woocommerce-customize-store__step-assemblerHub .edit-site-layout{bottom:0;left:0;min-height:100vh;position:fixed;right:0;top:0;background-color:#fcfcfc}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__hub{width:380px;height:64px}.woocommerce-customize-store__step-assemblerHub .edit-site-site-hub__view-mode-toggle-container{height:64px}.woocommerce-customize-store__step-assemblerHub .edit-site-sidebar-navigation-screen__title-icon{align-items:center;padding-top:80px;padding-bottom:0;gap:0;width:348px;z-index:2}.woocommerce-customize-store__step-assemblerHub .edit-site-sidebar-navigation-screen-patterns__group-header{margin-top:32px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__view-mode-toggle-icon.edit-site-site-icon,.woocommerce-customize-store__step-assemblerHub .edit-site-sidebar-navigation-screen__title-icon,.woocommerce-customize-store__step-assemblerHub .edit-site-site-hub__view-mode-toggle-container{background-color:#fcfcfc}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__view-mode-toggle-icon.edit-site-site-icon{align-items:center;display:flex}.woocommerce-customize-store__step-assemblerHub .edit-site-site-hub__site-title{color:#1e1e1e;font-size:.8125rem;font-style:normal;font-weight:500;line-height:20px;margin:0}.woocommerce-customize-store__step-assemblerHub .edit-site-site-icon__image{border-radius:2px}.woocommerce-customize-store__step-assemblerHub .edit-site-site-hub__view-mode-toggle-container{padding:16px 12px 0 16px}.woocommerce-customize-store__step-assemblerHub .edit-site-site-hub__view-mode-toggle-container .edit-site-layout__view-mode-toggle,.woocommerce-customize-store__step-assemblerHub .edit-site-site-hub__view-mode-toggle-container .edit-site-layout__view-mode-toggle-icon.edit-site-site-icon,.woocommerce-customize-store__step-assemblerHub .edit-site-site-hub__view-mode-toggle-container .edit-site-site-icon__icon{width:32px;height:32px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar-region{width:380px;z-index:3}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar__content{display:flex;flex-direction:column}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar__content .components-navigator-screen{will-change:auto;padding:0 16px;overflow-x:hidden;flex:1}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar__content .components-navigator-screen::-webkit-scrollbar-thumb{background-color:#c1c1c1}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar__content .components-navigator-screen::-webkit-scrollbar-track-piece:start{background:transparent;margin-top:250px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar__content .components-navigator-screen::-webkit-scrollbar-track-piece:end{background:transparent;margin-bottom:400px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-button{color:#1e1e1e;height:40px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-screen__title{font-size:1rem;color:#1e1e1e;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-weight:600;line-height:24px;padding:0}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-screen__description{color:#757575;font-size:.8125rem;font-style:normal;font-weight:400;line-height:20px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-screen__content .components-heading{color:#757575;font-size:.6875rem;font-style:normal;font-weight:600;line-height:16px;text-transform:uppercase}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-item{border-radius:4px;padding:8px 8px 8px 16px;align-items:center;gap:8px;align-self:stretch;width:348px;border:1.5px solid transparent}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-item:hover{background:#ededed;color:#949494}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-item:active{color:#171717;background:#fcfcfc}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-item:focus{color:#171717;background:#fcfcfc;border-color:var(--wp-admin-theme-color)}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-item .components-flex-item{color:#1e1e1e;font-size:.8125rem;font-style:normal;font-weight:400;line-height:16px;letter-spacing:-.078px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-item.components-item .edit-site-sidebar-navigation-item__drilldown-indicator{fill:#ccc}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-save-hub{border-top:0;padding:32px 29px 32px 32px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-save-hub button.is-primary:disabled{opacity:.5}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-save-hub button .components-spinner{margin-top:0}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-group-header{color:#1e1e1e;font-size:.6875rem;font-style:normal;font-weight:600;line-height:16px;text-transform:uppercase}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-group{padding:0 8px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-group .woocommerce-customize-store__sidebar-group-header{padding:16px 0}.woocommerce-customize-store__step-assemblerHub button.block-library-site-logo__inspector-upload-container{margin:12px 0 32px;display:flex;padding:32px;justify-content:center;align-items:center;gap:16px;align-self:stretch;border-radius:4px;background:#f0f0f0;width:324px;height:88px}.woocommerce-customize-store__step-assemblerHub button.block-library-site-logo__inspector-upload-container svg{color:#949494}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-container{padding:32px;cursor:pointer;width:324px;display:flex;align-items:center;justify-content:center}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-container .woocommerce-customize-store_custom-logo{max-width:250px;max-height:250px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-toggle-control{margin-bottom:24px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-toggle-control label{color:#1e1e1e;font-size:.8125rem;font-style:normal;font-weight:400;line-height:16px;margin-bottom:0}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-toggle-control .components-form-toggle:not(.is-checked) .components-form-toggle__track{background-color:#949494}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-toggle-control .components-form-toggle__thumb{background-color:#fff;border-color:#fff}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-range-control{margin-bottom:24px;padding-top:8px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-range-control input::-webkit-inner-spin-button,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-range-control input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-range-control input[type=number]{-moz-appearance:textfield}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-range-control .components-base-control__label{text-transform:none;color:#1e1e1e;font-size:.8125rem;font-style:normal;font-weight:400;line-height:16px;margin-bottom:8px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-range-control .components-input-control__container{width:84px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-range-control .components-input-control__input{display:flex;height:36px;align-items:center;border-radius:2px;border:1px solid #949494;background:#fff;color:#1e1e1e}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-range-control .components-input-control__input:focus+.components-input-control__backdrop{box-shadow:none;border:1px solid var(--wp-admin-theme-color-darker-10)}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-base-control__help{color:#757575;font-size:.75rem;font-style:normal;font-weight:400;line-height:16px}.woocommerce-customize-store__step-assemblerHub .block-editor-block-patterns-list__item-title{display:none}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__color-panel-container{border:0;margin-top:24px;padding:0}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__color-panel-container .components-panel__body-title{margin:0!important}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__color-panel-container .components-panel__body-title:hover{background:initial}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__color-panel-container .components-panel__body-toggle.components-button{padding:16px 0;text-transform:uppercase;color:#1e1e1e;font-size:.6875rem;font-weight:600;line-height:16px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__color-panel-container .components-panel__body-toggle.components-button:focus{box-shadow:none}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__color-panel-container .components-panel__body-toggle.components-button .components-panel__arrow{right:0;color:#1e1e1e}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__color-panel-container .color-block-support-panel{border-top:0;padding:0}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_color-palette-container{gap:7px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_color-palette-spinner-container,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_font-pairing-spinner-container{display:flex;justify-content:center;align-items:center;height:174px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-color-content{width:324px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-color-content .woocommerce-customize-store_global-styles-variations_item{border:1.5px solid transparent;padding:2.5px;border-radius:4px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-color-content .woocommerce-customize-store_global-styles-variations_item.is-active,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-color-content .woocommerce-customize-store_global-styles-variations_item:hover{border:1.5px solid var(--wp-admin-theme-color)}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-color-content .woocommerce-customize-store_global-styles-variations_item .woocommerce-customize-store_global-styles-variations_item-preview{border:1px solid #dcdcde;border-radius:2px;background:#fff}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-typography-content{width:324px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-typography-content .woocommerce-customize-store_global-styles-variations_item{border-radius:2px;border:1px solid #dcdcde;background:#fff}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-typography-content .woocommerce-customize-store_global-styles-variations_item.is-active,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-typography-content .woocommerce-customize-store_global-styles-variations_item:hover{border-radius:2px;border:1.5px solid var(--wp-admin-theme-color);background:#fff}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-typography-content .global-styles-variation-container__iframe{box-shadow:none}.woocommerce-customize-store__step-assemblerHub .block-editor-block-patterns-list__item .auto-block-preview__container,.woocommerce-customize-store__step-assemblerHub .block-editor-block-patterns-list__item .block-editor-block-preview__container{border-radius:4px;border:1.5px solid transparent;align-items:center;display:flex;overflow:hidden}.woocommerce-customize-store__step-assemblerHub .block-editor-block-patterns-list__item.is-selected .auto-block-preview__container,.woocommerce-customize-store__step-assemblerHub .block-editor-block-patterns-list__item.is-selected .block-editor-block-preview__container,.woocommerce-customize-store__step-assemblerHub .block-editor-block-patterns-list__item:focus .auto-block-preview__container,.woocommerce-customize-store__step-assemblerHub .block-editor-block-patterns-list__item:focus .block-editor-block-preview__container,.woocommerce-customize-store__step-assemblerHub .block-editor-block-patterns-list__item:hover .auto-block-preview__container,.woocommerce-customize-store__step-assemblerHub .block-editor-block-patterns-list__item:hover .block-editor-block-preview__container{box-shadow:none;border-color:var(--wp-admin-theme-color)}.woocommerce-customize-store__step-assemblerHub .auto-block-preview__container,.woocommerce-customize-store__step-assemblerHub .block-editor-block-preview__container{box-shadow:0 2px 4px 0 rgba(0,0,0,.1)!important}.woocommerce-customize-store__step-assemblerHub .block-editor-block-preview__content{height:100%;width:100%}.woocommerce-customize-store__step-assemblerHub .edit-site-sidebar-navigation-screen__content .block-editor-block-preview__content{left:0;margin:0;min-height:auto;overflow:visible;text-align:initial;top:0;transform-origin:top left;position:relative}.woocommerce-customize-store__step-assemblerHub .edit-site-sidebar-navigation-screen__content .block-editor-block-patterns-list{width:324px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-homepage-content .block-editor-block-preview__content{background-color:#fff;max-height:280px!important}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__canvas{bottom:16px;top:16px;left:12px;padding:0 4px 0 16px}.woocommerce-customize-store__step-assemblerHub .edit-site-resizable-frame__handle{background:var(--wp-admin-theme-color);cursor:ew-resize}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__canvas .components-resizable-box__container{border-radius:20px;box-shadow:0 0 1px 0 rgba(0,0,0,.25),0 6px 10px 0 rgba(0,0,0,.02),0 13px 15px 0 rgba(0,0,0,.03),0 15px 20px 0 rgba(0,0,0,.04)}.woocommerce-customize-store__step-assemblerHub .edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas>div .interface-interface-skeleton__content,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__block-editor{border-radius:20px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas>div .interface-interface-skeleton__content .auto-block-preview__container,.woocommerce-customize-store__step-assemblerHub .edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas>div .interface-interface-skeleton__content .woocommerce-block-preview-container,.woocommerce-customize-store__step-assemblerHub .edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas>div .interface-interface-skeleton__content .woocommerce-customize-store__block-editor,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__block-editor .auto-block-preview__container,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__block-editor .woocommerce-block-preview-container,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__block-editor .woocommerce-customize-store__block-editor{height:100%;overflow:hidden}.woocommerce-customize-store__step-assemblerHub .edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas>div .interface-interface-skeleton__content iframe,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__block-editor iframe{width:100%;height:100%}.woocommerce-customize-store__step-assemblerHub .edit-site-resizable-frame__inner-content{border-radius:20px!important}.woocommerce-customize-store-tour-kit .woocommerce-tour-kit-step{width:319px;box-shadow:none;border:1px solid var(--gutenberg-gray-300,#ddd)}.woocommerce-customize-store-tour-kit .tour-kit-frame__container{box-shadow:none}.woocommerce-customize-store-tour-kit .components-elevation{display:none}.woocommerce-customize-store-tour-kit .tour-kit-frame__arrow:before{box-shadow:none!important}.woocommerce-customize-store-tour-kit .tour-kit-frame__container[data-popper-placement^=left]>.tour-kit-frame__arrow{right:-5px}.woocommerce-customize-store-tour-kit .tour-kit-frame__container[data-popper-placement^=left]>.tour-kit-frame__arrow:before{border-top:1px solid var(--gutenberg-gray-300,#ddd);border-right:1px solid var(--gutenberg-gray-300,#ddd)}.woocommerce-customize-store-tour-kit .tour-kit-frame__container[data-popper-placement^=right]>.tour-kit-frame__arrow:before{border-bottom:1px solid var(--gutenberg-gray-300,#ddd);border-left:1px solid var(--gutenberg-gray-300,#ddd)}.woocommerce-customize-store-tour-kit .tour-kit-frame__container[data-popper-placement^=top]>.tour-kit-frame__arrow:before{border-bottom:1px solid var(--gutenberg-gray-300,#ddd);border-right:1px solid var(--gutenberg-gray-300,#ddd)}.woocommerce-customize-store-tour-kit .tour-kit-frame__container[data-popper-placement^=bottom]>.tour-kit-frame__arrow:before{border-top:1px solid var(--gutenberg-gray-300,#ddd);border-left:1px solid var(--gutenberg-gray-300,#ddd)}.woocommerce-customize-store-tour-kit .woocommerce-tour-kit-step__heading{color:#1e1e1e;font-size:1rem;font-style:normal;font-weight:600;line-height:24px}.woocommerce-customize-store-tour-kit .woocommerce-tour-kit-step__description{color:#1e1e1e;font-size:.8125rem;font-style:normal;font-weight:400;line-height:16px;margin-top:8px}.woocommerce-customize-store-tour-kit .woocommerce-tour-kit-step-navigation__step{color:#757575;line-height:16px}.woocommerce-customize-store-tour-kit:not(.woocommerce-customize-store-welcome-tourkit) .woocommerce-tour-kit-step__body{margin-top:-16px}.woocommerce-customize-store-welcome-tourkit .tour-kit-frame__container{box-shadow:none}.woocommerce-customize-store-welcome-tourkit .woocommerce-tour-kit-step{width:335px;border-radius:8px;border:1px solid #dcdcdc;box-shadow:0 2px 6px 0 rgba(0,0,0,.05)}.woocommerce-customize-store-welcome-tourkit .woocommerce-tour-kit-step .components-card__header{align-items:flex-start;height:194px;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYwIiBoZWlnaHQ9IjkwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8zNTUxXzI4NDE5NikiPjxwYXRoIGQ9Ik0xNTkuMDYuOTJoLTU3LjE0djU3LjE0aDU3LjE0Vi45MnoiIHN0cm9rZT0iIzI3MUIzRCIgc3Ryb2tlLXdpZHRoPSIuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTE1OS4wOCAwaC0uMDdhLjg5Ljg5IDAgMDAtLjg5Ljg5di4wN2MwIC40OTIuMzk5Ljg5Ljg5Ljg5aC4wN2EuODkuODkgMCAwMC44OS0uODlWLjg5YS44OS44OSAwIDAwLS44OS0uODl6TTEwMS45OCAwaC0uMDdhLjg5Ljg5IDAgMDAtLjg5Ljg5di4wN2MwIC40OTIuMzk4Ljg5Ljg5Ljg5aC4wN2EuODkuODkgMCAwMC44OS0uODlWLjg5YS44OS44OSAwIDAwLS44OS0uODl6TTE1OS4xNCA1Ny4xMmgtLjE5YS44My44MyAwIDAwLS44My44M3YuMTljMCAuNDU4LjM3Mi44My44My44M2guMTlhLjgzLjgzIDAgMDAuODMtLjgzdi0uMTlhLjgzLjgzIDAgMDAtLjgzLS44M3pNMTAxLjk4IDU3LjEyaC0uMDdhLjg5Ljg5IDAgMDAtLjg5Ljg5di4wN2MwIC40OTIuMzk4Ljg5Ljg5Ljg5aC4wN2EuODkuODkgMCAwMC44OS0uODl2LS4wN2EuODkuODkgMCAwMC0uODktLjg5eiIgZmlsbD0iIzI3MUIzRCIvPjxwYXRoIGQ9Ik0xMjIuOTEgMy41NGMtMy4zNCAwLTYuMjYgNS4xLTcuODUgMTIuNzEtLjk5LTcuNjEtMi43OS0xMi43MS00Ljg2LTEyLjcxLTMuMTIgMC01LjY1IDExLjYyLTUuNjUgMjUuOTQgMCAxNC4zMiAyLjUzIDI1Ljk0IDUuNjUgMjUuOTQgMi4wNyAwIDMuODgtNS4xIDQuODYtMTIuNzEgMS41OSA3LjYxIDQuNTEgMTIuNzEgNy44NSAxMi43MSAzLjAyIDAgNS43LTQuMTggNy4zNi0xMC42MSAyLjY0IDYuNDMgNi44OSAxMC42MSAxMS42OCAxMC42MSA4IDAgMTQuNDgtMTEuNjIgMTQuNDgtMjUuOTQgMC0xNC4zMi02LjQ4LTI1Ljk0LTE0LjQ4LTI1Ljk0LTQuOCAwLTkuMDUgNC4xOC0xMS42OCAxMC42MS0xLjY2LTYuNDMtNC4zNC0xMC42MS03LjM2LTEwLjYxeiIgZmlsbD0iI0JFQTBGMiIvPjxwYXRoIGQ9Ik04OC42OCAwSDB2MTIuOTFoODguNjhWMHpNNTIuOTYgMjEuNjNIMHYxMi45MWg1Mi45NlYyMS42M3oiIGZpbGw9IiNEQ0RDREUiLz48ZyBmaWxsPSIjMjcxQjNEIj48cGF0aCBkPSJNMTI4LjA1IDg4Ljcxdi0uOTZjMi4yMi0uMjcgMi41LS42MiAyLjAyLTEuOTEtLjQ0LTEuMzMtMS4xMy0zLjA0LTEuODUtNS4yaC03LjM5Yy0uNTUgMS41NC0xLjA2IDIuODctMS41NCA0LjI3LS43NSAyLjIyLS4yNyAyLjUgMi41MyAyLjg0di45NmgtNy45di0uOTZjMi4xNS0uMjcgMi43LS41MSAzLjktMy41OWw3LjA4LTE3Ljk1IDEuMDktLjIxYzIuMTUgNS44NSA0LjUxIDEyLjMxIDYuNjcgMTguMjIgMS4wOSAyLjk3IDEuNCAzLjI1IDMuODMgMy41MnYuOTZoLTguNDR2LjAxem0tMy40Mi0xOC4yMmMtMS4wOSAyLjk0LTIuMjYgNi4wNS0zLjI4IDguNzVoNi4zOWwtMy4xMS04Ljc1ek0xNDkuMTggODkuMTJjLS41MSAwLTEuMjctLjI3LTEuNjEtLjY1LS40NC0uNDQtLjY1LS45Mi0uODItMS41NC0xLjM3LjkyLTMuMDQgMi4xOS00LjEgMi4xOS0yLjQzIDAtNC4xNy0yLjAyLTQuMTctNC4yMSAwLTEuNjguOTItMi43NyAyLjgtMy40MiAyLjA5LS43MiA0LjY1LTEuNjEgNS40LTIuMjJ2LS42OGMwLTIuNDMtMS4yMy0zLjgzLTMuMDEtMy44My0uNzkgMC0xLjI3LjM4LTEuNjEuNzktLjM4LjQ4LS42MiAxLjIzLS45MiAyLjIyLS4xNy41NS0uNDguNzktLjk5Ljc5LS42NSAwLTEuNS0uNjgtMS41LTEuNSAwLS40OC40NC0uODkgMS4xMy0xLjM3Ljk5LS43MiAyLjk3LTEuOTggNC45Mi0yLjM5IDEuMDMgMCAyLjA5LjMxIDIuODcuOTIgMS4yIDEuMDMgMS43NCAyLjE5IDEuNzQgMy45N3Y2LjZjMCAxLjU3LjU4IDIuMDUgMS4yIDIuMDUuNDEgMCAuODUtLjE3IDEuMjMtLjM4bC4zNC45Ni0yLjkxIDEuNzEuMDEtLjAxem0tMi41LTguNjVjLS43NS4zOC0yLjM5IDEuMDktMy4xOCAxLjQ0LTEuMy41OC0yLjA5IDEuMjMtMi4wOSAyLjUgMCAxLjgxIDEuMzcgMi42MyAyLjQ2IDIuNjMuODkgMCAyLjEyLS41NSAyLjgtMS4yM3YtNS4zM2wuMDEtLjAxeiIvPjwvZz48Zz48cGF0aCBkPSJNMy4zNCA4OS4xMkwwIDg1Ljc3bDQyLjQtNDAuODQgMS43OSAxLjc5LTQwLjg1IDQyLjR6IiBmaWxsPSIjQkVBMEYyIi8+PHBhdGggZD0iTTM0LjU2IDU2Ljc3bDkuNjMtMTAuMDUtMS43OS0xLjc5LTEwLjA2IDkuNjMgMi4yMiAyLjIxeiIgZmlsbD0iIzI3MUIzRCIvPjxnIGZpbGw9IiMyNzFCM0QiPjxwYXRoIGQ9Ik01Ny45MSAzNS43MWMwLTMuMjggMi42NC02LjI3IDEuOTgtNi45Mi0uNjYtLjY2LTMuNjQgMS45OC02LjkyIDEuOThzLTYuMjctMi42NC02LjkyLTEuOThjLS42NS42NiAxLjk4IDMuNjQgMS45OCA2Ljkycy0yLjY0IDYuMjctMS45OCA2LjkyYy42Ni42NiAzLjY0LTEuOTggNi45Mi0xLjk4czYuMjcgMi42NCA2LjkyIDEuOThjLjY1LS42Ni0xLjk4LTMuNjQtMS45OC02Ljkyek02Ni4wMyA0OC43NTljMS4zMTItMS4zMTMgMS42OTgtMy4wNTQuODYyLTMuODktLjgzNi0uODM1LTIuNTc3LS40NDktMy44ODkuODYzLTEuMzEyIDEuMzEyLTEuNjk4IDMuMDUzLS44NjMgMy44OS44MzYuODM1IDIuNTc3LjQ0OSAzLjg5LS44NjN6TTcwLjY4NiA1My40MzVjLjg2LS44NTkgMS4xMTItMS45OTguNTY2LTIuNTQ1LS41NDctLjU0Ny0xLjY4Ny0uMjk0LTIuNTQ2LjU2NS0uODYuODYtMS4xMTIgMi0uNTY2IDIuNTQ2LjU0Ny41NDcgMS42ODcuMjk0IDIuNTQ2LS41NjZ6TTc0LjQ2OCA1Ny4yYy42Mi0uNjIxLjgwNC0xLjQ0NS40MS0xLjgzOS0uMzk1LS4zOTQtMS4yMTgtLjIxLTEuODM5LjQxLS42Mi42MjEtLjgwNCAxLjQ0NC0uNDEgMS44MzkuMzk1LjM5NCAxLjIxOC4yMSAxLjgzOS0uNDF6Ii8+PC9nPjwvZz48Zz48cGF0aCBkPSJNMzkuMyA4OS4xMWE2LjcgNi43IDAgMTAwLTEzLjQgNi43IDYuNyAwIDAwMCAxMy40eiIgZmlsbD0iI0RDRENERSIvPjxwYXRoIGQ9Ik02MC42NCA4OS4xMWE2LjcgNi43IDAgMTAwLTEzLjQgNi43IDYuNyAwIDAwMCAxMy40eiIgZmlsbD0iI0RGRDFGQiIvPjxwYXRoIGQ9Ik04MS45OCA4OS4xMWE2LjcgNi43IDAgMTAwLTEzLjQgNi43IDYuNyAwIDAwMCAxMy40eiIgZmlsbD0iI0JFQTBGMiIvPjwvZz48cGF0aCBkPSJNMTMuMDIgNDMuMjNILjA3djEyLjk1aDEyLjk1VjQzLjIzeiIgZmlsbD0iI0RDRENERSIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImNsaXAwXzM1NTFfMjg0MTk2Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDE1OS45N3Y4OS4xMkgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==);background-size:160px;background-position:50%;background-repeat:no-repeat;margin-bottom:16px}.woocommerce-customize-store-welcome-tourkit .woocommerce-tour-kit-step-navigation .components-button.is-primary{margin-left:12px}.edit-site-canvas-spinner{width:100%;height:100%;display:flex;align-items:center;justify-content:center;animation:edit-site-canvas-spinner__fade-in-animation .5s ease 1s;animation-fill-mode:forwards}@media(prefers-reduced-motion:reduce){.edit-site-canvas-spinner{animation-duration:1ms}}.edit-site-canvas-spinner circle{stroke:rgba(0,0,0,.3)}.woocommerce-assembler-hub__resizable-frame__drag-handler{background:#000;left:5px!important;border-radius:2px}.woocommerce-assembler-hub__resizable-frame__drag-handler .components-popover__content{color:#f0f0f0;font-size:.75rem;font-style:normal;font-weight:500;line-height:1.4;background:inherit;padding:4px 8px;width:max-content;box-shadow:none;text-align:center}.woocommerce-customize-store .block-editor-color-gradient-control .components-circular-option-picker{display:none}.woocommerce-customize-store__logo-header-container{display:flex;align-items:center;justify-content:space-between}.components-dropdown-menu__menu .woocommerce-customize-store__logo-menu-group.components-menu-group{border-top:0;padding:0 8px}.components-dropdown-menu__menu .woocommerce-customize-store__logo-menu-group.components-menu-group .components-menu-item__button{width:112px}.components-dropdown-menu__menu .woocommerce-customize-store__logo-menu-group.components-menu-group .components-menu-item__item{min-width:auto}.modal-open .woocommerce-customize-store__logo-dropdown-popover{display:none}.woocommerce-customize-store__logo-dropdown-popover .components-popover__content{padding:16px 8px}.woocommerce-customize-store__logo-menu-item-delete{color:#cc1818}:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}@media(max-width:782px){.woocommerce-layout .woocommerce-layout__main{padding-top:0!important}}.woocommerce-layout .woocommerce-layout__main .woocommerce-customize-store__loading{display:grid;place-items:center;height:100vh}.woocommerce-customize-store{background-color:#fff}.woocommerce-customize-store #woocommerce-layout__primary{margin:0;width:100%}.woocommerce-customize-store .woocommerce-layout__main{padding-right:0}.woocommerce-customize-store .edit-site-site-icon__image{background:transparent;border-radius:4px;height:auto;-o-object-fit:cover;object-fit:cover;width:100%}body.woocommerce-customize-store.js.is-fullscreen-mode{margin-top:0!important;height:100%}body.woocommerce-customize-store.js.is-fullscreen-mode>div.tour-kit.woocommerce-tour-kit>div>div.tour-kit-spotlight.is-visible{outline:99999px solid rgba(0,0,0,.15)}body.woocommerce-customize-store.js.is-fullscreen-mode #screen-meta-links{display:none}.woocommerce-cys-layout{display:flex;flex-direction:column;align-items:center}.woocommerce-cys-layout h1{text-align:center;color:#000;font-size:32px;font-style:normal;font-weight:500;line-height:40px;margin-top:100px;margin-bottom:60px}.woocommerce-cys-layout .woocommerce-cys-page{width:615px;display:flex;flex-direction:column;align-items:center}.woocommerce-cys-layout button.is-primary{width:404px;display:block;height:48px;margin-top:32px}.woocommerce-design-with-ai__container .woocommerce-onboarding-loader img{width:216px;height:136px}.woocommerce-cys-design-with-ai .components-base-control{width:404px}.woocommerce-cys-design-with-ai .components-base-control textarea{margin:0 0 12px;height:167px;border-radius:2px;border:1px solid #bbb;background:#fff;color:#1e1e1e;font-size:13px;font-style:normal;font-weight:400;line-height:18px}.woocommerce-cys-design-with-ai .components-base-control textarea::placeholder{color:#757575}.woocommerce-cys-design-with-ai .components-base-control textarea:focus{box-shadow:none;border-color:var(--wp-admin-theme-color,#3858e9)}.woocommerce-cys-design-with-ai .woocommerce-cys-design-with-ai-guide{padding:12px;width:404px;border-radius:2px;background:var(--wp-admin-theme-color-background-04,rgba(168,168,170,.301));color:var(--gutenberg-gray-800,#2f2f2f)}.woocommerce-cys-design-with-ai .woocommerce-cys-design-with-ai-guide p{padding:0;margin:0;font-size:13px;font-style:normal;font-weight:500;line-height:20px}.woocommerce-cys-design-with-ai .woocommerce-cys-design-with-ai-guide ul{list-style:inside;margin-left:8px}.woocommerce-cys-design-with-ai .woocommerce-cys-design-with-ai-guide ul li{font-weight:400}.woocommerce-cys-design-with-ai-look-and-feel .choices,.woocommerce-cys-design-with-ai-tone-of-voice .choices{width:404px;display:flex;flex-direction:column;gap:16px}.woocommerce-cys-design-with-ai__error-notice.is-error{background:#fce2e4;padding:12px;font-size:13px;font-style:normal;font-weight:400;line-height:24px;color:#1e1e1e;margin:0 0 60px;width:615px}.woocommerce-cys-design-with-ai__error-notice.is-error .components-notice__content{margin:0}.woocommerce-cys-design-with-ai__error-notice.is-error .components-button{padding:0;height:auto}.cys-fullscreen-iframe{display:block;position:fixed;top:0;left:0;width:100%;height:100%;border:none;z-index:9999;transition:opacity 1.2s linear;opacity:0}
\ No newline at end of file
+.woocommerce-customize-store__container{display:flex;flex-direction:column}.woocommerce-customize-store__container button{cursor:pointer}.woocommerce-customize-store-header{min-height:64px;padding:1rem;width:100%}.woocommerce-customize-store-header .edit-site-site-hub__view-mode-toggle-container{background-color:transparent;height:32px;width:32px}.woocommerce-customize-store-header .edit-site-site-icon{line-height:0}.woocommerce-customize-store-header .edit-site-site-icon svg{height:32px;width:32px}.woocommerce-customize-store-header .edit-site-site-hub__site-title{font-size:.8125rem;font-weight:500;margin:0;padding:0 0 0 .75rem;line-height:2rem;color:#1e1e1e}.woocommerce-customize-store-container{display:flex;flex-direction:row}.woocommerce-customize-store-sidebar{flex:0 0 380px;padding:1rem}.woocommerce-customize-store-sidebar .woocommerce-customize-store-sidebar__title{color:#1e1e1e;font-size:1rem;font-weight:600;margin:0;padding:0;line-height:2.5}.woocommerce-customize-store-sidebar button{background-color:transparent;border:none;line-height:1;padding-right:0;vertical-align:middle}.woocommerce-customize-store-sidebar svg{color:inherit;height:24px;width:24px;margin:.25rem}.woocommerce-customize-store-sidebar p{padding:0 1rem;color:#757575;max-width:20rem}.woocommerce-customize-store-main{margin-right:2.5rem;width:100%;min-width:820px}.woocommerce-customize-store-main p{color:#2f2f2f;font-size:.813rem;line-height:1.5;margin:0;padding:0}.woocommerce-customize-store-main p.select-theme-text{font-size:1rem;font-weight:500;color:#1e1e1e;margin-bottom:24px}.woocommerce-customize-store-banner{background:rgba(242,237,255,.6) url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjc0IiBoZWlnaHQ9IjIxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMzQ0LjcxNyA5OS42ODJjMTUuNTQyLTE0LjIyOCA1LjM5MS00Ni41OC0yMi42NjMtNzIuMjY0LTI4LjA2LTI1LjY4OC02My40LTM0Ljk3Ni03OC45NDItMjAuNzU0LTkuNzc3IDguOTUyLTkuMzg0IDI1LjA4OS0uNzU0IDQyLjIxNy00My41ODktMjcuODYyLTg5LjU5Ny0zNC43OTYtMTEyLjI4Ny0xNC4wMy0yMi42ODMgMjAuNzY2LTE1LjEwOSA2Mi44ODYgMTUuMzI1IDEwMi43OTctMTguNzE1LTcuOS0zNi4zMzYtOC4yNjctNDYuMTEzLjY5LTE1LjU0MiAxNC4yMjktNS4zOSA0Ni41ODEgMjIuNjYzIDcyLjI2NCAyOC4wNTQgMjUuNjgzIDYzLjQgMzQuOTc2IDc4LjkzNSAyMC43NDggOS43NzctOC45NTEgOS4zODQtMjUuMDg4Ljc1NC00Mi4yMTYgNDMuNTg5IDI3Ljg2MiA4OS41OTggMzQuNzk2IDExMi4yODcgMTQuMDI0IDIyLjY4My0yMC43NjYgMTUuMTA5LTYyLjg4Ni0xNS4zMjUtMTAyLjc5NyAxOC43MTYgNy45IDM2LjMzNiA4LjI2IDQ2LjExNC0uNjlsLjAwNi4wMTF6IiBmaWxsPSIjREZEMUZCIiBmaWxsLW9wYWNpdHk9Ii4zIi8+PHBhdGggZD0iTTYzIDk1aDk0djQ0LjYxNmMwIDEuMzE3LTEuMTY5IDIuMzg0LTIuNjEzIDIuMzg0SDY1LjYxM0M2NC4xNyAxNDIgNjMgMTQwLjkzMyA2MyAxMzkuNjE2Vjk1eiIgZmlsbD0iI0JFQTBGMiIvPjxwYXRoIGQ9Ik02NS42MTMgODdoODguNzc0YzEuNDQ0IDAgMi42MTMgMS4yMTIgMi42MTMgMi43MDdWOTVINjN2LTUuMjkzQzYzIDg4LjIxMiA2NC4xNyA4NyA2NS42MTMgODd6IiBmaWxsPSIjMjcxQjNEIi8+PHBhdGggZD0iTTY4LjIxMyA5Mi4yNzZjLjcwOCAwIDEuMjgyLS41MjUgMS4yODItMS4xNzMgMC0uNjQ3LS41NzQtMS4xNzItMS4yODItMS4xNzItLjcwNyAwLTEuMjgxLjUyNS0xLjI4MSAxLjE3MiAwIC42NDguNTczIDEuMTczIDEuMjgxIDEuMTczek03My44NTggOTIuMjc2Yy43MDggMCAxLjI4Mi0uNTI1IDEuMjgyLTEuMTczIDAtLjY0Ny0uNTc0LTEuMTcyLTEuMjgyLTEuMTcyLS43MDggMC0xLjI4MS41MjUtMS4yODEgMS4xNzIgMCAuNjQ4LjU3MyAxLjE3MyAxLjI4MSAxLjE3M3pNNzkuNTAxIDkyLjI3NmMuNzA4IDAgMS4yODItLjUyNSAxLjI4Mi0xLjE3MyAwLS42NDctLjU3NC0xLjE3Mi0xLjI4Mi0xLjE3Mi0uNzA3IDAtMS4yODEuNTI1LTEuMjgxIDEuMTcyIDAgLjY0OC41NzQgMS4xNzMgMS4yODEgMS4xNzN6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTMuOTU2IDE2Ny4yMjlMMCAxNjMuNjFsNTAuMjE1LTQ0LjI2MSAyLjExNCAxLjkzNS00OC4zNzMgNDUuOTQ1eiIgZmlsbD0iI0JFQTBGMiIvPjxwYXRoIGQ9Ik00MC45MjcgMTMyLjE4NGwxMS40MDItMTAuOS0yLjExNC0xLjkzNS0xMS45MTMgMTAuNDMzIDIuNjI1IDIuNDAyek0xNDYuODAxIDEyMC42MjhIOTguNDk2djIuOTc3aDQ4LjMwNXYtMi45Nzd6TTEzMC40ODQgMTI4Ljc0M0g5OC40OTZ2Mi45NzZoMzEuOTg4di0yLjk3NnpNMTQ2LjgwMSAxMTIuNTE0SDk4LjQ5NnYyLjk3N2g0OC4zMDV2LTIuOTc3ek0xMTQuNjAyIDQ1aDU4LjUxMWMxLjQzNyAwIDIuNjAyIDEuMDY2IDIuNjAyIDIuMzgxdjQuNjU1SDExMnYtNC42NTVjMC0xLjMxNSAxLjE2NS0yLjM4MSAyLjYwMi0yLjM4MXoiIGZpbGw9IiMyNzFCM0QiLz48cGF0aCBkPSJNMTczLjM4OSA0Ny4xN2wtLjI0Ny0uMjI2LTEuNDc0IDEuMzQ4LTEuNDc0LTEuMzQ4LS4yNDcuMjI2IDEuNDc0IDEuMzQ4LTEuNDc0IDEuMzQ5LjI0Ny4yMjYgMS40NzQtMS4zNDkgMS40NzQgMS4zNDkuMjQ3LS4yMjYtMS40NzQtMS4zNDkgMS40NzQtMS4zNDh6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0iTTExMiA1Mi4wMjV2MjYuNDE0YzAgMS4zMTUgMS4xNjUgMi4zOCAyLjYwMiAyLjM4aDU4LjQ3NWMxLjQzOCAwIDIuNjAyLTEuMDY1IDIuNjAyLTIuMzhWNTIuMDI1SDExMnoiIGZpbGw9IiNCRUEwRjIiLz48cGF0aCBkPSJNNTcuMjgzIDEwOS40MDljMCAzLjU1MS0zLjEzIDYuNzg5LTIuMzQ5IDcuNTAxLjc3OC43MTEgNC4zMTctMi4xNDkgOC4xOTgtMi4xNDkgMy44OCAwIDcuNDIgMi44NjMgOC4xOTggMi4xNDkuNzc3LS43MTUtMi4zNDktMy45NS0yLjM0OS03LjUwMXMzLjEzLTYuNzkgMi4zNDktNy41MDFjLS43NzgtLjcxMS00LjMxNyAyLjE0OS04LjE5OCAyLjE0OS0zLjg4MSAwLTcuNDItMi44NjMtOC4xOTgtMi4xNDktLjc3Ny43MTEgMi4zNDkgMy45NSAyLjM0OSA3LjUwMXpNNTIuNTg2IDk5Ljc2YzEuNDQ2LTEuMzI0IDEuODcyLTMuMDc4Ljk1My0zLjkyLS45Mi0uODQxLTIuODM4LS40NTEtNC4yODQuODcyLTEuNDQ1IDEuMzIyLTEuODcyIDMuMDc3LS45NTIgMy45MTkuOTIuODQxIDIuODM4LjQ1MSA0LjI4My0uODcyek00Ni44MzYgOTQuNDk0Yy45ODktLjkwNSAxLjI4LTIuMTA0LjY1MS0yLjY4LS42MjgtLjU3NS0xLjk0LS4zMDgtMi45MjguNTk2LS45ODguOTA0LTEuMjggMi4xMDQtLjY1IDIuNjguNjI4LjU3NSAxLjk0LjMwOCAyLjkyNy0uNTk2eiIgZmlsbD0iIzI3MUIzRCIvPjxwYXRoIGQ9Ik0xNzYuNDg4IDEzNy4zOTJjMC0yLjY1My0yLjM0OC00LjgwNC01LjI0NC00LjgwNC0yLjg5NyAwLTUuMjQ1IDIuMTUxLTUuMjQ1IDQuODA0IDAgMi42NTMgMi4zNDggNC44MDMgNS4yNDUgNC44MDMgMi44OTYgMCA1LjI0NC0yLjE1IDUuMjQ0LTQuODAzeiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik0xNzYuNDg4IDEyMi4xYzAtMi42NTMtMi4zNDgtNC44MDQtNS4yNDQtNC44MDQtMi44OTcgMC01LjI0NSAyLjE1MS01LjI0NSA0LjgwNCAwIDIuNjUzIDIuMzQ4IDQuODAzIDUuMjQ1IDQuODAzIDIuODk2IDAgNS4yNDQtMi4xNSA1LjI0NC00LjgwM3oiIGZpbGw9IiNCRUEwRjIiLz48cGF0aCBkPSJNMTc2LjQ4OCAxMDYuODA0YzAtMi42NTMtMi4zNDgtNC44MDQtNS4yNDQtNC44MDQtMi44OTcgMC01LjI0NSAyLjE1MS01LjI0NSA0LjgwNCAwIDIuNjUzIDIuMzQ4IDQuODAzIDUuMjQ1IDQuODAzIDIuODk2IDAgNS4yNDQtMi4xNSA1LjI0NC00LjgwM3oiIGZpbGw9IiMyNzFCM0QiLz48L3N2Zz4=) no-repeat 100%;background-size:auto 218px;background-position-y:29px;border-radius:4px;display:flex;margin:1.25rem 0 3.375rem;min-height:248px;width:100%;align-items:center}.woocommerce-customize-store-banner.offline-banner{background:rgba(242,237,255,.6) url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjM5IiBoZWlnaHQ9IjIxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMzA5LjcxNyA5OS42ODJjMTUuNTQyLTE0LjIyOCA1LjM5MS00Ni41OC0yMi42NjMtNzIuMjY0LTI4LjA2LTI1LjY4OC02My40LTM0Ljk3Ni03OC45NDItMjAuNzU0LTkuNzc3IDguOTUyLTkuMzg0IDI1LjA4OS0uNzU0IDQyLjIxNy00My41ODktMjcuODYyLTg5LjU5Ny0zNC43OTYtMTEyLjI4Ny0xNC4wMy0yMi42ODMgMjAuNzY2LTE1LjEwOSA2Mi44ODYgMTUuMzI1IDEwMi43OTctMTguNzE1LTcuOS0zNi4zMzYtOC4yNjctNDYuMTEzLjY5LTE1LjU0MiAxNC4yMjktNS4zOSA0Ni41ODEgMjIuNjYzIDcyLjI2NCAyOC4wNTQgMjUuNjgzIDYzLjQgMzQuOTc2IDc4LjkzNSAyMC43NDggOS43NzctOC45NTEgOS4zODQtMjUuMDg4Ljc1NC00Mi4yMTYgNDMuNTg5IDI3Ljg2MiA4OS41OTggMzQuNzk2IDExMi4yODcgMTQuMDI0IDIyLjY4My0yMC43NjYgMTUuMTA5LTYyLjg4Ni0xNS4zMjUtMTAyLjc5NyAxOC43MTYgNy45IDM2LjMzNiA4LjI2IDQ2LjExNC0uNjlsLjAwNi4wMTF6IiBmaWxsPSIjREZEMUZCIiBmaWxsLW9wYWNpdHk9Ii4zIi8+PHBhdGggZD0iTTE4LjIxOCA1OWMtMTYuNSAwLTIzLjcxNCA5LTEwIDI0IDE2LjAwMSAxNy41IDE3LjAwMSAyOCAwIDQ0LjUiIHN0cm9rZT0iIzAwMCIvPjxwYXRoIGQ9Ik0yOC4yMzggOTQuNTg0aDkzLjYwN3Y0NC41NjFjMCAxLjMxNi0xLjE2NCAyLjM4MS0yLjYwMiAyLjM4MUgzMC44NGMtMS40MzggMC0yLjYwMi0xLjA2NS0yLjYwMi0yLjM4MVY5NC41ODR6IiBmaWxsPSIjQkVBMEYyIi8+PHBhdGggZD0iTTMwLjg0IDg3LjU4NWg4OC40MDNjMS40MzggMCAyLjYwMiAxLjA2NiAyLjYwMiAyLjM4MnY0LjY1NUgyOC4yMzh2LTQuNjU1YzAtMS4zMTYgMS4xNjQtMi4zODIgMi42MDItMi4zODJ6IiBmaWxsPSIjMjcxQjNEIi8+PHBhdGggZD0iTTMzLjM5IDkyLjI3NmMuNzA5IDAgMS4yODItLjUyNSAxLjI4Mi0xLjE3MyAwLS42NDctLjU3My0xLjE3Mi0xLjI4MS0xLjE3MnMtMS4yODIuNTI1LTEuMjgyIDEuMTcyYzAgLjY0OC41NzQgMS4xNzMgMS4yODIgMS4xNzN6TTM5LjAzNiA5Mi4yNzZjLjcwNyAwIDEuMjgxLS41MjUgMS4yODEtMS4xNzMgMC0uNjQ3LS41NzQtMS4xNzItMS4yODEtMS4xNzItLjcwOCAwLTEuMjgyLjUyNS0xLjI4MiAxLjE3MiAwIC42NDguNTc0IDEuMTczIDEuMjgyIDEuMTczek00NC42NzkgOTIuMjc2Yy43MDggMCAxLjI4MS0uNTI1IDEuMjgxLTEuMTczIDAtLjY0Ny0uNTczLTEuMTcyLTEuMjgxLTEuMTcycy0xLjI4Mi41MjUtMS4yODIgMS4xNzJjMCAuNjQ4LjU3NCAxLjE3MyAxLjI4MiAxLjE3M3oiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTExLjk3OCAxMjAuNjI4SDYzLjY3M3YyLjk3N2g0OC4zMDV2LTIuOTc3ek05NS42NiAxMjguNzQySDYzLjY3NHYyLjk3N2gzMS45ODh2LTIuOTc3ek0xMTEuOTc4IDExMi41MTRINjMuNjczdjIuOTc3aDQ4LjMwNXYtMi45Nzd6TTc5Ljc4IDQ1aDU4LjUxYzEuNDM4IDAgMi42MDIgMS4wNjYgMi42MDIgMi4zODF2NC42NTVINzcuMTc3di00LjY1NWMwLTEuMzE1IDEuMTY1LTIuMzgxIDIuNjAzLTIuMzgxeiIgZmlsbD0iIzI3MUIzRCIvPjxwYXRoIGQ9Ik0xMzguNTY2IDQ3LjE3bC0uMjQ3LS4yMjYtMS40NzQgMS4zNDgtMS40NzMtMS4zNDgtLjI0Ny4yMjYgMS40NzMgMS4zNDgtMS40NzMgMS4zNDkuMjQ3LjIyNiAxLjQ3My0xLjM0OSAxLjQ3NCAxLjM0OS4yNDctLjIyNy0xLjQ3My0xLjM0OCAxLjQ3My0xLjM0OHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNNzcuMTc3IDUyLjAyNXYyNi40MTRjMCAxLjMxNSAxLjE2NSAyLjM4IDIuNjAzIDIuMzhoNTguNDc0YzEuNDM4IDAgMi42MDItMS4wNjUgMi42MDItMi4zOFY1Mi4wMjVINzcuMTc3ek0yOC4yMzggOTUuNTg0aDkzLjYwN3Y0NC41NjFjMCAxLjMxNi0xLjE2NCAyLjM4MS0yLjYwMiAyLjM4MUgzMC44NGMtMS40MzggMC0yLjYwMi0xLjA2NS0yLjYwMi0yLjM4MVY5NS41ODR6IiBmaWxsPSIjQkVBMEYyIi8+PHBhdGggZD0iTTMwLjg0IDg4LjU4NWg4OC40MDNjMS40MzggMCAyLjYwMiAxLjA2NiAyLjYwMiAyLjM4MnY0LjY1NUgyOC4yMzh2LTQuNjU1YzAtMS4zMTYgMS4xNjQtMi4zODIgMi42MDItMi4zODJ6IiBmaWxsPSIjMjcxQjNEIi8+PHBhdGggZD0iTTMzLjM5IDkzLjI3NmMuNzA5IDAgMS4yODItLjUyNSAxLjI4Mi0xLjE3MyAwLS42NDctLjU3My0xLjE3Mi0xLjI4MS0xLjE3MnMtMS4yODIuNTI1LTEuMjgyIDEuMTcyYzAgLjY0OC41NzQgMS4xNzMgMS4yODIgMS4xNzN6TTM5LjAzNiA5My4yNzZjLjcwNyAwIDEuMjgxLS41MjUgMS4yODEtMS4xNzMgMC0uNjQ3LS41NzQtMS4xNzItMS4yODEtMS4xNzItLjcwOCAwLTEuMjgyLjUyNS0xLjI4MiAxLjE3MiAwIC42NDguNTc0IDEuMTczIDEuMjgyIDEuMTczek00NC42NzkgOTMuMjc2Yy43MDggMCAxLjI4MS0uNTI1IDEuMjgxLTEuMTczIDAtLjY0Ny0uNTczLTEuMTcyLTEuMjgxLTEuMTcycy0xLjI4Mi41MjUtMS4yODIgMS4xNzJjMCAuNjQ4LjU3NCAxLjE3MyAxLjI4MiAxLjE3M3oiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNNzkuNzkxIDQ2aDU4Ljc3MmMxLjQ0NCAwIDIuNjE0IDEuMDYgMi42MTQgMi4zNjlWNTNoLTY0di00LjYzMWMwLTEuMzA5IDEuMTctMi4zNjkgMi42MTQtMi4zNjl6IiBmaWxsPSIjMjcxQjNEIi8+PHBhdGggZD0iTTEzOC41NjYgNDguMTdsLS4yNDctLjIyNi0xLjQ3NCAxLjM0OC0xLjQ3My0xLjM0OC0uMjQ3LjIyNiAxLjQ3MyAxLjM0OC0xLjQ3MyAxLjM0OS4yNDcuMjI2IDEuNDczLTEuMzQ5IDEuNDc0IDEuMzQ5LjI0Ny0uMjI3LTEuNDczLTEuMzQ4IDEuNDczLTEuMzQ4eiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik03Ny4xNzcgNTN2MjYuNjAyYzAgMS4zMjUgMS4xNyAyLjM5OCAyLjYxNiAyLjM5OGg1OC43NjljMS40NDUgMCAyLjYxNS0xLjA3MyAyLjYxNS0yLjM5OFY1M2gtNjR6IiBmaWxsPSIjQkVBMEYyIi8+PHBhdGggZD0iTTgzLjYwOSAxMzZsMi4zNS0yLjM1Yy03LjA1NS02LjY1Ni0xOC4xMzctNi42NTYtMjUuMTkyIDBsMi4zNSAyLjM1YzUuNzU4LTUuMzYzIDE0LjczMy01LjM2MyAyMC40OTIgMHoiIGZpbGw9IiMyNzFCM0QiLz48cGF0aCBkPSJNOTEuNDE0IDEyOC4xOTVsMi4zNS0yLjM1Yy01LjUxNC01LjI5Mi0xMi43MzUtOC4yMDMtMjAuNC04LjIwMy03LjY2NiAwLTE0Ljg4NyAyLjkwOC0yMC40IDguMjAzbDIuMzUgMi4zNWM0Ljg4Ni00LjY2NiAxMS4yNzItNy4yMjkgMTguMDUtNy4yMjkgNi43NzggMCAxMy4xNjYgMi41NjMgMTguMDUgNy4yMjl6IiBmaWxsPSIjMjcxQjNEIi8+PHBhdGggZD0iTTk5LjIwMSAxMjAuNDA4bDIuMzUtMi4zNWMtNy42LTcuMzYzLTE3LjU4MS0xMS40MDktMjguMTg3LTExLjQwOS0xMC42MDYgMC0yMC41ODcgNC4wNDktMjguMTg3IDExLjQwOWwyLjM1IDIuMzVjNi45Ny02LjczMyAxNi4xMi0xMC40MzcgMjUuODM3LTEwLjQzNyA5LjcxOCAwIDE4Ljg2NyAzLjcwMSAyNS44MzcgMTAuNDM3eiIgZmlsbD0iIzI3MUIzRCIvPjxwYXRoIGQ9Ik05OS4xNTYgMTE1LjUzMmE3Ljc2NiA3Ljc2NiAwIDEwMC0xNS41MzIgNy43NjYgNy43NjYgMCAwMDAgMTUuNTMyeiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik0xMDIuMjgzIDEwNS4wOWwtLjQ1MS0uNDQ4LTIuNjc2IDIuNjc2LTIuNjc3LTIuNjc2LS40NS40NDggMi42NzkgMi42NzYtMi42OCAyLjY3Ni40NTEuNDUxIDIuNjc3LTIuNjc3IDIuNjc2IDIuNjc3LjQ1MS0uNDUxLTIuNjc3LTIuNjc2IDIuNjc3LTIuNjc2ek00MC4zNDggNjcuNzI5aDIyLjMxOGMxLjAxIDAgMS44MjYtLjc3MyAxLjgyNi0yLjAzNCAwLTEuMjYxLS44MTctMi4yMjQtMS44MjYtMi4yMjRINDAuMzQ4djQuMjU4ek00MC4zNDggNTQuMjg4aDIyLjMxOGMxLjAxIDAgMS44MjYtLjc3MiAxLjgyNi0yLjAzM3MtLjgxNy0yLjIyNS0xLjgyNi0yLjIyNUg0MC4zNDh2NC4yNTh6IiBmaWxsPSIjMjcxQjNEIi8+PHBhdGggZD0iTTY0LjQ5MiA1Mi4yNTVjMC0xLjI2MS0uODE3LTIuMjI1LTEuODI2LTIuMjI1aC0yLjA3djQuMjU4aDIuMDdjMS4wMSAwIDEuODI2LS43NzIgMS44MjYtMi4wMzN6TTY0LjQ5MiA2NS42OTVjMC0xLjI2MS0uODE3LTIuMjI0LTEuODI2LTIuMjI0aC0yLjA3djQuMjU4aDIuMDdjMS4wMSAwIDEuODI2LS43NzMgMS44MjYtMi4wMzR6TTUwLjAyIDQ1SDM3LjY0Yy01LjAxNCAwLTguNzI3IDIuOTg5LTEwLjUwOCA3LjQ3N2gtMS44OTFjLTEuMDc5IDAtMS43ODguMjMtMi44MjYgMS44MzQtLjMxNy40ODktLjY2NiAxLjA1LTEuODYgMS4wNWgtLjY5N2MtLjk3NiAwLTEuNzY2LjgwNC0xLjc2NiAxLjc5NXYzLjY4OGMwIC45OTEuNzkgMS43OTUgMS43NjYgMS43OTVoLjY5N2MxLjE5NCAwIDEuNTQzLjU2MSAxLjg2IDEuMDUgMS4wMzggMS42MDQgMS43NDcgMS44MzQgMi44MjYgMS44MzRoMS44OTZjMS43ODMgNC40ODMgNS40OTMgNy40NjcgMTAuNTA2IDcuNDY3IDQuMTY3IDAgMTIuMzc5LjAxIDEyLjM3OS4wMS45MjIgMCAxLjY3LS43NiAxLjY3LTEuNjk3di0yNC42MUExLjY4IDEuNjggMCAwMDUwLjAyMiA0NWgtLjAwM3oiIGZpbGw9IiNCRUEwRjIiLz48L3N2Zz4=) no-repeat 100%;background-size:auto 218px;background-position-y:29px}.woocommerce-customize-store-banner.existing-ai-theme-banner{background:#f6f7f7 url(../8607e396d9d0215e80f1.svg) no-repeat 100%;background-size:auto 218px;background-position-y:29px;background-position-x:91%}.woocommerce-customize-store-banner .woocommerce-customize-store-banner-content{width:375px;margin-left:50px}.woocommerce-customize-store-banner .woocommerce-customize-store-banner-content button.is-link{color:#3858e9;text-decoration:none;font-weight:500}.woocommerce-customize-store-banner .woocommerce-customize-store-banner-content button.components-button+button.components-button{margin-left:12px}.woocommerce-customize-store-banner .woocommerce-customize-store-banner-content h1{font-size:1.25rem;line-height:23.87px;font-weight:500;color:#000}.woocommerce-customize-store-banner .woocommerce-customize-store-banner-content p{margin:16px 0 28px;color:#2f2f2f}.woocommerce-customize-store-theme-cards{display:grid;flex-wrap:wrap;gap:32px;row-gap:54px;grid-template-columns:repeat(2,1fr)}@media only screen and (min-width:1600px){.woocommerce-customize-store-theme-cards{grid-template-columns:repeat(4,1fr)}}.woocommerce-customize-store-theme-cards .theme-card{display:block;text-decoration:none}.woocommerce-customize-store-theme-cards .theme-card a:focus{box-shadow:none}.woocommerce-customize-store-theme-cards .theme-card img{border-radius:4px;border:1px solid #e9e9e9;width:100%;height:240px;-o-object-fit:cover;object-fit:cover;-o-object-position:0 0;object-position:0 0}.woocommerce-customize-store-theme-cards .theme-card .theme-card__title{font-size:1rem;margin:0;padding:0;font-weight:600}.woocommerce-customize-store-theme-cards .theme-card .theme-card__info{margin:24px 0 8px;display:flex}.woocommerce-customize-store-theme-cards .theme-card .theme-card__info .theme-card__color-palettes{margin-left:auto}.woocommerce-customize-store-theme-cards .theme-card .theme-card__color-palettes{display:flex;margin:0 0 0 auto;padding:0;gap:5px}.woocommerce-customize-store-theme-cards .theme-card .theme-card__color-palettes li{width:20px;height:20px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.2);border-radius:50%;margin-bottom:0}.woocommerce-customize-store-theme-cards .theme-card .theme-card__color-palettes li.more_palettes{box-shadow:none;font-size:11px;text-align:center}.woocommerce-customize-store-theme-cards .theme-card .theme-card__active{border-radius:100px;background:rgba(56,88,233,.2);padding:5px 10px;justify-content:flex-end;align-items:center;gap:10px;color:#1d35b4;font-size:12px;font-style:normal;font-weight:500;line-height:20px;margin-right:10px}.woocommerce-customize-store-theme-cards .theme-card .theme-card__free{color:#1e1e1e;font-size:14px;font-style:normal;font-weight:400;line-height:16px}.woocommerce-customize-store-browse-themes{text-align:center}.woocommerce-customize-store-browse-themes button{background-color:#fff;border:1px solid #3858e9;border-radius:2px;color:#3858e9;display:inline-block;font-size:.8125rem;margin:3.75rem 0;padding:.5rem .75rem}.woocommerce-customize-store__design-change-warning-modal{width:480px;max-width:480px}.woocommerce-customize-store__design-change-warning-modal .components-modal__header{padding-top:32px}.woocommerce-customize-store__design-change-warning-modal p{padding:16px 0;margin:0}.woocommerce-customize-store__design-change-warning-modal a,.woocommerce-customize-store__design-change-warning-modal button{text-decoration:none!important}.woocommerce-customize-store__design-change-warning-modal h1{line-height:28px;font-size:20px;color:#1e1e1e}.woocommerce-customize-store__design-change-warning-modal .woocommerce-customize-store__design-change-warning-modal-footer{display:flex;gap:15px;justify-content:flex-end}.close-cys-design-with-ai{transition:none;border:none;padding:0;margin:20px 0 0 20px;height:24px}.close-cys-design-with-ai:focus{outline:0!important;box-shadow:none!important}.woocommerce-cys-choice-container{display:flex;flex-direction:column;padding:16px;border:1px solid #e0e0e0;border-radius:2px;width:100%;cursor:pointer}.woocommerce-cys-choice-container[data-selected]{border-radius:2px;border-color:transparent;box-shadow:0 0 0 2px var(--wp-admin-theme-color)}.woocommerce-cys-choice-container:focus-visible{border:2px solid var(--wp-admin-theme-color);padding:24px 16px}.woocommerce-cys-choice{display:flex;flex-direction:column}.woocommerce-cys-choice .woocommerce-cys-choice-input{opacity:0;position:absolute}.woocommerce-cys-choice label{color:#1e1e1e;font-size:16px;font-style:normal;font-weight:500;line-height:20px;letter-spacing:-.24px;margin-bottom:8px}.woocommerce-cys-choice p{margin:0;color:#757575;font-size:13px;font-style:normal;font-weight:400;line-height:16px}.woocommerce-onboarding-loader{min-height:100vh;display:flex;justify-content:center;align-items:center;flex-direction:column;background-color:#fff}.woocommerce-onboarding-loader .woocommerce-onboarding-loader-wrapper{align-items:flex-start;display:flex;flex-direction:column;justify-content:center;max-width:520px;min-height:400px}.woocommerce-onboarding-loader .woocommerce-onboarding-loader-wrapper .woocommerce-onboarding-loader-container{text-align:center;min-height:400px}.woocommerce-onboarding-loader .woocommerce-onboarding-loader-wrapper .loader-hearticon{position:relative;top:2px;left:2px}.global-styles-variation-container__iframe{border-radius:3px;box-shadow:0 0 0 1px rgba(0,0,0,.1);border:0;display:block;max-width:100%}.color-block-support-panel{padding:0;border-top:0}.color-block-support-panel .components-tools-panel-header{display:none}.color-block-support-panel .block-editor-tools-panel-color-gradient-settings__dropdown .components-button{color:#1e1e1e;font-size:.8125rem;font-style:normal;font-weight:400;line-height:16px}.color-block-support-panel .block-editor-tools-panel-color-gradient-settings__dropdown .components-button.is-open{background:initial;color:#1e1e1e}.color-block-support-panel .block-editor-tools-panel-color-gradient-settings__dropdown .components-button:focus{box-shadow:none}.color-block-support-panel .block-editor-panel-color-gradient-settings__dropdown{padding:12px 0}.color-block-support-panel .block-editor-panel-color-gradient-settings__dropdown .components-flex{flex-direction:row-reverse;justify-content:space-between}.color-block-support-panel .color-block-support-panel__inner-wrapper .block-editor-tools-panel-color-gradient-settings__item{border:0;order:10}.color-block-support-panel .color-block-support-panel__inner-wrapper .block-editor-tools-panel-color-gradient-settings__item:nth-child(2){order:1}.color-block-support-panel .color-block-support-panel__inner-wrapper .block-editor-tools-panel-color-gradient-settings__item.first{border-top:0;order:2}.color-block-support-panel .color-block-support-panel__inner-wrapper .block-editor-tools-panel-color-gradient-settings__item:nth-child(6){order:3}.color-block-support-panel .color-block-support-panel__inner-wrapper .block-editor-tools-panel-color-gradient-settings__item:nth-child(5){order:4}.color-block-support-panel .color-block-support-panel__inner-wrapper .block-editor-tools-panel-color-gradient-settings__item:nth-child(3){order:5}.block-editor-color-gradient-control__panel>.components-flex>.components-h-stack.components-v-stack{display:none}.block-editor-color-gradient-control__panel>.components-spacer>.components-flex>.components-h-stack.components-v-stack:not(.components-custom-gradient-picker){display:none}.woocommerce-customize-store__transitional{display:flex;flex-direction:column;width:100vw;height:100vh}.woocommerce-customize-store__transitional .edit-site-site-hub.edit-site-layout__hub{height:64px;padding:16px;gap:12px;width:100%;position:static}.woocommerce-customize-store__transitional .edit-site-site-hub.edit-site-layout__hub .edit-site-site-hub__view-mode-toggle-container,.woocommerce-customize-store__transitional .edit-site-site-hub.edit-site-layout__hub .edit-site-site-icon__image,.woocommerce-customize-store__transitional .edit-site-site-hub.edit-site-layout__hub svg{height:32px;width:32px;background:transparent}.woocommerce-customize-store__transitional .edit-site-site-hub.edit-site-layout__hub .edit-site-site-hub__site-title{margin-left:12px;color:#1e1e1e;font-size:13px;font-style:normal;font-weight:500;line-height:20px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-content{flex:1;display:flex;flex-direction:column;align-items:center;padding-top:40px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-heading{color:#1e1e1e;text-align:center;font-feature-settings:"clig" off,"liga" off;font-size:32px;font-style:normal;font-weight:400;line-height:60px;letter-spacing:-.32px;margin:0}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-subheading{color:#757575;text-align:center;font-size:16px;font-style:normal;font-weight:400;line-height:24px;letter-spacing:-.1px;margin:4px 0 0;width:560px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-preview-button{padding:8px 16px;height:40px;margin:20px 0 0}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container{border-radius:16px;margin-top:50px;background:#f6f7f7;box-shadow:0 6px 6px 0 rgba(0,0,0,.02),0 13px 10px 0 rgba(0,0,0,.03),0 15px 20px 0 rgba(0,0,0,.04);width:600px;height:371px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container div{position:relative;border-radius:24px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container .woocommerce-customize-store__edit-site-editor{height:100%}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container .woocommerce-customize-store__block-editor{position:relative;display:flex;align-items:center;justify-content:center;width:100%;height:100%}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container .interface-navigable-region{overflow:hidden}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container .auto-block-preview__container{width:588px;height:363px;position:relative}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container iframe{border-radius:24px;width:1176px;height:726px;transform:scale(.5);left:-50%;position:relative;top:-50%}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container.is-loading{animation:loading-fade 1.6s ease-in-out infinite;background-color:#f0f0f0;color:transparent}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container.is-loading:after{content:" "}@media screen and (prefers-reduced-motion:reduce){.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container.is-loading{animation:none}}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-site-preview-container.is-loading iframe{visibility:hidden;opacity:.5}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-actions{display:flex;flex-direction:row;margin-top:50px;gap:40px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-actions .woocommerce-customize-store__transitional-action{display:flex;flex-direction:column;width:280px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-actions .woocommerce-customize-store__transitional-action h3{color:#1e1e1e;font-size:16px;font-style:normal;font-weight:500;line-height:24px;margin:0}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-actions .woocommerce-customize-store__transitional-action p{margin:5px 0 0;color:#757575;font-size:13px;font-style:normal;font-weight:400;line-height:16px;height:48px}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-actions .woocommerce-customize-store__transitional-action .components-button{margin-top:16px;padding:0;margin-left:0;height:20px;width:fit-content}.woocommerce-customize-store__transitional .woocommerce-customize-store__transitional-actions .woocommerce-customize-store__transitional-action .components-button:hover{background:transparent}@keyframes containerFadeIn{0%,80%{opacity:0}to{opacity:1}}.woocommerce-customize-store .edit-site-site-hub__view-mode-toggle-container a{color:unset}.woocommerce-customize-store__step-assemblerHub a{text-decoration:none}.woocommerce-customize-store__step-assemblerHub .edit-site-layout{bottom:0;left:0;min-height:100vh;position:fixed;right:0;top:0;background-color:#fcfcfc}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__hub{width:380px;height:64px}.woocommerce-customize-store__step-assemblerHub .edit-site-site-hub__view-mode-toggle-container{height:64px}.woocommerce-customize-store__step-assemblerHub .edit-site-sidebar-navigation-screen__title-icon{align-items:center;padding-top:80px;padding-bottom:0;gap:0;width:348px;z-index:2}.woocommerce-customize-store__step-assemblerHub .edit-site-sidebar-navigation-screen-patterns__group-header{margin-top:32px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__view-mode-toggle-icon.edit-site-site-icon,.woocommerce-customize-store__step-assemblerHub .edit-site-sidebar-navigation-screen__title-icon,.woocommerce-customize-store__step-assemblerHub .edit-site-site-hub__view-mode-toggle-container{background-color:#fcfcfc}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__view-mode-toggle-icon.edit-site-site-icon{align-items:center;display:flex}.woocommerce-customize-store__step-assemblerHub .edit-site-site-hub__site-title{color:#1e1e1e;font-size:.8125rem;font-style:normal;font-weight:500;line-height:20px;margin:0}.woocommerce-customize-store__step-assemblerHub .edit-site-site-icon__image{border-radius:2px}.woocommerce-customize-store__step-assemblerHub .edit-site-site-hub__view-mode-toggle-container{padding:16px 12px 0 16px}.woocommerce-customize-store__step-assemblerHub .edit-site-site-hub__view-mode-toggle-container .edit-site-layout__view-mode-toggle,.woocommerce-customize-store__step-assemblerHub .edit-site-site-hub__view-mode-toggle-container .edit-site-layout__view-mode-toggle-icon.edit-site-site-icon,.woocommerce-customize-store__step-assemblerHub .edit-site-site-hub__view-mode-toggle-container .edit-site-site-icon__icon{width:32px;height:32px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar-region{width:380px;z-index:3}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar__content{display:flex;flex-direction:column}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar__content .components-navigator-screen{will-change:auto;padding:0 16px;overflow-x:hidden;flex:1}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-button{color:#1e1e1e;height:40px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-screen__title{font-size:1rem;color:#1e1e1e;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-weight:600;line-height:24px;padding:0}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-screen__description{color:#757575;font-size:.8125rem;font-style:normal;font-weight:400;line-height:20px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-screen__content .components-heading{color:#757575;font-size:.6875rem;font-style:normal;font-weight:600;line-height:16px;text-transform:uppercase}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-item{border-radius:4px;padding:8px 8px 8px 16px;align-items:center;gap:8px;align-self:stretch;width:348px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-item:hover{background:#ededed;color:#949494}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-item:active{color:#171717;background:#fcfcfc}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-item:focus{color:#171717;background:#fcfcfc;border:1.5px solid var(--wp-admin-theme-color)}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-item .components-flex-item{color:#1e1e1e;font-size:.8125rem;font-style:normal;font-weight:400;line-height:16px;letter-spacing:-.078px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-sidebar-navigation-item.components-item .edit-site-sidebar-navigation-item__drilldown-indicator{fill:#ccc}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-save-hub{border-top:0;padding:32px 29px 32px 32px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-save-hub button.is-primary:disabled{opacity:.5}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__sidebar .edit-site-save-hub button .components-spinner{margin-top:0}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-group-header{color:#1e1e1e;font-size:.6875rem;font-style:normal;font-weight:600;line-height:16px;text-transform:uppercase}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-group{padding:0 8px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-group .woocommerce-customize-store__sidebar-group-header{padding:16px 0}.woocommerce-customize-store__step-assemblerHub button.block-library-site-logo__inspector-upload-container{margin:12px 0 32px;display:flex;padding:32px;justify-content:center;align-items:center;gap:16px;align-self:stretch;border-radius:4px;background:#f0f0f0;width:324px;height:88px}.woocommerce-customize-store__step-assemblerHub button.block-library-site-logo__inspector-upload-container svg{color:#949494}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-container{margin:12px 0 32px;padding:32px;cursor:pointer;width:324px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-container .woocommerce-customize-store_custom-logo{width:100%}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-toggle-control{margin-bottom:24px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-toggle-control label{color:#1e1e1e;font-size:.8125rem;font-style:normal;font-weight:400;line-height:16px;margin-bottom:0}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-toggle-control .components-form-toggle:not(.is-checked) .components-form-toggle__track{background-color:#949494}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-toggle-control .components-form-toggle__thumb{background-color:#fff;border-color:#fff}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-range-control{margin-bottom:24px;padding-top:8px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-range-control input::-webkit-inner-spin-button,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-range-control input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-range-control input[type=number]{-moz-appearance:textfield}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-range-control .components-base-control__label{text-transform:none;color:#1e1e1e;font-size:.8125rem;font-style:normal;font-weight:400;line-height:16px;margin-bottom:8px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-range-control .components-input-control__container{width:84px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-range-control .components-input-control__input{display:flex;height:36px;align-items:center;border-radius:2px;border:1px solid #949494;background:#fff;color:#1e1e1e}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-range-control .components-input-control__input:focus+.components-input-control__backdrop{box-shadow:none;border:1px solid var(--wp-admin-theme-color-darker-10)}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-logo-content .components-base-control__help{color:#757575;font-size:.75rem;font-style:normal;font-weight:400;line-height:16px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__color-panel-container{border:0;margin-top:24px;padding:0}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__color-panel-container .components-panel__body-title{margin:0!important}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__color-panel-container .components-panel__body-title:hover{background:initial}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__color-panel-container .components-panel__body-toggle.components-button{padding:16px 0;text-transform:uppercase;color:#1e1e1e;font-size:.6875rem;font-weight:600;line-height:16px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__color-panel-container .components-panel__body-toggle.components-button:focus{box-shadow:none}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__color-panel-container .components-panel__body-toggle.components-button .components-panel__arrow{right:0;color:#1e1e1e}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_color-palette-container{gap:7px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_color-palette-spinner-container,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_font-pairing-spinner-container{display:flex;justify-content:center;align-items:center;height:174px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-color-content{width:324px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-color-content .woocommerce-customize-store_global-styles-variations_item{border:1.5px solid transparent;padding:2.5px;border-radius:4px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-color-content .woocommerce-customize-store_global-styles-variations_item.is-active,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-color-content .woocommerce-customize-store_global-styles-variations_item:hover{border:1.5px solid var(--wp-admin-theme-color)}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-color-content .woocommerce-customize-store_global-styles-variations_item .woocommerce-customize-store_global-styles-variations_item-preview{border:1px solid #dcdcde;border-radius:2px;background:#fff}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-typography-content{width:324px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-typography-content .woocommerce-customize-store_global-styles-variations_item{border-radius:2px;border:1px solid #dcdcde;background:#fff}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-typography-content .woocommerce-customize-store_global-styles-variations_item.is-active,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-typography-content .woocommerce-customize-store_global-styles-variations_item:hover{border-radius:2px;border:1.5px solid var(--wp-admin-theme-color);background:#fff}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store_sidebar-typography-content .global-styles-variation-container__iframe{box-shadow:none}.woocommerce-customize-store__step-assemblerHub .block-editor-block-patterns-list__item .block-editor-block-preview__container{border-radius:4px;border:1.5px solid transparent}.woocommerce-customize-store__step-assemblerHub .block-editor-block-patterns-list__item.is-selected .block-editor-block-preview__container,.woocommerce-customize-store__step-assemblerHub .block-editor-block-patterns-list__item:focus .block-editor-block-preview__container,.woocommerce-customize-store__step-assemblerHub .block-editor-block-patterns-list__item:hover .block-editor-block-preview__container{box-shadow:none;border-color:var(--wp-admin-theme-color)}.woocommerce-customize-store__step-assemblerHub .edit-site-sidebar-navigation-screen__content .block-editor-block-patterns-list{width:324px}.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__sidebar-homepage-content .block-editor-block-preview__content{background-color:#fff;max-height:280px!important}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__canvas{bottom:16px;top:16px;left:12px;padding:0 4px 0 16px}.woocommerce-customize-store__step-assemblerHub .edit-site-resizable-frame__handle{background:var(--wp-admin-theme-color)}.woocommerce-customize-store__step-assemblerHub .edit-site-resizable-frame__handle .components-popover{display:inline-flex;padding:0 10px;align-items:flex-start;gap:10px;background:var(--wp-admin-theme-color-background-25);left:5px!important;border-radius:4px;height:20px}.woocommerce-customize-store__step-assemblerHub .edit-site-resizable-frame__handle .components-popover .components-popover__content{color:var(--wp-admin-theme-color-darker-20);font-size:.75rem;font-style:normal;font-weight:500;line-height:20px;background:inherit;padding:0}.woocommerce-customize-store__step-assemblerHub .edit-site-layout__canvas .components-resizable-box__container{border-radius:20px;box-shadow:0 0 1px 0 rgba(0,0,0,.25),0 6px 10px 0 rgba(0,0,0,.02),0 13px 15px 0 rgba(0,0,0,.03),0 15px 20px 0 rgba(0,0,0,.04)}.woocommerce-customize-store__step-assemblerHub .edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas>div .interface-interface-skeleton__content,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__block-editor{border-radius:20px}.woocommerce-customize-store__step-assemblerHub .edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas>div .interface-interface-skeleton__content .auto-block-preview__container,.woocommerce-customize-store__step-assemblerHub .edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas>div .interface-interface-skeleton__content .woocommerce-block-preview-container,.woocommerce-customize-store__step-assemblerHub .edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas>div .interface-interface-skeleton__content .woocommerce-customize-store__block-editor,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__block-editor .auto-block-preview__container,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__block-editor .woocommerce-block-preview-container,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__block-editor .woocommerce-customize-store__block-editor{height:100%;overflow:hidden}.woocommerce-customize-store__step-assemblerHub .edit-site-layout:not(.is-full-canvas) .edit-site-layout__canvas>div .interface-interface-skeleton__content iframe,.woocommerce-customize-store__step-assemblerHub .woocommerce-customize-store__block-editor iframe{width:100%;height:100%}.woocommerce-customize-store__step-assemblerHub .edit-site-resizable-frame__inner-content{border-radius:20px!important}.woocommerce-customize-store-tour-kit .woocommerce-tour-kit-step{width:319px;box-shadow:none;border:1px solid var(--gutenberg-gray-300,#ddd)}.woocommerce-customize-store-tour-kit .tour-kit-frame__container{box-shadow:none}.woocommerce-customize-store-tour-kit .components-elevation{display:none}.woocommerce-customize-store-tour-kit .tour-kit-frame__arrow:before{box-shadow:none!important}.woocommerce-customize-store-tour-kit .tour-kit-frame__container[data-popper-placement^=left]>.tour-kit-frame__arrow{right:-5px}.woocommerce-customize-store-tour-kit .tour-kit-frame__container[data-popper-placement^=left]>.tour-kit-frame__arrow:before{border-top:1px solid var(--gutenberg-gray-300,#ddd);border-right:1px solid var(--gutenberg-gray-300,#ddd)}.woocommerce-customize-store-tour-kit .tour-kit-frame__container[data-popper-placement^=right]>.tour-kit-frame__arrow:before{border-bottom:1px solid var(--gutenberg-gray-300,#ddd);border-left:1px solid var(--gutenberg-gray-300,#ddd)}.woocommerce-customize-store-tour-kit .tour-kit-frame__container[data-popper-placement^=top]>.tour-kit-frame__arrow:before{border-bottom:1px solid var(--gutenberg-gray-300,#ddd);border-right:1px solid var(--gutenberg-gray-300,#ddd)}.woocommerce-customize-store-tour-kit .tour-kit-frame__container[data-popper-placement^=bottom]>.tour-kit-frame__arrow:before{border-top:1px solid var(--gutenberg-gray-300,#ddd);border-left:1px solid var(--gutenberg-gray-300,#ddd)}.woocommerce-customize-store-tour-kit .woocommerce-tour-kit-step__heading{color:#1e1e1e;font-size:1rem;font-style:normal;font-weight:600;line-height:24px}.woocommerce-customize-store-tour-kit .woocommerce-tour-kit-step__description{color:#1e1e1e;font-size:.8125rem;font-style:normal;font-weight:400;line-height:16px;margin-top:8px}.woocommerce-customize-store-tour-kit .woocommerce-tour-kit-step-navigation__step{color:#757575;line-height:16px}.woocommerce-customize-store-tour-kit:not(.woocommerce-customize-store-welcome-tourkit) .woocommerce-tour-kit-step__body{margin-top:-16px}.woocommerce-customize-store-welcome-tourkit .tour-kit-frame__container{box-shadow:none}.woocommerce-customize-store-welcome-tourkit .woocommerce-tour-kit-step{width:335px;border-radius:8px;border:1px solid #dcdcdc;box-shadow:0 2px 6px 0 rgba(0,0,0,.05)}.woocommerce-customize-store-welcome-tourkit .woocommerce-tour-kit-step .components-card__header{align-items:flex-start;height:194px;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYwIiBoZWlnaHQ9IjkwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8zNTUxXzI4NDE5NikiPjxwYXRoIGQ9Ik0xNTkuMDYuOTJoLTU3LjE0djU3LjE0aDU3LjE0Vi45MnoiIHN0cm9rZT0iIzI3MUIzRCIgc3Ryb2tlLXdpZHRoPSIuNSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTE1OS4wOCAwaC0uMDdhLjg5Ljg5IDAgMDAtLjg5Ljg5di4wN2MwIC40OTIuMzk5Ljg5Ljg5Ljg5aC4wN2EuODkuODkgMCAwMC44OS0uODlWLjg5YS44OS44OSAwIDAwLS44OS0uODl6TTEwMS45OCAwaC0uMDdhLjg5Ljg5IDAgMDAtLjg5Ljg5di4wN2MwIC40OTIuMzk4Ljg5Ljg5Ljg5aC4wN2EuODkuODkgMCAwMC44OS0uODlWLjg5YS44OS44OSAwIDAwLS44OS0uODl6TTE1OS4xNCA1Ny4xMmgtLjE5YS44My44MyAwIDAwLS44My44M3YuMTljMCAuNDU4LjM3Mi44My44My44M2guMTlhLjgzLjgzIDAgMDAuODMtLjgzdi0uMTlhLjgzLjgzIDAgMDAtLjgzLS44M3pNMTAxLjk4IDU3LjEyaC0uMDdhLjg5Ljg5IDAgMDAtLjg5Ljg5di4wN2MwIC40OTIuMzk4Ljg5Ljg5Ljg5aC4wN2EuODkuODkgMCAwMC44OS0uODl2LS4wN2EuODkuODkgMCAwMC0uODktLjg5eiIgZmlsbD0iIzI3MUIzRCIvPjxwYXRoIGQ9Ik0xMjIuOTEgMy41NGMtMy4zNCAwLTYuMjYgNS4xLTcuODUgMTIuNzEtLjk5LTcuNjEtMi43OS0xMi43MS00Ljg2LTEyLjcxLTMuMTIgMC01LjY1IDExLjYyLTUuNjUgMjUuOTQgMCAxNC4zMiAyLjUzIDI1Ljk0IDUuNjUgMjUuOTQgMi4wNyAwIDMuODgtNS4xIDQuODYtMTIuNzEgMS41OSA3LjYxIDQuNTEgMTIuNzEgNy44NSAxMi43MSAzLjAyIDAgNS43LTQuMTggNy4zNi0xMC42MSAyLjY0IDYuNDMgNi44OSAxMC42MSAxMS42OCAxMC42MSA4IDAgMTQuNDgtMTEuNjIgMTQuNDgtMjUuOTQgMC0xNC4zMi02LjQ4LTI1Ljk0LTE0LjQ4LTI1Ljk0LTQuOCAwLTkuMDUgNC4xOC0xMS42OCAxMC42MS0xLjY2LTYuNDMtNC4zNC0xMC42MS03LjM2LTEwLjYxeiIgZmlsbD0iI0JFQTBGMiIvPjxwYXRoIGQ9Ik04OC42OCAwSDB2MTIuOTFoODguNjhWMHpNNTIuOTYgMjEuNjNIMHYxMi45MWg1Mi45NlYyMS42M3oiIGZpbGw9IiNEQ0RDREUiLz48ZyBmaWxsPSIjMjcxQjNEIj48cGF0aCBkPSJNMTI4LjA1IDg4Ljcxdi0uOTZjMi4yMi0uMjcgMi41LS42MiAyLjAyLTEuOTEtLjQ0LTEuMzMtMS4xMy0zLjA0LTEuODUtNS4yaC03LjM5Yy0uNTUgMS41NC0xLjA2IDIuODctMS41NCA0LjI3LS43NSAyLjIyLS4yNyAyLjUgMi41MyAyLjg0di45NmgtNy45di0uOTZjMi4xNS0uMjcgMi43LS41MSAzLjktMy41OWw3LjA4LTE3Ljk1IDEuMDktLjIxYzIuMTUgNS44NSA0LjUxIDEyLjMxIDYuNjcgMTguMjIgMS4wOSAyLjk3IDEuNCAzLjI1IDMuODMgMy41MnYuOTZoLTguNDR2LjAxem0tMy40Mi0xOC4yMmMtMS4wOSAyLjk0LTIuMjYgNi4wNS0zLjI4IDguNzVoNi4zOWwtMy4xMS04Ljc1ek0xNDkuMTggODkuMTJjLS41MSAwLTEuMjctLjI3LTEuNjEtLjY1LS40NC0uNDQtLjY1LS45Mi0uODItMS41NC0xLjM3LjkyLTMuMDQgMi4xOS00LjEgMi4xOS0yLjQzIDAtNC4xNy0yLjAyLTQuMTctNC4yMSAwLTEuNjguOTItMi43NyAyLjgtMy40MiAyLjA5LS43MiA0LjY1LTEuNjEgNS40LTIuMjJ2LS42OGMwLTIuNDMtMS4yMy0zLjgzLTMuMDEtMy44My0uNzkgMC0xLjI3LjM4LTEuNjEuNzktLjM4LjQ4LS42MiAxLjIzLS45MiAyLjIyLS4xNy41NS0uNDguNzktLjk5Ljc5LS42NSAwLTEuNS0uNjgtMS41LTEuNSAwLS40OC40NC0uODkgMS4xMy0xLjM3Ljk5LS43MiAyLjk3LTEuOTggNC45Mi0yLjM5IDEuMDMgMCAyLjA5LjMxIDIuODcuOTIgMS4yIDEuMDMgMS43NCAyLjE5IDEuNzQgMy45N3Y2LjZjMCAxLjU3LjU4IDIuMDUgMS4yIDIuMDUuNDEgMCAuODUtLjE3IDEuMjMtLjM4bC4zNC45Ni0yLjkxIDEuNzEuMDEtLjAxem0tMi41LTguNjVjLS43NS4zOC0yLjM5IDEuMDktMy4xOCAxLjQ0LTEuMy41OC0yLjA5IDEuMjMtMi4wOSAyLjUgMCAxLjgxIDEuMzcgMi42MyAyLjQ2IDIuNjMuODkgMCAyLjEyLS41NSAyLjgtMS4yM3YtNS4zM2wuMDEtLjAxeiIvPjwvZz48Zz48cGF0aCBkPSJNMy4zNCA4OS4xMkwwIDg1Ljc3bDQyLjQtNDAuODQgMS43OSAxLjc5LTQwLjg1IDQyLjR6IiBmaWxsPSIjQkVBMEYyIi8+PHBhdGggZD0iTTM0LjU2IDU2Ljc3bDkuNjMtMTAuMDUtMS43OS0xLjc5LTEwLjA2IDkuNjMgMi4yMiAyLjIxeiIgZmlsbD0iIzI3MUIzRCIvPjxnIGZpbGw9IiMyNzFCM0QiPjxwYXRoIGQ9Ik01Ny45MSAzNS43MWMwLTMuMjggMi42NC02LjI3IDEuOTgtNi45Mi0uNjYtLjY2LTMuNjQgMS45OC02LjkyIDEuOThzLTYuMjctMi42NC02LjkyLTEuOThjLS42NS42NiAxLjk4IDMuNjQgMS45OCA2Ljkycy0yLjY0IDYuMjctMS45OCA2LjkyYy42Ni42NiAzLjY0LTEuOTggNi45Mi0xLjk4czYuMjcgMi42NCA2LjkyIDEuOThjLjY1LS42Ni0xLjk4LTMuNjQtMS45OC02Ljkyek02Ni4wMyA0OC43NTljMS4zMTItMS4zMTMgMS42OTgtMy4wNTQuODYyLTMuODktLjgzNi0uODM1LTIuNTc3LS40NDktMy44ODkuODYzLTEuMzEyIDEuMzEyLTEuNjk4IDMuMDUzLS44NjMgMy44OS44MzYuODM1IDIuNTc3LjQ0OSAzLjg5LS44NjN6TTcwLjY4NiA1My40MzVjLjg2LS44NTkgMS4xMTItMS45OTguNTY2LTIuNTQ1LS41NDctLjU0Ny0xLjY4Ny0uMjk0LTIuNTQ2LjU2NS0uODYuODYtMS4xMTIgMi0uNTY2IDIuNTQ2LjU0Ny41NDcgMS42ODcuMjk0IDIuNTQ2LS41NjZ6TTc0LjQ2OCA1Ny4yYy42Mi0uNjIxLjgwNC0xLjQ0NS40MS0xLjgzOS0uMzk1LS4zOTQtMS4yMTgtLjIxLTEuODM5LjQxLS42Mi42MjEtLjgwNCAxLjQ0NC0uNDEgMS44MzkuMzk1LjM5NCAxLjIxOC4yMSAxLjgzOS0uNDF6Ii8+PC9nPjwvZz48Zz48cGF0aCBkPSJNMzkuMyA4OS4xMWE2LjcgNi43IDAgMTAwLTEzLjQgNi43IDYuNyAwIDAwMCAxMy40eiIgZmlsbD0iI0RDRENERSIvPjxwYXRoIGQ9Ik02MC42NCA4OS4xMWE2LjcgNi43IDAgMTAwLTEzLjQgNi43IDYuNyAwIDAwMCAxMy40eiIgZmlsbD0iI0RGRDFGQiIvPjxwYXRoIGQ9Ik04MS45OCA4OS4xMWE2LjcgNi43IDAgMTAwLTEzLjQgNi43IDYuNyAwIDAwMCAxMy40eiIgZmlsbD0iI0JFQTBGMiIvPjwvZz48cGF0aCBkPSJNMTMuMDIgNDMuMjNILjA3djEyLjk1aDEyLjk1VjQzLjIzeiIgZmlsbD0iI0RDRENERSIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImNsaXAwXzM1NTFfMjg0MTk2Ij48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDE1OS45N3Y4OS4xMkgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==);background-size:160px;background-position:50%;background-repeat:no-repeat;margin-bottom:16px}.woocommerce-customize-store-welcome-tourkit .woocommerce-tour-kit-step-navigation .components-button.is-primary{margin-left:12px}.edit-site-canvas-spinner{width:100%;height:100%;display:flex;align-items:center;justify-content:center;animation:edit-site-canvas-spinner__fade-in-animation .5s ease 1s;animation-fill-mode:forwards}@media(prefers-reduced-motion:reduce){.edit-site-canvas-spinner{animation-duration:1ms}}.edit-site-canvas-spinner circle{stroke:rgba(0,0,0,.3)}:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}@media(max-width:782px){.woocommerce-layout .woocommerce-layout__main{padding-top:0!important}}.woocommerce-layout .woocommerce-layout__main .woocommerce-customize-store__loading{display:grid;place-items:center;height:100vh}.woocommerce-customize-store{background-color:#fff}.woocommerce-customize-store #woocommerce-layout__primary{margin:0;width:100%}.woocommerce-customize-store .woocommerce-layout__main{padding-right:0}body.woocommerce-customize-store.js.is-fullscreen-mode{margin-top:0!important;height:100%}body.woocommerce-customize-store.js.is-fullscreen-mode>div.tour-kit.woocommerce-tour-kit>div>div.tour-kit-spotlight.is-visible{outline:99999px solid rgba(0,0,0,.15)}body.woocommerce-customize-store.js.is-fullscreen-mode #screen-meta-links{display:none}.woocommerce-cys-layout{display:flex;flex-direction:column;align-items:center}.woocommerce-cys-layout h1{text-align:center;color:#000;font-size:32px;font-style:normal;font-weight:500;line-height:40px;margin-top:100px;margin-bottom:60px}.woocommerce-cys-layout .woocommerce-cys-page{width:615px;display:flex;flex-direction:column;align-items:center}.woocommerce-cys-layout button.is-primary{width:404px;display:block;height:48px;margin-top:32px}.woocommerce-design-with-ai__container .woocommerce-onboarding-loader img{width:216px;height:136px}.woocommerce-cys-design-with-ai .components-base-control{width:404px}.woocommerce-cys-design-with-ai .components-base-control textarea{margin:0 0 12px;height:167px;border-radius:2px;border:1px solid #bbb;background:#fff;color:#1e1e1e;font-size:13px;font-style:normal;font-weight:400;line-height:18px}.woocommerce-cys-design-with-ai .components-base-control textarea::placeholder{color:#757575}.woocommerce-cys-design-with-ai .components-base-control textarea:focus{box-shadow:none;border-color:var(--wp-admin-theme-color,#3858e9)}.woocommerce-cys-design-with-ai .woocommerce-cys-design-with-ai-guide{padding:12px;width:404px;border-radius:2px;background:var(--wp-admin-theme-color-background-04,rgba(168,168,170,.301));color:var(--gutenberg-gray-800,#2f2f2f)}.woocommerce-cys-design-with-ai .woocommerce-cys-design-with-ai-guide p{padding:0;margin:0;font-size:13px;font-style:normal;font-weight:500;line-height:20px}.woocommerce-cys-design-with-ai .woocommerce-cys-design-with-ai-guide ul{list-style:inside;margin-left:8px}.woocommerce-cys-design-with-ai .woocommerce-cys-design-with-ai-guide ul li{font-weight:400}.woocommerce-cys-design-with-ai-look-and-feel .choices,.woocommerce-cys-design-with-ai-tone-of-voice .choices{width:404px;display:flex;flex-direction:column;gap:16px}.woocommerce-cys-design-with-ai__error-notice.is-error{background:#fce2e4;padding:12px;font-size:13px;font-style:normal;font-weight:400;line-height:24px;color:#1e1e1e;margin:0 0 60px;width:615px}.woocommerce-cys-design-with-ai__error-notice.is-error .components-notice__content{margin:0}.woocommerce-cys-design-with-ai__error-notice.is-error .components-button{padding:0;height:auto}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/9669.style.css b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/9669.style.css
index c9a89cc0..de63cf26 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/9669.style.css
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/9669.style.css
@@ -1 +1 @@
-.woocommerce-admin-page__extensions{background:#fff}.woocommerce-admin-page__extensions #wpbody{margin:0}.woocommerce-admin-page__extensions #wpbody-content{overflow:hidden}.woocommerce-admin-page__extensions .woocommerce-layout__primary{margin:0}.woocommerce-admin-page__extensions .woocommerce-layout__main{padding:0}.woocommerce-admin-page__extensions .woocommerce-store-alerts{margin-left:16px;margin-right:16px;margin-top:16px}@media(min-width:769px){.woocommerce-admin-page__extensions .woocommerce-store-alerts{margin-left:32px;margin-right:32px;margin-top:32px}}.woocommerce-marketplace__header{align-items:center;background:#fff;border-bottom:1px solid #ddd;display:grid;grid-template:"mktpl-title mktpl-search mktpl-meta" 60px "mktpl-tabs mktpl-tabs mktpl-tabs" auto/1fr 320px 36px;padding:0 32px;width:100%}@media(width <= 769px){.woocommerce-marketplace__header{border-bottom:0;grid-template:"mktpl-title mktpl-meta" 60px "mktpl-tabs mktpl-tabs" 48px "mktpl-search mktpl-search" auto/auto 48px;padding:0}}.woocommerce-marketplace__header .woocommerce-marketplace__header-title{font-size:14px;font-weight:600;margin:0;padding:10px 0 0}@media(width <= 769px){.woocommerce-marketplace__header .woocommerce-marketplace__header-title{padding-left:var(--large-gap)}}@media(width <= 769px){.woocommerce-marketplace--my-subscriptions .woocommerce-marketplace__search{display:none}}.woocommerce-marketplace__header-title{-ms-grid-row:1;-ms-grid-column:1;align-items:center;align-self:stretch;display:flex;grid-area:mktpl-title;line-height:18px}@media(width <= 769px){.woocommerce-marketplace__header-title{padding:0 16px}}.woocommerce-marketplace__header-meta{-ms-grid-row:1;-ms-grid-column:3;grid-area:mktpl-meta;justify-self:end;padding-top:10px}@media(width <= 769px){.woocommerce-marketplace__header-meta{margin-right:16px;padding:0}}.woocommerce-marketplace__header-tabs{-ms-grid-row:2;-ms-grid-column:1;-ms-grid-column-span:3;align-self:end;grid-area:mktpl-tabs}@media (width <= 769px){.woocommerce-marketplace__header-title{-ms-grid-row:1;-ms-grid-column:1}.woocommerce-marketplace__header-meta{-ms-grid-row:1;-ms-grid-column:2}.woocommerce-marketplace__header-tabs{-ms-grid-row:2;-ms-grid-column:1;-ms-grid-column-span:2;padding:0 16px}}.woocommerce-marketplace__search{margin-right:16px;margin-top:10px}@media(width <= 769px){.woocommerce-marketplace__search{margin:16px}}.woocommerce-marketplace__menu-item span{white-space:normal}.woocommerce-marketplace__menu-avatar-image{border-radius:50%;height:24px;width:24px}.woocommerce-marketplace__menu-icon{flex-shrink:0;margin-right:8px}.woocommerce-marketplace__menu-text{display:flex;flex-direction:column}.woocommerce-marketplace__sub-text{color:#757575;font-size:12px}.woocommerce-marketplace__header-account-modal__header-account-modal-text{margin-bottom:8px}.woocommerce-marketplace__header-account-modal-overlay{z-index:1000000}.woocommerce-marketplace__header-account-modal-button-group{display:inline-flex;gap:8px;justify-content:flex-end;margin-top:24px;width:100%}.woocommerce-marketplace__header-account-modal-button-group .woocommerce-marketplace__header-account-modal-button,.woocommerce-marketplace__header-account-modal-button-group .woocommerce-marketplace__header-account-modal-button.is-primary{border-radius:2px;box-shadow:none}@media screen and (min-width:600px){.woocommerce-marketplace__header-account-modal{max-width:350px}}.woocommerce-marketplace__tabs{box-sizing:content-box;display:flex;gap:24px;overflow-y:auto}.woocommerce-marketplace__tab-button{border-bottom:1.5px solid transparent;border-radius:0;color:#1a1a1a;font-size:13px;font-style:normal;font-weight:600;height:48px;line-height:16px;padding:0;white-space:nowrap}.woocommerce-marketplace__tab-button:focus:not(:disabled){box-shadow:none}.woocommerce-marketplace__tab-button.is-active{border-color:var(--wp-admin-theme-color)}@media(width <= 769px){.woocommerce-marketplace__tabs{border-bottom:1px solid #ddd}}.woocommerce-marketplace__search{grid-area:mktpl-search;background:#f6f7f7;border:1.5px solid transparent;border-radius:2px;display:flex;height:40px;padding:4px 8px 4px 12px}.woocommerce-marketplace__search input[type=search]{all:unset;flex-grow:1}.woocommerce-marketplace__search:focus-within{background:#fff;border-color:var(--wp-admin-theme-color,#3858e9)}@media(width <= 769px){.woocommerce-marketplace__search{margin:16px 16px 8px}}.woocommerce-marketplace__search-button{all:unset;cursor:pointer}.woocommerce-marketplace__content{box-sizing:content-box;margin:auto;max-width:1600px;padding:24px 16px;min-height:500px}@media screen and (min-width:769px){.woocommerce-marketplace__content{padding:48px 32px}}.woocommerce-marketplace__product-list-content{display:grid;gap:16px;margin-top:16px}.woocommerce-marketplace__extension-card{background-color:#3c3c3c;color:#fff;height:270px}@media screen and (min-width:769px){.woocommerce-marketplace__product-list-content{gap:24px;grid-template-columns:repeat(2,1fr)}.woocommerce-marketplace__discover .woocommerce-marketplace__product-card:nth-child(n+3),.woocommerce-marketplace__no-results .woocommerce-marketplace__product-card:nth-child(n+3){display:none}}@media screen and (min-width:1024px){.woocommerce-marketplace__product-list-content{gap:24px;grid-template-columns:repeat(3,1fr)}.woocommerce-marketplace__discover .woocommerce-marketplace__product-card:nth-child(3),.woocommerce-marketplace__no-results .woocommerce-marketplace__product-card:nth-child(3){display:block}}@media screen and (min-width:1920px){.woocommerce-marketplace__product-list-content{grid-template-columns:repeat(4,1fr)}.woocommerce-marketplace__discover .woocommerce-marketplace__product-card:nth-child(4),.woocommerce-marketplace__no-results .woocommerce-marketplace__product-card:nth-child(4){display:block}}.woocommerce-marketplace__product-card{padding:24px;border-radius:4px!important}.woocommerce-marketplace__product-card.is-loading{overflow:hidden;pointer-events:none}.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__content{overflow:hidden}.woocommerce-marketplace__product-card.is-loading.woocommerce-marketplace__product-card--extension .woocommerce-marketplace__product-card__title,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__description,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__price{width:100vw}.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__description,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__icon,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__image,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__price,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__title,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__vendor{background:#f0f0f0}.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__description,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__price,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__vendor{height:19.5px}.woocommerce-marketplace__product-card.is-loading.woocommerce-marketplace__product-card--extension .woocommerce-marketplace__product-card__title{height:48px}.woocommerce-marketplace__product-card.is-loading.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__title{height:24px}.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__price,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__vendor{width:8em}.woocommerce-marketplace__product-card.is-loading.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__price{margin-top:22px}.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__description{height:58.5px}.woocommerce-marketplace__product-card:hover{outline:1.5px solid var(--wp-admin-theme-color)}.woocommerce-marketplace__product-card__content{display:grid;align-items:flex-start;gap:16px;justify-content:space-between;height:100%;grid-template-rows:auto 1fr 20px}.woocommerce-marketplace__product-card__header{align-self:stretch}.woocommerce-marketplace__product-card__icon{width:48px;height:48px;flex-shrink:0;border-radius:8px}.woocommerce-marketplace__product-card__details{display:flex;justify-content:flex-start;align-items:flex-start;gap:16px;background:#fff}.woocommerce-marketplace__product-card__meta{display:flex;flex-direction:column;gap:2px;color:#1a1a1a}.woocommerce-marketplace__product-card__title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;color:#1a1a1a;font-size:16px;font-style:normal;font-weight:600;line-height:24px;margin:-4px 0 0;padding:0;overflow:hidden;text-overflow:ellipsis}.woocommerce-marketplace__product-card__link,.woocommerce-marketplace__product-card__link:active,.woocommerce-marketplace__product-card__link:hover{color:#1a1a1a;text-decoration:none}.woocommerce-marketplace__product-card__link:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0}.woocommerce-marketplace__product-card__vendor{display:flex;gap:4px;margin:0;padding:0;position:relative}.woocommerce-marketplace__product-card__vendor a{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;text-decoration:none}.woocommerce-marketplace__product-card__description{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;margin:0;overflow:hidden;text-overflow:ellipsis}.woocommerce-marketplace__product-card__price{align-items:flex-end;gap:4px;align-self:stretch;text-decoration:none!important;color:#1a1a1a!important;font-style:normal;font-weight:500;line-height:16px}.woocommerce-marketplace__product-card__price-billing{color:#949494;font-size:13px;font-style:normal;font-weight:400;line-height:16px}.woocommerce-marketplace__product-card.woocommerce-marketplace__product-card--theme{padding:0;overflow:hidden}.woocommerce-marketplace__product-card.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__content{grid-template-rows:auto 1fr auto;grid-template-columns:2fr 1fr}.woocommerce-marketplace__product-card.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__image{border-bottom:1px solid #e0e0e0;grid-column-start:span 2;overflow:hidden;padding-top:75%;position:relative}.woocommerce-marketplace__product-card.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__image-inner{width:100%;position:absolute;top:0;left:0;bottom:0;right:0}.woocommerce-marketplace__product-card.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__header{padding-left:16px}.woocommerce-marketplace__product-card.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__price{margin-right:16px;text-align:right;display:inline-flex;align-items:flex-end}.woocommerce-marketplace__product-card.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__price-label{margin-left:auto;line-height:1.5}.woocommerce-marketplace__product-card.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__price-billing{line-height:1.5}@media screen and (min-width:769px){.woocommerce-marketplace__product-card{margin-top:0}}.woocommerce-marketplace__product-list-header{display:flex;justify-content:center;gap:16px;align-self:stretch}.woocommerce-marketplace__product-list-title{flex:1 0 0;font-size:20px;font-style:normal;font-weight:400;margin-bottom:16px;margin-top:8px}.woocommerce-marketplace__product-list-title.is-loading{background:#f0f0f0;height:26px;margin:0;width:min(100%,12em)}.woocommerce-marketplace__product-list-title--extensions,.woocommerce-marketplace__product-list-title--themes{margin-bottom:0}.woocommerce-marketplace__product-list-link{display:flex;justify-content:center;align-items:center;gap:12px}.woocommerce-marketplace__product-list-link a{display:flex;justify-content:center;align-items:center;text-decoration:none}.woocommerce-marketplace__discover{display:flex;flex-direction:column;align-items:stretch;gap:40px}.woocommerce-marketplace__search-extensions,.woocommerce-marketplace__search-themes{margin-bottom:48px}.woocommerce-marketplace__view-all-button{margin-top:24px}.woocommerce-marketplace__category-selector{display:flex;align-items:stretch;margin:16px 0 0}.woocommerce-marketplace__category-item{cursor:pointer}.woocommerce-marketplace__category-item .components-dropdown{height:100%}.woocommerce-marketplace__category-item-button{display:flex;align-items:center;cursor:pointer;border:none;border-radius:2px;color:#50575e;background-color:#f6f7f7;padding:6px 8px;margin-right:8px;line-height:20px;height:100%}.woocommerce-marketplace__category-item-button--selected{color:#fff;background-color:#1a1a1a;fill:#fff}.woocommerce-marketplace__category-item-button.is-loading{animation:loading-fade 1.6s ease-in-out infinite;background:#f0f0f0;height:32px;pointer-events:none;width:6em}.woocommerce-marketplace__category-item-content .components-popover__content{min-width:200px}.woocommerce-marketplace__category-selector--full-width{display:none;margin-top:12px}@media screen and (max-width:782px){.woocommerce-marketplace__category-selector--full-width{display:flex}.woocommerce-marketplace__category-selector{display:none}}.woocommerce-marketplace__category-dropdown{width:100%}.woocommerce-marketplace__category-dropdown-button{display:flex;align-items:center;justify-content:space-between;cursor:pointer;border:1px solid #949494;border-radius:2px;background-color:#fff;width:100%;font-size:13px;line-height:20px;padding:12px 8px;text-align:left}.woocommerce-marketplace__category-dropdown-content{background-color:#fff;color:#1a1a1a;font-size:13px;min-width:280px;width:calc(100% - 32px)}.woocommerce-marketplace__category-dropdown-content .components-popover__content{width:100%}.woocommerce-marketplace__category-dropdown-list{margin:0;line-height:20px}.woocommerce-marketplace__category-dropdown-item{border-radius:2px}.woocommerce-marketplace__category-dropdown-item:hover{background-color:#f6f7f7}.woocommerce-marketplace__category-dropdown-item-button{border:none;cursor:pointer;background-color:inherit;color:#1a1a1a;text-align:left;padding:6px 8px;line-height:20px;width:100%}.woocommerce-marketplace__category-dropdown-item-button--selected{color:#fff;background-color:#1a1a1a}.woocommerce-marketplace__no-results__heading{margin:0;font-size:20px;font-weight:400}.woocommerce-marketplace__no-results__description{margin:8px 0 0;color:#757575;line-height:20px}.woocommerce-marketplace__no-results__product-groups{margin-top:16px}.woocommerce-marketplace__no-results .woocommerce-marketplace__product-list-title{font-size:16px;font-weight:400;margin:32px 0 0}.woocommerce-marketplace__search-results .woocommerce-marketplace__view-all-button{margin-top:24px}.woocommerce-marketplace__search-results .woocommerce-marketplace__product-list-content--collapsed .woocommerce-marketplace__product-card:nth-child(n+7){display:none}@media screen and (min-width:1920px){.woocommerce-marketplace__search-results .woocommerce-marketplace__product-list-content--collapsed .woocommerce-marketplace__product-card:nth-child(n+7){display:block}}.woocommerce-marketplace__my-subscriptions__header{display:flex;flex-direction:column;align-items:flex-start;justify-content:stretch;max-width:calc(100vw - 32px)}@media screen and (min-width:783px){.woocommerce-marketplace__my-subscriptions__header{max-width:calc(100vw - 100px)}}@media screen and (min-width:960px){.woocommerce-marketplace__my-subscriptions__header{max-width:calc(100vw - 224px)}}.woocommerce-marketplace__my-subscriptions__header .woocommerce-marketplace__my-subscriptions__header-content,.woocommerce-marketplace__my-subscriptions__header .woocommerce-marketplace__my-subscriptions__header-refresh{width:100%}.woocommerce-marketplace__my-subscriptions__header .woocommerce-marketplace__my-subscriptions__header-content{order:2}.woocommerce-marketplace__my-subscriptions__header .woocommerce-marketplace__my-subscriptions__header-refresh{display:flex;justify-content:end;order:1}@media screen and (min-width:769px){.woocommerce-marketplace__my-subscriptions__header{align-items:center;justify-content:space-between;flex-direction:row}.woocommerce-marketplace__my-subscriptions__header .woocommerce-marketplace__my-subscriptions__header-content,.woocommerce-marketplace__my-subscriptions__header .woocommerce-marketplace__my-subscriptions__header-refresh{width:auto}.woocommerce-marketplace__my-subscriptions__header .woocommerce-marketplace__my-subscriptions__header-content{order:1}.woocommerce-marketplace__my-subscriptions__header .woocommerce-marketplace__my-subscriptions__header-refresh{order:2}}.woocommerce-marketplace__refresh-subscriptions{text-decoration:none;color:#007cba}.woocommerce-marketplace__refresh-subscriptions .woocommerce-marketplace__refresh-subscriptions-icon{margin-right:4px}.woocommerce-marketplace__my-subscriptions__available{margin-top:40px}.woocommerce-marketplace__my-subscriptions__heading{font-size:20px;color:#1a1a1a;font-weight:400;margin:0;line-height:28px}.woocommerce-marketplace__notice--error:last-child{margin-bottom:40px}.woocommerce-marketplace__my-subscriptions__table-description{font-size:13px;margin:1em 0;line-height:20px;color:#757575}.woocommerce-marketplace__my-subscriptions__table-description a{display:inline-flex;align-items:center;text-decoration:none}.woocommerce-marketplace__my-subscriptions__table-description svg{fill:#007cba;margin-left:2px;width:16px;height:16px}.woocommerce-marketplace__my-subscriptions__table-wrapper{position:relative;overflow:hidden}.woocommerce-marketplace__my-subscriptions__table{font-size:13px;line-height:20px;margin-top:24px;color:#1a1a1a;max-width:calc(100vw - 32px)}@media screen and (min-width:783px){.woocommerce-marketplace__my-subscriptions__table{max-width:calc(100vw - 100px)}}@media screen and (min-width:960px){.woocommerce-marketplace__my-subscriptions__table{max-width:calc(100vw - 224px)}}.woocommerce-marketplace__my-subscriptions__product{min-width:400px;display:flex;align-items:center}.woocommerce-marketplace__my-subscriptions__product-name{margin-left:12px;line-height:18px;font-weight:600;color:#1a1a1a;text-decoration:none}.woocommerce-marketplace__my-subscriptions__product-icon img{border-radius:4px;width:40px}.woocommerce-marketplace__my-subscriptions__product-icon{width:40px;height:40px}.woocommerce-marketplace__my-subscriptions__product-icon svg{border-radius:4px;padding:8px;fill:#949494;background-color:#e0e0e0;width:40px;height:40px}.woocommerce-table__item .woocommerce-marketplace__my-subscriptions__product-name:active,.woocommerce-table__item .woocommerce-marketplace__my-subscriptions__product-name:hover,.woocommerce-table__item .woocommerce-marketplace__my-subscriptions__product-name:visited{color:#1a1a1a}.woocommerce-marketplace__my-subscriptions__product-status{display:flex;align-items:center;border-radius:2px;border:none;padding:2px 8px;margin-left:12px;text-align:left;white-space:nowrap}.woocommerce-marketplace__my-subscriptions__product-status--error{color:var(--wp-red-red-70,#8a2424);background:var(--wp-red-red-0,#fcf0f1)}.woocommerce-marketplace__my-subscriptions__product-status--error>svg{margin-right:2px;fill:var(--wp-red-red-70,#8a2424)}.woocommerce-marketplace__my-subscriptions__product-status--warning{color:var(--wp-yellow-yellow-70,#614200);background:var(--wp-yellow-yellow-0,#fcf9e8)}.woocommerce-marketplace__my-subscriptions__product-status--warning>svg{margin-right:2px;color:var(--wp-yellow-yellow-70,#614200)}.woocommerce-marketplace__my-subscriptions__popover{top:-8px!important}.woocommerce-marketplace__my-subscriptions__popover .components-popover__content{border:none;width:300px;border-radius:2px;padding:12px;color:#1a1a1a}.woocommerce-marketplace__my-subscriptions__popover .components-popover__content a{text-decoration:none}.components-base-control.woocommerce-marketplace__my-subscriptions__activation{margin-bottom:0}.woocommerce-marketplace__my-subscriptions-version{padding:6px 12px}.woocommerce-marketplace__my-subscriptions__table__header--version>span{display:inline-block;padding:0 12px}.woocommerce-marketplace__my-subscriptions .woocommerce-table__empty-item,.woocommerce-marketplace__my-subscriptions .woocommerce-table__header,.woocommerce-marketplace__my-subscriptions .woocommerce-table__item{padding:8px 24px;align-items:center}.woocommerce-marketplace__my-subscriptions .woocommerce-table__table tr:hover{background:#f8f9fa}.woocommerce-marketplace__my-subscriptions .woocommerce-table.is-empty{background:none;border:1px solid var(--gutenberg-gray-100,#f0f0f0);flex-direction:column;gap:12px;margin-top:24px}.woocommerce-marketplace__my-subscriptions .components-button.is-link{text-decoration:none;padding:6px 12px}.woocommerce-marketplace__my-subscriptions .components-button.is-secondary:hover:not(:disabled){color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.woocommerce-marketplace__my-subscriptions--connect{display:flex;flex-direction:column;align-items:center;max-width:495px;padding:64px 32px;margin:0 auto}.woocommerce-marketplace__my-subscriptions--connect .woocommerce-marketplace__my-subscriptions__icon{width:80px;height:80px;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAiIGhlaWdodD0iODAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzI5NzBfMTA0MzcpIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDgwdjgwSDB6Ii8+PHBhdGggZD0iTTc0LjEzMiAwbC01LjY4NCAzLjI5NUw2Mi43NTggMGwtNS42ODUgMy4yOTVMNTEuMzgzIDBsLTUuNjkgMy4yOTVMNDAuMDEgMGwtNS42OSAzLjI5NUwyOC42MzMgMGwtNS42OSAzLjI5NUwxNy4yNTQgMGwtNS42OSAzLjI5NUw1Ljg3MyAwIDAgMy40MDJ2NzMuMTk2TDUuODY3IDgwbDUuNjktMy4yOTlMMTcuMjQzIDgwbDUuNjktMy4yOTlMMjguNjE3IDgwbDUuNjktMy4yOTlMMzkuOTk3IDgwbDUuNjg1LTMuMjk5TDUxLjM3MiA4MGw1LjY4NC0zLjI5OUw2Mi43NDYgODBsNS42OS0zLjI5OUw3NC4xMzMgODAgODAgNzYuNTk4VjMuNDAyTDc0LjEzMiAweiIgZmlsbD0iI0YwRjBGMCIvPjxwYXRoIGQ9Ik03MS4yIDE0LjhIOC40djRoNjIuOHYtNHpNNzEuMiAyNS4ySDguNHY0aDYyLjh2LTR6TTcxLjIgMzUuNkg4LjR2NGg2Mi44di00ek02OCA1My42SDQ5LjJhMy4yIDMuMiAwIDAwLTMuMiAzLjJ2NGEzLjIgMy4yIDAgMDAzLjIgMy4ySDY4YTMuMiAzLjIgMCAwMDMuMi0zLjJ2LTRhMy4yIDMuMiAwIDAwLTMuMi0zLjJ6IiBmaWxsPSIjREREIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDBfMjk3MF8xMDQzNyI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGg4MHY4MEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==)}.woocommerce-marketplace__my-subscriptions--connect .woocommerce-marketplace__my-subscriptions__header{margin-top:16px;margin-bottom:8px;font-size:13px}.woocommerce-marketplace__my-subscriptions--connect .woocommerce-marketplace__my-subscriptions__description{text-align:center;font-size:13px;line-height:20px;font-weight:400;color:var(--gutenberg-gray-700);margin-top:0;margin-bottom:24px}.woocommerce-marketplace__my-subscriptions__table__header--actions{text-align:right;justify-content:flex-end}.woocommerce-marketplace__my-subscriptions__actions{display:flex;justify-content:end}.woocommerce-marketplace__my-subscriptions__actions .components-button{margin-right:8px}.woocommerce-marketplace__my-subscriptions__actions a:hover{color:#007cba}.woocommerce-marketplace__my-subscriptions__notices .components-notice{margin-left:0;margin-right:0;background-color:#fff;box-shadow:0 2px 6px 0 rgba(16,21,23,.05);border:1px solid var(--gutenberg-gray-100,#f0f0f0);padding-right:12px}.woocommerce-marketplace__my-subscriptions__notices .components-notice:before{content:"";display:block;width:4px;height:100%;background-color:var(--wp-admin-theme-color,#007cba);position:absolute;left:0;top:0;bottom:0}.woocommerce-marketplace__my-subscriptions__notices .components-notice.is-error:before{background-color:#d94f4f}.woocommerce-marketplace__my-subscriptions__notices .components-notice .components-notice__content{display:flex;align-items:center;gap:12px}.woocommerce-marketplace__my-subscriptions__notices .components-notice .components-notice__dismiss.has-icon{width:24px;min-width:24px;height:24px;align-self:center;padding:4px}.woocommerce-marketplace__my-subscriptions__notices .components-notice .components-notice__dismiss.has-icon>svg{fill:#1a1a1a}.woocommerce-marketplace__my-subscriptions__notices .components-notice__action.components-button.is-link{margin:0;padding:0}.woocommerce-marketplace__footer{background:#f6f7f7;border-top:1px solid #e0e0e0;margin:auto;padding:48px 16px}.woocommerce-marketplace__footer a{text-decoration:none}.woocommerce-marketplace__footer-content{box-sizing:content-box;max-width:1600px;margin:auto;width:100%}.woocommerce-marketplace__footer-title{color:#1a1a1a;font-size:20px;font-style:normal;font-weight:500;line-height:28px;max-width:389px;margin:0 0 32px}.woocommerce-marketplace__footer-columns{display:flex;flex-direction:column;gap:24px}.woocommerce-marketplace__footer-logo{color:#646970;display:flex;font-size:14px;font-weight:600;line-height:20px;gap:8px;margin:48px 0 0}@media screen and (min-width:769px){.woocommerce-marketplace__footer{padding:48px 32px}.woocommerce-marketplace__footer-columns{flex-direction:row}}.woocommerce-marketplace__icon-group{flex:1;max-width:382px}.woocommerce-marketplace__icon-group-headline{display:flex;gap:8px}.woocommerce-marketplace__icon-group-title{color:#101517;font-size:14px;font-weight:600;line-height:20px;margin:0 0 8px}.woocommerce-marketplace__icon-group-description{color:#646970;font-size:13px;font-weight:400;line-height:20px;margin:0}.woocommerce-marketplace__feedback-modal{max-width:666px}.woocommerce-marketplace__feedback-modal-buttons{display:flex;justify-content:flex-end;gap:8px}:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}.woocommerce-marketplace__likert-scale{display:flex;list-style:none;margin:0;border:2px solid transparent}.woocommerce-marketplace__likert-scale.validation-failed{border-color:#d94f4f}.woocommerce-marketplace__likert-scale-item{margin:0;width:100%;font-size:11px}.woocommerce-marketplace__likert-scale-item label{align-items:center;aspect-ratio:91.6/48;border:1.5px solid transparent;box-sizing:border-box;display:flex;flex-direction:column;gap:8px;justify-content:center;padding:16px 8px;text-align:center}.woocommerce-marketplace__likert-scale-item input:checked+label{border-color:var(--wp-admin-theme-color-darker-10);background:#e6f1f5}.woocommerce-marketplace__likert-scale-item input:focus{margin-top:-99px}.woocommerce-marketplace__likert-scale-item input:focus+label{outline:2px solid var(--wp-admin-theme-color);outline-offset:2px}.woocommerce-marketplace__likert-scale-icon{font-size:24px}.woocommerce-marketplace__likert-scale-text{font-size:11px}
\ No newline at end of file
+.woocommerce-admin-page__extensions{background:#fff}.woocommerce-admin-page__extensions #wpbody{margin:0}.woocommerce-admin-page__extensions #wpbody-content{overflow:hidden}.woocommerce-admin-page__extensions .woocommerce-layout__primary{margin:0}.woocommerce-admin-page__extensions .woocommerce-layout__main{padding:0}.woocommerce-admin-page__extensions .woocommerce-store-alerts{margin-left:16px;margin-right:16px;margin-top:16px}@media(min-width:769px){.woocommerce-admin-page__extensions .woocommerce-store-alerts{margin-left:32px;margin-right:32px;margin-top:32px}}.woocommerce-marketplace__header{align-items:center;background:#fff;border-bottom:1px solid #ddd;display:grid;grid-template:"mktpl-title mktpl-search mktpl-meta" 60px "mktpl-tabs mktpl-tabs mktpl-tabs" auto/1fr 320px 36px;padding:0 32px;width:100%}@media(width <= 769px){.woocommerce-marketplace__header{border-bottom:0;grid-template:"mktpl-title mktpl-meta" 60px "mktpl-tabs mktpl-tabs" 48px "mktpl-search mktpl-search" auto/auto 48px;padding:0}}.woocommerce-marketplace__header .woocommerce-marketplace__header-title{font-size:14px;font-weight:600;margin:0;padding:10px 0 0}@media(width <= 769px){.woocommerce-marketplace__header .woocommerce-marketplace__header-title{padding-left:var(--large-gap)}}.woocommerce-marketplace__header-title{-ms-grid-row:1;-ms-grid-column:1;align-items:center;align-self:stretch;display:flex;grid-area:mktpl-title;line-height:18px}@media(width <= 769px){.woocommerce-marketplace__header-title{padding:0 16px}}.woocommerce-marketplace__header-meta{-ms-grid-row:1;-ms-grid-column:3;grid-area:mktpl-meta;justify-self:end;padding-top:10px}@media(width <= 769px){.woocommerce-marketplace__header-meta{margin-right:16px;padding:0}}.woocommerce-marketplace__header-tabs{-ms-grid-row:2;-ms-grid-column:1;-ms-grid-column-span:3;align-self:end;grid-area:mktpl-tabs}@media (width <= 769px){.woocommerce-marketplace__header-title{-ms-grid-row:1;-ms-grid-column:1}.woocommerce-marketplace__header-meta{-ms-grid-row:1;-ms-grid-column:2}.woocommerce-marketplace__header-tabs{-ms-grid-row:2;-ms-grid-column:1;-ms-grid-column-span:2;padding:0 16px}}.woocommerce-marketplace__search{margin-right:16px;margin-top:10px}@media(width <= 769px){.woocommerce-marketplace__search{margin:16px}}.woocommerce-marketplace__menu-item span{white-space:normal}.woocommerce-marketplace__menu-avatar-image{border-radius:50%;height:24px;width:24px}.woocommerce-marketplace__menu-icon{flex-shrink:0;margin-right:8px}.woocommerce-marketplace__menu-text{display:flex;flex-direction:column}.woocommerce-marketplace__sub-text{color:#757575;font-size:12px}.woocommerce-marketplace__header-account-modal__header-account-modal-text{margin-bottom:8px}.woocommerce-marketplace__header-account-modal-overlay{z-index:1000000}.woocommerce-marketplace__header-account-modal-button-group{display:inline-flex;gap:8px;justify-content:flex-end;margin-top:24px;width:100%}.woocommerce-marketplace__header-account-modal-button-group .woocommerce-marketplace__header-account-modal-button,.woocommerce-marketplace__header-account-modal-button-group .woocommerce-marketplace__header-account-modal-button.is-primary{border-radius:2px;box-shadow:none}@media screen and (min-width:600px){.woocommerce-marketplace__header-account-modal{max-width:350px}}.woocommerce-marketplace__tabs{box-sizing:content-box;display:flex;gap:24px;overflow-y:auto}.woocommerce-marketplace__tab-button{border-bottom:1.5px solid transparent;border-radius:0;color:#1a1a1a;font-size:13px;font-style:normal;font-weight:600;height:48px;line-height:16px;padding:0;white-space:nowrap}.woocommerce-marketplace__tab-button:focus:not(:disabled){box-shadow:none}.woocommerce-marketplace__tab-button.is-active{border-color:var(--wp-admin-theme-color)}@media(width <= 769px){.woocommerce-marketplace__tabs{border-bottom:1px solid #ddd}}.woocommerce-marketplace__search{grid-area:mktpl-search;background:#f6f7f7;border:1.5px solid transparent;border-radius:2px;display:flex;height:40px;padding:4px 8px 4px 12px}.woocommerce-marketplace__search input[type=search]{all:unset;flex-grow:1}.woocommerce-marketplace__search:focus-within{background:#fff;border-color:var(--wp-admin-theme-color,#3858e9)}@media(width <= 769px){.woocommerce-marketplace__search{margin:16px 16px 8px}}.woocommerce-marketplace__search-button{all:unset;cursor:pointer}.woocommerce-marketplace__content{box-sizing:content-box;margin:auto;max-width:1600px;padding:24px 16px}@media screen and (min-width:769px){.woocommerce-marketplace__content{padding:48px 32px}}.woocommerce-marketplace__product-list-content{display:grid;gap:16px;margin-top:16px}.woocommerce-marketplace__extension-card{background-color:#3c3c3c;color:#fff;height:270px}@media screen and (min-width:769px){.woocommerce-marketplace__product-list-content{gap:24px;grid-template-columns:repeat(2,1fr)}.woocommerce-marketplace__discover .woocommerce-marketplace__product-card:nth-child(n+3){display:none}}@media screen and (min-width:1024px){.woocommerce-marketplace__product-list-content{gap:24px;grid-template-columns:repeat(3,1fr)}.woocommerce-marketplace__discover .woocommerce-marketplace__product-card:nth-child(3){display:block}}@media screen and (min-width:1920px){.woocommerce-marketplace__product-list-content{grid-template-columns:repeat(4,1fr)}.woocommerce-marketplace__discover .woocommerce-marketplace__product-card:nth-child(4){display:block}}.woocommerce-marketplace__product-card{padding:24px;border-radius:4px!important}.woocommerce-marketplace__product-card.is-loading{overflow:hidden;pointer-events:none}.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__content{overflow:hidden}.woocommerce-marketplace__product-card.is-loading.woocommerce-marketplace__product-card--extension .woocommerce-marketplace__product-card__title,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__description,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__price{width:100vw}.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__description,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__icon,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__image,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__price,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__title,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__vendor{background:#f0f0f0}.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__description,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__price,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__vendor{height:19.5px}.woocommerce-marketplace__product-card.is-loading.woocommerce-marketplace__product-card--extension .woocommerce-marketplace__product-card__title{height:48px}.woocommerce-marketplace__product-card.is-loading.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__title{height:24px}.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__price,.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__vendor{width:8em}.woocommerce-marketplace__product-card.is-loading.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__price{margin-top:22px}.woocommerce-marketplace__product-card.is-loading .woocommerce-marketplace__product-card__description{height:58.5px}.woocommerce-marketplace__product-card:hover{outline:1.5px solid var(--wp-admin-theme-color)}.woocommerce-marketplace__product-card__content{display:grid;align-items:flex-start;gap:16px;justify-content:space-between;height:100%;grid-template-rows:auto 1fr 20px}.woocommerce-marketplace__product-card__header{align-self:stretch}.woocommerce-marketplace__product-card__icon{width:48px;height:48px;flex-shrink:0;border-radius:8px}.woocommerce-marketplace__product-card__details{display:flex;justify-content:flex-start;align-items:flex-start;gap:16px;background:#fff}.woocommerce-marketplace__product-card__meta{display:flex;flex-direction:column;gap:2px;color:#1a1a1a}.woocommerce-marketplace__product-card__title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;color:#1a1a1a;font-size:16px;font-style:normal;font-weight:600;line-height:24px;margin:-4px 0 0;padding:0;overflow:hidden;text-overflow:ellipsis}.woocommerce-marketplace__product-card__link,.woocommerce-marketplace__product-card__link:active,.woocommerce-marketplace__product-card__link:hover{color:#1a1a1a;text-decoration:none}.woocommerce-marketplace__product-card__link:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0}.woocommerce-marketplace__product-card__vendor{display:flex;gap:4px;margin:0;padding:0;position:relative}.woocommerce-marketplace__product-card__vendor a{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;text-decoration:none}.woocommerce-marketplace__product-card__description{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;margin:0;overflow:hidden;text-overflow:ellipsis}.woocommerce-marketplace__product-card__price{align-items:flex-end;gap:4px;align-self:stretch;text-decoration:none!important;color:#1a1a1a!important;font-style:normal;font-weight:500;line-height:16px}.woocommerce-marketplace__product-card__price-billing{color:#949494;font-size:13px;font-style:normal;font-weight:400;line-height:16px}.woocommerce-marketplace__product-card.woocommerce-marketplace__product-card--theme{padding:0;overflow:hidden}.woocommerce-marketplace__product-card.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__content{grid-template-rows:auto 1fr auto;grid-template-columns:2fr 1fr}.woocommerce-marketplace__product-card.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__image{border-bottom:1px solid #e0e0e0;grid-column-start:span 2;overflow:hidden;padding-top:75%;position:relative}.woocommerce-marketplace__product-card.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__image-inner{width:100%;position:absolute;top:0;left:0;bottom:0;right:0}.woocommerce-marketplace__product-card.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__header{padding-left:16px}.woocommerce-marketplace__product-card.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__price{margin-right:16px;text-align:right;display:inline-flex;align-items:flex-end}.woocommerce-marketplace__product-card.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__price-label{margin-left:auto;line-height:1.5}.woocommerce-marketplace__product-card.woocommerce-marketplace__product-card--theme .woocommerce-marketplace__product-card__price-billing{line-height:1.5}@media screen and (min-width:769px){.woocommerce-marketplace__product-card{margin-top:0}}.woocommerce-marketplace__product-list-header{display:flex;justify-content:center;gap:16px;align-self:stretch}.woocommerce-marketplace__product-list-title{flex:1 0 0;font-size:20px;font-style:normal;font-weight:500;margin-bottom:16px;margin-top:8px}.woocommerce-marketplace__product-list-title.is-loading{background:#f0f0f0;height:26px;margin:0;width:min(100%,12em)}.woocommerce-marketplace__product-list-title--extensions,.woocommerce-marketplace__product-list-title--themes{margin-bottom:0}.woocommerce-marketplace__product-list-link{display:flex;justify-content:center;align-items:center;gap:12px}.woocommerce-marketplace__product-list-link a{display:flex;justify-content:center;align-items:center;text-decoration:none}.woocommerce-marketplace__discover{display:flex;flex-direction:column;align-items:stretch;gap:40px}.woocommerce-marketplace__search-extensions,.woocommerce-marketplace__search-themes{margin-bottom:48px}.woocommerce-marketplace__view-all-button{margin-top:24px}.woocommerce-marketplace__category-selector{display:flex;align-items:stretch;margin:16px 0 0}.woocommerce-marketplace__category-item{cursor:pointer}.woocommerce-marketplace__category-item .components-dropdown{height:100%}.woocommerce-marketplace__category-item-button{display:flex;align-items:center;cursor:pointer;border:none;border-radius:2px;color:#50575e;background-color:#f6f7f7;padding:6px 8px;margin-right:8px;line-height:20px;height:100%}.woocommerce-marketplace__category-item-button--selected{color:#fff;background-color:#1a1a1a;fill:#fff}.woocommerce-marketplace__category-item-button.is-loading{animation:loading-fade 1.6s ease-in-out infinite;background:#f0f0f0;height:32px;pointer-events:none;width:6em}.woocommerce-marketplace__category-item-content .components-popover__content{min-width:200px}.woocommerce-marketplace__category-selector--full-width{display:none;margin-top:12px}@media screen and (max-width:782px){.woocommerce-marketplace__category-selector--full-width{display:flex}.woocommerce-marketplace__category-selector{display:none}}.woocommerce-marketplace__category-dropdown{width:100%}.woocommerce-marketplace__category-dropdown-button{display:flex;align-items:center;justify-content:space-between;cursor:pointer;border:1px solid #949494;border-radius:2px;background-color:#fff;width:100%;font-size:13px;line-height:20px;padding:12px 8px;text-align:left}.woocommerce-marketplace__category-dropdown-content{background-color:#fff;color:#1a1a1a;font-size:13px;min-width:280px;width:calc(100% - 32px)}.woocommerce-marketplace__category-dropdown-content .components-popover__content{width:100%}.woocommerce-marketplace__category-dropdown-list{margin:0;line-height:20px}.woocommerce-marketplace__category-dropdown-item{border-radius:2px}.woocommerce-marketplace__category-dropdown-item:hover{background-color:#f6f7f7}.woocommerce-marketplace__category-dropdown-item-button{border:none;cursor:pointer;background-color:inherit;color:#1a1a1a;text-align:left;padding:6px 8px;line-height:20px;width:100%}.woocommerce-marketplace__category-dropdown-item-button--selected{color:#fff;background-color:#1a1a1a}.woocommerce-marketplace__no-results__content{border:1px solid #f6f7f7;padding:64px 32px;display:flex;flex-direction:column;align-items:center;margin-top:24px}.woocommerce-marketplace__no-results__product-group{margin-top:48px}.woocommerce-marketplace__no-results__product-group .woocommerce-marketplace__product-list-title{font-size:16px;font-weight:600}.woocommerce-marketplace__no-results__icon{height:80px}.woocommerce-marketplace__no-results__description{text-align:center;font-size:13px;max-width:52ch}.woocommerce-marketplace__no-results__description p{color:#757575}.woocommerce-marketplace__no-results__description--bold{font-weight:600;font-size:16px}.woocommerce-marketplace__search-results .woocommerce-marketplace__view-all-button{margin-top:24px}.woocommerce-marketplace__search-results .woocommerce-marketplace__product-list-content--collapsed .woocommerce-marketplace__product-card:nth-child(n+7){display:none}@media screen and (min-width:1920px){.woocommerce-marketplace__search-results .woocommerce-marketplace__product-list-content--collapsed .woocommerce-marketplace__product-card:nth-child(n+7){display:block}}.woocommerce-marketplace__footer{background:#f6f7f7;border-top:1px solid #e0e0e0;margin:auto;padding:48px 16px}.woocommerce-marketplace__footer a{text-decoration:none}.woocommerce-marketplace__footer-content{box-sizing:content-box;max-width:1600px;margin:auto;width:100%}.woocommerce-marketplace__footer-title{color:#1a1a1a;font-size:20px;font-style:normal;font-weight:500;line-height:28px;max-width:389px;margin:0 0 32px}.woocommerce-marketplace__footer-columns{display:flex;flex-direction:column;gap:24px}.woocommerce-marketplace__footer-logo{color:#646970;display:flex;font-size:14px;font-weight:600;line-height:20px;gap:8px;margin:48px 0 0}@media screen and (min-width:769px){.woocommerce-marketplace__footer{padding:48px 32px}.woocommerce-marketplace__footer-columns{flex-direction:row}}.woocommerce-marketplace__icon-group{flex:1;max-width:382px}.woocommerce-marketplace__icon-group-headline{display:flex;gap:8px}.woocommerce-marketplace__icon-group-title{color:#101517;font-size:14px;font-weight:600;line-height:20px;margin:0 0 8px}.woocommerce-marketplace__icon-group-description{color:#646970;font-size:13px;font-weight:400;line-height:20px;margin:0}.woocommerce-marketplace__feedback-modal{max-width:666px}.woocommerce-marketplace__feedback-modal-buttons{display:flex;justify-content:flex-end;gap:8px}:root{--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,161;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}body.admin-color-light{--wp-admin-theme-color:#0085ba;--wp-admin-theme-color--rgb:0,133,186;--wp-admin-theme-color-darker-10:#0073a1;--wp-admin-theme-color-darker-10--rgb:0,115,161;--wp-admin-theme-color-darker-20:#006187;--wp-admin-theme-color-darker-20--rgb:0,97,135;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-light{--wp-admin-border-width-focus:1.5px}}body.admin-color-modern{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-modern{--wp-admin-border-width-focus:1.5px}}body.admin-color-blue{--wp-admin-theme-color:#096484;--wp-admin-theme-color--rgb:9,100,132;--wp-admin-theme-color-darker-10:#07526c;--wp-admin-theme-color-darker-10--rgb:7,82,108;--wp-admin-theme-color-darker-20:#064054;--wp-admin-theme-color-darker-20--rgb:6,64,84;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-blue{--wp-admin-border-width-focus:1.5px}}body.admin-color-coffee{--wp-admin-theme-color:#46403c;--wp-admin-theme-color--rgb:70,64,60;--wp-admin-theme-color-darker-10:#383330;--wp-admin-theme-color-darker-10--rgb:56,51,48;--wp-admin-theme-color-darker-20:#2b2724;--wp-admin-theme-color-darker-20--rgb:43,39,36;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-coffee{--wp-admin-border-width-focus:1.5px}}body.admin-color-ectoplasm{--wp-admin-theme-color:#523f6d;--wp-admin-theme-color--rgb:82,63,109;--wp-admin-theme-color-darker-10:#46365d;--wp-admin-theme-color-darker-10--rgb:70,54,93;--wp-admin-theme-color-darker-20:#3a2c4d;--wp-admin-theme-color-darker-20--rgb:58,44,77;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ectoplasm{--wp-admin-border-width-focus:1.5px}}body.admin-color-midnight{--wp-admin-theme-color:#e14d43;--wp-admin-theme-color--rgb:225,77,67;--wp-admin-theme-color-darker-10:#dd382d;--wp-admin-theme-color-darker-10--rgb:221,56,45;--wp-admin-theme-color-darker-20:#d02c21;--wp-admin-theme-color-darker-20--rgb:208,44,33;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-midnight{--wp-admin-border-width-focus:1.5px}}body.admin-color-ocean{--wp-admin-theme-color:#627c83;--wp-admin-theme-color--rgb:98,124,131;--wp-admin-theme-color-darker-10:#576e74;--wp-admin-theme-color-darker-10--rgb:87,110,116;--wp-admin-theme-color-darker-20:#4c6066;--wp-admin-theme-color-darker-20--rgb:76,96,102;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-ocean{--wp-admin-border-width-focus:1.5px}}body.admin-color-sunrise{--wp-admin-theme-color:#dd823b;--wp-admin-theme-color--rgb:221,130,59;--wp-admin-theme-color-darker-10:#d97426;--wp-admin-theme-color-darker-10--rgb:217,116,38;--wp-admin-theme-color-darker-20:#c36922;--wp-admin-theme-color-darker-20--rgb:195,105,34;--wp-admin-border-width-focus:2px}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){body.admin-color-sunrise{--wp-admin-border-width-focus:1.5px}}.woocommerce-marketplace__likert-scale{display:flex;list-style:none;margin:0;border:2px solid transparent}.woocommerce-marketplace__likert-scale.validation-failed{border-color:#d94f4f}.woocommerce-marketplace__likert-scale-item{margin:0;width:100%;font-size:11px}.woocommerce-marketplace__likert-scale-item label{align-items:center;aspect-ratio:91.6/48;border:1.5px solid transparent;box-sizing:border-box;display:flex;flex-direction:column;gap:8px;justify-content:center;padding:16px 8px;text-align:center}.woocommerce-marketplace__likert-scale-item input:checked+label{border-color:var(--wp-admin-theme-color-darker-10);background:#e6f1f5}.woocommerce-marketplace__likert-scale-item input:focus{margin-top:-99px}.woocommerce-marketplace__likert-scale-item input:focus+label{outline:2px solid var(--wp-admin-theme-color);outline-offset:2px}.woocommerce-marketplace__likert-scale-icon{font-size:24px}.woocommerce-marketplace__likert-scale-text{font-size:11px}
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/activity-panels-help.js b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/activity-panels-help.js
index a3cb4cd7..f0a020bd 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/activity-panels-help.js
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/activity-panels-help.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunk_wcAdmin_webpackJsonp=globalThis.webpackChunk_wcAdmin_webpackJsonp||[]).push([[6732],{15482:(e,t,o)=>{o.d(t,{Z:()=>l});var c=o(69307),m=o(83849),n=o.n(m),r=o(7862),i=o.n(r),u=o(14812),a=o(86020);class s extends c.Component{render(){const{className:e,menu:t,subtitle:o,title:m,unreadMessages:r}=this.props,i=n()({"woocommerce-layout__inbox-panel-header":o,"woocommerce-layout__activity-panel-header":!o},e),a=r||0;return(0,c.createElement)("div",{className:i},(0,c.createElement)("div",{className:"woocommerce-layout__inbox-title"},(0,c.createElement)(u.Text,{size:16,weight:600,color:"#23282d"},m),(0,c.createElement)(u.Text,{variant:"button",weight:"600",size:"14",lineHeight:"20px"},a>0&&(0,c.createElement)("span",{className:"woocommerce-layout__inbox-badge"},r))),(0,c.createElement)("div",{className:"woocommerce-layout__inbox-subtitle"},o&&(0,c.createElement)(u.Text,{variant:"body.small",size:"14",lineHeight:"20px"},o)),t&&(0,c.createElement)("div",{className:"woocommerce-layout__activity-panel-header-menu"},t))}}s.propTypes={className:i().string,unreadMessages:i().number,title:i().string.isRequired,subtitle:i().string,menu:i().shape({type:i().oneOf([a.EllipsisMenu])})};const l=s},37015:(e,t,o)=>{o.r(t),o.d(t,{HelpPanel:()=>f,SETUP_TASK_HELP_ITEMS_FILTER:()=>k,default:()=>S});var c=o(69307),m=o(65736),n=o(14812),r=o(9818),i=o(92694),u=o(23374),a=o(89015),s=o(83619),l=o(92819),p=o(86020),_=o(67221),d=o(82422),h=o(14599),w=o(15482),g=o(82580);const k="woocommerce_admin_setup_task_help_items";function y(e,t){const{taskName:o}=e;t&&e.recordEvent("help_panel_click",{task_name:o||"homescreen",link:t.currentTarget.href})}const f=e=>{const{taskName:t}=e;(0,c.useEffect)((()=>{e.recordEvent("help_panel_open",{task_name:t||"homescreen"})}),[t]);const o=function(e){const t=function(e){const{taskName:t}=e;switch(t){case"products":return[{title:(0,m.__)("Adding and Managing Products","woocommerce"),link:"https://woo.com/document/managing-products/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("Import products using the CSV Importer and Exporter","woocommerce"),link:"https://woo.com/document/product-csv-importer-exporter/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("Migrate products using Cart2Cart","woocommerce"),link:"https://woo.com/products/cart2cart/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("Learn more about setting up products","woocommerce"),link:"https://woo.com/documentation/plugins/woocommerce/getting-started/setup-products/?utm_source=help_panel&utm_medium=product"}];case"appearance":return[{title:(0,m.__)("Showcase your products and tailor your shopping experience using Blocks","woocommerce"),link:"https://woo.com/document/woocommerce-blocks/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("Manage Store Notice, Catalog View and Product Images","woocommerce"),link:"https://woo.com/document/woocommerce-customizer/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("How to choose and change a theme","woocommerce"),link:"https://woo.com/document/choose-change-theme/?utm_source=help_panel&utm_medium=product"}];case"shipping":return function(e){let{activePlugins:t,countryCode:o}=e;const c="US"===o&&!t.includes("woocommerce-services");return[{title:(0,m.__)("Setting up Shipping Zones","woocommerce"),link:"https://woo.com/document/setting-up-shipping-zones/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("Core Shipping Options","woocommerce"),link:"https://woo.com/documentation/plugins/woocommerce/getting-started/shipping/core-shipping-options/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("Product Shipping Classes","woocommerce"),link:"https://woo.com/document/product-shipping-classes/?utm_source=help_panel&utm_medium=product"},c&&{title:(0,m.__)("WooCommerce Shipping setup and configuration","woocommerce"),link:"https://woo.com/document/woocommerce-shipping-and-tax/?utm_source=help_panel&utm_medium=product#section-3"},{title:(0,m.__)("Learn more about configuring your shipping settings","woocommerce"),link:"https://woo.com/document/plugins/woocommerce/getting-started/shipping/?utm_source=help_panel&utm_medium=product"}].filter(Boolean)}(e);case"tax":return function(e){const{countryCode:t,taskLists:o}=e,c=o.reduce(((e,t)=>[...e,...t.tasks]),[]).find((e=>"tax"===e.id));if(!c)return;const{additionalData:n}=c,{woocommerceTaxCountries:r=[],taxJarActivated:i}=n,u=!i&&r.includes(t);return[{title:(0,m.__)("Setting up Taxes in WooCommerce","woocommerce"),link:"https://woo.com/document/setting-up-taxes-in-woocommerce/?utm_source=help_panel&utm_medium=product"},u&&{title:(0,m.__)("Automated Tax calculation using WooCommerce Tax","woocommerce"),link:"https://woo.com/document/woocommerce-services/?utm_source=help_panel&utm_medium=product#section-10"}].filter(Boolean)}(e);case"payments":return function(e){const{paymentGatewaySuggestions:t}=e;return[{title:(0,m.__)("Which Payment Option is Right for Me?","woocommerce"),link:"https://woo.com/document/premium-payment-gateway-extensions/?utm_source=help_panel&utm_medium=product"},t.woocommerce_payments&&{title:(0,m.__)("WooPayments Start Up Guide","woocommerce"),link:"https://woo.com/document/payments/?utm_source=help_panel&utm_medium=product"},t.woocommerce_payments&&{title:(0,m.__)("WooPayments FAQs","woocommerce"),link:"https://woo.com/documentation/woocommerce-payments/woocommerce-payments-faqs/?utm_source=help_panel&utm_medium=product"},t.stripe&&{title:(0,m.__)("Stripe Setup and Configuration","woocommerce"),link:"https://woo.com/document/stripe/?utm_source=help_panel&utm_medium=product"},t["ppcp-gateway"]&&{title:(0,m.__)("PayPal Checkout Setup and Configuration","woocommerce"),link:"https://woo.com/document/2-0/woocommerce-paypal-payments/?utm_medium=product#section-3"},t.square_credit_card&&{title:(0,m.__)("Square - Get started","woocommerce"),link:"https://woo.com/document/woocommerce-square/?utm_source=help_panel&utm_medium=product"},t.kco&&{title:(0,m.__)("Klarna - Introduction","woocommerce"),link:"https://woo.com/document/klarna-checkout/?utm_source=help_panel&utm_medium=product"},t.klarna_payments&&{title:(0,m.__)("Klarna - Introduction","woocommerce"),link:"https://woo.com/document/klarna-payments/?utm_source=help_panel&utm_medium=product"},t.payfast&&{title:(0,m.__)("Payfast Setup and Configuration","woocommerce"),link:"https://woo.com/document/payfast-payment-gateway/?utm_source=help_panel&utm_medium=product"},t.eway&&{title:(0,m.__)("Eway Setup and Configuration","woocommerce"),link:"https://woo.com/document/eway/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("Direct Bank Transfer (BACS)","woocommerce"),link:"https://woo.com/document/bacs/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("Cash on Delivery","woocommerce"),link:"https://woo.com/document/cash-on-delivery/?utm_source=help_panel&utm_medium=product"}].filter(Boolean)}(e);case"marketing":return function(e){const{activePlugins:t}=e;return[t.includes("mailpoet")&&{title:(0,m.__)("Get started with Mailpoet","woocommerce"),link:"https://kb.mailpoet.com/category/114-getting-started"},t.includes("google-listings-and-ads")&&{title:(0,m.__)("Set up Google Listing & Ads","woocommerce"),link:"https://woo.com/document/google-listings-and-ads/?utm_medium=product#get-started"},t.includes("pinterest-for-woocommerce")&&{title:(0,m.__)("Set up Pinterest for WooCommerce","woocommerce"),link:"https://woo.com/products/pinterest-for-woocommerce/"},t.includes("mailchimp-for-woocommerce")&&{title:(0,m.__)("Connect Mailchimp for WooCommerce","woocommerce"),link:"https://mailchimp.com/help/connect-or-disconnect-mailchimp-for-woocommerce/"},t.includes("creative-mail-by-constant-contact")&&{title:(0,m.__)("Set up Creative Mail for WooCommerce","woocommerce"),link:"https://app.creativemail.com/kb/help/WooCommerce"}].filter(Boolean)}(e);default:return[{title:(0,m.__)("Get Support","woocommerce"),link:"https://woo.com/my-account/create-a-ticket/?utm_medium=product"},{title:(0,m.__)("Home Screen","woocommerce"),link:"https://woo.com/document/home-screen/?utm_medium=product"},{title:(0,m.__)("Inbox","woocommerce"),link:"https://woo.com/document/home-screen/?utm_medium=product#section-4"},{title:(0,m.__)("Stats Overview","woocommerce"),link:"https://woo.com/document/home-screen/?utm_medium=product#section-5"},{title:(0,m.__)("Store Management","woocommerce"),link:"https://woo.com/document/home-screen/?utm_medium=product#section-10"},{title:(0,m.__)("Store Setup Checklist","woocommerce"),link:"https://woo.com/document/woocommerce-setup-wizard?utm_medium=product#store-setup-checklist"}]}}(e),o={title:(0,m.__)("WooCommerce Docs","woocommerce"),link:"https://woo.com/documentation/?utm_source=help_panel&utm_medium=product"};t.push(o);const r=(0,i.applyFilters)(k,t,e.taskName,e);let p=Array.isArray(r)?r.filter((e=>e instanceof Object&&e.title&&e.link)):[];p.length||(p=[o]);const _=(0,l.partial)(y,e);return p.map((e=>{var t,o;return{title:(0,c.createElement)(n.Text,{as:"div",variant:"button",weight:"600",size:"14",lineHeight:"20px"},e.title),before:(0,c.createElement)(u.Z,{icon:a.Z}),after:(0,c.createElement)(u.Z,{icon:s.Z}),linkType:null!==(t=e.linkType)&&void 0!==t?t:"external",target:null!==(o=e.target)&&void 0!==o?o:"_blank",href:e.link,onClick:_}}))}(e);return(0,c.createElement)(c.Fragment,null,(0,c.createElement)(w.Z,{title:(0,m.__)("Documentation","woocommerce")}),(0,c.createElement)(p.Section,null,(0,c.createElement)(p.List,{items:o,className:"woocommerce-quick-links__list"})))};f.defaultProps={recordEvent:h.recordEvent};const S=(0,d.qC)((0,r.withSelect)((e=>{const{getSettings:t}=e(_.SETTINGS_STORE_NAME),{getActivePlugins:o}=e(_.PLUGINS_STORE_NAME),{general:c={}}=t("general"),m=o(),n=e(_.ONBOARDING_STORE_NAME).getPaymentGatewaySuggestions().reduce(((e,t)=>{const{id:o}=t;return e[o]=!0,e}),{}),r=e(_.ONBOARDING_STORE_NAME).getTaskLists();return{activePlugins:m,countryCode:(0,g.so)(c.woocommerce_default_country),paymentGatewaySuggestions:n,taskLists:r}})))(f)}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunk_wcAdmin_webpackJsonp=globalThis.webpackChunk_wcAdmin_webpackJsonp||[]).push([[6732],{15482:(e,o,t)=>{t.d(o,{Z:()=>l});var c=t(69307),m=t(83849),n=t.n(m),r=t(7862),i=t.n(r),u=t(14812),a=t(86020);class s extends c.Component{render(){const{className:e,menu:o,subtitle:t,title:m,unreadMessages:r}=this.props,i=n()({"woocommerce-layout__inbox-panel-header":t,"woocommerce-layout__activity-panel-header":!t},e),a=r||0;return(0,c.createElement)("div",{className:i},(0,c.createElement)("div",{className:"woocommerce-layout__inbox-title"},(0,c.createElement)(u.Text,{size:16,weight:600,color:"#23282d"},m),(0,c.createElement)(u.Text,{variant:"button",weight:"600",size:"14",lineHeight:"20px"},a>0&&(0,c.createElement)("span",{className:"woocommerce-layout__inbox-badge"},r))),(0,c.createElement)("div",{className:"woocommerce-layout__inbox-subtitle"},t&&(0,c.createElement)(u.Text,{variant:"body.small",size:"14",lineHeight:"20px"},t)),o&&(0,c.createElement)("div",{className:"woocommerce-layout__activity-panel-header-menu"},o))}}s.propTypes={className:i().string,unreadMessages:i().number,title:i().string.isRequired,subtitle:i().string,menu:i().shape({type:i().oneOf([a.EllipsisMenu])})};const l=s},37015:(e,o,t)=>{t.r(o),t.d(o,{HelpPanel:()=>f,SETUP_TASK_HELP_ITEMS_FILTER:()=>k,default:()=>S});var c=t(69307),m=t(65736),n=t(14812),r=t(9818),i=t(92694),u=t(23374),a=t(89015),s=t(83619),l=t(92819),p=t(86020),_=t(67221),d=t(82422),h=t(14599),w=t(15482),g=t(82580);const k="woocommerce_admin_setup_task_help_items";function y(e,o){const{taskName:t}=e;o&&e.recordEvent("help_panel_click",{task_name:t||"homescreen",link:o.currentTarget.href})}const f=e=>{const{taskName:o}=e;(0,c.useEffect)((()=>{e.recordEvent("help_panel_open",{task_name:o||"homescreen"})}),[o]);const t=function(e){const o=function(e){const{taskName:o}=e;switch(o){case"products":return[{title:(0,m.__)("Adding and Managing Products","woocommerce"),link:"https://woocommerce.com/document/managing-products/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("Import products using the CSV Importer and Exporter","woocommerce"),link:"https://woocommerce.com/document/product-csv-importer-exporter/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("Migrate products using Cart2Cart","woocommerce"),link:"https://woocommerce.com/products/cart2cart/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("Learn more about setting up products","woocommerce"),link:"https://woocommerce.com/documentation/plugins/woocommerce/getting-started/setup-products/?utm_source=help_panel&utm_medium=product"}];case"appearance":return[{title:(0,m.__)("Showcase your products and tailor your shopping experience using Blocks","woocommerce"),link:"https://woocommerce.com/document/woocommerce-blocks/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("Manage Store Notice, Catalog View and Product Images","woocommerce"),link:"https://woocommerce.com/document/woocommerce-customizer/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("How to choose and change a theme","woocommerce"),link:"https://woocommerce.com/document/choose-change-theme/?utm_source=help_panel&utm_medium=product"}];case"shipping":return function(e){let{activePlugins:o,countryCode:t}=e;const c="US"===t&&!o.includes("woocommerce-services");return[{title:(0,m.__)("Setting up Shipping Zones","woocommerce"),link:"https://woocommerce.com/document/setting-up-shipping-zones/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("Core Shipping Options","woocommerce"),link:"https://woocommerce.com/documentation/plugins/woocommerce/getting-started/shipping/core-shipping-options/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("Product Shipping Classes","woocommerce"),link:"https://woocommerce.com/document/product-shipping-classes/?utm_source=help_panel&utm_medium=product"},c&&{title:(0,m.__)("WooCommerce Shipping setup and configuration","woocommerce"),link:"https://woocommerce.com/document/woocommerce-shipping-and-tax/?utm_source=help_panel&utm_medium=product#section-3"},{title:(0,m.__)("Learn more about configuring your shipping settings","woocommerce"),link:"https://woocommerce.com/document/plugins/woocommerce/getting-started/shipping/?utm_source=help_panel&utm_medium=product"}].filter(Boolean)}(e);case"tax":return function(e){const{countryCode:o,taskLists:t}=e,c=t.reduce(((e,o)=>[...e,...o.tasks]),[]).find((e=>"tax"===e.id));if(!c)return;const{additionalData:n}=c,{woocommerceTaxCountries:r=[],taxJarActivated:i}=n,u=!i&&r.includes(o);return[{title:(0,m.__)("Setting up Taxes in WooCommerce","woocommerce"),link:"https://woocommerce.com/document/setting-up-taxes-in-woocommerce/?utm_source=help_panel&utm_medium=product"},u&&{title:(0,m.__)("Automated Tax calculation using WooCommerce Tax","woocommerce"),link:"https://woocommerce.com/document/woocommerce-services/?utm_source=help_panel&utm_medium=product#section-10"}].filter(Boolean)}(e);case"payments":return function(e){const{paymentGatewaySuggestions:o}=e;return[{title:(0,m.__)("Which Payment Option is Right for Me?","woocommerce"),link:"https://woocommerce.com/document/premium-payment-gateway-extensions/?utm_source=help_panel&utm_medium=product"},o.woocommerce_payments&&{title:(0,m.__)("WooPayments Start Up Guide","woocommerce"),link:"https://woocommerce.com/document/payments/?utm_source=help_panel&utm_medium=product"},o.woocommerce_payments&&{title:(0,m.__)("WooPayments FAQs","woocommerce"),link:"https://woocommerce.com/documentation/woocommerce-payments/woocommerce-payments-faqs/?utm_source=help_panel&utm_medium=product"},o.stripe&&{title:(0,m.__)("Stripe Setup and Configuration","woocommerce"),link:"https://woocommerce.com/document/stripe/?utm_source=help_panel&utm_medium=product"},o["ppcp-gateway"]&&{title:(0,m.__)("PayPal Checkout Setup and Configuration","woocommerce"),link:"https://woocommerce.com/document/2-0/woocommerce-paypal-payments/?utm_medium=product#section-3"},o.square_credit_card&&{title:(0,m.__)("Square - Get started","woocommerce"),link:"https://woocommerce.com/document/woocommerce-square/?utm_source=help_panel&utm_medium=product"},o.kco&&{title:(0,m.__)("Klarna - Introduction","woocommerce"),link:"https://woocommerce.com/document/klarna-checkout/?utm_source=help_panel&utm_medium=product"},o.klarna_payments&&{title:(0,m.__)("Klarna - Introduction","woocommerce"),link:"https://woocommerce.com/document/klarna-payments/?utm_source=help_panel&utm_medium=product"},o.payfast&&{title:(0,m.__)("Payfast Setup and Configuration","woocommerce"),link:"https://woocommerce.com/document/payfast-payment-gateway/?utm_source=help_panel&utm_medium=product"},o.eway&&{title:(0,m.__)("Eway Setup and Configuration","woocommerce"),link:"https://woocommerce.com/document/eway/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("Direct Bank Transfer (BACS)","woocommerce"),link:"https://woocommerce.com/document/bacs/?utm_source=help_panel&utm_medium=product"},{title:(0,m.__)("Cash on Delivery","woocommerce"),link:"https://woocommerce.com/document/cash-on-delivery/?utm_source=help_panel&utm_medium=product"}].filter(Boolean)}(e);case"marketing":return function(e){const{activePlugins:o}=e;return[o.includes("mailpoet")&&{title:(0,m.__)("Get started with Mailpoet","woocommerce"),link:"https://kb.mailpoet.com/category/114-getting-started"},o.includes("google-listings-and-ads")&&{title:(0,m.__)("Set up Google Listing & Ads","woocommerce"),link:"https://woocommerce.com/document/google-listings-and-ads/?utm_medium=product#get-started"},o.includes("pinterest-for-woocommerce")&&{title:(0,m.__)("Set up Pinterest for WooCommerce","woocommerce"),link:"https://woocommerce.com/products/pinterest-for-woocommerce/"},o.includes("mailchimp-for-woocommerce")&&{title:(0,m.__)("Connect Mailchimp for WooCommerce","woocommerce"),link:"https://mailchimp.com/help/connect-or-disconnect-mailchimp-for-woocommerce/"},o.includes("creative-mail-by-constant-contact")&&{title:(0,m.__)("Set up Creative Mail for WooCommerce","woocommerce"),link:"https://app.creativemail.com/kb/help/WooCommerce"}].filter(Boolean)}(e);default:return[{title:(0,m.__)("Get Support","woocommerce"),link:"https://woocommerce.com/my-account/create-a-ticket/?utm_medium=product"},{title:(0,m.__)("Home Screen","woocommerce"),link:"https://woocommerce.com/document/home-screen/?utm_medium=product"},{title:(0,m.__)("Inbox","woocommerce"),link:"https://woocommerce.com/document/home-screen/?utm_medium=product#section-4"},{title:(0,m.__)("Stats Overview","woocommerce"),link:"https://woocommerce.com/document/home-screen/?utm_medium=product#section-5"},{title:(0,m.__)("Store Management","woocommerce"),link:"https://woocommerce.com/document/home-screen/?utm_medium=product#section-10"},{title:(0,m.__)("Store Setup Checklist","woocommerce"),link:"https://woocommerce.com/document/woocommerce-setup-wizard?utm_medium=product#store-setup-checklist"}]}}(e),t={title:(0,m.__)("WooCommerce Docs","woocommerce"),link:"https://woocommerce.com/documentation/?utm_source=help_panel&utm_medium=product"};o.push(t);const r=(0,i.applyFilters)(k,o,e.taskName,e);let p=Array.isArray(r)?r.filter((e=>e instanceof Object&&e.title&&e.link)):[];p.length||(p=[t]);const _=(0,l.partial)(y,e);return p.map((e=>{var o,t;return{title:(0,c.createElement)(n.Text,{as:"div",variant:"button",weight:"600",size:"14",lineHeight:"20px"},e.title),before:(0,c.createElement)(u.Z,{icon:a.Z}),after:(0,c.createElement)(u.Z,{icon:s.Z}),linkType:null!==(o=e.linkType)&&void 0!==o?o:"external",target:null!==(t=e.target)&&void 0!==t?t:"_blank",href:e.link,onClick:_}}))}(e);return(0,c.createElement)(c.Fragment,null,(0,c.createElement)(w.Z,{title:(0,m.__)("Documentation","woocommerce")}),(0,c.createElement)(p.Section,null,(0,c.createElement)(p.List,{items:t,className:"woocommerce-quick-links__list"})))};f.defaultProps={recordEvent:h.recordEvent};const S=(0,d.qC)((0,r.withSelect)((e=>{const{getSettings:o}=e(_.SETTINGS_STORE_NAME),{getActivePlugins:t}=e(_.PLUGINS_STORE_NAME),{general:c={}}=o("general"),m=t(),n=e(_.ONBOARDING_STORE_NAME).getPaymentGatewaySuggestions().reduce(((e,o)=>{const{id:t}=o;return e[t]=!0,e}),{}),r=e(_.ONBOARDING_STORE_NAME).getTaskLists();return{activePlugins:m,countryCode:(0,g.so)(c.woocommerce_default_country),paymentGatewaySuggestions:n,taskLists:r}})))(f)}}]);
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/activity-panels-setup.js b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/activity-panels-setup.js
index e6b108d6..5efe0278 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/activity-panels-setup.js
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/activity-panels-setup.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunk_wcAdmin_webpackJsonp=globalThis.webpackChunk_wcAdmin_webpackJsonp||[]).push([[7844],{28029:(e,a,s)=>{s.r(a),s.d(a,{SetupTasksPanel:()=>n,default:()=>l});var c=s(69307),t=s(20929);const n=e=>{let{query:a}=e;return(0,c.createElement)("div",{className:"woocommerce-setup-panel"},(0,c.createElement)(t.TaskLists,{query:a}))},l=n}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunk_wcAdmin_webpackJsonp=globalThis.webpackChunk_wcAdmin_webpackJsonp||[]).push([[7844],{28029:(e,a,s)=>{s.r(a),s.d(a,{SetupTasksPanel:()=>n,default:()=>l});var c=s(69307),t=s(70123);const n=e=>{let{query:a}=e;return(0,c.createElement)("div",{className:"woocommerce-setup-panel"},(0,c.createElement)(t.TaskLists,{query:a}))},l=n}}]);
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/analytics-report-orders.js b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/analytics-report-orders.js
index a551c289..c0cf5a73 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/analytics-report-orders.js
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/analytics-report-orders.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunk_wcAdmin_webpackJsonp=globalThis.webpackChunk_wcAdmin_webpackJsonp||[]).push([[3576],{59205:(e,t,r)=>{r.d(t,{Z:()=>g});var o=r(69307),a=r(65736),s=r(94333),n=r(9818),l=r(7862),i=r.n(l),c=r(10431),u=r(86020),m=r(81595),d=r(67221),p=r(81921),_=r(14599),y=r(17844),h=r(65994);class b extends o.Component{formatVal(e,t){const{formatAmount:r,getCurrencyConfig:o}=this.context;return"currency"===t?r(e):(0,m.formatValue)(o(),t,e)}getValues(e,t){const{emptySearchResults:r,summaryData:o}=this.props,{totals:a}=o,s=a.primary?a.primary[e]:0,n=a.secondary?a.secondary[e]:0,l=r?0:s,i=r?0:n;return{delta:(0,m.calculateDelta)(l,i),prevValue:this.formatVal(i,t),value:this.formatVal(l,t)}}render(){const{charts:e,query:t,selectedChart:r,summaryData:s,endpoint:n,report:l,defaultDateRange:i}=this.props,{isError:m,isRequesting:d}=s;if(m)return(0,o.createElement)(h.Z,null);if(d)return(0,o.createElement)(u.SummaryListPlaceholder,{numberOfItems:e.length});const{compare:y}=(0,p.getDateParamsFromQuery)(t,i);return(0,o.createElement)(u.SummaryList,null,(t=>{let{onToggle:s}=t;return e.map((e=>{const{key:t,order:i,orderby:m,label:d,type:p,isReverseTrend:h,labelTooltipText:b}=e,g={chart:t};m&&(g.orderby=m),i&&(g.order=i);const f=(0,c.getNewPath)(g),w=r.key===t,{delta:v,prevValue:C,value:k}=this.getValues(t,p);return(0,o.createElement)(u.SummaryNumber,{key:t,delta:v,href:f,label:d,reverseTrend:h,prevLabel:"previous_period"===y?(0,a.__)("Previous period:","woocommerce"):(0,a.__)("Previous year:","woocommerce"),prevValue:C,selected:w,value:k,labelTooltipText:b,onLinkClickCallback:()=>{s&&s(),(0,_.recordEvent)("analytics_chart_tab_click",{report:l||n,key:t})}})}))}))}}b.propTypes={charts:i().array.isRequired,endpoint:i().string.isRequired,limitProperties:i().array,query:i().object.isRequired,selectedChart:i().shape({key:i().string.isRequired,label:i().string.isRequired,order:i().oneOf(["asc","desc"]),orderby:i().string,type:i().oneOf(["average","number","currency"]).isRequired}).isRequired,summaryData:i().object,report:i().string},b.defaultProps={summaryData:{totals:{primary:{},secondary:{}},isError:!1}},b.contextType=y.CurrencyContext;const g=(0,s.compose)((0,n.withSelect)(((e,t)=>{const{charts:r,endpoint:o,limitProperties:a,query:s,filters:n,advancedFilters:l}=t,i=a||[o],c=i.some((e=>s[e]&&s[e].length));if(s.search&&!c)return{emptySearchResults:!0};const u=r&&r.map((e=>e.key)),{woocommerce_default_date_range:m}=e(d.SETTINGS_STORE_NAME).getSetting("wc_admin","wcAdminSettings");return{summaryData:(0,d.getSummaryNumbers)({endpoint:o,query:s,select:e,limitBy:i,filters:n,advancedFilters:l,defaultDateRange:m,fields:u}),defaultDateRange:m}})))(b)},9033:(e,t,r)=>{r.r(t),r.d(t,{default:()=>k});var o=r(69307),a=r(7862),s=r.n(a),n=r(65736),l=r(67362),i=r(78851),c=r(92819),u=r(86020),m=r(81595),d=r(10431),p=r(81921),_=r(17844),y=r(95931),h=r(73463);class b extends o.Component{constructor(){super(),this.getHeadersContent=this.getHeadersContent.bind(this),this.getRowsContent=this.getRowsContent.bind(this),this.getSummary=this.getSummary.bind(this)}getHeadersContent(){return[{label:(0,n.__)("Date","woocommerce"),key:"date",required:!0,defaultSort:!0,isLeftAligned:!0,isSortable:!0},{label:(0,n.__)("Order #","woocommerce"),screenReaderLabel:(0,n.__)("Order Number","woocommerce"),key:"order_number",required:!0},{label:(0,n.__)("Status","woocommerce"),key:"status",required:!1,isSortable:!1},{label:(0,n.__)("Customer","woocommerce"),key:"customer_id",required:!1,isSortable:!1},{label:(0,n.__)("Customer type","woocommerce"),key:"customer_type",required:!1,isSortable:!1},{label:(0,n.__)("Product(s)","woocommerce"),screenReaderLabel:(0,n.__)("Products","woocommerce"),key:"products",required:!1,isSortable:!1},{label:(0,n.__)("Items sold","woocommerce"),key:"num_items_sold",required:!1,isSortable:!0,isNumeric:!0},{label:(0,n.__)("Coupon(s)","woocommerce"),screenReaderLabel:(0,n.__)("Coupons","woocommerce"),key:"coupons",required:!1,isSortable:!1},{label:(0,n.__)("Net sales","woocommerce"),screenReaderLabel:(0,n.__)("Net sales","woocommerce"),key:"net_total",required:!0,isSortable:!0,isNumeric:!0}]}getCustomerName(e){const{first_name:t,last_name:r}=e||{};return t||r?[t,r].join(" "):""}getRowsContent(e){const{query:t}=this.props,r=(0,d.getPersistedQuery)(t),a=(0,h.O3)("dateFormat",p.defaultTableDateFormat),{render:s,getCurrencyConfig:l}=this.context;return(0,c.map)(e,(e=>{const{currency:t,date:i,net_total:c,num_items_sold:p,order_id:_,order_number:y,parent_id:b,status:g,customer_type:f}=e,w=e.extended_info||{},{coupons:v,customer:C,products:k}=w,q=k.sort(((e,t)=>t.quantity-e.quantity)).map((e=>({label:e.name,quantity:e.quantity,href:(0,d.getNewPath)(r,"/analytics/products",{filter:"single_product",products:e.id})}))),S=v.map((e=>({label:e.code,href:(0,d.getNewPath)(r,"/analytics/coupons",{filter:"single_coupon",coupons:e.id})})));return[{display:(0,o.createElement)(u.Date,{date:i,visibleFormat:a}),value:i},{display:(0,o.createElement)(u.Link,{href:"post.php?post="+(b||_)+"&action=edit"+(b?"#order_refunds":""),type:"wp-admin"},y),value:y},{display:(0,o.createElement)(u.OrderStatus,{className:"woocommerce-orders-table__status",order:{status:g},labelPositionToLeft:!0,orderStatusMap:(0,h.O3)("orderStatuses",{})}),value:g},{display:this.getCustomerName(C),value:this.getCustomerName(C)},{display:(E=f,E.charAt(0).toUpperCase()+E.slice(1)),value:f},{display:this.renderList(q.length?[q[0]]:[],q.map((e=>({label:(0,n.sprintf)((0,n.__)("%1$s× %2$s","woocommerce"),e.quantity,e.label),href:e.href})))),value:q.map((e=>{let{quantity:t,label:r}=e;return(0,n.sprintf)((0,n.__)("%1$s× %2$s","woocommerce"),t,r)})).join(", ")},{display:(0,m.formatValue)(l(),"number",p),value:p},{display:this.renderList(S.length?[S[0]]:[],S),value:S.map((e=>e.label)).join(", ")},{display:s(c,t),value:c}];var E}))}getSummary(e){const{orders_count:t=0,total_customers:r=0,products:o=0,num_items_sold:a=0,coupons_count:s=0,net_revenue:l=0}=e,{formatAmount:i,getCurrencyConfig:c}=this.context,u=c();return[{label:(0,n._n)("Order","Orders",t,"woocommerce"),value:(0,m.formatValue)(u,"number",t)},{label:(0,n._n)(" Customer"," Customers",r,"woocommerce"),value:(0,m.formatValue)(u,"number",r)},{label:(0,n._n)("Product","Products",o,"woocommerce"),value:(0,m.formatValue)(u,"number",o)},{label:(0,n._n)("Item sold","Items sold",a,"woocommerce"),value:(0,m.formatValue)(u,"number",a)},{label:(0,n._n)("Coupon","Coupons",s,"woocommerce"),value:(0,m.formatValue)(u,"number",s)},{label:(0,n.__)("net sales","woocommerce"),value:i(l)}]}renderLinks(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map(((e,t)=>(0,o.createElement)(u.Link,{href:e.href,key:t,type:"wc-admin"},e.label)))}renderList(e,t){return(0,o.createElement)(o.Fragment,null,this.renderLinks(e),t.length>1&&(0,o.createElement)(u.ViewMoreList,{items:this.renderLinks(t)}))}render(){const{query:e,filters:t,advancedFilters:r}=this.props;return(0,o.createElement)(y.Z,{endpoint:"orders",getHeadersContent:this.getHeadersContent,getRowsContent:this.getRowsContent,getSummary:this.getSummary,summaryFields:["orders_count","total_customers","products","num_items_sold","coupons_count","net_revenue"],query:e,tableQuery:{extended_info:!0},title:(0,n.__)("Orders","woocommerce"),columnPrefsKey:"orders_report_columns",filters:t,advancedFilters:r})}}b.contextType=_.CurrencyContext;const g=b;var f=r(17666),w=r(59205),v=r(98552),C=r(81094);class k extends o.Component{render(){const{path:e,query:t}=this.props;return(0,o.createElement)(o.Fragment,null,(0,o.createElement)(v.Z,{query:t,path:e,filters:l.u8,advancedFilters:l.be,report:"orders"}),(0,o.createElement)(w.Z,{charts:l.O3,endpoint:"orders",query:t,selectedChart:(0,i.Z)(t.chart,l.O3),filters:l.u8,advancedFilters:l.be}),(0,o.createElement)(f.Z,{charts:l.O3,endpoint:"orders",path:e,query:t,selectedChart:(0,i.Z)(t.chart,l.O3),filters:l.u8,advancedFilters:l.be}),(0,o.createElement)(g,{query:t,filters:l.u8,advancedFilters:l.be}),(0,o.createElement)(C.I,{optionName:"woocommerce_orders_report_date_tour_shown",headingText:(0,n.__)("Orders are now reported based on the payment dates ✅","woocommerce")}))}}k.propTypes={path:s().string.isRequired,query:s().object.isRequired}},81094:(e,t,r)=>{r.d(t,{I:()=>u});var o=r(86020),a=r(65736),s=r(67221),n=r(69307),l=r(9818),i=r(74617);const c="woocommerce_date_type",u=e=>{let{optionName:t,headingText:r}=e;const[u,m]=(0,n.useState)(!1),{updateOptions:d}=(0,l.useDispatch)(s.OPTIONS_STORE_NAME),{shouldShowTour:p,isResolving:_}=(0,l.useSelect)((e=>{const{getOption:r,hasFinishedResolution:o}=e(s.OPTIONS_STORE_NAME);return{shouldShowTour:"yes"!==r(t)&&!1===r(c),isResolving:!(o("getOption",[t])&&o("getOption",[c]))}}));if(u||!p||_)return null;const y={steps:[{referenceElements:{desktop:".woocommerce-filters-filter > .components-dropdown"},focusElement:{desktop:".woocommerce-filters-filter > .components-dropdown"},meta:{name:"product-feedback-",heading:r,descriptions:{desktop:(0,n.createInterpolateElement)((0,a.__)("We now collect orders in this table based on when the payment went through, rather than when they were placed. You can change this in settings.","woocommerce"),{link:(0,n.createElement)("a",{href:(0,i.getAdminLink)("admin.php?page=wc-admin&path=/analytics/settings"),"aria-label":(0,a.__)("Analytics date settings","woocommerce")})})},primaryButton:{text:(0,a.__)("Got it","woocommerce")}},options:{classNames:{desktop:"woocommerce-revenue-report-date-tour"}}}],closeHandler:()=>{d({[t]:"yes"}),m(!0)}};return(0,n.createElement)(o.TourKit,{config:y})}},78851:(e,t,r)=>{r.d(t,{Z:()=>a});var o=r(92819);function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const r=(0,o.find)(t,{key:e});return r||t[0]}}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunk_wcAdmin_webpackJsonp=globalThis.webpackChunk_wcAdmin_webpackJsonp||[]).push([[3576],{59205:(e,t,r)=>{r.d(t,{Z:()=>g});var o=r(69307),a=r(65736),s=r(94333),n=r(9818),l=r(7862),i=r.n(l),c=r(10431),u=r(86020),m=r(81595),d=r(67221),p=r(81921),_=r(14599),y=r(17844),h=r(65994);class b extends o.Component{formatVal(e,t){const{formatAmount:r,getCurrencyConfig:o}=this.context;return"currency"===t?r(e):(0,m.formatValue)(o(),t,e)}getValues(e,t){const{emptySearchResults:r,summaryData:o}=this.props,{totals:a}=o,s=a.primary?a.primary[e]:0,n=a.secondary?a.secondary[e]:0,l=r?0:s,i=r?0:n;return{delta:(0,m.calculateDelta)(l,i),prevValue:this.formatVal(i,t),value:this.formatVal(l,t)}}render(){const{charts:e,query:t,selectedChart:r,summaryData:s,endpoint:n,report:l,defaultDateRange:i}=this.props,{isError:m,isRequesting:d}=s;if(m)return(0,o.createElement)(h.Z,null);if(d)return(0,o.createElement)(u.SummaryListPlaceholder,{numberOfItems:e.length});const{compare:y}=(0,p.getDateParamsFromQuery)(t,i);return(0,o.createElement)(u.SummaryList,null,(t=>{let{onToggle:s}=t;return e.map((e=>{const{key:t,order:i,orderby:m,label:d,type:p,isReverseTrend:h,labelTooltipText:b}=e,g={chart:t};m&&(g.orderby=m),i&&(g.order=i);const f=(0,c.getNewPath)(g),w=r.key===t,{delta:v,prevValue:C,value:k}=this.getValues(t,p);return(0,o.createElement)(u.SummaryNumber,{key:t,delta:v,href:f,label:d,reverseTrend:h,prevLabel:"previous_period"===y?(0,a.__)("Previous period:","woocommerce"):(0,a.__)("Previous year:","woocommerce"),prevValue:C,selected:w,value:k,labelTooltipText:b,onLinkClickCallback:()=>{s&&s(),(0,_.recordEvent)("analytics_chart_tab_click",{report:l||n,key:t})}})}))}))}}b.propTypes={charts:i().array.isRequired,endpoint:i().string.isRequired,limitProperties:i().array,query:i().object.isRequired,selectedChart:i().shape({key:i().string.isRequired,label:i().string.isRequired,order:i().oneOf(["asc","desc"]),orderby:i().string,type:i().oneOf(["average","number","currency"]).isRequired}).isRequired,summaryData:i().object,report:i().string},b.defaultProps={summaryData:{totals:{primary:{},secondary:{}},isError:!1}},b.contextType=y.CurrencyContext;const g=(0,s.compose)((0,n.withSelect)(((e,t)=>{const{charts:r,endpoint:o,limitProperties:a,query:s,filters:n,advancedFilters:l}=t,i=a||[o],c=i.some((e=>s[e]&&s[e].length));if(s.search&&!c)return{emptySearchResults:!0};const u=r&&r.map((e=>e.key)),{woocommerce_default_date_range:m}=e(d.SETTINGS_STORE_NAME).getSetting("wc_admin","wcAdminSettings");return{summaryData:(0,d.getSummaryNumbers)({endpoint:o,query:s,select:e,limitBy:i,filters:n,advancedFilters:l,defaultDateRange:m,fields:u}),defaultDateRange:m}})))(b)},9033:(e,t,r)=>{r.r(t),r.d(t,{default:()=>k});var o=r(69307),a=r(7862),s=r.n(a),n=r(65736),l=r(67362),i=r(78851),c=r(92819),u=r(86020),m=r(81595),d=r(10431),p=r(81921),_=r(17844),y=r(95931),h=r(73463);class b extends o.Component{constructor(){super(),this.getHeadersContent=this.getHeadersContent.bind(this),this.getRowsContent=this.getRowsContent.bind(this),this.getSummary=this.getSummary.bind(this)}getHeadersContent(){return[{label:(0,n.__)("Date","woocommerce"),key:"date",required:!0,defaultSort:!0,isLeftAligned:!0,isSortable:!0},{label:(0,n.__)("Order #","woocommerce"),screenReaderLabel:(0,n.__)("Order Number","woocommerce"),key:"order_number",required:!0},{label:(0,n.__)("Status","woocommerce"),key:"status",required:!1,isSortable:!1},{label:(0,n.__)("Customer","woocommerce"),key:"customer_id",required:!1,isSortable:!1},{label:(0,n.__)("Customer type","woocommerce"),key:"customer_type",required:!1,isSortable:!1},{label:(0,n.__)("Product(s)","woocommerce"),screenReaderLabel:(0,n.__)("Products","woocommerce"),key:"products",required:!1,isSortable:!1},{label:(0,n.__)("Items sold","woocommerce"),key:"num_items_sold",required:!1,isSortable:!0,isNumeric:!0},{label:(0,n.__)("Coupon(s)","woocommerce"),screenReaderLabel:(0,n.__)("Coupons","woocommerce"),key:"coupons",required:!1,isSortable:!1},{label:(0,n.__)("Net sales","woocommerce"),screenReaderLabel:(0,n.__)("Net sales","woocommerce"),key:"net_total",required:!0,isSortable:!0,isNumeric:!0}]}getCustomerName(e){const{first_name:t,last_name:r}=e||{};return t||r?[t,r].join(" "):""}getRowsContent(e){const{query:t}=this.props,r=(0,d.getPersistedQuery)(t),a=(0,h.O3)("dateFormat",p.defaultTableDateFormat),{render:s,getCurrencyConfig:l}=this.context;return(0,c.map)(e,(e=>{const{currency:t,date:i,net_total:c,num_items_sold:p,order_id:_,order_number:y,parent_id:b,status:g,customer_type:f}=e,w=e.extended_info||{},{coupons:v,customer:C,products:k}=w,q=k.sort(((e,t)=>t.quantity-e.quantity)).map((e=>({label:e.name,quantity:e.quantity,href:(0,d.getNewPath)(r,"/analytics/products",{filter:"single_product",products:e.id})}))),S=v.map((e=>({label:e.code,href:(0,d.getNewPath)(r,"/analytics/coupons",{filter:"single_coupon",coupons:e.id})})));return[{display:(0,o.createElement)(u.Date,{date:i,visibleFormat:a}),value:i},{display:(0,o.createElement)(u.Link,{href:"post.php?post="+(b||_)+"&action=edit"+(b?"#order_refunds":""),type:"wp-admin"},y),value:y},{display:(0,o.createElement)(u.OrderStatus,{className:"woocommerce-orders-table__status",order:{status:g},labelPositionToLeft:!0,orderStatusMap:(0,h.O3)("orderStatuses",{})}),value:g},{display:this.getCustomerName(C),value:this.getCustomerName(C)},{display:(E=f,E.charAt(0).toUpperCase()+E.slice(1)),value:f},{display:this.renderList(q.length?[q[0]]:[],q.map((e=>({label:(0,n.sprintf)((0,n.__)("%s× %s","woocommerce"),e.quantity,e.label),href:e.href})))),value:q.map((e=>{let{quantity:t,label:r}=e;return(0,n.sprintf)((0,n.__)("%s× %s","woocommerce"),t,r)})).join(", ")},{display:(0,m.formatValue)(l(),"number",p),value:p},{display:this.renderList(S.length?[S[0]]:[],S),value:S.map((e=>e.label)).join(", ")},{display:s(c,t),value:c}];var E}))}getSummary(e){const{orders_count:t=0,total_customers:r=0,products:o=0,num_items_sold:a=0,coupons_count:s=0,net_revenue:l=0}=e,{formatAmount:i,getCurrencyConfig:c}=this.context,u=c();return[{label:(0,n._n)("Order","Orders",t,"woocommerce"),value:(0,m.formatValue)(u,"number",t)},{label:(0,n._n)(" Customer"," Customers",r,"woocommerce"),value:(0,m.formatValue)(u,"number",r)},{label:(0,n._n)("Product","Products",o,"woocommerce"),value:(0,m.formatValue)(u,"number",o)},{label:(0,n._n)("Item sold","Items sold",a,"woocommerce"),value:(0,m.formatValue)(u,"number",a)},{label:(0,n._n)("Coupon","Coupons",s,"woocommerce"),value:(0,m.formatValue)(u,"number",s)},{label:(0,n.__)("net sales","woocommerce"),value:i(l)}]}renderLinks(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).map(((e,t)=>(0,o.createElement)(u.Link,{href:e.href,key:t,type:"wc-admin"},e.label)))}renderList(e,t){return(0,o.createElement)(o.Fragment,null,this.renderLinks(e),t.length>1&&(0,o.createElement)(u.ViewMoreList,{items:this.renderLinks(t)}))}render(){const{query:e,filters:t,advancedFilters:r}=this.props;return(0,o.createElement)(y.Z,{endpoint:"orders",getHeadersContent:this.getHeadersContent,getRowsContent:this.getRowsContent,getSummary:this.getSummary,summaryFields:["orders_count","total_customers","products","num_items_sold","coupons_count","net_revenue"],query:e,tableQuery:{extended_info:!0},title:(0,n.__)("Orders","woocommerce"),columnPrefsKey:"orders_report_columns",filters:t,advancedFilters:r})}}b.contextType=_.CurrencyContext;const g=b;var f=r(17666),w=r(59205),v=r(98552),C=r(81094);class k extends o.Component{render(){const{path:e,query:t}=this.props;return(0,o.createElement)(o.Fragment,null,(0,o.createElement)(v.Z,{query:t,path:e,filters:l.u8,advancedFilters:l.be,report:"orders"}),(0,o.createElement)(w.Z,{charts:l.O3,endpoint:"orders",query:t,selectedChart:(0,i.Z)(t.chart,l.O3),filters:l.u8,advancedFilters:l.be}),(0,o.createElement)(f.Z,{charts:l.O3,endpoint:"orders",path:e,query:t,selectedChart:(0,i.Z)(t.chart,l.O3),filters:l.u8,advancedFilters:l.be}),(0,o.createElement)(g,{query:t,filters:l.u8,advancedFilters:l.be}),(0,o.createElement)(C.I,{optionName:"woocommerce_orders_report_date_tour_shown",headingText:(0,n.__)("Orders are now reported based on the payment dates ✅","woocommerce")}))}}k.propTypes={path:s().string.isRequired,query:s().object.isRequired}},81094:(e,t,r)=>{r.d(t,{I:()=>u});var o=r(86020),a=r(65736),s=r(67221),n=r(69307),l=r(9818),i=r(74617);const c="woocommerce_date_type",u=e=>{let{optionName:t,headingText:r}=e;const[u,m]=(0,n.useState)(!1),{updateOptions:d}=(0,l.useDispatch)(s.OPTIONS_STORE_NAME),{shouldShowTour:p,isResolving:_}=(0,l.useSelect)((e=>{const{getOption:r,hasFinishedResolution:o}=e(s.OPTIONS_STORE_NAME);return{shouldShowTour:"yes"!==r(t)&&!1===r(c),isResolving:!(o("getOption",[t])&&o("getOption",[c]))}}));if(u||!p||_)return null;const y={steps:[{referenceElements:{desktop:".woocommerce-filters-filter > .components-dropdown"},focusElement:{desktop:".woocommerce-filters-filter > .components-dropdown"},meta:{name:"product-feedback-",heading:r,descriptions:{desktop:(0,n.createInterpolateElement)((0,a.__)("We now collect orders in this table based on when the payment went through, rather than when they were placed. You can change this in settings.","woocommerce"),{link:(0,n.createElement)("a",{href:(0,i.getAdminLink)("admin.php?page=wc-admin&path=/analytics/settings"),"aria-label":(0,a.__)("Analytics date settings","woocommerce")})})},primaryButton:{text:(0,a.__)("Got it","woocommerce")}},options:{classNames:{desktop:"woocommerce-revenue-report-date-tour"}}}],closeHandler:()=>{d({[t]:"yes"}),m(!0)}};return(0,n.createElement)(o.TourKit,{config:y})}},78851:(e,t,r)=>{r.d(t,{Z:()=>a});var o=r(92819);function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const r=(0,o.find)(t,{key:e});return r||t[0]}}}]);
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/analytics-settings.js b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/analytics-settings.js
index 0c9f97a5..d0cd6f75 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/analytics-settings.js
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/analytics-settings.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunk_wcAdmin_webpackJsonp=globalThis.webpackChunk_wcAdmin_webpackJsonp||[]).push([[2953],{68266:(e,t,o)=>{o.r(t),o.d(t,{default:()=>F});var r=o(5267),a=o(69307),s=o(65736),i=o(55609),n=o(94333),c=o(9818),l=o(86020),m=o(67221),d=o(14599),p=o(49850),u=o(17538),h=o(7862),g=o.n(h),_=o(92819);class w extends a.Component{constructor(e){super(e),(0,u.Z)(this,"renderInput",(()=>{const{handleChange:e,name:t,inputText:o,inputType:s,options:n,value:c,component:l}=this.props,{disabled:m}=this.state;switch(s){case"checkboxGroup":return n.map((e=>e.options.length>0&&(0,a.createElement)("div",{className:"woocommerce-setting__options-group",key:e.key,"aria-labelledby":t+"-label"},e.label&&(0,a.createElement)("span",{className:"woocommerce-setting__options-group-label"},e.label),this.renderCheckboxOptions(e.options))));case"checkbox":return this.renderCheckboxOptions(n);case"button":return(0,a.createElement)(i.Button,{isSecondary:!0,onClick:this.handleInputCallback,disabled:m},o);case"component":const s=l;return(0,a.createElement)(s,(0,r.Z)({value:c,onChange:e},this.props));case"select":return(0,a.createElement)(i.SelectControl,{options:n,value:c,onChange:o=>e({target:{name:t,type:"select",value:o}})});default:const d=(0,_.uniqueId)(t);return(0,a.createElement)("input",{id:d,type:"text",name:t,onChange:e,value:c,placeholder:o,disabled:m})}})),(0,u.Z)(this,"handleInputCallback",(()=>{const{createNotice:e,callback:t}=this.props;if("function"==typeof t)return new Promise(((o,r)=>{this.setState({disabled:!0}),t(o,r,e)})).then((()=>{this.setState({disabled:!1})})).catch((()=>{this.setState({disabled:!1})}))})),this.state={disabled:!1}}renderCheckboxOptions(e){const{handleChange:t,name:o,value:r}=this.props,{disabled:s}=this.state;return e.map((e=>(0,a.createElement)(i.CheckboxControl,{key:o+"-"+e.value,label:e.label,name:o,checked:r&&r.includes(e.value),onChange:r=>t({target:{checked:r,name:o,type:"checkbox",value:e.value}}),disabled:s})))}render(){const{helpText:e,label:t,name:o}=this.props;return(0,a.createElement)("div",{className:"woocommerce-setting"},(0,a.createElement)("div",{className:"woocommerce-setting__label",id:o+"-label"},t),(0,a.createElement)("div",{className:"woocommerce-setting__input"},this.renderInput(),e&&(0,a.createElement)("span",{className:"woocommerce-setting__help"},e)))}}w.propTypes={callback:g().func,handleChange:g().func.isRequired,helpText:g().oneOfType([g().string,g().array]),inputText:g().string,inputType:g().oneOf(["button","checkbox","checkboxGroup","text","component","select"]),label:g().string.isRequired,name:g().string.isRequired,options:g().arrayOf(g().shape({value:g().string,label:g().string,description:g().string,key:g().string,options:g().array})),value:g().oneOfType([g().string,g().array])};const v=(0,n.compose)((0,c.withDispatch)((e=>{const{createNotice:t}=e("core/notices");return{createNotice:t}})))(w);var I=o(76292),S=o.n(I);const b=(e,t,o)=>{const r={};if(o&&(r.skip_existing=!0),"all"!==t.label)if("custom"===t.label){const o=S()().diff(S()(t.date,e),"days",!0);r.days=Math.floor(o)}else r.days=parseInt(t.label,10);return r};var E=o(96483);const k=(0,n.compose)([(0,c.withSelect)((e=>{const{getFormSettings:t}=e(m.IMPORT_STORE_NAME),{period:o,skipPrevious:r}=t();return{selectedPeriod:o,skipChecked:r}})),(0,c.withDispatch)((e=>{const{updateImportation:t,setImportStarted:o}=e(m.IMPORT_STORE_NAME),{createNotice:r}=e("core/notices");return{createNotice:r,setImportStarted:o,updateImportation:t}}))])((function(e){let{clearStatusAndTotalsCache:t,createNotice:o,dateFormat:r,importDate:n,onImportStarted:c,selectedPeriod:l,stopImport:m,skipChecked:p,status:u,setImportStarted:h,updateImportation:g}=e;const _=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];g(e,r).then((e=>{"success"===e.status?o("success",e.message):(o("error",t),h(!1),m())})).catch((e=>{e&&e.message&&(o("error",e.message),h(!1),m())}))},w=()=>{const e=(0,E.addQueryArgs)("/wc-analytics/reports/import",b(r,l,p)),t=(0,s.__)("There was a problem rebuilding your report data.","woocommerce");_(e,t,!0),c()},v=()=>{m();const e=(0,s.__)("There was a problem stopping your current import.","woocommerce");_("/wc-analytics/reports/import/cancel",e)},I=()=>{const e=(0,s.__)("There was a problem deleting your previous data.","woocommerce");_("/wc-analytics/reports/import/delete",e),(0,d.recordEvent)("analytics_import_delete_previous"),h(!1)},S=()=>{h(!1),t()};return(0,a.createElement)("div",{className:"woocommerce-settings__actions woocommerce-settings-historical-data__actions"},(()=>{const e="ready"!==u;return["initializing","customers","orders","finalizing"].includes(u)?(0,a.createElement)(a.Fragment,null,(0,a.createElement)(i.Button,{className:"woocommerce-settings-historical-data__action-button",isPrimary:!0,onClick:v},(0,s.__)("Stop Import","woocommerce")),(0,a.createElement)("div",{className:"woocommerce-setting__help woocommerce-settings-historical-data__action-help"},(0,s.__)("Imported data will not be lost if the import is stopped.","woocommerce"),(0,a.createElement)("br",null),(0,s.__)("Navigating away from this page will not affect the import.","woocommerce"))):["ready","nothing"].includes(u)?n?(0,a.createElement)(a.Fragment,null,(0,a.createElement)(i.Button,{isPrimary:!0,onClick:w,disabled:e},(0,s.__)("Start","woocommerce")),(0,a.createElement)(i.Button,{isSecondary:!0,onClick:I},(0,s.__)("Delete Previously Imported Data","woocommerce"))):(0,a.createElement)(a.Fragment,null,(0,a.createElement)(i.Button,{isPrimary:!0,onClick:w,disabled:e},(0,s.__)("Start","woocommerce"))):("error"===u&&o("error",(0,s.__)("Something went wrong with the importation process.","woocommerce")),(0,a.createElement)(a.Fragment,null,(0,a.createElement)(i.Button,{isSecondary:!0,onClick:S},(0,s.__)("Re-import Data","woocommerce")),(0,a.createElement)(i.Button,{isSecondary:!0,onClick:I},(0,s.__)("Delete Previously Imported Data","woocommerce"))))})())}));var y=o(81921);const C=(0,c.withDispatch)((e=>{const{setImportPeriod:t}=e(m.IMPORT_STORE_NAME);return{setImportPeriod:t}}))((function(e){let{dateFormat:t,disabled:o,setImportPeriod:r,value:n}=e;const c=e=>{e.date&&e.date.isValid?r(e.date.format(t),!0):r(e.text,!0)},m=e=>e.isValid()&&n.date.length===t.length?e.isAfter(new Date,"day")?y.dateValidationMessages.future:null:y.dateValidationMessages.invalid;return(0,a.createElement)("div",{className:"woocommerce-settings-historical-data__columns"},(0,a.createElement)("div",{className:"woocommerce-settings-historical-data__column"},(0,a.createElement)(i.SelectControl,{label:(0,s.__)("Import historical data","woocommerce"),value:n.label,disabled:o,onChange:e=>{r(e)},options:[{label:"All",value:"all"},{label:"Last 365 days",value:"365"},{label:"Last 90 days",value:"90"},{label:"Last 30 days",value:"30"},{label:"Last 7 days",value:"7"},{label:"Last 24 hours",value:"1"},{label:"Custom",value:"custom"}]})),"custom"===n.label&&(()=>{const e=S()(n.date,t);return(0,a.createElement)("div",{className:"woocommerce-settings-historical-data__column"},(0,a.createElement)("div",{className:"woocommerce-settings-historical-data__column-label"},(0,s.__)("Beginning on","woocommerce")),(0,a.createElement)(l.DatePicker,{date:e.isValid()?e.toDate():null,dateFormat:t,disabled:o,error:m(e),isInvalidDate:e=>S()(e).isAfter(new Date,"day"),onUpdate:c,text:n.date}))})())})),N=function(e){let{label:t,progress:o,total:r}=e;const i=(0,s.sprintf)((0,s.__)("Imported %(label)s","woocommerce"),{label:t}),n=(0,_.isNil)(r)?null:(0,s.sprintf)((0,s.__)("%(progress)s of %(total)s","woocommerce"),{progress:o||0,total:r});return(0,a.createElement)("div",{className:"woocommerce-settings-historical-data__progress"},(0,a.createElement)("span",{className:"woocommerce-settings-historical-data__progress-label"},i),n&&(0,a.createElement)("span",{className:"woocommerce-settings-historical-data__progress-label"},n),(0,a.createElement)("progress",{className:"woocommerce-settings-historical-data__progress-bar",max:r,value:o||0}))};var f=o(92694);const T=function(e){let{importDate:t,status:o}=e;const r=(0,f.applyFilters)("woocommerce_admin_import_status",{nothing:(0,s.__)("Nothing To Import","woocommerce"),ready:(0,s.__)("Ready To Import","woocommerce"),initializing:[(0,s.__)("Initializing","woocommerce"),(0,a.createElement)(i.Spinner,{key:"spinner"})],customers:[(0,s.__)("Importing Customers","woocommerce"),(0,a.createElement)(i.Spinner,{key:"spinner"})],orders:[(0,s.__)("Importing Orders","woocommerce"),(0,a.createElement)(i.Spinner,{key:"spinner"})],finalizing:[(0,s.__)("Finalizing","woocommerce"),(0,a.createElement)(i.Spinner,{key:"spinner"})],finished:-1===t?(0,s.__)("All historical data imported","woocommerce"):(0,s.sprintf)((0,s.__)("Historical data from %s onward imported","woocommerce"),S()(t).format("YYYY-MM-DD"))});return(0,a.createElement)("span",{className:"woocommerce-settings-historical-data__status"},(0,s.__)("Status:","woocommerce")+" ",r[o])},P=(0,c.withDispatch)((e=>{const{setSkipPrevious:t}=e(m.IMPORT_STORE_NAME);return{setSkipPrevious:t}}))((function(e){let{checked:t,disabled:o,setSkipPrevious:r}=e;return(0,a.createElement)(i.CheckboxControl,{className:"woocommerce-settings-historical-data__skip-checkbox",checked:t,disabled:o,label:(0,s.__)("Skip previously imported customers and orders","woocommerce"),onChange:e=>{r(e)}})}));class A extends a.Component{render(){const{customersProgress:e,customersTotal:t,dateFormat:o,importDate:r,inProgress:i,lastImportStartTimestamp:n,clearStatusAndTotalsCache:c,ordersProgress:m,ordersTotal:d,onImportStarted:p,period:u,stopImport:h,skipChecked:g,status:_}=this.props;return(0,a.createElement)(a.Fragment,null,(0,a.createElement)(l.SectionHeader,{title:(0,s.__)("Import historical data","woocommerce")}),(0,a.createElement)("div",{className:"woocommerce-settings__wrapper"},(0,a.createElement)("div",{className:"woocommerce-setting"},(0,a.createElement)("div",{className:"woocommerce-setting__input"},(0,a.createElement)("span",{className:"woocommerce-setting__help"},(0,s.__)("This tool populates historical analytics data by processing customers and orders created prior to activating WooCommerce Admin.","woocommerce")),"finished"!==_&&(0,a.createElement)(a.Fragment,null,(0,a.createElement)(C,{dateFormat:o,disabled:i,value:u}),(0,a.createElement)(P,{disabled:i,checked:g}),(0,a.createElement)(N,{label:(0,s.__)("Registered Customers","woocommerce"),progress:e,total:t}),(0,a.createElement)(N,{label:(0,s.__)("Orders and Refunds","woocommerce"),progress:m,total:d})),(0,a.createElement)(T,{importDate:r,status:_})))),(0,a.createElement)(k,{clearStatusAndTotalsCache:c,dateFormat:o,importDate:r,lastImportStartTimestamp:n,onImportStarted:p,stopImport:h,status:_}))}}const O=(0,c.withSelect)(((e,t)=>{const{getImportError:o,getImportStatus:r,getImportTotals:a}=e(m.IMPORT_STORE_NAME),{activeImport:s,cacheNeedsClearing:i,dateFormat:n,inProgress:c,onImportStarted:l,onImportFinished:d,period:p,startStatusCheckInterval:u,skipChecked:h}=t,g=b(n,p,h),{customers:w,orders:v,lastImportStartTimestamp:I}=a(g),{customers:S,imported_from:E,is_importing:k,orders:y}=r(I),{imported:C,total:N}=S||{},{imported:f,total:T}=y||{},P=Boolean(o(I)||o(g));Boolean(!I&&!c&&!0===k)&&l();const A=Boolean(c&&!i&&!1===k&&(N>0||T>0)&&C===N&&f===T);let O={customersTotal:w,isError:P,ordersTotal:v};s&&(O={cacheNeedsClearing:i,customersProgress:C,customersTotal:(0,_.isNil)(N)?w:N,inProgress:c,isError:P,ordersProgress:f,ordersTotal:(0,_.isNil)(T)?v:T});const D=(e=>{let{cacheNeedsClearing:t,customersProgress:o,customersTotal:r,isError:a,inProgress:s,ordersProgress:i,ordersTotal:n}=e;return a?"error":s?(0,_.isNil)(o)||(0,_.isNil)(i)||(0,_.isNil)(r)||(0,_.isNil)(n)||t?"initializing":o0||n>0?o===r&&i===n?"finished":"ready":"nothing"})(O);return"initializing"===D&&u(),A&&d(),{...O,importDate:E,status:D}}))(A);class D extends a.Component{constructor(){super(...arguments),this.dateFormat=(0,s.__)("MM/DD/YYYY","woocommerce"),this.intervalId=-1,this.lastImportStopTimestamp=0,this.cacheNeedsClearing=!0,this.onImportFinished=this.onImportFinished.bind(this),this.onImportStarted=this.onImportStarted.bind(this),this.clearStatusAndTotalsCache=this.clearStatusAndTotalsCache.bind(this),this.stopImport=this.stopImport.bind(this),this.startStatusCheckInterval=this.startStatusCheckInterval.bind(this),this.cancelStatusCheckInterval=this.cancelStatusCheckInterval.bind(this)}startStatusCheckInterval(){this.intervalId<0&&(this.cacheNeedsClearing=!0,this.intervalId=setInterval((()=>{this.clearCache("getImportStatus")}),3*m.SECOND))}cancelStatusCheckInterval(){clearInterval(this.intervalId),this.intervalId=-1}clearCache(e,t){const{invalidateResolution:o,lastImportStartTimestamp:r}=this.props;o(e,["getImportStatus"===e?r:t]).then((()=>{this.cacheNeedsClearing=!1}))}stopImport(){this.cancelStatusCheckInterval(),this.lastImportStopTimestamp=Date.now()}onImportFinished(){const{debouncedSpeak:e}=this.props;this.cacheNeedsClearing||(e("Import complete"),this.stopImport())}onImportStarted(){const{notes:e,setImportStarted:t,updateNote:o}=this.props,r=e.find((e=>"wc-admin-historical-data"===e.name));r&&o(r.id,{status:"actioned"}),t(!0)}clearStatusAndTotalsCache(){const{selectedPeriod:e,skipChecked:t}=this.props,o=b(this.dateFormat,e,t);this.clearCache("getImportTotals",o),this.clearCache("getImportStatus")}isImportationInProgress(){const{lastImportStartTimestamp:e}=this.props;return void 0!==e&&void 0===this.lastImportStopTimestamp||e>this.lastImportStopTimestamp}render(){const{activeImport:e,createNotice:t,lastImportStartTimestamp:o,selectedPeriod:r,skipChecked:s}=this.props;return(0,a.createElement)(O,{activeImport:e,cacheNeedsClearing:this.cacheNeedsClearing,createNotice:t,dateFormat:this.dateFormat,inProgress:this.isImportationInProgress(),onImportFinished:this.onImportFinished,onImportStarted:this.onImportStarted,lastImportStartTimestamp:o,clearStatusAndTotalsCache:this.clearStatusAndTotalsCache,period:r,skipChecked:s,startStatusCheckInterval:this.startStatusCheckInterval,stopImport:this.stopImport})}}const R=(0,n.compose)([(0,c.withSelect)((e=>{const{getNotes:t}=e(m.NOTES_STORE_NAME),{getImportStarted:o,getFormSettings:r}=e(m.IMPORT_STORE_NAME),a=t({page:1,per_page:m.QUERY_DEFAULTS.pageSize,type:"update",status:"unactioned"}),{activeImport:s,lastImportStartTimestamp:i}=o(),{period:n,skipPrevious:c}=r();return{activeImport:s,lastImportStartTimestamp:i,notes:a,selectedPeriod:n,skipChecked:c}})),(0,c.withDispatch)((e=>{const{updateNote:t}=e(m.NOTES_STORE_NAME),{invalidateResolution:o,setImportStarted:r}=e(m.IMPORT_STORE_NAME);return{invalidateResolution:o,setImportStarted:r,updateNote:t}})),i.withSpokenMessages])(D),F=(0,n.compose)((0,c.withDispatch)((e=>{const{createNotice:t}=e("core/notices");return{createNotice:t}})))((e=>{let{createNotice:t,query:o}=e;const{settingsError:n,isRequesting:c,isDirty:u,persistSettings:h,updateAndPersistSettings:g,updateSettings:_,wcAdminSettings:w}=(0,m.useSettings)("wc_admin",["wcAdminSettings"]),I=(0,a.useRef)(!1);(0,a.useEffect)((()=>{function e(e){if(u)return e.returnValue=(0,s.__)("You have unsaved changes. If you proceed, they will be lost.","woocommerce"),e.returnValue}return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)}),[u]),(0,a.useEffect)((()=>{c?I.current=!0:!c&&I.current&&(n?t("error",(0,s.__)("There was an error saving your settings. Please try again.","woocommerce")):t("success",(0,s.__)("Your settings have been successfully saved.","woocommerce")),I.current=!1)}),[c,n,t]);const S=e=>{const{checked:t,name:o,type:r,value:a}=e.target,s={...w};s[o]="checkbox"===r?t?[...s[o],a]:s[o].filter((e=>e!==a)):a,_("wcAdminSettings",s)};return(0,a.createElement)(a.Fragment,null,(0,a.createElement)(l.SectionHeader,{title:(0,s.__)("Analytics settings","woocommerce")}),(0,a.createElement)("div",{className:"woocommerce-settings__wrapper"},Object.keys(p.vc).map((e=>(0,a.createElement)(v,(0,r.Z)({handleChange:S,value:w[e],key:e,name:e},p.vc[e])))),(0,a.createElement)("div",{className:"woocommerce-settings__actions"},(0,a.createElement)(i.Button,{isSecondary:!0,onClick:()=>{if(window.confirm((0,s.__)("Are you sure you want to reset all settings to default values?","woocommerce"))){const e=Object.keys(p.vc).reduce(((e,t)=>(e[t]=p.vc[t].defaultValue,e)),{});g("wcAdminSettings",e),(0,d.recordEvent)("analytics_settings_reset_defaults")}}},(0,s.__)("Reset defaults","woocommerce")),(0,a.createElement)(i.Button,{isPrimary:!0,isBusy:c,onClick:()=>{h(),(0,d.recordEvent)("analytics_settings_save",w),o.period=void 0,o.compare=void 0,o.before=void 0,o.after=void 0,o.interval=void 0,o.type=void 0,window.wpNavMenuUrlUpdate(o)}},(0,s.__)("Save settings","woocommerce")))),"true"===o.import?(0,a.createElement)(l.ScrollTo,{offset:"-56"},(0,a.createElement)(R,{createNotice:t})):(0,a.createElement)(R,{createNotice:t}))}))},17538:(e,t,o)=>{function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}o.d(t,{Z:()=>r})}}]);
\ No newline at end of file
+"use strict";(globalThis.webpackChunk_wcAdmin_webpackJsonp=globalThis.webpackChunk_wcAdmin_webpackJsonp||[]).push([[2953],{68266:(e,t,o)=>{o.r(t),o.d(t,{default:()=>F});var r=o(5267),a=o(69307),s=o(65736),i=o(55609),n=o(94333),c=o(9818),l=o(86020),m=o(67221),d=o(14599),p=o(49850),u=o(17538),h=o(7862),g=o.n(h),_=o(92819);class w extends a.Component{constructor(e){super(e),(0,u.Z)(this,"renderInput",(()=>{const{handleChange:e,name:t,inputText:o,inputType:s,options:n,value:c,component:l}=this.props,{disabled:m}=this.state;switch(s){case"checkboxGroup":return n.map((e=>e.options.length>0&&(0,a.createElement)("div",{className:"woocommerce-setting__options-group",key:e.key,"aria-labelledby":t+"-label"},e.label&&(0,a.createElement)("span",{className:"woocommerce-setting__options-group-label"},e.label),this.renderCheckboxOptions(e.options))));case"checkbox":return this.renderCheckboxOptions(n);case"button":return(0,a.createElement)(i.Button,{isSecondary:!0,onClick:this.handleInputCallback,disabled:m},o);case"component":const s=l;return(0,a.createElement)(s,(0,r.Z)({value:c,onChange:e},this.props));case"select":return(0,a.createElement)(i.SelectControl,{options:n,value:c,onChange:o=>e({target:{name:t,type:"select",value:o}})});default:const d=(0,_.uniqueId)(t);return(0,a.createElement)("input",{id:d,type:"text",name:t,onChange:e,value:c,placeholder:o,disabled:m})}})),(0,u.Z)(this,"handleInputCallback",(()=>{const{createNotice:e,callback:t}=this.props;if("function"==typeof t)return new Promise(((o,r)=>{this.setState({disabled:!0}),t(o,r,e)})).then((()=>{this.setState({disabled:!1})})).catch((()=>{this.setState({disabled:!1})}))})),this.state={disabled:!1}}renderCheckboxOptions(e){const{handleChange:t,name:o,value:r}=this.props,{disabled:s}=this.state;return e.map((e=>(0,a.createElement)(i.CheckboxControl,{key:o+"-"+e.value,label:e.label,name:o,checked:r&&r.includes(e.value),onChange:r=>t({target:{checked:r,name:o,type:"checkbox",value:e.value}}),disabled:s})))}render(){const{helpText:e,label:t,name:o}=this.props;return(0,a.createElement)("div",{className:"woocommerce-setting"},(0,a.createElement)("div",{className:"woocommerce-setting__label",id:o+"-label"},t),(0,a.createElement)("div",{className:"woocommerce-setting__input"},this.renderInput(),e&&(0,a.createElement)("span",{className:"woocommerce-setting__help"},e)))}}w.propTypes={callback:g().func,handleChange:g().func.isRequired,helpText:g().oneOfType([g().string,g().array]),inputText:g().string,inputType:g().oneOf(["button","checkbox","checkboxGroup","text","component","select"]),label:g().string.isRequired,name:g().string.isRequired,options:g().arrayOf(g().shape({value:g().string,label:g().string,description:g().string,key:g().string,options:g().array})),value:g().oneOfType([g().string,g().array])};const v=(0,n.compose)((0,c.withDispatch)((e=>{const{createNotice:t}=e("core/notices");return{createNotice:t}})))(w);var I=o(76292),S=o.n(I);const b=(e,t,o)=>{const r={};if(o&&(r.skip_existing=!0),"all"!==t.label)if("custom"===t.label){const o=S()().diff(S()(t.date,e),"days",!0);r.days=Math.floor(o)}else r.days=parseInt(t.label,10);return r};var E=o(96483);const k=(0,n.compose)([(0,c.withSelect)((e=>{const{getFormSettings:t}=e(m.IMPORT_STORE_NAME),{period:o,skipPrevious:r}=t();return{selectedPeriod:o,skipChecked:r}})),(0,c.withDispatch)((e=>{const{updateImportation:t,setImportStarted:o}=e(m.IMPORT_STORE_NAME),{createNotice:r}=e("core/notices");return{createNotice:r,setImportStarted:o,updateImportation:t}}))])((function(e){let{clearStatusAndTotalsCache:t,createNotice:o,dateFormat:r,importDate:n,onImportStarted:c,selectedPeriod:l,stopImport:m,skipChecked:p,status:u,setImportStarted:h,updateImportation:g}=e;const _=()=>{const e=(0,E.addQueryArgs)("/wc-analytics/reports/import",b(r,l,p)),t=(0,s.__)("There was a problem rebuilding your report data.","woocommerce");v(e,t,!0),c()},w=()=>{m();const e=(0,s.__)("There was a problem stopping your current import.","woocommerce");v("/wc-analytics/reports/import/cancel",e)},v=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];g(e,r).then((e=>{"success"===e.status?o("success",e.message):(o("error",t),h(!1),m())})).catch((e=>{e&&e.message&&(o("error",e.message),h(!1),m())}))},I=()=>{const e=(0,s.__)("There was a problem deleting your previous data.","woocommerce");v("/wc-analytics/reports/import/delete",e),(0,d.recordEvent)("analytics_import_delete_previous"),h(!1)},S=()=>{h(!1),t()};return(0,a.createElement)("div",{className:"woocommerce-settings__actions woocommerce-settings-historical-data__actions"},(()=>{const e="ready"!==u;return["initializing","customers","orders","finalizing"].includes(u)?(0,a.createElement)(a.Fragment,null,(0,a.createElement)(i.Button,{className:"woocommerce-settings-historical-data__action-button",isPrimary:!0,onClick:w},(0,s.__)("Stop Import","woocommerce")),(0,a.createElement)("div",{className:"woocommerce-setting__help woocommerce-settings-historical-data__action-help"},(0,s.__)("Imported data will not be lost if the import is stopped.","woocommerce"),(0,a.createElement)("br",null),(0,s.__)("Navigating away from this page will not affect the import.","woocommerce"))):["ready","nothing"].includes(u)?n?(0,a.createElement)(a.Fragment,null,(0,a.createElement)(i.Button,{isPrimary:!0,onClick:_,disabled:e},(0,s.__)("Start","woocommerce")),(0,a.createElement)(i.Button,{isSecondary:!0,onClick:I},(0,s.__)("Delete Previously Imported Data","woocommerce"))):(0,a.createElement)(a.Fragment,null,(0,a.createElement)(i.Button,{isPrimary:!0,onClick:_,disabled:e},(0,s.__)("Start","woocommerce"))):("error"===u&&o("error",(0,s.__)("Something went wrong with the importation process.","woocommerce")),(0,a.createElement)(a.Fragment,null,(0,a.createElement)(i.Button,{isSecondary:!0,onClick:S},(0,s.__)("Re-import Data","woocommerce")),(0,a.createElement)(i.Button,{isSecondary:!0,onClick:I},(0,s.__)("Delete Previously Imported Data","woocommerce"))))})())}));var y=o(81921);const C=(0,c.withDispatch)((e=>{const{setImportPeriod:t}=e(m.IMPORT_STORE_NAME);return{setImportPeriod:t}}))((function(e){let{dateFormat:t,disabled:o,setImportPeriod:r,value:n}=e;const c=e=>{e.date&&e.date.isValid?r(e.date.format(t),!0):r(e.text,!0)},m=e=>e.isValid()&&n.date.length===t.length?e.isAfter(new Date,"day")?y.dateValidationMessages.future:null:y.dateValidationMessages.invalid;return(0,a.createElement)("div",{className:"woocommerce-settings-historical-data__columns"},(0,a.createElement)("div",{className:"woocommerce-settings-historical-data__column"},(0,a.createElement)(i.SelectControl,{label:(0,s.__)("Import historical data","woocommerce"),value:n.label,disabled:o,onChange:e=>{r(e)},options:[{label:"All",value:"all"},{label:"Last 365 days",value:"365"},{label:"Last 90 days",value:"90"},{label:"Last 30 days",value:"30"},{label:"Last 7 days",value:"7"},{label:"Last 24 hours",value:"1"},{label:"Custom",value:"custom"}]})),"custom"===n.label&&(()=>{const e=S()(n.date,t);return(0,a.createElement)("div",{className:"woocommerce-settings-historical-data__column"},(0,a.createElement)("div",{className:"woocommerce-settings-historical-data__column-label"},(0,s.__)("Beginning on","woocommerce")),(0,a.createElement)(l.DatePicker,{date:e.isValid()?e.toDate():null,dateFormat:t,disabled:o,error:m(e),isInvalidDate:e=>S()(e).isAfter(new Date,"day"),onUpdate:c,text:n.date}))})())})),N=function(e){let{label:t,progress:o,total:r}=e;const i=(0,s.sprintf)((0,s.__)("Imported %(label)s","woocommerce"),{label:t}),n=(0,_.isNil)(r)?null:(0,s.sprintf)((0,s.__)("%(progress)s of %(total)s","woocommerce"),{progress:o||0,total:r});return(0,a.createElement)("div",{className:"woocommerce-settings-historical-data__progress"},(0,a.createElement)("span",{className:"woocommerce-settings-historical-data__progress-label"},i),n&&(0,a.createElement)("span",{className:"woocommerce-settings-historical-data__progress-label"},n),(0,a.createElement)("progress",{className:"woocommerce-settings-historical-data__progress-bar",max:r,value:o||0}))};var f=o(92694);const T=function(e){let{importDate:t,status:o}=e;const r=(0,f.applyFilters)("woocommerce_admin_import_status",{nothing:(0,s.__)("Nothing To Import","woocommerce"),ready:(0,s.__)("Ready To Import","woocommerce"),initializing:[(0,s.__)("Initializing","woocommerce"),(0,a.createElement)(i.Spinner,{key:"spinner"})],customers:[(0,s.__)("Importing Customers","woocommerce"),(0,a.createElement)(i.Spinner,{key:"spinner"})],orders:[(0,s.__)("Importing Orders","woocommerce"),(0,a.createElement)(i.Spinner,{key:"spinner"})],finalizing:[(0,s.__)("Finalizing","woocommerce"),(0,a.createElement)(i.Spinner,{key:"spinner"})],finished:-1===t?(0,s.__)("All historical data imported","woocommerce"):(0,s.sprintf)((0,s.__)("Historical data from %s onward imported","woocommerce"),S()(t).format("YYYY-MM-DD"))});return(0,a.createElement)("span",{className:"woocommerce-settings-historical-data__status"},(0,s.__)("Status:","woocommerce")+" ",r[o])},P=(0,c.withDispatch)((e=>{const{setSkipPrevious:t}=e(m.IMPORT_STORE_NAME);return{setSkipPrevious:t}}))((function(e){let{checked:t,disabled:o,setSkipPrevious:r}=e;return(0,a.createElement)(i.CheckboxControl,{className:"woocommerce-settings-historical-data__skip-checkbox",checked:t,disabled:o,label:(0,s.__)("Skip previously imported customers and orders","woocommerce"),onChange:e=>{r(e)}})}));class A extends a.Component{render(){const{customersProgress:e,customersTotal:t,dateFormat:o,importDate:r,inProgress:i,lastImportStartTimestamp:n,clearStatusAndTotalsCache:c,ordersProgress:m,ordersTotal:d,onImportStarted:p,period:u,stopImport:h,skipChecked:g,status:_}=this.props;return(0,a.createElement)(a.Fragment,null,(0,a.createElement)(l.SectionHeader,{title:(0,s.__)("Import historical data","woocommerce")}),(0,a.createElement)("div",{className:"woocommerce-settings__wrapper"},(0,a.createElement)("div",{className:"woocommerce-setting"},(0,a.createElement)("div",{className:"woocommerce-setting__input"},(0,a.createElement)("span",{className:"woocommerce-setting__help"},(0,s.__)("This tool populates historical analytics data by processing customers and orders created prior to activating WooCommerce Admin.","woocommerce")),"finished"!==_&&(0,a.createElement)(a.Fragment,null,(0,a.createElement)(C,{dateFormat:o,disabled:i,value:u}),(0,a.createElement)(P,{disabled:i,checked:g}),(0,a.createElement)(N,{label:(0,s.__)("Registered Customers","woocommerce"),progress:e,total:t}),(0,a.createElement)(N,{label:(0,s.__)("Orders and Refunds","woocommerce"),progress:m,total:d})),(0,a.createElement)(T,{importDate:r,status:_})))),(0,a.createElement)(k,{clearStatusAndTotalsCache:c,dateFormat:o,importDate:r,lastImportStartTimestamp:n,onImportStarted:p,stopImport:h,status:_}))}}const O=(0,c.withSelect)(((e,t)=>{const{getImportError:o,getImportStatus:r,getImportTotals:a}=e(m.IMPORT_STORE_NAME),{activeImport:s,cacheNeedsClearing:i,dateFormat:n,inProgress:c,onImportStarted:l,onImportFinished:d,period:p,startStatusCheckInterval:u,skipChecked:h}=t,g=b(n,p,h),{customers:w,orders:v,lastImportStartTimestamp:I}=a(g),{customers:S,imported_from:E,is_importing:k,orders:y}=r(I),{imported:C,total:N}=S||{},{imported:f,total:T}=y||{},P=Boolean(o(I)||o(g));Boolean(!I&&!c&&!0===k)&&l();const A=Boolean(c&&!i&&!1===k&&(N>0||T>0)&&C===N&&f===T);let O={customersTotal:w,isError:P,ordersTotal:v};s&&(O={cacheNeedsClearing:i,customersProgress:C,customersTotal:(0,_.isNil)(N)?w:N,inProgress:c,isError:P,ordersProgress:f,ordersTotal:(0,_.isNil)(T)?v:T});const D=(e=>{let{cacheNeedsClearing:t,customersProgress:o,customersTotal:r,isError:a,inProgress:s,ordersProgress:i,ordersTotal:n}=e;return a?"error":s?(0,_.isNil)(o)||(0,_.isNil)(i)||(0,_.isNil)(r)||(0,_.isNil)(n)||t?"initializing":o0||n>0?o===r&&i===n?"finished":"ready":"nothing"})(O);return"initializing"===D&&u(),A&&d(),{...O,importDate:E,status:D}}))(A);class D extends a.Component{constructor(){super(...arguments),this.dateFormat=(0,s.__)("MM/DD/YYYY","woocommerce"),this.intervalId=-1,this.lastImportStopTimestamp=0,this.cacheNeedsClearing=!0,this.onImportFinished=this.onImportFinished.bind(this),this.onImportStarted=this.onImportStarted.bind(this),this.clearStatusAndTotalsCache=this.clearStatusAndTotalsCache.bind(this),this.stopImport=this.stopImport.bind(this),this.startStatusCheckInterval=this.startStatusCheckInterval.bind(this),this.cancelStatusCheckInterval=this.cancelStatusCheckInterval.bind(this)}startStatusCheckInterval(){this.intervalId<0&&(this.cacheNeedsClearing=!0,this.intervalId=setInterval((()=>{this.clearCache("getImportStatus")}),3*m.SECOND))}cancelStatusCheckInterval(){clearInterval(this.intervalId),this.intervalId=-1}clearCache(e,t){const{invalidateResolution:o,lastImportStartTimestamp:r}=this.props;o(e,["getImportStatus"===e?r:t]).then((()=>{this.cacheNeedsClearing=!1}))}stopImport(){this.cancelStatusCheckInterval(),this.lastImportStopTimestamp=Date.now()}onImportFinished(){const{debouncedSpeak:e}=this.props;this.cacheNeedsClearing||(e("Import complete"),this.stopImport())}onImportStarted(){const{notes:e,setImportStarted:t,updateNote:o}=this.props,r=e.find((e=>"wc-admin-historical-data"===e.name));r&&o(r.id,{status:"actioned"}),t(!0)}clearStatusAndTotalsCache(){const{selectedPeriod:e,skipChecked:t}=this.props,o=b(this.dateFormat,e,t);this.clearCache("getImportTotals",o),this.clearCache("getImportStatus")}isImportationInProgress(){const{lastImportStartTimestamp:e}=this.props;return void 0!==e&&void 0===this.lastImportStopTimestamp||e>this.lastImportStopTimestamp}render(){const{activeImport:e,createNotice:t,lastImportStartTimestamp:o,selectedPeriod:r,skipChecked:s}=this.props;return(0,a.createElement)(O,{activeImport:e,cacheNeedsClearing:this.cacheNeedsClearing,createNotice:t,dateFormat:this.dateFormat,inProgress:this.isImportationInProgress(),onImportFinished:this.onImportFinished,onImportStarted:this.onImportStarted,lastImportStartTimestamp:o,clearStatusAndTotalsCache:this.clearStatusAndTotalsCache,period:r,skipChecked:s,startStatusCheckInterval:this.startStatusCheckInterval,stopImport:this.stopImport})}}const R=(0,n.compose)([(0,c.withSelect)((e=>{const{getNotes:t}=e(m.NOTES_STORE_NAME),{getImportStarted:o,getFormSettings:r}=e(m.IMPORT_STORE_NAME),a=t({page:1,per_page:m.QUERY_DEFAULTS.pageSize,type:"update",status:"unactioned"}),{activeImport:s,lastImportStartTimestamp:i}=o(),{period:n,skipPrevious:c}=r();return{activeImport:s,lastImportStartTimestamp:i,notes:a,selectedPeriod:n,skipChecked:c}})),(0,c.withDispatch)((e=>{const{updateNote:t}=e(m.NOTES_STORE_NAME),{invalidateResolution:o,setImportStarted:r}=e(m.IMPORT_STORE_NAME);return{invalidateResolution:o,setImportStarted:r,updateNote:t}})),i.withSpokenMessages])(D),F=(0,n.compose)((0,c.withDispatch)((e=>{const{createNotice:t}=e("core/notices");return{createNotice:t}})))((e=>{let{createNotice:t,query:o}=e;const{settingsError:n,isRequesting:c,isDirty:u,persistSettings:h,updateAndPersistSettings:g,updateSettings:_,wcAdminSettings:w}=(0,m.useSettings)("wc_admin",["wcAdminSettings"]),I=(0,a.useRef)(!1);(0,a.useEffect)((()=>{function e(e){if(u)return e.returnValue=(0,s.__)("You have unsaved changes. If you proceed, they will be lost.","woocommerce"),e.returnValue}return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)}),[u]),(0,a.useEffect)((()=>{c?I.current=!0:!c&&I.current&&(n?t("error",(0,s.__)("There was an error saving your settings. Please try again.","woocommerce")):t("success",(0,s.__)("Your settings have been successfully saved.","woocommerce")),I.current=!1)}),[c,n,t]);const S=e=>{const{checked:t,name:o,type:r,value:a}=e.target,s={...w};s[o]="checkbox"===r?t?[...s[o],a]:s[o].filter((e=>e!==a)):a,_("wcAdminSettings",s)};return(0,a.createElement)(a.Fragment,null,(0,a.createElement)(l.SectionHeader,{title:(0,s.__)("Analytics settings","woocommerce")}),(0,a.createElement)("div",{className:"woocommerce-settings__wrapper"},Object.keys(p.vc).map((e=>(0,a.createElement)(v,(0,r.Z)({handleChange:S,value:w[e],key:e,name:e},p.vc[e])))),(0,a.createElement)("div",{className:"woocommerce-settings__actions"},(0,a.createElement)(i.Button,{isSecondary:!0,onClick:()=>{if(window.confirm((0,s.__)("Are you sure you want to reset all settings to default values?","woocommerce"))){const e=Object.keys(p.vc).reduce(((e,t)=>(e[t]=p.vc[t].defaultValue,e)),{});g("wcAdminSettings",e),(0,d.recordEvent)("analytics_settings_reset_defaults")}}},(0,s.__)("Reset defaults","woocommerce")),(0,a.createElement)(i.Button,{isPrimary:!0,isBusy:c,onClick:()=>{h(),(0,d.recordEvent)("analytics_settings_save",w),o.period=void 0,o.compare=void 0,o.before=void 0,o.after=void 0,o.interval=void 0,o.type=void 0,window.wpNavMenuUrlUpdate(o)}},(0,s.__)("Save settings","woocommerce")))),"true"===o.import?(0,a.createElement)(l.ScrollTo,{offset:"-56"},(0,a.createElement)(R,{createNotice:t})):(0,a.createElement)(R,{createNotice:t}))}))},17538:(e,t,o)=>{function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}o.d(t,{Z:()=>r})}}]);
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/core-profiler.js b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/core-profiler.js
index a8515e81..766d828b 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/core-profiler.js
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/core-profiler.js
@@ -1,2 +1,2 @@
/*! For license information please see core-profiler.js.LICENSE.txt */
-(globalThis.webpackChunk_wcAdmin_webpackJsonp=globalThis.webpackChunk_wcAdmin_webpackJsonp||[]).push([[1828],{73224:(e,t,o)=>{"use strict";o.d(t,{Z:()=>r});var i=o(69307),n=o(70444);const r=(0,i.createElement)(n.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,i.createElement)(n.Path,{d:"M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"}))},43896:(e,t,o)=>{"use strict";o.r(t),o.d(t,{CoreProfilerController:()=>Je,coreProfilerStateMachineDefinition:()=>We,default:()=>Fe,preFetchActions:()=>Ze});var i=o(69307),n=o(5031),r=o(47090),s=o(11122),a=o(55954),l=o(28226),c=o(50883),u=o(9818),g=o(10431),M=o(67221),m=o(73516),N=o(74617),p=o(17844),d=o.n(p),I=o(1718),y=o(65736),j=o(55609),L=o(75283),T=o(86020),D=o(83849),w=o.n(D);const E=e=>{let{className:t,title:o,subTitle:n}=e;return(0,i.createElement)("div",{className:w()("woocommerce-profiler-heading",t)},(0,i.createElement)("h1",{className:"woocommerce-profiler-heading__title"},o),n&&(0,i.createElement)("h2",{className:"woocommerce-profiler-heading__subtitle"},n))},_=()=>(0,i.createElement)("svg",{preserveAspectRatio:"xMidYMid",version:"1.1",viewBox:"0 0 256 153",xmlns:"http://www.w3.org/2000/svg",className:"wc-icon wc-icon__woo-logo"},(0,i.createElement)("path",{d:"m23.759 0h208.38c13.187 0 23.863 10.675 23.863 23.863v79.542c0 13.187-10.675 23.863-23.863 23.863h-74.727l10.257 25.118-45.109-25.118h-98.695c-13.187 0-23.863-10.675-23.863-23.863v-79.542c-0.10466-13.083 10.571-23.863 23.758-23.863z",fill:"#7f54b3"}),(0,i.createElement)("path",{d:"m14.578 21.75c1.4569-1.9772 3.6423-3.0179 6.5561-3.226 5.3073-0.41626 8.3252 2.0813 9.0537 7.4927 3.226 21.75 6.7642 40.169 10.511 55.259l22.79-43.395c2.0813-3.9545 4.6829-6.0358 7.8049-6.2439 4.5789-0.3122 7.3886 2.6016 8.5333 8.7415 2.6016 13.841 5.9317 25.6 9.8862 35.59 2.7057-26.433 7.2846-45.476 13.737-57.236 1.561-2.9138 3.8504-4.3707 6.8683-4.5789 2.3935-0.20813 4.5789 0.52033 6.5561 2.0813 1.9772 1.561 3.0179 3.5382 3.226 5.9317 0.10406 1.8732-0.20813 3.4341-1.0407 4.9951-4.0585 7.4927-7.3886 20.085-10.094 37.567-2.6016 16.963-3.5382 30.179-2.9138 39.649 0.20813 2.6016-0.20813 4.8911-1.2488 6.8683-1.2488 2.2894-3.122 3.5382-5.5154 3.7463-2.7057 0.20813-5.5154-1.0406-8.2211-3.8504-9.678-9.8862-17.379-24.663-22.998-44.332-6.7642 13.32-11.759 23.311-14.985 29.971-6.1398 11.759-11.343 17.795-15.714 18.107-2.8098 0.20813-5.2033-2.1854-7.2846-7.1805-5.3073-13.633-11.031-39.961-17.171-78.985-0.41626-2.7057 0.20813-5.0992 1.665-6.9724zm223.64 16.338c-3.7463-6.5561-9.2618-10.511-16.65-12.072-1.9772-0.41626-3.8504-0.62439-5.6195-0.62439-9.9902 0-18.107 5.2033-24.455 15.61-5.4114 8.8455-8.1171 18.628-8.1171 29.346 0 8.013 1.665 14.881 4.9951 20.605 3.7463 6.5561 9.2618 10.511 16.65 12.072 1.9772 0.41626 3.8504 0.62439 5.6195 0.62439 10.094 0 18.211-5.2033 24.455-15.61 5.4114-8.9496 8.1171-18.732 8.1171-29.45 0.10406-8.1171-1.665-14.881-4.9951-20.501zm-13.112 28.826c-1.4569 6.8683-4.0585 11.967-7.9089 15.402-3.0179 2.7057-5.8276 3.8504-8.4293 3.3301-2.4976-0.52033-4.5789-2.7057-6.1398-6.7642-1.2488-3.226-1.8732-6.452-1.8732-9.4699 0-2.6016 0.20813-5.2033 0.72846-7.5967 0.93659-4.2667 2.7057-8.4293 5.5154-12.384 3.4341-5.0992 7.0764-7.1805 10.823-6.452 2.4976 0.52033 4.5789 2.7057 6.1398 6.7642 1.2488 3.226 1.8732 6.452 1.8732 9.4699 0 2.7057-0.20813 5.3073-0.72846 7.7008zm-52.033-28.826c-3.7463-6.5561-9.3659-10.511-16.65-12.072-1.9772-0.41626-3.8504-0.62439-5.6195-0.62439-9.9902 0-18.107 5.2033-24.455 15.61-5.4114 8.8455-8.1171 18.628-8.1171 29.346 0 8.013 1.665 14.881 4.9951 20.605 3.7463 6.5561 9.2618 10.511 16.65 12.072 1.9772 0.41626 3.8504 0.62439 5.6195 0.62439 10.094 0 18.211-5.2033 24.455-15.61 5.4114-8.9496 8.1171-18.732 8.1171-29.45 0-8.1171-1.665-14.881-4.9951-20.501zm-13.216 28.826c-1.4569 6.8683-4.0585 11.967-7.9089 15.402-3.0179 2.7057-5.8276 3.8504-8.4293 3.3301-2.4976-0.52033-4.5789-2.7057-6.1398-6.7642-1.2488-3.226-1.8732-6.452-1.8732-9.4699 0-2.6016 0.20813-5.2033 0.72846-7.5967 0.93658-4.2667 2.7057-8.4293 5.5154-12.384 3.4341-5.0992 7.0764-7.1805 10.823-6.452 2.4976 0.52033 4.5789 2.7057 6.1398 6.7642 1.2488 3.226 1.8732 6.452 1.8732 9.4699 0.10406 2.7057-0.20813 5.3073-0.72846 7.7008z",fill:"#fff"})),S=e=>{let{className:t="",percent:o=0,color:n="#674399",bgcolor:r="var(--wp-admin-theme-color)"}=e;const s={backgroundColor:r},a={backgroundColor:n,width:`${o}%`,display:0===o?"none":"inherit"};return(0,i.createElement)("div",{className:`woocommerce-profiler-progress-bar ${t}`},(0,i.createElement)("div",{className:"woocommerce-profiler-progress-bar__container",style:s},(0,i.createElement)("div",{className:"woocommerce-profiler-progress-bar__filler",style:a})))},A=e=>{let{percentage:t=0,onSkip:o,skipText:n=(0,y.__)("Skip this step","woocommerce"),showProgress:r=!0,showLogo:s=!0,classNames:a={},progressBarColor:l="var(--wp-admin-theme-color)"}=e;return(0,i.createElement)("div",{className:w()("woocommerce-profiler-navigation-container",a)},r&&(0,i.createElement)(S,{className:"progress-bar",percent:t,color:l,bgcolor:"transparent"}),(0,i.createElement)("div",{className:"woocommerce-profiler-navigation"},(0,i.createElement)("div",{className:"woocommerce-profiler-navigation-col-left"},s&&(0,i.createElement)("span",{className:"woologo"},(0,i.createElement)(_,null))),(0,i.createElement)("div",{className:"woocommerce-profiler-navigation-col-right"},"function"==typeof o&&(0,i.createElement)(j.Button,{onClick:o,className:w()("woocommerce-profiler-navigation-skip-link",a.mobile?"mobile":""),isLink:!0},n))))};var O=o(23374),z=o(73224);const f=e=>{let{className:t,selected:o,title:n,name:r,value:s,onChange:a,subOptionsComponent:l=null}=e;const c=()=>{a(s)},u="woocommerce-"+s.replace(/_/g,"-");return(0,i.createElement)("div",{role:"radio",className:w()("woocommerce-profiler-choice-container",t),onClick:c,onKeyDown:e=>{"Enter"===e.key&&c()},"data-selected":o||null,tabIndex:0},(0,i.createElement)("div",{className:"woocommerce-profiler-choice"},(0,i.createElement)("input",{className:"woocommerce-profiler-choice-input",id:u,name:r,type:"radio",value:s,checked:!!o,onChange:c,"data-selected":o||null,tabIndex:-1}),(0,i.createElement)("label",{htmlFor:u,className:"choice__title"},n)),o&&l&&(0,i.createElement)("div",{className:"woocommerce-profiler-choice-sub-options"},l))},k=e=>{let{options:t,onSelect:o,selectedOptions:n=[],placeholder:r=(0,y.__)("Select platforms","woocommerce"),onOpenClose:s=(()=>{})}=e;return(0,i.createElement)(T.__experimentalSelectControl,{label:"",multiple:!0,__experimentalOpenMenuOnFocus:!0,readOnlyWhenClosed:!1,items:t,getFilteredItems:e=>e,selected:n,inputProps:{"aria-readonly":!0,"aria-label":(0,y.__)("Use up and down arrow keys to navigate","woocommerce")},onKeyDown:e=>{if(e.key.length<=1)return e.preventDefault(),!1},placeholder:n.length?"":r,stateReducer:(e,t)=>{const{changes:o,type:i}=t;switch(i){case T.selectControlStateChangeTypes.ControlledPropUpdatedSelectedItem:return{...o,inputValue:e.inputValue};case T.selectControlStateChangeTypes.ItemClick:return{...o,isOpen:!0,inputValue:e.inputValue,highlightedIndex:e.highlightedIndex};case T.selectControlStateChangeTypes.InputBlur:return e.isOpen&&t.selectItem?{...o,isOpen:!0}:o;default:return o}},onSelect:e=>{if(!e)return;const t=n.find((t=>t.value===e.value))?n.filter((t=>t.value!==e.value)):[...n,e];o(t)},onRemove:e=>o(n.filter((t=>t!==e)))},(e=>{let{selectedOptions:t,onOpenClose:o}=e;return e=>{let{items:n,highlightedIndex:r,isOpen:s,getItemProps:a,getMenuProps:l}=e;return(0,i.useEffect)((()=>{o(s)}),[s]),(0,i.createElement)(T.__experimentalSelectControlMenu,{isOpen:s,getMenuProps:l,scrollIntoViewOnOpen:!0},n.map(((e,o)=>{const n=t.includes(e);return(0,i.createElement)(T.__experimentalSelectControlMenuItem,{key:`${e.value}`,index:o,item:e,getItemProps:a,isActive:r===o,activeStyle:{backgroundColor:"#f6f7f7"}},(0,i.createElement)(j.CheckboxControl,{className:w()("core-profiler__checkbox",{"is-selected":n}),onChange:()=>{},checked:n,label:e.label}))})))}})({selectedOptions:n,onOpenClose:s}))},C=[{title:(0,y.__)("I'm just starting my business","woocommerce"),value:"im_just_starting_my_business"},{title:(0,y.__)("I'm already selling","woocommerce"),value:"im_already_selling"},{title:(0,y.__)("I'm setting up a store for a client","woocommerce"),value:"im_setting_up_a_store_for_a_client"}],b=[{label:(0,y.__)("Yes, I'm selling online","woocommerce"),value:"yes_im_selling_online",key:"yes_im_selling_online"},{label:(0,y.__)("No, I'm selling offline","woocommerce"),value:"no_im_selling_offline",key:"no_im_selling_offline"},{label:(0,y.__)("I'm selling both online and offline","woocommerce"),value:"im_selling_both_online_and_offline",key:"im_selling_both_online_and_offline"}],x=[{label:(0,y.__)("Amazon","woocommerce"),value:"amazon"},{label:(0,y.__)("Adobe Commerce","woocommerce"),value:"adobe_commerce"},{label:(0,y.__)("Big Cartel","woocommerce"),value:"big_cartel"},{label:(0,y.__)("Big Commerce","woocommerce"),value:"big_commerce"},{label:(0,y.__)("Ebay","woocommerce"),value:"ebay"},{label:(0,y.__)("Ecwid","woocommerce"),value:"ecwid"},{label:(0,y.__)("Etsy","woocommerce"),value:"etsy"},{label:(0,y.__)("Facebook Marketplace","woocommerce"),value:"facebook_marketplace"},{label:(0,y.__)("Google Shopping","woocommerce"),value:"google_shopping"},{label:(0,y.__)("Pinterest","woocommerce"),value:"pinterest"},{label:(0,y.__)("Shopify","woocommerce"),value:"shopify"},{label:(0,y.__)("Square","woocommerce"),value:"square"},{label:(0,y.__)("Squarespace","woocommerce"),value:"squarespace"},{label:(0,y.__)("Wix","woocommerce"),value:"wix"},{label:(0,y.__)("WordPress","woocommerce"),value:"wordpress"}];var h=o(61250),v=o(10530),P=o(7253),U=o(99196);const Q=U.memo(U.forwardRef(((e,t)=>{const{size:o=24,icon:i,className:n,title:r,...s}=e,a=o%18==0,l=`gridicons-${i}`,c=w()("gridicon",l,n,{"needs-offset":a&&v.iconsThatNeedOffset.includes(l),"needs-offset-x":a&&v.iconsThatNeedOffsetX.includes(l),"needs-offset-y":a&&v.iconsThatNeedOffsetY.includes(l)});return(0,h.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",className:c,height:o,width:o,ref:t,...s,children:[r&&(0,h.jsx)("title",{children:r}),(0,h.jsx)("use",{xlinkHref:`${P}#${l}`})]})})));Q.displayName="Gridicon";const Y=Q,G=({isError:e=!1,isWarning:t,isHidden:o,className:i,text:n,icon:r,id:s,children:a})=>{const l=w()(i,{"form-input-validation":!0,"is-warning":t,"is-error":e,"is-hidden":o}),c=e||t?"notice-outline":"checkmark";return(0,h.jsx)("div",{className:l,role:"alert",children:(0,h.jsxs)("span",{id:s,children:[(0,h.jsx)(Y,{size:24,icon:r||c})," ",n,a]})})};var Z=o(72456),R=o(22629),B=o(80834);const W=[void 0,"woocommerce","Site Title",""],J=[{label:(0,y.__)("Clothing and accessories","woocommerce"),key:"clothing_and_accessories"},{label:(0,y.__)("Health and beauty","woocommerce"),key:"health_and_beauty"},{label:(0,y.__)("Food and drink","woocommerce"),key:"food_and_drink"},{label:(0,y.__)("Home, furniture and garden","woocommerce"),key:"home_furniture_and_garden"},{label:(0,y.__)("Education and learning","woocommerce"),key:"education_and_learning"},{label:(0,y.__)("Electronics and computers","woocommerce"),key:"electronics_and_computers"},{label:(0,y.__)("Other","woocommerce"),key:"other"}],F={im_just_starting_my_business:(0,y.__)("What type of products or services do you plan to sell?","woocommerce"),im_already_selling:(0,y.__)("Which industry is your business in?","woocommerce"),im_setting_up_a_store_for_a_client:(0,y.__)("Which industry is your client's business in?","woocommerce")};var V=o(38811),H=o(62621),X=o(60784),q=o(77),K=o(24122);const $={title:(0,y.__)("Turning on the lights","woocommerce"),image:(0,i.createElement)("img",{src:V,alt:"loader-lightbulb"}),paragraphs:[{label:(0,y.__)("#FunWooFact: ","woocommerce"),text:(0,y.__)("The Woo team is made up of over 350 talented individuals, distributed across 30+ countries.","woocommerce")}]},ee={title:(0,y.__)("Extending your store's capabilities","woocommerce"),image:(0,i.createElement)("img",{src:X,alt:"loader-lightbulb"}),paragraphs:[{label:(0,y.__)("#FunWooFact: ","woocommerce"),text:(0,y.__)("Did you know that Woo powers almost 4 million stores worldwide? You’re in good company.","woocommerce")}]},te={title:(0,y.__)("Woo! Let's get your features ready","woocommerce"),image:(0,i.createElement)("img",{src:H,alt:"loader-developng"}),paragraphs:[{label:(0,y.__)("#FunWooFact: ","woocommerce"),text:(0,y.__)("Did you know that Woo was founded by two South Africans and a Norwegian? Here are three alternative ways to say “store” in those countries – Winkel, ivenkile, and butikk.","woocommerce")}]},oe={title:(0,y.__)("Opening the doors","woocommerce"),image:(0,i.createElement)("img",{src:q,alt:"loader-opening-the-doors"}),paragraphs:[{label:(0,y.__)("#FunWooFact: ","woocommerce"),text:(0,y.__)("Our favorite color is purple ","woocommerce"),element:(0,i.createElement)("img",{src:K,alt:"loader-hearticon",className:"loader-hearticon"})}]},ie=e=>{var t,o,n,r;let{context:s}=e;const a=(e=>{switch(e){case"plugins":return[te,ee,$];case"skippedGuidedSetup":return[$,oe];default:return[$]}})(null!==(t=s.loader.useStages)&&void 0!==t?t:"default")[null!==(o=s.loader.stageIndex)&&void 0!==o?o:0];return(0,i.createElement)(Z.Loader,{className:s.loader.className},(0,i.createElement)(Z.Loader.Layout,null,(0,i.createElement)(Z.Loader.Illustration,null,a.image),(0,i.createElement)(Z.Loader.Title,null,a.title),(0,i.createElement)(Z.Loader.ProgressBar,{progress:null!==(n=null===(r=s.loader)||void 0===r?void 0:r.progress)&&void 0!==n?n:0}),(0,i.createElement)(Z.Loader.Sequence,{interval:3e3},a.paragraphs.map(((e,t)=>(0,i.createElement)(Z.Loader.Subtext,{key:t},(0,i.createElement)("b",null,null==e?void 0:e.label),null==e?void 0:e.text,null==e?void 0:e.element))))))};var ne=o(32008);const re=e=>{let{installed:t=!1,icon:o,title:n,onChange:r,checked:s=!1,description:a,learnMoreLink:l}=e;return(0,i.createElement)("div",{className:"woocommerce-profiler-plugins-plugin-card"},(0,i.createElement)("div",{className:"woocommerce-profiler-plugin-card-top"},!t&&(0,i.createElement)(j.CheckboxControl,{className:"core-profiler__checkbox",checked:s,onChange:r||(()=>{})}),o,(0,i.createElement)("div",{className:w()("woocommerce-profiler-plugins-plugin-card-text-header",{installed:t})},(0,i.createElement)("h3",null,n),t&&(0,i.createElement)("span",null,(0,y.__)("Installed","woocommerce")))),(0,i.createElement)("div",{className:w()("woocommerce-profiler-plugins-plugin-card-text",{"smaller-margin-left":t})},(0,i.createElement)("p",{dangerouslySetInnerHTML:(0,ne.ZP)(a)}),l))};var se,ae=o(73463);const le=((null===(se=(0,ae.O3)("locale"))||void 0===se?void 0:se.siteLocale)||"en_US").replace("_","-"),ce=e=>new Intl.ListFormat(le,{style:"long",type:"conjunction"}).formatToParts(e);var ue=o(34374);const{pure:ge}=a,Me=(0,s.C)({id:"plugin-installer",predictableActionArguments:!0,initial:"installing",context:{selectedPlugins:[],pluginsAvailable:[],pluginsInstallationQueue:[],installedPlugins:[],startTime:0,installationDuration:0,errors:[]},states:{installing:{initial:"installer",entry:["populateDefaults","assignPluginsInstallationQueue","assignStartTime"],after:{INSTALLATION_TIMEOUT:"timedOut"},states:{installer:{initial:"installing",states:{installing:{invoke:{src:"installPlugin",onDone:{actions:["assignInstallationSuccessDetails"],target:"removeFromQueue"},onError:{actions:"assignInstallationErrorDetails",target:"removeFromQueue"}}},removeFromQueue:{entry:["removePluginFromQueue","updateParentWithPluginProgress"],always:[{target:"installing",cond:"hasPluginsToInstall"},{target:"#installation-finished"}]}}}}},finished:{id:"installation-finished",entry:["assignInstallationDuration"],always:[{target:"reportErrors",cond:"hasErrors"},{target:"reportSuccess"}]},timedOut:{entry:["assignInstallationDuration"],invoke:{src:"queueRemainingPluginsAsync",onDone:{target:"reportSuccess"}}},reportErrors:{entry:"updateParentWithInstallationErrors"},reportSuccess:{entry:"updateParentWithInstallationSuccess"}}},{delays:{INSTALLATION_TIMEOUT:3e4},actions:{populateDefaults:(0,n.f0)({installedPlugins:[],errors:[],startTime:0,installationDuration:0}),assignPluginsInstallationQueue:(0,n.f0)({pluginsInstallationQueue:e=>e.selectedPlugins.slice().sort(((t,o)=>{var i,n;const r=e.pluginsAvailable.find((e=>e.key===t)),s=e.pluginsAvailable.find((e=>e.key===o));return(null!==(i=null==r?void 0:r.install_priority)&&void 0!==i?i:99)-(null!==(n=null==s?void 0:s.install_priority)&&void 0!==n?n:99)}))}),assignStartTime:(0,n.f0)({startTime:()=>window.performance.now()}),assignInstallationDuration:(0,n.f0)({installationDuration:e=>window.performance.now()-e.startTime}),assignInstallationSuccessDetails:(0,n.f0)({installedPlugins:(e,t)=>{const o=e.pluginsInstallationQueue[0];return[...e.installedPlugins,{plugin:o,installTime:t.data.data.install_time[o]||0}]}}),assignInstallationErrorDetails:(0,n.f0)({errors:(e,t)=>[...e.errors,{plugin:e.pluginsInstallationQueue[0],error:t.data.data.message}]}),removePluginFromQueue:(0,n.f0)({pluginsInstallationQueue:e=>e.pluginsInstallationQueue.slice(1)}),updateParentWithPluginProgress:ge((e=>(0,n.lj)({type:"PLUGIN_INSTALLED_AND_ACTIVATED",payload:{pluginsCount:e.selectedPlugins.length,installedPluginIndex:e.selectedPlugins.length-e.pluginsInstallationQueue.length}}))),updateParentWithInstallationErrors:(0,n.lj)((e=>({type:"PLUGINS_INSTALLATION_COMPLETED_WITH_ERRORS",payload:{errors:e.errors}}))),updateParentWithInstallationSuccess:(0,n.lj)((e=>({type:"PLUGINS_INSTALLATION_COMPLETED",payload:{installationCompletedResult:{installedPlugins:e.installedPlugins,totalTime:e.installationDuration}}})))},guards:{hasErrors:e=>e.errors.length>0,hasPluginsToInstall:e=>e.pluginsInstallationQueue.length>0},services:{installPlugin:e=>(0,u.dispatch)(M.PLUGINS_STORE_NAME).installAndActivatePlugins([e.pluginsInstallationQueue[0]]),queueRemainingPluginsAsync:e=>(0,u.dispatch)(M.ONBOARDING_STORE_NAME).installAndActivatePluginsAsync(e.pluginsInstallationQueue)}}),me=()=>(0,i.createElement)(i.Fragment,null,(0,i.createElement)("div",{className:"woocommerce-profile-wizard__spinner","data-testid":"core-profiler-loading-screen"},(0,i.createElement)(j.Spinner,null)));var Ne=o(14599);const pe={recordTracksStepViewed:(e,t,o)=>{let{action:i}=o;const{step:n}=i;(0,Ne.recordEvent)("coreprofiler_step_view",{step:n,wc_version:(0,N.getSetting)("wcVersion")})},recordTracksStepSkipped:(e,t,o)=>{let{action:i}=o;const{step:n}=i;(0,Ne.recordEvent)(`coreprofiler_${n}_skip`)},recordTracksIntroCompleted:()=>{(0,Ne.recordEvent)("coreprofiler_step_complete",{step:"intro_opt_in",wc_version:(0,N.getSetting)("wcVersion")})},recordTracksUserProfileCompleted:(e,t)=>{(0,Ne.recordEvent)("coreprofiler_step_complete",{step:"user_profile",wc_version:(0,N.getSetting)("wcVersion")}),(0,Ne.recordEvent)("coreprofiler_user_profile",{business_choice:t.payload.userProfile.businessChoice,selling_online_answer:t.payload.userProfile.sellingOnlineAnswer,selling_platforms:t.payload.userProfile.sellingPlatforms?t.payload.userProfile.sellingPlatforms.join():null})},recordTracksSkipBusinessLocationCompleted:()=>{(0,Ne.recordEvent)("coreprofiler_step_complete",{step:"skip_business_location",wc_version:(0,N.getSetting)("wcVersion")})},recordTracksBusinessInfoCompleted:(e,t)=>{(0,Ne.recordEvent)("coreprofiler_step_complete",{step:"business_info",wc_version:(0,N.getSetting)("wcVersion")}),(0,Ne.recordEvent)("coreprofiler_business_info",{business_name_filled:-1===W.findIndex((e=>e===t.payload.storeName)),industry:t.payload.industry,store_location_previously_set:e.onboardingProfile.is_store_country_set||!1,geolocation_success:void 0!==e.geolocatedLocation,geolocation_overruled:t.payload.geolocationOverruled})},recordTracksPluginsLearnMoreLinkClicked:(e,t,o)=>{let{action:i}=o;const{step:n}=i;(0,Ne.recordEvent)(`coreprofiler_${n}_learn_more_link_clicked`,{plugin:t.payload.plugin,link:t.payload.learnMoreLink})},recordFailedPluginInstallations:(e,t)=>{(0,Ne.recordEvent)("coreprofiler_store_extensions_installed_and_activated",{success:!1,failed_extensions:t.payload.errors.map((e=>(0,ue.br)(e.plugin)))})},recordSuccessfulPluginInstallation:(e,t)=>{const o=t.payload.installationCompletedResult,i={success:!0,installed_extensions:o.installedPlugins.map((e=>(0,ue.br)(e.plugin))),total_time:(0,ue.Jm)(o.totalTime)};for(const e of o.installedPlugins)i["install_time_"+(0,ue.br)(e.plugin)]=(0,ue.Jm)(e.installTime);(0,Ne.recordEvent)("coreprofiler_store_extensions_installed_and_activated",i)},recordTracksPluginsInstallationRequest:(e,t)=>{(0,Ne.recordEvent)("coreprofiler_store_extensions_continue",{shown:t.payload.pluginsShown||[],selected:t.payload.pluginsSelected||[],unselected:t.payload.pluginsUnselected||[]})},recordTracksIsEmailChanged:(e,t)=>{let o,i;if(e.onboardingProfile.store_email)o="onboarding_profile_store_email",i=t.payload.storeEmailAddress!==e.onboardingProfile.store_email;else if(e.currentUserEmail)o="current_user_email",i=t.payload.storeEmailAddress!==e.currentUserEmail;else{var n;o="was_empty",i=(null===(n=t.payload.storeEmailAddress)||void 0===n?void 0:n.length)>0}(0,Ne.recordEvent)("coreprofiler_email_marketing",{opt_in:t.payload.isOptInMarketing,email_field_prefilled_source:o,email_field_modified:i})}};var de=o(82580);const Ie=(0,n.f0)({optInDataSharing:(e,t)=>"no"!==t.data}),ye=(0,n.f0)({businessInfo:(e,t)=>({...e.businessInfo,storeName:W.includes(t.data)?void 0:t.data})}),je=(0,n.f0)({businessInfo:(e,t)=>({...e.businessInfo,location:t.data})}),Le=(0,n.f0)({spawnGetCountriesRef:()=>(0,r.Cs)((()=>(0,u.resolveSelect)(M.COUNTRIES_STORE_NAME).getCountries()),"core-profiler-prefetch-countries")}),Te=(0,n.f0)({spawnPrefetchOptionsRef:(e,t,o)=>{let{action:i}=o;(0,r.Cs)((()=>Promise.all([i.options.map((e=>(0,u.resolveSelect)(M.OPTIONS_STORE_NAME).getOption(e)))])),"core-profiler-prefetch-options")}}),De=(0,n.f0)({countries:(e,t)=>t.data.reduce(((e,t)=>{if(!t.states.length)return e.push({key:t.code,label:(0,R.decodeEntities)(t.name)}),e;const o=t.states.map((e=>({key:t.code+":"+e.code,label:(0,R.decodeEntities)(t.name)+" — "+(0,R.decodeEntities)(e.name)})));return e.push(...o),e}),[])}),we=(0,n.f0)({userProfile:(e,t)=>{if(!t.data)return{};const{business_choice:o,selling_online_answer:i,selling_platforms:n,...r}=t.data;return{...r,businessChoice:o,sellingOnlineAnswer:i,sellingPlatforms:n}}}),Ee=(0,n.f0)({currentUserEmail:(e,t)=>{if(t.data&&t.data.length>0&&"wordpress@example.com"!==t.data)return t.data}}),_e=(0,n.f0)({onboardingProfile:(e,t)=>t.data}),Se=async e=>{if(e.optInDataSharing)return(0,u.resolveSelect)(M.COUNTRIES_STORE_NAME).geolocate()},Ae=(0,n.f0)({spawnGeolocationRef:e=>(0,r.Cs)((()=>Se(e)),"core-profiler-prefetch-geolocation")}),Oe=(0,n.f0)({geolocatedLocation:(e,t)=>t.data}),ze=(0,n.f0)({spawnUpdateOnboardingProfileOptionRef:e=>(0,r.Cs)((()=>(e=>{const{businessChoice:t,sellingOnlineAnswer:o,sellingPlatforms:i}=e.userProfile;return(0,u.dispatch)(M.OPTIONS_STORE_NAME).updateOptions({woocommerce_onboarding_profile:{...e.onboardingProfile,business_choice:t,selling_online_answer:o,selling_platforms:i}})})(e)),"update-onboarding-profile")}),fe=async e=>{const{general:t={}}=await(0,u.resolveSelect)(M.SETTINGS_STORE_NAME).getSettings("general"),o=(0,de.so)(e),{currencySymbols:i={},localeInfo:n={}}=(0,ae.O3)("onboarding",{}),r=d()().getDataForCountry(o,n,i);if(0!==Object.keys(r).length)return(0,u.dispatch)(M.SETTINGS_STORE_NAME).updateAndPersistSettingsForGroup("general",{general:{...t,woocommerce_currency:r.code,woocommerce_currency_pos:r.symbolPosition,woocommerce_price_thousand_sep:r.thousandSeparator,woocommerce_price_decimal_sep:r.decimalSeparator,woocommerce_price_num_decimals:r.precision}})},ke=(0,n.f0)({businessInfo:(e,t)=>({...e.businessInfo,location:t.payload.storeLocation})}),Ce=(0,n.f0)({userProfile:(e,t)=>t.payload.userProfile}),be=async(e,t)=>{const o=await(0,u.resolveSelect)(M.OPTIONS_STORE_NAME).getOption("woocommerce_onboarding_profile");return await fe(t.payload.storeLocation),(0,u.dispatch)(M.OPTIONS_STORE_NAME).updateOptions({blogname:t.payload.storeName,woocommerce_default_country:t.payload.storeLocation,woocommerce_onboarding_profile:{...o,is_store_country_set:!0,industry:[t.payload.industry],is_agree_marketing:t.payload.isOptInMarketing,store_email:t.payload.storeEmailAddress.length>0?t.payload.storeEmailAddress:null}})},xe=(0,n.f0)({persistBusinessInfoRef:(e,t)=>(0,r.Cs)((()=>be(0,t)),"core-profiler-update-business-info")}),he=e=>new Promise((t=>{setTimeout(t,e)})),ve=(0,n.f0)({optInDataSharing:(e,t)=>t.payload.optInDataSharing}),Pe=(0,n.f0)({isJetpackConnectedRef:()=>(0,r.Cs)((()=>(0,u.resolveSelect)(M.PLUGINS_STORE_NAME).isJetpackConnected()),"core-profiler-prefetch-is-jetpack-connected")}),Ue=(0,n.f0)({jetpackAuthUrlRef:()=>(0,r.Cs)((()=>(0,u.resolveSelect)(M.ONBOARDING_STORE_NAME).getJetpackAuthUrl({redirectUrl:(0,N.getAdminLink)("admin.php?page=wc-admin"),from:"woocommerce-core-profiler"})),"core-profiler-prefetch-jetpack-auth-url")}),Qe=(0,n.f0)({extensionsRef:()=>(0,r.Cs)((()=>(0,u.resolveSelect)(M.ONBOARDING_STORE_NAME).getFreeExtensions()),"core-profiler-prefetch-extensions")}),Ye=(0,n.f0)({pluginsAvailable:(e,t)=>t.data}),Ge=(0,n.f0)({pluginsSelected:(e,t)=>t.payload.pluginsSelected.map(ue.V7)}),Ze={preFetchGetPlugins:Qe,preFetchGetCountries:Le,preFetchGeolocation:Ae,preFetchOptions:Te,preFetchIsJetpackConnected:Pe,preFetchJetpackAuthUrl:Ue},Re={...Ze,...pe,handlePlugins:Ye,updateQueryStep:(e,t,o)=>{let{action:i}=o;const{step:n}=(0,g.getQuery)();i.step!==n&&(0,g.updateQueryString)({step:i.step})},handleTrackingOption:Ie,handleGeolocation:Oe,handleStoreNameOption:ye,handleStoreCountryOption:je,assignOptInDataSharing:ve,assignStoreLocation:ke,assignPluginsSelected:Ge,assignUserProfile:Ce,handleCountries:De,handleOnboardingProfileOption:we,assignOnboardingProfile:_e,assignCurrentUserEmail:Ee,persistBusinessInfo:xe,spawnUpdateOnboardingProfileOption:ze,redirectToWooHome:()=>{window.location.href=(0,g.getNewPath)({},"/",{})},redirectToJetpackAuthPage:(e,t)=>{const o=new URL(t.data.url);o.searchParams.set("installed_ext_success","1");const i=e.pluginsSelected.find((e=>"jetpack"===e||"jetpack-boost"===e));if(i){const e="jetpack"===i?"jetpack-ai":"jetpack-boost";o.searchParams.set("plugin_name",e)}window.location.href=o.toString()}},Be={getAllowTrackingOption:async()=>(0,u.resolveSelect)(M.OPTIONS_STORE_NAME).getOption("woocommerce_allow_tracking"),getStoreNameOption:async()=>(0,u.resolveSelect)(M.OPTIONS_STORE_NAME).getOption("blogname"),getStoreCountryOption:async()=>(0,u.resolveSelect)(M.OPTIONS_STORE_NAME).getOption("woocommerce_default_country"),getCountries:async()=>(0,u.resolveSelect)(M.COUNTRIES_STORE_NAME).getCountries(),getGeolocation:Se,getOnboardingProfileOption:async()=>(0,u.resolveSelect)(M.OPTIONS_STORE_NAME).getOption("woocommerce_onboarding_profile"),getCurrentUserEmail:async()=>{const e=await(0,u.resolveSelect)(M.USER_STORE_NAME).getCurrentUser();return null==e?void 0:e.email},getPlugins:async()=>{var e;return(0,u.dispatch)(M.ONBOARDING_STORE_NAME).invalidateResolution("getFreeExtensions"),(null===(e=(await(0,u.resolveSelect)(M.ONBOARDING_STORE_NAME).getFreeExtensions()).find((e=>"obw/core-profiler"===e.key)))||void 0===e?void 0:e.plugins)||[]},browserPopstateHandler:()=>e=>{const t=()=>{e("EXTERNAL_URL_UPDATE")};return window.addEventListener("popstate",t),()=>{window.removeEventListener("popstate",t)}},updateBusinessInfo:be,updateTrackingOption:async e=>{await new Promise((t=>{e.optInDataSharing&&"function"==typeof window.wcTracks.enable?window.wcTracks.enable((()=>{(0,m.initializeExPlat)(),t()})):(e.optInDataSharing||(window.wcTracks.isEnabled=!1),t())}));const t=e.optInDataSharing?"yes":"no";(0,u.dispatch)(M.OPTIONS_STORE_NAME).updateOptions({woocommerce_allow_tracking:t})}},We=(0,s.C)({id:"coreProfiler",initial:"navigate",predictableActionArguments:!0,invoke:{src:"browserPopstateHandler"},on:{EXTERNAL_URL_UPDATE:{target:"navigate"}},context:{optInDataSharing:!1,userProfile:{skipped:!0},geolocatedLocation:void 0,businessInfo:{storeName:void 0,industry:void 0,storeCountryPreviouslySet:!1,location:"US:CA"},countries:[],pluginsAvailable:[],pluginsInstallationErrors:[],pluginsSelected:[],loader:{},onboardingProfile:{},jetpackAuthUrl:void 0,currentUserEmail:void 0},states:{navigate:{always:[{target:"#introOptIn",cond:{type:"hasStepInUrl",step:"intro-opt-in"}},{target:"#userProfile",cond:{type:"hasStepInUrl",step:"user-profile"}},{target:"#businessInfo",cond:{type:"hasStepInUrl",step:"business-info"}},{target:"#plugins",cond:{type:"hasStepInUrl",step:"plugins"}},{target:"#skipGuidedSetup",cond:{type:"hasStepInUrl",step:"skip-guided-setup"}},{target:"introOptIn"}]},introOptIn:{id:"introOptIn",initial:"preIntroOptIn",states:{preIntroOptIn:{entry:["preFetchGetPlugins","preFetchGetCountries",{type:"preFetchOptions",options:["blogname","woocommerce_onboarding_profile","woocommerce_default_country"]}],type:"parallel",states:{trackingOption:{initial:"fetching",states:{fetching:{invoke:{src:"getAllowTrackingOption",onDone:[{actions:["handleTrackingOption"],target:"done"}],onError:{target:"done"}}},done:{type:"final"}}}},onDone:{target:"introOptIn"},meta:{progress:0}},introOptIn:{on:{INTRO_COMPLETED:{target:"postIntroOptIn",actions:["assignOptInDataSharing"]},INTRO_SKIPPED:{target:"#skipGuidedSetup",actions:["assignOptInDataSharing","updateTrackingOption"]}},meta:{progress:20,component:e=>{let{sendEvent:t,navigationProgress:o}=e;const[n,r]=(0,i.useState)(!0);return(0,i.createElement)("div",{className:"woocommerce-profiler-intro-opt-in","data-testid":"core-profiler-intro-opt-in-screen"},(0,i.createElement)(A,{percentage:o,skipText:(0,y.__)("Skip guided setup","woocommerce"),onSkip:()=>t({type:"INTRO_SKIPPED",payload:{optInDataSharing:!1}})}),(0,i.createElement)("div",{className:"woocommerce-profiler-page__content woocommerce-profiler-intro-opt-in__content"},(0,i.createElement)("div",{className:"woocommerce-profiler-welcome-image"}),(0,i.createElement)(E,{title:(0,y.__)("Welcome to Woo!","woocommerce"),subTitle:(0,L.Z)({mixedString:(0,y.__)("It's great to have you here with us! We'll be guiding you through the setup process – first, answer a few questions to tailor your experience.","woocommerce"),components:{br:(0,i.createElement)("br",null)}})}),(0,i.createElement)(j.Button,{className:"woocommerce-profiler-setup-store__button",variant:"primary",onClick:()=>t({type:"INTRO_COMPLETED",payload:{optInDataSharing:n}})},(0,y.__)("Set up my store","woocommerce")),(0,i.createElement)("div",{className:"woocommerce-profiler-intro-opt-in__footer"},(0,i.createElement)(j.CheckboxControl,{className:"core-profiler__checkbox",label:(0,L.Z)({mixedString:(0,y.__)("I agree to share my data to tailor my store setup experience and get more relevant content (WooCommerce will never rent or sell your data, and you can opt out at any time in WooCommerce settings. {{link}}Learn more about usage tracking.{{/link}})","woocommerce"),components:{link:(0,i.createElement)(T.Link,{href:"https://woo.com/usage-tracking?utm_medium=product",target:"_blank",type:"external"})}}),checked:n,onChange:r}))))}}},postIntroOptIn:{invoke:{src:"updateTrackingOption",onDone:{actions:["recordTracksIntroCompleted"],target:"#userProfile"}}}}},userProfile:{id:"userProfile",initial:"preUserProfile",states:{preUserProfile:{invoke:{src:"getOnboardingProfileOption",onDone:[{actions:["handleOnboardingProfileOption","assignOnboardingProfile"],target:"userProfile"}],onError:{target:"userProfile"}}},userProfile:{meta:{progress:40,component:e=>{let{sendEvent:t,navigationProgress:o,context:n}=e;const[r,s]=(0,i.useState)(n.userProfile.businessChoice||"im_just_starting_my_business"),[a,l]=(0,i.useState)(n.userProfile.sellingOnlineAnswer||null),[c,u]=(0,i.useState)(n.userProfile.sellingPlatforms||null),[g,M]=(0,i.useState)(!1);return(0,i.createElement)("div",{className:"woocommerce-profiler-user-profile","data-testid":"core-profiler-user-profile"},(0,i.createElement)(A,{percentage:o,skipText:(0,y.__)("Skip this step","woocommerce"),onSkip:()=>t({type:"USER_PROFILE_SKIPPED",payload:{userProfile:{skipped:!0}}})}),(0,i.createElement)("div",{className:w()("woocommerce-profiler-page__content woocommerce-profiler-user-profile__content",{"is-platform-selector-open":g})},(0,i.createElement)(E,{className:"woocommerce-profiler__stepper-heading",title:(0,y.__)("Which one of these best describes you?","woocommerce"),subTitle:(0,y.__)("Let us know where you are in your commerce journey so that we can tailor your Woo experience for you.","woocommerce")}),(0,i.createElement)("form",{className:"woocommerce-user-profile-choices"},(0,i.createElement)("fieldset",null,(0,i.createElement)("legend",{className:"screen-reader-text"},(0,y.__)("Which one of these best describes you?","woocommerce")),C.map((e=>{let{title:t,value:o}=e;return(0,i.createElement)(f,{key:o,name:"user-profile-choice",title:t,selected:r===o,value:o,onChange:e=>{s(e)},subOptionsComponent:"im_already_selling"===o?(0,i.createElement)(i.Fragment,null,(0,i.createElement)("div",{className:"woocommerce-profiler-selling-online-question"},(0,i.createElement)("p",{className:"woocommerce-profiler-question-label"},(0,y.__)("Are you selling online?","woocommerce")),(0,i.createElement)(T.SelectControl,{className:"woocommerce-profiler-select-control__selling-online-question",instanceId:1,label:(0,y.__)("Select an option","woocommerce"),autoComplete:"new-password",options:b,excludeSelectedOptions:!1,help:(0,i.createElement)(O.Z,{icon:z.Z}),onChange:e=>{l(e)},multiple:!1,selected:a})),a&&["yes_im_selling_online","im_selling_both_online_and_offline"].includes(a)&&(0,i.createElement)("div",{className:"woocommerce-profiler-selling-platform"},(0,i.createElement)("p",{className:"woocommerce-profiler-question-label"},(0,y.__)("Which platform(s) are you currently using?","woocommerce")),(0,i.createElement)(k,{options:x,selectedOptions:x.filter((e=>null==c?void 0:c.includes(e.value))),onSelect:e=>{u(e.map((e=>e.value)))},onOpenClose:M}))):null})})))),(0,i.createElement)("div",{className:"woocommerce-profiler-button-container"},(0,i.createElement)(j.Button,{className:"woocommerce-profiler-button",variant:"primary",onClick:()=>{t({type:"USER_PROFILE_COMPLETED",payload:{userProfile:{businessChoice:r,sellingOnlineAnswer:"im_already_selling"===r?a:null,sellingPlatforms:"im_already_selling"===r?c:null}}})}},(0,y.__)("Continue","woocommerce")))))}},entry:[{type:"recordTracksStepViewed",step:"user_profile"},{type:"updateQueryStep",step:"user-profile"},"preFetchGeolocation"],on:{USER_PROFILE_COMPLETED:{target:"postUserProfile",actions:["assignUserProfile"]},USER_PROFILE_SKIPPED:{target:"postUserProfile",actions:["assignUserProfile"]}},exit:a.choose([{cond:(e,t)=>"USER_PROFILE_COMPLETED"===t.type,actions:"recordTracksUserProfileCompleted"},{cond:(e,t)=>"USER_PROFILE_SKIPPED"===t.type,actions:[{type:"recordTracksStepSkipped",step:"user_profile"}]}])},postUserProfile:{entry:["spawnUpdateOnboardingProfileOption"],always:{target:"#businessInfo"}}}},businessInfo:{id:"businessInfo",initial:"preBusinessInfo",entry:[{type:"updateQueryStep",step:"business-info"}],states:{preBusinessInfo:{type:"parallel",states:{geolocation:{initial:"checkDataOptIn",states:{checkDataOptIn:{invoke:{src:"getAllowTrackingOption",onDone:[{actions:["handleTrackingOption"],target:"fetching"}],onError:{target:"done"}}},fetching:{invoke:{src:"getGeolocation",onDone:{target:"done",actions:"handleGeolocation"},onError:{target:"done"}}},done:{type:"final"}}},storeCountryOption:{initial:"fetching",states:{fetching:{invoke:{src:"getStoreCountryOption",onDone:[{actions:["handleStoreCountryOption"],target:"done"}],onError:{target:"done"}}},done:{type:"final"}}},onboardingProfileOption:{initial:"fetching",states:{fetching:{invoke:{src:"getOnboardingProfileOption",onDone:[{actions:["assignOnboardingProfile"],target:"done"}],onError:{target:"done"}}},done:{type:"final"}}},storeNameOption:{initial:"fetching",states:{fetching:{invoke:{src:"getStoreNameOption",onDone:[{actions:["handleStoreNameOption"],target:"done"}],onError:{target:"done"}}},done:{type:"final"}}},countries:{initial:"fetching",states:{fetching:{invoke:{src:"getCountries",onDone:{target:"done",actions:"handleCountries"}}},done:{type:"final"}}},currentUserEmail:{initial:"fetching",states:{fetching:{invoke:{src:"getCurrentUserEmail",onDone:{target:"done",actions:["assignCurrentUserEmail"]},onError:{target:"done"}}},done:{type:"final"}}}},onDone:{target:"businessInfo"}},businessInfo:{meta:{progress:60,component:e=>{let{context:t,navigationProgress:o,sendEvent:n}=e;const{geolocatedLocation:r,userProfile:{businessChoice:s},businessInfo:a,countries:l,onboardingProfile:{is_store_country_set:c,industry:u,business_choice:g,is_agree_marketing:M,store_email:m},currentUserEmail:N}=t,[p,d]=(0,i.useState)(a.storeName||""),[I,L]=(0,i.useState)({key:"",label:""});(0,i.useEffect)((()=>{if(c){const e=l.find((e=>e.key===a.location));L(e||{key:"",label:""})}}),[a.location,l,c]);const[D,_]=(0,i.useState)({key:"",label:""});(0,i.useEffect)((()=>{if(r){const e=(0,Z.findCountryOption)(l,r);e&&(_(e),c||L(e))}}),[l,c,r]);const S=r&&(0,Z.getCountry)(I.key)!==(0,Z.getCountry)(D.key),[f,k]=(0,i.useState)(u?J.find((e=>e.key===u[0])):void 0),C=(0,y.__)("Select country/region","woocommerce"),b=F[s||g||"im_just_starting_my_business"],[x,h]=(0,i.useState)(!1),[v,P]=(0,i.useState)(!1),[U,Q]=(0,i.useState)(!1),[Y,W]=(0,i.useState)(m||N||""),[V,H]=(0,i.useState)(M||!1),[X,q]=(0,i.useState)(!1);return(0,i.useEffect)((()=>{if(X){const e=B.z.string().email().safeParse(Y);Q(V&&!e.success),q(!1)}}),[V,X,Y]),(0,i.createElement)("div",{className:"woocommerce-profiler-business-information","data-testid":"core-profiler-business-information"},(0,i.createElement)(A,{percentage:o}),(0,i.createElement)("div",{className:"woocommerce-profiler-page__content woocommerce-profiler-business-information__content"},(0,i.createElement)(E,{className:"woocommerce-profiler__stepper-heading",title:(0,y.__)("Tell us a bit about your store","woocommerce"),subTitle:(0,y.__)("We'll use this information to help you set up payments, shipping, and taxes, as well as recommending the best theme for your store.","woocommerce")}),(0,i.createElement)("form",{className:"woocommerce-profiler-business-information-form",autoComplete:"off"},(0,i.createElement)(j.TextControl,{className:"woocommerce-profiler-business-info-store-name",onChange:e=>{d(e)},value:(0,R.decodeEntities)(p),label:(0,i.createElement)(i.Fragment,null,(0,y.__)("Give your store a name","woocommerce")),placeholder:(0,y.__)("Ex. My awesome store","woocommerce")}),(0,i.createElement)("p",{className:"woocommerce-profiler-question-subtext"},(0,y.__)("Don't worry — you can always change it later!","woocommerce")),(0,i.createElement)("p",{className:"woocommerce-profiler-question-label"},b),(0,i.createElement)(T.SelectControl,{className:"woocommerce-profiler-select-control__industry",instanceId:1,placeholder:(0,y.__)("Select an industry","woocommerce"),label:(0,y.__)("Select an industry","woocommerce"),options:J,excludeSelectedOptions:!1,help:(0,i.createElement)(O.Z,{icon:z.Z}),onChange:e=>{e.length&&k(e[0])},selected:f?[f]:[],showAllOnFocus:!0,isSearchable:!0}),(0,i.createElement)("p",{className:"woocommerce-profiler-question-label"},(0,y.__)("Where is your store located?","woocommerce"),(0,i.createElement)("span",{className:"woocommerce-profiler-question-required"},"*")),(0,i.createElement)(T.SelectControl,{className:"woocommerce-profiler-select-control__country",instanceId:2,placeholder:C,label:""===I.key?C:"",getSearchExpression:e=>new RegExp("(^"+e+"| — ("+e+"))","i"),options:l,excludeSelectedOptions:!1,help:(0,i.createElement)(O.Z,{icon:z.Z}),onChange:e=>{e.length&&L(e[0])},selected:I?[I]:[],showAllOnFocus:!0,isSearchable:!0}),(0,i.createElement)("div",{className:"woocommerce-profiler-select-control__country-spacer"}),S&&!x&&(0,i.createElement)(j.Notice,{className:"woocommerce-profiler-geolocation-notice",onRemove:()=>h(!0),status:"warning"},(0,i.createElement)("p",null,(0,i.createInterpolateElement)((0,y.__)("It looks like you're located in . Are you sure you want to create a store in ?","woocommerce"),{geolocatedCountry:(0,i.createElement)(j.Button,{className:"geolocation-notice-geolocated-country",variant:"link",onClick:()=>L(D)},null==r?void 0:r.country_long),selectedCountry:(0,i.createElement)("span",{className:"geolocation-notice-selected-country"},I.label)})),(0,i.createElement)("p",null,(0,y.__)("Setting up your store in the wrong country may lead to the following issues: ","woocommerce")),(0,i.createElement)("ul",{className:"woocommerce-profiler-geolocation-notice__list"},(0,i.createElement)("li",null,(0,y.__)("Tax and duty obligations","woocommerce")),(0,i.createElement)("li",null,(0,y.__)("Payment issues","woocommerce")),(0,i.createElement)("li",null,(0,y.__)("Shipping issues","woocommerce")))),(0,i.createElement)(i.Fragment,null,(0,i.createElement)(j.TextControl,{className:w()("woocommerce-profiler-business-info-email-adddress",{"is-error":U}),onChange:e=>{U&&q(!0),W(e)},onBlur:()=>{q(!0)},value:(0,R.decodeEntities)(Y),label:(0,i.createElement)(i.Fragment,null,(0,y.__)("Your email address","woocommerce"),V&&(0,i.createElement)("span",{className:"woocommerce-profiler-question-required"},"*")),placeholder:(0,y.__)("wordpress@example.com","woocommerce")}),U&&(0,i.createElement)(G,{isError:!0,text:(0,y.__)("This email is not valid.","woocommerce")}),(0,i.createElement)(j.CheckboxControl,{className:"core-profiler__checkbox",label:(0,y.__)("Opt-in to receive tips, discounts, and recommendations from the Woo team directly in your inbox.","woocommerce"),checked:V,onChange:e=>{H(e),q(!0)}}))),(0,i.createElement)("div",{className:"woocommerce-profiler-button-container"},(0,i.createElement)(j.Button,{className:"woocommerce-profiler-button",variant:"primary",disabled:!I.key||U,onClick:()=>{n({type:"BUSINESS_INFO_COMPLETED",payload:{storeName:p,industry:null==f?void 0:f.key,storeLocation:I.key,geolocationOverruled:S||!1,isOptInMarketing:V,storeEmailAddress:Y}}),P(!0)}},v?(0,i.createElement)(j.Spinner,null):(0,y.__)("Continue","woocommerce")))))}},entry:[{type:"recordTracksStepViewed",step:"business_info"}],on:{BUSINESS_INFO_COMPLETED:{target:"postBusinessInfo",actions:["recordTracksBusinessInfoCompleted","recordTracksIsEmailChanged"]}}},postBusinessInfo:{invoke:{src:"updateBusinessInfo",onDone:{target:"#plugins"},onError:{target:"#plugins"}}}}},skipGuidedSetup:{id:"skipGuidedSetup",initial:"preSkipFlowBusinessLocation",entry:[{type:"updateQueryStep",step:"skip-guided-setup"}],states:{preSkipFlowBusinessLocation:{invoke:{src:"getCountries",onDone:[{actions:["handleCountries"],target:"skipFlowBusinessLocation"}],onError:{target:"skipFlowBusinessLocation"}}},skipFlowBusinessLocation:{on:{BUSINESS_LOCATION_COMPLETED:{target:"postSkipFlowBusinessLocation",actions:["assignStoreLocation","recordTracksSkipBusinessLocationCompleted"]}},entry:[{type:"recordTracksStepViewed",step:"skip_business_location"}],meta:{progress:80,component:e=>{let{sendEvent:t,navigationProgress:o,context:n}=e;const[r,s]=(0,i.useState)({key:"",label:""}),a=(0,y.__)("Select country/region","woocommerce");return(0,i.createElement)("div",{className:"woocommerce-profiler-business-location","data-testid":"core-profiler-business-location"},(0,i.createElement)(A,{percentage:o}),(0,i.createElement)("div",{className:"woocommerce-profiler-page__content woocommerce-profiler-business-location__content"},(0,i.createElement)(E,{className:"woocommerce-profiler__stepper-heading",title:(0,y.__)("Where is your business located?","woocommerce"),subTitle:(0,y.__)("We'll use this information to help you set up payments, shipping, and taxes.","woocommerce")}),(0,i.createElement)(T.SelectControl,{className:"woocommerce-profiler-select-control__country",instanceId:1,placeholder:a,label:""===r.key?a:"",getSearchExpression:e=>new RegExp("(^"+e+"| — ("+e+"))","i"),autoComplete:"new-password",options:n.countries,excludeSelectedOptions:!1,help:(0,i.createElement)(O.Z,{icon:z.Z}),onChange:e=>{e.length&&s(e[0])},selected:r?[r]:[],showAllOnFocus:!0,isSearchable:!0}),(0,i.createElement)("div",{className:"woocommerce-profiler-button-container woocommerce-profiler-go-to-mystore__button-container"},(0,i.createElement)(j.Button,{className:"woocommerce-profiler-button",variant:"primary",disabled:!r.key,onClick:()=>{t({type:"BUSINESS_LOCATION_COMPLETED",payload:{storeLocation:r.key}})}},(0,y.__)("Go to my store","woocommerce")))))}}},postSkipFlowBusinessLocation:{initial:"updateBusinessLocation",states:{updateBusinessLocation:{entry:(0,n.f0)({loader:{progress:10,useStages:"skippedGuidedSetup"}}),invoke:{src:e=>{const t=(0,u.dispatch)(M.ONBOARDING_STORE_NAME).updateProfileItems({skipped:!0}),o=(i=e.businessInfo.location,(0,u.dispatch)(M.OPTIONS_STORE_NAME).updateOptions({woocommerce_default_country:i}));var i;const n=fe(e.businessInfo.location);return Promise.all([t,o,n])},onDone:{target:"progress20"}}},progress20:{entry:(0,n.f0)({loader:{progress:20,useStages:"skippedGuidedSetup"}}),invoke:{src:()=>he(1500),onDone:{target:"progress80"}}},progress80:{entry:(0,n.f0)({loader:{progress:80,useStages:"skippedGuidedSetup",stageIndex:1}}),invoke:{src:()=>he(1500),onDone:{actions:["redirectToWooHome"]}}}},meta:{component:ie}}}},plugins:{id:"plugins",initial:"prePlugins",states:{prePlugins:{invoke:{src:"getPlugins",onDone:[{target:"pluginsSkipped",cond:(e,t)=>{var o;return null===(o=t.data)||void 0===o?void 0:o.every((e=>e.is_activated))}},{target:"plugins",actions:"handlePlugins"}]},exit:(0,n.f0)({pluginsAvailable:e=>e.pluginsAvailable.filter((()=>!0))}),meta:{progress:70}},pluginsSkipped:{entry:(0,n.f0)({loader:{progress:80}}),invoke:{src:()=>((0,u.dispatch)(M.ONBOARDING_STORE_NAME).updateProfileItems({is_plugins_page_skipped:!0,completed:!0}),he(3e3)),onDone:[{target:"isJetpackConnected",cond:"hasJetpackSelected"},{actions:["redirectToWooHome"]}]},meta:{component:ie}},plugins:{entry:[{type:"recordTracksStepViewed",step:"plugins"},{type:"updateQueryStep",step:"plugins"}],on:{PLUGINS_PAGE_SKIPPED:{actions:[{type:"recordTracksStepSkipped",step:"plugins"}],target:"pluginsSkipped"},PLUGINS_LEARN_MORE_LINK_CLICKED:{actions:[{type:"recordTracksPluginsLearnMoreLinkClicked",step:"plugins"}]},PLUGINS_INSTALLATION_REQUESTED:{target:"installPlugins",actions:["assignPluginsSelected","recordTracksPluginsInstallationRequest"]}},meta:{progress:80,component:e=>{let{context:t,navigationProgress:o,sendEvent:n}=e;const[r,s]=(0,U.useState)(t.pluginsAvailable.filter(t.pluginsInstallationErrors.length?e=>t.pluginsSelected.includes(e.key):e=>!e.is_activated)),a=()=>n({type:"PLUGINS_PAGE_SKIPPED"}),l=()=>{const e=r.map((e=>e.key.replace(":alt",""))),o=[],i=[];return t.pluginsAvailable.forEach((t=>{const n=t.key.replace(":alt","");o.push(n),t.is_activated||e.includes(n)||i.push(n)})),n({type:"PLUGINS_INSTALLATION_REQUESTED",payload:{pluginsShown:o,pluginsSelected:e,pluginsUnselected:i}})},c=e=>"element"===e.type?"{{span}}"+e.value+"{{/span}}":e.value,u=t.pluginsInstallationErrors.length?(0,L.Z)({mixedString:(0,y.sprintf)((0,y.__)("Oops! We encountered a problem while installing %s. {{link}}Please try again{{/link}}.","woocommerce"),ce(t.pluginsInstallationErrors.map((e=>e.plugin))).map(c).join("")),components:{span:(0,i.createElement)("span",null),link:(0,i.createElement)(j.Button,{isLink:!0,onClick:l})}}):null,g=r.filter((e=>["jetpack","woocommerce-services:shipping","woocommerce-services:tax"].includes(e.key)));return(0,i.createElement)("div",{className:"woocommerce-profiler-plugins","data-testid":"core-profiler-plugins"},(0,i.createElement)(A,{percentage:o,onSkip:a}),(0,i.createElement)("div",{className:"woocommerce-profiler-page__content woocommerce-profiler-plugins__content"},(0,i.createElement)(E,{className:"woocommerce-profiler__stepper-heading",title:(0,y.__)("Get a boost with our free features","woocommerce"),subTitle:(0,y.__)("Enhance your store by installing these free business features. No commitment required – you can remove them at any time.","woocommerce")}),u&&(0,i.createElement)("p",{className:"plugin-error"},u),(0,i.createElement)("div",{className:"woocommerce-profiler-plugins__list"},t.pluginsAvailable.map((e=>{const t=e.learn_more_link?(0,i.createElement)(T.Link,{onClick:()=>{var t;n({type:"PLUGINS_LEARN_MORE_LINK_CLICKED",payload:{plugin:e.key,learnMoreLink:null!==(t=e.learn_more_link)&&void 0!==t?t:""}})},href:e.learn_more_link,target:"_blank",type:"external"},(0,y.__)("Learn More","woocommerce")):null;return(0,i.createElement)(re,{key:`checkbox-control-${e.key}`,installed:e.is_activated,onChange:()=>{(e=>{s(r.some((t=>t.key===e.key))?r.filter((t=>t.key!==e.key)):[...r,e])})(e)},checked:r.filter((t=>t.key===e.key)).length>0,icon:e.image_url?(0,i.createElement)("img",{src:e.image_url,alt:e.key}):null,title:e.label,description:e.description,learnMoreLink:t})}))),(0,i.createElement)("div",{className:"woocommerce-profiler-plugins-continue-button-container"},(0,i.createElement)(j.Button,{className:"woocommerce-profiler-plugins-continue-button",variant:"primary",onClick:r.length?l:a},(0,y.__)("Continue","woocommerce"))),g.length>0&&(0,i.createElement)("p",{className:"woocommerce-profiler-plugins-jetpack-agreement"},(0,L.Z)({mixedString:(0,y.sprintf)((0,y._n)("By installing %s plugin for free you agree to our {{link}}Terms of Service{{/link}}.","By installing %s plugins for free you agree to our {{link}}Terms of Service{{/link}}.",g.length,"woocommerce"),ce(g.map((e=>e.name))).map(c).join("")),components:{span:(0,i.createElement)("span",null),link:(0,i.createElement)(T.Link,{href:"https://wordpress.com/tos/",target:"_blank",type:"external"})}}))))}}},postPluginInstallation:{invoke:{src:async(e,t)=>await(0,u.dispatch)(M.ONBOARDING_STORE_NAME).updateProfileItems({business_extensions:t.payload.installationCompletedResult.installedPlugins.map((e=>e.plugin)),completed:!0}),onDone:[{target:"isJetpackConnected",cond:"hasJetpackSelected"},{actions:"redirectToWooHome"}]},meta:{component:ie,progress:100}},isJetpackConnected:{invoke:{src:async()=>await(0,u.resolveSelect)(M.PLUGINS_STORE_NAME).isJetpackConnected(),onDone:[{target:"sendToJetpackAuthPage",cond:(e,t)=>!t.data},{actions:"redirectToWooHome"}]},meta:{component:ie,progress:100}},sendToJetpackAuthPage:{invoke:{src:async()=>await(0,u.resolveSelect)(M.ONBOARDING_STORE_NAME).getJetpackAuthUrl({redirectUrl:(0,N.getAdminLink)("admin.php?page=wc-admin"),from:"woocommerce-core-profiler"}),onDone:{actions:a.choose([{cond:(e,t)=>!0===t.data.success,actions:"redirectToJetpackAuthPage"},{cond:(e,t)=>!1===t.data.success,actions:"redirectToWooHome"}])}},meta:{component:ie,progress:100}},installPlugins:{on:{PLUGIN_INSTALLED_AND_ACTIVATED:{actions:[(0,n.f0)({loader:(e,t)=>{const o=Math.round(t.payload.installedPluginIndex/t.payload.pluginsCount*100);let i=0;return o>60?i=2:o>30&&(i=1),{useStages:"plugins",progress:o,stageIndex:i}}})]},PLUGINS_INSTALLATION_COMPLETED_WITH_ERRORS:{target:"prePlugins",actions:[(0,n.f0)({pluginsInstallationErrors:(e,t)=>t.payload.errors}),{type:"recordFailedPluginInstallations"}]},PLUGINS_INSTALLATION_COMPLETED:{target:"postPluginInstallation",actions:[{type:"recordSuccessfulPluginInstallation"}]}},entry:a.choose([{cond:"hasJetpackSelected",actions:[(0,n.f0)({loader:{progress:10,useStages:"plugins"}}),"preFetchIsJetpackConnected","preFetchJetpackAuthUrl"]},{actions:[(0,n.f0)({loader:{progress:10,useStages:"plugins"}})]}]),invoke:{src:Me,data:e=>({selectedPlugins:e.pluginsSelected,pluginsAvailable:e.pluginsAvailable})},meta:{component:ie}}}},settingUpStore:{}}}),Je=e=>{let{actionOverrides:t,servicesOverrides:o}=e;const n=(0,i.useMemo)((()=>We.withConfig({actions:{...Re,...t},services:{...Be,...o},guards:{hasStepInUrl:(e,t,o)=>{let{cond:i}=o;const{step:n}=(0,g.getQuery)();return n===i.step},hasJetpackSelected:e=>void 0!==e.pluginsSelected.find((e=>"jetpack"===e||"jetpack-boost"===e))||void 0!==e.pluginsAvailable.find((e=>("jetpack"===e.key||"jetpack-boost"===e.key)&&e.is_activated))}})),[t,o]),[r,s,a]=(0,l.e)(n,{devTools:!1}),u=(0,c.v)(a,(e=>{var t;return(0,I.r)(null!==(t=null==e?void 0:e.meta)&&void 0!==t?t:void 0)})),M=null==u?void 0:u.progress,[m,N]=(0,i.useState)(null);(0,i.useEffect)((()=>{null!=u&&u.component&&N((()=>null==u?void 0:u.component))}),[m,null==u?void 0:u.component]);const p=r.value instanceof Object?Object.keys(r.value)[0]:r.value;return(0,ue.p0)(["woocommerce-profile-wizard__body"]),(0,i.createElement)(i.Fragment,null,(0,i.createElement)("div",{className:`woocommerce-profile-wizard__container woocommerce-profile-wizard__step-${p}`},m?(0,i.createElement)(m,{navigationProgress:M,sendEvent:s,context:r.context}):(0,i.createElement)(me,null)))},Fe=Je},1718:(e,t,o)=>{"use strict";function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Set;if(!t.has(e)){t.add(e);for(const o in e)if(e.hasOwnProperty(o)){if("component"===o)return e;if("object"==typeof e[o]&&null!==e[o]){const n=i(e[o],t);if(void 0!==n)return n}}}}o.d(t,{r:()=>i})},10530:e=>{e.exports={iconsThatNeedOffset:["gridicons-add-outline","gridicons-add","gridicons-align-image-center","gridicons-align-image-left","gridicons-align-image-none","gridicons-align-image-right","gridicons-attachment","gridicons-bold","gridicons-bookmark-outline","gridicons-bookmark","gridicons-calendar","gridicons-cart","gridicons-create","gridicons-custom-post-type","gridicons-external","gridicons-folder","gridicons-heading","gridicons-help-outline","gridicons-help","gridicons-history","gridicons-info-outline","gridicons-info","gridicons-italic","gridicons-layout-blocks","gridicons-link-break","gridicons-link","gridicons-list-checkmark","gridicons-list-ordered","gridicons-list-unordered","gridicons-menus","gridicons-minus","gridicons-my-sites","gridicons-notice-outline","gridicons-notice","gridicons-plus-small","gridicons-plus","gridicons-popout","gridicons-posts","gridicons-scheduled","gridicons-share-ios","gridicons-star-outline","gridicons-star","gridicons-stats","gridicons-status","gridicons-thumbs-up","gridicons-textcolor","gridicons-time","gridicons-trophy","gridicons-user-circle","gridicons-reader-follow","gridicons-reader-following"],iconsThatNeedOffsetX:["gridicons-arrow-down","gridicons-arrow-up","gridicons-comment","gridicons-clear-formatting","gridicons-flag","gridicons-menu","gridicons-reader","gridicons-strikethrough"],iconsThatNeedOffsetY:["gridicons-align-center","gridicons-align-justify","gridicons-align-left","gridicons-align-right","gridicons-arrow-left","gridicons-arrow-right","gridicons-house","gridicons-indent-left","gridicons-indent-right","gridicons-minus-small","gridicons-print","gridicons-sign-out","gridicons-stats-alt","gridicons-trash","gridicons-underline","gridicons-video-camera"]}},52458:e=>{"use strict";var t=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function n(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},o=0;o<10;o++)t["_"+String.fromCharCode(o)]=o;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var i={};return"abcdefghijklmnopqrst".split("").forEach((function(e){i[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},i)).join("")}catch(e){return!1}}()?Object.assign:function(e,r){for(var s,a,l=n(e),c=1;c{"use strict";o(52458);var i=o(99196),n=60103;if("function"==typeof Symbol&&Symbol.for){var r=Symbol.for;n=r("react.element"),r("react.fragment")}var s=i.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,a=Object.prototype.hasOwnProperty,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,o){var i,r={},c=null,u=null;for(i in void 0!==o&&(c=""+o),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)a.call(t,i)&&!l.hasOwnProperty(i)&&(r[i]=t[i]);if(e&&e.defaultProps)for(i in t=e.defaultProps)void 0===r[i]&&(r[i]=t[i]);return{$$typeof:n,type:e,key:c,ref:u,props:r,_owner:s.current}}t.jsx=c,t.jsxs=c},61250:(e,t,o)=>{"use strict";e.exports=o(95472)},7253:(e,t,o)=>{"use strict";e.exports=o.p+"506499ddac13811fee8e.svg"},62621:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMTYiIGhlaWdodD0iMTQwIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTAgMGgyMTZ2MTQwSDB6Ii8+PHBhdGggZmlsbD0iI0JFQTBGMiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNNjQuOTIgOTkuMTI3SDQuMjc3djM2Ljc3OUg2NC45MnoiLz48cGF0aCBmaWxsPSIjMjcxQjNEIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik00MS45NzggMTA1LjI1NmgtMzcuN3YzLjUwM2gzNy43ek02NC45MTkgMTA1LjI1NmgtMTguNzR2My41MDNoMTguNzR6TTY0LjkyIDEyNi4yNzFINTAuMTQ1djMuNTAzaDE0Ljc3M3pNMzAuNzk3IDExNS43NjRINC4yNzh2My41MDNoMjYuNTE5ek02NC45MiAxMTUuNzY0SDM0LjkzN3YzLjUwM0g2NC45MnpNNDUuOTQ1IDEyNi4yNzFINC4yNzh2My41MDNoNDEuNjY3eiIvPjxwYXRoIGZpbGw9IiNCRUEwRjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTE3Ni44NzIgMTM1Ljk0N2gzNS4wMDd2LTE3LjUxNGgtMzUuMDA3ek0xMzcuNjQ1IDEzNS45MzNoMzUuMDA4VjExOC40MmgtMzUuMDA4ek05OC41MDMgMTM1LjkwMWgzNS4wMDd2LTE3LjUxNEg5OC41MDN6TTE1NS4xNjYgMTE0LjI2OWgzNS4wMDhWOTYuNzU2aC0zNS4wMDh6TTE3Ni44NTQgOTIuNTQ4aDM1LjAwOFY3NS4wMzVoLTM1LjAwOHpNMTk0LjM1OCAxMTQuMjU0aDE3LjUwNFY5Ni43NGgtMTcuNTA0ek0xOTQuMzU4IDcwLjg1MmgxNy41MDRWNTMuMzRoLTE3LjUwNHoiLz48cGF0aCBmaWxsPSIjMjcxQjNEIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik04OC4xNSA4OC45MDJIMjguNjM3djMuNTAySDg4LjE1eiIvPjxwYXRoIGZpbGw9IiNCRUEwRjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTg4LjE1IDY3Ljk1MkgyOC42Mzd2MjEuMDE2SDg4LjE1eiIvPjxwYXRoIGZpbGw9IiMyNzFCM0QiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0ibTQ1LjQ2OSA4My41ODUtMy42MzQtMy42MzZhNC44NyA0Ljg3IDAgMCAwIC44MDgtMi42OTQgNC45MDggNC45MDggMCAwIDAtNC45LTQuOTAzIDQuOTA4IDQuOTA4IDAgMCAwLTQuOTAyIDQuOTAzIDQuOTA4IDQuOTA4IDAgMCAwIDQuOTAxIDQuOTA0Yy45OTQgMCAxLjkxOS0uMjk4IDIuNjkyLS44MDlsMy42MzQgMy42MzYgMS40MDQtMS40MDUtLjAwMy4wMDRabS03LjczLTMuNDA4Yy0xLjYxIDAtMi45Mi0xLjMxLTIuOTItMi45MjJhMi45MjMgMi45MjMgMCAwIDEgMi45Mi0yLjkyYzEuNjEgMCAyLjkyIDEuMzEgMi45MiAyLjkyYTIuOTIzIDIuOTIzIDAgMCAxLTIuOTIgMi45MjJaIi8+PHBhdGggc3Ryb2tlPSIjMjcxQjNEIiBzdHJva2Utd2lkdGg9Ii43MSIgZD0iTTUwLjM0MiA3MS4xMjZWODQuOTkiLz48cGF0aCBmaWxsPSIjQkVBMEYyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik04Ny45OSA0NC4zNzNjMTEuMDg2IDAgMjAuMDczLTguOTkzIDIwLjA3My0yMC4wODVTOTkuMDc2IDQuMjA0IDg3Ljk5IDQuMjA0Yy0xMS4wODYgMC0yMC4wNzMgOC45OTItMjAuMDczIDIwLjA4NCAwIDExLjA5MiA4Ljk4NyAyMC4wODUgMjAuMDczIDIwLjA4NVoiLz48cGF0aCBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik04OC4zODUgMTMuMDZoLS43ODh2MjIuNDU4aC43ODh6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNOTkuMjEzIDI0LjY4M3YtLjc4OEg3Ni43NjZ2Ljc4OHoiLz48cGF0aCBmaWxsPSIjQkVBMEYyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xNDAuMTc2IDcyLjg1M0gxMzUuNmMuODEzLTguOTE1LS45NzctMjUuNjA1LTE0LjYxNi0yNS42MDVzLTE1LjQyNyAxNi42OS0xNC42MTYgMjUuNjA1aC00LjU2NGwtNy42MTggMzYuODM4aDUzLjYwOGwtNy42MTgtMzYuODM4Wm0tMTkuMTkyLTE5Ljg2NGM4LjA3NyAwIDguMDYzIDEzLjQxNSA1LjczOSAxOS44NjRIMTE1LjI1Yy0yLjMyNS02LjQ0OS0yLjM0Mi0xOS44NjQgNS43MzctMTkuODY0aC0uMDA0WiIvPjxwYXRoIGZpbGw9IiMyNzFCM0QiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTEzNC4zMjYgNC4yMDRoLTE0LjY5M3YyNS40NjhjMi45ODYuMzcxIDUuNjYgMy4wNCA1LjY2IDUuODM1cy0xLjg2NiA1LjYyOS01LjE3NyA1LjYyOWMtMi42MDEgMC00LjEyLS45MTgtNi4wNS0yLjYxNmwtLjcxLjYzN2MxLjI5MiAyLjA2MyA0LjQwOCA0LjYxNyA3LjgyOCA0LjYxNyA1LjQ3MiAwIDkuOTA0LTMuNzcgOS45MDQtOS4yNDQgMC0yLjcxMS0uNzMyLTYuMDY3LTMuMTQ0LTguODFsMy40MTMtMTEuNTE2IDgwLjUxNiAyMy45OTNWNC4yMDRoLTc3LjU1LjAwM1oiLz48cGF0aCBzdHJva2U9IiMyNjFCM0MiIHN0cm9rZS13aWR0aD0iLjk5IiBkPSJtMTIyLjYyIDQxLjUyNC0yNC43ODcgNjkuNDM4TTExOS4zNiA0MS41MjRsMjQuNzg2IDY5LjQzOCIvPjxwYXRoIGZpbGw9IiMyNzFCM0QiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTYzLjcxNSA0LjIwNEg0LjJ2NTkuNTQ1aDU5LjUxNHoiLz48cGF0aCBmaWxsPSIjQkVBMEYyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik00Mi41MTQgMzcuMDg3YzAtMTEuNjU3IDMuNzg4LTI5IDE1LjU0NC0yOUw0NS44MjIgNDIuMDU1SDEwLjUyNGMwLTMuODcgNS4xMzUtMTMuMzI1IDMxLjk5LTQuOTd2LjAwM1oiLz48cGF0aCBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Im0xNC43MDMgNjEuMDI4IDguNzgtMzMuMzczaDEzLjgxOGw4LjA3MyAzMy4zNzNoMS41MDJsLTguNzEtMzUuOTU1aC0xNS41M2wtOS40NDIgMzUuOTU1eiIvPjxwYXRoIGZpbGw9IiNCRUEwRjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0ibTIyLjYzNiAyNS4wNzMuODQ4IDIuNTgySDM3LjNsLjg2NS0yLjU4MnpNMTQ5LjAyNiA4MS4wMjRsMTEuNjkzIDQuMDk0IDEwLjQ5MS02LjU5MiAxLjM4Ny0xMi4zMTktOC43Ni04Ljc2NC0xMi4zMTEgMS4zODgtNi41OTMgMTAuNDk0ek0xNjcuNTU2IDI0Ljk5Mmw4LjM4OCAyLjUwMXYtOS41NjJsMjEuOTI5LTEzLjcyN2gtMTIuODE2bC0xNy41MDEgMTAuOTF6Ii8+PHBhdGggZmlsbD0iI0JFQTBGMiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJtMTUzLjIzNCAyMC43MjYgNy44NDUgMi4zMzZ2LTkuMTk4bDE1LjY0NS05LjY2aC0xMS43NTJsLTExLjczOCA3LjMyeiIvPjxwYXRoIHN0cm9rZT0iIzI3MUIzRCIgc3Ryb2tlLXdpZHRoPSIuOTkiIGQ9Ik0xNjQuOTk3IDY1LjE4NSAxNTMuMzkxIDc2LjgiLz48cGF0aCBmaWxsPSIjMjcxQjNEIiBkPSJNMTI0LjE5MSA5Mi4wOTdjMi4wOTQtMS4yNzkgNC41ODMtMy40NCA0LjU4My03LjAwNiAwLTQuNzE4LTMuNi03LjY2NC03Ljc5LTcuNjY0LTQuMTkgMC03Ljc5IDIuOTQ2LTcuNzkgNy42NjQgMCAzLjU3IDIuNDkgNS43MyA0LjU4MyA3LjAwNmwtNS42MjggMTMuMDJoMTcuNjc1bC01LjYyOS0xMy4wMmgtLjAwNFoiLz48L2c+PC9zdmc+"},24122:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1Ljk0ODkgNS4yNTg4MkMxNS45NDg5IDIuODM2NiAxMy45ODUzIDAuODczMDQ3IDExLjU2MzYgMC44NzMwNDdDMTAuMDkzMyAwLjg3MzA0NyA4Ljc5NjAxIDEuNTk4ODIgOC4wMDAwMSAyLjcwODE2QzcuMjA0MDEgMS41OTg4MiA1LjkwNjY3IDAuODczMDQ3IDQuNDM2ODkgMC44NzMwNDdDMi4wMTQ2NyAwLjg3MzA0NyAwLjA1MTExNjkgMi44MzYxNiAwLjA1MTExNjkgNS4yNTg4MkMwLjA1MTExNjkgNS42MDE5NCAwLjA5NDY3MjUgNS45MzQzOCAwLjE2OTMzOSA2LjI1NDgyQzAuNzc4MjI4IDEwLjAzODQgNC45ODQ4OSAxNC4wMjk5IDguMDAwMDEgMTUuMTI1OUMxMS4wMTQ3IDE0LjAyOTkgMTUuMjIxOCAxMC4wMzg0IDE1LjgyOTggNi4yNTUyN0MxNS45MDUzIDUuOTM0ODIgMTUuOTQ4OSA1LjYwMjM4IDE1Ljk0ODkgNS4yNTg4MloiIGZpbGw9IiNBQThFRDYiLz4KPC9zdmc+Cg=="},60784:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMTYiIGhlaWdodD0iMTQwIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTAgMGgyMTZ2MTQwSDB6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMjE1Ljk2OCAxMzUuNDgxaC00LjJ2NC4yMDFoNC4yeiIvPjxwYXRoIGZpbGw9IiNCRUEwRjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTIwMS4yOTYgMTQuNzAzVjQ5LjcxaDMuNTAxVjE0LjcwM3pNMjA4LjI5OSA0LjJ2NDUuNTFoMy41VjQuMnpNMTk0LjI5NSAyNC44NTVWNDkuNzFoMy41VjI0Ljg1NXpNODguNDU2IDEzMi40OTZsOC40NjQtMjMuMjdoMjEuODFsOC40NjQgMjMuMjdoMTYuMzR2My4zMzVINzIuMTE2di0zLjMzNXpNOTIuMzIgMzkuMjU1SDMyLjgwNnY1OS41MTRIOTIuMzJ6Ii8+PHBhdGggZmlsbD0iIzI3MUIzRCIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJtNDcuNjk1IDY5Ljg4LTcuMDU0IDIuNTQ4Yy0yLjU5NC45MzgtMi44NDMgMi41OTgtMi4xNzQgMy43MjguODA5IDEuMzYyIDIuNzM4IDEuMjMzIDQuODQ1LS4xNzVhMjgzLjUyIDI4My41MiAwIDAgMCA1Ljk1Mi00LjExN2wtMS41NjktMS45ODVaTTc3LjQyOCA2OS44OGw3LjA1NCAyLjU0OGMyLjU5NC45MzggMi44NDMgMi41OTggMi4xNzQgMy43MjgtLjgwOSAxLjM2Mi0yLjczOCAxLjIzMy00Ljg0NS0uMTc1YTI4My41MiAyODMuNTIgMCAwIDEtNS45NTItNC4xMTdsMS41NjktMS45ODVaIi8+PHBhdGggZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJtNDYuMTMgNjMuNjM4IDguNjU4IDExLjU1LjM2LS4yMDQtMi4zMTctMTMuMTM1eiIvPjxwYXRoIGZpbGw9IiNCRUEwRjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTUxLjgxNiA3NC45MTdjLTMuODQgMC02LjQxNy0zLjM5Ni02LjQxNy02LjgwMiAwLTMuNzIxIDMuMzU0LTUuMTgxIDYuNDg0LTUuMTgxczYuNjc2IDEuNjM1IDYuNjc2IDQuOTQzYzAgMy43OTUtMi43ODcgNy4wNC02Ljc0MyA3LjA0WiIvPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTU0LjAyNSA3NC41NTNjLjI0NS0uMDg0LjQ4LS4xODIuNzA3LS4yOTRMNTIuNzQgNjIuOTc2YTguODQ2IDguODQ2IDAgMCAwLS44NTctLjA0MmMtMS45MjIgMC0zLjkyOC41NTMtNS4xODggMS44MzhsNy4zMyA5Ljc4WiIvPjxwYXRoIGZpbGw9IiNCRUEwRjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTY2LjU2NSA2Ny44NzdjMC0zLjMwOCAzLjU0Ni00Ljk0MyA2LjY3Ni00Ljk0MyAzLjEzIDAgNi40ODQgMS40NiA2LjQ4NCA1LjE4IDAgMy40MS0yLjU4IDYuODAzLTYuNDE3IDYuODAzLTMuOTU2IDAtNi43NDMtMy4yNDUtNi43NDMtNy4wNFoiLz48cGF0aCBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik03MS4wOTkgNzQuNTUzYTYuMDA3IDYuMDA3IDAgMCAxLS43MDgtLjI5NGwxLjk5Mi0xMS4yODNjLjI4Ny0uMDI4LjU3NC0uMDQyLjg1OC0uMDQyIDEuOTIyIDAgMy45MjguNTUzIDUuMTg4IDEuODM4bC03LjMzIDkuNzhaIi8+PHBhdGggZmlsbD0iIzI3MUIzRCIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNNzMuMzc0IDYwLjkxYy02Ljk4OCAwLTguOTE3IDUuMDctMTAuODE0IDUuMDctMS44OTcgMC0zLjgyMy01LjA3LTEwLjgxNC01LjA3LTQuNDI1IDAtOS4wNSAyLjg0Ny0xMS40NTEgNC4wMDJ2My40N2gyLjU4Yy4zNTcgMi4yMjMgMi4xNTMgOC42NCA4LjkzOCA4LjY0IDcuNTgyIDAgNy43NS03LjcyMyAxMC43NDQtNy43MjMgMi45OTMgMCAzLjE2NCA3LjcyMyAxMC43NDQgNy43MjMgNi43ODQgMCA4LjU4LTYuNDE3IDguOTM3LTguNjRoMi41OHYtMy40N2MtMi40MDEtMS4xNTUtNy4wMjYtNC4wMDEtMTEuNDUxLTQuMDAxaC4wMDdaTTUxLjgxNiA3NC45MTljLTMuODQgMC02LjQxNy0zLjM5Ni02LjQxNy02LjgwMiAwLTMuNzIyIDMuMzU0LTUuMTgyIDYuNDg0LTUuMTgyczYuNjc2IDEuNjM1IDYuNjc2IDQuOTQ0YzAgMy43OTQtMi43ODcgNy4wNC02Ljc0MyA3LjA0Wm0yMS40OTIgMGMtMy45NTYgMC02Ljc0My0zLjI0Ni02Ljc0My03LjA0IDAtMy4zMDkgMy41NDYtNC45NDQgNi42NzYtNC45NDQgMy4xMyAwIDYuNDg0IDEuNDYgNi40ODQgNS4xODIgMCAzLjQxLTIuNTggNi44MDItNi40MTcgNi44MDJaTTE1Ni4wOTggNDYuMjk0SDk2LjU4NHYzLjVoNTkuNTE0ek0xMjYuMzQgNTMuMTQzSDk2LjU4NXYzLjVoMjkuNzU3ek0xNTYuMDk4IDM5LjI5M0g5Ni41ODR2My41aDU5LjUxNHpNMTU5LjU1IDczLjY0M3Y5LjYxN2gxNi4xMjhzLTEuNzMzIDMuNTMyLTEuNzMzIDcuNDg1YzAgMy45NTIgMi41NTIgNy45MjIgNy40NyA3LjkyMiA0LjkyIDAgNy40NzItNC4xMDMgNy40NzItNy45MjIgMC0zLjgyLTEuNzMzLTcuNDg1LTEuNzMzLTcuNDg1aDExLjc5di05LjYxN2M1Ljg3OCAzLjMyNiAxMi43NTcgMi4xOTkgMTIuNzU3LTQuNzA1IDAtNi45MDMtNi44NzktOC4wMy0xMi43NTYtNC43MDV2LTkuNjE3aC0xMS43OTFzMS43MzMtMy41MzIgMS43MzMtNy40ODRjMC0zLjk1My0yLjU1My03LjkyMy03LjQ3Mi03LjkyMy00LjkxOCAwLTcuNDcgNC4xMDMtNy40NyA3LjkyMyAwIDMuODIgMS43MzMgNy40ODQgMS43MzMgNy40ODRIMTU5LjU1djkuNjE3YzUuODc3LTMuMzI2IDEyLjc1Ny0yLjE5OCAxMi43NTcgNC43MDUgMCA2LjkwNC02Ljg4IDguMDMxLTEyLjc1NyA0LjcwNVoiLz48cGF0aCBmaWxsPSIjQkVBMEYyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xNTYuMDk4IDg5Ljk3SDk2LjU4NHY4Ljc1M2g1OS41MTR6Ii8+PHBhdGggZmlsbD0iIzI3MUIzRCIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMzMuOTU4IDEyMi42NHYtNC4wNzJsLTMuMzY5LS40NGExMS42MTggMTEuNjE4IDAgMCAwLTEuNjItMy45MWwyLjA2OC0yLjY5NS0yLjg3Ny0yLjg3Ni0yLjY5NiAyLjA2OGExMS42MSAxMS42MSAwIDAgMC0zLjkwOC0xLjYyMWwtLjQ0LTMuMzY5aC00LjA3MmwtLjQ0IDMuMzY5YTExLjYxIDExLjYxIDAgMCAwLTMuOTEgMS42MjFMMTAgMTA4LjY0N2wtMi44NzggMi44NzYgMi4wNyAyLjY5NmExMS42MiAxMS42MiAwIDAgMC0xLjYyMiAzLjkwOGwtMy4zNjkuNDR2NC4wNzJsMy4zNy40NDJhMTEuODMzIDExLjgzMyAwIDAgMCAxLjYyIDMuOTA3bC0yLjA2OSAyLjY5NkwxMCAxMzIuNTZsMi42OTUtMi4wN2ExMS41OTggMTEuNTk4IDAgMCAwIDMuOTEyIDEuNjIybC40MzcgMy4zN2g0LjA3MmwuNDQtMy4zN2ExMS42MSAxMS42MSAwIDAgMCAzLjkwOC0xLjYyMWwyLjY5NiAyLjA3IDIuODc3LTIuODc4LTIuMDY5LTIuNjk2YTExLjYwNSAxMS42MDUgMCAwIDAgMS42MjEtMy45MDdsMy4zNy0uNDQyWm0tMTQuODE2IDQuNDRhNi43OTIgNi43OTIgMCAxIDEgMC0xMy41ODYgNi43OTIgNi43OTIgMCAwIDEgMCAxMy41ODVaTTE4My4xMzQgMjQuODhIMzIuODA2djEwLjUwM2gxNTAuMzI4eiIvPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTM2Ljk2OCAzMS42NjJhMS42NTIgMS42NTIgMCAxIDAgMC0zLjMwNSAxLjY1MiAxLjY1MiAwIDAgMCAwIDMuMzA1Wk00Mi45NTggMzEuNjYyYTEuNjUyIDEuNjUyIDAgMSAwIDAtMy4zMDUgMS42NTIgMS42NTIgMCAwIDAgMCAzLjMwNVpNNDguOTUyIDMxLjY2MmExLjY1MiAxLjY1MiAwIDEgMCAwLTMuMzA1IDEuNjUyIDEuNjUyIDAgMCAwIDAgMy4zMDVaIi8+PHBhdGggZmlsbD0iI0JFQTBGMiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMzIuOTA3IDEwMy4zNzJ2Ljg0MmMwIDMuMDE0IDIuNTE4IDUuNDYgNS42MjYgNS40NkgxNzcuNjFjMy4xMDUgMCA1LjYyNi0yLjQ0MyA1LjYyNi01LjQ2di0uODQySDMyLjkwN1pNMTgzLjIzNiAyMS4wMDR2LS44NDJjMC0zLjAxNC0yLjUxOC01LjQ2LTUuNjI2LTUuNDZIMzguNTMzYy0zLjEwNSAwLTUuNjI2IDIuNDQzLTUuNjI2IDUuNDZ2Ljg0MmgxNTAuMzI5Wk0yMTEuNzA1IDEyNy4wNjZjMCA0LjYwMy0zLjY5NyA4LjM0Ni04LjI4MyA4LjQxNmgtMzUuNDU2YTguNDE0IDguNDE0IDAgMCAxLTguNDE2LTguNDE2IDguNDE0IDguNDE0IDAgMCAxIDguNDE2LTguNDE2aDM1LjQ3M2M0LjU4IDAgOC4yNyAzLjgxOSA4LjI3IDguNDE2aC0uMDA0WiIvPjxwYXRoIGZpbGw9IiMyNzFCM0QiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTIwMy4yNDcgMTMzLjA0OGE1Ljk4MyA1Ljk4MyAwIDEgMCAuMDAxLTExLjk2NSA1Ljk4MyA1Ljk4MyAwIDAgMC0uMDAxIDExLjk2NVoiLz48cGF0aCBmaWxsPSIjQkVBMEYyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xMTYuNDIzIDY1Ljc4SDk2LjU4NHYxOS44NGgxOS44Mzl6Ii8+PHBhdGggc3Ryb2tlPSIjMjcxQjNEIiBzdHJva2Utd2lkdGg9Ii45OSIgZD0iTTEwMS4xMjQgNzUuNjk5aDEwLjc1OE0xMDYuNTAxIDcwLjMyMlY4MS4wOCIvPjxwYXRoIGZpbGw9IiNCRUEwRjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTcuNTcgMTAwLjk2N0EzLjM2NyAzLjM2NyAwIDAgMSA0LjIgOTcuNjUyVjcuNTdBMy4zNyAzLjM3IDAgMCAxIDcuNTcgNC4yMDFhMy4zNyAzLjM3IDAgMCAxIDMuMzY4IDMuMzY4djkwLjA5YzAgMS44MzEtMS41MjcgMy4zMDgtMy4zNjggMy4zMDhaIi8+PHBhdGggZmlsbD0iIzI3MUIzRCIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMTAuOTM3IDM0LjEzM3YtMy40MUw0LjIgMjYuMDgxdjMuNDF6TTEwLjkzNyA0MC43NTJ2LTMuNDFMNC4yIDMyLjd2My40MXpNMTAuOTM3IDQ3LjM3di0zLjQwN0w0LjIgMzkuMzIxdjMuNDF6TTEwLjkzNyA1My45ODl2LTMuNDA2TDQuMiA0NS45NHYzLjQxek0xMC45MzcgNjAuNjF2LTMuNDA2TDQuMiA1Mi41NjJ2My40MXpNMTAuOTM3IDY3LjIyOXYtMy40MDZMNC4yIDU5LjE4djMuNDA2ek0xMC45MzcgNzMuODV2LTMuNDFMNC4yIDY1LjgwMnYzLjQwNnpNMTAuOTM3IDgwLjQ3di0zLjQxTDQuMiA3Mi40MnYzLjQwN3pNMTAuOTM3IDg3LjA5di0zLjQxTDQuMiA3OS4wNDJ2My40MDZ6TTEwLjkzNyA5My43MXYtMy40MDlMNC4yIDg1LjY1OXYzLjQxek00LjIwMSA5Mi4yNzh2My40MWw1Ljk0NSA0LjA5NmEzLjI0MSAzLjI0MSAwIDAgMCAuNzktMi4xMjV2LS43MzlsLTYuNzM1LTQuNjQyWiIvPjwvZz48L3N2Zz4="},38811:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMTYiIGhlaWdodD0iMTQwIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTAgMGgyMTZ2MTQwSDB6Ii8+PHBhdGggZmlsbD0iI0JFQTBGMiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMTc3LjA2NCA1MC4wMDhjLTIxLjA4MiAwLTM0LjczNSAxMS4wNjctMzQuNzM1IDI4LjA3NyAwIDIxLjIwMyAyMi40NzUgMjQuMDggMjIuNDc1IDM1LjEyOWgyNC41MmMwLTExLjA1MyAyMi40NzUtMTMuOTI2IDIyLjQ3NS0zNS4xMyAwLTE3LjAxLTEzLjY1Ni0yOC4wNzYtMzQuNzM1LTI4LjA3NlpNMzkuMDggNC4yMjdDMTQuMjA2IDQuMjI3LjIzNSAyMy40MjQgNS4xOTUgMzcuODY5YzUuNDEgMTUuNzc4IDIyLjEyMiAyMi45NzQgMjIuMTIyIDQzLjcxNWgyMy41MzJjMC0yMC43NDEgMTYuNzEtMjcuOTM3IDIyLjEyMi00My43MTVDNzcuOTI4IDIzLjQyNCA2My45NTYgNC4yMjcgMzkuMDggNC4yMjdaIi8+PHBhdGggZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNNTAuMDEzIDQ4LjI3M2MtNS43NTIgMC05LjEzNCAzLjc5NC05LjEzNCA5LjY2di43MjhjLS40MDYgMC0uODI2IDAtMS4yMjUuMDAzaC0yLjM3di0uNzI3YzAtNS44Ny0zLjM4Mi05LjY2NC05LjEzNC05LjY2NC01LjEyMSAwLTguMDU5IDEuOTMyLTguMDU5IDUuMjkyIDAgMi41MjQgMi40NTggNC4yMjggNy4zMDYgNS4wNjggMi45NjYuNTE0IDUuODQuNjQgOC42NzkuNjY4djIyLjI4MWgxLjIwOFY1OS4zMDVjLjY3OS4wMDQgMS4wMjIuMDA0IDEuNjA3IDBoMS45ODh2MjIuMjc0aDEuMjA4VjU5LjI5OGMyLjg0LS4wMjggNS43MTMtLjE1NCA4LjY3OC0uNjY5IDQuODQ5LS44NCA3LjMwNy0yLjU0NCA3LjMwNy01LjA2NyAwLTMuMzY0LTIuOTM4LTUuMjkyLTguMDYtNS4yOTJ2LjAwM1pNMzYuMDggNTguNjU0Yy0yLjgxMi0uMDMyLTUuNjQ3LS4xNTQtOC41Ni0uNjU4LTQuNDg1LS43NzctNS43LTIuNjIyLTUuNy00LjU0MyAwLTMuNDM3IDMuNTc1LTQuNTMzIDYuMzM3LTQuNTMzIDUuMTQzIDAgNy45MjYgMy41MzkgNy45MjYgOS4wMTN2LjcyNGwtLjAwMy0uMDAzWm0xNC41NjYtLjY1OGMtMi45MTYuNTA0LTUuNzQ4LjYzLTguNTYuNjU4di0uNzI1YzAtNS40NzQgMi43ODQtOS4wMTIgNy45MjctOS4wMTIgMi43NTggMCA2LjMzMyAxLjA5NiA2LjMzMyA0LjUzMiAwIDEuOTIyLTEuMjE5IDMuNzY3LTUuNzAzIDQuNTQ0bC4wMDMuMDAzWiIvPjxwYXRoIGZpbGw9IiMyNzFCM0QiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTIxMS43OTkgNC4ySDE1NC4xMmwtNS42ODUgNDcuNjM4IDExLjcyNC0xMi4zNjJoNDcuMzI0ek0xMjkuNTAyIDEwNi4xODFjLTMuNjc2LTUuMTU2LTUuNzg3LTcuNjMtOS45MzUtNy42My00LjU1MSAwLTYuNTUgNS4xNTItMy44MTYgOC4zNzIgMy4wMDcgMy41NDIgMTMuODA0IDcuMjM4IDEzLjgwNCA3LjIzOFMxMDUuODAxIDExMSA5OS42NDcgMTExYy0zLjM5NiAwLTYuODc2IDIuMTM1LTYuODc2IDYuMTg4czMuNDggNi4xODggNi44NzYgNi4xODhjNi4xNTQgMCAyOS45MDgtMy4xNiAyOS45MDgtMy4xNnMtMTAuODAxIDMuNjk2LTEzLjgwNCA3LjIzOGMtMi43MzEgMy4yMi0uNzM1IDguMzcyIDMuODE2IDguMzcyIDQuMTUyIDAgNi4yNjMtMi40NzEgOS45MzUtNy42MyAxLjI0Ni0xLjc0NyA3LjU3Ni0xMS4wMTEgNy41NzYtMTEuMDExcy02LjMzLTkuMjYxLTcuNTc2LTExLjAxMXYuMDA3WiIvPjxwYXRoIGZpbGw9IiNCRUEwRjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTc4LjA2OCA4NS4wNWg1OS44NjR2LTE3LjVINzguMDY4eiIvPjxwYXRoIGZpbGw9IiMyNzFCM0QiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTEyMC40MjggNjcuNTVoLTQyLjM2djMuNWg0Mi4zNnpNMTM3Ljc1NiA3NC41ODZINzguMjQzdjMuNWg1OS41MTN6TTExMS42NzYgODEuNTVINzguMDY4djMuNWgzMy42MDh6Ii8+PHBhdGggZmlsbD0iI0JFQTBGMiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNODYuNDcgOTguMzUySDQ5LjAxdjM3LjQ1SDg2LjQ3eiIvPjxwYXRoIGZpbGw9IiMyNzFCM0QiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0ibTcwLjQzNiAxMjMuNiA2LjczLTYuMjAyLTIwLjgwMy4wNzN2LTEuMDI1bDIwLjc4MS4wNy02LjcwNC02LjE3OC42Mi0uNzg3IDcuODAzIDcuMzQ2di4xMTlsLTcuODAzIDcuMzcxLS42Mi0uNzg3eiIvPjxwYXRoIHN0cm9rZT0iI0ZGRiIgZD0ibTE3MS4zMzYgMjAuNTg4IDQuMjEyIDEyLjEzOCAyMC42My0yMy4wMjciLz48cGF0aCBmaWxsPSIjMjcxQjNEIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xODYuNjk4IDkwLjkzM2MwLTYuMTQ5LTMuNjgzLTkuOTc1LTkuNjEzLTkuOTk2aC0uMDQyYy01LjkzLjAyMi05LjYxMyA0LjMzNC05LjYxMyA5Ljk5NiAwIDUuNjYzIDMuNDgzIDguMzU1IDguNDUxIDExLjg5Ny0zLjAwOCAyLjgwNy00LjYxOCA3LjI0OC00LjYxOCAxMC4zODFoMi41MjhjMC0yLjkwNS41NTYtNy4wMjUgMy4yNzMtOS40NjEgMi43MiAyLjQzNiAzLjI3MyA2LjU1NiAzLjI3MyA5LjQ2MWgyLjUyOGMwLTMuMTMzLTEuNjE0LTcuNTc4LTQuNjE4LTEwLjM4MSA0Ljk2OC0zLjU0MiA4LjQ1MS02LjU0MSA4LjQ1MS0xMS44OTdabS05LjYzNCAxMS4yMjljLTQuOTI2LTMuNDk0LTguNS01LjcxNi04LjUtMTEuMjI5IDAtNS41MTIgMy4zOTYtOC45NjcgOC41LTguOTc3IDUuMTA0LjAxIDguNSAzLjY1IDguNSA4Ljk3NyAwIDQuNzc4LTMuNTc0IDcuNzM1LTguNSAxMS4yMjlaIi8+PHBhdGggZmlsbD0iI0JFQTBGMiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNNDIuMDEgMTI3LjRjMCA0LjU5NS0zLjY5OSA4LjMzLTguMjg4IDguNGgtMjEuMWMtNC42NDguMDAzLTguNDItMy43Ni04LjQyLTguNCAwLTQuNjQgMy43NjgtOC40IDguNDItOC40aDIxLjExYzQuNTgzIDAgOC4yNzQgMy44MTIgOC4yNzQgOC40aC4wMDRaIi8+PHBhdGggZmlsbD0iIzI3MUIzRCIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMzMuNSAxMzMuMzQ5YTUuOTUgNS45NSAwIDEgMC01Ljk1Mi01Ljk1IDUuOTUgNS45NSAwIDAgMCA1Ljk1MSA1Ljk1Wk0xMzcuNzU3IDQuMjI3SDc4LjI0M3Y1OS41aDU5LjUxNHoiLz48cGF0aCBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xMjAuMzI2IDQzLjM3M2MwLTQuMTE2LTIuNTE3LTguMDU3LTcuNDU2LTEwLjc0NWgxNS4zNzlMMTEzLjg5OSA4Ljk2aC0xMS43OTRsLTE0LjM1IDIzLjY2N2gxNS4zNzljLTQuOTQgMi42ODgtNy40NTcgNi42MjktNy40NTcgMTAuNzQ1IDAgNC42NTggMy42NTIgOS4zNTkgOC40NjUgMTEuODc1LTYuNjU4LTEuMzQ0LTcuNzAyIDMuNzM1LTcuNzAyIDMuNzM1aDIzLjEzcy0xLjA0My01LjA3OS03LjcwMi0zLjczNWM0LjgxNC0yLjUxNiA4LjQ2NS03LjIxNyA4LjQ2NS0xMS44NzVoLS4wMDdaIi8+PHBhdGggZmlsbD0iI0JFQTBGMiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMTA4IDguOTY1aC01Ljg5NUw4Ny43NTEgMzIuNjI4aDQwLjQ5OEwxMTMuODk2IDguOTY1eiIvPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTEyMy40NzQgMjQuNzU4SDkyLjUyN2wtNC43NzYgNy44NzF6TTExOC42OTggMTYuODgzSDk3LjMwMmwtNC43NzYgNy44NzV6TTExMy44OTYgOC45NjVoLTExLjc5MWwtNC44MDMgNy45MTd6Ii8+PHBhdGggc3Ryb2tlPSIjMjcxQjNEIiBkPSJNNDcuODU2IDI1Ljk3N2M5LjMwOS05LjQ3MSAxNy43NjctMTIuODYzIDI3LjI2OC0xNC4zNjhNNzAuNjI5IDI5LjQ0NCA0OC4yMDMgMTEuMzk4Ii8+PHBhdGggc3Ryb2tlPSIjMjcxQjNEIiBkPSJNNTcuMTY1IDM1LjEzOGMzLjA0OS05LjU1NSA0LjE2Mi0yMS44NjggMi4xOTgtMzAuOTE1Ii8+PHBhdGggZmlsbD0iIzI3MUIzRCIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMjEuOTQ3IDgxLjU4NnYzLjVoNS4zNjd2MS4zMDJjLjA4IDUuNzM2IDUuNDQgMTAuODgxIDExLjc2NiAxMC44ODFzMTEuNjc1LTUuMTM0IDExLjc2Ni0xMC44Njd2LTEuMzE2aDUuMzY3di0zLjVIMjEuOTQ3Wk0xOTMuODQ0IDExNi43MTV2LTMuNWgtMzMuNTYzdjMuNWg0LjUydjEuNjFoLTQuNTJ2My41aDQuNTJ2MS45OTVjMCA1LjU4NiA0Ljc1IDEyLjAwOCAxMi4yNjMgMTIuMDA4czEyLjI2My02LjQyNiAxMi4yNjMtMTIuMDA4di0xLjk5NWg0LjUydi0zLjVoLTQuNTJ2LTEuNjFoNC41MTdaIi8+PC9nPjwvc3ZnPg=="},77:(e,t,o)=>{"use strict";e.exports=o.p+"bfec8d1574ef61285fc9.svg"}}]);
\ No newline at end of file
+(globalThis.webpackChunk_wcAdmin_webpackJsonp=globalThis.webpackChunk_wcAdmin_webpackJsonp||[]).push([[1828],{73224:(e,t,o)=>{"use strict";o.d(t,{Z:()=>r});var i=o(69307),n=o(70444);const r=(0,i.createElement)(n.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,i.createElement)(n.Path,{d:"M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"}))},43896:(e,t,o)=>{"use strict";o.r(t),o.d(t,{CoreProfilerController:()=>Fe,coreProfilerStateMachineDefinition:()=>Je,default:()=>Ve,preFetchActions:()=>Re});var i=o(69307),n=o(5031),r=o(47090),s=o(11122),a=o(55954),l=o(28226),c=o(50883),u=o(9818),g=o(10431),M=o(67221),m=o(73516),N=o(74617),p=o(17844),d=o.n(p),I=o(1718),y=o(65736),j=o(55609),L=o(75283),T=o(86020),D=o(83849),w=o.n(D);const E=e=>{let{className:t,title:o,subTitle:n}=e;return(0,i.createElement)("div",{className:w()("woocommerce-profiler-heading",t)},(0,i.createElement)("h1",{className:"woocommerce-profiler-heading__title"},o),n&&(0,i.createElement)("h2",{className:"woocommerce-profiler-heading__subtitle"},n))},_=()=>(0,i.createElement)("svg",{preserveAspectRatio:"xMidYMid",version:"1.1",viewBox:"0 0 256 153",xmlns:"http://www.w3.org/2000/svg",className:"wc-icon wc-icon__woo-logo"},(0,i.createElement)("path",{d:"m23.759 0h208.38c13.187 0 23.863 10.675 23.863 23.863v79.542c0 13.187-10.675 23.863-23.863 23.863h-74.727l10.257 25.118-45.109-25.118h-98.695c-13.187 0-23.863-10.675-23.863-23.863v-79.542c-0.10466-13.083 10.571-23.863 23.758-23.863z",fill:"#7f54b3"}),(0,i.createElement)("path",{d:"m14.578 21.75c1.4569-1.9772 3.6423-3.0179 6.5561-3.226 5.3073-0.41626 8.3252 2.0813 9.0537 7.4927 3.226 21.75 6.7642 40.169 10.511 55.259l22.79-43.395c2.0813-3.9545 4.6829-6.0358 7.8049-6.2439 4.5789-0.3122 7.3886 2.6016 8.5333 8.7415 2.6016 13.841 5.9317 25.6 9.8862 35.59 2.7057-26.433 7.2846-45.476 13.737-57.236 1.561-2.9138 3.8504-4.3707 6.8683-4.5789 2.3935-0.20813 4.5789 0.52033 6.5561 2.0813 1.9772 1.561 3.0179 3.5382 3.226 5.9317 0.10406 1.8732-0.20813 3.4341-1.0407 4.9951-4.0585 7.4927-7.3886 20.085-10.094 37.567-2.6016 16.963-3.5382 30.179-2.9138 39.649 0.20813 2.6016-0.20813 4.8911-1.2488 6.8683-1.2488 2.2894-3.122 3.5382-5.5154 3.7463-2.7057 0.20813-5.5154-1.0406-8.2211-3.8504-9.678-9.8862-17.379-24.663-22.998-44.332-6.7642 13.32-11.759 23.311-14.985 29.971-6.1398 11.759-11.343 17.795-15.714 18.107-2.8098 0.20813-5.2033-2.1854-7.2846-7.1805-5.3073-13.633-11.031-39.961-17.171-78.985-0.41626-2.7057 0.20813-5.0992 1.665-6.9724zm223.64 16.338c-3.7463-6.5561-9.2618-10.511-16.65-12.072-1.9772-0.41626-3.8504-0.62439-5.6195-0.62439-9.9902 0-18.107 5.2033-24.455 15.61-5.4114 8.8455-8.1171 18.628-8.1171 29.346 0 8.013 1.665 14.881 4.9951 20.605 3.7463 6.5561 9.2618 10.511 16.65 12.072 1.9772 0.41626 3.8504 0.62439 5.6195 0.62439 10.094 0 18.211-5.2033 24.455-15.61 5.4114-8.9496 8.1171-18.732 8.1171-29.45 0.10406-8.1171-1.665-14.881-4.9951-20.501zm-13.112 28.826c-1.4569 6.8683-4.0585 11.967-7.9089 15.402-3.0179 2.7057-5.8276 3.8504-8.4293 3.3301-2.4976-0.52033-4.5789-2.7057-6.1398-6.7642-1.2488-3.226-1.8732-6.452-1.8732-9.4699 0-2.6016 0.20813-5.2033 0.72846-7.5967 0.93659-4.2667 2.7057-8.4293 5.5154-12.384 3.4341-5.0992 7.0764-7.1805 10.823-6.452 2.4976 0.52033 4.5789 2.7057 6.1398 6.7642 1.2488 3.226 1.8732 6.452 1.8732 9.4699 0 2.7057-0.20813 5.3073-0.72846 7.7008zm-52.033-28.826c-3.7463-6.5561-9.3659-10.511-16.65-12.072-1.9772-0.41626-3.8504-0.62439-5.6195-0.62439-9.9902 0-18.107 5.2033-24.455 15.61-5.4114 8.8455-8.1171 18.628-8.1171 29.346 0 8.013 1.665 14.881 4.9951 20.605 3.7463 6.5561 9.2618 10.511 16.65 12.072 1.9772 0.41626 3.8504 0.62439 5.6195 0.62439 10.094 0 18.211-5.2033 24.455-15.61 5.4114-8.9496 8.1171-18.732 8.1171-29.45 0-8.1171-1.665-14.881-4.9951-20.501zm-13.216 28.826c-1.4569 6.8683-4.0585 11.967-7.9089 15.402-3.0179 2.7057-5.8276 3.8504-8.4293 3.3301-2.4976-0.52033-4.5789-2.7057-6.1398-6.7642-1.2488-3.226-1.8732-6.452-1.8732-9.4699 0-2.6016 0.20813-5.2033 0.72846-7.5967 0.93658-4.2667 2.7057-8.4293 5.5154-12.384 3.4341-5.0992 7.0764-7.1805 10.823-6.452 2.4976 0.52033 4.5789 2.7057 6.1398 6.7642 1.2488 3.226 1.8732 6.452 1.8732 9.4699 0.10406 2.7057-0.20813 5.3073-0.72846 7.7008z",fill:"#fff"})),S=e=>{let{className:t="",percent:o=0,color:n="#674399",bgcolor:r="var(--wp-admin-theme-color)"}=e;const s={backgroundColor:r},a={backgroundColor:n,width:`${o}%`,display:0===o?"none":"inherit"};return(0,i.createElement)("div",{className:`woocommerce-profiler-progress-bar ${t}`},(0,i.createElement)("div",{className:"woocommerce-profiler-progress-bar__container",style:s},(0,i.createElement)("div",{className:"woocommerce-profiler-progress-bar__filler",style:a})))},A=e=>{let{percentage:t=0,onSkip:o,skipText:n=(0,y.__)("Skip this step","woocommerce"),showProgress:r=!0,showLogo:s=!0,classNames:a={},progressBarColor:l="var(--wp-admin-theme-color)"}=e;return(0,i.createElement)("div",{className:w()("woocommerce-profiler-navigation-container",a)},r&&(0,i.createElement)(S,{className:"progress-bar",percent:t,color:l,bgcolor:"transparent"}),(0,i.createElement)("div",{className:"woocommerce-profiler-navigation"},(0,i.createElement)("div",{className:"woocommerce-profiler-navigation-col-left"},s&&(0,i.createElement)("span",{className:"woologo"},(0,i.createElement)(_,null))),(0,i.createElement)("div",{className:"woocommerce-profiler-navigation-col-right"},"function"==typeof o&&(0,i.createElement)(j.Button,{onClick:o,className:w()("woocommerce-profiler-navigation-skip-link",a.mobile?"mobile":""),isLink:!0},n))))};var O=o(23374),f=o(73224);const k=e=>{let{className:t,selected:o,title:n,name:r,value:s,onChange:a,subOptionsComponent:l=null}=e;const c=()=>{a(s)},u="woocommerce-"+s.replace(/_/g,"-");return(0,i.createElement)("div",{role:"radio",className:w()("woocommerce-profiler-choice-container",t),onClick:c,onKeyDown:e=>{"Enter"===e.key&&c()},"data-selected":o||null,tabIndex:0},(0,i.createElement)("div",{className:"woocommerce-profiler-choice"},(0,i.createElement)("input",{className:"woocommerce-profiler-choice-input",id:u,name:r,type:"radio",value:s,checked:!!o,onChange:c,"data-selected":o||null,tabIndex:-1}),(0,i.createElement)("label",{htmlFor:u,className:"choice__title"},n)),o&&l&&(0,i.createElement)("div",{className:"woocommerce-profiler-choice-sub-options"},l))},z=e=>{let{options:t,onSelect:o,selectedOptions:n=[],placeholder:r=(0,y.__)("Select platforms","woocommerce"),onOpenClose:s=(()=>{})}=e;return(0,i.createElement)(T.__experimentalSelectControl,{label:"",multiple:!0,__experimentalOpenMenuOnFocus:!0,readOnlyWhenClosed:!1,items:t,getFilteredItems:e=>e,selected:n,inputProps:{"aria-readonly":!0,"aria-label":(0,y.__)("Use up and down arrow keys to navigate","woocommerce")},onKeyDown:e=>{if(e.key.length<=1)return e.preventDefault(),!1},placeholder:n.length?"":r,stateReducer:(e,t)=>{const{changes:o,type:i}=t;switch(i){case T.selectControlStateChangeTypes.ControlledPropUpdatedSelectedItem:return{...o,inputValue:e.inputValue};case T.selectControlStateChangeTypes.ItemClick:return{...o,isOpen:!0,inputValue:e.inputValue,highlightedIndex:e.highlightedIndex};case T.selectControlStateChangeTypes.InputBlur:return e.isOpen&&t.selectItem?{...o,isOpen:!0}:o;default:return o}},onSelect:e=>{if(!e)return;const t=n.find((t=>t.value===e.value))?n.filter((t=>t.value!==e.value)):[...n,e];o(t)},onRemove:e=>o(n.filter((t=>t!==e)))},(e=>{let{selectedOptions:t,onOpenClose:o}=e;return e=>{let{items:n,highlightedIndex:r,isOpen:s,getItemProps:a,getMenuProps:l}=e;return(0,i.useEffect)((()=>{o(s)}),[s]),(0,i.createElement)(T.__experimentalSelectControlMenu,{isOpen:s,getMenuProps:l,scrollIntoViewOnOpen:!0},n.map(((e,o)=>{const n=t.includes(e);return(0,i.createElement)(T.__experimentalSelectControlMenuItem,{key:`${e.value}`,index:o,item:e,getItemProps:a,isActive:r===o,activeStyle:{backgroundColor:"#f6f7f7"}},(0,i.createElement)(j.CheckboxControl,{className:w()("core-profiler__checkbox",{"is-selected":n}),onChange:()=>{},checked:n,label:e.label}))})))}})({selectedOptions:n,onOpenClose:s}))},C=[{title:(0,y.__)("I'm just starting my business","woocommerce"),value:"im_just_starting_my_business"},{title:(0,y.__)("I'm already selling","woocommerce"),value:"im_already_selling"},{title:(0,y.__)("I'm setting up a store for a client","woocommerce"),value:"im_setting_up_a_store_for_a_client"}],x=[{label:(0,y.__)("Yes, I'm selling online","woocommerce"),value:"yes_im_selling_online",key:"yes_im_selling_online"},{label:(0,y.__)("No, I'm selling offline","woocommerce"),value:"no_im_selling_offline",key:"no_im_selling_offline"},{label:(0,y.__)("I'm selling both online and offline","woocommerce"),value:"im_selling_both_online_and_offline",key:"im_selling_both_online_and_offline"}],b=[{label:(0,y.__)("Amazon","woocommerce"),value:"amazon"},{label:(0,y.__)("Adobe Commerce","woocommerce"),value:"adobe_commerce"},{label:(0,y.__)("Big Cartel","woocommerce"),value:"big_cartel"},{label:(0,y.__)("Big Commerce","woocommerce"),value:"big_commerce"},{label:(0,y.__)("Ebay","woocommerce"),value:"ebay"},{label:(0,y.__)("Ecwid","woocommerce"),value:"ecwid"},{label:(0,y.__)("Etsy","woocommerce"),value:"etsy"},{label:(0,y.__)("Facebook Marketplace","woocommerce"),value:"facebook_marketplace"},{label:(0,y.__)("Google Shopping","woocommerce"),value:"google_shopping"},{label:(0,y.__)("Pinterest","woocommerce"),value:"pinterest"},{label:(0,y.__)("Shopify","woocommerce"),value:"shopify"},{label:(0,y.__)("Square","woocommerce"),value:"square"},{label:(0,y.__)("Squarespace","woocommerce"),value:"squarespace"},{label:(0,y.__)("Wix","woocommerce"),value:"wix"},{label:(0,y.__)("WordPress","woocommerce"),value:"wordpress"}];var h=o(61250),v=o(10530),P=o(7253),U=o(99196);const Q=U.memo(U.forwardRef(((e,t)=>{const{size:o=24,icon:i,className:n,title:r,...s}=e,a=o%18==0,l=`gridicons-${i}`,c=w()("gridicon",l,n,{"needs-offset":a&&v.iconsThatNeedOffset.includes(l),"needs-offset-x":a&&v.iconsThatNeedOffsetX.includes(l),"needs-offset-y":a&&v.iconsThatNeedOffsetY.includes(l)});return(0,h.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",className:c,height:o,width:o,ref:t,...s,children:[r&&(0,h.jsx)("title",{children:r}),(0,h.jsx)("use",{xlinkHref:`${P}#${l}`})]})})));Q.displayName="Gridicon";const Y=Q,G=({isError:e=!1,isWarning:t,isHidden:o,className:i,text:n,icon:r,id:s,children:a})=>{const l=w()(i,{"form-input-validation":!0,"is-warning":t,"is-error":e,"is-hidden":o}),c=e||t?"notice-outline":"checkmark";return(0,h.jsx)("div",{className:l,role:"alert",children:(0,h.jsxs)("span",{id:s,children:[(0,h.jsx)(Y,{size:24,icon:r||c})," ",n,a]})})};var Z=o(72456),R=o(22629),B=o(80834);const W=[void 0,"woocommerce","Site Title",""],J=[{label:(0,y.__)("Clothing and accessories","woocommerce"),key:"clothing_and_accessories"},{label:(0,y.__)("Health and beauty","woocommerce"),key:"health_and_beauty"},{label:(0,y.__)("Food and drink","woocommerce"),key:"food_and_drink"},{label:(0,y.__)("Home, furniture and garden","woocommerce"),key:"home_furniture_and_garden"},{label:(0,y.__)("Education and learning","woocommerce"),key:"education_and_learning"},{label:(0,y.__)("Electronics and computers","woocommerce"),key:"electronics_and_computers"},{label:(0,y.__)("Other","woocommerce"),key:"other"}],F={im_just_starting_my_business:(0,y.__)("What type of products or services do you plan to sell?","woocommerce"),im_already_selling:(0,y.__)("Which industry is your business in?","woocommerce"),im_setting_up_a_store_for_a_client:(0,y.__)("Which industry is your client's business in?","woocommerce")};var V=o(38811),H=o(62621),X=o(60784),q=o(77),K=o(24122);const $={title:(0,y.__)("Turning on the lights","woocommerce"),image:(0,i.createElement)("img",{src:V,alt:"loader-lightbulb"}),paragraphs:[{label:(0,y.__)("#FunWooFact: ","woocommerce"),text:(0,y.__)("The Woo team is made up of over 350 talented individuals, distributed across 30+ countries.","woocommerce")}]},ee={title:(0,y.__)("Extending your store's capabilities","woocommerce"),image:(0,i.createElement)("img",{src:X,alt:"loader-lightbulb"}),paragraphs:[{label:(0,y.__)("#FunWooFact: ","woocommerce"),text:(0,y.__)("Did you know that Woo powers almost 4 million stores worldwide? You’re in good company.","woocommerce")}]},te={title:(0,y.__)("Woo! Let's get your features ready","woocommerce"),image:(0,i.createElement)("img",{src:H,alt:"loader-developng"}),paragraphs:[{label:(0,y.__)("#FunWooFact: ","woocommerce"),text:(0,y.__)("Did you know that Woo was founded by two South Africans and a Norwegian? Here are three alternative ways to say “store” in those countries – Winkel, ivenkile, and butikk.","woocommerce")}]},oe={title:(0,y.__)("Opening the doors","woocommerce"),image:(0,i.createElement)("img",{src:q,alt:"loader-opening-the-doors"}),paragraphs:[{label:(0,y.__)("#FunWooFact: ","woocommerce"),text:(0,y.__)("Our favorite color is purple ","woocommerce"),element:(0,i.createElement)("img",{src:K,alt:"loader-hearticon",className:"loader-hearticon"})}]},ie=e=>{var t,o,n,r;let{context:s}=e;const a=(e=>{switch(e){case"plugins":return[te,ee,$];case"skippedGuidedSetup":return[$,oe];default:return[$]}})(null!==(t=s.loader.useStages)&&void 0!==t?t:"default")[null!==(o=s.loader.stageIndex)&&void 0!==o?o:0];return(0,i.createElement)(Z.Loader,{className:s.loader.className},(0,i.createElement)(Z.Loader.Layout,null,(0,i.createElement)(Z.Loader.Illustration,null,a.image),(0,i.createElement)(Z.Loader.Title,null,a.title),(0,i.createElement)(Z.Loader.ProgressBar,{progress:null!==(n=null===(r=s.loader)||void 0===r?void 0:r.progress)&&void 0!==n?n:0}),(0,i.createElement)(Z.Loader.Sequence,{interval:3e3},a.paragraphs.map(((e,t)=>(0,i.createElement)(Z.Loader.Subtext,{key:t},(0,i.createElement)("b",null,null==e?void 0:e.label),null==e?void 0:e.text,null==e?void 0:e.element))))))};var ne=o(32008);const re=e=>{let{installed:t=!1,icon:o,title:n,onChange:r,checked:s=!1,description:a,learnMoreLink:l}=e;return(0,i.createElement)("div",{className:"woocommerce-profiler-plugins-plugin-card"},(0,i.createElement)("div",{className:"woocommerce-profiler-plugin-card-top"},!t&&(0,i.createElement)(j.CheckboxControl,{className:"core-profiler__checkbox",checked:s,onChange:r||(()=>{})}),o,(0,i.createElement)("div",{className:w()("woocommerce-profiler-plugins-plugin-card-text-header",{installed:t})},(0,i.createElement)("h3",null,n),t&&(0,i.createElement)("span",null,(0,y.__)("Installed","woocommerce")))),(0,i.createElement)("div",{className:w()("woocommerce-profiler-plugins-plugin-card-text",{"smaller-margin-left":t})},(0,i.createElement)("p",{dangerouslySetInnerHTML:(0,ne.ZP)(a)}),l))};var se,ae=o(73463);const le=((null===(se=(0,ae.O3)("locale"))||void 0===se?void 0:se.siteLocale)||"en_US").replace("_","-"),ce=e=>new Intl.ListFormat(le,{style:"long",type:"conjunction"}).formatToParts(e);var ue=o(34374);const{pure:ge}=a,Me=(0,s.C)({id:"plugin-installer",predictableActionArguments:!0,initial:"installing",context:{selectedPlugins:[],pluginsAvailable:[],pluginsInstallationQueue:[],installedPlugins:[],startTime:0,installationDuration:0,errors:[]},states:{installing:{initial:"installer",entry:["populateDefaults","assignPluginsInstallationQueue","assignStartTime"],after:{INSTALLATION_TIMEOUT:"timedOut"},states:{installer:{initial:"installing",states:{installing:{invoke:{src:"installPlugin",onDone:{actions:["assignInstallationSuccessDetails"],target:"removeFromQueue"},onError:{actions:"assignInstallationErrorDetails",target:"removeFromQueue"}}},removeFromQueue:{entry:["removePluginFromQueue","updateParentWithPluginProgress"],always:[{target:"installing",cond:"hasPluginsToInstall"},{target:"#installation-finished"}]}}}}},finished:{id:"installation-finished",entry:["assignInstallationDuration"],always:[{target:"reportErrors",cond:"hasErrors"},{target:"reportSuccess"}]},timedOut:{entry:["assignInstallationDuration"],invoke:{src:"queueRemainingPluginsAsync",onDone:{target:"reportSuccess"}}},reportErrors:{entry:"updateParentWithInstallationErrors"},reportSuccess:{entry:"updateParentWithInstallationSuccess"}}},{delays:{INSTALLATION_TIMEOUT:3e4},actions:{populateDefaults:(0,n.f0)({installedPlugins:[],errors:[],startTime:0,installationDuration:0}),assignPluginsInstallationQueue:(0,n.f0)({pluginsInstallationQueue:e=>e.selectedPlugins.slice().sort(((t,o)=>{var i,n;const r=e.pluginsAvailable.find((e=>e.key===t)),s=e.pluginsAvailable.find((e=>e.key===o));return(null!==(i=null==r?void 0:r.install_priority)&&void 0!==i?i:99)-(null!==(n=null==s?void 0:s.install_priority)&&void 0!==n?n:99)}))}),assignStartTime:(0,n.f0)({startTime:()=>window.performance.now()}),assignInstallationDuration:(0,n.f0)({installationDuration:e=>window.performance.now()-e.startTime}),assignInstallationSuccessDetails:(0,n.f0)({installedPlugins:(e,t)=>{const o=e.pluginsInstallationQueue[0];return[...e.installedPlugins,{plugin:o,installTime:t.data.data.install_time[o]||0}]}}),assignInstallationErrorDetails:(0,n.f0)({errors:(e,t)=>[...e.errors,{plugin:e.pluginsInstallationQueue[0],error:t.data.data.message}]}),removePluginFromQueue:(0,n.f0)({pluginsInstallationQueue:e=>e.pluginsInstallationQueue.slice(1)}),updateParentWithPluginProgress:ge((e=>(0,n.lj)({type:"PLUGIN_INSTALLED_AND_ACTIVATED",payload:{pluginsCount:e.selectedPlugins.length,installedPluginIndex:e.selectedPlugins.length-e.pluginsInstallationQueue.length}}))),updateParentWithInstallationErrors:(0,n.lj)((e=>({type:"PLUGINS_INSTALLATION_COMPLETED_WITH_ERRORS",payload:{errors:e.errors}}))),updateParentWithInstallationSuccess:(0,n.lj)((e=>({type:"PLUGINS_INSTALLATION_COMPLETED",payload:{installationCompletedResult:{installedPlugins:e.installedPlugins,totalTime:e.installationDuration}}})))},guards:{hasErrors:e=>e.errors.length>0,hasPluginsToInstall:e=>e.pluginsInstallationQueue.length>0},services:{installPlugin:e=>(0,u.dispatch)(M.PLUGINS_STORE_NAME).installAndActivatePlugins([e.pluginsInstallationQueue[0]]),queueRemainingPluginsAsync:e=>(0,u.dispatch)(M.ONBOARDING_STORE_NAME).installAndActivatePluginsAsync(e.pluginsInstallationQueue)}}),me=()=>(0,i.createElement)(i.Fragment,null,(0,i.createElement)("div",{className:"woocommerce-profile-wizard__spinner","data-testid":"core-profiler-loading-screen"},(0,i.createElement)(j.Spinner,null)));var Ne=o(14599);const pe={recordTracksStepViewed:(e,t,o)=>{let{action:i}=o;const{step:n}=i;(0,Ne.recordEvent)("coreprofiler_step_view",{step:n,wc_version:(0,N.getSetting)("wcVersion")})},recordTracksStepSkipped:(e,t,o)=>{let{action:i}=o;const{step:n}=i;(0,Ne.recordEvent)(`coreprofiler_${n}_skip`)},recordTracksIntroCompleted:()=>{(0,Ne.recordEvent)("coreprofiler_step_complete",{step:"intro_opt_in",wc_version:(0,N.getSetting)("wcVersion")})},recordTracksUserProfileCompleted:(e,t)=>{(0,Ne.recordEvent)("coreprofiler_step_complete",{step:"user_profile",wc_version:(0,N.getSetting)("wcVersion")}),(0,Ne.recordEvent)("coreprofiler_user_profile",{business_choice:t.payload.userProfile.businessChoice,selling_online_answer:t.payload.userProfile.sellingOnlineAnswer,selling_platforms:t.payload.userProfile.sellingPlatforms?t.payload.userProfile.sellingPlatforms.join():null})},recordTracksSkipBusinessLocationCompleted:()=>{(0,Ne.recordEvent)("coreprofiler_step_complete",{step:"skip_business_location",wc_version:(0,N.getSetting)("wcVersion")})},recordTracksBusinessInfoCompleted:(e,t)=>{(0,Ne.recordEvent)("coreprofiler_step_complete",{step:"business_info",email_marketing_experiment_assignment:e.emailMarketingExperimentAssignment,wc_version:(0,N.getSetting)("wcVersion")}),(0,Ne.recordEvent)("coreprofiler_business_info",{business_name_filled:-1===W.findIndex((e=>e===t.payload.storeName)),industry:t.payload.industry,store_location_previously_set:e.onboardingProfile.is_store_country_set||!1,geolocation_success:void 0!==e.geolocatedLocation,geolocation_overruled:t.payload.geolocationOverruled})},recordTracksPluginsLearnMoreLinkClicked:(e,t,o)=>{let{action:i}=o;const{step:n}=i;(0,Ne.recordEvent)(`coreprofiler_${n}_learn_more_link_clicked`,{plugin:t.payload.plugin,link:t.payload.learnMoreLink})},recordFailedPluginInstallations:(e,t)=>{(0,Ne.recordEvent)("coreprofiler_store_extensions_installed_and_activated",{success:!1,failed_extensions:t.payload.errors.map((e=>(0,ue.br)(e.plugin)))})},recordSuccessfulPluginInstallation:(e,t)=>{const o=t.payload.installationCompletedResult,i={success:!0,installed_extensions:o.installedPlugins.map((e=>(0,ue.br)(e.plugin))),total_time:(0,ue.Jm)(o.totalTime)};for(const e of o.installedPlugins)i["install_time_"+(0,ue.br)(e.plugin)]=(0,ue.Jm)(e.installTime);(0,Ne.recordEvent)("coreprofiler_store_extensions_installed_and_activated",i)},recordTracksPluginsInstallationRequest:(e,t)=>{(0,Ne.recordEvent)("coreprofiler_store_extensions_continue",{shown:t.payload.pluginsShown||[],selected:t.payload.pluginsSelected||[],unselected:t.payload.pluginsUnselected||[]})},recordTracksIsEmailChanged:(e,t)=>{if("treatment"===e.emailMarketingExperimentAssignment){let i,n;if(e.onboardingProfile.store_email)i="onboarding_profile_store_email",n=t.payload.storeEmailAddress!==e.onboardingProfile.store_email;else if(e.currentUserEmail)i="current_user_email",n=t.payload.storeEmailAddress!==e.currentUserEmail;else{var o;i="was_empty",n=(null===(o=t.payload.storeEmailAddress)||void 0===o?void 0:o.length)>0}(0,Ne.recordEvent)("coreprofiler_email_marketing",{opt_in:t.payload.isOptInMarketing,email_field_prefilled_source:i,email_field_modified:n})}},recordTracksStepViewedBusinessInfo:(e,t,o)=>{let{action:i}=o;const{step:n}=i;(0,Ne.recordEvent)("coreprofiler_step_view",{step:n,email_marketing_experiment_assignment:e.emailMarketingExperimentAssignment,wc_version:(0,N.getSetting)("wcVersion")})}};var de=o(82580);const Ie=(0,n.f0)({optInDataSharing:(e,t)=>"no"!==t.data}),ye=(0,n.f0)({businessInfo:(e,t)=>({...e.businessInfo,storeName:W.includes(t.data)?void 0:t.data})}),je=(0,n.f0)({businessInfo:(e,t)=>({...e.businessInfo,location:t.data})}),Le=(0,n.f0)({spawnGetCountriesRef:()=>(0,r.Cs)((()=>(0,u.resolveSelect)(M.COUNTRIES_STORE_NAME).getCountries()),"core-profiler-prefetch-countries")}),Te=(0,n.f0)({spawnPrefetchOptionsRef:(e,t,o)=>{let{action:i}=o;(0,r.Cs)((()=>Promise.all([i.options.map((e=>(0,u.resolveSelect)(M.OPTIONS_STORE_NAME).getOption(e)))])),"core-profiler-prefetch-options")}}),De=(0,n.f0)({countries:(e,t)=>t.data.reduce(((e,t)=>{if(!t.states.length)return e.push({key:t.code,label:(0,R.decodeEntities)(t.name)}),e;const o=t.states.map((e=>({key:t.code+":"+e.code,label:(0,R.decodeEntities)(t.name)+" — "+(0,R.decodeEntities)(e.name)})));return e.push(...o),e}),[])}),we=(0,n.f0)({userProfile:(e,t)=>{if(!t.data)return{};const{business_choice:o,selling_online_answer:i,selling_platforms:n,...r}=t.data;return{...r,businessChoice:o,sellingOnlineAnswer:i,sellingPlatforms:n}}}),Ee=(0,n.f0)({currentUserEmail:(e,t)=>{if(t.data&&t.data.length>0&&"wordpress@example.com"!==t.data)return t.data}}),_e=(0,n.f0)({onboardingProfile:(e,t)=>t.data}),Se=(0,n.f0)({emailMarketingExperimentAssignment:(e,t)=>{var o;return null!==(o=t.data.variationName)&&void 0!==o?o:"control"}}),Ae=async e=>{if(e.optInDataSharing)return(0,u.resolveSelect)(M.COUNTRIES_STORE_NAME).geolocate()},Oe=(0,n.f0)({spawnGeolocationRef:e=>(0,r.Cs)((()=>Ae(e)),"core-profiler-prefetch-geolocation")}),fe=(0,n.f0)({geolocatedLocation:(e,t)=>t.data}),ke=(0,n.f0)({spawnUpdateOnboardingProfileOptionRef:e=>(0,r.Cs)((()=>(e=>{const{businessChoice:t,sellingOnlineAnswer:o,sellingPlatforms:i}=e.userProfile;return(0,u.dispatch)(M.OPTIONS_STORE_NAME).updateOptions({woocommerce_onboarding_profile:{...e.onboardingProfile,business_choice:t,selling_online_answer:o,selling_platforms:i}})})(e)),"update-onboarding-profile")}),ze=async e=>{const{general:t={}}=await(0,u.resolveSelect)(M.SETTINGS_STORE_NAME).getSettings("general"),o=(0,de.so)(e),{currencySymbols:i={},localeInfo:n={}}=(0,ae.O3)("onboarding",{}),r=d()().getDataForCountry(o,n,i);if(0!==Object.keys(r).length)return(0,u.dispatch)(M.SETTINGS_STORE_NAME).updateAndPersistSettingsForGroup("general",{general:{...t,woocommerce_currency:r.code,woocommerce_currency_pos:r.symbolPosition,woocommerce_price_thousand_sep:r.thousandSeparator,woocommerce_price_decimal_sep:r.decimalSeparator,woocommerce_price_num_decimals:r.precision}})},Ce=(0,n.f0)({businessInfo:(e,t)=>({...e.businessInfo,location:t.payload.storeLocation})}),xe=(0,n.f0)({userProfile:(e,t)=>t.payload.userProfile}),be=async(e,t)=>{const o=await(0,u.resolveSelect)(M.OPTIONS_STORE_NAME).getOption("woocommerce_onboarding_profile");return await ze(t.payload.storeLocation),(0,u.dispatch)(M.OPTIONS_STORE_NAME).updateOptions({blogname:t.payload.storeName,woocommerce_default_country:t.payload.storeLocation,woocommerce_onboarding_profile:{...o,is_store_country_set:!0,industry:[t.payload.industry],is_agree_marketing:t.payload.isOptInMarketing,store_email:t.payload.storeEmailAddress.length>0?t.payload.storeEmailAddress:null}})},he=(0,n.f0)({persistBusinessInfoRef:(e,t)=>(0,r.Cs)((()=>be(0,t)),"core-profiler-update-business-info")}),ve=e=>new Promise((t=>{setTimeout(t,e)})),Pe=(0,n.f0)({optInDataSharing:(e,t)=>t.payload.optInDataSharing}),Ue=(0,n.f0)({isJetpackConnectedRef:()=>(0,r.Cs)((()=>(0,u.resolveSelect)(M.PLUGINS_STORE_NAME).isJetpackConnected()),"core-profiler-prefetch-is-jetpack-connected")}),Qe=(0,n.f0)({jetpackAuthUrlRef:()=>(0,r.Cs)((()=>(0,u.resolveSelect)(M.ONBOARDING_STORE_NAME).getJetpackAuthUrl({redirectUrl:(0,N.getAdminLink)("admin.php?page=wc-admin"),from:"woocommerce-core-profiler"})),"core-profiler-prefetch-jetpack-auth-url")}),Ye=(0,n.f0)({extensionsRef:()=>(0,r.Cs)((()=>(0,u.resolveSelect)(M.ONBOARDING_STORE_NAME).getFreeExtensions()),"core-profiler-prefetch-extensions")}),Ge=(0,n.f0)({pluginsAvailable:(e,t)=>t.data}),Ze=(0,n.f0)({pluginsSelected:(e,t)=>t.payload.pluginsSelected.map(ue.V7)}),Re={preFetchGetPlugins:Ye,preFetchGetCountries:Le,preFetchGeolocation:Oe,preFetchOptions:Te,preFetchIsJetpackConnected:Ue,preFetchJetpackAuthUrl:Qe},Be={...Re,...pe,handlePlugins:Ge,updateQueryStep:(e,t,o)=>{let{action:i}=o;const{step:n}=(0,g.getQuery)();i.step!==n&&(0,g.updateQueryString)({step:i.step})},handleTrackingOption:Ie,handleGeolocation:fe,handleStoreNameOption:ye,handleStoreCountryOption:je,assignOptInDataSharing:Pe,assignStoreLocation:Ce,assignPluginsSelected:Ze,assignUserProfile:xe,handleCountries:De,handleOnboardingProfileOption:we,assignOnboardingProfile:_e,assignMarketingOptInExperimentAssignment:Se,assignCurrentUserEmail:Ee,persistBusinessInfo:he,spawnUpdateOnboardingProfileOption:ke,redirectToWooHome:()=>{window.location.href=(0,g.getNewPath)({},"/",{})},redirectToJetpackAuthPage:(e,t)=>{const o=new URL(t.data.url);o.searchParams.set("installed_ext_success","1");const i=e.pluginsSelected.find((e=>"jetpack"===e||"jetpack-boost"===e));if(i){const e="jetpack"===i?"jetpack-ai":"jetpack-boost";o.searchParams.set("plugin_name",e)}window.location.href=o.toString()}},We={getAllowTrackingOption:async()=>(0,u.resolveSelect)(M.OPTIONS_STORE_NAME).getOption("woocommerce_allow_tracking"),getStoreNameOption:async()=>(0,u.resolveSelect)(M.OPTIONS_STORE_NAME).getOption("blogname"),getStoreCountryOption:async()=>(0,u.resolveSelect)(M.OPTIONS_STORE_NAME).getOption("woocommerce_default_country"),getCountries:async()=>(0,u.resolveSelect)(M.COUNTRIES_STORE_NAME).getCountries(),getGeolocation:Ae,getOnboardingProfileOption:async()=>(0,u.resolveSelect)(M.OPTIONS_STORE_NAME).getOption("woocommerce_onboarding_profile"),getMarketingOptInExperimentAssignment:async()=>(0,m.loadExperimentAssignment)("woocommerce_core_profiler_email_marketing_opt_in_2023_Q4_V1"),getCurrentUserEmail:async()=>{const e=await(0,u.resolveSelect)(M.USER_STORE_NAME).getCurrentUser();return null==e?void 0:e.email},getPlugins:async()=>{var e;return(0,u.dispatch)(M.ONBOARDING_STORE_NAME).invalidateResolution("getFreeExtensions"),(null===(e=(await(0,u.resolveSelect)(M.ONBOARDING_STORE_NAME).getFreeExtensions()).find((e=>"obw/core-profiler"===e.key)))||void 0===e?void 0:e.plugins)||[]},browserPopstateHandler:()=>e=>{const t=()=>{e("EXTERNAL_URL_UPDATE")};return window.addEventListener("popstate",t),()=>{window.removeEventListener("popstate",t)}},updateBusinessInfo:be,updateTrackingOption:async e=>{await new Promise((t=>{e.optInDataSharing&&"function"==typeof window.wcTracks.enable?window.wcTracks.enable((()=>{(0,m.initializeExPlat)(),t()})):(e.optInDataSharing||(window.wcTracks.isEnabled=!1),t())}));const t=e.optInDataSharing?"yes":"no";(0,u.dispatch)(M.OPTIONS_STORE_NAME).updateOptions({woocommerce_allow_tracking:t})}},Je=(0,s.C)({id:"coreProfiler",initial:"navigate",predictableActionArguments:!0,invoke:{src:"browserPopstateHandler"},on:{EXTERNAL_URL_UPDATE:{target:"navigate"}},context:{optInDataSharing:!1,userProfile:{skipped:!0},geolocatedLocation:void 0,businessInfo:{storeName:void 0,industry:void 0,storeCountryPreviouslySet:!1,location:"US:CA"},countries:[],pluginsAvailable:[],pluginsInstallationErrors:[],pluginsSelected:[],loader:{},onboardingProfile:{},jetpackAuthUrl:void 0,emailMarketingExperimentAssignment:"control",currentUserEmail:void 0},states:{navigate:{always:[{target:"#introOptIn",cond:{type:"hasStepInUrl",step:"intro-opt-in"}},{target:"#userProfile",cond:{type:"hasStepInUrl",step:"user-profile"}},{target:"#businessInfo",cond:{type:"hasStepInUrl",step:"business-info"}},{target:"#plugins",cond:{type:"hasStepInUrl",step:"plugins"}},{target:"#skipGuidedSetup",cond:{type:"hasStepInUrl",step:"skip-guided-setup"}},{target:"introOptIn"}]},introOptIn:{id:"introOptIn",initial:"preIntroOptIn",states:{preIntroOptIn:{entry:["preFetchGetPlugins","preFetchGetCountries",{type:"preFetchOptions",options:["blogname","woocommerce_onboarding_profile","woocommerce_default_country"]}],type:"parallel",states:{trackingOption:{initial:"fetching",states:{fetching:{invoke:{src:"getAllowTrackingOption",onDone:[{actions:["handleTrackingOption"],target:"done"}],onError:{target:"done"}}},done:{type:"final"}}}},onDone:{target:"introOptIn"},meta:{progress:0}},introOptIn:{on:{INTRO_COMPLETED:{target:"postIntroOptIn",actions:["assignOptInDataSharing"]},INTRO_SKIPPED:{target:"#skipGuidedSetup",actions:["assignOptInDataSharing","updateTrackingOption"]}},meta:{progress:20,component:e=>{let{sendEvent:t,navigationProgress:o}=e;const[n,r]=(0,i.useState)(!0);return(0,i.createElement)("div",{className:"woocommerce-profiler-intro-opt-in","data-testid":"core-profiler-intro-opt-in-screen"},(0,i.createElement)(A,{percentage:o,skipText:(0,y.__)("Skip guided setup","woocommerce"),onSkip:()=>t({type:"INTRO_SKIPPED",payload:{optInDataSharing:!1}})}),(0,i.createElement)("div",{className:"woocommerce-profiler-page__content woocommerce-profiler-intro-opt-in__content"},(0,i.createElement)("div",{className:"woocommerce-profiler-welcome-image"}),(0,i.createElement)(E,{title:(0,y.__)("Welcome to Woo!","woocommerce"),subTitle:(0,L.Z)({mixedString:(0,y.__)("It's great to have you here with us! We'll be guiding you through the setup process – first, answer a few questions to tailor your experience.","woocommerce"),components:{br:(0,i.createElement)("br",null)}})}),(0,i.createElement)(j.Button,{className:"woocommerce-profiler-setup-store__button",variant:"primary",onClick:()=>t({type:"INTRO_COMPLETED",payload:{optInDataSharing:n}})},(0,y.__)("Set up my store","woocommerce")),(0,i.createElement)("div",{className:"woocommerce-profiler-intro-opt-in__footer"},(0,i.createElement)(j.CheckboxControl,{className:"core-profiler__checkbox",label:(0,L.Z)({mixedString:(0,y.__)("I agree to share my data to tailor my store setup experience and get more relevant content (WooCommerce will never rent or sell your data, and you can opt out at any time in WooCommerce settings. {{link}}Learn more about usage tracking.{{/link}})","woocommerce"),components:{link:(0,i.createElement)(T.Link,{href:"https://woocommerce.com/usage-tracking?utm_medium=product",target:"_blank",type:"external"})}}),checked:n,onChange:r}))))}}},postIntroOptIn:{invoke:{src:"updateTrackingOption",onDone:{actions:["recordTracksIntroCompleted"],target:"#userProfile"}}}}},userProfile:{id:"userProfile",initial:"preUserProfile",states:{preUserProfile:{invoke:{src:"getOnboardingProfileOption",onDone:[{actions:["handleOnboardingProfileOption","assignOnboardingProfile"],target:"userProfile"}],onError:{target:"userProfile"}}},userProfile:{meta:{progress:40,component:e=>{let{sendEvent:t,navigationProgress:o,context:n}=e;const[r,s]=(0,i.useState)(n.userProfile.businessChoice||"im_just_starting_my_business"),[a,l]=(0,i.useState)(n.userProfile.sellingOnlineAnswer||null),[c,u]=(0,i.useState)(n.userProfile.sellingPlatforms||null),[g,M]=(0,i.useState)(!1);return(0,i.createElement)("div",{className:"woocommerce-profiler-user-profile","data-testid":"core-profiler-user-profile"},(0,i.createElement)(A,{percentage:o,skipText:(0,y.__)("Skip this step","woocommerce"),onSkip:()=>t({type:"USER_PROFILE_SKIPPED",payload:{userProfile:{skipped:!0}}})}),(0,i.createElement)("div",{className:w()("woocommerce-profiler-page__content woocommerce-profiler-user-profile__content",{"is-platform-selector-open":g})},(0,i.createElement)(E,{className:"woocommerce-profiler__stepper-heading",title:(0,y.__)("Which one of these best describes you?","woocommerce"),subTitle:(0,y.__)("Let us know where you are in your commerce journey so that we can tailor your Woo experience for you.","woocommerce")}),(0,i.createElement)("form",{className:"woocommerce-user-profile-choices"},(0,i.createElement)("fieldset",null,(0,i.createElement)("legend",{className:"screen-reader-text"},(0,y.__)("Which one of these best describes you?","woocommerce")),C.map((e=>{let{title:t,value:o}=e;return(0,i.createElement)(k,{key:o,name:"user-profile-choice",title:t,selected:r===o,value:o,onChange:e=>{s(e)},subOptionsComponent:"im_already_selling"===o?(0,i.createElement)(i.Fragment,null,(0,i.createElement)("div",{className:"woocommerce-profiler-selling-online-question"},(0,i.createElement)("p",{className:"woocommerce-profiler-question-label"},(0,y.__)("Are you selling online?","woocommerce")),(0,i.createElement)(T.SelectControl,{className:"woocommerce-profiler-select-control__selling-online-question",instanceId:1,label:(0,y.__)("Select an option","woocommerce"),autoComplete:"new-password",options:x,excludeSelectedOptions:!1,help:(0,i.createElement)(O.Z,{icon:f.Z}),onChange:e=>{l(e)},multiple:!1,selected:a})),a&&["yes_im_selling_online","im_selling_both_online_and_offline"].includes(a)&&(0,i.createElement)("div",{className:"woocommerce-profiler-selling-platform"},(0,i.createElement)("p",{className:"woocommerce-profiler-question-label"},(0,y.__)("Which platform(s) are you currently using?","woocommerce")),(0,i.createElement)(z,{options:b,selectedOptions:b.filter((e=>null==c?void 0:c.includes(e.value))),onSelect:e=>{u(e.map((e=>e.value)))},onOpenClose:M}))):null})})))),(0,i.createElement)("div",{className:"woocommerce-profiler-button-container"},(0,i.createElement)(j.Button,{className:"woocommerce-profiler-button",variant:"primary",onClick:()=>{t({type:"USER_PROFILE_COMPLETED",payload:{userProfile:{businessChoice:r,sellingOnlineAnswer:"im_already_selling"===r?a:null,sellingPlatforms:"im_already_selling"===r?c:null}}})}},(0,y.__)("Continue","woocommerce")))))}},entry:[{type:"recordTracksStepViewed",step:"user_profile"},{type:"updateQueryStep",step:"user-profile"},"preFetchGeolocation"],on:{USER_PROFILE_COMPLETED:{target:"postUserProfile",actions:["assignUserProfile"]},USER_PROFILE_SKIPPED:{target:"postUserProfile",actions:["assignUserProfile"]}},exit:a.choose([{cond:(e,t)=>"USER_PROFILE_COMPLETED"===t.type,actions:"recordTracksUserProfileCompleted"},{cond:(e,t)=>"USER_PROFILE_SKIPPED"===t.type,actions:[{type:"recordTracksStepSkipped",step:"user_profile"}]}])},postUserProfile:{entry:["spawnUpdateOnboardingProfileOption"],always:{target:"#businessInfo"}}}},businessInfo:{id:"businessInfo",initial:"preBusinessInfo",entry:[{type:"updateQueryStep",step:"business-info"}],states:{preBusinessInfo:{type:"parallel",states:{geolocation:{initial:"checkDataOptIn",states:{checkDataOptIn:{invoke:{src:"getAllowTrackingOption",onDone:[{actions:["handleTrackingOption"],target:"fetching"}],onError:{target:"done"}}},fetching:{invoke:{src:"getGeolocation",onDone:{target:"done",actions:"handleGeolocation"},onError:{target:"done"}}},done:{type:"final"}}},storeCountryOption:{initial:"fetching",states:{fetching:{invoke:{src:"getStoreCountryOption",onDone:[{actions:["handleStoreCountryOption"],target:"done"}],onError:{target:"done"}}},done:{type:"final"}}},onboardingProfileOption:{initial:"fetching",states:{fetching:{invoke:{src:"getOnboardingProfileOption",onDone:[{actions:["assignOnboardingProfile"],target:"done"}],onError:{target:"done"}}},done:{type:"final"}}},storeNameOption:{initial:"fetching",states:{fetching:{invoke:{src:"getStoreNameOption",onDone:[{actions:["handleStoreNameOption"],target:"done"}],onError:{target:"done"}}},done:{type:"final"}}},countries:{initial:"fetching",states:{fetching:{invoke:{src:"getCountries",onDone:{target:"done",actions:"handleCountries"}}},done:{type:"final"}}},marketingOptInExperiment:{initial:"fetching",states:{fetching:{invoke:{src:"getMarketingOptInExperimentAssignment",onDone:{target:"done",actions:["assignMarketingOptInExperimentAssignment"]}}},done:{type:"final"}}},currentUserEmail:{initial:"fetching",states:{fetching:{invoke:{src:"getCurrentUserEmail",onDone:{target:"done",actions:["assignCurrentUserEmail"]},onError:{target:"done"}}},done:{type:"final"}}}},onDone:{target:"businessInfo"}},businessInfo:{meta:{progress:60,component:e=>{let{context:t,navigationProgress:o,sendEvent:n}=e;const{geolocatedLocation:r,userProfile:{businessChoice:s},businessInfo:a,countries:l,onboardingProfile:{is_store_country_set:c,industry:u,business_choice:g,is_agree_marketing:M,store_email:m},emailMarketingExperimentAssignment:N,currentUserEmail:p}=t,[d,I]=(0,i.useState)(a.storeName||""),[L,D]=(0,i.useState)({key:"",label:""});(0,i.useEffect)((()=>{if(c){const e=l.find((e=>e.key===a.location));D(e||{key:"",label:""})}}),[a.location,l,c]);const[_,S]=(0,i.useState)({key:"",label:""});(0,i.useEffect)((()=>{if(r){const e=(0,Z.findCountryOption)(l,r);e&&(S(e),c||D(e))}}),[l,c,r]);const k=r&&(0,Z.getCountry)(L.key)!==(0,Z.getCountry)(_.key),[z,C]=(0,i.useState)(u?J.find((e=>e.key===u[0])):void 0),x=(0,y.__)("Select country/region","woocommerce"),b=F[s||g||"im_just_starting_my_business"],[h,v]=(0,i.useState)(!1),[P,U]=(0,i.useState)(!1),[Q,Y]=(0,i.useState)(!1),[W,V]=(0,i.useState)(m||p||""),[H,X]=(0,i.useState)(M||!1),[q,K]=(0,i.useState)(!1);return(0,i.useEffect)((()=>{if(q){const e=B.z.string().email().safeParse(W);Y(H&&!e.success),K(!1)}}),[H,q,W]),(0,i.createElement)("div",{className:"woocommerce-profiler-business-information","data-testid":"core-profiler-business-information"},(0,i.createElement)(A,{percentage:o}),(0,i.createElement)("div",{className:"woocommerce-profiler-page__content woocommerce-profiler-business-information__content"},(0,i.createElement)(E,{className:"woocommerce-profiler__stepper-heading",title:(0,y.__)("Tell us a bit about your store","woocommerce"),subTitle:(0,y.__)("We'll use this information to help you set up payments, shipping, and taxes, as well as recommending the best theme for your store.","woocommerce")}),(0,i.createElement)("form",{className:"woocommerce-profiler-business-information-form",autoComplete:"off"},(0,i.createElement)(j.TextControl,{className:"woocommerce-profiler-business-info-store-name",onChange:e=>{I(e)},value:(0,R.decodeEntities)(d),label:(0,i.createElement)(i.Fragment,null,(0,y.__)("Give your store a name","woocommerce")),placeholder:(0,y.__)("Ex. My awesome store","woocommerce")}),(0,i.createElement)("p",{className:"woocommerce-profiler-question-subtext"},(0,y.__)("Don't worry — you can always change it later!","woocommerce")),(0,i.createElement)("p",{className:"woocommerce-profiler-question-label"},b),(0,i.createElement)(T.SelectControl,{className:"woocommerce-profiler-select-control__industry",instanceId:1,placeholder:(0,y.__)("Select an industry","woocommerce"),label:(0,y.__)("Select an industry","woocommerce"),options:J,excludeSelectedOptions:!1,help:(0,i.createElement)(O.Z,{icon:f.Z}),onChange:e=>{e.length&&C(e[0])},selected:z?[z]:[],showAllOnFocus:!0,isSearchable:!0}),(0,i.createElement)("p",{className:"woocommerce-profiler-question-label"},(0,y.__)("Where is your store located?","woocommerce"),(0,i.createElement)("span",{className:"woocommerce-profiler-question-required"},"*")),(0,i.createElement)(T.SelectControl,{className:"woocommerce-profiler-select-control__country",instanceId:2,placeholder:x,label:""===L.key?x:"",getSearchExpression:e=>new RegExp("(^"+e+"| — ("+e+"))","i"),options:l,excludeSelectedOptions:!1,help:(0,i.createElement)(O.Z,{icon:f.Z}),onChange:e=>{e.length&&D(e[0])},selected:L?[L]:[],showAllOnFocus:!0,isSearchable:!0}),(0,i.createElement)("div",{className:"woocommerce-profiler-select-control__country-spacer"}),k&&!h&&(0,i.createElement)(j.Notice,{className:"woocommerce-profiler-geolocation-notice",onRemove:()=>v(!0),status:"warning"},(0,i.createElement)("p",null,(0,i.createInterpolateElement)((0,y.__)("It looks like you're located in . Are you sure you want to create a store in ?","woocommerce"),{geolocatedCountry:(0,i.createElement)(j.Button,{className:"geolocation-notice-geolocated-country",variant:"link",onClick:()=>D(_)},null==r?void 0:r.country_long),selectedCountry:(0,i.createElement)("span",{className:"geolocation-notice-selected-country"},L.label)})),(0,i.createElement)("p",null,(0,y.__)("Setting up your store in the wrong country may lead to the following issues: ","woocommerce")),(0,i.createElement)("ul",{className:"woocommerce-profiler-geolocation-notice__list"},(0,i.createElement)("li",null,(0,y.__)("Tax and duty obligations","woocommerce")),(0,i.createElement)("li",null,(0,y.__)("Payment issues","woocommerce")),(0,i.createElement)("li",null,(0,y.__)("Shipping issues","woocommerce")))),"treatment"===N&&(0,i.createElement)(i.Fragment,null,(0,i.createElement)(j.TextControl,{className:w()("woocommerce-profiler-business-info-email-adddress",{"is-error":Q}),onChange:e=>{Q&&K(!0),V(e)},onBlur:()=>{K(!0)},value:(0,R.decodeEntities)(W),label:(0,i.createElement)(i.Fragment,null,(0,y.__)("Your email address","woocommerce"),H&&(0,i.createElement)("span",{className:"woocommerce-profiler-question-required"},"*")),placeholder:(0,y.__)("wordpress@example.com","woocommerce")}),Q&&(0,i.createElement)(G,{isError:!0,text:(0,y.__)("This email is not valid.","woocommerce")}),(0,i.createElement)(j.CheckboxControl,{className:"core-profiler__checkbox",label:(0,y.__)("Opt-in to receive tips, discounts, and recommendations from the Woo team directly in your inbox.","woocommerce"),checked:H,onChange:e=>{X(e),K(!0)}}))),(0,i.createElement)("div",{className:"woocommerce-profiler-button-container"},(0,i.createElement)(j.Button,{className:"woocommerce-profiler-button",variant:"primary",disabled:!L.key||"treatment"===N&&Q,onClick:()=>{n({type:"BUSINESS_INFO_COMPLETED",payload:{storeName:d,industry:null==z?void 0:z.key,storeLocation:L.key,geolocationOverruled:k||!1,isOptInMarketing:H,storeEmailAddress:W}}),U(!0)}},P?(0,i.createElement)(j.Spinner,null):(0,y.__)("Continue","woocommerce")))))}},entry:[{type:"recordTracksStepViewedBusinessInfo",step:"business_info"}],on:{BUSINESS_INFO_COMPLETED:{target:"postBusinessInfo",actions:["recordTracksBusinessInfoCompleted","recordTracksIsEmailChanged"]}}},postBusinessInfo:{invoke:{src:"updateBusinessInfo",onDone:{target:"#plugins"},onError:{target:"#plugins"}}}}},skipGuidedSetup:{id:"skipGuidedSetup",initial:"preSkipFlowBusinessLocation",entry:[{type:"updateQueryStep",step:"skip-guided-setup"}],states:{preSkipFlowBusinessLocation:{invoke:{src:"getCountries",onDone:[{actions:["handleCountries"],target:"skipFlowBusinessLocation"}],onError:{target:"skipFlowBusinessLocation"}}},skipFlowBusinessLocation:{on:{BUSINESS_LOCATION_COMPLETED:{target:"postSkipFlowBusinessLocation",actions:["assignStoreLocation","recordTracksSkipBusinessLocationCompleted"]}},entry:[{type:"recordTracksStepViewed",step:"skip_business_location"}],meta:{progress:80,component:e=>{let{sendEvent:t,navigationProgress:o,context:n}=e;const[r,s]=(0,i.useState)({key:"",label:""}),a=(0,y.__)("Select country/region","woocommerce");return(0,i.createElement)("div",{className:"woocommerce-profiler-business-location","data-testid":"core-profiler-business-location"},(0,i.createElement)(A,{percentage:o}),(0,i.createElement)("div",{className:"woocommerce-profiler-page__content woocommerce-profiler-business-location__content"},(0,i.createElement)(E,{className:"woocommerce-profiler__stepper-heading",title:(0,y.__)("Where is your business located?","woocommerce"),subTitle:(0,y.__)("We'll use this information to help you set up payments, shipping, and taxes.","woocommerce")}),(0,i.createElement)(T.SelectControl,{className:"woocommerce-profiler-select-control__country",instanceId:1,placeholder:a,label:""===r.key?a:"",getSearchExpression:e=>new RegExp("(^"+e+"| — ("+e+"))","i"),autoComplete:"new-password",options:n.countries,excludeSelectedOptions:!1,help:(0,i.createElement)(O.Z,{icon:f.Z}),onChange:e=>{e.length&&s(e[0])},selected:r?[r]:[],showAllOnFocus:!0,isSearchable:!0}),(0,i.createElement)("div",{className:"woocommerce-profiler-button-container woocommerce-profiler-go-to-mystore__button-container"},(0,i.createElement)(j.Button,{className:"woocommerce-profiler-button",variant:"primary",disabled:!r.key,onClick:()=>{t({type:"BUSINESS_LOCATION_COMPLETED",payload:{storeLocation:r.key}})}},(0,y.__)("Go to my store","woocommerce")))))}}},postSkipFlowBusinessLocation:{initial:"updateBusinessLocation",states:{updateBusinessLocation:{entry:(0,n.f0)({loader:{progress:10,useStages:"skippedGuidedSetup"}}),invoke:{src:e=>{const t=(0,u.dispatch)(M.ONBOARDING_STORE_NAME).updateProfileItems({skipped:!0}),o=(i=e.businessInfo.location,(0,u.dispatch)(M.OPTIONS_STORE_NAME).updateOptions({woocommerce_default_country:i}));var i;const n=ze(e.businessInfo.location);return Promise.all([t,o,n])},onDone:{target:"progress20"}}},progress20:{entry:(0,n.f0)({loader:{progress:20,useStages:"skippedGuidedSetup"}}),invoke:{src:()=>ve(1500),onDone:{target:"progress80"}}},progress80:{entry:(0,n.f0)({loader:{progress:80,useStages:"skippedGuidedSetup",stageIndex:1}}),invoke:{src:()=>ve(1500),onDone:{actions:["redirectToWooHome"]}}}},meta:{component:ie}}}},plugins:{id:"plugins",initial:"prePlugins",states:{prePlugins:{invoke:{src:"getPlugins",onDone:[{target:"pluginsSkipped",cond:(e,t)=>{var o;return null===(o=t.data)||void 0===o?void 0:o.every((e=>e.is_activated))}},{target:"plugins",actions:"handlePlugins"}]},exit:(0,n.f0)({pluginsAvailable:e=>e.pluginsAvailable.filter((()=>!0))}),meta:{progress:70}},pluginsSkipped:{entry:(0,n.f0)({loader:{progress:80}}),invoke:{src:()=>((0,u.dispatch)(M.ONBOARDING_STORE_NAME).updateProfileItems({is_plugins_page_skipped:!0,completed:!0}),ve(3e3)),onDone:[{target:"isJetpackConnected",cond:"hasJetpackSelected"},{actions:["redirectToWooHome"]}]},meta:{component:ie}},plugins:{entry:[{type:"recordTracksStepViewed",step:"plugins"},{type:"updateQueryStep",step:"plugins"}],on:{PLUGINS_PAGE_SKIPPED:{actions:[{type:"recordTracksStepSkipped",step:"plugins"}],target:"pluginsSkipped"},PLUGINS_LEARN_MORE_LINK_CLICKED:{actions:[{type:"recordTracksPluginsLearnMoreLinkClicked",step:"plugins"}]},PLUGINS_INSTALLATION_REQUESTED:{target:"installPlugins",actions:["assignPluginsSelected","recordTracksPluginsInstallationRequest"]}},meta:{progress:80,component:e=>{let{context:t,navigationProgress:o,sendEvent:n}=e;const[r,s]=(0,U.useState)(t.pluginsAvailable.filter(t.pluginsInstallationErrors.length?e=>t.pluginsSelected.includes(e.key):e=>!e.is_activated)),a=()=>n({type:"PLUGINS_PAGE_SKIPPED"}),l=()=>{const e=r.map((e=>e.key.replace(":alt",""))),o=[],i=[];return t.pluginsAvailable.forEach((t=>{const n=t.key.replace(":alt","");o.push(n),t.is_activated||e.includes(n)||i.push(n)})),n({type:"PLUGINS_INSTALLATION_REQUESTED",payload:{pluginsShown:o,pluginsSelected:e,pluginsUnselected:i}})},c=e=>"element"===e.type?"{{span}}"+e.value+"{{/span}}":e.value,u=t.pluginsInstallationErrors.length?(0,L.Z)({mixedString:(0,y.sprintf)((0,y.__)("Oops! We encountered a problem while installing %s. {{link}}Please try again{{/link}}.","woocommerce"),ce(t.pluginsInstallationErrors.map((e=>e.plugin))).map(c).join("")),components:{span:(0,i.createElement)("span",null),link:(0,i.createElement)(j.Button,{isLink:!0,onClick:l})}}):null,g=r.filter((e=>["jetpack","woocommerce-services:shipping","woocommerce-services:tax"].includes(e.key)));return(0,i.createElement)("div",{className:"woocommerce-profiler-plugins","data-testid":"core-profiler-plugins"},(0,i.createElement)(A,{percentage:o,onSkip:a}),(0,i.createElement)("div",{className:"woocommerce-profiler-page__content woocommerce-profiler-plugins__content"},(0,i.createElement)(E,{className:"woocommerce-profiler__stepper-heading",title:(0,y.__)("Get a boost with our free features","woocommerce"),subTitle:(0,y.__)("Enhance your store by installing these free business features. No commitment required – you can remove them at any time.","woocommerce")}),u&&(0,i.createElement)("p",{className:"plugin-error"},u),(0,i.createElement)("div",{className:"woocommerce-profiler-plugins__list"},t.pluginsAvailable.map((e=>{const t=e.learn_more_link?(0,i.createElement)(T.Link,{onClick:()=>{var t;n({type:"PLUGINS_LEARN_MORE_LINK_CLICKED",payload:{plugin:e.key,learnMoreLink:null!==(t=e.learn_more_link)&&void 0!==t?t:""}})},href:e.learn_more_link,target:"_blank",type:"external"},(0,y.__)("Learn More","woocommerce")):null;return(0,i.createElement)(re,{key:`checkbox-control-${e.key}`,installed:e.is_activated,onChange:()=>{(e=>{s(r.some((t=>t.key===e.key))?r.filter((t=>t.key!==e.key)):[...r,e])})(e)},checked:r.filter((t=>t.key===e.key)).length>0,icon:e.image_url?(0,i.createElement)("img",{src:e.image_url,alt:e.key}):null,title:e.label,description:e.description,learnMoreLink:t})}))),(0,i.createElement)("div",{className:"woocommerce-profiler-plugins-continue-button-container"},(0,i.createElement)(j.Button,{className:"woocommerce-profiler-plugins-continue-button",variant:"primary",onClick:r.length?l:a},(0,y.__)("Continue","woocommerce"))),g.length>0&&(0,i.createElement)("p",{className:"woocommerce-profiler-plugins-jetpack-agreement"},(0,L.Z)({mixedString:(0,y.sprintf)((0,y._n)("By installing %s plugin for free you agree to our {{link}}Terms of Service{{/link}}.","By installing %s plugins for free you agree to our {{link}}Terms of Service{{/link}}.",g.length,"woocommerce"),ce(g.map((e=>e.name))).map(c).join("")),components:{span:(0,i.createElement)("span",null),link:(0,i.createElement)(T.Link,{href:"https://wordpress.com/tos/",target:"_blank",type:"external"})}}))))}}},postPluginInstallation:{invoke:{src:async(e,t)=>await(0,u.dispatch)(M.ONBOARDING_STORE_NAME).updateProfileItems({business_extensions:t.payload.installationCompletedResult.installedPlugins.map((e=>e.plugin)),completed:!0}),onDone:[{target:"isJetpackConnected",cond:"hasJetpackSelected"},{actions:"redirectToWooHome"}]},meta:{component:ie,progress:100}},isJetpackConnected:{invoke:{src:async()=>await(0,u.resolveSelect)(M.PLUGINS_STORE_NAME).isJetpackConnected(),onDone:[{target:"sendToJetpackAuthPage",cond:(e,t)=>!t.data},{actions:"redirectToWooHome"}]},meta:{component:ie,progress:100}},sendToJetpackAuthPage:{invoke:{src:async()=>await(0,u.resolveSelect)(M.ONBOARDING_STORE_NAME).getJetpackAuthUrl({redirectUrl:(0,N.getAdminLink)("admin.php?page=wc-admin"),from:"woocommerce-core-profiler"}),onDone:{actions:a.choose([{cond:(e,t)=>!0===t.data.success,actions:"redirectToJetpackAuthPage"},{cond:(e,t)=>!1===t.data.success,actions:"redirectToWooHome"}])}},meta:{component:ie,progress:100}},installPlugins:{on:{PLUGIN_INSTALLED_AND_ACTIVATED:{actions:[(0,n.f0)({loader:(e,t)=>{const o=Math.round(t.payload.installedPluginIndex/t.payload.pluginsCount*100);let i=0;return o>60?i=2:o>30&&(i=1),{useStages:"plugins",progress:o,stageIndex:i}}})]},PLUGINS_INSTALLATION_COMPLETED_WITH_ERRORS:{target:"prePlugins",actions:[(0,n.f0)({pluginsInstallationErrors:(e,t)=>t.payload.errors}),{type:"recordFailedPluginInstallations"}]},PLUGINS_INSTALLATION_COMPLETED:{target:"postPluginInstallation",actions:[{type:"recordSuccessfulPluginInstallation"}]}},entry:a.choose([{cond:"hasJetpackSelected",actions:[(0,n.f0)({loader:{progress:10,useStages:"plugins"}}),"preFetchIsJetpackConnected","preFetchJetpackAuthUrl"]},{actions:[(0,n.f0)({loader:{progress:10,useStages:"plugins"}})]}]),invoke:{src:Me,data:e=>({selectedPlugins:e.pluginsSelected,pluginsAvailable:e.pluginsAvailable})},meta:{component:ie}}}},settingUpStore:{}}}),Fe=e=>{let{actionOverrides:t,servicesOverrides:o}=e;const n=(0,i.useMemo)((()=>Je.withConfig({actions:{...Be,...t},services:{...We,...o},guards:{hasStepInUrl:(e,t,o)=>{let{cond:i}=o;const{step:n}=(0,g.getQuery)();return n===i.step},hasJetpackSelected:e=>void 0!==e.pluginsSelected.find((e=>"jetpack"===e||"jetpack-boost"===e))||void 0!==e.pluginsAvailable.find((e=>("jetpack"===e.key||"jetpack-boost"===e.key)&&e.is_activated))}})),[t,o]),[r,s,a]=(0,l.e)(n,{devTools:!1}),u=(0,c.v)(a,(e=>{var t;return(0,I.r)(null!==(t=null==e?void 0:e.meta)&&void 0!==t?t:void 0)})),M=null==u?void 0:u.progress,[m,N]=(0,i.useState)(null);(0,i.useEffect)((()=>{null!=u&&u.component&&N((()=>null==u?void 0:u.component))}),[m,null==u?void 0:u.component]);const p=r.value instanceof Object?Object.keys(r.value)[0]:r.value;return(0,ue.p0)(["woocommerce-profile-wizard__body"]),(0,i.createElement)(i.Fragment,null,(0,i.createElement)("div",{className:`woocommerce-profile-wizard__container woocommerce-profile-wizard__step-${p}`},m?(0,i.createElement)(m,{navigationProgress:M,sendEvent:s,context:r.context}):(0,i.createElement)(me,null)))},Ve=Fe},1718:(e,t,o)=>{"use strict";function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Set;if(!t.has(e)){t.add(e);for(const o in e)if(e.hasOwnProperty(o)){if("component"===o)return e;if("object"==typeof e[o]&&null!==e[o]){const n=i(e[o],t);if(void 0!==n)return n}}}}o.d(t,{r:()=>i})},10530:e=>{e.exports={iconsThatNeedOffset:["gridicons-add-outline","gridicons-add","gridicons-align-image-center","gridicons-align-image-left","gridicons-align-image-none","gridicons-align-image-right","gridicons-attachment","gridicons-bold","gridicons-bookmark-outline","gridicons-bookmark","gridicons-calendar","gridicons-cart","gridicons-create","gridicons-custom-post-type","gridicons-external","gridicons-folder","gridicons-heading","gridicons-help-outline","gridicons-help","gridicons-history","gridicons-info-outline","gridicons-info","gridicons-italic","gridicons-layout-blocks","gridicons-link-break","gridicons-link","gridicons-list-checkmark","gridicons-list-ordered","gridicons-list-unordered","gridicons-menus","gridicons-minus","gridicons-my-sites","gridicons-notice-outline","gridicons-notice","gridicons-plus-small","gridicons-plus","gridicons-popout","gridicons-posts","gridicons-scheduled","gridicons-share-ios","gridicons-star-outline","gridicons-star","gridicons-stats","gridicons-status","gridicons-thumbs-up","gridicons-textcolor","gridicons-time","gridicons-trophy","gridicons-user-circle","gridicons-reader-follow","gridicons-reader-following"],iconsThatNeedOffsetX:["gridicons-arrow-down","gridicons-arrow-up","gridicons-comment","gridicons-clear-formatting","gridicons-flag","gridicons-menu","gridicons-reader","gridicons-strikethrough"],iconsThatNeedOffsetY:["gridicons-align-center","gridicons-align-justify","gridicons-align-left","gridicons-align-right","gridicons-arrow-left","gridicons-arrow-right","gridicons-house","gridicons-indent-left","gridicons-indent-right","gridicons-minus-small","gridicons-print","gridicons-sign-out","gridicons-stats-alt","gridicons-trash","gridicons-underline","gridicons-video-camera"]}},52458:e=>{"use strict";var t=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function n(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},o=0;o<10;o++)t["_"+String.fromCharCode(o)]=o;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var i={};return"abcdefghijklmnopqrst".split("").forEach((function(e){i[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},i)).join("")}catch(e){return!1}}()?Object.assign:function(e,r){for(var s,a,l=n(e),c=1;c{"use strict";o(52458);var i=o(99196),n=60103;if("function"==typeof Symbol&&Symbol.for){var r=Symbol.for;n=r("react.element"),r("react.fragment")}var s=i.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,a=Object.prototype.hasOwnProperty,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,o){var i,r={},c=null,u=null;for(i in void 0!==o&&(c=""+o),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)a.call(t,i)&&!l.hasOwnProperty(i)&&(r[i]=t[i]);if(e&&e.defaultProps)for(i in t=e.defaultProps)void 0===r[i]&&(r[i]=t[i]);return{$$typeof:n,type:e,key:c,ref:u,props:r,_owner:s.current}}t.jsx=c,t.jsxs=c},61250:(e,t,o)=>{"use strict";e.exports=o(95472)},7253:(e,t,o)=>{"use strict";e.exports=o.p+"506499ddac13811fee8e.svg"},62621:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMTYiIGhlaWdodD0iMTQwIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTAgMGgyMTZ2MTQwSDB6Ii8+PHBhdGggZmlsbD0iI0JFQTBGMiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNNjQuOTIgOTkuMTI3SDQuMjc3djM2Ljc3OUg2NC45MnoiLz48cGF0aCBmaWxsPSIjMjcxQjNEIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik00MS45NzggMTA1LjI1NmgtMzcuN3YzLjUwM2gzNy43ek02NC45MTkgMTA1LjI1NmgtMTguNzR2My41MDNoMTguNzR6TTY0LjkyIDEyNi4yNzFINTAuMTQ1djMuNTAzaDE0Ljc3M3pNMzAuNzk3IDExNS43NjRINC4yNzh2My41MDNoMjYuNTE5ek02NC45MiAxMTUuNzY0SDM0LjkzN3YzLjUwM0g2NC45MnpNNDUuOTQ1IDEyNi4yNzFINC4yNzh2My41MDNoNDEuNjY3eiIvPjxwYXRoIGZpbGw9IiNCRUEwRjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTE3Ni44NzIgMTM1Ljk0N2gzNS4wMDd2LTE3LjUxNGgtMzUuMDA3ek0xMzcuNjQ1IDEzNS45MzNoMzUuMDA4VjExOC40MmgtMzUuMDA4ek05OC41MDMgMTM1LjkwMWgzNS4wMDd2LTE3LjUxNEg5OC41MDN6TTE1NS4xNjYgMTE0LjI2OWgzNS4wMDhWOTYuNzU2aC0zNS4wMDh6TTE3Ni44NTQgOTIuNTQ4aDM1LjAwOFY3NS4wMzVoLTM1LjAwOHpNMTk0LjM1OCAxMTQuMjU0aDE3LjUwNFY5Ni43NGgtMTcuNTA0ek0xOTQuMzU4IDcwLjg1MmgxNy41MDRWNTMuMzRoLTE3LjUwNHoiLz48cGF0aCBmaWxsPSIjMjcxQjNEIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik04OC4xNSA4OC45MDJIMjguNjM3djMuNTAySDg4LjE1eiIvPjxwYXRoIGZpbGw9IiNCRUEwRjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTg4LjE1IDY3Ljk1MkgyOC42Mzd2MjEuMDE2SDg4LjE1eiIvPjxwYXRoIGZpbGw9IiMyNzFCM0QiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0ibTQ1LjQ2OSA4My41ODUtMy42MzQtMy42MzZhNC44NyA0Ljg3IDAgMCAwIC44MDgtMi42OTQgNC45MDggNC45MDggMCAwIDAtNC45LTQuOTAzIDQuOTA4IDQuOTA4IDAgMCAwLTQuOTAyIDQuOTAzIDQuOTA4IDQuOTA4IDAgMCAwIDQuOTAxIDQuOTA0Yy45OTQgMCAxLjkxOS0uMjk4IDIuNjkyLS44MDlsMy42MzQgMy42MzYgMS40MDQtMS40MDUtLjAwMy4wMDRabS03LjczLTMuNDA4Yy0xLjYxIDAtMi45Mi0xLjMxLTIuOTItMi45MjJhMi45MjMgMi45MjMgMCAwIDEgMi45Mi0yLjkyYzEuNjEgMCAyLjkyIDEuMzEgMi45MiAyLjkyYTIuOTIzIDIuOTIzIDAgMCAxLTIuOTIgMi45MjJaIi8+PHBhdGggc3Ryb2tlPSIjMjcxQjNEIiBzdHJva2Utd2lkdGg9Ii43MSIgZD0iTTUwLjM0MiA3MS4xMjZWODQuOTkiLz48cGF0aCBmaWxsPSIjQkVBMEYyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik04Ny45OSA0NC4zNzNjMTEuMDg2IDAgMjAuMDczLTguOTkzIDIwLjA3My0yMC4wODVTOTkuMDc2IDQuMjA0IDg3Ljk5IDQuMjA0Yy0xMS4wODYgMC0yMC4wNzMgOC45OTItMjAuMDczIDIwLjA4NCAwIDExLjA5MiA4Ljk4NyAyMC4wODUgMjAuMDczIDIwLjA4NVoiLz48cGF0aCBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik04OC4zODUgMTMuMDZoLS43ODh2MjIuNDU4aC43ODh6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNOTkuMjEzIDI0LjY4M3YtLjc4OEg3Ni43NjZ2Ljc4OHoiLz48cGF0aCBmaWxsPSIjQkVBMEYyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xNDAuMTc2IDcyLjg1M0gxMzUuNmMuODEzLTguOTE1LS45NzctMjUuNjA1LTE0LjYxNi0yNS42MDVzLTE1LjQyNyAxNi42OS0xNC42MTYgMjUuNjA1aC00LjU2NGwtNy42MTggMzYuODM4aDUzLjYwOGwtNy42MTgtMzYuODM4Wm0tMTkuMTkyLTE5Ljg2NGM4LjA3NyAwIDguMDYzIDEzLjQxNSA1LjczOSAxOS44NjRIMTE1LjI1Yy0yLjMyNS02LjQ0OS0yLjM0Mi0xOS44NjQgNS43MzctMTkuODY0aC0uMDA0WiIvPjxwYXRoIGZpbGw9IiMyNzFCM0QiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTEzNC4zMjYgNC4yMDRoLTE0LjY5M3YyNS40NjhjMi45ODYuMzcxIDUuNjYgMy4wNCA1LjY2IDUuODM1cy0xLjg2NiA1LjYyOS01LjE3NyA1LjYyOWMtMi42MDEgMC00LjEyLS45MTgtNi4wNS0yLjYxNmwtLjcxLjYzN2MxLjI5MiAyLjA2MyA0LjQwOCA0LjYxNyA3LjgyOCA0LjYxNyA1LjQ3MiAwIDkuOTA0LTMuNzcgOS45MDQtOS4yNDQgMC0yLjcxMS0uNzMyLTYuMDY3LTMuMTQ0LTguODFsMy40MTMtMTEuNTE2IDgwLjUxNiAyMy45OTNWNC4yMDRoLTc3LjU1LjAwM1oiLz48cGF0aCBzdHJva2U9IiMyNjFCM0MiIHN0cm9rZS13aWR0aD0iLjk5IiBkPSJtMTIyLjYyIDQxLjUyNC0yNC43ODcgNjkuNDM4TTExOS4zNiA0MS41MjRsMjQuNzg2IDY5LjQzOCIvPjxwYXRoIGZpbGw9IiMyNzFCM0QiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTYzLjcxNSA0LjIwNEg0LjJ2NTkuNTQ1aDU5LjUxNHoiLz48cGF0aCBmaWxsPSIjQkVBMEYyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik00Mi41MTQgMzcuMDg3YzAtMTEuNjU3IDMuNzg4LTI5IDE1LjU0NC0yOUw0NS44MjIgNDIuMDU1SDEwLjUyNGMwLTMuODcgNS4xMzUtMTMuMzI1IDMxLjk5LTQuOTd2LjAwM1oiLz48cGF0aCBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Im0xNC43MDMgNjEuMDI4IDguNzgtMzMuMzczaDEzLjgxOGw4LjA3MyAzMy4zNzNoMS41MDJsLTguNzEtMzUuOTU1aC0xNS41M2wtOS40NDIgMzUuOTU1eiIvPjxwYXRoIGZpbGw9IiNCRUEwRjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0ibTIyLjYzNiAyNS4wNzMuODQ4IDIuNTgySDM3LjNsLjg2NS0yLjU4MnpNMTQ5LjAyNiA4MS4wMjRsMTEuNjkzIDQuMDk0IDEwLjQ5MS02LjU5MiAxLjM4Ny0xMi4zMTktOC43Ni04Ljc2NC0xMi4zMTEgMS4zODgtNi41OTMgMTAuNDk0ek0xNjcuNTU2IDI0Ljk5Mmw4LjM4OCAyLjUwMXYtOS41NjJsMjEuOTI5LTEzLjcyN2gtMTIuODE2bC0xNy41MDEgMTAuOTF6Ii8+PHBhdGggZmlsbD0iI0JFQTBGMiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJtMTUzLjIzNCAyMC43MjYgNy44NDUgMi4zMzZ2LTkuMTk4bDE1LjY0NS05LjY2aC0xMS43NTJsLTExLjczOCA3LjMyeiIvPjxwYXRoIHN0cm9rZT0iIzI3MUIzRCIgc3Ryb2tlLXdpZHRoPSIuOTkiIGQ9Ik0xNjQuOTk3IDY1LjE4NSAxNTMuMzkxIDc2LjgiLz48cGF0aCBmaWxsPSIjMjcxQjNEIiBkPSJNMTI0LjE5MSA5Mi4wOTdjMi4wOTQtMS4yNzkgNC41ODMtMy40NCA0LjU4My03LjAwNiAwLTQuNzE4LTMuNi03LjY2NC03Ljc5LTcuNjY0LTQuMTkgMC03Ljc5IDIuOTQ2LTcuNzkgNy42NjQgMCAzLjU3IDIuNDkgNS43MyA0LjU4MyA3LjAwNmwtNS42MjggMTMuMDJoMTcuNjc1bC01LjYyOS0xMy4wMmgtLjAwNFoiLz48L2c+PC9zdmc+"},24122:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1Ljk0ODkgNS4yNTg4MkMxNS45NDg5IDIuODM2NiAxMy45ODUzIDAuODczMDQ3IDExLjU2MzYgMC44NzMwNDdDMTAuMDkzMyAwLjg3MzA0NyA4Ljc5NjAxIDEuNTk4ODIgOC4wMDAwMSAyLjcwODE2QzcuMjA0MDEgMS41OTg4MiA1LjkwNjY3IDAuODczMDQ3IDQuNDM2ODkgMC44NzMwNDdDMi4wMTQ2NyAwLjg3MzA0NyAwLjA1MTExNjkgMi44MzYxNiAwLjA1MTExNjkgNS4yNTg4MkMwLjA1MTExNjkgNS42MDE5NCAwLjA5NDY3MjUgNS45MzQzOCAwLjE2OTMzOSA2LjI1NDgyQzAuNzc4MjI4IDEwLjAzODQgNC45ODQ4OSAxNC4wMjk5IDguMDAwMDEgMTUuMTI1OUMxMS4wMTQ3IDE0LjAyOTkgMTUuMjIxOCAxMC4wMzg0IDE1LjgyOTggNi4yNTUyN0MxNS45MDUzIDUuOTM0ODIgMTUuOTQ4OSA1LjYwMjM4IDE1Ljk0ODkgNS4yNTg4MloiIGZpbGw9IiNBQThFRDYiLz4KPC9zdmc+Cg=="},60784:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMTYiIGhlaWdodD0iMTQwIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTAgMGgyMTZ2MTQwSDB6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMjE1Ljk2OCAxMzUuNDgxaC00LjJ2NC4yMDFoNC4yeiIvPjxwYXRoIGZpbGw9IiNCRUEwRjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTIwMS4yOTYgMTQuNzAzVjQ5LjcxaDMuNTAxVjE0LjcwM3pNMjA4LjI5OSA0LjJ2NDUuNTFoMy41VjQuMnpNMTk0LjI5NSAyNC44NTVWNDkuNzFoMy41VjI0Ljg1NXpNODguNDU2IDEzMi40OTZsOC40NjQtMjMuMjdoMjEuODFsOC40NjQgMjMuMjdoMTYuMzR2My4zMzVINzIuMTE2di0zLjMzNXpNOTIuMzIgMzkuMjU1SDMyLjgwNnY1OS41MTRIOTIuMzJ6Ii8+PHBhdGggZmlsbD0iIzI3MUIzRCIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJtNDcuNjk1IDY5Ljg4LTcuMDU0IDIuNTQ4Yy0yLjU5NC45MzgtMi44NDMgMi41OTgtMi4xNzQgMy43MjguODA5IDEuMzYyIDIuNzM4IDEuMjMzIDQuODQ1LS4xNzVhMjgzLjUyIDI4My41MiAwIDAgMCA1Ljk1Mi00LjExN2wtMS41NjktMS45ODVaTTc3LjQyOCA2OS44OGw3LjA1NCAyLjU0OGMyLjU5NC45MzggMi44NDMgMi41OTggMi4xNzQgMy43MjgtLjgwOSAxLjM2Mi0yLjczOCAxLjIzMy00Ljg0NS0uMTc1YTI4My41MiAyODMuNTIgMCAwIDEtNS45NTItNC4xMTdsMS41NjktMS45ODVaIi8+PHBhdGggZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJtNDYuMTMgNjMuNjM4IDguNjU4IDExLjU1LjM2LS4yMDQtMi4zMTctMTMuMTM1eiIvPjxwYXRoIGZpbGw9IiNCRUEwRjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTUxLjgxNiA3NC45MTdjLTMuODQgMC02LjQxNy0zLjM5Ni02LjQxNy02LjgwMiAwLTMuNzIxIDMuMzU0LTUuMTgxIDYuNDg0LTUuMTgxczYuNjc2IDEuNjM1IDYuNjc2IDQuOTQzYzAgMy43OTUtMi43ODcgNy4wNC02Ljc0MyA3LjA0WiIvPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTU0LjAyNSA3NC41NTNjLjI0NS0uMDg0LjQ4LS4xODIuNzA3LS4yOTRMNTIuNzQgNjIuOTc2YTguODQ2IDguODQ2IDAgMCAwLS44NTctLjA0MmMtMS45MjIgMC0zLjkyOC41NTMtNS4xODggMS44MzhsNy4zMyA5Ljc4WiIvPjxwYXRoIGZpbGw9IiNCRUEwRjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTY2LjU2NSA2Ny44NzdjMC0zLjMwOCAzLjU0Ni00Ljk0MyA2LjY3Ni00Ljk0MyAzLjEzIDAgNi40ODQgMS40NiA2LjQ4NCA1LjE4IDAgMy40MS0yLjU4IDYuODAzLTYuNDE3IDYuODAzLTMuOTU2IDAtNi43NDMtMy4yNDUtNi43NDMtNy4wNFoiLz48cGF0aCBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik03MS4wOTkgNzQuNTUzYTYuMDA3IDYuMDA3IDAgMCAxLS43MDgtLjI5NGwxLjk5Mi0xMS4yODNjLjI4Ny0uMDI4LjU3NC0uMDQyLjg1OC0uMDQyIDEuOTIyIDAgMy45MjguNTUzIDUuMTg4IDEuODM4bC03LjMzIDkuNzhaIi8+PHBhdGggZmlsbD0iIzI3MUIzRCIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNNzMuMzc0IDYwLjkxYy02Ljk4OCAwLTguOTE3IDUuMDctMTAuODE0IDUuMDctMS44OTcgMC0zLjgyMy01LjA3LTEwLjgxNC01LjA3LTQuNDI1IDAtOS4wNSAyLjg0Ny0xMS40NTEgNC4wMDJ2My40N2gyLjU4Yy4zNTcgMi4yMjMgMi4xNTMgOC42NCA4LjkzOCA4LjY0IDcuNTgyIDAgNy43NS03LjcyMyAxMC43NDQtNy43MjMgMi45OTMgMCAzLjE2NCA3LjcyMyAxMC43NDQgNy43MjMgNi43ODQgMCA4LjU4LTYuNDE3IDguOTM3LTguNjRoMi41OHYtMy40N2MtMi40MDEtMS4xNTUtNy4wMjYtNC4wMDEtMTEuNDUxLTQuMDAxaC4wMDdaTTUxLjgxNiA3NC45MTljLTMuODQgMC02LjQxNy0zLjM5Ni02LjQxNy02LjgwMiAwLTMuNzIyIDMuMzU0LTUuMTgyIDYuNDg0LTUuMTgyczYuNjc2IDEuNjM1IDYuNjc2IDQuOTQ0YzAgMy43OTQtMi43ODcgNy4wNC02Ljc0MyA3LjA0Wm0yMS40OTIgMGMtMy45NTYgMC02Ljc0My0zLjI0Ni02Ljc0My03LjA0IDAtMy4zMDkgMy41NDYtNC45NDQgNi42NzYtNC45NDQgMy4xMyAwIDYuNDg0IDEuNDYgNi40ODQgNS4xODIgMCAzLjQxLTIuNTggNi44MDItNi40MTcgNi44MDJaTTE1Ni4wOTggNDYuMjk0SDk2LjU4NHYzLjVoNTkuNTE0ek0xMjYuMzQgNTMuMTQzSDk2LjU4NXYzLjVoMjkuNzU3ek0xNTYuMDk4IDM5LjI5M0g5Ni41ODR2My41aDU5LjUxNHpNMTU5LjU1IDczLjY0M3Y5LjYxN2gxNi4xMjhzLTEuNzMzIDMuNTMyLTEuNzMzIDcuNDg1YzAgMy45NTIgMi41NTIgNy45MjIgNy40NyA3LjkyMiA0LjkyIDAgNy40NzItNC4xMDMgNy40NzItNy45MjIgMC0zLjgyLTEuNzMzLTcuNDg1LTEuNzMzLTcuNDg1aDExLjc5di05LjYxN2M1Ljg3OCAzLjMyNiAxMi43NTcgMi4xOTkgMTIuNzU3LTQuNzA1IDAtNi45MDMtNi44NzktOC4wMy0xMi43NTYtNC43MDV2LTkuNjE3aC0xMS43OTFzMS43MzMtMy41MzIgMS43MzMtNy40ODRjMC0zLjk1My0yLjU1My03LjkyMy03LjQ3Mi03LjkyMy00LjkxOCAwLTcuNDcgNC4xMDMtNy40NyA3LjkyMyAwIDMuODIgMS43MzMgNy40ODQgMS43MzMgNy40ODRIMTU5LjU1djkuNjE3YzUuODc3LTMuMzI2IDEyLjc1Ny0yLjE5OCAxMi43NTcgNC43MDUgMCA2LjkwNC02Ljg4IDguMDMxLTEyLjc1NyA0LjcwNVoiLz48cGF0aCBmaWxsPSIjQkVBMEYyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xNTYuMDk4IDg5Ljk3SDk2LjU4NHY4Ljc1M2g1OS41MTR6Ii8+PHBhdGggZmlsbD0iIzI3MUIzRCIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMzMuOTU4IDEyMi42NHYtNC4wNzJsLTMuMzY5LS40NGExMS42MTggMTEuNjE4IDAgMCAwLTEuNjItMy45MWwyLjA2OC0yLjY5NS0yLjg3Ny0yLjg3Ni0yLjY5NiAyLjA2OGExMS42MSAxMS42MSAwIDAgMC0zLjkwOC0xLjYyMWwtLjQ0LTMuMzY5aC00LjA3MmwtLjQ0IDMuMzY5YTExLjYxIDExLjYxIDAgMCAwLTMuOTEgMS42MjFMMTAgMTA4LjY0N2wtMi44NzggMi44NzYgMi4wNyAyLjY5NmExMS42MiAxMS42MiAwIDAgMC0xLjYyMiAzLjkwOGwtMy4zNjkuNDR2NC4wNzJsMy4zNy40NDJhMTEuODMzIDExLjgzMyAwIDAgMCAxLjYyIDMuOTA3bC0yLjA2OSAyLjY5NkwxMCAxMzIuNTZsMi42OTUtMi4wN2ExMS41OTggMTEuNTk4IDAgMCAwIDMuOTEyIDEuNjIybC40MzcgMy4zN2g0LjA3MmwuNDQtMy4zN2ExMS42MSAxMS42MSAwIDAgMCAzLjkwOC0xLjYyMWwyLjY5NiAyLjA3IDIuODc3LTIuODc4LTIuMDY5LTIuNjk2YTExLjYwNSAxMS42MDUgMCAwIDAgMS42MjEtMy45MDdsMy4zNy0uNDQyWm0tMTQuODE2IDQuNDRhNi43OTIgNi43OTIgMCAxIDEgMC0xMy41ODYgNi43OTIgNi43OTIgMCAwIDEgMCAxMy41ODVaTTE4My4xMzQgMjQuODhIMzIuODA2djEwLjUwM2gxNTAuMzI4eiIvPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTM2Ljk2OCAzMS42NjJhMS42NTIgMS42NTIgMCAxIDAgMC0zLjMwNSAxLjY1MiAxLjY1MiAwIDAgMCAwIDMuMzA1Wk00Mi45NTggMzEuNjYyYTEuNjUyIDEuNjUyIDAgMSAwIDAtMy4zMDUgMS42NTIgMS42NTIgMCAwIDAgMCAzLjMwNVpNNDguOTUyIDMxLjY2MmExLjY1MiAxLjY1MiAwIDEgMCAwLTMuMzA1IDEuNjUyIDEuNjUyIDAgMCAwIDAgMy4zMDVaIi8+PHBhdGggZmlsbD0iI0JFQTBGMiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMzIuOTA3IDEwMy4zNzJ2Ljg0MmMwIDMuMDE0IDIuNTE4IDUuNDYgNS42MjYgNS40NkgxNzcuNjFjMy4xMDUgMCA1LjYyNi0yLjQ0MyA1LjYyNi01LjQ2di0uODQySDMyLjkwN1pNMTgzLjIzNiAyMS4wMDR2LS44NDJjMC0zLjAxNC0yLjUxOC01LjQ2LTUuNjI2LTUuNDZIMzguNTMzYy0zLjEwNSAwLTUuNjI2IDIuNDQzLTUuNjI2IDUuNDZ2Ljg0MmgxNTAuMzI5Wk0yMTEuNzA1IDEyNy4wNjZjMCA0LjYwMy0zLjY5NyA4LjM0Ni04LjI4MyA4LjQxNmgtMzUuNDU2YTguNDE0IDguNDE0IDAgMCAxLTguNDE2LTguNDE2IDguNDE0IDguNDE0IDAgMCAxIDguNDE2LTguNDE2aDM1LjQ3M2M0LjU4IDAgOC4yNyAzLjgxOSA4LjI3IDguNDE2aC0uMDA0WiIvPjxwYXRoIGZpbGw9IiMyNzFCM0QiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTIwMy4yNDcgMTMzLjA0OGE1Ljk4MyA1Ljk4MyAwIDEgMCAuMDAxLTExLjk2NSA1Ljk4MyA1Ljk4MyAwIDAgMC0uMDAxIDExLjk2NVoiLz48cGF0aCBmaWxsPSIjQkVBMEYyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xMTYuNDIzIDY1Ljc4SDk2LjU4NHYxOS44NGgxOS44Mzl6Ii8+PHBhdGggc3Ryb2tlPSIjMjcxQjNEIiBzdHJva2Utd2lkdGg9Ii45OSIgZD0iTTEwMS4xMjQgNzUuNjk5aDEwLjc1OE0xMDYuNTAxIDcwLjMyMlY4MS4wOCIvPjxwYXRoIGZpbGw9IiNCRUEwRjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTcuNTcgMTAwLjk2N0EzLjM2NyAzLjM2NyAwIDAgMSA0LjIgOTcuNjUyVjcuNTdBMy4zNyAzLjM3IDAgMCAxIDcuNTcgNC4yMDFhMy4zNyAzLjM3IDAgMCAxIDMuMzY4IDMuMzY4djkwLjA5YzAgMS44MzEtMS41MjcgMy4zMDgtMy4zNjggMy4zMDhaIi8+PHBhdGggZmlsbD0iIzI3MUIzRCIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMTAuOTM3IDM0LjEzM3YtMy40MUw0LjIgMjYuMDgxdjMuNDF6TTEwLjkzNyA0MC43NTJ2LTMuNDFMNC4yIDMyLjd2My40MXpNMTAuOTM3IDQ3LjM3di0zLjQwN0w0LjIgMzkuMzIxdjMuNDF6TTEwLjkzNyA1My45ODl2LTMuNDA2TDQuMiA0NS45NHYzLjQxek0xMC45MzcgNjAuNjF2LTMuNDA2TDQuMiA1Mi41NjJ2My40MXpNMTAuOTM3IDY3LjIyOXYtMy40MDZMNC4yIDU5LjE4djMuNDA2ek0xMC45MzcgNzMuODV2LTMuNDFMNC4yIDY1LjgwMnYzLjQwNnpNMTAuOTM3IDgwLjQ3di0zLjQxTDQuMiA3Mi40MnYzLjQwN3pNMTAuOTM3IDg3LjA5di0zLjQxTDQuMiA3OS4wNDJ2My40MDZ6TTEwLjkzNyA5My43MXYtMy40MDlMNC4yIDg1LjY1OXYzLjQxek00LjIwMSA5Mi4yNzh2My40MWw1Ljk0NSA0LjA5NmEzLjI0MSAzLjI0MSAwIDAgMCAuNzktMi4xMjV2LS43MzlsLTYuNzM1LTQuNjQyWiIvPjwvZz48L3N2Zz4="},38811:e=>{"use strict";e.exports="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMTYiIGhlaWdodD0iMTQwIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTAgMGgyMTZ2MTQwSDB6Ii8+PHBhdGggZmlsbD0iI0JFQTBGMiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMTc3LjA2NCA1MC4wMDhjLTIxLjA4MiAwLTM0LjczNSAxMS4wNjctMzQuNzM1IDI4LjA3NyAwIDIxLjIwMyAyMi40NzUgMjQuMDggMjIuNDc1IDM1LjEyOWgyNC41MmMwLTExLjA1MyAyMi40NzUtMTMuOTI2IDIyLjQ3NS0zNS4xMyAwLTE3LjAxLTEzLjY1Ni0yOC4wNzYtMzQuNzM1LTI4LjA3NlpNMzkuMDggNC4yMjdDMTQuMjA2IDQuMjI3LjIzNSAyMy40MjQgNS4xOTUgMzcuODY5YzUuNDEgMTUuNzc4IDIyLjEyMiAyMi45NzQgMjIuMTIyIDQzLjcxNWgyMy41MzJjMC0yMC43NDEgMTYuNzEtMjcuOTM3IDIyLjEyMi00My43MTVDNzcuOTI4IDIzLjQyNCA2My45NTYgNC4yMjcgMzkuMDggNC4yMjdaIi8+PHBhdGggZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNNTAuMDEzIDQ4LjI3M2MtNS43NTIgMC05LjEzNCAzLjc5NC05LjEzNCA5LjY2di43MjhjLS40MDYgMC0uODI2IDAtMS4yMjUuMDAzaC0yLjM3di0uNzI3YzAtNS44Ny0zLjM4Mi05LjY2NC05LjEzNC05LjY2NC01LjEyMSAwLTguMDU5IDEuOTMyLTguMDU5IDUuMjkyIDAgMi41MjQgMi40NTggNC4yMjggNy4zMDYgNS4wNjggMi45NjYuNTE0IDUuODQuNjQgOC42NzkuNjY4djIyLjI4MWgxLjIwOFY1OS4zMDVjLjY3OS4wMDQgMS4wMjIuMDA0IDEuNjA3IDBoMS45ODh2MjIuMjc0aDEuMjA4VjU5LjI5OGMyLjg0LS4wMjggNS43MTMtLjE1NCA4LjY3OC0uNjY5IDQuODQ5LS44NCA3LjMwNy0yLjU0NCA3LjMwNy01LjA2NyAwLTMuMzY0LTIuOTM4LTUuMjkyLTguMDYtNS4yOTJ2LjAwM1pNMzYuMDggNTguNjU0Yy0yLjgxMi0uMDMyLTUuNjQ3LS4xNTQtOC41Ni0uNjU4LTQuNDg1LS43NzctNS43LTIuNjIyLTUuNy00LjU0MyAwLTMuNDM3IDMuNTc1LTQuNTMzIDYuMzM3LTQuNTMzIDUuMTQzIDAgNy45MjYgMy41MzkgNy45MjYgOS4wMTN2LjcyNGwtLjAwMy0uMDAzWm0xNC41NjYtLjY1OGMtMi45MTYuNTA0LTUuNzQ4LjYzLTguNTYuNjU4di0uNzI1YzAtNS40NzQgMi43ODQtOS4wMTIgNy45MjctOS4wMTIgMi43NTggMCA2LjMzMyAxLjA5NiA2LjMzMyA0LjUzMiAwIDEuOTIyLTEuMjE5IDMuNzY3LTUuNzAzIDQuNTQ0bC4wMDMuMDAzWiIvPjxwYXRoIGZpbGw9IiMyNzFCM0QiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTIxMS43OTkgNC4ySDE1NC4xMmwtNS42ODUgNDcuNjM4IDExLjcyNC0xMi4zNjJoNDcuMzI0ek0xMjkuNTAyIDEwNi4xODFjLTMuNjc2LTUuMTU2LTUuNzg3LTcuNjMtOS45MzUtNy42My00LjU1MSAwLTYuNTUgNS4xNTItMy44MTYgOC4zNzIgMy4wMDcgMy41NDIgMTMuODA0IDcuMjM4IDEzLjgwNCA3LjIzOFMxMDUuODAxIDExMSA5OS42NDcgMTExYy0zLjM5NiAwLTYuODc2IDIuMTM1LTYuODc2IDYuMTg4czMuNDggNi4xODggNi44NzYgNi4xODhjNi4xNTQgMCAyOS45MDgtMy4xNiAyOS45MDgtMy4xNnMtMTAuODAxIDMuNjk2LTEzLjgwNCA3LjIzOGMtMi43MzEgMy4yMi0uNzM1IDguMzcyIDMuODE2IDguMzcyIDQuMTUyIDAgNi4yNjMtMi40NzEgOS45MzUtNy42MyAxLjI0Ni0xLjc0NyA3LjU3Ni0xMS4wMTEgNy41NzYtMTEuMDExcy02LjMzLTkuMjYxLTcuNTc2LTExLjAxMXYuMDA3WiIvPjxwYXRoIGZpbGw9IiNCRUEwRjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTc4LjA2OCA4NS4wNWg1OS44NjR2LTE3LjVINzguMDY4eiIvPjxwYXRoIGZpbGw9IiMyNzFCM0QiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTEyMC40MjggNjcuNTVoLTQyLjM2djMuNWg0Mi4zNnpNMTM3Ljc1NiA3NC41ODZINzguMjQzdjMuNWg1OS41MTN6TTExMS42NzYgODEuNTVINzguMDY4djMuNWgzMy42MDh6Ii8+PHBhdGggZmlsbD0iI0JFQTBGMiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNODYuNDcgOTguMzUySDQ5LjAxdjM3LjQ1SDg2LjQ3eiIvPjxwYXRoIGZpbGw9IiMyNzFCM0QiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0ibTcwLjQzNiAxMjMuNiA2LjczLTYuMjAyLTIwLjgwMy4wNzN2LTEuMDI1bDIwLjc4MS4wNy02LjcwNC02LjE3OC42Mi0uNzg3IDcuODAzIDcuMzQ2di4xMTlsLTcuODAzIDcuMzcxLS42Mi0uNzg3eiIvPjxwYXRoIHN0cm9rZT0iI0ZGRiIgZD0ibTE3MS4zMzYgMjAuNTg4IDQuMjEyIDEyLjEzOCAyMC42My0yMy4wMjciLz48cGF0aCBmaWxsPSIjMjcxQjNEIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xODYuNjk4IDkwLjkzM2MwLTYuMTQ5LTMuNjgzLTkuOTc1LTkuNjEzLTkuOTk2aC0uMDQyYy01LjkzLjAyMi05LjYxMyA0LjMzNC05LjYxMyA5Ljk5NiAwIDUuNjYzIDMuNDgzIDguMzU1IDguNDUxIDExLjg5Ny0zLjAwOCAyLjgwNy00LjYxOCA3LjI0OC00LjYxOCAxMC4zODFoMi41MjhjMC0yLjkwNS41NTYtNy4wMjUgMy4yNzMtOS40NjEgMi43MiAyLjQzNiAzLjI3MyA2LjU1NiAzLjI3MyA5LjQ2MWgyLjUyOGMwLTMuMTMzLTEuNjE0LTcuNTc4LTQuNjE4LTEwLjM4MSA0Ljk2OC0zLjU0MiA4LjQ1MS02LjU0MSA4LjQ1MS0xMS44OTdabS05LjYzNCAxMS4yMjljLTQuOTI2LTMuNDk0LTguNS01LjcxNi04LjUtMTEuMjI5IDAtNS41MTIgMy4zOTYtOC45NjcgOC41LTguOTc3IDUuMTA0LjAxIDguNSAzLjY1IDguNSA4Ljk3NyAwIDQuNzc4LTMuNTc0IDcuNzM1LTguNSAxMS4yMjlaIi8+PHBhdGggZmlsbD0iI0JFQTBGMiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNNDIuMDEgMTI3LjRjMCA0LjU5NS0zLjY5OSA4LjMzLTguMjg4IDguNGgtMjEuMWMtNC42NDguMDAzLTguNDItMy43Ni04LjQyLTguNCAwLTQuNjQgMy43NjgtOC40IDguNDItOC40aDIxLjExYzQuNTgzIDAgOC4yNzQgMy44MTIgOC4yNzQgOC40aC4wMDRaIi8+PHBhdGggZmlsbD0iIzI3MUIzRCIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMzMuNSAxMzMuMzQ5YTUuOTUgNS45NSAwIDEgMC01Ljk1Mi01Ljk1IDUuOTUgNS45NSAwIDAgMCA1Ljk1MSA1Ljk1Wk0xMzcuNzU3IDQuMjI3SDc4LjI0M3Y1OS41aDU5LjUxNHoiLz48cGF0aCBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xMjAuMzI2IDQzLjM3M2MwLTQuMTE2LTIuNTE3LTguMDU3LTcuNDU2LTEwLjc0NWgxNS4zNzlMMTEzLjg5OSA4Ljk2aC0xMS43OTRsLTE0LjM1IDIzLjY2N2gxNS4zNzljLTQuOTQgMi42ODgtNy40NTcgNi42MjktNy40NTcgMTAuNzQ1IDAgNC42NTggMy42NTIgOS4zNTkgOC40NjUgMTEuODc1LTYuNjU4LTEuMzQ0LTcuNzAyIDMuNzM1LTcuNzAyIDMuNzM1aDIzLjEzcy0xLjA0My01LjA3OS03LjcwMi0zLjczNWM0LjgxNC0yLjUxNiA4LjQ2NS03LjIxNyA4LjQ2NS0xMS44NzVoLS4wMDdaIi8+PHBhdGggZmlsbD0iI0JFQTBGMiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMTA4IDguOTY1aC01Ljg5NUw4Ny43NTEgMzIuNjI4aDQwLjQ5OEwxMTMuODk2IDguOTY1eiIvPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTEyMy40NzQgMjQuNzU4SDkyLjUyN2wtNC43NzYgNy44NzF6TTExOC42OTggMTYuODgzSDk3LjMwMmwtNC43NzYgNy44NzV6TTExMy44OTYgOC45NjVoLTExLjc5MWwtNC44MDMgNy45MTd6Ii8+PHBhdGggc3Ryb2tlPSIjMjcxQjNEIiBkPSJNNDcuODU2IDI1Ljk3N2M5LjMwOS05LjQ3MSAxNy43NjctMTIuODYzIDI3LjI2OC0xNC4zNjhNNzAuNjI5IDI5LjQ0NCA0OC4yMDMgMTEuMzk4Ii8+PHBhdGggc3Ryb2tlPSIjMjcxQjNEIiBkPSJNNTcuMTY1IDM1LjEzOGMzLjA0OS05LjU1NSA0LjE2Mi0yMS44NjggMi4xOTgtMzAuOTE1Ii8+PHBhdGggZmlsbD0iIzI3MUIzRCIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMjEuOTQ3IDgxLjU4NnYzLjVoNS4zNjd2MS4zMDJjLjA4IDUuNzM2IDUuNDQgMTAuODgxIDExLjc2NiAxMC44ODFzMTEuNjc1LTUuMTM0IDExLjc2Ni0xMC44Njd2LTEuMzE2aDUuMzY3di0zLjVIMjEuOTQ3Wk0xOTMuODQ0IDExNi43MTV2LTMuNWgtMzMuNTYzdjMuNWg0LjUydjEuNjFoLTQuNTJ2My41aDQuNTJ2MS45OTVjMCA1LjU4NiA0Ljc1IDEyLjAwOCAxMi4yNjMgMTIuMDA4czEyLjI2My02LjQyNiAxMi4yNjMtMTIuMDA4di0xLjk5NWg0LjUydi0zLjVoLTQuNTJ2LTEuNjFoNC41MTdaIi8+PC9nPjwvc3ZnPg=="},77:(e,t,o)=>{"use strict";e.exports=o.p+"bfec8d1574ef61285fc9.svg"}}]);
\ No newline at end of file
diff --git a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/customize-store.js b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/customize-store.js
index 9ba9b8ac..165e27cf 100644
--- a/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/customize-store.js
+++ b/wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/customize-store.js
@@ -1 +1 @@
-"use strict";(globalThis.webpackChunk_wcAdmin_webpackJsonp=globalThis.webpackChunk_wcAdmin_webpackJsonp||[]).push([[925],{37557:(e,t,o)=>{o.d(t,{U:()=>u});var r=o(74776);const n="I know using unstable features means my theme or plugin will inevitably break in the next version of WordPress.";let i="I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.";const a=window.wcSettings,s=a?.admin,l=parseFloat(a?.wpVersion),c=parseFloat(s?.gutenberg_version);!isNaN(l)&&l>=6.4&&(i=n),!isNaN(c)&&c>=16.9&&(i=n);const{lock:M,unlock:u}=(0,r.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(i,"@wordpress/edit-site")},51975:(e,t,o)=>{o.r(t),o.d(t,{CustomizeStoreController:()=>zr,customizeStoreStateMachineActions:()=>Er,customizeStoreStateMachineDefinition:()=>jr,customizeStoreStateMachineServices:()=>Tr,default:()=>wr,machineActions:()=>Dr});var r={};o.r(r),o.d(r,{assignActiveThemeHasMods:()=>R,assignCurrentThemeIsAiGenerated:()=>H,assignCustomizeStoreCompleted:()=>Z,assignFetchIntroDataError:()=>W,assignThemeData:()=>Y,recordTracksBrowseAllThemesClicked:()=>G,recordTracksDesignWithAIClicked:()=>P,recordTracksThemeSelected:()=>B});var n={};o.r(n),o.d(n,{fetchIntroData:()=>K,fetchThemeCards:()=>X});var i={};o.r(i),o.d(i,{assignHasCompleteSurvey:()=>lr,completeSurvey:()=>cr});var a={};o.r(a),o.d(a,{fetchSurveyCompletedOption:()=>Mr});var s=o(69307),l=o(37798),c=o(11122),M=o(28226),u=o(50883),g=o(10431),m=o(67221),d=o(9818),y=o(86020),N=o(74617),p=o(98817),I=o(34374),D=o(65736),E=o(70048),T=o(55609),j=o(5267),z=o(83849),w=o.n(z),k=o(94333),h=o(22629),f=o(40800);const A=(0,s.forwardRef)(((e,t)=>{let{isTransparent:o,...r}=e;const{siteTitle:n}=(0,d.useSelect)((e=>{var t;const{getSite:o}=e(l.store);return{siteTitle:null===(t=o())||void 0===t?void 0:t.title}}),[]),i=(0,k.useReducedMotion)();return(0,s.createElement)(T.__unstableMotion.div,(0,j.Z)({ref:t},r,{className:w()("edit-site-site-hub",r.className),initial:!1,transition:{type:"tween",duration:i?0:.3,ease:"easeOut"}}),(0,s.createElement)(T.__experimentalHStack,{justify:"space-between",alignment:"center",className:"edit-site-site-hub__container"},(0,s.createElement)(T.__experimentalHStack,{justify:"flex-start",className:"edit-site-site-hub__text-content",spacing:"0"},(0,s.createElement)(T.__unstableMotion.div,{className:w()("edit-site-site-hub__view-mode-toggle-container",{"has-transparent-background":o}),layout:!0,transition:{type:"tween",duration:i?0:.3,ease:"easeOut"}},(0,s.createElement)(y.Link,{href:(0,g.getNewPath)({},"/",{}),type:"wp-admin"},(0,s.createElement)(f.Z,{className:"edit-site-layout__view-mode-toggle-icon"}))),(0,s.createElement)(T.__unstableAnimatePresence,null,(0,s.createElement)(T.__unstableMotion.div,{layout:!1,animate:{opacity:1},exit:{opacity:0},className:w()("edit-site-site-hub__site-title",{"is-transparent":o}),transition:{type:"tween",duration:i?0:.2,ease:"easeOut",delay:.1}},(0,h.decodeEntities)(n))))))})),x=e=>{let{colorPalettes:t,totalPalettes:o}=e,r=null;return o>4&&(r=(0,s.createElement)("li",{className:"more_palettes"},"+",o-4)),(0,s.createElement)("ul",{className:"theme-card__color-palettes"},t.map((e=>(0,s.createElement)("li",{key:e.title,style:{background:"linear-gradient(to right, "+e.primary+" 0px, "+e.primary+" 50%, "+e.secondary+" 50%, "+e.secondary+" 100%)"}}))),r)},_=e=>{let{slug:t,description:o,thumbnail_url:r,name:n,color_palettes:i=[],total_palettes:a=0,link_url:l="",is_active:c=!1,onClick:M}=e;return(0,s.createElement)("div",{className:"theme-card",key:t},(0,s.createElement)("div",null,l?(0,s.createElement)(y.Link,{href:l,onClick:M},(0,s.createElement)("img",{src:r,alt:o})):(0,s.createElement)("img",{src:r,alt:o})),(0,s.createElement)("div",{className:"theme-card__info"},(0,s.createElement)("h2",{className:"theme-card__title"},n),i&&(0,s.createElement)(x,{colorPalettes:i,totalPalettes:a})),(0,s.createElement)("div",null,c&&(0,s.createElement)("span",{className:"theme-card__active"},(0,D.__)("Active theme","woocommerce")),(0,s.createElement)("span",{className:"theme-card__free"},"Free")))};var L=o(14599),O=o(73463),S=o(75283);const b=e=>{let{siteUrl:t}=e;return(0,s.createElement)("iframe",{className:"preview-iframe",src:t,title:"Preview",tabIndex:-1})},v=["image"];function C(e,t){!function(e){return e.document!==e.parent.document}(e)?e.location.href=t:e.parent.postMessage({type:"navigate",url:t},"*")}const Q=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:60;const o=//g;return e.replaceAll(o,((e,o)=>{if(o){const e=JSON.parse(o);return e.width=t,`\x3c!-- wp:site-logo ${JSON.stringify(e)} /--\x3e`}return`\x3c!-- wp:site-logo {"width":${t}} /--\x3e`}))},U=e=>{let{bannerTitle:t,bannerText:o,bannerClass:r,buttonIsLink:n,bannerButtonOnClick:i,bannerButtonText:a,secondaryButton:l,children:c}=e;return(0,s.createElement)("div",{className:w()("woocommerce-customize-store-banner",r)},(0,s.createElement)("div",{className:"woocommerce-customize-store-banner-content"},(0,s.createElement)("div",{className:"banner-actions"},(0,s.createElement)("h1",null,t),(0,s.createElement)("p",null,o),a&&(0,s.createElement)(T.Button,{onClick:()=>i&&i(),variant:n?"link":"primary"},a),l,(0,s.createElement)("p",{className:"ai-disclaimer"},(0,S.Z)({mixedString:(0,D.__)("Powered by experimental AI. {{link}}Learn more{{/link}}","woocommerce"),components:{link:(0,s.createElement)(y.Link,{href:"https://automattic.com/ai-guidelines",target:"_blank",type:"external"})}}))),c))};var F=o(5031);const Y=(0,F.f0)({intro:(e,t)=>{const o=t.data.themeData;return{...e.intro,themeData:o}}}),P=()=>{(0,L.recordEvent)("customize_your_store_intro_design_with_ai_click")},B=(e,t)=>{(0,L.recordEvent)("customize_your_store_intro_theme_select",{theme:t.payload.theme,is_active:"SELECTED_ACTIVE_THEME"===t.type?"yes":"no"})},G=()=>{(0,L.recordEvent)("customize_your_store_intro_browse_all_themes_click")},R=(0,F.f0)({intro:(e,t)=>{const o=t.data.activeThemeHasMods;return{...e.intro,activeThemeHasMods:o}}}),Z=(0,F.f0)({intro:(e,t)=>{const o=t.data.customizeStoreTaskCompleted;return{...e.intro,customizeStoreTaskCompleted:o}}}),W=(0,F.f0)({intro:e=>({...e.intro,hasErrors:!0})}),H=(0,F.f0)({intro:(e,t)=>{const o=t.data.currentThemeIsAiGenerated;return{...e.intro,currentThemeIsAiGenerated:o}}});var V=o(86989),J=o.n(V);const X=async()=>await J()({path:"/wc-admin/onboarding/themes/recommended",method:"GET"}),K=async()=>{const e=(0,d.resolveSelect)(l.store).__experimentalGetTemplateForLink("/"),t=(0,d.resolveSelect)(m.OPTIONS_STORE_NAME).getOption("woocommerce_admin_customize_store_completed_theme_id"),o=(0,d.resolveSelect)(l.store).getCurrentThemeGlobalStylesRevisions(),r=(0,d.resolveSelect)(l.store).getEntityRecords("postType","page",{per_page:100,_fields:["id","_links.version-history"],orderby:"menu_order",order:"asc"}),n=(0,d.resolveSelect)(m.ONBOARDING_STORE_NAME).getTask("customize-store"),i=X(),[a,s,c,M,u,g]=await Promise.all([e,t,o,r,n,i]);let y=!1;s&&(null==a?void 0:a.id)===s&&(y=!0);const N=null==M?void 0:M.some((e=>{var t,o;return(null===(t=e._links)||void 0===t||null===(o=t["version-history"])||void 0===o?void 0:o.length)>1}));return{activeThemeHasMods:!(null==a||!a.modified)||(null==c?void 0:c.length)>0||N,customizeStoreTaskCompleted:null==u?void 0:u.isComplete,themeData:g,currentThemeIsAiGenerated:y}},q={"network-offline":()=>(0,s.createElement)(U,{bannerTitle:(0,D.__)("Looking to design your store using AI?","woocommerce"),bannerText:(0,D.__)("Unfortunately, the [AI Store designer] isn't available right now as we can't detect your network. Please check your internet connection.","woocommerce"),bannerClass:"offline-banner",bannerButtonOnClick:()=>{}}),"task-incomplete-active-theme-has-mods":e=>{let{setOpenDesignChangeWarningModal:t}=e;return(0,s.createElement)(U,{bannerTitle:(0,D.__)("Use the power of AI to design your store","woocommerce"),bannerText:(0,D.__)("Design the look of your store, create pages, and generate copy using our built-in AI tools.","woocommerce"),bannerClass:"",buttonIsLink:!1,bannerButtonOnClick:()=>{t(!0)},bannerButtonText:(0,D.__)("Design with AI","woocommerce")})},"jetpack-offline":e=>{let{sendEvent:t}=e;return(0,s.createElement)(U,{bannerTitle:(0,D.__)("Looking to design your store using AI?","woocommerce"),bannerText:(0,D.__)("It looks like you're using Jetpack's offline mode — switch to online mode to start designing with AI.","woocommerce"),bannerClass:"offline-banner",buttonIsLink:!1,bannerButtonOnClick:()=>{t({type:"JETPACK_OFFLINE_HOWTO"})},bannerButtonText:(0,D.__)("Find out how","woocommerce")})},"existing-ai-theme":e=>{let{setOpenDesignChangeWarningModal:t}=e;const o=(0,s.createElement)(T.Button,{className:"",onClick:()=>{(0,L.recordEvent)("customize_your_store_intro_create_a_new_one_click"),t(!0)},variant:"secondary"},(0,D.__)("Create a new one","woocommerce")),r=(0,O.O3)("siteUrl")+"?cys-hide-admin-bar=1";return(0,s.createElement)(U,{bannerTitle:(0,D.__)("Customize your custom theme","woocommerce"),bannerText:(0,D.__)("Keep customizing the look of your AI-generated store, or start over and create a new one.","woocommerce"),bannerClass:"existing-ai-theme-banner",buttonIsLink:!1,bannerButtonOnClick:()=>{(0,L.recordEvent)("customize_your_store_intro_customize_click"),C(window,(0,g.getNewPath)({},"/customize-store/assembler-hub",{}))},bannerButtonText:(0,D.__)("Customize","woocommerce"),secondaryButton:o},(0,s.createElement)("div",{className:"woocommerce-block-preview-container"},(0,s.createElement)("div",{className:"iframe-container"},(0,s.createElement)(b,{siteUrl:r}))))},"existing-theme":e=>{let{setOpenDesignChangeWarningModal:t}=e;return(0,s.createElement)(U,{bannerTitle:(0,D.__)("Use the power of AI to design your store","woocommerce"),bannerText:(0,D.__)("Design the look of your store, create pages, and generate copy using our built-in AI tools.","woocommerce"),bannerClass:"",buttonIsLink:!1,bannerButtonOnClick:()=>{t(!0)},bannerButtonText:(0,D.__)("Design with AI","woocommerce")})},default:e=>{let{sendEvent:t}=e;return(0,s.createElement)(U,{bannerTitle:(0,D.__)("Use the power of AI to design your store","woocommerce"),bannerText:(0,D.__)("Design the look of your store, create pages, and generate copy using our built-in AI tools.","woocommerce"),bannerClass:"",buttonIsLink:!1,bannerButtonOnClick:()=>{t({type:"DESIGN_WITH_AI"})},bannerButtonText:(0,D.__)("Design with AI","woocommerce")})}},$={"no-modal":null,"task-incomplete-override-design-changes":e=>{let{setOpenDesignChangeWarningModal:t,sendEvent:o,classname:r="woocommerce-customize-store__design-change-warning-modal"}=e;return(0,s.createElement)(T.Modal,{className:r,title:(0,D.__)("Are you sure you want to start a new design?","woocommerce"),onRequestClose:()=>t(!1),shouldCloseOnClickOutside:!1},(0,s.createElement)("p",null,(0,s.createInterpolateElement)((0,D.__)("The Store Designer will create a new store design for you, and you'll lose any changes you've made to your active theme. If you'd prefer to continue editing your theme, you can do so via the Editor .","woocommerce"),{EditorLink:(0,s.createElement)(y.Link,{onClick:()=>(window.open(`${O.SX}site-editor.php`,"_blank"),!1),href:""})})),(0,s.createElement)("div",{className:"woocommerce-customize-store__design-change-warning-modal-footer"},(0,s.createElement)(T.Button,{onClick:()=>t(!1),variant:"link"},(0,D.__)("Cancel","woocommerce")),(0,s.createElement)(T.Button,{onClick:()=>o({type:"DESIGN_WITH_AI"}),variant:"primary"},(0,D.__)("Design with AI","woocommerce"))))},"task-complete-with-ai-theme":e=>{let{setOpenDesignChangeWarningModal:t,sendEvent:o,classname:r="woocommerce-customize-store__design-change-warning-modal"}=e;return(0,s.createElement)(T.Modal,{className:r,title:(0,D.__)("Are you sure you want to start over?","woocommerce"),onRequestClose:()=>t(!1),shouldCloseOnClickOutside:!1},(0,s.createElement)("p",null,(0,s.createInterpolateElement)((0,D.__)("You'll be asked to provide your business info again, and will lose your existing AI design. If you want to customize your existing design, you can do so via the Editor .","woocommerce"),{EditorLink:(0,s.createElement)(y.Link,{onClick:()=>(window.open(`${O.SX}site-editor.php`,"_blank"),!1),href:""})})),(0,s.createElement)("div",{className:"woocommerce-customize-store__design-change-warning-modal-footer"},(0,s.createElement)(T.Button,{onClick:()=>t(!1),variant:"link"},(0,D.__)("Cancel","woocommerce")),(0,s.createElement)(T.Button,{onClick:()=>{o({type:"DESIGN_WITH_AI"}),(0,L.recordEvent)("customize_your_store_intro_start_again_click")},variant:"primary"},(0,D.__)("Start again","woocommerce"))))},"task-complete-without-ai-theme":e=>{let{setOpenDesignChangeWarningModal:t,sendEvent:o,classname:r="woocommerce-customize-store__design-change-warning-modal"}=e;return(0,s.createElement)(T.Modal,{className:r,title:(0,D.__)("Are you sure you want to start a new design?","woocommerce"),onRequestClose:()=>t(!1),shouldCloseOnClickOutside:!1},(0,s.createElement)("p",null,(0,s.createInterpolateElement)((0,D.__)("The Store Designer will create a new store design for you, and you'll lose any changes you've made to your active theme. If you'd prefer to continue editing your theme, you can do so via the Editor .","woocommerce"),{EditorLink:(0,s.createElement)(y.Link,{onClick:()=>(window.open(`${O.SX}site-editor.php`,"_blank"),!1),href:""})})),(0,s.createElement)("div",{className:"woocommerce-customize-store__design-change-warning-modal-footer"},(0,s.createElement)(T.Button,{onClick:()=>t(!1),variant:"link"},(0,D.__)("Cancel","woocommerce")),(0,s.createElement)(T.Button,{onClick:()=>o({type:"DESIGN_WITH_AI"}),variant:"primary"},(0,D.__)("Design with AI","woocommerce"))))}},ee=e=>{let{onClick:t}=e;return(0,s.createElement)("div",null,(0,s.createElement)(T.Button,{className:"close-cys-design-with-ai",onClick:t||(()=>{})},(0,s.createElement)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,s.createElement)("path",{d:"M5.40456 5L19 19M5 19L18.5954 5",stroke:"#1E1E1E",strokeWidth:"1.5"}))))},te=e=>{let{className:t,selected:o,title:r,subtitle:n,name:i,value:a,onChange:l}=e;const c=()=>{l(a)},M="woocommerce-"+a.replace(/_/g,"-");return(0,s.createElement)("div",{role:"radio",className:w()("woocommerce-cys-choice-container",t),onClick:c,onKeyDown:e=>{"Enter"===e.key&&c()},"data-selected":o||null,tabIndex:0},(0,s.createElement)("div",{className:"woocommerce-cys-choice"},(0,s.createElement)("input",{className:"woocommerce-cys-choice-input",id:M,name:i,type:"radio",value:a,checked:!!o,onChange:c,"data-selected":o||null,tabIndex:-1}),(0,s.createElement)("label",{htmlFor:M,className:"choice__title"},r),n&&(0,s.createElement)("p",{className:"choice__subtitle"},n)))};var oe=o(72456),re=o(44305),ne=o(92728),ie=o(60516),ae=o(87842),se=o(5526),le=o(95058),ce=o(78406);const Me=[{title:(0,D.__)("Analyzing your responses","woocommerce"),image:(0,s.createElement)("img",{src:re,alt:(0,D.__)("Analyzing your responses","woocommerce")}),progress:14},{title:(0,D.__)("Comparing the top performing stores","woocommerce"),image:(0,s.createElement)("img",{src:ie,alt:(0,D.__)("Comparing the top performing stores","woocommerce")}),progress:28},{title:(0,D.__)("Designing the best look for your business","woocommerce"),image:(0,s.createElement)("img",{src:ne,alt:(0,D.__)("Designing the best look for your business","woocommerce")}),progress:42},{title:(0,D.__)("Generating content","woocommerce"),image:(0,s.createElement)("img",{src:le,alt:(0,D.__)("Generating content","woocommerce")}),progress:56},{title:(0,D.__)("Assembling your AI-optimized store","woocommerce"),image:(0,s.createElement)("img",{src:ae,alt:(0,D.__)("Assembling your AI-optimized store","woocommerce")}),progress:70},{title:(0,D.__)("Applying the finishing touches","woocommerce"),image:(0,s.createElement)("img",{src:se,alt:(0,D.__)("Applying the finishing touches","woocommerce")}),progress:84},{title:(0,D.__)("Opening the doors","woocommerce"),image:(0,s.createElement)("img",{src:ce,alt:(0,D.__)("Opening the doors","woocommerce")}),progress:100}],ue=e=>e.map(((e,t,o)=>{const r=o[t+1];if(!r)return[e];const n=[e],i=(r.progress-e.progress)/2;for(let t=0;t<2;t++)n.push({...e,progress:e.progress+(t+1)*i});return n})).flat();var ge=o(47090);const me=(0,F.f0)({startLoadingTime:()=>performance.now()}),de=(0,F.f0)({businessInfoDescription:(e,t)=>({descriptionText:t.payload})}),ye=(0,F.f0)({lookAndFeel:(e,t)=>({...e.lookAndFeel,choice:t.payload})}),Ne=(0,F.f0)({toneOfVoice:(e,t)=>({...e.toneOfVoice,choice:t.payload})}),pe=(0,F.f0)({lookAndFeel:(e,t)=>({choice:t.data.look,aiRecommended:t.data.look}),toneOfVoice:(e,t)=>({choice:t.data.tone,aiRecommended:t.data.tone})}),Ie=(0,F.f0)({aiSuggestions:(e,t)=>({...e.aiSuggestions,defaultColorPalette:t.data.response})}),De=(0,F.f0)({aiSuggestions:e=>{let t=e.aiSuggestions.fontPairing;const o=e.lookAndFeel.choice;switch(!0){case"Contemporary"===o:t="Inter + Inter";break;case"Classic"===o:t="Bodoni Moda + Overpass";break;case"Bold"===o:t="Plus Jakarta Sans + Plus Jakarta Sans"}return{...e.aiSuggestions,fontPairing:t}}}),Ee=(0,F.f0)({aiSuggestions:(e,t)=>({...e.aiSuggestions,header:t.data.response.slug})}),Te=(0,F.f0)({aiSuggestions:(e,t)=>({...e.aiSuggestions,footer:t.data.response.slug})}),je=(0,F.f0)({aiSuggestions:(e,t)=>({...e.aiSuggestions,homepageTemplate:t.data.response.homepage_template})}),ze=(0,F.f0)({spawnSaveDescriptionToOptionRef:e=>(0,ge.Cs)((()=>{return t=e.businessInfoDescription.descriptionText,(0,d.dispatch)(m.OPTIONS_STORE_NAME).updateOptions({woo_ai_describe_store_description:t});var t}),"update-woo-ai-business-description-option")}),we={assignStartLoadingTime:me,assignBusinessInfoDescription:de,assignLookAndFeel:ye,assignToneOfVoice:Ne,assignLookAndTone:pe,assignDefaultColorPalette:Ie,assignFontPairing:De,assignHeader:Ee,assignFooter:Te,assignHomepageTemplate:je,assignAPICallLoaderError:(0,F.f0)({apiCallLoader:()=>((0,L.recordEvent)("customize_your_store_ai_wizard_error"),{hasErrors:!0})}),logAIAPIRequestError:()=>{console.log("API Request error")},updateQueryStep:(e,t,o)=>{let{action:r}=o;const{path:n}=(0,g.getQuery)(),i=r.step,a=n.split("/");"customize-store"===a[1]&&"design-with-ai"===a[2]&&a[3]!==i&&(0,g.updateQueryString)({},`/customize-store/design-with-ai/${i}`)},recordTracksStepViewed:(e,t,o)=>{let{action:r}=o;const{step:n}=r;(0,L.recordEvent)("customize_your_store_ai_wizard_step_view",{step:n})},recordTracksStepClosed:(e,t)=>{const{step:o}=t.payload;(0,L.recordEvent)("customize_your_store_ai_wizard_step_close",{step:o.replaceAll("-","_")})},recordTracksStepCompleted:(e,t,o)=>{let{action:r}=o;const{step:n}=r;(0,L.recordEvent)("customize_your_store_ai_wizard_step_complete",{step:n})},spawnSaveDescriptionToOption:ze,redirectToAssemblerHub:async e=>{const t=(0,g.getNewPath)({},"/customize-store/assembler-hub",{}),o=document.createElement("iframe");o.classList.add("cys-fullscreen-iframe"),o.src=t;const r=()=>{if("1"===o.style.opacity)return;const t=document.getElementsByClassName("woocommerce-onboarding-loader");if(t[0]&&(t[0].style.display="none"),o.style.opacity="1",e.startLoadingTime){const t=performance.now()-e.startLoadingTime;(0,L.recordEvent)("customize_your_store_ai_wizard_loading_time",{time_in_s:(t/1e3).toFixed(2)})}};o.onload=()=>{var e,n;!function(e){var t;const o=e.contentWindow,r=e.contentDocument||(null===(t=e.contentWindow)||void 0===t?void 0:t.document);if(null!=o&&o.history){const e=o.history.pushState;o.history.pushState=function(t,o,r){const n=null==r?void 0:r.toString();n&&(-1===(null==n?void 0:n.indexOf("customize-store"))?window.location.href=n:(window.history.pushState(t,o,r),e(t,o,r)))}}null==o||o.addEventListener("popstate",(function(e){window.history.replaceState(e.state,"",o.location.href)})),null==r||r.addEventListener("click",(function(e){if(e.target){var t;const o=null===(t=e.target)||void 0===t?void 0:t.closest("a");o&&"_blank"===o.target?(e.preventDefault(),window.open(o.href,"_blank")):o&&(e.preventDefault(),window.location.href=o.href)}}))}(o),n=r,window.addEventListener("message",(e=>{"iframe-loaded"===e.data.type&&n()})),setTimeout(r,6e4),null===(e=window.history)||void 0===e||e.pushState({},"",t)},document.body.appendChild(o)}};var ke=o(25516);const he=(e,t,o)=>Object.assign(new Error(e),{code:t,cause:o}),fe=o.n(ke)()("jetpack-ai-assistant:token"),Ae="jetpack-ai-jwt-token";var xe=o(55954),_e=o(64567);const Le=[{title:"Inter + Inter",version:2,lookAndFeel:["Contemporary","Bold"],settings:{typography:{fontFamilies:{theme:[{fontFamily:"Inter",slug:"inter"}]}}},styles:{elements:{button:{typography:{fontFamily:"var(--wp--preset--font-family--inter)",fontWeight:"400",lineHeight:"1"}},heading:{typography:{fontFamily:"var(--wp--preset--font-family--inter)",fontStyle:"normal",fontWeight:"600",lineHeight:"1.2"}}},blocks:{"core/site-title":{typography:{fontFamily:"var(--wp--preset--font-family--inter)",fontSize:"var(--wp--preset--font-size--medium)",fontStyle:"normal"}},"core/post-navigation-link":{typography:{fontFamily:"var(--wp--preset--font-family--inter)"}}},typography:{fontFamily:"var(--wp--preset--font-family--inter)",fontSize:"var(--wp--preset--font-size--medium)",fontStyle:"normal",fontWeight:"400",lineHeight:"1.6"}}},{title:"Albert Sans + Lora",version:2,lookAndFeel:["Contemporary","Bold"],settings:{typography:{fontFamilies:{theme:[{fontFamily:"Albert Sans",slug:"albert-sans"},{fontFamily:"Lora",slug:"lora"}]}}},styles:{elements:{heading:{typography:{fontFamily:"var(--wp--preset--font-family--albert-sans)",fontStyle:"normal",fontWeight:"700"}}},typography:{fontFamily:"var(--wp--preset--font-family--lora)",fontStyle:"normal",fontWeight:"400",lineHeight:"1.67"}}},{title:"Bodoni Moda + Overpass",version:2,lookAndFeel:["Classic"],settings:{typography:{fontFamilies:{theme:[{fontFamily:"Bodoni Moda",slug:"bodoni-moda"},{fontFamily:"Overpass",slug:"overpass"}]}}},styles:{elements:{button:{typography:{fontFamily:"var(--wp--preset--font-family--overpass)",fontWeight:"400",lineHeight:"1"}},heading:{typography:{fontFamily:"var(--wp--preset--font-family--bodoni-moda)",fontStyle:"normal",fontWeight:"400"}}},blocks:{"core/site-title":{typography:{fontFamily:"var(--wp--preset--font-family--bodoni-moda)"}},"core/post-navigation-link":{typography:{fontFamily:"var(--wp--preset--font-family--bodoni-moda)"}}},typography:{fontFamily:"var(--wp--preset--font-family--overpass)",fontSize:"var(--wp--preset--font-size--medium)",fontStyle:"normal",fontWeight:"300",lineHeight:"1.6"}}},{title:"Commissioner + Crimson Pro",version:2,lookAndFeel:["Contemporary"],settings:{typography:{fontFamilies:{theme:[{fontFamily:"Commissioner",slug:"commissioner"},{fontFamily:"Crimson Pro",slug:"crimson-pro"}]}}},styles:{elements:{button:{typography:{fontFamily:"var(--wp--preset--font-family--commissioner)",fontWeight:"400",lineHeight:"1"}},heading:{typography:{fontFamily:"var(--wp--preset--font-family--commissioner)",fontStyle:"normal",fontWeight:"300"}}},blocks:{"core/site-title":{typography:{fontFamily:"var(--wp--preset--font-family--commissioner)",fontWeight:"300"}},"core/post-navigation-link":{typography:{fontFamily:"var(--wp--preset--font-family--commissioner)"}}},typography:{fontFamily:"var(--wp--preset--font-family--crimson-pro)",fontSize:"var(--wp--preset--font-size--medium)",fontStyle:"normal",fontWeight:"400",lineHeight:"1.6"}}},{title:"Cormorant + Work Sans",version:2,lookAndFeel:[],settings:{typography:{fontFamilies:{theme:[{fontFamily:"Cormorant",slug:"cormorant"},{fontFamily:"Work Sans",slug:"work-sans"}]}}},styles:{elements:{heading:{typography:{fontFamily:"var(--wp--preset--font-family--cormorant)",fontStyle:"normal",fontWeight:"500"}}},typography:{fontFamily:"var(--wp--preset--font-family--work-sans)"}}},{title:"DM Sans + IBM Plex Mono",version:2,lookAndFeel:[],settings:{typography:{fontFamilies:{theme:[{fontFamily:"DM Sans",slug:"dm-sans"},{fontFamily:"IBM Plex Mono",slug:"ibm-plex-mono"}]}}},styles:{elements:{heading:{typography:{fontFamily:"var(--wp--preset--font-family--dm-sans)",fontStyle:"normal",fontWeight:"700"}}},typography:{fontFamily:"var(--wp--preset--font-family--ibm-plex-mono)",fontSize:"var(--wp--preset--font-size--small)",fontStyle:"normal",fontWeight:"300",lineHeight:"1.67"}}},{title:"Fraunces + Libre Franklin",version:2,lookAndFeel:["Classic"],settings:{typography:{fontFamilies:{theme:[{fontFamily:"Fraunces",slug:"fraunces"},{fontFamily:"Libre Franklin",slug:"libre-franklin"}]}}},styles:{elements:{heading:{typography:{fontFamily:"var(--wp--preset--font-family--fraunces)",fontStyle:"normal",fontWeight:"500"}}},typography:{fontFamily:"var(--wp--preset--font-family--libre-franklin)",lineHeight:"1.67"}}},{title:"Libre Baskerville + DM Sans",version:2,lookAndFeel:[],settings:{typography:{fontFamilies:{theme:[{fontFamily:"Libre Baskerville",slug:"libre-baskerville"},{fontFamily:"DM Sans",slug:"dm-sans"}]}}},styles:{elements:{button:{typography:{fontFamily:"var(--wp--preset--font-family--dm-sans)",fontWeight:"400",lineHeight:"1"}},heading:{typography:{fontFamily:"var(--wp--preset--font-family--libre-baskerville)",fontStyle:"normal",fontWeight:"700"}}},blocks:{"core/site-title":{typography:{fontFamily:"var(--wp--preset--font-family--libre-baskerville)"}},"core/post-navigation-link":{typography:{fontFamily:"var(--wp--preset--font-family--libre-baskerville)"}}},typography:{fontFamily:"var(--wp--preset--font-family--dm-sans)",fontSize:"var(--wp--preset--font-size--small)",fontStyle:"normal",fontWeight:"400",lineHeight:"1.6"}}},{title:"Libre Franklin + EB Garamond",version:2,lookAndFeel:["Classic"],settings:{typography:{fontFamilies:{theme:[{fontFamily:"Libre Franklin",slug:"libre-franklin"},{fontFamily:"EB Garamond",slug:"eb-garamond"}]}}},styles:{elements:{button:{typography:{fontFamily:"var(--wp--preset--font-family--libre-franklin)",fontSize:"var(--wp--preset--font-size--small)",fontWeight:"400",lineHeight:"1"}},heading:{typography:{fontFamily:"var(--wp--preset--font-family--libre-franklin)",fontStyle:"normal",fontWeight:"700"}}},blocks:{"core/site-title":{typography:{fontFamily:"var(--wp--preset--font-family--libre-franklin)",fontWeight:"500"}},"core/post-navigation-link":{typography:{fontFamily:"var(--wp--preset--font-family--libre-franklin)"}}},typography:{fontFamily:"var(--wp--preset--font-family--eb-garamond)",fontSize:"var(--wp--preset--font-size--medium)",fontStyle:"normal",fontWeight:"400",lineHeight:"1.6"}}},{title:"Montserrat + Arvo",version:2,lookAndFeel:["Contemporary","Bold"],settings:{typography:{fontFamilies:{theme:[{fontFamily:"Montserrat",slug:"montserrat"},{fontFamily:"Arvo",slug:"arvo"}]}}},styles:{elements:{button:{typography:{fontFamily:"var(--wp--preset--font-family--montserrat)",fontStyle:"normal",fontWeight:"500"}},heading:{typography:{fontFamily:"var(--wp--preset--font-family--montserrat)",fontStyle:"normal",fontWeight:"700",lineHeight:"1.4"}}},blocks:{"core/site-title":{typography:{fontFamily:"var(--wp--preset--font-family--montserrat)",fontWeight:"700"}},"core/post-navigation-link":{typography:{fontFamily:"var(--wp--preset--font-family--montserrat)"}}},typography:{fontFamily:"var(--wp--preset--font-family--arvo)",fontSize:"var(--wp--preset--font-size--small)",fontStyle:"normal",fontWeight:"400",lineHeight:"1.6"}}},{title:"Newsreader + Newsreader",version:2,lookAndFeel:["Classic"],settings:{typography:{fontFamilies:{theme:[{fontFamily:"Newsreader",slug:"newsreader"}]}}},styles:{elements:{heading:{typography:{fontFamily:"var(--wp--preset--font-family--newsreader)",fontStyle:"normal",fontWeight:"400"}}},typography:{fontFamily:"var(--wp--preset--font-family--newsreader)",fontSize:"var(--wp--preset--font-size--medium)",lineHeight:"1.67"}}},{title:"Playfair Display + Fira Sans",version:2,lookAndFeel:["Classic"],settings:{typography:{fontFamilies:{theme:[{fontFamily:"Playfair Display",slug:"playfair-display"},{fontFamily:"Fira Sans",slug:"fira-sans"}]}}},styles:{elements:{button:{typography:{fontFamily:"var(--wp--preset--font-family--fira-sans)",fontWeight:"400",lineHeight:"1"}},heading:{typography:{fontFamily:"var(--wp--preset--font-family--playfair-display)",fontStyle:"italic",fontWeight:"400"}}},blocks:{"core/site-title":{typography:{fontFamily:"var(--wp--preset--font-family--playfair-display)",fontStyle:"italic",fontWeight:"400"}},"core/post-navigation-link":{typography:{fontFamily:"var(--wp--preset--font-family--playfair-display)",fontStyle:"italic",fontWeight:"400"}}},typography:{fontFamily:"var(--wp--preset--font-family--fira-sans)",fontSize:"var(--wp--preset--font-size--medium)",fontStyle:"normal",fontWeight:"400",lineHeight:"1.6"}}},{title:"Plus Jakarta Sans + Plus Jakarta Sans",version:2,lookAndFeel:["Contemporary","Bold"],settings:{typography:{fontFamilies:{theme:[{fontFamily:"Plus Jakarta Sans",slug:"plus-jakarta-sans"}]}}},styles:{elements:{heading:{typography:{fontFamily:"var(--wp--preset--font-family--plus-jakarta-sans)",fontStyle:"normal",fontWeight:"700"}}},typography:{fontFamily:"var(--wp--preset--font-family--plus-jakarta-sans)",lineHeight:"1.67"}}},{title:"Raleway + Cormorant",version:2,lookAndFeel:["Classic","Bold"],settings:{typography:{fontFamilies:{theme:[{fontFamily:"Raleway",slug:"raleway"},{fontFamily:"Cormorant",slug:"cormorant"}]}}},styles:{elements:{heading:{typography:{fontFamily:"var(--wp--preset--font-family--raleway)",fontStyle:"normal",fontWeight:"700"}}},typography:{fontFamily:"var(--wp--preset--font-family--cormorant)",fontSize:"var(--wp--preset--font-size--medium)",lineHeight:"1.67"}}},{title:"Rubik + Inter",version:2,lookAndFeel:["Bold"],settings:{typography:{fontFamilies:{theme:[{fontFamily:"Rubik",slug:"rubik"},{fontFamily:"Inter",slug:"inter"}]}}},styles:{elements:{button:{typography:{fontFamily:"var(--wp--preset--font-family--inter)",fontWeight:"400",lineHeight:"1"}},heading:{typography:{fontFamily:"var(--wp--preset--font-family--rubik)",fontStyle:"normal",fontWeight:"800"}}},blocks:{"core/site-title":{typography:{fontFamily:"var(--wp--preset--font-family--rubik)",fontWeight:"800"}},"core/post-navigation-link":{typography:{fontFamily:"var(--wp--preset--font-family--rubik)"}}},typography:{fontFamily:"var(--wp--preset--font-family--inter)",fontSize:"var(--wp--preset--font-size--medium)",fontStyle:"normal",fontWeight:"400",lineHeight:"1.6"}}},{title:"Rubik + Rubik",version:2,lookAndFeel:["Contemporary"],settings:{typography:{fontFamilies:{theme:[{fontFamily:"Rubik",slug:"rubik"}]}}},styles:{elements:{heading:{typography:{fontFamily:"var(--wp--preset--font-family--rubik)"}}},typography:{fontFamily:"var(--wp--preset--font-family--rubik)",fontWeight:"400",lineHeight:"1.67"}}},{title:"Space Mono + Roboto",version:2,lookAndFeel:[],settings:{typography:{fontFamilies:{theme:[{fontFamily:"Space Mono",slug:"space-mono"},{fontFamily:"Roboto",slug:"roboto"}]}}},styles:{elements:{button:{typography:{fontFamily:"var(--wp--preset--font-family--roboto)",fontWeight:"400",lineHeight:"1"}},heading:{typography:{fontFamily:"var(--wp--preset--font-family--space-mono)",fontStyle:"normal",fontWeight:"400",lineHeight:"1.15"}}},blocks:{"core/site-title":{typography:{fontFamily:"var(--wp--preset--font-family--space-mono)",fontStyle:"normal",fontWeight:"400"}},"core/post-navigation-link":{typography:{fontFamily:"var(--wp--preset--font-family--space-mono)"}}},typography:{fontFamily:"var(--wp--preset--font-family--roboto)",fontSize:"var(--wp--preset--font-size--small)",fontStyle:"normal",fontWeight:"400",lineHeight:"1.6"}}}],Oe=[{title:"Ancient Bronze",version:2,settings:{color:{palette:{theme:[{color:"#323856",name:"Primary",slug:"primary"},{color:"#8C8369",name:"Secondary",slug:"secondary"},{color:"#323856",name:"Foreground",slug:"foreground"},{color:"#ffffff",name:"Background",slug:"background"},{color:"#F7F2EE",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Neutral"},{title:"Arctic Dawn",version:2,settings:{color:{palette:{theme:[{color:"#1E226F",name:"Primary",slug:"primary"},{color:"#DD301D",name:"Secondary",slug:"secondary"},{color:"#0D1263",name:"Foreground",slug:"foreground"},{color:"#ffffff",name:"Background",slug:"background"},{color:"#F0F1F5",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Neutral"},{title:"Bronze Serenity",version:2,settings:{color:{palette:{theme:[{color:"#1e4b4b",name:"Primary",slug:"primary"},{color:"#9e7047",name:"Secondary",slug:"secondary"},{color:"#1e4b4b",name:"Foreground",slug:"foreground"},{color:"#ffffff",name:"Background",slug:"background"},{color:"#e9eded",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Neutral"},{title:"Purple Twilight",version:2,settings:{color:{palette:{theme:[{color:"#301834",name:"Primary",slug:"primary"},{color:"#6a5eb7",name:"Secondary",slug:"secondary"},{color:"#090909",name:"Foreground",slug:"foreground"},{color:"#fefbff",name:"Background",slug:"background"},{color:"#f3eaf5",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Neutral"},{title:"Candy Store",version:2,settings:{color:{palette:{theme:[{color:"#293852",name:"Primary",slug:"primary"},{color:"#f1bea7",name:"Secondary",slug:"secondary"},{color:"#293852",name:"Foreground",slug:"foreground"},{color:"#ffffff",name:"Background",slug:"background"},{color:"#fffddb",name:"Tertiary",slug:"tertiary"}]}}},styles:{blocks:{"core/button":{color:{background:"var(--wp--preset--color--secondary)"},variations:{outline:{border:{color:"var(--wp--preset--color--secondary)"},color:{text:"var(--wp--preset--color--primary)"}}}}},color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"},elements:{button:{color:{background:"var(--wp--preset--color--secondary)",text:"var(--wp--preset--color--primary)"}}}},wpcom_category:"Neutral"},{title:"Midnight Citrus",version:2,settings:{color:{palette:{theme:[{color:"#222222",name:"Primary",slug:"primary"},{color:"#c0f500",name:"Secondary",slug:"secondary"},{color:"#222222",name:"Foreground",slug:"foreground"},{color:"#ffffff",name:"Background",slug:"background"},{color:"#f7faed",name:"Tertiary",slug:"tertiary"}]}}},styles:{blocks:{"core/button":{color:{background:"var(--wp--preset--color--secondary)"},variations:{outline:{border:{color:"var(--wp--preset--color--secondary)"},color:{text:"var(--wp--preset--color--primary)"}}}}},color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"},elements:{button:{":hover":{color:{background:"var(--wp--preset--color--secondary)",text:"var(--wp--preset--color--primary)"}},color:{background:"var(--wp--preset--color--secondary)",text:"var(--wp--preset--color--primary)"}}}},wpcom_category:"Neutral"},{title:"Crimson Tide",version:2,settings:{color:{palette:{theme:[{color:"#101317",name:"Primary",slug:"primary"},{color:"#EC5E3F",name:"Secondary",slug:"secondary"},{color:"#101317",name:"Foreground",slug:"foreground"},{color:"#ffffff",name:"Background",slug:"background"},{color:"#EEEEEE",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Neutral"},{title:"Raspberry Chocolate",version:2,settings:{color:{palette:{theme:[{color:"#42332e",name:"Primary",slug:"primary"},{color:"#d64d68",name:"Secondary",slug:"secondary"},{color:"#241d1a",name:"Foreground",slug:"foreground"},{color:"#eeeae6",name:"Background",slug:"background"},{color:"#D6CCC2",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Bright"},{title:"Gumtree Sunset",version:2,settings:{color:{palette:{theme:[{color:"#8699A1",name:"Primary",slug:"primary"},{color:"#BB6154",name:"Secondary",slug:"secondary"},{color:"#476C77",name:"Foreground",slug:"foreground"},{color:"#F4F7F7",name:"Background",slug:"background"},{color:"#ffffff",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Bright"},{title:"Fuchsia",version:2,settings:{color:{palette:{theme:[{color:"#b7127f",name:"Primary",slug:"primary"},{color:"#18020C",name:"Secondary",slug:"secondary"},{color:"#b7127f",name:"Foreground",slug:"foreground"},{color:"#f7edf6",name:"Background",slug:"background"},{color:"#ffffff",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Bright"},{title:"Cinder",version:2,settings:{color:{palette:{theme:[{color:"#c14420",name:"Primary",slug:"primary"},{color:"#2F2D2D",name:"Secondary",slug:"secondary"},{color:"#c14420",name:"Foreground",slug:"foreground"},{color:"#f1f2f2",name:"Background",slug:"background"},{color:"#DCDCDC",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Bright"},{title:"Canary",version:2,settings:{color:{palette:{theme:[{color:"#0F0F05",name:"Primary",slug:"primary"},{color:"#666666",name:"Secondary",slug:"secondary"},{color:"#0F0F05",name:"Foreground",slug:"foreground"},{color:"#FCFF9B",name:"Background",slug:"background"},{color:"#E8EB8C",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Bright"},{title:"Blue Lagoon",version:2,settings:{color:{palette:{theme:[{color:"#004DE5",name:"Primary",slug:"primary"},{color:"#0496FF",name:"Secondary",slug:"secondary"},{color:"#0036A3",name:"Foreground",slug:"foreground"},{color:"#FEFDF8",name:"Background",slug:"background"},{color:"#DEF2F7",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Bright"},{title:"Vibrant Berry",version:2,settings:{color:{palette:{theme:[{slug:"primary",color:"#7C1D6F",name:"Primary"},{slug:"secondary",color:"#C62FB2",name:"Secondary"},{slug:"foreground",color:"#7C1D6F",name:"Foreground"},{slug:"background",color:"#FFEED6",name:"Background"},{slug:"tertiary",color:"#FDD8DE",name:"Tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Bright"},{title:"Aquamarine Night",version:2,settings:{color:{palette:{theme:[{color:"#deffef",name:"Primary",slug:"primary"},{color:"#56fbb9",name:"Secondary",slug:"secondary"},{color:"#ffffff",name:"Foreground",slug:"foreground"},{color:"#091C48",name:"Background",slug:"background"},{color:"#10317F",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Dark"},{title:"Evergreen Twilight",version:2,settings:{color:{palette:{theme:[{color:"#ffffff",name:"Primary",slug:"primary"},{color:"#8EE978",name:"Secondary",slug:"secondary"},{color:"#ffffff",name:"Foreground",slug:"foreground"},{color:"#181818",name:"Background",slug:"background"},{color:"#636363",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Dark"},{title:"Cinnamon Latte",version:2,settings:{color:{palette:{theme:[{slug:"primary",color:"#D9CAB3",name:"Primary"},{slug:"secondary",color:"#BC8034",name:"Secondary"},{slug:"foreground",color:"#FFFFFF",name:"Foreground"},{slug:"background",color:"#3C3F4D",name:"Background"},{slug:"tertiary",color:"#2B2D36",name:"Tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Dark"},{title:"Lightning",version:2,settings:{color:{palette:{theme:[{color:"#ebffd2",name:"Primary",slug:"primary"},{color:"#fefefe",name:"Secondary",slug:"secondary"},{color:"#ebffd2",name:"Foreground",slug:"foreground"},{color:"#0e1fb5",name:"Background",slug:"background"},{color:"#0A1680",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Dark"},{title:"Lilac Nightshade",version:2,settings:{color:{palette:{theme:[{color:"#f5d6ff",name:"Primary",slug:"primary"},{color:"#C48DDA",name:"Secondary",slug:"secondary"},{color:"#ffffff",name:"Foreground",slug:"foreground"},{color:"#000000",name:"Background",slug:"background"},{color:"#462749",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Dark"},{title:"Charcoal",version:2,settings:{color:{palette:{theme:[{color:"#dbdbdb",name:"Primary",slug:"primary"},{color:"#efefef",name:"Secondary",slug:"secondary"},{color:"#dbdbdb",name:"Foreground",slug:"foreground"},{color:"#1e1e1e",name:"Background",slug:"background"},{color:"#000000",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Dark"},{title:"Rustic Rosewood",version:2,settings:{color:{palette:{theme:[{color:"#F4F4F2",name:"Primary",slug:"primary"},{color:"#EE797C",name:"Secondary",slug:"secondary"},{color:"#ffffff",name:"Foreground",slug:"foreground"},{color:"#1A1A1A",name:"Background",slug:"background"},{color:"#3B3939",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Dark"},{title:"Sandalwood Oasis",version:2,settings:{color:{palette:{theme:[{color:"#F0EBE3",name:"Primary",slug:"primary"},{color:"#DF9785",name:"Secondary",slug:"secondary"},{color:"#ffffff",name:"Foreground",slug:"foreground"},{color:"#2a2a16",name:"Background",slug:"background"},{color:"#434323",name:"Tertiary",slug:"tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Dark"},{title:"Slate",version:2,settings:{color:{palette:{theme:[{slug:"primary",color:"#FFFFFF",name:"Primary"},{slug:"secondary",color:"#FFDF6D",name:"Secondary"},{slug:"foreground",color:"#EFF2F9",name:"Foreground"},{slug:"background",color:"#13161E",name:"Background"},{slug:"tertiary",color:"#303036",name:"Tertiary"}]}}},styles:{color:{background:"var(--wp--preset--color--background)",text:"var(--wp--preset--color--foreground)"}},wpcom_category:"Dark"}].map((e=>{var t;return{...e,styles:{...e.styles,blocks:{"core/button":{color:{background:"var(--wp--preset--color--secondary)"},variations:{outline:{border:{color:"var(--wp--preset--color--secondary)"},color:{text:"var(--wp--preset--color--secondary)"}}}},"core/heading":{color:{text:"var(--wp--preset--color--foreground)"},elements:{link:{color:{text:"var(--wp--preset--color--foreground)"}}}},"core/post-date":{color:{text:"var(--wp--preset--color--foreground)"}},"core/post-title":{color:{text:"var(--wp--preset--color--foreground)"},elements:{link:{":hover":{color:{text:"var(--wp--preset--color--primary)"}},color:{text:"var(--wp--preset--color--foreground)"}}}},"core/pullquote":{border:{color:"var(--wp--preset--color--foreground)",style:"solid",width:"1px 0"}},"core/quote":{border:{color:"var(--wp--preset--color--foreground)",style:"solid",width:"0 0 0 5px"}},"core/separator":{color:{text:"var(--wp--preset--color--foreground)"}},"core/site-title":{elements:{link:{":hover":{color:{text:"var(--wp--preset--color--foreground)"}},color:{text:"var(--wp--preset--color--foreground)"}}}},...e.styles.blocks},elements:{button:{":active":{color:{background:"var(--wp--preset--color--foreground)",text:"var(--wp--preset--color--background)"}},":focus":{color:{background:"var(--wp--preset--color--foreground)",text:"var(--wp--preset--color--background)"},outline:{color:"var(--wp--preset--color--primary)",offset:"2px",style:"dotted",width:"1px"}},":hover":{color:{background:"var(--wp--preset--color--secondary)",text:"var(--wp--preset--color--background)"}},":visited":{color:{text:null!==(t=e.styles.elements)&&void 0!==t&&t.button?e.styles.elements.button.color:"var(--wp--preset--color--background)"}},color:{background:"var(--wp--preset--color--primary)",text:"var(--wp--preset--color--background)"}},link:{":hover":{color:{text:"var(--wp--preset--color--primary)"},typography:{textDecoration:"none"}},color:{text:"var(--wp--preset--color--foreground)"}},...e.styles.elements}}}}));var Se=o(4981),be=o(52175);const ve=(0,s.createContext)({logoBlockIds:[],setLogoBlockIds:()=>{}}),Ce=()=>{const{logoBlockIds:e}=(0,s.useContext)(ve),{attributes:t,isAttributesLoading:o}=(0,d.useSelect)((t=>{const o=t(be.store).getBlocksByClientId(e),r=!o.length||null===o[0];return r?{attributes:{},isAttributesLoading:r}:{attributes:o[0].attributes,isAttributesLoading:r}}),[e]);return{attributes:t,isAttributesLoading:o}},Qe=()=>{const{blockPatterns:e,isLoading:t}=(0,d.useSelect)((e=>({blockPatterns:e(l.store).getBlockPatterns(),isLoading:!e(l.store).hasFinishedResolution("getBlockPatterns")})),[]);return{blockPatterns:e,isLoading:t}},Ue=e=>{const{blockPatterns:t,isLoading:o}=Qe(),{attributes:r,isAttributesLoading:n}=Ce(),[i,a]=(0,s.useState)(r.width);(0,s.useEffect)((()=>{n||a(r.width)}),[n,r.width,i]);const l=(0,s.useMemo)((()=>(t||[]).filter((t=>{var o;return null===(o=t.categories)||void 0===o?void 0:o.includes(e)}))),[t,e]);return{isLoading:o,patterns:(0,s.useMemo)((()=>l.map((e=>{const t=Q(e.content,i);return{...e,content:t,blocks:(0,Se.parse)(t,{__unstableSkipMigrationLogs:!0})}}))),[l,i])}},Fe={template1:{blocks:["woocommerce-blocks/header-centered-menu","woocommerce-blocks/hero-product-split","woocommerce-blocks/product-collection-5-columns","woocommerce-blocks/hero-product-3-split","woocommerce-blocks/product-collection-3-columns","woocommerce-blocks/testimonials-3-columns","woocommerce-blocks/featured-category-triple","woocommerce-blocks/social-follow-us-in-social-media","woocommerce-blocks/footer-with-3-menus"],metadata:{businessType:["e-commerce","large-business"],contentFocus:["featured products"],audience:["general"],design:["contemporary"],features:["fullwidth-image-banner","testimonials","social-media","search"],complexity:"high"}},template2:{blocks:["woocommerce-blocks/header-essential","woocommerce-blocks/hero-product-split","woocommerce-blocks/product-collection-4-columns","woocommerce-blocks/hero-product-chessboard","woocommerce-blocks/product-collection-5-columns","woocommerce-blocks/testimonials-3-columns","woocommerce-blocks/footer-large"],metadata:{businessType:["e-commerce","subscription","large-business"],contentFocus:["catalog"],audience:["general"],design:["contemporary"],features:["small-banner","testimonials","newsletter"],complexity:"high"}},template3:{blocks:["woocommerce-blocks/header-centered-menu","woocommerce-blocks/hero-product-split","woocommerce-blocks/product-collection-featured-products-5-columns","woocommerce-blocks/featured-category-triple","woocommerce-blocks/product-query-product-gallery","woocommerce-blocks/footer-with-3-menus"],metadata:{businessType:["subscription","large-business"],contentFocus:["catalog","call-to-action"],audience:["general"],design:["contemporary"],features:["small-banner","social-media"],complexity:"high"}}},Ye=(e,t)=>e.map((e=>{const o=t[e];return o&&o.content?{...o,blocks:(0,Se.parse)(o.content,{__unstableSkipMigrationLogs:!0})}:null})).filter((e=>null!==e)),Pe=e=>e.reduce(((e,t)=>(e[t.name]=t,e)),{}),{escalate:Be}=xe,Ge={browserPopstateHandler:()=>e=>{const t=()=>{e({type:"EXTERNAL_URL_UPDATE"})};return window.addEventListener("popstate",t),()=>{window.removeEventListener("popstate",t)}},queryAiEndpoint:(0,c.C)({id:"query-ai-endpoint",predictableActionArguments:!0,initial:"init",context:{prompt:"",queryId:"",version:"",responseValidation:()=>!0,retryCount:0,validatedResponse:{}},states:{init:{always:"querying",entry:["setRetryCount"]},querying:{invoke:{src:"getCompletion",onDone:{target:"success",actions:["handleAiResponse"]},onError:{target:"error"}}},error:{always:[{cond:e=>e.retryCount>=3,target:"querying",actions:[Be((()=>({data:"Max retries exceeded"})))]},{target:"querying",actions:(0,F.f0)({retryCount:e=>e.retryCount+1})}]},success:{type:"final",data:e=>({result:"success",response:e.validatedResponse})}}},{actions:{handleAiResponse:(0,F.f0)({validatedResponse:(e,t)=>t.data}),setRetryCount:(0,F.f0)({retryCount:0})},services:{getCompletion:async e=>{let{queryId:t,prompt:o,version:r,responseValidation:n,retryCount:i,abortSignal:a=AbortSignal.timeout(1e4)}=e;const{token:s}=await async function(){var e,t;const o=localStorage.getItem(Ae);let r;if(o)try{r=JSON.parse(o)}catch(e){throw fe("Error parsing token",e),he("Error parsing cached token","token_parse_error")}if(r&&(null==r?void 0:r.expire)>Date.now())return fe("Using cached token"),r;const n=null===(e=window.JP_CONNECTION_INITIAL_STATE)||void 0===e?void 0:e.apiNonce,i=null===(t=window.JP_CONNECTION_INITIAL_STATE)||void 0===t?void 0:t.siteSuffix;try{const e={token:(await J()({path:"/jetpack/v4/jetpack-ai-jwt?_cacheBuster="+Date.now(),credentials:"same-origin",headers:{"X-WP-Nonce":n},method:"POST"})).token,blogId:i,expire:Date.now()+12e4};return fe("Storing new token"),localStorage.setItem(Ae,JSON.stringify(e)),e}catch(e){throw he("Error fetching new token","token_fetch_error")}}();let l,c;try{const e=new URL("https://public-api.wordpress.com/wpcom/v2/text-completion");e.searchParams.append("feature","woo_cys"),l=await J()({url:e.toString(),method:"POST",data:{token:s,prompt:o,_fields:"completion"},signal:a})}catch(e){throw(0,L.recordEvent)("customize_your_store_ai_completion_api_error",{query_id:t,version:r,retry_count:i,error_type:"api_request_error"}),e}try{c=JSON.parse(l.completion)}catch{throw(0,L.recordEvent)("customize_your_store_ai_completion_response_error",{query_id:t,version:r,retry_count:i,error_type:"json_parse_error",response:l.completion}),new Error(`Error validating Jetpack AI text completions response for ${t}`)}try{const e=n(c);return(0,L.recordEvent)("customize_your_store_ai_completion_success",{query_id:t,version:r,retry_count:i}),e}catch(e){throw(0,L.recordEvent)("customize_your_store_ai_completion_response_error",{query_id:t,version:r,retry_count:i,error_type:"valid_json_invalid_values",response:l.completion}),e}}}}),assembleSite:async e=>{try{await(async e=>{let{colorPaletteName:t=Oe[0].title,fontPairingName:o=Le[0].title}=e;const r=Oe.find((e=>e.title===t)),n=Le.find((e=>e.title===o)),{invalidateResolutionForStoreSelector:i}=(0,d.dispatch)(l.store);i("__experimentalGetCurrentGlobalStylesId");const a=await(0,d.resolveSelect)(l.store).__experimentalGetCurrentGlobalStylesId(),{saveEntityRecord:s}=(0,d.dispatch)(l.store);await s("root","globalStyles",{id:a,styles:(0,_e.X)((null==r?void 0:r.styles)||{},(null==n?void 0:n.styles)||{}),settings:(0,_e.X)((null==r?void 0:r.settings)||{},(null==n?void 0:n.settings)||{})},{throwOnError:!0})})({colorPaletteName:e.aiSuggestions.defaultColorPalette.default,fontPairingName:e.aiSuggestions.fontPairing}),(0,L.recordEvent)("customize_your_store_ai_update_global_styles_success")}catch(e){throw console.error(e),(0,L.recordEvent)("customize_your_store_ai_update_global_styles_response_error",{error:e instanceof Error?e.message:"unknown"}),e}try{await(async e=>{let{homepageTemplateId:t}=e;const{invalidateResolutionForStoreSelector:o}=(0,d.dispatch)(l.store);o("getBlockPatterns"),o("__experimentalGetTemplateForLink");const r=await(0,d.resolveSelect)(l.store).getBlockPatterns(),n=Pe(r);let i=[...Ye(Fe[t].blocks,n)].filter(Boolean).map((e=>e.content)).join("\n\n");i=Q(i);const a=await(0,d.resolveSelect)(l.store).__experimentalGetTemplateForLink("/"),{saveEntityRecord:s}=(0,d.dispatch)(l.store);await s("postType",a.type,{id:a.id,content:i},{throwOnError:!0})})({homepageTemplateId:e.aiSuggestions.homepageTemplate}),(0,L.recordEvent)("customize_your_store_ai_update_template_success")}catch(e){throw console.error(e),(0,L.recordEvent)("customize_your_store_ai_update_template_response_error",{error:e instanceof Error?e.message:"unknown"}),e}},updateStorePatterns:async e=>{try{await(0,d.dispatch)(m.OPTIONS_STORE_NAME).updateOptions({woocommerce_blocks_allow_ai_connection:!0});const{images:t}=await J()({path:"/wc/private/ai/images",method:"POST",data:{business_description:e.businessInfoDescription.descriptionText}}),[o]=await Promise.all([J()({path:"/wc/private/ai/products",method:"POST",data:{business_description:e.businessInfoDescription.descriptionText,images:t}}),J()({path:"/wc/private/ai/patterns",method:"POST",data:{business_description:e.businessInfoDescription.descriptionText,images:t}})]),r=o.product_content.map(((e,t)=>J()({path:"/wc/private/ai/product",method:"POST",data:{products_information:e,index:t}})));if(await Promise.all([...r,J()({path:"/wc/private/ai/business-description",method:"POST",data:{business_description:e.businessInfoDescription.descriptionText}})]),!o.ai_content_generated)throw new Error((o.additional_errors,JSON.stringify(o.additional_errors)))}catch(e){throw(0,L.recordEvent)("customize_your_store_update_store_pattern_api_error",{error:e instanceof Error?e.message:"unknown"}),e}},saveAiResponseToOption:e=>(0,d.dispatch)(m.OPTIONS_STORE_NAME).updateOptions({woocommerce_customize_store_ai_suggestions:{...e.aiSuggestions,lookAndFeel:e.lookAndFeel.choice}}),installAndActivateTheme:async()=>{const e="twentytwentythree";try{await J()({path:`/wc-admin/onboarding/themes/install?theme=${e}`,method:"POST"}),await J()({path:`/wc-admin/onboarding/themes/activate?theme=${e}&theme_switch_via_cys_ai_loader=1`,method:"POST"})}catch(t){throw(0,L.recordEvent)("customize_your_store_ai_install_and_activate_theme_error",{theme:e,error:t instanceof Error?t.message:"unknown"}),t}}};var Re=o(80834);const Ze=[{name:"Ancient Bronze",primary:"#11163d",secondary:"#8C8369",foreground:"#11163d",background:"#ffffff",lookAndFeel:["Contemporary","Classic"]},{name:"Arctic Dawn",primary:"#243156",secondary:"#DE5853",foreground:"#243156",background:"#ffffff",lookAndFeel:["Contemporary"]},{name:"Bronze Serenity",primary:"#1e4b4b",secondary:"#9e7047",foreground:"#1e4b4b",background:"#ffffff",lookAndFeel:["Classic"]},{name:"Purple Twilight",primary:"#301834",secondary:"#6a5eb7",foreground:"#090909",background:"#fefbff",lookAndFeel:["Bold"]},{name:"Candy Store",primary:"#293852",secondary:"#f1bea7",foreground:"#293852",background:"#ffffff",lookAndFeel:["Classic"]},{name:"Midnight Citrus",primary:"#1B1736",secondary:"#7E76A3",foreground:"#1B1736",background:"#ffffff",lookAndFeel:["Bold","Contemporary"]},{name:"Crimson Tide",primary:"#A02040",secondary:"#234B57",foreground:"#871C37",background:"#ffffff",lookAndFeel:["Bold"]},{name:"Raspberry Chocolate",primary:"#42332e",secondary:"#d64d68",foreground:"#241d1a",background:"#eeeae6",lookAndFeel:["Contemporary","Classic"]},{name:"Gumtree Sunset",primary:"#476C77",secondary:"#EFB071",foreground:"#476C77",background:"#edf4f4",lookAndFeel:["Classic"]},{name:"Fuchsia",primary:"#b7127f",secondary:"#18020C",foreground:"#b7127f",background:"#f7edf6",lookAndFeel:["Bold"]},{name:"Cinder",primary:"#c14420",secondary:"#2F2D2D",foreground:"#863119",background:"#f1f2f2",lookAndFeel:["Contemporary","Classic"]},{name:"Canary",primary:"#0F0F05",secondary:"#353535",foreground:"#0F0F05",background:"#FCFF9B",lookAndFeel:["Bold"]},{name:"Blue Lagoon",primary:"#004DE5",secondary:"#0496FF",foreground:"#0036A3",background:"#FEFDF8",lookAndFeel:["Bold","Contemporary"]},{name:"Vibrant Berry",primary:"#7C1D6F",secondary:"#C62FB2",foreground:"#7C1D6F",background:"#FFEED6",lookAndFeel:["Classic","Bold"]},{name:"Aquamarine Night",primary:"#deffef",secondary:"#56fbb9",foreground:"#ffffff",background:"#091C48",lookAndFeel:["Bold"]},{name:"Evergreen Twilight",primary:"#ffffff",secondary:"#8EE978",foreground:"#ffffff",background:"#181818",lookAndFeel:["Contemporary","Classic"]},{name:"Cinnamon Latte",primary:"#D9CAB3",secondary:"#BC8034",foreground:"#FFFFFF",background:"#3C3F4D",lookAndFeel:["Contemporary","Classic"]},{name:"Lightning",primary:"#ebffd2",secondary:"#fefefe",foreground:"#ebffd2",background:"#0e1fb5",lookAndFeel:["Bold"]},{name:"Lilac Nightshade",primary:"#f5d6ff",secondary:"#C48DDA",foreground:"#ffffff",background:"#000000",lookAndFeel:["Contemporary","Classic"]},{name:"Charcoal",primary:"#dbdbdb",secondary:"#efefef",foreground:"#dbdbdb",background:"#1e1e1e",lookAndFeel:["Contemporary","Classic"]},{name:"Rustic Rosewood",primary:"#F4F4F2",secondary:"#EE797C",foreground:"#ffffff",background:"#1A1A1A",lookAndFeel:["Contemporary","Classic"]},{name:"Sandalwood Oasis",primary:"#F0EBE3",secondary:"#DF9785",foreground:"#ffffff",background:"#2a2a16",lookAndFeel:["Contemporary","Classic"]},{name:"Slate",primary:"#FFFFFF",secondary:"#FFDF6D",foreground:"#EFF2F9",background:"#13161E",lookAndFeel:["Contemporary","Classic"]}],We=Ze.map((e=>e.name)),He=/^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/,Ve=Re.z.string().refine((e=>We.includes(e)),{message:"Color palette not part of allowed list"}),Je=(Re.z.object({name:Ve,primary:Re.z.string().regex(He,{message:"Invalid primary color"}),secondary:Re.z.string().regex(He,{message:"Invalid secondary color"}),foreground:Re.z.string().regex(He,{message:"Invalid foreground color"}),background:Re.z.string().regex(He,{message:"Invalid background color"}),lookAndFeel:Re.z.array(Re.z.enum(["Contemporary","Classic","Bold"]))}),{queryId:"default_color_palette",version:"2023-10-12",prompt:(e,t,o)=>`\n You are a WordPress theme expert designing a WooCommerce site. Analyse the following store description, merchant's chosen look and tone, and determine the most appropriate color scheme, along with 8 best alternatives.\n\t\t\tDo not use any palette names that are not part of the color choices provided below.\n\t\t\tRespond in the JSON form: "{ "default": "palette name", "bestColors": [ "palette name 1", "palette name 2", "palette name 3", "palette name 4", "palette name 5", "palette name 6", "palette name 7", "palette name 8" ] }"\n\t\t\t\n Chosen look and tone: ${t} look, ${o} tone.\n Business description: ${e}\n\n Colors schemes to choose from: \n ${JSON.stringify(t?Ze.filter((e=>e.lookAndFeel.includes(t))):Ze)}\n `,responseValidation:Re.z.object({default:Ve,bestColors:Re.z.array(Ve).length(8)}).refine((e=>{const t=[e.default,...e.bestColors];return new Set(t).size===t.length}),{message:"Color palette names must be unique"}).parse}),Xe=[{pair_name:"Inter + Inter",fonts:{Inter:"A highly legible sans-serif, optimized for UI design."},settings:"Inter is used for buttons and general typography."},{pair_name:"Bodoni Moda + Overpass",fonts:{"Bodoni Moda":"A modern serif font with high contrast between thick and thin lines, commonly used for headings.",Overpass:"A clean, modern sans-serif, originally inspired by Highway Gothic. Good for text and UI elements."},settings:"Overpass is used for buttons and general typography, while Bodoni Moda is specified for headings and some core blocks like site title and post navigation link."},{pair_name:"Commissioner + Crimson Pro",fonts:{Commissioner:"A low-contrast, geometric sans-serif, designed for legibility and readability in long texts.","Crimson Pro":"A serif typeface designed for readability and long-form text."},settings:"Commissioner dominates elements like buttons, headings, and core blocks, while Crimson Pro is set for general typography."},{pair_name:"Libre Baskerville + DM Sans",fonts:{"Libre Baskerville":"A serif typeface with a classic feel, good for long reading and often used for body text in books.","DM Sans":"A clean, geometric sans-serif, often used for UI and short text."},settings:"Libre Baskerville is used for headings and core blocks, whereas DM Sans is used for buttons and general typography."},{pair_name:"Libre Franklin + EB Garamond",fonts:{"Libre Franklin":"A sans-serif that offers readability, suitable for both text and display.","EB Garamond":"A revival of the classical 'Garamond' typefaces, suitable for long-form text."},settings:"Libre Franklin is predominantly used for elements like buttons, headings, and core blocks. EB Garamond is set for general typography."},{pair_name:"Montserrat + Arvo",fonts:{Montserrat:"A geometric sans-serif, popular for its modern clean lines.",Arvo:"A slab-serif font with a more traditional feel, suitable for print and screen."},settings:"Montserrat is used for buttons, headings, and core blocks. Arvo is used for general typography."},{pair_name:"Playfair Display + Fira Sans",fonts:{"Playfair Display":"A high-contrast serif designed for headings and offers a modern take on older serif fonts.","Fira Sans":"A sans-serif designed for readability at small sizes, making it suitable for both UI and text."},settings:"Playfair Display is used in italics for headings and core blocks, while Fira Sans is used for buttons and general typography."},{pair_name:"Rubik + Inter",fonts:{Rubik:"A sans-serif with slightly rounded corners, designed for a softer, more modern look.",Inter:"A highly legible sans-serif, optimized for UI design."},settings:"Rubik is applied for headings and core blocks. Inter is used for buttons and general typography."},{pair_name:"Space Mono + Roboto",fonts:{"Space Mono":"A monospace typeface with a futuristic vibe.",Roboto:"A neo-grotesque sans-serif, known for its flexibility and modern design."},settings:"Space Mono is used for headings, while Roboto takes care of buttons and general typography."}].map((e=>e.pair_name)),Ke=(Re.z.object({pair_name:Re.z.string().refine((e=>Xe.includes(e)),{message:"Font choice not part of allowed list"})}).parse,[{slug:"woocommerce-blocks/header-essential",label:"Essential Header"},{slug:"woocommerce-blocks/header-centered-menu",label:"Centered Menu with search Header"},{slug:"woocommerce-blocks/header-minimal",label:"Minimal Header"},{slug:"woocommerce-blocks/header-large",label:"Large Header"}]).map((e=>e.slug)),qe=(Re.z.object({slug:Re.z.string().refine((e=>Ke.includes(e)),{message:"Header not part of allowed list"})}).parse,[{slug:"woocommerce-blocks/footer-simple-menu",label:"Footer with Simple Menu"},{slug:"woocommerce-blocks/footer-with-3-menus",label:"Footer with 3 Menus"},{slug:"woocommerce-blocks/footer-large",label:"Large Footer"}]).map((e=>e.slug)),$e=(Re.z.object({slug:Re.z.string().refine((e=>qe.includes(e)),{message:"Footer not part of allowed list"})}).parse,Object.keys(Fe)),et=(Re.z.object({homepage_template:Re.z.string().refine((e=>$e.includes(e)),{message:"Template not part of allowed list"})}).parse,(0,c.C)({id:"designWithAi",predictableActionArguments:!0,preserveActionOrder:!0,schema:{context:{},events:{}},invoke:{src:"browserPopstateHandler"},on:{EXTERNAL_URL_UPDATE:{target:"navigate"},AI_WIZARD_CLOSED_BEFORE_COMPLETION:{actions:[(0,F.lj)(((e,t)=>t)),"recordTracksStepClosed"]}},context:{startLoadingTime:null,businessInfoDescription:{descriptionText:""},lookAndFeel:{choice:""},toneOfVoice:{choice:""},aiSuggestions:{defaultColorPalette:{default:"Ancient Bronze"},fontPairing:"Rubik + Inter",homepageTemplate:"template1"},apiCallLoader:{hasErrors:!1}},initial:"navigate",states:{navigate:{always:[{target:"businessInfoDescription",cond:{type:"hasStepInUrl",step:"business-info-description"}},{target:"lookAndFeel",cond:{type:"hasStepInUrl",step:"look-and-feel"}},{target:"toneOfVoice",cond:{type:"hasStepInUrl",step:"tone-of-voice"}},{target:"apiCallLoader",cond:{type:"hasStepInUrl",step:"api-call-loader"}},{target:"businessInfoDescription"}]},businessInfoDescription:{id:"businessInfoDescription",initial:"preBusinessInfoDescription",states:{preBusinessInfoDescription:{always:{target:"businessInfoDescription"}},businessInfoDescription:{meta:{component:e=>{let{sendEvent:t,context:o}=e;const[r,n]=(0,s.useState)(o.businessInfoDescription.descriptionText),[i,a]=(0,s.useState)(!1);return(0,s.createElement)("div",null,(0,s.createElement)(y.ProgressBar,{percent:20,color:"var(--wp-admin-theme-color)",bgcolor:"transparent"}),(0,s.createElement)(ee,{onClick:()=>{t({type:"AI_WIZARD_CLOSED_BEFORE_COMPLETION",payload:{step:"business-info-description"}})}}),(0,s.createElement)("div",{className:"woocommerce-cys-design-with-ai woocommerce-cys-layout"},(0,s.createElement)("div",{className:"woocommerce-cys-page"},(0,s.createElement)("h1",null,(0,D.__)("Tell us a bit more about your business","woocommerce")),(0,s.createElement)(T.TextareaControl,{onChange:e=>{n(e)},value:r}),(0,s.createElement)("div",{className:"woocommerce-cys-design-with-ai-guide"},(0,s.createElement)("p",null,(0,D.__)("The more detail you provide, the better our AI tool can do at creating your content.","woocommerce")),(0,s.createElement)("p",null,(0,D.__)("Try to include:","woocommerce")),(0,s.createElement)("ul",null,(0,s.createElement)("li",null,(0,D.__)("What you want to sell","woocommerce")),(0,s.createElement)("li",null,(0,D.__)("How many products you plan on displaying","woocommerce")),(0,s.createElement)("li",null,(0,D.__)("What makes your business unique","woocommerce")),(0,s.createElement)("li",null,(0,D.__)("Who your target audience is","woocommerce")))),(0,s.createElement)(T.Button,{variant:"primary",onClick:()=>{a(!0),t({type:"BUSINESS_INFO_DESCRIPTION_COMPLETE",payload:r})},disabled:0===r.length||i},i?(0,s.createElement)(T.Spinner,null):(0,D.__)("Continue","woocommerce")))))}},entry:[{type:"recordTracksStepViewed",step:"business_info_description"}],on:{BUSINESS_INFO_DESCRIPTION_COMPLETE:{actions:["assignBusinessInfoDescription","spawnSaveDescriptionToOption",{type:"recordTracksStepCompleted",step:"business_info_description"}],target:"postBusinessInfoDescription"}}},postBusinessInfoDescription:{always:{target:"#lookAndFeel"}}}},lookAndFeel:{id:"lookAndFeel",initial:"preLookAndFeel",states:{preLookAndFeel:{always:{target:"lookAndFeel"}},lookAndFeel:{meta:{component:e=>{let{sendEvent:t,context:o}=e;const r=[{title:(0,D.__)("Contemporary","woocommerce"),key:"Contemporary",subtitle:(0,D.__)("Clean lines, neutral colors, sleek and modern.","woocommerce")},{title:(0,D.__)("Classic","woocommerce"),key:"Classic",subtitle:(0,D.__)("Elegant and timeless with a nostalgic touch.","woocommerce")},{title:(0,D.__)("Bold","woocommerce"),key:"Bold",subtitle:(0,D.__)("Vibrant with eye-catching colors and visuals.","woocommerce")}],[n,i]=(0,s.useState)(""===o.lookAndFeel.choice?r[0].key:o.lookAndFeel.choice);return(0,s.createElement)("div",null,(0,s.createElement)(y.ProgressBar,{percent:60,color:"var(--wp-admin-theme-color)",bgcolor:"transparent"}),(0,s.createElement)(ee,{onClick:()=>{t({type:"AI_WIZARD_CLOSED_BEFORE_COMPLETION",payload:{step:"look-and-feel"}})}}),(0,s.createElement)("div",{className:"woocommerce-cys-design-with-ai-look-and-feel woocommerce-cys-layout"},(0,s.createElement)("div",{className:"woocommerce-cys-page"},(0,s.createElement)("h1",null,(0,D.__)("How would you like your store to look?","woocommerce")),(0,s.createElement)("div",{className:"choices"},r.map((e=>{let{title:t,subtitle:o,key:r}=e;return(0,s.createElement)(te,{key:r,name:"user-profile-choice",title:t,subtitle:o,selected:n===r,value:r,onChange:e=>{i(e)}})}))),(0,s.createElement)(T.Button,{variant:"primary",onClick:()=>{o.lookAndFeel.aiRecommended&&o.lookAndFeel.aiRecommended!==n&&(0,L.recordEvent)("customize_your_store_ai_wizard_changed_ai_option",{step:"look-and-feel",ai_recommended:o.lookAndFeel.aiRecommended,user_choice:n}),t({type:"LOOK_AND_FEEL_COMPLETE",payload:n})}},(0,D.__)("Continue","woocommerce")))))}},entry:[{type:"updateQueryStep",step:"look-and-feel"},{type:"recordTracksStepViewed",step:"look_and_feel"}],on:{LOOK_AND_FEEL_COMPLETE:{actions:[{type:"recordTracksStepCompleted",step:"look_and_feel"},"assignLookAndFeel"],target:"postLookAndFeel"}}},postLookAndFeel:{always:{target:"#toneOfVoice"}}}},toneOfVoice:{id:"toneOfVoice",initial:"preToneOfVoice",states:{preToneOfVoice:{always:{target:"toneOfVoice"}},toneOfVoice:{meta:{component:e=>{let{sendEvent:t,context:o}=e;const r=[{title:(0,D.__)("Informal","woocommerce"),key:"Informal",subtitle:(0,D.__)("Relaxed and friendly, like a conversation with a friend.","woocommerce")},{title:(0,D.__)("Neutral","woocommerce"),key:"Neutral",subtitle:(0,D.__)("Impartial tone with casual expressions and no slang.","woocommerce")},{title:(0,D.__)("Formal","woocommerce"),key:"Formal",subtitle:(0,D.__)("Direct yet respectful, serious and professional.","woocommerce")}],[n,i]=(0,s.useState)(""===o.toneOfVoice.choice?r[0].key:o.toneOfVoice.choice),a=()=>{o.toneOfVoice.aiRecommended&&o.toneOfVoice.aiRecommended!==n&&(0,L.recordEvent)("customize_your_store_ai_wizard_changed_ai_option",{step:"tone-of-voice",ai_recommended:o.toneOfVoice.aiRecommended,user_choice:n}),t({type:"TONE_OF_VOICE_COMPLETE",payload:n})};return(0,s.createElement)("div",null,(0,s.createElement)(y.ProgressBar,{percent:80,color:"var(--wp-admin-theme-color)",bgcolor:"transparent"}),(0,s.createElement)(ee,{onClick:()=>{t({type:"AI_WIZARD_CLOSED_BEFORE_COMPLETION",payload:{step:"tone-of-voice"}})}}),(0,s.createElement)("div",{className:"woocommerce-cys-design-with-ai-tone-of-voice woocommerce-cys-layout"},(0,s.createElement)("div",{className:"woocommerce-cys-page"},(0,s.createElement)("h1",null,(0,D.__)("Which writing style do you prefer?","woocommerce")),o.apiCallLoader.hasErrors&&(0,s.createElement)(T.Notice,{className:"woocommerce-cys-design-with-ai__error-notice",isDismissible:!1,status:"error"},(0,s.createInterpolateElement)((0,D.__)("Oops! We encountered a problem while generating your store. ","woocommerce"),{retryButton:(0,s.createElement)(T.Button,{onClick:a,variant:"tertiary"},(0,D.__)("Please try again","woocommerce"))})),(0,s.createElement)("div",{className:"choices"},r.map((e=>{let{title:t,subtitle:o,key:r}=e;return(0,s.createElement)(te,{key:r,name:"user-profile-choice",title:t,subtitle:o,selected:n===r,value:r,onChange:e=>{i(e)}})}))),(0,s.createElement)(T.Button,{variant:"primary",onClick:a},(0,D.__)("Continue","woocommerce")))))}},entry:[{type:"updateQueryStep",step:"tone-of-voice"},{type:"recordTracksStepViewed",step:"tone_of_voice"}],on:{TONE_OF_VOICE_COMPLETE:{actions:["assignToneOfVoice",{type:"recordTracksStepCompleted",step:"tone_of_voice"}],target:"postToneOfVoice"}}},postToneOfVoice:{always:{target:"#apiCallLoader"}}}},apiCallLoader:{id:"apiCallLoader",initial:"preApiCallLoader",states:{preApiCallLoader:{always:{target:"apiCallLoader"}},apiCallLoader:{meta:{component:()=>{const[e,t]=(0,s.useState)(5);(0,s.useEffect)((()=>{const e=e=>{const t=new Image;t.src=e,t.onload=()=>{}};e(ae),e(ce)}),[]);const o=ue(Me.slice(0,-1));return(0,s.createElement)(oe.Loader,null,(0,s.createElement)(oe.Loader.Sequence,{interval:4e4/(o.length-1),shouldLoop:!1,onChange:e=>{setTimeout((()=>{t(o[e].progress)}),0)}},o.map(((e,t)=>(0,s.createElement)(oe.Loader.Layout,{key:t},(0,s.createElement)(oe.Loader.Illustration,null,e.image),(0,s.createElement)(oe.Loader.Title,null,e.title))))),(0,s.createElement)(oe.Loader.ProgressBar,{className:"smooth-transition",progress:e||0}))}},entry:[{type:"updateQueryStep",step:"api-call-loader"},"assignStartLoadingTime"],type:"parallel",states:{chooseColorPairing:{initial:"pending",states:{pending:{invoke:{src:"queryAiEndpoint",data:e=>({...Je,prompt:Je.prompt(e.businessInfoDescription.descriptionText,e.lookAndFeel.choice,e.toneOfVoice.choice)}),onDone:{actions:["assignDefaultColorPalette"],target:"success"},onError:{target:"success"}}},success:{type:"final"}}},chooseFontPairing:{initial:"pending",states:{pending:{entry:["assignFontPairing"],always:{target:"success"}},success:{type:"final"}}},updateStorePatterns:{initial:"pending",states:{pending:{invoke:{src:"updateStorePatterns",onDone:{target:"success"},onError:{actions:["assignAPICallLoaderError"],target:"#toneOfVoice"}}},success:{type:"final"}}},installAndActivateTheme:{initial:"pending",states:{pending:{invoke:{src:"installAndActivateTheme",onDone:{target:"success"},onError:{actions:["assignAPICallLoaderError"],target:"#toneOfVoice"}}},success:{type:"final"}}}},onDone:"postApiCallLoader"},postApiCallLoader:{type:"parallel",states:{assembleSite:{initial:"pending",states:{pending:{invoke:{src:"assembleSite",onDone:{target:"done"},onError:{actions:["assignAPICallLoaderError"],target:"#toneOfVoice"}}},done:{type:"final"}}},saveAiResponse:{initial:"pending",states:{pending:{invoke:{src:"saveAiResponseToOption",onDone:{target:"done"},onError:{target:"failed"}}},done:{type:"final"},failed:{type:"final"}}}},onDone:{target:"#designWithAi.showAssembleHub"}}}},showAssembleHub:{meta:{component:()=>{const e=ue(Me.slice(-2)),[t,o]=(0,s.useState)(e[0].progress);return(0,s.createElement)(oe.Loader,null,(0,s.createElement)(oe.Loader.Sequence,{interval:1e4/(e.length-1),shouldLoop:!1,onChange:t=>{setTimeout((()=>{o(e[t].progress)}),0)}},e.map(((e,t)=>(0,s.createElement)(oe.Loader.Layout,{key:t},(0,s.createElement)(oe.Loader.Illustration,null,e.image),(0,s.createElement)(oe.Loader.Title,null,e.title))))),(0,s.createElement)(oe.Loader.ProgressBar,{className:"smooth-transition",progress:t||0}))}},entry:["redirectToAssemblerHub"],type:"final"}}},{actions:we,services:Ge,guards:{hasStepInUrl:(e,t,o)=>{let{cond:r}=o;const{path:n=""}=(0,g.getQuery)();return n.split("/")[3]===r.step}}}));var tt=o(1718);const ot=e=>{let{parentMachine:t}=e;const[o,r,n]=(0,M.e)(et,{devTools:!1,parent:t}),i=(0,u.v)(n,(e=>{var t;return(0,tt.r)(null!==(t=null==e?void 0:e.meta)&&void 0!==t?t:void 0)})),[a,l]=(0,s.useState)(null);(0,s.useEffect)((()=>{null!=i&&i.component&&l((()=>null==i?void 0:i.component))}),[a,null==i?void 0:i.component]);const c=o.value instanceof Object?Object.keys(o.value)[0]:o.value;return(0,s.createElement)(s.Fragment,null,(0,s.createElement)("div",{className:`woocommerce-design-with-ai__container woocommerce-design-with-ai-wizard__step-${c}`},a?(0,s.createElement)(a,{sendEvent:r,context:o.context}):(0,s.createElement)("div",null)))};var rt=o(97800),nt=o(86802),it=o(37557),at=o(24705),st=o(55815),lt=o(12238),ct=o(83357),Mt=o(58141),ut=o(92694),gt=o(17547),mt=o(43302),dt=o(9059),yt=o(9480),Nt=o(76989),pt=o(14168),It=o(40592),Dt=o(56530),Et=o(92819);const Tt=e=>{let{fontFamilies:t,onLoad:o,preload:r=!1}=e;const n=(0,s.useMemo)((()=>new URLSearchParams([...t.map((e=>{let{fontFamily:t}=e;return["family",`${t}:ital,wght@0,400;0,700;1,400;1,700`]})),["display","swap"]])),[t]);return n.getAll("family").length?(0,s.createElement)(s.Fragment,null,r?(0,s.createElement)("link",{rel:"preconnect",href:"https://fonts.wp.com"}):null,(0,s.createElement)("link",{rel:r?"preload":"stylesheet",type:"text/css",as:r?"style":void 0,href:`https://fonts-api.wp.com/css2?${n}`,onLoad:o,onError:o})):null},jt=()=>{const e=Le.map((e=>{var t,o,r;return null==e||null===(t=e.settings)||void 0===t||null===(o=t.typography)||void 0===o||null===(r=o.fontFamilies)||void 0===r?void 0:r.theme})).map((e=>[...e.map((e=>({...e,name:e.fontFamily})))]));return(0,s.createElement)(s.Fragment,null,e.map((e=>(0,s.createElement)(Tt,{fontFamilies:e,key:e.map((e=>e.slug)).join("-"),preload:!0}))))},{Provider:zt}=T.Disabled.Context;let wt;const{useGlobalSetting:kt}=(0,it.U)(be.privateApis),ht=2e3;function ft(e){let{viewportWidth:t,containerWidth:o,settings:r,additionalStyles:n,onClickNavigationItem:i,isNavigable:a=!1,isScrollable:l=!0,autoScale:c=!0,setLogoBlockContext:M=!1,CustomIframeComponent:u=be.__unstableIframe}=e;const[g,m]=(0,s.useState)(null),{setLogoBlockIds:d}=(0,s.useContext)(ve),[y]=kt("typography.fontFamilies.theme"),N=y.filter((e=>{let{slug:t}=e;return"system-font"!==t}));t||(t=o);const p=(0,s.useMemo)((()=>!l&&r.styles?[...r.styles,{css:"body{height:auto;overflow:hidden;border:none;padding:0;}",__unstableType:"presets"}]:r.styles),[r.styles,l]),I=o/t,D=g?o/(g*I):0;wt=wt||(0,k.pure)(be.BlockList);return(0,s.createElement)(zt,{value:!0},(0,s.createElement)("div",{className:"block-editor-block-preview__content",style:c?{transform:`scale(${I})`,aspectRatio:D,maxHeight:null!==g&&g>ht?ht*I:void 0}:{}},(0,s.createElement)(u,{"aria-hidden":!0,scrolling:l?"yes":"no",tabIndex:-1,readonly:!a,style:c?{position:"absolute",width:t,height:g,pointerEvents:"none",maxHeight:ht}:{},contentRef:(0,k.useRefEffect)((e=>{const{ownerDocument:{documentElement:t}}=e;t.classList.add("block-editor-block-preview__content-iframe"),t.style.position="absolute",t.style.width="100%",e.style.boxSizing="border-box",e.style.position="absolute",e.style.width="100%";const o=(e=>{let t,o;const r=e=>{e.stopImmediatePropagation()},n=e=>{e.preventDefault(),i(e)},s=()=>{e.removeEventListener("mousemove",r,!1),t&&t.forEach((e=>{e.removeEventListener("click",n)})),o&&o.forEach((e=>{e.removeEventListener("click",n)}))};e.addEventListener("mousemove",r,!0);const l=new window.MutationObserver((()=>{if(c){const t=e.querySelector(".is-root-container");m(t?t.clientHeight:null)}a&&(e.querySelectorAll('.block-editor-rich-text__editable[contenteditable="true"]').forEach((e=>{e.removeAttribute("contenteditable")})),e.querySelectorAll('*[inert="true"]').forEach((e=>{e.removeAttribute("inert")})),s(),t=e.querySelectorAll(".wp-block-navigation__container"),t.forEach((e=>{e.addEventListener("click",n,!0)})),o=e.querySelectorAll(".wp-block-site-title a"),o.forEach((e=>{e.addEventListener("click",n,!0)}))),M&&(()=>{const t=e.querySelectorAll(".wp-block-site-logo"),o=Array.from(t).map((e=>e.getAttribute("data-block"))).filter(Boolean);d(o)})()}));return l.observe(e,{attributes:!0,characterData:!1,subtree:!0,childList:!0}),()=>{l.disconnect(),s(),M&&d([])}})(e);return()=>{o(),m(null)}}),[a])},(0,s.createElement)(be.__unstableEditorStyles,{styles:p}),(0,s.createElement)("style",null,`\n\t\t\t\t\t\t.block-editor-block-list__block::before,\n\t\t\t\t\t\t.is-selected::after,\n\t\t\t\t\t\t.is-hovered::after,\n\t\t\t\t\t\t.block-list-appender {\n\t\t\t\t\t\t\tdisplay: none !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t.block-editor-block-list__block.is-selected {\n\t\t\t\t\t\t\tbox-shadow: none !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t.block-editor-rich-text__editable {\n\t\t\t\t\t\t\tpointer-events: none !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t.wp-block-site-title .block-editor-rich-text__editable {\n\t\t\t\t\t\t\tpointer-events: all !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t.wp-block-navigation-item .wp-block-navigation-item__content,\n\t\t\t\t\t\t.wp-block-navigation .wp-block-pages-list__item__link {\n\t\t\t\t\t\t\tpointer-events: all !important;\n\t\t\t\t\t\t\tcursor: pointer !important;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t${n}\n\t\t\t\t\t`),(0,s.createElement)(wt,{renderAppender:!1}),(0,s.createElement)(jt,null),(0,s.createElement)(Tt,{fontFamilies:N,onLoad:Et.noop}))))}const At=e=>{const[t,{width:o}]=(0,k.useResizeObserver)();return(0,s.createElement)(s.Fragment,null,(0,s.createElement)("div",{style:{position:"relative",width:"100%",height:0}},t),(0,s.createElement)("div",{className:"auto-block-preview__container"},!!o&&(0,s.createElement)(ft,(0,j.Z)({},e,{containerWidth:o}))))},xt=(0,s.memo)((e=>{let{blocks:t,settings:o,useSubRegistry:r=!0,onChange:n,...i}=e;const a=(0,s.useMemo)((()=>Array.isArray(t)?t:[t]),[t]);return(0,s.createElement)(be.BlockEditorProvider,{value:a,settings:o,onChange:n,useSubRegistry:r},(0,s.createElement)(At,(0,j.Z)({settings:o},i)))})),_t=()=>{const{templateType:e}=(0,d.useSelect)((e=>{const{getEditedPostType:t}=(0,it.U)(e(ct.h));return{templateType:t()}}),[]),[t,o,r]=(0,l.useEntityBlockEditor)("postType",e);return[t,o,r]},Lt=(0,s.createContext)({highlightedBlockIndex:-1,setHighlightedBlockIndex:e=>{},resetHighlightedBlockIndex:()=>{}}),Ot=e=>{let{children:t}=e;const[o,r]=(0,s.useState)(-1);return(0,s.createElement)(Lt.Provider,{value:{highlightedBlockIndex:o,setHighlightedBlockIndex:r,resetHighlightedBlockIndex:()=>{r(-1)}}},t)};function St(e){var t,o,r,n;let{contentRef:i,children:a,tabIndex:l=0,scale:c=1,frameSize:M=0,expand:u=!1,readonly:g,forwardedRef:m,loadStyles:y=!0,loadScripts:N=!1,...p}=e;const[I,E]=(0,s.useState)(),{resolvedAssets:z}=(0,d.useSelect)((e=>({resolvedAssets:e(be.store).getSettings().__unstableResolvedAssets})),[]),{styles:h="",scripts:f=""}=z,[A,{height:x}]=(0,k.useResizeObserver)(),_=(0,k.useRefEffect)((e=>{e._load=()=>{E(e.contentDocument)}}),[]),L=(0,k.useDisabled)({isDisabled:!g}),O=(0,k.useMergeRefs)([i,L]),S=`\n\n\t\n\t\t
-
-
-
-
-
diff --git a/wp/wp-content/plugins/woocommerce/includes/admin/settings/views/html-admin-page-shipping-zone-methods.php b/wp/wp-content/plugins/woocommerce/includes/admin/settings/views/html-admin-page-shipping-zone-methods.php
index 6ea03a78..dd924543 100644
--- a/wp/wp-content/plugins/woocommerce/includes/admin/settings/views/html-admin-page-shipping-zone-methods.php
+++ b/wp/wp-content/plugins/woocommerce/includes/admin/settings/views/html-admin-page-shipping-zone-methods.php
@@ -24,10 +24,8 @@ if ( ! defined( 'ABSPATH' ) ) {
+
-
-
-
@@ -37,34 +35,48 @@ if ( ! defined( 'ABSPATH' ) ) {
+
-
-
-
-
-
+
+
+ $continent ) {
+ echo '' . esc_html( $continent['name'] ) . ' ';
+
+ $countries = array_intersect( array_keys( $allowed_countries ), $continent['countries'] );
+
+ foreach ( $countries as $country_code ) {
+ echo '' . esc_html( ' ' . $allowed_countries[ $country_code ] ) . ' ';
+
+ $states = WC()->countries->get_states( $country_code );
+
+ if ( $states ) {
+ foreach ( $states as $state_code => $state_name ) {
+ echo '' . esc_html( ' ' . $state_name . ', ' . $allowed_countries[ $country_code ] ) . ' ';
+ }
+ }
+ }
+ }
+ ?>
+
-
90210...99000) are also supported. Please see the shipping zones documentation for more information.', 'woocommerce' ), 'https://woo.com/document/setting-up-shipping-zones/#section-3' ); ?>
+
90210...99000) are also supported. Please see the shipping zones documentation for more information.', 'woocommerce' ), 'https://docs.woocommerce.com/document/setting-up-shipping-zones/#section-3' ); ?>
-
-
+
+
+
-
-
-
@@ -74,19 +86,19 @@ if ( ! defined( 'ABSPATH' ) ) {
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
@@ -108,17 +120,16 @@ if ( ! defined( 'ABSPATH' ) ) {
- {{{ data.title }}}
+ {{{ data.title }}}
+
{{{ data.enabled_icon }}}
+ {{ data.method_title }}
{{{ data.method_description }}}
-
-
-
@@ -131,8 +142,8 @@ if ( ! defined( 'ABSPATH' ) ) {
@@ -140,20 +151,15 @@ if ( ! defined( 'ABSPATH' ) ) {
-
+
{{{ data.method.settings_html }}}
-
@@ -163,52 +169,36 @@ if ( ! defined( 'ABSPATH' ) ) {
diff --git a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-admin-page-addons.php b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-admin-page-addons.php
index 3958684f..badf4647 100644
--- a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-admin-page-addons.php
+++ b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-admin-page-addons.php
@@ -57,8 +57,8 @@ $current_section_name = __( 'Browse Categories', 'woocommerce' );
>
@@ -90,7 +90,7 @@ $current_section_name = __( 'Browse Categories', 'woocommerce' );
get_error_message() ); ?>
-
+
is_wc_admin_active() ) {
foreach ( $promotions as $promotion ) {
@@ -105,17 +105,17 @@ $current_section_name = __( 'Browse Categories', 'woocommerce' );
// Do not show USPS or Canada Post extensions for US and CA stores, respectively.
$country = WC()->countries->get_base_country();
if ( 'US' === $country
- && false !== strpos(
+ && false !== strpos(
$addon->link,
- 'woo.com/products/usps-shipping-method'
+ 'woocommerce.com/products/usps-shipping-method'
)
) {
continue;
}
if ( 'CA' === $country
- && false !== strpos(
+ && false !== strpos(
$addon->link,
- 'woo.com/products/canada-post-shipping-method'
+ 'woocommerce.com/products/canada-post-shipping-method'
)
) {
continue;
@@ -131,12 +131,12 @@ $current_section_name = __( 'Browse Categories', 'woocommerce' );
- WooCommerce Extensions Catalog', 'woocommerce' ) ), 'https://woo.com/product-category/woocommerce-extensions/' ); ?>
+ WooCommerce Extensions Catalog', 'woocommerce' ) ), 'https://woocommerce.com/product-category/woocommerce-extensions/' ); ?>
diff --git a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-admin-page-reports.php b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-admin-page-reports.php
index 1d7cc5ab..cb4deb09 100644
--- a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-admin-page-reports.php
+++ b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-admin-page-reports.php
@@ -15,7 +15,7 @@ if ( ! defined( 'ABSPATH' ) ) {
WooCommerce Analytics or learn more about the new experience in the WooCommerce Analytics documentation .', 'woocommerce' ), esc_url( wc_admin_url( '&path=/analytics/overview' ) ) ) );
+ echo wp_kses_post( sprintf( __( 'With the release of WooCommerce 4.0, these reports are being replaced. There is a new and better Analytics section available for users running WordPress 5.3+. Head on over to the WooCommerce Analytics or learn more about the new experience in the WooCommerce Analytics documentation .', 'woocommerce' ), esc_url( wc_admin_url( '&path=/analytics/overview' ) ) ) );
?>
diff --git a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-admin-page-status-report.php b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-admin-page-status-report.php
index b968bb83..6ebe2d0b 100644
--- a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-admin-page-status-report.php
+++ b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-admin-page-status-report.php
@@ -31,7 +31,7 @@ $untested_plugins = $plugin_updates->get_untested_plugins( WC()->version, Cons
-
+
@@ -461,7 +461,7 @@ $untested_plugins = $plugin_updates->get_untested_plugins( WC()->version, Cons
20 ) {
/* Translators: %1$s: Database prefix, %2$s: Docs link. */
- echo '
' . sprintf( esc_html__( '%1$s - We recommend using a prefix with less than 20 characters. See: %2$s', 'woocommerce' ), esc_html( $database['database_prefix'] ), '' . esc_html__( 'How to update your database table prefix', 'woocommerce' ) . ' ' ) . '';
+ echo '
' . sprintf( esc_html__( '%1$s - We recommend using a prefix with less than 20 characters. See: %2$s', 'woocommerce' ), esc_html( $database['database_prefix'] ), '' . esc_html__( 'How to update your database table prefix', 'woocommerce' ) . ' ' ) . '';
} else {
echo '
' . esc_html( $database['database_prefix'] ) . ' ';
}
@@ -572,7 +572,7 @@ $untested_plugins = $plugin_updates->get_untested_plugins( WC()->version, Cons
Learn more about HTTPS and SSL Certificates.', 'woocommerce' ), 'https://woo.com/document/ssl-and-https/' ) );
+ echo wp_kses_post( sprintf( __( 'Your store is not using HTTPS. Learn more about HTTPS and SSL Certificates .', 'woocommerce' ), 'https://docs.woocommerce.com/document/ssl-and-https/' ) );
?>
@@ -737,8 +737,8 @@ if ( 0 < count( $dropins_mu_plugins['mu_plugins'] ) ) :
- :
-
+ :
+
' : '– '; ?>
@@ -968,7 +968,7 @@ if ( 0 < count( $dropins_mu_plugins['mu_plugins'] ) ) :
-
+
diff --git a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-download-dir-sync-complete.php b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-download-dir-sync-complete.php
index e52f4000..24da9e5b 100644
--- a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-download-dir-sync-complete.php
+++ b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-download-dir-sync-complete.php
@@ -12,7 +12,7 @@ defined( 'ABSPATH' ) || exit;
';
- $documentation_link = '';
+ $documentation_link = ' ';
$closing_link = ' ';
printf(
diff --git a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-legacy-shipping.php b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-legacy-shipping.php
index 782b8003..dbed19c1 100644
--- a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-legacy-shipping.php
+++ b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-legacy-shipping.php
@@ -27,7 +27,7 @@ if ( ! defined( 'ABSPATH' ) ) {
-
+
diff --git a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-no-shipping-methods.php b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-no-shipping-methods.php
index 0cfc8c29..da2d022c 100644
--- a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-no-shipping-methods.php
+++ b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-no-shipping-methods.php
@@ -30,7 +30,7 @@ if ( ! defined( 'ABSPATH' ) ) {
-
+
diff --git a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-secure-connection.php b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-secure-connection.php
index e24a7a4c..5cc99d17 100644
--- a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-secure-connection.php
+++ b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-secure-connection.php
@@ -16,7 +16,7 @@ defined( 'ABSPATH' ) || exit;
echo wp_kses_post( sprintf(
/* translators: %s: documentation URL */
__( 'Your store does not appear to be using a secure connection. We highly recommend serving your entire website over an HTTPS connection to help keep customer data secure. Learn more here. ', 'woocommerce' ),
- 'https://woo.com/document/ssl-and-https/'
+ 'https://docs.woocommerce.com/document/ssl-and-https/'
) );
?>
diff --git a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-template-check.php b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-template-check.php
index 1ea74087..50e2f313 100644
--- a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-template-check.php
+++ b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-template-check.php
@@ -23,7 +23,7 @@ $theme = wp_get_theme();
-
+
diff --git a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-update.php b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-update.php
index c11b0cd6..e45496de 100644
--- a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-update.php
+++ b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-update.php
@@ -32,7 +32,7 @@ $update_url = wp_nonce_url(
-
+
diff --git a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-uploads-directory-is-unprotected.php b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-uploads-directory-is-unprotected.php
index df2987a3..f9c2b417 100644
--- a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-uploads-directory-is-unprotected.php
+++ b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-uploads-directory-is-unprotected.php
@@ -21,7 +21,7 @@ $uploads = wp_get_upload_dir();
/* translators: 1: uploads directory URL 2: documentation URL */
__( 'Your store\'s uploads directory is browsable via the web . We strongly recommend configuring your web server to prevent directory indexing .', 'woocommerce' ),
esc_url( $uploads['baseurl'] . '/woocommerce_uploads' ),
- 'https://woo.com/document/digital-downloadable-product-handling/#protecting-your-uploads-directory'
+ 'https://docs.woocommerce.com/document/digital-downloadable-product-handling/#protecting-your-uploads-directory'
)
);
?>
diff --git a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-wp-php-minimum-requirements.php b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-wp-php-minimum-requirements.php
index fff3f734..e5201104 100644
--- a/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-wp-php-minimum-requirements.php
+++ b/wp/wp-content/plugins/woocommerce/includes/admin/views/html-notice-wp-php-minimum-requirements.php
@@ -22,7 +22,7 @@ defined( 'ABSPATH' ) || exit;
'utm_campaign' => 'woocommerceplugin',
'utm_content' => 'docs',
),
- 'https://woo.com/document/update-php-wordpress/'
+ 'https://docs.woocommerce.com/document/update-php-wordpress/'
)
)
);
diff --git a/wp/wp-content/plugins/woocommerce/includes/class-wc-cart.php b/wp/wp-content/plugins/woocommerce/includes/class-wc-cart.php
index bb940add..84410f9c 100644
--- a/wp/wp-content/plugins/woocommerce/includes/class-wc-cart.php
+++ b/wp/wp-content/plugins/woocommerce/includes/class-wc-cart.php
@@ -1573,30 +1573,10 @@ class WC_Cart extends WC_Legacy_Cart {
return false;
}
$country_fields = WC()->countries->get_address_fields( $country, 'shipping_' );
- /**
- * Filter to not require shipping state for shipping calculation, even if it is required at checkout.
- * This can be used to allow shipping calculations to be done without a state.
- *
- * @since 8.4.0
- *
- * @param bool $show_state Whether to use the state field. Default true.
- */
- $state_enabled = apply_filters( 'woocommerce_shipping_calculator_enable_state', true );
- $state_required = isset( $country_fields['shipping_state'] ) && $country_fields['shipping_state']['required'];
- if ( $state_enabled && $state_required && ! $this->get_customer()->get_shipping_state() ) {
+ if ( isset( $country_fields['shipping_state'] ) && $country_fields['shipping_state']['required'] && ! $this->get_customer()->get_shipping_state() ) {
return false;
}
- /**
- * Filter to not require shipping postcode for shipping calculation, even if it is required at checkout.
- * This can be used to allow shipping calculations to be done without a postcode.
- *
- * @since 8.4.0
- *
- * @param bool $show_postcode Whether to use the postcode field. Default true.
- */
- $postcode_enabled = apply_filters( 'woocommerce_shipping_calculator_enable_postcode', true );
- $postcode_required = isset( $country_fields['shipping_postcode'] ) && $country_fields['shipping_postcode']['required'];
- if ( $postcode_enabled && $postcode_required && ! $this->get_customer()->get_shipping_postcode() ) {
+ if ( isset( $country_fields['shipping_postcode'] ) && $country_fields['shipping_postcode']['required'] && ! $this->get_customer()->get_shipping_postcode() ) {
return false;
}
}
diff --git a/wp/wp-content/plugins/woocommerce/includes/class-wc-checkout.php b/wp/wp-content/plugins/woocommerce/includes/class-wc-checkout.php
index e4765d29..89dec95f 100644
--- a/wp/wp-content/plugins/woocommerce/includes/class-wc-checkout.php
+++ b/wp/wp-content/plugins/woocommerce/includes/class-wc-checkout.php
@@ -421,10 +421,7 @@ class WC_Checkout {
}
}
- if ( isset( $data['billing_email'] ) ) {
- $order->hold_applied_coupons( $data['billing_email'] );
- }
-
+ $order->hold_applied_coupons( $data['billing_email'] );
$order->set_created_via( 'checkout' );
$order->set_cart_hash( $cart_hash );
/**
diff --git a/wp/wp-content/plugins/woocommerce/includes/class-wc-countries.php b/wp/wp-content/plugins/woocommerce/includes/class-wc-countries.php
index f57ed98f..b3ef6782 100644
--- a/wp/wp-content/plugins/woocommerce/includes/class-wc-countries.php
+++ b/wp/wp-content/plugins/woocommerce/includes/class-wc-countries.php
@@ -995,8 +995,6 @@ class WC_Countries {
),
'postcode' => array(
'required' => false,
- // Hidden for stores within Chile. @see https://github.com/woocommerce/woocommerce/issues/36546.
- 'hidden' => 'CL' === $this->get_base_country(),
),
'state' => array(
'label' => __( 'Region', 'woocommerce' ),
@@ -1514,8 +1512,8 @@ class WC_Countries {
'priority' => 65,
),
'state' => array(
+ 'label' => __( 'Municipality', 'woocommerce' ),
'required' => false,
- 'hidden' => true,
),
),
'LK' => array(
diff --git a/wp/wp-content/plugins/woocommerce/includes/class-wc-discounts.php b/wp/wp-content/plugins/woocommerce/includes/class-wc-discounts.php
index e0c7b7b5..a202b0cc 100644
--- a/wp/wp-content/plugins/woocommerce/includes/class-wc-discounts.php
+++ b/wp/wp-content/plugins/woocommerce/includes/class-wc-discounts.php
@@ -7,6 +7,7 @@
*/
use Automattic\WooCommerce\Utilities\NumberUtil;
+use Automattic\WooCommerce\Utilities\StringUtil;
defined( 'ABSPATH' ) || exit;
@@ -256,7 +257,7 @@ class WC_Discounts {
}
$coupon_code = $coupon->get_code();
- if ( ! isset( $this->discounts[ $coupon_code ] ) || ! is_array( $this->discounts[ $coupon_code ] ) ) {
+ if ( StringUtil::is_null_or_whitespace( $this->discounts[ $coupon_code ] ?? null ) ) {
$this->discounts[ $coupon_code ] = array_fill_keys( array_keys( $this->items ), 0 );
}
diff --git a/wp/wp-content/plugins/woocommerce/includes/class-wc-emails.php b/wp/wp-content/plugins/woocommerce/includes/class-wc-emails.php
index 3c009cf7..7d8042df 100644
--- a/wp/wp-content/plugins/woocommerce/includes/class-wc-emails.php
+++ b/wp/wp-content/plugins/woocommerce/includes/class-wc-emails.php
@@ -298,8 +298,8 @@ class WC_Emails {
$this->get_blogname(),
$domain,
$domain,
- 'WooCommerce ',
- 'WooCommerce ',
+ 'WooCommerce ',
+ 'WooCommerce ',
),
$string
);
diff --git a/wp/wp-content/plugins/woocommerce/includes/class-wc-install.php b/wp/wp-content/plugins/woocommerce/includes/class-wc-install.php
index 4b983af4..492b098b 100644
--- a/wp/wp-content/plugins/woocommerce/includes/class-wc-install.php
+++ b/wp/wp-content/plugins/woocommerce/includes/class-wc-install.php
@@ -249,13 +249,6 @@ class WC_Install {
*/
const NEWLY_INSTALLED_OPTION = 'woocommerce_newly_installed';
- /**
- * Option name used to uniquely identify installations of WooCommerce.
- *
- * @var string
- */
- const STORE_ID_OPTION = 'woocommerce_store_id';
-
/**
* Hook in tabs.
*/
@@ -445,7 +438,6 @@ class WC_Install {
self::set_paypal_standard_load_eligibility();
self::update_wc_version();
self::maybe_update_db_version();
- self::maybe_set_store_id();
delete_transient( 'wc_installing' );
@@ -618,17 +610,6 @@ class WC_Install {
}
}
- /**
- * Set the Store ID if not already present.
- *
- * @since 8.4.0
- */
- public static function maybe_set_store_id() {
- if ( ! get_option( self::STORE_ID_OPTION, false ) ) {
- add_option( self::STORE_ID_OPTION, wp_generate_uuid4() );
- }
- }
-
/**
* Update WC version to current.
*/
@@ -1242,10 +1223,11 @@ class WC_Install {
$product_attributes_lookup_table_creation_sql = wc_get_container()->get( DataRegenerator::class )->get_table_creation_sql();
$feature_controller = wc_get_container()->get( FeaturesController::class );
- $hpos_enabled =
+ $hpos_enabled =
$feature_controller->feature_is_enabled( DataSynchronizer::ORDERS_DATA_SYNC_ENABLED_OPTION ) || $feature_controller->feature_is_enabled( CustomOrdersTableController::CUSTOM_ORDERS_TABLE_USAGE_ENABLED_OPTION ) ||
- self::should_enable_hpos_for_new_shop();
- $hpos_table_schema = $hpos_enabled ? wc_get_container()->get( OrdersTableDataStore::class )->get_database_schema() : '';
+ self::should_enable_hpos_for_new_shop()
+ ;
+ $hpos_table_schema = $hpos_enabled ? wc_get_container()->get( OrdersTableDataStore::class )->get_database_schema() : '';
$tables = "
CREATE TABLE {$wpdb->prefix}woocommerce_sessions (
@@ -1980,14 +1962,14 @@ $hpos_table_schema;
*
* @since 2.7.0
*/
- $docs_url = apply_filters( 'woocommerce_docs_url', 'https://woo.com/documentation/plugins/woocommerce/' );
+ $docs_url = apply_filters( 'woocommerce_docs_url', 'https://docs.woocommerce.com/documentation/plugins/woocommerce/' );
/**
* The WooCommerce API documentation URL.
*
* @since 2.2.0
*/
- $api_docs_url = apply_filters( 'woocommerce_apidocs_url', 'https://woo.com/wc-apidocs/' );
+ $api_docs_url = apply_filters( 'woocommerce_apidocs_url', 'https://docs.woocommerce.com/wc-apidocs/' );
/**
* The community WooCommerce support URL.
@@ -2001,7 +1983,7 @@ $hpos_table_schema;
*
* @since
*/
- $support_url = apply_filters( 'woocommerce_support_url', 'https://woo.com/my-account/create-a-ticket/' );
+ $support_url = apply_filters( 'woocommerce_support_url', 'https://woocommerce.com/my-account/create-a-ticket/' );
$row_meta = array(
'docs' => '' . esc_html__( 'Docs', 'woocommerce' ) . ' ',
diff --git a/wp/wp-content/plugins/woocommerce/includes/class-wc-log-levels.php b/wp/wp-content/plugins/woocommerce/includes/class-wc-log-levels.php
index 621c6955..f577b55c 100644
--- a/wp/wp-content/plugins/woocommerce/includes/class-wc-log-levels.php
+++ b/wp/wp-content/plugins/woocommerce/includes/class-wc-log-levels.php
@@ -92,15 +92,6 @@ abstract class WC_Log_Levels {
return self::is_valid_level( $level ) ? self::$level_to_severity[ strtolower( $level ) ] : 0;
}
- /**
- * Get an associative array with `level name => numerical severity` key/value pairs.
- *
- * @return int[]
- */
- public static function get_all_level_severities() {
- return self::$level_to_severity;
- }
-
/**
* Translate severity integer to level string.
*
@@ -114,12 +105,4 @@ abstract class WC_Log_Levels {
return self::$severity_to_level[ $severity ];
}
- /**
- * Get an associative array with `numerical severity => level name` key/value pairs.
- *
- * @return string[]
- */
- public static function get_all_severity_levels() {
- return self::$severity_to_level;
- }
}
diff --git a/wp/wp-content/plugins/woocommerce/includes/class-wc-order.php b/wp/wp-content/plugins/woocommerce/includes/class-wc-order.php
index 6dc59aed..cb4940f3 100644
--- a/wp/wp-content/plugins/woocommerce/includes/class-wc-order.php
+++ b/wp/wp-content/plugins/woocommerce/includes/class-wc-order.php
@@ -392,23 +392,7 @@ class WC_Order extends WC_Abstract_Order {
if ( $status_transition ) {
try {
- /**
- * Fires when order status is changed.
- *
- * @since 1.0.0
- *
- * @param int Order ID.
- * @param WC_Order $order Order object.
- * @param array $status_transition {
- * Status transition data.
- *
- * @type string $from Order status from.
- * @type string $to Order status to
- * @type string $note Order note.
- * @type boolean $manual True if the order is manually changed.
- * }
- */
- do_action( 'woocommerce_order_status_' . $status_transition['to'], $this->get_id(), $this, $status_transition );
+ do_action( 'woocommerce_order_status_' . $status_transition['to'], $this->get_id(), $this );
if ( ! empty( $status_transition['from'] ) ) {
/* translators: 1: old order status 2: new order status */
diff --git a/wp/wp-content/plugins/woocommerce/includes/class-wc-product-download.php b/wp/wp-content/plugins/woocommerce/includes/class-wc-product-download.php
index b28c0806..6f4f234e 100644
--- a/wp/wp-content/plugins/woocommerce/includes/class-wc-product-download.php
+++ b/wp/wp-content/plugins/woocommerce/includes/class-wc-product-download.php
@@ -247,7 +247,7 @@ class WC_Product_Download implements ArrayAccess {
/* translators: %1$s is the downloadable file path, %2$s is an opening link tag, %3%s is a closing link tag. */
__( 'The downloadable file %1$s cannot be used: it is not located in an approved directory. Please contact a site administrator for help. %2$sLearn more.%3$s', 'woocommerce' ),
'' . $download_file . '',
- '',
+ ' ',
' '
)
);
diff --git a/wp/wp-content/plugins/woocommerce/includes/class-wc-product-simple.php b/wp/wp-content/plugins/woocommerce/includes/class-wc-product-simple.php
index e49f4959..6dfebfc5 100644
--- a/wp/wp-content/plugins/woocommerce/includes/class-wc-product-simple.php
+++ b/wp/wp-content/plugins/woocommerce/includes/class-wc-product-simple.php
@@ -70,7 +70,7 @@ class WC_Product_Simple extends WC_Product {
*/
public function add_to_cart_description() {
/* translators: %s: Product title */
- $text = $this->is_purchasable() && $this->is_in_stock() ? __( 'Add to cart: “%s”', 'woocommerce' ) : __( 'Read more about “%s”', 'woocommerce' );
+ $text = $this->is_purchasable() && $this->is_in_stock() ? __( 'Add “%s” to your cart', 'woocommerce' ) : __( 'Read more about “%s”', 'woocommerce' );
return apply_filters( 'woocommerce_product_add_to_cart_description', sprintf( $text, $this->get_name() ), $this );
}
diff --git a/wp/wp-content/plugins/woocommerce/includes/class-wc-tracker.php b/wp/wp-content/plugins/woocommerce/includes/class-wc-tracker.php
index 7c7f0483..e720012e 100644
--- a/wp/wp-content/plugins/woocommerce/includes/class-wc-tracker.php
+++ b/wp/wp-content/plugins/woocommerce/includes/class-wc-tracker.php
@@ -133,10 +133,7 @@ class WC_Tracker {
$data = array();
// General site info.
- $data['url'] = home_url();
- $data['store_id'] = get_option( \WC_Install::STORE_ID_OPTION, null );
- $data['blog_id'] = class_exists( 'Jetpack_Options' ) ? Jetpack_Options::get_option( 'id' ) : null;
-
+ $data['url'] = home_url();
/**
* Filter the admin email that's sent with data.
*
@@ -364,7 +361,7 @@ class WC_Tracker {
}
/**
- * Check to see if the helper is connected to Woo.com
+ * Check to see if the helper is connected to woocommerce.com
*
* @return string
*/
diff --git a/wp/wp-content/plugins/woocommerce/includes/class-woocommerce.php b/wp/wp-content/plugins/woocommerce/includes/class-woocommerce.php
index 1d24e4f7..8f44cf57 100644
--- a/wp/wp-content/plugins/woocommerce/includes/class-woocommerce.php
+++ b/wp/wp-content/plugins/woocommerce/includes/class-woocommerce.php
@@ -34,7 +34,7 @@ final class WooCommerce {
*
* @var string
*/
- public $version = '8.4.0';
+ public $version = '8.3.0';
/**
* WooCommerce Schema version.
@@ -235,7 +235,6 @@ final class WooCommerce {
add_action( 'admin_notices', array( $this, 'build_dependencies_notice' ) );
add_action( 'after_setup_theme', array( $this, 'setup_environment' ) );
add_action( 'after_setup_theme', array( $this, 'include_template_functions' ), 11 );
- add_action( 'load-post.php', array( $this, 'includes' ) );
add_action( 'init', array( $this, 'init' ), 0 );
add_action( 'init', array( 'WC_Shortcodes', 'init' ) );
add_action( 'init', array( 'WC_Emails', 'init_transactional_emails' ) );
@@ -318,7 +317,7 @@ final class WooCommerce {
$this->define( 'WC_LOG_DIR', $upload_dir['basedir'] . '/wc-logs/' );
$this->define( 'WC_SESSION_CACHE_GROUP', 'wc_session_id' );
$this->define( 'WC_TEMPLATE_DEBUG_MODE', false );
-
+
// These three are kept defined for compatibility, but are no longer used.
$this->define( 'WC_NOTICE_MIN_PHP_VERSION', '7.2' );
$this->define( 'WC_NOTICE_MIN_WP_VERSION', '5.2' );
@@ -585,10 +584,7 @@ final class WooCommerce {
include_once WC_ABSPATH . 'includes/admin/class-wc-admin.php';
}
- // We load frontend includes in the post editor, because they may be invoked via pre-loading of blocks.
- $in_post_editor = doing_action( 'load-post.php' ) || doing_action( 'load-post-new.php' );
-
- if ( $this->is_request( 'frontend' ) || $this->is_rest_api_request() || $in_post_editor ) {
+ if ( $this->is_request( 'frontend' ) ) {
$this->frontend_includes();
}
diff --git a/wp/wp-content/plugins/woocommerce/includes/cli/class-wc-cli-com-command.php b/wp/wp-content/plugins/woocommerce/includes/cli/class-wc-cli-com-command.php
index ce863768..5f6f7b63 100644
--- a/wp/wp-content/plugins/woocommerce/includes/cli/class-wc-cli-com-command.php
+++ b/wp/wp-content/plugins/woocommerce/includes/cli/class-wc-cli-com-command.php
@@ -16,10 +16,10 @@ if ( ! defined( 'ABSPATH' ) ) {
* @package WooCommerce
*/
class WC_CLI_COM_Command {
- const APPLICATION_PASSWORD_SECTION_URL = 'https://woo.com/my-account/#application-passwords';
+ const APPLICATION_PASSWORD_SECTION_URL = 'https://woocommerce.com/my-account/#application-passwords';
/**
- * Registers a commands for managing Woo.com extensions.
+ * Registers a commands for managing WooCommerce.com extensions.
*/
public static function register_commands() {
WP_CLI::add_command( 'wc com extension list', array( 'WC_CLI_COM_Command', 'list_extensions' ) );
@@ -112,16 +112,16 @@ class WC_CLI_COM_Command {
*/
public static function disconnect( array $args, array $assoc_args ) {
if ( ! WC_Helper::is_site_connected() ) {
- WP_CLI::error( __( 'Your store is not connected to Woo.com. Run `wp wc com connect` command.', 'woocommerce' ) );
+ WP_CLI::error( __( 'Your store is not connected to WooCommerce.com. Run `wp wc com connect` command.', 'woocommerce' ) );
}
- WP_CLI::confirm( __( 'Are you sure you want to disconnect your store from Woo.com?', 'woocommerce' ), $assoc_args );
+ WP_CLI::confirm( __( 'Are you sure you want to disconnect your store from WooCommerce.com?', 'woocommerce' ), $assoc_args );
WC_Helper::disconnect();
- WP_CLI::success( __( 'You have successfully disconnected your store from Woo.com', 'woocommerce' ) );
+ WP_CLI::success( __( 'You have successfully disconnected your store from WooCommerce.com', 'woocommerce' ) );
}
/**
- * Connects to Woo.com with application-password.
+ * Connects to WooCommerce.com with application-password.
*
* [--password]
* : If set, password won't be prompt.
@@ -161,13 +161,13 @@ class WC_CLI_COM_Command {
}
if ( empty( $password ) ) {
- // translators: %s is the URL for the application-password section in Woo.com.
+ // translators: %s is the URL for the application-password section in WooCommerce.com.
WP_CLI::log( sprintf( __( 'If you don\'t have an application password (not your account password), generate a password from %s', 'woocommerce' ), esc_url( self::APPLICATION_PASSWORD_SECTION_URL ) ) );
$password = self::ask( __( 'Connection password:', 'woocommerce' ) );
}
$password = sanitize_text_field( $password );
if ( empty( $password ) ) {
- // translators: %s is the URL for the application-password section in Woo.com.
+ // translators: %s is the URL for the application-password section in WooCommerce.com.
WP_CLI::error( sprintf( __( 'Invalid password. Generate a new one from %s.', 'woocommerce' ), esc_url( self::APPLICATION_PASSWORD_SECTION_URL ) ) );
}
diff --git a/wp/wp-content/plugins/woocommerce/includes/cli/class-wc-cli-com-extension-command.php b/wp/wp-content/plugins/woocommerce/includes/cli/class-wc-cli-com-extension-command.php
index 50c09634..ee57fbfa 100644
--- a/wp/wp-content/plugins/woocommerce/includes/cli/class-wc-cli-com-extension-command.php
+++ b/wp/wp-content/plugins/woocommerce/includes/cli/class-wc-cli-com-extension-command.php
@@ -21,7 +21,7 @@ if ( ! class_exists( 'Plugin_Command' ) ) {
*/
class WC_CLI_COM_Extension_Command extends Plugin_Command {
/**
- * Registers a commands for managing Woo.com extensions.
+ * Registers a commands for managing WooCommerce.com extensions.
*/
public static function register_commands() {
WP_CLI::add_command( 'wc com extension', 'WC_CLI_COM_Extension_Command' );
@@ -50,7 +50,7 @@ class WC_CLI_COM_Extension_Command extends Plugin_Command {
*
* ## EXAMPLES
*
- * # Install the latest version from Woo.com and activate
+ * # Install the latest version from woocommerce.com and activate
* $ wp wc com extension install automatewoo --activate
* Downloading install package from http://s3.amazonaws.com/bucketname/automatewoo.zip?AWSAccessKeyId=123&Expires=456&Signature=abcdef......
* Using cached file '/home/vagrant/.wp-cli/cache/plugin/automatewoo.zip'...
diff --git a/wp/wp-content/plugins/woocommerce/includes/data-stores/class-wc-coupon-data-store-cpt.php b/wp/wp-content/plugins/woocommerce/includes/data-stores/class-wc-coupon-data-store-cpt.php
index abe9022d..d36e547d 100644
--- a/wp/wp-content/plugins/woocommerce/includes/data-stores/class-wc-coupon-data-store-cpt.php
+++ b/wp/wp-content/plugins/woocommerce/includes/data-stores/class-wc-coupon-data-store-cpt.php
@@ -347,8 +347,6 @@ class WC_Coupon_Data_Store_CPT extends WC_Data_Store_WP implements WC_Coupon_Dat
} else {
add_post_meta( $coupon->get_id(), '_used_by', strtolower( $used_by ) );
}
-
- $this->refresh_coupon_data( $coupon );
}
/**
@@ -377,7 +375,6 @@ class WC_Coupon_Data_Store_CPT extends WC_Data_Store_WP implements WC_Coupon_Dat
if ( $meta_id ) {
delete_metadata_by_mid( 'post', $meta_id );
$coupon->set_used_by( (array) get_post_meta( $coupon->get_id(), '_used_by' ) );
- $this->refresh_coupon_data( $coupon );
}
}
@@ -408,8 +405,6 @@ class WC_Coupon_Data_Store_CPT extends WC_Data_Store_WP implements WC_Coupon_Dat
)
);
- $this->refresh_coupon_data( $coupon );
-
// Get the latest value direct from the DB, instead of possibly the WP meta cache.
return (int) $wpdb->get_var( $wpdb->prepare( "SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = 'usage_count' AND post_id = %d;", $id ) );
}
@@ -561,7 +556,7 @@ class WC_Coupon_Data_Store_CPT extends WC_Data_Store_WP implements WC_Coupon_Dat
$result = $wpdb->query( $insert_statement ); // WPCS: unprepared SQL ok.
if ( false !== $result ) {
// Clear meta cache.
- $this->refresh_coupon_data( $coupon );
+ wp_cache_delete( WC_Coupon::generate_meta_cache_key( $coupon->get_id(), 'coupons' ), 'coupons' );
break;
}
}
@@ -656,7 +651,7 @@ class WC_Coupon_Data_Store_CPT extends WC_Data_Store_WP implements WC_Coupon_Dat
$result = $wpdb->query( $insert_statement ); // WPCS: unprepared SQL ok.
if ( false !== $result ) {
// Clear meta cache.
- $this->refresh_coupon_data( $coupon );
+ wp_cache_delete( WC_Coupon::generate_meta_cache_key( $coupon->get_id(), 'coupons' ), 'coupons' );
break;
}
}
@@ -698,18 +693,6 @@ class WC_Coupon_Data_Store_CPT extends WC_Data_Store_WP implements WC_Coupon_Dat
); // WPCS: unprepared SQL ok.
}
- /**
- * This function clears coupon data from the WP cache after certain operations which, for performance reasons,
- * are done via SQL queries.
- *
- * @param \WC_Coupon $coupon The coupon object.
- * @return void
- */
- private function refresh_coupon_data( &$coupon ) {
- wp_cache_delete( $coupon->get_meta_cache_key(), 'coupons' );
- wp_cache_delete( $coupon->get_id(), 'post_meta' );
- }
-
/**
* Return a coupon code for a specific ID.
*
diff --git a/wp/wp-content/plugins/woocommerce/includes/emails/class-wc-email-failed-order.php b/wp/wp-content/plugins/woocommerce/includes/emails/class-wc-email-failed-order.php
index 9b5fafe3..0766d9ac 100644
--- a/wp/wp-content/plugins/woocommerce/includes/emails/class-wc-email-failed-order.php
+++ b/wp/wp-content/plugins/woocommerce/includes/emails/class-wc-email-failed-order.php
@@ -139,7 +139,7 @@ if ( ! class_exists( 'WC_Email_Failed_Order', false ) ) :
* @return string
*/
public function get_default_additional_content() {
- return __( 'Hopefully they’ll be back. Read more about troubleshooting failed payments .', 'woocommerce' );
+ return __( 'Hopefully they’ll be back. Read more about troubleshooting failed payments .', 'woocommerce' );
}
/**
diff --git a/wp/wp-content/plugins/woocommerce/includes/export/abstract-wc-csv-exporter.php b/wp/wp-content/plugins/woocommerce/includes/export/abstract-wc-csv-exporter.php
index daa74bb2..4a557d1e 100644
--- a/wp/wp-content/plugins/woocommerce/includes/export/abstract-wc-csv-exporter.php
+++ b/wp/wp-content/plugins/woocommerce/includes/export/abstract-wc-csv-exporter.php
@@ -360,7 +360,7 @@ abstract class WC_CSV_Exporter {
* Additionally, Excel exposes the ability to launch arbitrary commands through
* the DDE protocol.
*
- * @see https://owasp.org/www-community/attacks/CSV_Injection
+ * @see http://www.contextis.com/resources/blog/comma-separated-vulnerabilities/
* @see https://hackerone.com/reports/72785
*
* @since 3.1.0
@@ -368,9 +368,7 @@ abstract class WC_CSV_Exporter {
* @return string
*/
public function escape_data( $data ) {
- // 0x09: Tab (\t)
- // 0x0d: Carriage Return (\r)
- $active_content_triggers = array( '=', '+', '-', '@', chr( 0x09 ), chr( 0x0d ) );
+ $active_content_triggers = array( '=', '+', '-', '@' );
if ( in_array( mb_substr( $data, 0, 1 ), $active_content_triggers, true ) ) {
$data = "'" . $data;
diff --git a/wp/wp-content/plugins/woocommerce/includes/integrations/maxmind-geolocation/class-wc-integration-maxmind-geolocation.php b/wp/wp-content/plugins/woocommerce/includes/integrations/maxmind-geolocation/class-wc-integration-maxmind-geolocation.php
index 3190362e..69d4b212 100644
--- a/wp/wp-content/plugins/woocommerce/includes/integrations/maxmind-geolocation/class-wc-integration-maxmind-geolocation.php
+++ b/wp/wp-content/plugins/woocommerce/includes/integrations/maxmind-geolocation/class-wc-integration-maxmind-geolocation.php
@@ -106,7 +106,7 @@ class WC_Integration_MaxMind_Geolocation extends WC_Integration {
'The key that will be used when dealing with MaxMind Geolocation services. You can read how to generate one in MaxMind Geolocation Integration documentation .',
'woocommerce'
),
- 'https://woo.com/document/maxmind-geolocation-integration/'
+ 'https://docs.woocommerce.com/document/maxmind-geolocation-integration/'
),
'desc_tip' => false,
'default' => '',
diff --git a/wp/wp-content/plugins/woocommerce/includes/react-admin/feature-config.php b/wp/wp-content/plugins/woocommerce/includes/react-admin/feature-config.php
index 40a6e827..7c005208 100644
--- a/wp/wp-content/plugins/woocommerce/includes/react-admin/feature-config.php
+++ b/wp/wp-content/plugins/woocommerce/includes/react-admin/feature-config.php
@@ -24,7 +24,7 @@ if ( ! function_exists( 'wc_admin_get_feature_config' ) ) {
'onboarding' => true,
'onboarding-tasks' => true,
'product-variation-management' => true,
- 'product-virtual-downloadable' => true,
+ 'product-virtual-downloadable' => false,
'product-external-affiliate' => false,
'remote-inbox-notifications' => true,
'remote-free-extensions' => true,
diff --git a/wp/wp-content/plugins/woocommerce/includes/rest-api/Controllers/Version2/class-wc-rest-products-v2-controller.php b/wp/wp-content/plugins/woocommerce/includes/rest-api/Controllers/Version2/class-wc-rest-products-v2-controller.php
index 0410daa5..ffaf3f9d 100644
--- a/wp/wp-content/plugins/woocommerce/includes/rest-api/Controllers/Version2/class-wc-rest-products-v2-controller.php
+++ b/wp/wp-content/plugins/woocommerce/includes/rest-api/Controllers/Version2/class-wc-rest-products-v2-controller.php
@@ -566,14 +566,12 @@ class WC_REST_Products_V2_Controller extends WC_REST_CRUD_Controller {
$attributes[] = array(
'id' => wc_attribute_taxonomy_id_by_name( $name ),
'name' => $this->get_attribute_taxonomy_name( $name, $_product ),
- 'slug' => $name,
'option' => $option_term && ! is_wp_error( $option_term ) ? $option_term->name : $attribute,
);
} else {
$attributes[] = array(
'id' => 0,
'name' => $this->get_attribute_taxonomy_name( $name, $_product ),
- 'slug' => $name,
'option' => $attribute,
);
}
@@ -583,7 +581,6 @@ class WC_REST_Products_V2_Controller extends WC_REST_CRUD_Controller {
$attributes[] = array(
'id' => $attribute['is_taxonomy'] ? wc_attribute_taxonomy_id_by_name( $attribute['name'] ) : 0,
'name' => $this->get_attribute_taxonomy_name( $attribute['name'], $product ),
- 'slug' => $attribute['name'],
'position' => (int) $attribute['position'],
'visible' => (bool) $attribute['is_visible'],
'variation' => (bool) $attribute['is_variation'],
diff --git a/wp/wp-content/plugins/woocommerce/includes/rest-api/Controllers/Version2/class-wc-rest-system-status-v2-controller.php b/wp/wp-content/plugins/woocommerce/includes/rest-api/Controllers/Version2/class-wc-rest-system-status-v2-controller.php
index 22b7dd96..99c9bc3b 100644
--- a/wp/wp-content/plugins/woocommerce/includes/rest-api/Controllers/Version2/class-wc-rest-system-status-v2-controller.php
+++ b/wp/wp-content/plugins/woocommerce/includes/rest-api/Controllers/Version2/class-wc-rest-system-status-v2-controller.php
@@ -149,12 +149,6 @@ class WC_REST_System_Status_V2_Controller extends WC_REST_Controller {
'context' => array( 'view' ),
'readonly' => true,
),
- 'store_id' => array(
- 'description' => __( 'WooCommerce Store Identifier.', 'woocommerce' ),
- 'type' => 'string',
- 'context' => array( 'view' ),
- 'readonly' => true,
- ),
'version' => array(
'description' => __( 'WooCommerce version.', 'woocommerce' ),
'type' => 'string',
@@ -557,7 +551,7 @@ class WC_REST_System_Status_V2_Controller extends WC_REST_Controller {
),
),
'wccom_connected' => array(
- 'description' => __( 'Is store connected to Woo.com?', 'woocommerce' ),
+ 'description' => __( 'Is store connected to WooCommerce.com?', 'woocommerce' ),
'type' => 'string',
'context' => array( 'view' ),
'readonly' => true,
@@ -812,7 +806,7 @@ class WC_REST_System_Status_V2_Controller extends WC_REST_Controller {
if ( false === $get_response_code || is_wp_error( $get_response_code ) ) {
$response = wp_safe_remote_get(
- 'https://woo.com/wc-api/product-key-api?request=ping&network=' . ( is_multisite() ? '1' : '0' ),
+ 'https://woocommerce.com/wc-api/product-key-api?request=ping&network=' . ( is_multisite() ? '1' : '0' ),
array(
'user-agent' => 'WooCommerce/' . WC()->version . '; ' . get_bloginfo( 'url' ),
)
@@ -832,7 +826,6 @@ class WC_REST_System_Status_V2_Controller extends WC_REST_Controller {
return array(
'home_url' => get_option( 'home' ),
'site_url' => get_option( 'siteurl' ),
- 'store_id' => get_option( \WC_Install::STORE_ID_OPTION, null ),
'version' => WC()->version,
'log_directory' => WC_LOG_DIR,
'log_directory_writable' => (bool) @fopen( WC_LOG_DIR . 'test-log.log', 'a' ), // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged, WordPress.WP.AlternativeFunctions.file_system_read_fopen
diff --git a/wp/wp-content/plugins/woocommerce/includes/rest-api/Controllers/Version3/class-wc-rest-product-variations-controller.php b/wp/wp-content/plugins/woocommerce/includes/rest-api/Controllers/Version3/class-wc-rest-product-variations-controller.php
index 61aa444b..b759041e 100644
--- a/wp/wp-content/plugins/woocommerce/includes/rest-api/Controllers/Version3/class-wc-rest-product-variations-controller.php
+++ b/wp/wp-content/plugins/woocommerce/includes/rest-api/Controllers/Version3/class-wc-rest-product-variations-controller.php
@@ -857,26 +857,16 @@ class WC_REST_Product_Variations_Controller extends WC_REST_Product_Variations_V
// Filter by attributes.
if ( ! empty( $request['attributes'] ) && is_array( $request['attributes'] ) ) {
foreach ( $request['attributes'] as $attribute ) {
- if ( isset( $attribute['attribute'] ) ) {
- if ( isset( $attribute['term'] ) ) {
- $args['meta_query'] = $this->add_meta_query( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
- $args,
- array(
- 'key' => 'attribute_' . $attribute['attribute'],
- 'value' => $attribute['term'],
- )
- );
- } elseif ( ! empty( $attribute['terms'] ) && is_array( $attribute['terms'] ) ) {
- $args['meta_query'] = $this->add_meta_query( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
- $args,
- array(
- 'key' => 'attribute_' . $attribute['attribute'],
- 'compare' => 'IN',
- 'value' => $attribute['terms'],
- ),
- );
- }
+ if ( ! isset( $attribute['attribute'] ) || ! isset( $attribute['term'] ) ) {
+ continue;
}
+ $args['meta_query'] = $this->add_meta_query( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
+ $args,
+ array(
+ 'key' => 'attribute_' . $attribute['attribute'],
+ 'value' => $attribute['term'],
+ )
+ );
}
}
@@ -1033,10 +1023,6 @@ class WC_REST_Product_Variations_Controller extends WC_REST_Product_Variations_V
'type' => 'string',
'description' => __( 'Attribute term.', 'woocommerce' ),
),
- 'terms' => array(
- 'type' => 'array',
- 'description' => __( 'Attribute terms.', 'woocommerce' ),
- ),
),
),
);
@@ -1091,7 +1077,7 @@ class WC_REST_Product_Variations_Controller extends WC_REST_Product_Variations_V
return new WP_Error( 'woocommerce_rest_product_invalid_id', __( 'Invalid product ID.', 'woocommerce' ), array( 'status' => 404 ) );
}
- wc_maybe_define_constant( 'WC_MAX_LINKED_VARIATIONS', 99 );
+ wc_maybe_define_constant( 'WC_MAX_LINKED_VARIATIONS', 50 );
wc_set_time_limit( 0 );
$response = array();
diff --git a/wp/wp-content/plugins/woocommerce/includes/shipping/flat-rate/class-wc-shipping-flat-rate.php b/wp/wp-content/plugins/woocommerce/includes/shipping/flat-rate/class-wc-shipping-flat-rate.php
index 39750335..067ed132 100644
--- a/wp/wp-content/plugins/woocommerce/includes/shipping/flat-rate/class-wc-shipping-flat-rate.php
+++ b/wp/wp-content/plugins/woocommerce/includes/shipping/flat-rate/class-wc-shipping-flat-rate.php
@@ -281,7 +281,7 @@ class WC_Shipping_Flat_Rate extends WC_Shipping_Method {
public function sanitize_cost( $value ) {
$value = is_null( $value ) ? '' : $value;
$value = wp_kses_post( trim( wp_unslash( $value ) ) );
- $value = str_replace( array( get_woocommerce_currency_symbol(), html_entity_decode( get_woocommerce_currency_symbol() ), wc_get_price_thousand_separator() ), '', $value );
+ $value = str_replace( array( get_woocommerce_currency_symbol(), html_entity_decode( get_woocommerce_currency_symbol() ) ), '', $value );
// Thrown an error on the front end if the evaluate_cost will fail.
$dummy_cost = $this->evaluate_cost(
$value,
diff --git a/wp/wp-content/plugins/woocommerce/includes/shipping/flat-rate/includes/settings-flat-rate.php b/wp/wp-content/plugins/woocommerce/includes/shipping/flat-rate/includes/settings-flat-rate.php
index 0827b8e3..b4609d6b 100644
--- a/wp/wp-content/plugins/woocommerce/includes/shipping/flat-rate/includes/settings-flat-rate.php
+++ b/wp/wp-content/plugins/woocommerce/includes/shipping/flat-rate/includes/settings-flat-rate.php
@@ -8,15 +8,13 @@
defined( 'ABSPATH' ) || exit;
$cost_desc = __( 'Enter a cost (excl. tax) or sum, e.g. 10.00 * [qty].', 'woocommerce' ) . ' ' . __( 'Use [qty] for the number of items, [cost] for the total cost of items, and [fee percent="10" min_fee="20" max_fee=""] for percentage based fees.', 'woocommerce' );
-$cost_link = sprintf( '%s %s . ', __( 'Charge a flat rate per item, or enter a cost formula to charge a percentage based cost or a minimum fee. Learn more about', 'woocommerce' ), __( 'advanced costs', 'woocommerce' ) );
$settings = array(
'title' => array(
- 'title' => __( 'Name', 'woocommerce' ),
+ 'title' => __( 'Method title', 'woocommerce' ),
'type' => 'text',
- 'description' => __( 'Your customers will see the name of this shipping method during checkout.', 'woocommerce' ),
+ 'description' => __( 'This controls the title which the user sees during checkout.', 'woocommerce' ),
'default' => __( 'Flat rate', 'woocommerce' ),
- 'placeholder' => __( 'e.g. Standard national', 'woocommerce' ),
'desc_tip' => true,
),
'tax_status' => array(
@@ -32,7 +30,6 @@ $settings = array(
'cost' => array(
'title' => __( 'Cost', 'woocommerce' ),
'type' => 'text',
- 'class' => 'wc-shipping-modal-price',
'placeholder' => '',
'description' => $cost_desc,
'default' => '0',
@@ -48,8 +45,8 @@ if ( ! empty( $shipping_classes ) ) {
'title' => __( 'Shipping class costs', 'woocommerce' ),
'type' => 'title',
'default' => '',
- /* translators: %s: URL for link */
- 'description' => sprintf( __( 'These costs can optionally be added based on the product shipping class . Learn more about setting shipping class costs .', 'woocommerce' ), admin_url( 'admin.php?page=wc-settings&tab=shipping§ion=classes' ) ),
+ /* translators: %s: URL for link. */
+ 'description' => sprintf( __( 'These costs can optionally be added based on the product shipping class .', 'woocommerce' ), admin_url( 'admin.php?page=wc-settings&tab=shipping§ion=classes' ) ),
);
foreach ( $shipping_classes as $shipping_class ) {
if ( ! isset( $shipping_class->term_id ) ) {
@@ -59,7 +56,6 @@ if ( ! empty( $shipping_classes ) ) {
/* translators: %s: shipping class name */
'title' => sprintf( __( '"%s" shipping class cost', 'woocommerce' ), esc_html( $shipping_class->name ) ),
'type' => 'text',
- 'class' => 'wc-shipping-modal-price',
'placeholder' => __( 'N/A', 'woocommerce' ),
'description' => $cost_desc,
'default' => $this->get_option( 'class_cost_' . $shipping_class->slug ), // Before 2.5.0, we used slug here which caused issues with long setting names.
@@ -71,7 +67,6 @@ if ( ! empty( $shipping_classes ) ) {
$settings['no_class_cost'] = array(
'title' => __( 'No shipping class cost', 'woocommerce' ),
'type' => 'text',
- 'class' => 'wc-shipping-modal-price',
'placeholder' => __( 'N/A', 'woocommerce' ),
'description' => $cost_desc,
'default' => '',
@@ -80,15 +75,14 @@ if ( ! empty( $shipping_classes ) ) {
);
$settings['type'] = array(
- 'title' => __( 'Calculation type', 'woocommerce' ),
- 'type' => 'select',
- 'class' => 'wc-enhanced-select',
- 'default' => 'class',
- 'options' => array(
+ 'title' => __( 'Calculation type', 'woocommerce' ),
+ 'type' => 'select',
+ 'class' => 'wc-enhanced-select',
+ 'default' => 'class',
+ 'options' => array(
'class' => __( 'Per class: Charge shipping for each shipping class individually', 'woocommerce' ),
'order' => __( 'Per order: Charge shipping for the most expensive shipping class', 'woocommerce' ),
),
- 'description' => $cost_link,
);
}
diff --git a/wp/wp-content/plugins/woocommerce/includes/shipping/free-shipping/class-wc-shipping-free-shipping.php b/wp/wp-content/plugins/woocommerce/includes/shipping/free-shipping/class-wc-shipping-free-shipping.php
index 250f5057..90bfd46b 100644
--- a/wp/wp-content/plugins/woocommerce/includes/shipping/free-shipping/class-wc-shipping-free-shipping.php
+++ b/wp/wp-content/plugins/woocommerce/includes/shipping/free-shipping/class-wc-shipping-free-shipping.php
@@ -83,61 +83,38 @@ class WC_Shipping_Free_Shipping extends WC_Shipping_Method {
add_action( 'admin_footer', array( 'WC_Shipping_Free_Shipping', 'enqueue_admin_js' ), 10 ); // Priority needs to be higher than wc_print_js (25).
}
- /**
- * Sanitize the cost field.
- *
- * @since 8.3.0
- * @param string $value Unsanitized value.
- * @throws Exception Last error triggered.
- * @return string
- */
- public function sanitize_cost( $value ) {
- $value = is_null( $value ) ? '' : $value;
- $value = wp_kses_post( trim( wp_unslash( $value ) ) );
- $value = str_replace( array( get_woocommerce_currency_symbol(), html_entity_decode( get_woocommerce_currency_symbol() ), wc_get_price_thousand_separator() ), '', $value );
-
- if ( ! is_numeric( $value ) ) {
- throw new Exception( __( 'Please enter a valid number', 'woocommerce' ) );
- }
-
- return $value;
- }
-
/**
* Init form fields.
*/
public function init_form_fields() {
$this->instance_form_fields = array(
'title' => array(
- 'title' => __( 'Name', 'woocommerce' ),
+ 'title' => __( 'Title', 'woocommerce' ),
'type' => 'text',
- 'description' => __( 'Your customers will see the name of this shipping method during checkout.', 'woocommerce' ),
+ 'description' => __( 'This controls the title which the user sees during checkout.', 'woocommerce' ),
'default' => $this->method_title,
- 'placeholder' => __( 'e.g. Free shipping', 'woocommerce' ),
'desc_tip' => true,
),
'requires' => array(
- 'title' => __( 'Free shipping requires', 'woocommerce' ),
+ 'title' => __( 'Free shipping requires...', 'woocommerce' ),
'type' => 'select',
'class' => 'wc-enhanced-select',
'default' => '',
'options' => array(
- '' => __( 'No requirement', 'woocommerce' ),
+ '' => __( 'N/A', 'woocommerce' ),
'coupon' => __( 'A valid free shipping coupon', 'woocommerce' ),
'min_amount' => __( 'A minimum order amount', 'woocommerce' ),
- 'either' => __( 'A minimum order amount OR coupon', 'woocommerce' ),
- 'both' => __( 'A minimum order amount AND coupon', 'woocommerce' ),
+ 'either' => __( 'A minimum order amount OR a coupon', 'woocommerce' ),
+ 'both' => __( 'A minimum order amount AND a coupon', 'woocommerce' ),
),
),
'min_amount' => array(
- 'title' => __( 'Minimum order amount', 'woocommerce' ),
- 'type' => 'text',
- 'class' => 'wc-shipping-modal-price',
- 'placeholder' => wc_format_localized_price( 0 ),
- 'description' => __( 'Customers will need to spend this amount to get free shipping.', 'woocommerce' ),
- 'default' => '0',
- 'desc_tip' => true,
- 'sanitize_callback' => array( $this, 'sanitize_cost' ),
+ 'title' => __( 'Minimum order amount', 'woocommerce' ),
+ 'type' => 'price',
+ 'placeholder' => wc_format_localized_price( 0 ),
+ 'description' => __( 'Users will need to spend this amount to get free shipping (if enabled above).', 'woocommerce' ),
+ 'default' => '0',
+ 'desc_tip' => true,
),
'ignore_discounts' => array(
'title' => __( 'Coupons discounts', 'woocommerce' ),
diff --git a/wp/wp-content/plugins/woocommerce/includes/shipping/local-pickup/class-wc-shipping-local-pickup.php b/wp/wp-content/plugins/woocommerce/includes/shipping/local-pickup/class-wc-shipping-local-pickup.php
index c39a8800..66150f4e 100644
--- a/wp/wp-content/plugins/woocommerce/includes/shipping/local-pickup/class-wc-shipping-local-pickup.php
+++ b/wp/wp-content/plugins/woocommerce/includes/shipping/local-pickup/class-wc-shipping-local-pickup.php
@@ -79,37 +79,16 @@ class WC_Shipping_Local_Pickup extends WC_Shipping_Method {
);
}
- /**
- * Sanitize the cost field.
- *
- * @since 8.3.0
- * @param string $value Unsanitized value.
- * @throws Exception Last error triggered.
- * @return string
- */
- public function sanitize_cost( $value ) {
- $value = is_null( $value ) ? '' : $value;
- $value = wp_kses_post( trim( wp_unslash( $value ) ) );
- $value = str_replace( array( get_woocommerce_currency_symbol(), html_entity_decode( get_woocommerce_currency_symbol() ), wc_get_price_thousand_separator() ), '', $value );
-
- if ( $value && ! is_numeric( $value ) ) {
- throw new Exception( __( 'Please enter a valid number', 'woocommerce' ) );
- }
-
- return $value;
- }
-
/**
* Init form fields.
*/
public function init_form_fields() {
$this->instance_form_fields = array(
'title' => array(
- 'title' => __( 'Name', 'woocommerce' ),
+ 'title' => __( 'Title', 'woocommerce' ),
'type' => 'text',
- 'description' => __( 'Your customers will see the name of this shipping method during checkout.', 'woocommerce' ),
+ 'description' => __( 'This controls the title which the user sees during checkout.', 'woocommerce' ),
'default' => __( 'Local pickup', 'woocommerce' ),
- 'placeholder' => __( 'e.g. Local pickup', 'woocommerce' ),
'desc_tip' => true,
),
'tax_status' => array(
@@ -123,14 +102,12 @@ class WC_Shipping_Local_Pickup extends WC_Shipping_Method {
),
),
'cost' => array(
- 'title' => __( 'Cost', 'woocommerce' ),
- 'type' => 'text',
- 'class' => 'wc-shipping-modal-price',
- 'placeholder' => wc_format_localized_price( 0 ),
- 'description' => __( 'Optional cost for local pickup.', 'woocommerce' ),
- 'default' => '',
- 'desc_tip' => true,
- 'sanitize_callback' => array( $this, 'sanitize_cost' ),
+ 'title' => __( 'Cost', 'woocommerce' ),
+ 'type' => 'text',
+ 'placeholder' => '0',
+ 'description' => __( 'Optional cost for local pickup.', 'woocommerce' ),
+ 'default' => '',
+ 'desc_tip' => true,
),
);
}
diff --git a/wp/wp-content/plugins/woocommerce/includes/shortcodes/class-wc-shortcode-checkout.php b/wp/wp-content/plugins/woocommerce/includes/shortcodes/class-wc-shortcode-checkout.php
index 4dbb0668..2d506692 100644
--- a/wp/wp-content/plugins/woocommerce/includes/shortcodes/class-wc-shortcode-checkout.php
+++ b/wp/wp-content/plugins/woocommerce/includes/shortcodes/class-wc-shortcode-checkout.php
@@ -297,19 +297,10 @@ class WC_Shortcode_Checkout {
return;
}
- /**
- * Indicates if known (non-guest) shoppers need to be logged in before we let
- * them access the order received page.
- *
- * @param bool $verify_known_shoppers If verification is required.
- *
- * @since 8.4.0
- */
- $verify_known_shoppers = apply_filters( 'woocommerce_order_received_verify_known_shoppers', true );
- $order_customer_id = $order->get_customer_id();
+ $order_customer_id = $order->get_customer_id();
// For non-guest orders, require the user to be logged in before showing this page.
- if ( $verify_known_shoppers && $order_customer_id && get_current_user_id() !== $order_customer_id ) {
+ if ( $order_customer_id && get_current_user_id() !== $order_customer_id ) {
wc_get_template( 'checkout/order-received.php', array( 'order' => false ) );
wc_print_notice( esc_html__( 'Please log in to your account to view this order.', 'woocommerce' ), 'notice' );
woocommerce_login_form( array( 'redirect' => $order->get_checkout_order_received_url() ) );
diff --git a/wp/wp-content/plugins/woocommerce/includes/tracks/class-wc-tracks.php b/wp/wp-content/plugins/woocommerce/includes/tracks/class-wc-tracks.php
index e70ff15c..6dc3567a 100644
--- a/wp/wp-content/plugins/woocommerce/includes/tracks/class-wc-tracks.php
+++ b/wp/wp-content/plugins/woocommerce/includes/tracks/class-wc-tracks.php
@@ -38,7 +38,6 @@ class WC_Tracks {
'url' => home_url(),
'blog_lang' => get_user_locale( $user_id ),
'blog_id' => class_exists( 'Jetpack_Options' ) ? Jetpack_Options::get_option( 'id' ) : null,
- 'store_id' => get_option( \WC_Install::STORE_ID_OPTION, null ),
'products_count' => self::get_products_count(),
'wc_version' => WC()->version,
);
diff --git a/wp/wp-content/plugins/woocommerce/includes/wc-notice-functions.php b/wp/wp-content/plugins/woocommerce/includes/wc-notice-functions.php
index f59eb68a..5ee336f0 100644
--- a/wp/wp-content/plugins/woocommerce/includes/wc-notice-functions.php
+++ b/wp/wp-content/plugins/woocommerce/includes/wc-notice-functions.php
@@ -129,7 +129,7 @@ function wc_clear_notices() {
*
* @since 2.1
* @param bool $return true to return rather than echo. @since 3.5.0.
- * @return string|void
+ * @return string|null
*/
function wc_print_notices( $return = false ) {
if ( ! did_action( 'woocommerce_init' ) ) {
@@ -137,14 +137,7 @@ function wc_print_notices( $return = false ) {
return;
}
- $session = WC()->session;
-
- // If the session handler has not initialized, there will be no notices for us to read.
- if ( null === $session ) {
- return;
- }
-
- $all_notices = $session->get( 'wc_notices', array() );
+ $all_notices = WC()->session->get( 'wc_notices', array() );
$notice_types = apply_filters( 'woocommerce_notice_types', array( 'error', 'success', 'notice' ) );
// Buffer output.
diff --git a/wp/wp-content/plugins/woocommerce/includes/wc-product-functions.php b/wp/wp-content/plugins/woocommerce/includes/wc-product-functions.php
index 69ce0e4c..aa482598 100644
--- a/wp/wp-content/plugins/woocommerce/includes/wc-product-functions.php
+++ b/wp/wp-content/plugins/woocommerce/includes/wc-product-functions.php
@@ -685,7 +685,7 @@ function wc_get_product_id_by_sku( $sku ) {
*/
function wc_get_product_variation_attributes( $variation_id ) {
// Build variation data from meta.
- $all_meta = is_array( get_post_meta( $variation_id ) ) ? get_post_meta( $variation_id ) : array();
+ $all_meta = get_post_meta( $variation_id );
$parent_id = wp_get_post_parent_id( $variation_id );
$parent_attributes = array_filter( (array) get_post_meta( $parent_id, '_product_attributes', true ) );
$found_parent_attributes = array();
diff --git a/wp/wp-content/plugins/woocommerce/includes/wc-template-functions.php b/wp/wp-content/plugins/woocommerce/includes/wc-template-functions.php
index a4cbf700..f42087b2 100644
--- a/wp/wp-content/plugins/woocommerce/includes/wc-template-functions.php
+++ b/wp/wp-content/plugins/woocommerce/includes/wc-template-functions.php
@@ -28,6 +28,7 @@ function wc_template_redirect() {
// When on the checkout with an empty cart, redirect to cart page.
if ( is_page( wc_get_page_id( 'checkout' ) ) && wc_get_page_id( 'checkout' ) !== wc_get_page_id( 'cart' ) && WC()->cart->is_empty() && empty( $wp->query_vars['order-pay'] ) && ! isset( $wp->query_vars['order-received'] ) && ! is_customize_preview() && apply_filters( 'woocommerce_checkout_redirect_empty_cart', true ) ) {
+ wc_add_notice( __( 'Checkout is not available whilst your cart is empty.', 'woocommerce' ), 'notice' );
wp_safe_redirect( wc_get_cart_url() );
exit;
@@ -338,12 +339,6 @@ function wc_body_class( $classes ) {
}
}
- if ( wc_current_theme_is_fse_theme() ) {
-
- $classes[] = 'woocommerce-uses-block-theme';
-
- }
-
if ( wc_block_theme_has_styles_for_element( 'button' ) ) {
$classes[] = 'woocommerce-block-theme-has-button-styles';
diff --git a/wp/wp-content/plugins/woocommerce/includes/wccom-site/class-wc-wccom-site-installer-requirements-check.php b/wp/wp-content/plugins/woocommerce/includes/wccom-site/class-wc-wccom-site-installer-requirements-check.php
index 2291ff3e..bfb300d8 100644
--- a/wp/wp-content/plugins/woocommerce/includes/wccom-site/class-wc-wccom-site-installer-requirements-check.php
+++ b/wp/wp-content/plugins/woocommerce/includes/wccom-site/class-wc-wccom-site-installer-requirements-check.php
@@ -1,6 +1,6 @@
queue()->cancel_all( 'woocommerce_wccom_install_products', $args );
@@ -282,7 +282,7 @@ class WC_WCCOM_Site_Installer {
'product_type' => '',
);
- // Get product info from Woo.com.
+ // Get product info from woocommerce.com.
$request = WC_Helper_API::get(
add_query_arg(
array( 'product_id' => absint( $product_id ) ),
@@ -294,7 +294,7 @@ class WC_WCCOM_Site_Installer {
);
if ( 200 !== wp_remote_retrieve_response_code( $request ) ) {
- return new WP_Error( 'product_info_failed', __( 'Failed to retrieve product info from Woo.com', 'woocommerce' ) );
+ return new WP_Error( 'product_info_failed', __( 'Failed to retrieve product info from woocommerce.com', 'woocommerce' ) );
}
$result = json_decode( wp_remote_retrieve_body( $request ), true );
diff --git a/wp/wp-content/plugins/woocommerce/includes/wccom-site/class-wc-wccom-site.php b/wp/wp-content/plugins/woocommerce/includes/wccom-site/class-wc-wccom-site.php
index c8bdbfbf..d2540a86 100644
--- a/wp/wp-content/plugins/woocommerce/includes/wccom-site/class-wc-wccom-site.php
+++ b/wp/wp-content/plugins/woocommerce/includes/wccom-site/class-wc-wccom-site.php
@@ -1,6 +1,6 @@
state->get_product_id();
- // Get product info from Woo.com.
+ // Get product info from woocommerce.com.
$request = WC_Helper_API::get(
add_query_arg(
array( 'product_id' => $product_id ),
diff --git a/wp/wp-content/plugins/woocommerce/includes/wccom-site/rest-api/class-wc-rest-wccom-site-installer-error-codes.php b/wp/wp-content/plugins/woocommerce/includes/wccom-site/rest-api/class-wc-rest-wccom-site-installer-error-codes.php
index fc544144..ee03b9cf 100644
--- a/wp/wp-content/plugins/woocommerce/includes/wccom-site/rest-api/class-wc-rest-wccom-site-installer-error-codes.php
+++ b/wp/wp-content/plugins/woocommerce/includes/wccom-site/rest-api/class-wc-rest-wccom-site-installer-error-codes.php
@@ -47,7 +47,7 @@ class WC_REST_WCCOM_Site_Installer_Error_Codes {
self::NOT_AUTHENTICATED => 'Authentication required',
self::NO_ACCESS_TOKEN => 'No access token provided',
self::NO_SIGNATURE => 'No signature provided',
- self::SITE_NOT_CONNECTED => 'Site not connected to Woo.com',
+ self::SITE_NOT_CONNECTED => 'Site not connected to WooCommerce.com',
self::INVALID_TOKEN => 'Invalid access token provided',
self::REQUEST_VERIFICATION_FAILED => 'Request verification by signature failed',
self::USER_NOT_FOUND => 'Token owning user not found',
@@ -60,8 +60,8 @@ class WC_REST_WCCOM_Site_Installer_Error_Codes {
self::INSTALLATION_ALREADY_RUNNING => 'The installation of the plugin is already running',
self::INSTALLATION_FAILED => 'The installation of the plugin failed',
self::FILESYSTEM_REQUIREMENTS_NOT_MET => 'The filesystem requirements are not met',
- self::FAILED_GETTING_PRODUCT_INFO => 'Failed to retrieve product info from Woo.com',
- self::INVALID_PRODUCT_INFO_RESPONSE => 'Invalid product info response from Woo.com',
+ self::FAILED_GETTING_PRODUCT_INFO => 'Failed to retrieve product info from woocommerce.com',
+ self::INVALID_PRODUCT_INFO_RESPONSE => 'Invalid product info response from woocommerce.com',
self::WCCOM_PRODUCT_MISSING_SUBSCRIPTION => 'Product subscription is missing',
self::WCCOM_PRODUCT_MISSING_PACKAGE => 'Could not find product package',
self::MISSING_DOWNLOAD_PATH => 'Download path is missing',
diff --git a/wp/wp-content/plugins/woocommerce/includes/wccom-site/rest-api/endpoints/class-wc-rest-wccom-site-installer-controller-v2.php b/wp/wp-content/plugins/woocommerce/includes/wccom-site/rest-api/endpoints/class-wc-rest-wccom-site-installer-controller-v2.php
index 62c1a984..4296db03 100644
--- a/wp/wp-content/plugins/woocommerce/includes/wccom-site/rest-api/endpoints/class-wc-rest-wccom-site-installer-controller-v2.php
+++ b/wp/wp-content/plugins/woocommerce/includes/wccom-site/rest-api/endpoints/class-wc-rest-wccom-site-installer-controller-v2.php
@@ -124,7 +124,7 @@ class WC_REST_WCCOM_Site_Installer_Controller_V2 extends WC_REST_Controller {
}
/**
- * Install Woo.com products.
+ * Install WooCommerce.com products.
*
* @since 7.7.0
* @param WP_REST_Request $request Full details about the request.
diff --git a/wp/wp-content/plugins/woocommerce/includes/wccom-site/rest-api/endpoints/class-wc-rest-wccom-site-installer-controller.php b/wp/wp-content/plugins/woocommerce/includes/wccom-site/rest-api/endpoints/class-wc-rest-wccom-site-installer-controller.php
index 4905f189..4caab63d 100644
--- a/wp/wp-content/plugins/woocommerce/includes/wccom-site/rest-api/endpoints/class-wc-rest-wccom-site-installer-controller.php
+++ b/wp/wp-content/plugins/woocommerce/includes/wccom-site/rest-api/endpoints/class-wc-rest-wccom-site-installer-controller.php
@@ -125,7 +125,7 @@ class WC_REST_WCCOM_Site_Installer_Controller extends WC_REST_Controller {
}
/**
- * Install Woo.com products.
+ * Install WooCommerce.com products.
*
* @since 3.7.0
* @param WP_REST_Request $request Full details about the request.
diff --git a/wp/wp-content/plugins/woocommerce/includes/wccom-site/rest-api/endpoints/class-wc-rest-wccom-site-ssr-controller.php b/wp/wp-content/plugins/woocommerce/includes/wccom-site/rest-api/endpoints/class-wc-rest-wccom-site-ssr-controller.php
index 38ef0bee..d3c6765f 100644
--- a/wp/wp-content/plugins/woocommerce/includes/wccom-site/rest-api/endpoints/class-wc-rest-wccom-site-ssr-controller.php
+++ b/wp/wp-content/plugins/woocommerce/includes/wccom-site/rest-api/endpoints/class-wc-rest-wccom-site-ssr-controller.php
@@ -106,7 +106,7 @@ class WC_REST_WCCOM_Site_SSR_Controller extends WC_REST_Controller {
$data = $ssr_controller->get_items( $request );
$data = $data->get_data();
- // Submit SSR data to Woo.com.
+ // Submit SSR data to WooCommerce.com.
$request = WC_Helper_API::post(
'ssr',
array(
diff --git a/wp/wp-content/plugins/woocommerce/packages/action-scheduler/action-scheduler.php b/wp/wp-content/plugins/woocommerce/packages/action-scheduler/action-scheduler.php
index 7f2c260e..9aa59342 100644
--- a/wp/wp-content/plugins/woocommerce/packages/action-scheduler/action-scheduler.php
+++ b/wp/wp-content/plugins/woocommerce/packages/action-scheduler/action-scheduler.php
@@ -5,9 +5,9 @@
* Description: A robust scheduling library for use in WordPress plugins.
* Author: Automattic
* Author URI: https://automattic.com/
- * Version: 3.7.0
+ * Version: 3.6.4
* License: GPLv3
- * Tested up to: 6.4
+ * Tested up to: 6.3
* Requires at least: 5.2
* Requires PHP: 5.6
*
@@ -29,27 +29,27 @@
* @package ActionScheduler
*/
-if ( ! function_exists( 'action_scheduler_register_3_dot_7_dot_0' ) && function_exists( 'add_action' ) ) { // WRCS: DEFINED_VERSION.
+if ( ! function_exists( 'action_scheduler_register_3_dot_6_dot_4' ) && function_exists( 'add_action' ) ) { // WRCS: DEFINED_VERSION.
if ( ! class_exists( 'ActionScheduler_Versions', false ) ) {
require_once __DIR__ . '/classes/ActionScheduler_Versions.php';
add_action( 'plugins_loaded', array( 'ActionScheduler_Versions', 'initialize_latest_version' ), 1, 0 );
}
- add_action( 'plugins_loaded', 'action_scheduler_register_3_dot_7_dot_0', 0, 0 ); // WRCS: DEFINED_VERSION.
+ add_action( 'plugins_loaded', 'action_scheduler_register_3_dot_6_dot_4', 0, 0 ); // WRCS: DEFINED_VERSION.
/**
* Registers this version of Action Scheduler.
*/
- function action_scheduler_register_3_dot_7_dot_0() { // WRCS: DEFINED_VERSION.
+ function action_scheduler_register_3_dot_6_dot_4() { // WRCS: DEFINED_VERSION.
$versions = ActionScheduler_Versions::instance();
- $versions->register( '3.7.0', 'action_scheduler_initialize_3_dot_7_dot_0' ); // WRCS: DEFINED_VERSION.
+ $versions->register( '3.6.4', 'action_scheduler_initialize_3_dot_6_dot_4' ); // WRCS: DEFINED_VERSION.
}
/**
* Initializes this version of Action Scheduler.
*/
- function action_scheduler_initialize_3_dot_7_dot_0() { // WRCS: DEFINED_VERSION.
+ function action_scheduler_initialize_3_dot_6_dot_4() { // WRCS: DEFINED_VERSION.
// A final safety check is required even here, because historic versions of Action Scheduler
// followed a different pattern (in some unusual cases, we could reach this point and the
// ActionScheduler class is already defined—so we need to guard against that).
@@ -61,7 +61,7 @@ if ( ! function_exists( 'action_scheduler_register_3_dot_7_dot_0' ) && function_
// Support usage in themes - load this version if no plugin has loaded a version yet.
if ( did_action( 'plugins_loaded' ) && ! doing_action( 'plugins_loaded' ) && ! class_exists( 'ActionScheduler', false ) ) {
- action_scheduler_initialize_3_dot_7_dot_0(); // WRCS: DEFINED_VERSION.
+ action_scheduler_initialize_3_dot_6_dot_4(); // WRCS: DEFINED_VERSION.
do_action( 'action_scheduler_pre_theme_init' );
ActionScheduler_Versions::initialize_latest_version();
}
diff --git a/wp/wp-content/plugins/woocommerce/packages/action-scheduler/changelog.txt b/wp/wp-content/plugins/woocommerce/packages/action-scheduler/changelog.txt
index e595b912..1702c615 100644
--- a/wp/wp-content/plugins/woocommerce/packages/action-scheduler/changelog.txt
+++ b/wp/wp-content/plugins/woocommerce/packages/action-scheduler/changelog.txt
@@ -1,17 +1,11 @@
*** Changelog ***
-= 3.7.0 - 2023-11-20 =
-* Add extended indexes for hook_status_scheduled_date_gmt and status_sheduled_date_gmt.
-* Catch and log exceptions thrown when actions can't be created, e.g. under a corrupt database schema.
-* Release/3.6.4.
-* Tweak - WP 6.4 compatibility.
-* Update unit tests for upcoming dependency version policy.
-* make sure hook action_scheduler_failed_execution can access original exception object.
-* mention dependency version policy in usage.md.
-
= 3.6.4 - 2023-10-11 =
-* Performance improvements when bulk cancelling actions.
-* Dev-related fixes.
+* 3.6.3 release.
+* Fix option lock test.
+* Fix: Use orderby => 'none' when bulk cancelling actions.
+* Tweak - WP 6.3 compatibility.
+* Update PR unit tests matrix.
= 3.6.3 - 2023-09-13 =
* Use `_doing_it_wrong` in initialization check.
diff --git a/wp/wp-content/plugins/woocommerce/packages/action-scheduler/classes/ActionScheduler_ActionFactory.php b/wp/wp-content/plugins/woocommerce/packages/action-scheduler/classes/ActionScheduler_ActionFactory.php
index 1d67207c..240d68a7 100644
--- a/wp/wp-content/plugins/woocommerce/packages/action-scheduler/classes/ActionScheduler_ActionFactory.php
+++ b/wp/wp-content/plugins/woocommerce/packages/action-scheduler/classes/ActionScheduler_ActionFactory.php
@@ -13,7 +13,6 @@ class ActionScheduler_ActionFactory {
* @param array $args Args to pass to callbacks when the hook is triggered.
* @param ActionScheduler_Schedule $schedule The action's schedule.
* @param string $group A group to put the action in.
- * phpcs:ignore Squiz.Commenting.FunctionComment.ExtraParamComment
* @param int $priority The action priority.
*
* @return ActionScheduler_Action An instance of the stored action.
@@ -247,6 +246,7 @@ class ActionScheduler_ActionFactory {
* async_unique(), single() or single_unique(), etc.
*
* @internal Not intended for public use, should not be overriden by subclasses.
+ * @throws Exception May be thrown if invalid options are passed.
*
* @param array $options {
* Describes the action we wish to schedule.
@@ -263,7 +263,7 @@ class ActionScheduler_ActionFactory {
* @type int $priority Lower values means higher priority. Should be in the range 0-255.
* }
*
- * @return int The action ID. Zero if there was an error scheduling the action.
+ * @return int
*/
public function create( array $options = array() ) {
$defaults = array(
@@ -307,27 +307,12 @@ class ActionScheduler_ActionFactory {
break;
default:
- error_log( "Unknown action type '{$options['type']}' specified when trying to create an action for '{$options['hook']}'." );
- return 0;
+ throw new Exception( "Unknown action type '{$options['type']}' specified when trying to create an action for '{$options['hook']}'." );
}
$action = new ActionScheduler_Action( $options['hook'], $options['arguments'], $schedule, $options['group'] );
$action->set_priority( $options['priority'] );
-
- $action_id = 0;
- try {
- $action_id = $options['unique'] ? $this->store_unique_action( $action ) : $this->store( $action );
- } catch ( Exception $e ) {
- error_log(
- sprintf(
- /* translators: %1$s is the name of the hook to be enqueued, %2$s is the exception message. */
- __( 'Caught exception while enqueuing action "%1$s": %2$s', 'woocommerce' ),
- $options['hook'],
- $e->getMessage()
- )
- );
- }
- return $action_id;
+ return $options['unique'] ? $this->store_unique_action( $action ) : $this->store( $action );
}
/**
diff --git a/wp/wp-content/plugins/woocommerce/packages/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php b/wp/wp-content/plugins/woocommerce/packages/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php
index 1dce8ac1..5285e946 100644
--- a/wp/wp-content/plugins/woocommerce/packages/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php
+++ b/wp/wp-content/plugins/woocommerce/packages/action-scheduler/classes/abstracts/ActionScheduler_Abstract_QueueRunner.php
@@ -91,7 +91,7 @@ abstract class ActionScheduler_Abstract_QueueRunner extends ActionScheduler_Abst
} catch ( Throwable $e ) {
// Throwable is defined when executing under PHP 7.0 and up. We convert it to an exception, for
// compatibility with ActionScheduler_Logger.
- throw new Exception( $e->getMessage(), $e->getCode(), $e );
+ throw new Exception( $e->getMessage(), $e->getCode(), $e->getPrevious() );
}
} catch ( Exception $e ) {
// This catch block exists for compatibility with PHP 5.6.
diff --git a/wp/wp-content/plugins/woocommerce/packages/action-scheduler/classes/data-stores/ActionScheduler_DBLogger.php b/wp/wp-content/plugins/woocommerce/packages/action-scheduler/classes/data-stores/ActionScheduler_DBLogger.php
index 88efb561..0d3a5dcb 100644
--- a/wp/wp-content/plugins/woocommerce/packages/action-scheduler/classes/data-stores/ActionScheduler_DBLogger.php
+++ b/wp/wp-content/plugins/woocommerce/packages/action-scheduler/classes/data-stores/ActionScheduler_DBLogger.php
@@ -82,7 +82,7 @@ class ActionScheduler_DBLogger extends ActionScheduler_Logger {
}
/**
- * Retrieve an action's log entries from the database.
+ * Retrieve the an action's log entries from the database.
*
* @param int $action_id Action ID.
*
diff --git a/wp/wp-content/plugins/woocommerce/packages/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php b/wp/wp-content/plugins/woocommerce/packages/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php
index a0bd8cb2..a894d4ec 100644
--- a/wp/wp-content/plugins/woocommerce/packages/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php
+++ b/wp/wp-content/plugins/woocommerce/packages/action-scheduler/classes/schema/ActionScheduler_StoreSchema.php
@@ -38,7 +38,6 @@ class ActionScheduler_StoreSchema extends ActionScheduler_Abstract_Schema {
$table_name = $wpdb->$table;
$charset_collate = $wpdb->get_charset_collate();
$max_index_length = 191; // @see wp_get_db_schema()
- $hook_status_scheduled_date_gmt_max_index_length = $max_index_length - 20 - 8; // - status, - scheduled_date_gmt
$default_date = self::DEFAULT_DATE;
switch ( $table ) {
@@ -60,8 +59,8 @@ class ActionScheduler_StoreSchema extends ActionScheduler_Abstract_Schema {
claim_id bigint(20) unsigned NOT NULL default '0',
extended_args varchar(8000) DEFAULT NULL,
PRIMARY KEY (action_id),
- KEY hook_status_scheduled_date_gmt (hook($hook_status_scheduled_date_gmt_max_index_length), status, scheduled_date_gmt),
- KEY status_scheduled_date_gmt (status, scheduled_date_gmt),
+ KEY hook (hook($max_index_length)),
+ KEY status (status),
KEY scheduled_date_gmt (scheduled_date_gmt),
KEY args (args($max_index_length)),
KEY group_id (group_id),
diff --git a/wp/wp-content/plugins/woocommerce/packages/action-scheduler/functions.php b/wp/wp-content/plugins/woocommerce/packages/action-scheduler/functions.php
index caf2ef5a..1e0f8db5 100644
--- a/wp/wp-content/plugins/woocommerce/packages/action-scheduler/functions.php
+++ b/wp/wp-content/plugins/woocommerce/packages/action-scheduler/functions.php
@@ -14,7 +14,7 @@
* @param bool $unique Whether the action should be unique.
* @param int $priority Lower values take precedence over higher values. Defaults to 10, with acceptable values falling in the range 0-255.
*
- * @return int The action ID. Zero if there was an error scheduling the action.
+ * @return int The action ID.
*/
function as_enqueue_async_action( $hook, $args = array(), $group = '', $unique = false, $priority = 10 ) {
if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
@@ -63,7 +63,7 @@ function as_enqueue_async_action( $hook, $args = array(), $group = '', $unique =
* @param bool $unique Whether the action should be unique.
* @param int $priority Lower values take precedence over higher values. Defaults to 10, with acceptable values falling in the range 0-255.
*
- * @return int The action ID. Zero if there was an error scheduling the action.
+ * @return int The action ID.
*/
function as_schedule_single_action( $timestamp, $hook, $args = array(), $group = '', $unique = false, $priority = 10 ) {
if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
@@ -115,7 +115,7 @@ function as_schedule_single_action( $timestamp, $hook, $args = array(), $group =
* @param bool $unique Whether the action should be unique.
* @param int $priority Lower values take precedence over higher values. Defaults to 10, with acceptable values falling in the range 0-255.
*
- * @return int The action ID. Zero if there was an error scheduling the action.
+ * @return int The action ID.
*/
function as_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook, $args = array(), $group = '', $unique = false, $priority = 10 ) {
if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
@@ -200,7 +200,7 @@ function as_schedule_recurring_action( $timestamp, $interval_in_seconds, $hook,
* @param bool $unique Whether the action should be unique.
* @param int $priority Lower values take precedence over higher values. Defaults to 10, with acceptable values falling in the range 0-255.
*
- * @return int The action ID. Zero if there was an error scheduling the action.
+ * @return int The action ID.
*/
function as_schedule_cron_action( $timestamp, $schedule, $hook, $args = array(), $group = '', $unique = false, $priority = 10 ) {
if ( ! ActionScheduler::is_initialized( __FUNCTION__ ) ) {
@@ -283,10 +283,9 @@ function as_unschedule_action( $hook, $args = array(), $group = '' ) {
ActionScheduler::logger()->log(
$action_id,
sprintf(
- /* translators: %1$s is the name of the hook to be cancelled, %2$s is the exception message. */
- __( 'Caught exception while cancelling action "%1$s": %2$s', 'woocommerce' ),
- $hook,
- $exception->getMessage()
+ /* translators: %s is the name of the hook to be cancelled. */
+ __( 'Caught exception while cancelling action: %s', 'woocommerce' ),
+ esc_attr( $hook )
)
);
diff --git a/wp/wp-content/plugins/woocommerce/packages/action-scheduler/readme.txt b/wp/wp-content/plugins/woocommerce/packages/action-scheduler/readme.txt
index ba7d0143..e8b32021 100644
--- a/wp/wp-content/plugins/woocommerce/packages/action-scheduler/readme.txt
+++ b/wp/wp-content/plugins/woocommerce/packages/action-scheduler/readme.txt
@@ -1,9 +1,9 @@
=== Action Scheduler ===
Contributors: Automattic, wpmuguru, claudiosanches, peterfabian1000, vedjain, jamosova, obliviousharmony, konamiman, sadowski, royho, barryhughes-1
Tags: scheduler, cron
-Stable tag: 3.7.0
+Stable tag: 3.6.4
License: GPLv3
-Tested up to: 6.4
+Tested up to: 6.3
Action Scheduler - Job Queue for WordPress
@@ -45,18 +45,12 @@ Collaboration is cool. We'd love to work with you to improve Action Scheduler. [
== Changelog ==
-= 3.7.0 - 2023-11-20 =
-* Add extended indexes for hook_status_scheduled_date_gmt and status_sheduled_date_gmt.
-* Catch and log exceptions thrown when actions can't be created, e.g. under a corrupt database schema.
-* Release/3.6.4.
-* Tweak - WP 6.4 compatibility.
-* Update unit tests for upcoming dependency version policy.
-* make sure hook action_scheduler_failed_execution can access original exception object.
-* mention dependency version policy in usage.md.
-
= 3.6.4 - 2023-10-11 =
-* Performance improvements when bulk cancelling actions.
-* Dev-related fixes.
+* 3.6.3 release.
+* Fix option lock test.
+* Fix: Use orderby => 'none' when bulk cancelling actions.
+* Tweak - WP 6.3 compatibility.
+* Update PR unit tests matrix.
= 3.6.3 - 2023-09-13 =
* Use `_doing_it_wrong` in initialization check.
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/css/abstracts/_mixins.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/css/abstracts/_mixins.scss
index 7fef7d98..16aa41a7 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/css/abstracts/_mixins.scss
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/css/abstracts/_mixins.scss
@@ -171,22 +171,18 @@ $fontSizes: (
text-decoration: underline;
}
-@mixin hover-effect() {
- &:hover {
- text-decoration: none;
- color: inherit;
- cursor: pointer;
- }
-}
-
// Reset style so we can use link style for action buttons in filter blocks
@mixin filter-link-button() {
@include link-button();
- @include hover-effect();
@include font-size(small);
text-decoration: underline;
font-weight: normal;
color: inherit;
+
+ &:hover {
+ text-decoration: none;
+ color: inherit;
+ }
}
// Makes sure long words are broken if they overflow the container.
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/css/style.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/css/style.scss
index 0c2e51a2..827a016b 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/css/style.scss
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/css/style.scss
@@ -54,7 +54,8 @@
display: inline-flex;
justify-content: center;
text-align: center;
- // Set button font size so it inherits from parent.
+ // Set button font size and padding so it inherits from parent.
+ padding: 0.5em 1em;
font-size: 1em;
&.loading {
@@ -160,13 +161,6 @@
// Element spacing.
.wc-block-grid__product {
- // Prevent link and image taking the full width unnecessarily, which might cause: https://github.com/woocommerce/woocommerce-blocks/issues/11438
- .wc-block-grid__product-link,
- .wc-block-grid__product-image {
- display: inline-block;
- position: relative;
- }
-
// Not operator necessary for avoid this problem: https://github.com/woocommerce/woocommerce-gutenberg-products-block/pull/5925/files#r814043454
.wc-block-grid__product-image:not(.wc-block-components-product-image),
.wc-block-grid__product-title {
@@ -305,6 +299,7 @@
.wc-block-grid__product-add-to-cart.wp-block-button .wp-block-button__link {
@include font-size(smaller);
+ padding: em($gap-smaller);
}
@media only screen and (min-width: 768px) {
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/add-to-cart-form/edit.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/add-to-cart-form/edit.tsx
index e4ffc5a2..cf0dda10 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/add-to-cart-form/edit.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/add-to-cart-form/edit.tsx
@@ -4,7 +4,7 @@
import { useEffect } from '@wordpress/element';
import { useBlockProps } from '@wordpress/block-editor';
import { __ } from '@wordpress/i18n';
-import { Disabled, Tooltip } from '@wordpress/components';
+import { Button, Disabled, Tooltip } from '@wordpress/components';
import { Skeleton } from '@woocommerce/base-components/skeleton';
import { BlockEditProps } from '@wordpress/blocks';
@@ -37,28 +37,31 @@ const Edit = ( props: BlockEditProps< Attributes > ) => {
return (
-
+
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/add-to-cart-form/editor.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/add-to-cart-form/editor.scss
index 230940d5..371171a8 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/add-to-cart-form/editor.scss
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/add-to-cart-form/editor.scss
@@ -1,4 +1,30 @@
-.wc-block-editor-add-to-cart-form-container {
+.wc-block-editor-add-to-cart-form {
+ display: flex;
+ flex-direction: column;
+ row-gap: $default-block-margin;
+}
+
+input.wc-block-editor-add-to-cart-form__quantity[type="number"] {
+ max-width: 50px;
+ min-height: 23px;
+ float: left;
+ padding: 6px 6px 6px 12px;
+ margin-right: 10px;
+ font-size: 13px;
+ height: inherit;
+}
+
+input[type="number"]::-webkit-inner-spin-button {
+ opacity: 1;
+}
+
+button.components-button.wc-block-add-to-cart-form__button {
+ float: left;
+ padding: 20px 30px;
+ border-radius: 0;
+}
+
+.wc-block-editor-container {
cursor: help;
gap: 10px;
display: flex;
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/add-to-cart-form/style.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/add-to-cart-form/style.scss
index 30284751..c5210c23 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/add-to-cart-form/style.scss
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/add-to-cart-form/style.scss
@@ -1,4 +1,4 @@
-.wc-block-add-to-cart-form {
+.wp-block-add-to-cart-form {
width: unset;
/**
* This is a base style for the input text element in WooCommerce that prevents inputs from appearing too small.
@@ -9,17 +9,4 @@
font-size: var(--wp--preset--font-size--small);
padding: 0.9rem 1.1rem;
}
-
- .quantity {
- display: inline-block;
- float: none;
- margin-right: 4px;
- vertical-align: middle;
-
- .qty {
- margin-right: 0.5rem;
- width: 3.631em;
- text-align: center;
- }
- }
}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/attribute-select-control.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/attribute-select-control.tsx
index e562ca4b..e9d80a20 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/attribute-select-control.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/add-to-cart/product-types/variable/variation-attributes/attribute-select-control.tsx
@@ -7,7 +7,7 @@ import { SelectControl } from 'wordpress-components';
import type { SelectControl as SelectControlType } from '@wordpress/components';
import { useEffect } from '@wordpress/element';
import classnames from 'classnames';
-import { ValidationInputError } from '@woocommerce/blocks-components';
+import { ValidationInputError } from '@woocommerce/blocks-checkout';
import { VALIDATION_STORE_KEY } from '@woocommerce/block-data';
import { useDispatch, useSelect } from '@wordpress/data';
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/button/style.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/button/style.scss
index d9d63605..ae7792cc 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/button/style.scss
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/blocks/product-elements/button/style.scss
@@ -13,7 +13,8 @@
display: inline-flex;
justify-content: center;
text-align: center;
- // Set button font size so it inherits from parent.
+ // Set button font size and padding so it inherits from parent.
+ padding: 0.5em 1em;
font-size: 1em;
&.loading {
@@ -24,7 +25,6 @@
font-family: WooCommerce; /* stylelint-disable-line */
content: "\e031";
animation: spin 2s linear infinite;
- margin-right: 0;
margin-left: 0.5em;
display: inline-block;
width: auto;
@@ -70,9 +70,8 @@
justify-content: center;
white-space: normal;
word-break: break-word;
+ width: 150px;
overflow: hidden;
- align-items: center;
- line-height: inherit;
span {
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/blocks-registration-manager/block-registration-strategy.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/blocks-registration-manager/block-registration-strategy.ts
deleted file mode 100644
index cfc7171f..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/blocks-registration-manager/block-registration-strategy.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * External dependencies
- */
-import {
- BlockConfiguration,
- registerBlockType,
- unregisterBlockType,
- registerBlockVariation,
- unregisterBlockVariation,
- BlockVariation,
- BlockAttributes,
-} from '@wordpress/blocks';
-
-export interface BlockRegistrationStrategy {
- register(
- blockNameOrMetadata: string | Partial< BlockConfiguration >,
- blockSettings: Partial< BlockConfiguration >
- ): boolean;
- unregister( blockName: string, variationName?: string ): boolean;
-}
-
-export class BlockTypeStrategy implements BlockRegistrationStrategy {
- register(
- blockNameOrMetadata: string | Partial< BlockConfiguration >,
- blockSettings: Partial< BlockConfiguration >
- ): boolean {
- return Boolean(
- // @ts-expect-error: `registerBlockType` is typed in WordPress core
- registerBlockType( blockNameOrMetadata, blockSettings )
- );
- }
-
- unregister( blockName: string ): boolean {
- return Boolean( unregisterBlockType( blockName ) );
- }
-}
-
-// Strategy for BlockVariation
-export class BlockVariationStrategy implements BlockRegistrationStrategy {
- register(
- blockName: string,
- blockSettings: Partial< BlockConfiguration >
- ): boolean {
- return Boolean(
- registerBlockVariation(
- blockName,
- blockSettings as BlockVariation< BlockAttributes >
- )
- );
- }
-
- unregister( blockName: string, variationName: string ): boolean {
- return Boolean( unregisterBlockVariation( blockName, variationName ) );
- }
-}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/blocks-registration-manager/blocks-registration-manager.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/blocks-registration-manager/blocks-registration-manager.ts
deleted file mode 100644
index 7ca69ae8..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/blocks-registration-manager/blocks-registration-manager.ts
+++ /dev/null
@@ -1,182 +0,0 @@
-/**
- * External dependencies
- */
-import { getBlockType } from '@wordpress/blocks';
-
-/**
- * Internal dependencies
- */
-import {
- TemplateChangeDetector,
- TemplateChangeDetectorObserver,
-} from './template-change-detector';
-import {
- BlockRegistrationStrategy,
- BlockTypeStrategy,
- BlockVariationStrategy,
-} from './block-registration-strategy';
-import { BLOCKS_WITH_RESTRICTION } from './blocks-with-restriction';
-
-/**
- * Manages the registration and unregistration of blocks based on template or page restrictions.
- *
- * This class implements the TemplateChangeDetectorObserver interface and is responsible for managing the registration and unregistration of blocks based on the restrictions defined in the BLOCKS_WITH_RESTRICTION constant.
- *
- * The class maintains a list of unregistered blocks and uses a block registration strategy to register and unregister blocks as needed. The strategy used depends on whether the block is a variation block or a regular block.
- *
- * The `run` method is the main entry point for the class. It is called with a TemplateChangeDetector object and registers and unregisters blocks based on the current template and whether the editor is in post or page mode.
- */
-export class BlockRegistrationManager
- implements TemplateChangeDetectorObserver
-{
- private unregisteredBlocks: string[] = [];
- private blockRegistrationStrategy: BlockRegistrationStrategy;
-
- constructor() {
- this.blockRegistrationStrategy = new BlockTypeStrategy();
- }
-
- /**
- * Determines whether a block should be registered based on the current template or page.
- *
- * This method checks whether a block with restrictions should be registered based on the current template ID and
- * whether the editor is in post or page mode. It checks whether the current template ID starts with any of the
- * allowed templates or template parts for the block, and whether the block is available in the post or page editor.
- *
- * @param {Object} params - The parameters for the method.
- * @param {string} params.blockWithRestrictionName - The name of the block with restrictions.
- * @param {string} params.currentTemplateId - The ID of the current template.
- * @param {boolean} params.isPostOrPage - Whether the editor is in a post or page.
- * @return {boolean} True if the block should be registered, false otherwise.
- */
- private shouldBlockBeRegistered( {
- blockWithRestrictionName,
- currentTemplateId,
- isPostOrPage,
- }: {
- blockWithRestrictionName: string;
- currentTemplateId: string;
- isPostOrPage: boolean;
- } ) {
- const {
- allowedTemplates,
- allowedTemplateParts,
- availableInPostOrPageEditor,
- } = BLOCKS_WITH_RESTRICTION[ blockWithRestrictionName ];
- const shouldBeAvailableOnTemplate = Object.keys(
- allowedTemplates
- ).some( ( allowedTemplate ) =>
- currentTemplateId.startsWith( allowedTemplate )
- );
- const shouldBeAvailableOnTemplatePart = Object.keys(
- allowedTemplateParts
- ).some( ( allowedTemplate ) =>
- currentTemplateId.startsWith( allowedTemplate )
- );
- const shouldBeAvailableOnPostOrPageEditor =
- isPostOrPage && availableInPostOrPageEditor;
-
- return (
- shouldBeAvailableOnTemplate ||
- shouldBeAvailableOnTemplatePart ||
- shouldBeAvailableOnPostOrPageEditor
- );
- }
-
- /**
- * Unregisters blocks before entering a restricted area based on the current template or page/post.
- *
- * This method iterates over all blocks with restrictions and unregisters them if they should not be registered
- * based on the current template ID and whether the editor is in a post or page. It uses a block registration
- * strategy to unregister the blocks, which depends on whether the block is a variation block or a regular block.
- *
- * @param {Object} params - The parameters for the method.
- * @param {string} params.currentTemplateId - The ID of the current template.
- * @param {boolean} params.isPostOrPage - Whether the editor is in post or page mode.
- */
- unregisterBlocksBeforeEnteringRestrictedArea( {
- currentTemplateId,
- isPostOrPage,
- }: {
- currentTemplateId: string;
- isPostOrPage: boolean;
- } ) {
- for ( const blockWithRestrictionName of Object.keys(
- BLOCKS_WITH_RESTRICTION
- ) ) {
- if (
- this.shouldBlockBeRegistered( {
- blockWithRestrictionName,
- currentTemplateId,
- isPostOrPage,
- } )
- ) {
- continue;
- }
-
- if ( ! getBlockType( blockWithRestrictionName ) ) {
- continue;
- }
-
- this.blockRegistrationStrategy = BLOCKS_WITH_RESTRICTION[
- blockWithRestrictionName
- ].isVariationBlock
- ? new BlockVariationStrategy()
- : new BlockTypeStrategy();
-
- this.blockRegistrationStrategy.unregister(
- blockWithRestrictionName
- );
- this.unregisteredBlocks.push( blockWithRestrictionName );
- }
- }
-
- /**
- * Registers blocks after leaving a restricted area.
- *
- * This method iterates over all unregistered blocks and registers them if they are not restricted in the current context.
- * It uses a block registration strategy to register the blocks, which depends on whether the block is a variation block or a regular block.
- * If the block is successfully registered, it is removed from the list of unregistered blocks.
- */
- registerBlocksAfterLeavingRestrictedArea() {
- for ( const unregisteredBlockName of this.unregisteredBlocks ) {
- if ( ! getBlockType( unregisteredBlockName ) ) {
- continue;
- }
-
- const restrictedBlockData =
- BLOCKS_WITH_RESTRICTION[ unregisteredBlockName ];
- this.blockRegistrationStrategy = BLOCKS_WITH_RESTRICTION[
- unregisteredBlockName
- ].isVariationBlock
- ? new BlockVariationStrategy()
- : new BlockTypeStrategy();
- const isBlockRegistered = this.blockRegistrationStrategy.register(
- restrictedBlockData.blockMetadata,
- restrictedBlockData.blockSettings
- );
- this.unregisteredBlocks = isBlockRegistered
- ? this.unregisteredBlocks.filter(
- ( blockName ) => blockName !== unregisteredBlockName
- )
- : this.unregisteredBlocks;
- }
- }
-
- /**
- * Runs the block registration manager.
- *
- * This method is the main entry point for the block registration manager. It is called with a TemplateChangeDetector object,
- * and registers and unregisters blocks based on the current template and whether the editor is in a post or page.
- *
- * @param {TemplateChangeDetector} templateChangeDetector - The template change detector object.
- */
- run( templateChangeDetector: TemplateChangeDetector ) {
- this.registerBlocksAfterLeavingRestrictedArea();
- this.unregisterBlocksBeforeEnteringRestrictedArea( {
- currentTemplateId:
- templateChangeDetector.getCurrentTemplateId() || '',
- isPostOrPage: templateChangeDetector.getIsPostOrPage(),
- } );
- }
-}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/blocks-registration-manager/blocks-with-restriction.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/blocks-registration-manager/blocks-with-restriction.ts
deleted file mode 100644
index 7b3782b9..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/blocks-registration-manager/blocks-with-restriction.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * External dependencies
- */
-import { BlockConfiguration } from '@wordpress/blocks';
-import { ProductGalleryBlockSettings } from '@woocommerce/blocks/product-gallery/settings';
-
-/**
- * Internal dependencies
- */
-import productGalleryBlockMetadata from '../../../blocks/product-gallery/block.json';
-
-export interface BlocksWithRestriction {
- [ key: string ]: {
- blockMetadata: Partial< BlockConfiguration >;
- blockSettings: Partial< BlockConfiguration >;
- allowedTemplates: {
- [ key: string ]: boolean;
- };
- allowedTemplateParts: {
- [ key: string ]: boolean;
- };
- availableInPostOrPageEditor: boolean;
- isVariationBlock: boolean;
- };
-}
-
-// eslint-disable-next-line @typescript-eslint/ban-ts-comment
-// @ts-expect-error: `metadata` currently does not have a type definition in WordPress core
-export const BLOCKS_WITH_RESTRICTION: BlocksWithRestriction = {
- [ productGalleryBlockMetadata.name ]: {
- blockMetadata: productGalleryBlockMetadata,
- blockSettings: ProductGalleryBlockSettings,
- allowedTemplates: {
- 'single-product': true,
- },
- allowedTemplateParts: {
- 'product-gallery': true,
- },
- availableInPostOrPageEditor: false,
- isVariationBlock: false,
- },
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/blocks-registration-manager/index.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/blocks-registration-manager/index.ts
deleted file mode 100644
index e24334f2..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/blocks-registration-manager/index.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * External dependencies
- */
-import domReady from '@wordpress/dom-ready';
-
-/**
- * Internal dependencies
- */
-import { BlockRegistrationManager } from './blocks-registration-manager';
-import { TemplateChangeDetector } from './template-change-detector';
-
-domReady( () => {
- const templateChangeDetector = new TemplateChangeDetector();
- const blockRegistrationManager = new BlockRegistrationManager();
- templateChangeDetector.add( blockRegistrationManager );
-} );
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/blocks-registration-manager/template-change-detector.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/blocks-registration-manager/template-change-detector.ts
deleted file mode 100644
index 344fff89..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/blocks-registration-manager/template-change-detector.ts
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * External dependencies
- */
-import { subscribe, select } from '@wordpress/data';
-import { isNumber } from '@woocommerce/types';
-
-interface TemplateChangeDetectorSubject {
- add( observer: TemplateChangeDetectorObserver ): void;
- getPreviousTemplateId(): string | undefined;
- getCurrentTemplateId(): string | undefined;
- notify(): void;
-}
-
-export interface TemplateChangeDetectorObserver {
- run( subject: TemplateChangeDetectorSubject ): void;
-}
-
-/**
- * This class implements the TemplateChangeDetectorSubject interface and is responsible for detecting changes in the
- * current template or page and notifying any observers of these changes. It maintains a list of observers and provides methods
- * to add observers and notify them of changes.
- *
- * The class also provides methods to get the previous and current template IDs and whether the editor is in a post or page.
- *
- * The `checkIfTemplateHasChangedAndNotifySubscribers` method is the main method of the class. It checks if the current
- * template has changed and, if so, notifies all observers.
- */
-export class TemplateChangeDetector implements TemplateChangeDetectorSubject {
- private previousTemplateId: string | undefined;
- private currentTemplateId: string | undefined;
- private isPostOrPage: boolean;
-
- private observers: TemplateChangeDetectorObserver[] = [];
-
- constructor() {
- this.isPostOrPage = false;
- subscribe( () => {
- this.checkIfTemplateHasChangedAndNotifySubscribers();
- }, 'core/edit-site' );
- }
-
- public add( observer: TemplateChangeDetectorObserver ): void {
- this.observers.push( observer );
- }
-
- /**
- * Trigger an update in each subscriber.
- */
- public notify(): void {
- for ( const observer of this.observers ) {
- observer.run( this );
- }
- }
-
- public getPreviousTemplateId() {
- return this.previousTemplateId;
- }
-
- public getCurrentTemplateId() {
- return this.currentTemplateId;
- }
-
- public getIsPostOrPage() {
- return this.isPostOrPage;
- }
-
- /**
- * Parses the template ID.
- *
- * This method takes a template or a post ID and returns it parsed in the expected format.
- *
- * @param {string | number | undefined} templateId - The template ID to parse.
- * @return {string | undefined} The parsed template ID.
- */
- private parseTemplateId(
- templateId: string | number | undefined
- ): string | undefined {
- if ( isNumber( templateId ) ) {
- return String( templateId );
- }
- return templateId?.split( '//' )[ 1 ];
- }
-
- /**
- * Checks if the current template or page has changed and notifies subscribers.
- *
- * If the current template ID has changed and is not undefined (which means that it is not a page, post or template), it notifies all subscribers.
- */
- public checkIfTemplateHasChangedAndNotifySubscribers(): void {
- this.previousTemplateId = this.currentTemplateId;
-
- const postOrPageId = select( 'core/editor' )?.getCurrentPostId<
- string | number | undefined
- >();
-
- this.isPostOrPage = Boolean( postOrPageId );
-
- const editedPostId =
- postOrPageId ||
- select( 'core/edit-site' )?.getEditedPostId<
- string | number | undefined
- >();
- this.currentTemplateId = this.parseTemplateId( editedPostId );
-
- const hasChangedTemplate =
- this.previousTemplateId !== this.currentTemplateId;
- const hasTemplateId = Boolean( this.currentTemplateId );
-
- if ( ! hasChangedTemplate || ! hasTemplateId ) {
- return;
- }
-
- this.notify();
- }
-}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/register-block-single-product-template.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/register-block-single-product-template.ts
index 87784a00..13431dd0 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/register-block-single-product-template.ts
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/atomic/utils/register-block-single-product-template.ts
@@ -46,7 +46,7 @@ export const registerBlockSingleProductTemplate = ( {
// With GB 16.3.0 the return type can be a number: https://github.com/WordPress/gutenberg/issues/53230
currentTemplateId = parseTemplateId(
- store?.getEditedPostId< string | number | undefined >()
+ store?.getEditedPostId() as string | number | undefined
);
const hasChangedTemplate = previousTemplateId !== currentTemplateId;
const hasTemplateId = Boolean( currentTemplateId );
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/button/stories/index.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/button/stories/index.stories.tsx
deleted file mode 100644
index f445dbdc..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/button/stories/index.stories.tsx
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * External dependencies
- */
-import type { Story, Meta } from '@storybook/react';
-
-/**
- * Internal dependencies
- */
-import Button, { ButtonProps } from '..';
-const availableTypes = [ 'button', 'input', 'submit' ];
-
-export default {
- title: 'Base Components/Button',
- argTypes: {
- children: {
- control: 'text',
- },
- type: {
- control: 'radio',
- options: availableTypes,
- },
- },
- component: Button,
-} as Meta< ButtonProps >;
-
-const Template: Story< ButtonProps > = ( args ) => {
- return
;
-};
-
-export const Default = Template.bind( {} );
-Default.args = {
- children: 'Buy Now',
- disabled: false,
- showSpinner: false,
- type: 'button',
-};
-
-export const Disabled = Template.bind( {} );
-Disabled.args = {
- ...Default.args,
- disabled: true,
-};
-
-export const Loading = Template.bind( {} );
-Loading.args = {
- ...Default.args,
- disabled: true,
- showSpinner: true,
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/address-form/address-form.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/address-form/address-form.tsx
index aa7c8b0a..481b6b1a 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/address-form/address-form.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/address-form/address-form.tsx
@@ -1,11 +1,11 @@
/**
* External dependencies
*/
-import { isPostcode } from '@woocommerce/blocks-checkout';
import {
ValidatedTextInput,
+ isPostcode,
type ValidatedTextInputHandle,
-} from '@woocommerce/blocks-components';
+} from '@woocommerce/blocks-checkout';
import {
BillingCountryInput,
ShippingCountryInput,
@@ -180,7 +180,6 @@ const AddressForm = ( {
( fieldsRef.current[ field.key ] = el )
}
{ ...fieldProps }
- type={ field.type }
value={ values[ field.key ] }
onChange={ ( newValue: string ) =>
onChange( {
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/cart-line-items-table/style.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/cart-line-items-table/style.scss
index 0bf564b5..0d34496c 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/cart-line-items-table/style.scss
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/cart-line-items-table/style.scss
@@ -34,8 +34,7 @@ table.wc-block-cart-items {
}
.wc-block-cart-item__quantity {
.wc-block-cart-item__remove-link {
- @include link-button();
- @include hover-effect();
+ @include link-button;
@include font-size( smaller );
text-transform: none;
@@ -76,7 +75,7 @@ table.wc-block-cart-items {
.wc-block-cart-item__remove-link {
display: none;
}
- &:not(.wc-block-mini-cart-items):not(:last-child) {
+ &:not(.wc-block-mini-cart-items) {
.wc-block-cart-items__row {
@include with-translucent-border( 0 0 1px );
}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/order-summary/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/order-summary/index.tsx
index 2138ac7e..92ed94c4 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/order-summary/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/order-summary/index.tsx
@@ -3,7 +3,7 @@
*/
import { __ } from '@wordpress/i18n';
import { useContainerWidthContext } from '@woocommerce/base-context';
-import { Panel } from '@woocommerce/blocks-components';
+import { Panel } from '@woocommerce/blocks-checkout';
import type { CartItem } from '@woocommerce/types';
/**
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/shipping-calculator/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/shipping-calculator/index.tsx
index b1a346e6..108fb33f 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/shipping-calculator/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/shipping-calculator/index.tsx
@@ -5,7 +5,7 @@ import type { ShippingAddress } from '@woocommerce/settings';
import { useCustomerData } from '@woocommerce/base-context/hooks';
import { dispatch } from '@wordpress/data';
import { CART_STORE_KEY, processErrorResponse } from '@woocommerce/block-data';
-import { StoreNoticesContainer } from '@woocommerce/blocks-components';
+import { StoreNoticesContainer } from '@woocommerce/blocks-checkout';
import { removeNoticesWithContext } from '@woocommerce/base-utils';
/**
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/shipping-rates-control-package/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/shipping-rates-control-package/index.tsx
index bcd00395..ab373d2c 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/shipping-rates-control-package/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/shipping-rates-control-package/index.tsx
@@ -4,7 +4,8 @@
import classNames from 'classnames';
import { _n, sprintf } from '@wordpress/i18n';
import { decodeEntities } from '@wordpress/html-entities';
-import { Label, Panel } from '@woocommerce/blocks-components';
+import { Panel } from '@woocommerce/blocks-checkout';
+import { Label } from '@woocommerce/blocks-components';
import { useCallback } from '@wordpress/element';
import { useShippingData } from '@woocommerce/base-context/hooks';
import { sanitizeHTML } from '@woocommerce/utils';
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/coupon/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/coupon/index.tsx
index 930f9dfd..745a547e 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/coupon/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/coupon/index.tsx
@@ -9,11 +9,11 @@ import { withInstanceId } from '@wordpress/compose';
import {
ValidatedTextInput,
ValidationInputError,
-} from '@woocommerce/blocks-components';
+} from '@woocommerce/blocks-checkout';
import { useSelect } from '@wordpress/data';
import { VALIDATION_STORE_KEY } from '@woocommerce/block-data';
import classnames from 'classnames';
-import type { MouseEvent, MouseEventHandler } from 'react';
+import type { MouseEvent } from 'react';
/**
* Internal dependencies
@@ -62,18 +62,18 @@ export const TotalsCoupon = ( {
validationErrorId: store.getValidationErrorId( textInputId ),
};
} );
- const handleCouponAnchorClick: MouseEventHandler< HTMLAnchorElement > = (
- e: MouseEvent< HTMLAnchorElement >
+ const handleCouponAnchorClick = (
+ e: MouseEvent< HTMLAnchorElement, MouseEvent >
) => {
e.preventDefault();
setIsCouponFormHidden( false );
};
- const handleCouponSubmit: MouseEventHandler< HTMLButtonElement > = (
- e: MouseEvent< HTMLButtonElement >
+ const handleCouponSubmit = (
+ e: MouseEvent< HTMLButtonElement, MouseEvent >
) => {
e.preventDefault();
- if ( typeof onSubmit !== 'undefined' ) {
- onSubmit( couponValue )?.then( ( result ) => {
+ if ( onSubmit !== undefined ) {
+ onSubmit( couponValue ).then( ( result ) => {
if ( result ) {
setCouponValue( '' );
setIsCouponFormHidden( true );
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/coupon/stories/index.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/coupon/stories/index.stories.tsx
deleted file mode 100644
index 4806602c..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/coupon/stories/index.stories.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * External dependencies
- */
-import { useArgs } from '@storybook/client-api';
-import type { Story, Meta } from '@storybook/react';
-import { INTERACTION_TIMEOUT } from '@woocommerce/storybook-controls';
-import { useDispatch } from '@wordpress/data';
-import { VALIDATION_STORE_KEY } from '@woocommerce/block-data';
-
-/**
- * Internal dependencies
- */
-import { TotalsCoupon, TotalsCouponProps } from '..';
-
-export default {
- title: 'Base Components/Totals/Coupon',
- component: TotalsCoupon,
- args: {
- initialOpen: true,
- },
-} as Meta< TotalsCouponProps >;
-
-const INVALID_COUPON_ERROR = {
- hidden: false,
- message: 'Invalid coupon code',
-};
-
-const Template: Story< TotalsCouponProps > = ( args ) => {
- const [ {}, setArgs ] = useArgs();
-
- const onSubmit = ( code: string ) => {
- args.onSubmit?.( code );
- setArgs( { isLoading: true } );
- return new Promise( ( resolve ) => {
- setTimeout( () => {
- setArgs( { isLoading: false } );
- resolve( true );
- }, INTERACTION_TIMEOUT );
- } );
- };
-
- return
;
-};
-
-export const Default = Template.bind( {} );
-Default.args = {};
-
-export const LoadingState = Template.bind( {} );
-LoadingState.args = {
- isLoading: true,
-};
-
-export const ErrorState: Story< TotalsCouponProps > = ( args ) => {
- const { setValidationErrors } = useDispatch( VALIDATION_STORE_KEY );
-
- setValidationErrors( { coupon: INVALID_COUPON_ERROR } );
-
- return
;
-};
-
-ErrorState.decorators = [
- ( StoryComponent ) => {
- return
;
- },
-];
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/discount/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/discount/index.tsx
index 6eb34924..1f6cedc7 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/discount/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/discount/index.tsx
@@ -3,8 +3,8 @@
*/
import { __, sprintf } from '@wordpress/i18n';
import LoadingMask from '@woocommerce/base-components/loading-mask';
-import { RemovableChip, TotalsItem } from '@woocommerce/blocks-components';
-import { applyCheckoutFilter } from '@woocommerce/blocks-checkout';
+import { RemovableChip } from '@woocommerce/blocks-components';
+import { applyCheckoutFilter, TotalsItem } from '@woocommerce/blocks-checkout';
import { getSetting } from '@woocommerce/settings';
import {
CartResponseCouponItemWithLabel,
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/discount/stories/index.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/discount/stories/index.stories.tsx
deleted file mode 100644
index 7b274b27..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/discount/stories/index.stories.tsx
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- * External dependencies
- */
-import { useArgs } from '@storybook/client-api';
-import type { Story, Meta } from '@storybook/react';
-import {
- currenciesAPIShape as currencies,
- currencyControl,
- INTERACTION_TIMEOUT,
-} from '@woocommerce/storybook-controls';
-import {
- CartResponseCouponItemWithLabel,
- CartTotalsItem,
- LooselyMustHave,
-} from '@woocommerce/types';
-
-/**
- * Internal dependencies
- */
-import Discount, { TotalsDiscountProps } from '..';
-
-const EXAMPLE_COUPONS: CartResponseCouponItemWithLabel[] = [
- {
- code: 'AWSMSB',
- discount_type: '',
- label: 'Awesome Storybook coupon',
- totals: {
- ...currencies.EUR,
- total_discount: '5000',
- total_discount_tax: '250',
- },
- },
- {
- code: 'STONKS',
- discount_type: '',
- label: 'Most valuable coupon',
- totals: {
- ...currencies.EUR,
- total_discount: '10000',
- total_discount_tax: '1000',
- },
- },
-];
-
-function extractValuesFromCoupons(
- coupons: LooselyMustHave< CartResponseCouponItemWithLabel, 'totals' >[]
-) {
- return coupons.reduce(
- ( acc, curr ) => {
- const totalDiscount =
- Number( acc.total_discount ) +
- Number( curr.totals.total_discount );
- const totalDiscountTax =
- Number( acc.total_discount_tax ) +
- Number( curr.totals.total_discount_tax );
-
- return {
- total_discount: String( totalDiscount ),
- total_discount_tax: String( totalDiscountTax ),
- };
- },
- { total_discount: '0', total_discount_tax: '0' } as LooselyMustHave<
- CartTotalsItem,
- 'total_discount' | 'total_discount_tax'
- >
- );
-}
-
-export default {
- title: 'Base Components/Totals/Discount',
- component: Discount,
- argTypes: {
- currency: currencyControl,
- removeCoupon: { action: 'Removing coupon with code' },
- },
- args: {
- cartCoupons: EXAMPLE_COUPONS,
- isRemovingCoupon: false,
- values: extractValuesFromCoupons( EXAMPLE_COUPONS ),
- },
-} as Meta< TotalsDiscountProps >;
-
-const Template: Story< TotalsDiscountProps > = ( args ) => {
- const [ {}, setArgs ] = useArgs();
-
- const removeCoupon = ( code: string ) => {
- args.removeCoupon( code );
- setArgs( { isRemovingCoupon: true } );
-
- const cartCoupons = args.cartCoupons.filter(
- ( coupon ) => coupon.code !== code
- );
-
- const values = extractValuesFromCoupons( cartCoupons );
-
- setTimeout(
- () => setArgs( { cartCoupons, values, isRemovingCoupon: false } ),
- INTERACTION_TIMEOUT
- );
- };
-
- return
;
-};
-
-export const Default = Template.bind( {} );
-Default.args = {};
-
-export const RemovingCoupon = Template.bind( {} );
-RemovingCoupon.args = {
- isRemovingCoupon: true,
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/footer-item/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/footer-item/index.tsx
index c977f7f5..76b76d0e 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/footer-item/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/footer-item/index.tsx
@@ -4,11 +4,8 @@
import { __, sprintf } from '@wordpress/i18n';
import classNames from 'classnames';
import { createInterpolateElement } from '@wordpress/element';
-import {
- FormattedMonetaryAmount,
- TotalsItem,
-} from '@woocommerce/blocks-components';
-import { applyCheckoutFilter } from '@woocommerce/blocks-checkout';
+import { FormattedMonetaryAmount } from '@woocommerce/blocks-components';
+import { applyCheckoutFilter, TotalsItem } from '@woocommerce/blocks-checkout';
import { useStoreCart } from '@woocommerce/base-context/hooks';
import { getSetting } from '@woocommerce/settings';
import {
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/footer-item/stories/index.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/footer-item/stories/index.stories.tsx
deleted file mode 100644
index 6442babe..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/footer-item/stories/index.stories.tsx
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * External dependencies
- */
-import type { Story, Meta } from '@storybook/react';
-import { allSettings } from '@woocommerce/settings';
-import { Currency } from '@woocommerce/types';
-
-/**
- * Internal dependencies
- */
-import FooterItem, { TotalsFooterItemProps } from '..';
-
-const NZD: Currency = {
- code: 'NZD',
- symbol: '$',
- thousandSeparator: ' ',
- decimalSeparator: '.',
- minorUnit: 2,
- prefix: '$',
- suffix: '',
-};
-
-export default {
- title: 'Base Components/Totals/FooterItem',
- component: FooterItem,
- args: {
- currency: NZD,
- values: { total_price: '2500', total_tax: '550' },
- },
-} as Meta< TotalsFooterItemProps >;
-
-const Template: Story< TotalsFooterItemProps > = ( args ) => (
-
-);
-
-export const Default = Template.bind( {} );
-Default.decorators = [
- ( StoryComponent ) => {
- allSettings.displayCartPricesIncludingTax = false;
-
- return
;
- },
-];
-
-export const NoTaxLabel = Template.bind( {} );
-NoTaxLabel.decorators = [
- ( StoryComponent ) => {
- allSettings.displayCartPricesIncludingTax = true;
-
- return
;
- },
-];
-
-export const SingleTaxLabel = Template.bind( {} );
-SingleTaxLabel.args = {
- values: {
- total_price: '2500',
- total_tax: '550',
- tax_lines: [ { name: '10% VAT', price: '550', rate: '10.00' } ],
- },
-};
-SingleTaxLabel.decorators = [
- ( StoryComponent ) => {
- allSettings.displayCartPricesIncludingTax = true;
-
- return
;
- },
-];
-
-export const MultipleTaxLabels = Template.bind( {} );
-MultipleTaxLabels.args = {
- values: {
- total_price: '2500',
- total_tax: '550',
- tax_lines: [
- { name: '10% VAT', price: '300', rate: '10.00' },
- { name: '5% VAT', price: '250', rate: '5.00' },
- ],
- },
-};
-MultipleTaxLabels.decorators = [
- ( StoryComponent ) => {
- allSettings.displayCartPricesIncludingTax = true;
-
- return
;
- },
-];
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/shipping/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/shipping/index.tsx
index 82dbbe10..d7f122b7 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/shipping/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/shipping/index.tsx
@@ -5,8 +5,8 @@ import classnames from 'classnames';
import { __ } from '@wordpress/i18n';
import { useState } from '@wordpress/element';
import { useStoreCart } from '@woocommerce/base-context/hooks';
-import { TotalsItem } from '@woocommerce/blocks-components';
-import type { Currency } from '@woocommerce/types';
+import { TotalsItem } from '@woocommerce/blocks-checkout';
+import type { Currency } from '@woocommerce/price-format';
import { ShippingVia } from '@woocommerce/base-components/cart-checkout/totals/shipping/shipping-via';
import {
isAddressComplete,
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/shipping/shipping-address.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/shipping/shipping-address.tsx
index efba9acd..79b58efe 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/shipping/shipping-address.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/shipping/shipping-address.tsx
@@ -2,7 +2,10 @@
* External dependencies
*/
import { __ } from '@wordpress/i18n';
-import { formatShippingAddress } from '@woocommerce/base-utils';
+import {
+ formatShippingAddress,
+ isAddressComplete,
+} from '@woocommerce/base-utils';
import { useEditorContext } from '@woocommerce/base-context';
import { ShippingAddress as ShippingAddressType } from '@woocommerce/settings';
import PickupLocation from '@woocommerce/base-components/cart-checkout/pickup-location';
@@ -28,19 +31,15 @@ export const ShippingAddress = ( {
setIsShippingCalculatorOpen,
shippingAddress,
}: ShippingAddressProps ): JSX.Element | null => {
+ const addressComplete = isAddressComplete( shippingAddress );
const { isEditor } = useEditorContext();
const prefersCollection = useSelect( ( select ) =>
select( CHECKOUT_STORE_KEY ).prefersCollection()
);
- const hasFormattedAddress = !! formatShippingAddress( shippingAddress );
-
- // If there is no default customer location set in the store, the customer hasn't provided their address,
- // but a default shipping method is available for all locations,
- // then the shipping calculator will be hidden to avoid confusion.
- if ( ! hasFormattedAddress && ! isEditor ) {
+ // If the address is incomplete, and we're not in the editor, don't show anything.
+ if ( ! addressComplete && ! isEditor ) {
return null;
}
-
const formattedLocation = formatShippingAddress( shippingAddress );
return (
<>
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/shipping/test/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/shipping/test/index.tsx
index 686a5403..5181a9c6 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/shipping/test/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/cart-checkout/totals/shipping/test/index.tsx
@@ -229,11 +229,8 @@ describe( 'TotalsShipping', () => {
currency={ {
code: 'USD',
symbol: '$',
- minorUnit: 2,
- decimalSeparator: '.',
- prefix: '',
- suffix: '',
- thousandSeparator: ', ',
+ position: 'left',
+ precision: 2,
} }
values={ {
total_shipping: '0',
@@ -277,11 +274,8 @@ describe( 'TotalsShipping', () => {
currency={ {
code: 'USD',
symbol: '$',
- minorUnit: 2,
- decimalSeparator: '.',
- prefix: '',
- suffix: '',
- thousandSeparator: ', ',
+ position: 'left',
+ precision: 2,
} }
values={ {
total_shipping: '0',
@@ -301,51 +295,4 @@ describe( 'TotalsShipping', () => {
screen.queryByText( 'Add an address for shipping options' )
).not.toBeInTheDocument();
} );
- it( 'does show the calculator button when default rates are available and has formatted address', () => {
- baseContextHooks.useStoreCart.mockReturnValue( {
- cartItems: mockPreviewCart.items,
- cartTotals: [ mockPreviewCart.totals ],
- cartCoupons: mockPreviewCart.coupons,
- cartFees: mockPreviewCart.fees,
- cartNeedsShipping: mockPreviewCart.needs_shipping,
- shippingRates: mockPreviewCart.shipping_rates,
- shippingAddress: {
- ...shippingAddress,
- city: '',
- state: 'California',
- country: 'US',
- postcode: '',
- },
- billingAddress: mockPreviewCart.billing_address,
- cartHasCalculatedShipping: mockPreviewCart.has_calculated_shipping,
- isLoadingRates: false,
- } );
- render(
-
-
-
- );
- expect( screen.queryByText( 'Change address' ) ).toBeInTheDocument();
- expect(
- screen.queryByText( 'Add an address for shipping options' )
- ).not.toBeInTheDocument();
- } );
} );
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/combobox/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/combobox/index.tsx
index 4c80937e..75e257f7 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/combobox/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/combobox/index.tsx
@@ -6,7 +6,7 @@ import { __ } from '@wordpress/i18n';
import { useEffect, useRef } from '@wordpress/element';
import { withInstanceId } from '@wordpress/compose';
import { ComboboxControl } from 'wordpress-components';
-import { ValidationInputError } from '@woocommerce/blocks-components';
+import { ValidationInputError } from '@woocommerce/blocks-checkout';
import { isObject } from '@woocommerce/types';
import { useDispatch, useSelect } from '@wordpress/data';
import { VALIDATION_STORE_KEY } from '@woocommerce/block-data';
@@ -121,26 +121,14 @@ const Combobox = ( {
// Try to match.
const normalizedFilterValue =
filterValue.toLocaleUpperCase();
-
- // Try to find an exact match first using values.
- const foundValue = options.find(
+ const foundOption = options.find(
( option ) =>
+ option.label
+ .toLocaleUpperCase()
+ .startsWith( normalizedFilterValue ) ||
option.value.toLocaleUpperCase() ===
- normalizedFilterValue
+ normalizedFilterValue
);
-
- if ( foundValue ) {
- onChange( foundValue.value );
- return;
- }
-
- // Fallback to a label match.
- const foundOption = options.find( ( option ) =>
- option.label
- .toLocaleUpperCase()
- .startsWith( normalizedFilterValue )
- );
-
if ( foundOption ) {
onChange( foundOption.value );
}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/country-input/stories/index.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/country-input/stories/index.stories.tsx
deleted file mode 100644
index 5afc34b7..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/country-input/stories/index.stories.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * External dependencies
- */
-import type { Story, Meta } from '@storybook/react';
-import { useDispatch } from '@wordpress/data';
-import { useState, useEffect } from '@wordpress/element';
-import { VALIDATION_STORE_KEY } from '@woocommerce/block-data';
-
-/**
- * Internal dependencies
- */
-import { CountryInput, CountryInputWithCountriesProps } from '..';
-import { countries } from './countries-filler';
-
-type CountryCode = keyof typeof countries;
-
-export default {
- title: 'Base Components/CountryInput',
- component: CountryInput,
- args: {
- countries,
- autoComplete: 'off',
- id: 'country',
- label: 'Countries: ',
- required: false,
- },
- argTypes: {
- countries: { control: false },
- options: { table: { disable: true } },
- value: { control: false },
- },
- decorators: [ ( StoryComponent ) =>
],
-} as Meta< CountryInputWithCountriesProps >;
-
-const Template: Story< CountryInputWithCountriesProps > = ( args ) => {
- const [ selectedCountry, selectCountry ] = useState< CountryCode | '' >(
- ''
- );
- const { clearValidationError, showValidationError } =
- useDispatch( VALIDATION_STORE_KEY );
-
- useEffect( () => {
- showValidationError( 'country' );
- }, [ showValidationError ] );
-
- function updateCountry( country: CountryCode ) {
- clearValidationError( 'country' );
- selectCountry( country );
- }
-
- return (
-
updateCountry( value as CountryCode ) }
- value={ selectedCountry }
- />
- );
-};
-
-export const Default = Template.bind( {} );
-
-export const WithError = Template.bind( {} );
-WithError.args = {
- errorId: 'country',
- errorMessage: 'Please select a country',
- required: true,
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/form-token-field/stories/index.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/form-token-field/stories/index.stories.tsx
deleted file mode 100644
index 00d66f6b..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/form-token-field/stories/index.stories.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * External dependencies
- */
-import type { Story, Meta } from '@storybook/react';
-import { useState } from '@wordpress/element';
-
-/**
- * Internal dependencies
- */
-import FormTokenField, { Props } from '..';
-
-export default {
- title: 'Base Components/FormTokenField',
- argTypes: {},
- component: FormTokenField,
-} as Meta< Props >;
-
-const Template: Story< Props > = ( args ) => {
- const [ selected, setSelected ] = useState< string[] >( [] );
-
- return (
- setSelected( tokens ) }
- />
- );
-};
-
-const suggestions = [ 'foo', 'bar', 'baz' ];
-
-export const Default = Template.bind( {} );
-Default.args = {
- suggestions,
-};
-
-export const Disabled = Template.bind( {} );
-Disabled.args = {
- ...Default.args,
- disabled: true,
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/index.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/index.ts
index 3275bd60..fca0dbf0 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/index.ts
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/index.ts
@@ -10,6 +10,7 @@ export * from './filter-reset-button';
export * from './filter-submit-button';
export * from './form';
export * from './form-token-field';
+export * from './label';
export * from './load-more-button';
export * from './loading-mask';
export * from './noninteractive';
@@ -25,6 +26,9 @@ export * from './read-more';
export * from './reviews';
export * from './sidebar-layout';
export * from './snackbar-list';
+export * from './sort-select';
export * from './state-input';
export * from './summary';
export * from './tabs';
+export * from './textarea';
+export * from './title';
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/notice-banner/docs/docs.mdx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/notice-banner/docs/docs.mdx
deleted file mode 100644
index 38080370..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/notice-banner/docs/docs.mdx
+++ /dev/null
@@ -1,112 +0,0 @@
-import { Canvas, Meta, ArgTypes, Primary, Source } from '@storybook/blocks';
-
-import * as NoticeBannerStories from '../stories/index.stories.tsx';
-
-
-
-# NoticeBanner
-
-An informational UI displayed near the top of the store pages.
-
-
-
-## Design Guidelines
-
-`NoticeBanner` is an informational UI element displayed near the top of store pages used to indicate the result of an action, or to draw the user's attention to necessary information.
-
-Notices are color-coded to indicate the type of message being communicated, and also show an icon to reinforce the meaning of the message. The color and icon used for a notice are determined by the `status` prop.
-
-### Default Notices
-
-By default, noices are grey and used for less important messaging.
-
-
-
-### Informational Notices
-
-Blue notices with an info icon are used for general information for buyers, but do not require them to take an action.
-
-
-
-### Error Notices
-
-Red notices with an alert icon are used to show that an error has occurred and that the user needs to take action.
-
-
-
-### Success Notices
-
-Green notices with a success icon are used to show an action was successful.
-
-
-
-### Warning Notices
-
-Yellow notices with an alert icon are used to show that the user may need to take action, or needs to be aware of something important.
-
-
-
-### Error Summary
-
-If you provide a `summary` it will be displayed above the notice content. This can be useful for displaying a summary of errors in a list format.
-
-
-
-## Development Guidelines
-
-### Props
-
-
-
-### Usage examples
-
-#### Example: string based notices
-
-To display a basic notice, pass the notice message as a string:
-
-```jsx
-import { NoticeBanner } from '@woocommerce/base-components';
-
-Your message here ;
-```
-
-#### Example: components within notices
-
-For more complex markup, you can wrap any JSX element:
-
-```jsx
-import { NoticeBanner } from '@woocommerce/base-components';
-
-
-
- An error occurred: { errorDetails }.
-
- ;
-```
-
-#### Example: list of notices
-
-In this example, the summary prop is used to indicate to the user that there are errors in the form submission.
-
-```typescript
-import { NoticeBanner } from '@woocommerce/base-components';
-
-const errorMessages = [
- 'First error message',
- 'Second error message',
- 'Third error message',
-];
-
-
-
- { errorMessages.map( ( message ) => (
- { message }
- ) ) }
-
- ;
-```
-
-The list of error messages is rendered within the NoticeBanner component using an unordered list (``) and list items (``). The `status` prop is set to `error` to indicate that the notice represents an error message.
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/notice-banner/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/notice-banner/index.tsx
index 91464d8d..50dcbac6 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/notice-banner/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/notice-banner/index.tsx
@@ -14,20 +14,29 @@ import Button from '../button';
import { useSpokenMessage } from '../../hooks';
export interface NoticeBannerProps {
+ // The displayed message of a notice. Also used as the spoken message for assistive technology, unless `spokenMessage` is provided as an alternative message.
children: React.ReactNode;
- className?: string;
- isDismissible?: boolean;
- onRemove?: () => void;
- politeness?: 'polite' | 'assertive';
- spokenMessage?: string | React.ReactNode;
+ // Additional class name to give to the notice.
+ className?: string | undefined;
+ // Determines whether the notice can be dismissed by the user.
+ isDismissible?: boolean | undefined;
+ // Function called when dismissing the notice.
+ onRemove?: ( () => void ) | undefined;
+ // Determines the level of politeness for the notice for assistive technology.
+ politeness?: 'polite' | 'assertive' | undefined;
+ // Optionally provided to change the spoken message for assistive technology.
+ spokenMessage?: string | React.ReactNode | undefined;
+ // Status determines the color of the notice and the icon.
status: 'success' | 'error' | 'info' | 'warning' | 'default';
- summary?: string;
+ // Optional summary text shown above notice content, used when several notices are listed together.
+ summary?: string | undefined;
}
/**
- * NoticeBanner component.
+ * NoticeBanner: An informational UI displayed near the top of the store pages.
*
- * An informational UI displayed near the top of the store pages.
+ * Notices are informational UI displayed near the top of store pages. WooCommerce blocks, themes, and plugins all use
+ * notices to indicate the result of an action, or to draw the user’s attention to necessary information.
*/
const NoticeBanner = ( {
className,
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/notice-banner/stories/index.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/notice-banner/stories/index.stories.tsx
deleted file mode 100644
index 6e1cf16a..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/notice-banner/stories/index.stories.tsx
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- * External dependencies
- */
-import type { StoryFn, Meta } from '@storybook/react';
-
-/**
- * Internal dependencies
- */
-import NoticeBanner, { NoticeBannerProps } from '../';
-const availableStatus = [ 'default', 'success', 'error', 'warning', 'info' ];
-
-export default {
- title: 'Base Components/NoticeBanner',
- argTypes: {
- status: {
- control: 'radio',
- options: availableStatus,
- description:
- 'Status determines the color of the notice and the icon.',
- },
- isDismissible: {
- control: 'boolean',
- description:
- 'Determines whether the notice can be dismissed by the user. When set to true, a close icon will be displayed on the banner.',
- },
- summary: {
- description:
- 'Optional summary text shown above notice content, used when several notices are listed together.',
- control: 'text',
- },
- className: {
- description: 'Additional class name to give to the notice.',
- control: 'text',
- },
- spokenMessage: {
- description:
- 'Optionally provided to change the spoken message for assistive technology. If not provided, the `children` prop will be used as the spoken message.',
- control: 'text',
- },
- politeness: {
- control: 'radio',
- options: [ 'polite', 'assertive' ],
- description:
- 'Determines the level of politeness for the notice for assistive technology.',
- },
- children: {
- description:
- 'The displayed message of a notice. Also used as the spoken message for assistive technology, unless `spokenMessage` is provided as an alternative message.',
- disable: true,
- },
- onRemove: {
- description:
- 'Function called when dismissing the notice. When the close icon is clicked or the Escape key is pressed, this function will be called.',
- disable: true,
- },
- },
- component: NoticeBanner,
-} as Meta< NoticeBannerProps >;
-
-const Template: StoryFn< NoticeBannerProps > = ( args ) => {
- return ;
-};
-
-export const Default = Template.bind( {} );
-Default.args = {
- children: 'This is a default notice',
- status: 'default',
- isDismissible: true,
- summary: undefined,
- className: undefined,
- spokenMessage: undefined,
- politeness: undefined,
-};
-
-export const Error = Template.bind( {} );
-Error.args = {
- children: 'This is an error notice',
- status: 'error',
-};
-
-export const Warning = Template.bind( {} );
-Warning.args = {
- children: 'This is a warning notice',
- status: 'warning',
-};
-
-export const Info = Template.bind( {} );
-Info.args = {
- children: 'This is an informational notice',
- status: 'info',
-};
-
-export const Success = Template.bind( {} );
-Success.args = {
- children: 'This is a success notice',
- status: 'success',
-};
-
-export const ErrorSummary = Template.bind( {} );
-ErrorSummary.args = {
- summary: 'Please fix the following errors',
- children: (
-
- This is an error notice
- This is another error notice
-
- ),
- status: 'error',
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/pagination/style.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/pagination/style.scss
index 16d4f13d..598ec851 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/pagination/style.scss
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/pagination/style.scss
@@ -15,10 +15,6 @@
padding: 0.3em 0.6em;
min-width: 2.2em;
- &:not([disabled]) {
- cursor: pointer;
- }
-
@include breakpoint("<782px") {
padding: 0.1em 0.2em;
min-width: 1.6em;
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/price-slider/stories/index.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/price-slider/stories/index.stories.tsx
deleted file mode 100644
index 053dd1ac..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/price-slider/stories/index.stories.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * External dependencies
- */
-import type { Story, Meta } from '@storybook/react';
-import { useState } from '@wordpress/element';
-import { currencies, currencyControl } from '@woocommerce/storybook-controls';
-
-/**
- * Internal dependencies
- */
-import PriceSlider, { PriceSliderProps } from '..';
-
-export default {
- title: 'Base Components/PriceSlider',
- component: PriceSlider,
- args: {
- currency: currencies.USD,
- maxPrice: 5000,
- maxConstraint: 5000,
- minConstraint: 1000,
- minPrice: 1000,
- step: 250,
- },
- argTypes: {
- currency: currencyControl,
- maxPrice: { control: { disable: true } },
- minPrice: { control: { disable: true } },
- },
-} as Meta< PriceSliderProps >;
-
-const Template: Story< PriceSliderProps > = ( args ) => {
- const { maxPrice, minPrice, ...props } = args;
- // PriceSlider expects client to update min & max price, i.e. is a controlled component
- const [ min, setMin ] = useState( minPrice );
- const [ max, setMax ] = useState( maxPrice );
-
- return (
- {
- setMin( newMin );
- setMax( newMax );
- } }
- />
- );
-};
-
-export const Default = Template.bind( {} );
-
-export const WithoutInputs = Template.bind( {} );
-WithoutInputs.args = {
- showInputFields: false,
-};
-
-export const WithButton = Template.bind( {} );
-WithButton.args = {
- showFilterButton: true,
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/product-list/product-sort-select/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/product-list/product-sort-select/index.tsx
index 2d6b9aa9..e2ac3574 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/product-list/product-sort-select/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/product-list/product-sort-select/index.tsx
@@ -2,8 +2,7 @@
* External dependencies
*/
import { __ } from '@wordpress/i18n';
-import { SortSelect } from '@woocommerce/blocks-components';
-
+import SortSelect from '@woocommerce/base-components/sort-select';
/**
* Internal dependencies
*/
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/product-name/stories/index.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/product-name/stories/index.stories.tsx
deleted file mode 100644
index ff9551fc..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/product-name/stories/index.stories.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * External dependencies
- */
-import type { Story, Meta } from '@storybook/react';
-
-/**
- * Internal dependencies
- */
-import ProductName, { ProductNameProps } from '..';
-
-export default {
- title: 'Base Components/ProductName',
- component: ProductName,
- args: {
- name: 'Test product',
- permalink: '#',
- },
-} as Meta< ProductNameProps >;
-
-const Template: Story< ProductNameProps > = ( args ) => (
-
-);
-
-export const Default = Template.bind( {} );
-Default.args = {
- disabled: false,
-};
-
-export const DisabledProduct = Template.bind( {} );
-DisabledProduct.args = {
- disabled: true,
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/product-price/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/product-price/index.tsx
index 8ae0cba2..3a2b3ea9 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/product-price/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/product-price/index.tsx
@@ -280,7 +280,7 @@ const ProductPrice = ( {
console.error( 'Price formats need to include the ` ` tag.' );
}
- const isDiscounted = regularPrice && price && price < regularPrice;
+ const isDiscounted = regularPrice && price !== regularPrice;
let priceComponent = (
',
- price: 3000,
- currency: {
- code: 'USD',
- symbol: '$',
- thousandSeparator: ' ',
- decimalSeparator: '.',
- minorUnit: 2,
- prefix: '$',
- suffix: '',
- },
- },
-} as Meta< ProductPriceProps >;
-
-const Template: Story< ProductPriceProps > = ( args ) => (
-
-);
-
-export const Default = Template.bind( {} );
-Default.args = {};
-
-export const Sale = Template.bind( {} );
-Sale.args = {
- regularPrice: 4500,
-};
-
-export const Range = Template.bind( {} );
-Range.args = {
- maxPrice: 5000,
- minPrice: 3000,
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/quantity-selector/stories/index.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/quantity-selector/stories/index.stories.tsx
deleted file mode 100644
index 321c8404..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/quantity-selector/stories/index.stories.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * External dependencies
- */
-import { useArgs } from '@storybook/client-api';
-import type { Story, Meta } from '@storybook/react';
-
-/**
- * Internal dependencies
- */
-import QuantitySelector, { QuantitySelectorProps } from '..';
-
-export default {
- title: 'Base Components/QuantitySelector',
- component: QuantitySelector,
- args: {
- itemName: 'widgets',
- quantity: 1,
- },
-} as Meta< QuantitySelectorProps >;
-
-const Template: Story< QuantitySelectorProps > = ( args ) => {
- const [ {}, setArgs ] = useArgs();
-
- const onChange = ( newVal: number ) => {
- args.onChange?.( newVal );
- setArgs( { quantity: newVal } );
- };
-
- return ;
-};
-
-export const Default = Template.bind( {} );
-Default.args = {};
-
-export const Disabled = Template.bind( {} );
-Disabled.args = {
- disabled: true,
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/read-more/stories/index.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/read-more/stories/index.stories.tsx
deleted file mode 100644
index c283dc56..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/read-more/stories/index.stories.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * External dependencies
- */
-import type { Story, Meta } from '@storybook/react';
-
-/**
- * Internal dependencies
- */
-import ReadMore, { defaultProps, ReadMoreProps } from '..';
-
-export default {
- title: 'Base Components/ReadMore',
- component: ReadMore,
- args: defaultProps,
- argTypes: {
- children: { control: { disable: true } },
- },
-} as Meta< ReadMoreProps >;
-
-const LongText = (
- <>
-
- No! Alderaan is peaceful. We have no weapons. You can't
- possibly…
-
-
- As you wish. But with the blast shield down, I can't even see!
- How am I supposed to fight? Look, I ain't in this for your
- revolution, and I'm not in it for you, Princess. I expect to be
- well paid. I'm in it for the money.
-
-
- You mean it controls your actions?
-
- { ' ' }
- She must have hidden the plans in the escape pod.
- { ' ' }
-
- Send a detachment down to retrieve them, and see to it
- personally, Commander.
-
- There'll be no one to stop us this time!
-
- Escape is not his plan. I must face him, alone.
-
- Partially, but it also obeys your commands.
-
- Leave that to me. Send a distress signal, and inform the Senate
- that all on board were killed.
-
-
- A tremor in the Force. The last time I felt it was in the
- presence of my old master.
-
-
-
- >
-);
-
-const Template: Story< ReadMoreProps > = ( args ) => ;
-
-export const Default = Template.bind( {} );
-Default.args = {
- children: LongText,
- maxLines: 6,
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/reviews/review-sort-select/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/reviews/review-sort-select/index.tsx
index e8cb9928..7a4966b5 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/reviews/review-sort-select/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/reviews/review-sort-select/index.tsx
@@ -2,7 +2,7 @@
* External dependencies
*/
import { __ } from '@wordpress/i18n';
-import { SortSelect } from '@woocommerce/blocks-components';
+import SortSelect from '@woocommerce/base-components/sort-select';
import type { ChangeEventHandler } from 'react';
/**
@@ -12,7 +12,7 @@ import './style.scss';
interface ReviewSortSelectProps {
onChange: ChangeEventHandler;
- readOnly?: boolean;
+ readOnly: boolean;
value: 'most-recent' | 'highest-rating' | 'lowest-rating';
}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/docs/docs.mdx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/docs/docs.mdx
deleted file mode 100644
index b52bb45d..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/docs/docs.mdx
+++ /dev/null
@@ -1,90 +0,0 @@
-import { Canvas, Meta, ArgTypes } from '@storybook/blocks';
-
-import * as SnackbarListStories from '../stories/index.stories.tsx';
-import * as SnackbarStories from '../stories/snackbar.stories.tsx';
-
-
-
-# SnackbarList
-
-A temporary informational UI element displayed at the bottom of store pages.
-
-
-
-## Design Guidelines
-
-The Snackbar is a temporary informational UI element displayed at the bottom of store pages. WooCommerce blocks, themes, and plugins all use snackbar notices to indicate the result of a successful action. For example, adding something to the cart.
-
-Snackbar notices work in the same way as the NoticeBanner component, and support the same statuses and styles.
-
-### Default Snackbars
-
-By default, notices are grey and used for less important messaging.
-
-
-
-### Informational Snackbars
-
-Blue notices with an info icon are used for general information for buyers, but do not require action.
-
-
-
-### Error Snackbars
-
-Red notices with an alert icon are used to show that an error has occurred and that the user needs to take action.
-
-
-
-### Success Snackbars
-
-Green notices with a success icon are used to show an action was successful.
-
-
-
-### Warning Snackbars
-
-Yellow notices with an alert icon are used to show that the user may need to take action, or needs to be aware of something important.
-
-
-
-## Development Guidelines
-
-The component consuming `SnackbarList` is responsible for managing the notices state. The `SnackbarList` component will automatically remove notices from the list when they are dismissed by the user using the provided `onRemove` callback, and also when the notice times out after 10000ms.
-
-### Props
-
-
-
-### NoticeType
-
-Each notice can be provided with the following args.
-
-- The `id` (required) prop is used to identify the notice and should be unique.
-- The `content` (required) prop is the content to display in the notice.
-- The `status` prop is used to determine the color of the notice and the icon. Acceptable values are 'success', 'error', 'info', 'warning', and 'default'.
-- The `isDismissible` prop determines whether the notice can be dismissed by the user.
-- The `spokenMessage` prop is used to change the spoken message for assistive technology. If not provided, the `content` prop will be used as the spoken message.
-
-### Usage example
-
-To display snackbar notices, pass an array of `notices` to the `SnackbarList` component:
-
-```jsx
-import { SnackbarList } from '@woocommerce/base-components';
-
-const notices = [
- {
- id: '1',
- content: 'This is a snackbar notice.',
- status: 'default',
- isDismissible: true,
- spokenMessage: "Hello snackbar!"
- }
-];
-
-;
-```
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/snackbar.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/snackbar.tsx
index a4758e1e..41718d81 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/snackbar.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/snackbar.tsx
@@ -2,7 +2,6 @@
* External dependencies
*/
import { useEffect } from '@wordpress/element';
-import classNames from 'classnames';
/**
* Internal dependencies
@@ -10,18 +9,15 @@ import classNames from 'classnames';
import NoticeBanner, { NoticeBannerProps } from '../notice-banner';
import { SNACKBAR_TIMEOUT } from './constants';
-export interface SnackbarProps extends NoticeBannerProps {
- // A ref to the list that contains the snackbar.
- listRef?: React.MutableRefObject< HTMLDivElement | null >;
-}
-
-export const Snackbar = ( {
+const Snackbar = ( {
onRemove = () => void 0,
children,
listRef,
- className,
...notice
-}: SnackbarProps ) => {
+}: {
+ // A ref to the list that contains the snackbar.
+ listRef?: React.MutableRefObject< HTMLDivElement | null >;
+} & NoticeBannerProps ) => {
// Only set up the timeout dismiss if we're not explicitly dismissing.
useEffect( () => {
const timeoutHandle = setTimeout( () => {
@@ -33,10 +29,6 @@ export const Snackbar = ( {
return (
{
// Prevent focus loss by moving it to the list element.
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/stories/index.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/stories/index.stories.tsx
deleted file mode 100644
index 73c4874e..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/stories/index.stories.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * External dependencies
- */
-import type { StoryFn, Meta } from '@storybook/react';
-
-/**
- * Internal dependencies
- */
-import SnackbarList, { SnackbarListProps } from '../';
-
-export default {
- title: 'Base Components/SnackbarList',
- args: {
- notices: [
- {
- id: '1',
- content: 'This is a snackbar notice.',
- status: 'success',
- isDismissible: true,
- },
- ],
- className: undefined,
- onRemove: () => void 0,
- },
- argTypes: {
- className: {
- description: 'Additional class name to give to the notice.',
- control: 'text',
- },
- notices: {
- description:
- 'A list of notices to display as snackbars. Each notice must have an `id` and `content` prop.',
- disable: true,
- },
- onRemove: {
- description:
- 'Function called when dismissing the notice. When the close icon is clicked or the Escape key is pressed, this function will be called. This is also called when the notice times out after 10000ms.',
- disable: true,
- },
- },
- component: SnackbarList,
-} as Meta< SnackbarListProps >;
-
-const Template: StoryFn< SnackbarListProps > = ( args ) => {
- return ;
-};
-
-export const Default = Template.bind( {} );
-Default.args = {
- notices: [
- {
- id: '1',
- content: 'This is a snackbar notice.',
- status: 'default',
- isDismissible: true,
- },
- {
- id: '2',
- content: 'This is an informational snackbar notice.',
- status: 'info',
- isDismissible: true,
- },
- {
- id: '3',
- content: 'This is a snackbar error notice.',
- status: 'error',
- isDismissible: true,
- },
- {
- id: '4',
- content: 'This is a snackbar warning notice.',
- status: 'warning',
- isDismissible: true,
- },
- {
- id: '5',
- content: 'This is a snackbar success notice.',
- status: 'success',
- isDismissible: true,
- },
- ],
- className: undefined,
- onRemove: () => void 0,
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/stories/snackbar.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/stories/snackbar.stories.tsx
deleted file mode 100644
index 5b9f7dd3..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/stories/snackbar.stories.tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * External dependencies
- */
-import type { StoryFn, Meta } from '@storybook/react';
-
-/**
- * Internal dependencies
- */
-import Snackbar, { SnackbarProps } from '../snackbar';
-const availableStatus = [ 'default', 'success', 'error', 'warning', 'info' ];
-
-export default {
- title: 'Base Components/SnackbarList/Snackbar',
- argTypes: {
- status: {
- control: 'radio',
- options: availableStatus,
- description:
- 'Status determines the color of the notice and the icon.',
- },
- isDismissible: {
- control: 'boolean',
- description:
- 'Determines whether the notice can be dismissed by the user. When set to true, a close icon will be displayed on the banner.',
- },
- summary: {
- description:
- 'Optional summary text shown above notice content, used when several notices are listed together.',
- control: 'text',
- },
- className: {
- description: 'Additional class name to give to the notice.',
- control: 'text',
- },
- spokenMessage: {
- description:
- 'Optionally provided to change the spoken message for assistive technology. If not provided, the `children` prop will be used as the spoken message.',
- control: 'text',
- },
- politeness: {
- control: 'radio',
- options: [ 'polite', 'assertive' ],
- description:
- 'Determines the level of politeness for the notice for assistive technology.',
- },
- children: {
- description:
- 'The displayed message of a notice. Also used as the spoken message for assistive technology, unless `spokenMessage` is provided as an alternative message.',
- disable: true,
- },
- onRemove: {
- description:
- 'Function called when dismissing the notice. When the close icon is clicked or the Escape key is pressed, this function will be called.',
- disable: true,
- },
- },
- component: Snackbar,
-} as Meta< SnackbarProps >;
-
-const Template: StoryFn< SnackbarProps > = ( args ) => {
- return ;
-};
-
-export const Default = Template.bind( {} );
-Default.args = {
- children: 'This is a default snackbar notice',
- status: 'default',
- isDismissible: true,
- summary: undefined,
- className: undefined,
- spokenMessage: undefined,
- politeness: undefined,
-};
-
-export const Error = Template.bind( {} );
-Error.args = {
- children: 'This is an error snackbar notice',
- status: 'error',
-};
-
-export const Warning = Template.bind( {} );
-Warning.args = {
- children: 'This is a warning snackbar notice',
- status: 'warning',
-};
-
-export const Info = Template.bind( {} );
-Info.args = {
- children: 'This is an informational snackbar notice',
- status: 'info',
-};
-
-export const Success = Template.bind( {} );
-Success.args = {
- children: 'This is a success snackbar notice',
- status: 'success',
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/style.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/style.scss
index 8cc5b70e..75b68b8a 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/style.scss
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/snackbar-list/style.scss
@@ -9,32 +9,25 @@
bottom: $gap-large;
left: $gap-large;
right: $gap-large;
-}
-.wc-block-components-notice-snackbar-list .wc-block-components-notice-banner,
-.wc-block-components-notice-banner.wc-block-components-notice-snackbar {
- display: inline-flex;
- width: auto;
- max-width: 600px;
- pointer-events: all;
- border: 1px solid transparent;
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
- position: relative;
- margin: $gap-large $gap 0 0;
+ .wc-block-components-notice-banner {
+ display: inline-flex;
+ width: auto;
+ max-width: 600px;
+ pointer-events: all;
+ border: 1px solid transparent;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
+ position: relative;
+ margin: $gap-large 0 0;
- &.is-error,
- &.is-info,
- &.is-success {
- border-color: transparent;
- }
+ &.is-default {
+ border-color: $gray-800;
+ }
- &.is-default {
- border-color: $gray-800;
- }
-
- @include breakpoint("<782px") {
- width: 100%;
- max-width: none;
+ @include breakpoint("<782px") {
+ width: 100%;
+ max-width: none;
+ }
}
}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/state-input/state-input.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/state-input/state-input.tsx
index f8a61f16..5f6cf1ce 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/state-input/state-input.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/state-input/state-input.tsx
@@ -5,7 +5,7 @@ import { __ } from '@wordpress/i18n';
import { decodeEntities } from '@wordpress/html-entities';
import { useCallback, useMemo, useEffect, useRef } from '@wordpress/element';
import classnames from 'classnames';
-import { ValidatedTextInput } from '@woocommerce/blocks-components';
+import { ValidatedTextInput } from '@woocommerce/blocks-checkout';
/**
* Internal dependencies
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/tabs/stories/index.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/tabs/stories/index.stories.tsx
deleted file mode 100644
index 1be8237a..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/components/tabs/stories/index.stories.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * External dependencies
- */
-import type { Story, Meta } from '@storybook/react';
-import { useState } from '@wordpress/element';
-
-/**
- * Internal dependencies
- */
-import { __TabsWithoutInstanceId as Tabs, TabsProps } from '..';
-
-export default {
- title: 'Base Components/Tabs',
- component: Tabs,
- args: {
- tabs: [
- {
- name: 'firstTab',
- title: 'First Tab',
- content: Content of the first tab
,
- },
- {
- name: 'secondTab',
- title: 'Second Tab',
- content: Content of the second tab
,
- },
- ],
- initialTabName: 'firstTab',
- },
- argTypes: {
- initialTabName: {
- control: {
- type: 'select',
- options: [ 'firstTab', 'secondTab' ],
- },
- },
- },
-} as Meta< TabsProps >;
-
-const Template: Story< TabsProps > = ( args ) => {
- const [ initialTab, setInitialTab ] = useState( args.initialTabName );
-
- return (
- {
- setInitialTab( newTabName );
- } }
- { ...args }
- />
- );
-};
-
-export const Default = Template.bind( {} );
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/context/hooks/payment-methods/use-payment-method-interface.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/context/hooks/payment-methods/use-payment-method-interface.ts
index ac45027d..b5dc3ece 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/context/hooks/payment-methods/use-payment-method-interface.ts
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/context/hooks/payment-methods/use-payment-method-interface.ts
@@ -16,7 +16,7 @@ import {
PAYMENT_STORE_KEY,
CART_STORE_KEY,
} from '@woocommerce/block-data';
-import { ValidationInputError } from '@woocommerce/blocks-components';
+import { ValidationInputError } from '@woocommerce/blocks-checkout';
/**
* Internal dependencies
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/context/hooks/use-checkout-address.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/context/hooks/use-checkout-address.ts
index 15d52462..c60534e7 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/context/hooks/use-checkout-address.ts
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/context/hooks/use-checkout-address.ts
@@ -24,6 +24,8 @@ interface CheckoutAddress {
setShippingAddress: ( data: Partial< ShippingAddress > ) => void;
setBillingAddress: ( data: Partial< BillingAddress > ) => void;
setEmail: ( value: string ) => void;
+ setBillingPhone: ( value: string ) => void;
+ setShippingPhone: ( value: string ) => void;
useShippingAsBilling: boolean;
setUseShippingAsBilling: ( useShippingAsBilling: boolean ) => void;
defaultAddressFields: AddressFields;
@@ -57,13 +59,28 @@ export const useCheckoutAddress = (): CheckoutAddress => {
} = useCustomerData();
const setEmail = useCallback(
- ( value: string ) =>
+ ( value ) =>
void setBillingAddress( {
email: value,
} ),
[ setBillingAddress ]
);
+ const setBillingPhone = useCallback(
+ ( value ) =>
+ void setBillingAddress( {
+ phone: value,
+ } ),
+ [ setBillingAddress ]
+ );
+
+ const setShippingPhone = useCallback(
+ ( value ) =>
+ void setShippingAddress( {
+ phone: value,
+ } ),
+ [ setShippingAddress ]
+ );
const forcedBillingAddress: boolean = getSetting(
'forcedBillingAddress',
false
@@ -74,6 +91,8 @@ export const useCheckoutAddress = (): CheckoutAddress => {
setShippingAddress,
setBillingAddress,
setEmail,
+ setBillingPhone,
+ setShippingPhone,
defaultAddressFields,
useShippingAsBilling,
setUseShippingAsBilling: __internalSetUseShippingAsBilling,
@@ -82,8 +101,8 @@ export const useCheckoutAddress = (): CheckoutAddress => {
! forcedBillingAddress && needsShipping && ! prefersCollection,
showShippingMethods: needsShipping && ! prefersCollection,
showBillingFields:
- ! needsShipping || ! useShippingAsBilling || !! prefersCollection,
+ ! needsShipping || ! useShippingAsBilling || prefersCollection,
forcedBillingAddress,
- useBillingAsShipping: forcedBillingAddress || !! prefersCollection,
+ useBillingAsShipping: forcedBillingAddress || prefersCollection,
};
};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/utils/test/errors.js b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/utils/test/errors.js
index fca81558..50b5bd6a 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/utils/test/errors.js
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/utils/test/errors.js
@@ -35,10 +35,12 @@ describe( 'formatError', () => {
const mockResponse = new Response( mockMalformedJson, { status: 400 } );
const error = await formatError( mockResponse );
+ const expectedError = {
+ message:
+ 'invalid json response body at reason: Unexpected end of JSON input',
+ type: 'general',
+ };
- expect( error.message ).toContain(
- 'invalid json response body at reason:'
- );
- expect( error.type ).toEqual( 'general' );
+ expect( error ).toEqual( expectedError );
} );
} );
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/express-payment/cart-express-payment.js b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/express-payment/cart-express-payment.js
index 78327a1c..9dfafb95 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/express-payment/cart-express-payment.js
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/express-payment/cart-express-payment.js
@@ -4,7 +4,7 @@
import { __ } from '@wordpress/i18n';
import { useExpressPaymentMethods } from '@woocommerce/base-context/hooks';
import { noticeContexts } from '@woocommerce/base-context';
-import { StoreNoticesContainer } from '@woocommerce/blocks-components';
+import { StoreNoticesContainer } from '@woocommerce/blocks-checkout';
import LoadingMask from '@woocommerce/base-components/loading-mask';
import { useSelect } from '@wordpress/data';
import { CHECKOUT_STORE_KEY, PAYMENT_STORE_KEY } from '@woocommerce/block-data';
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/express-payment/checkout-express-payment.js b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/express-payment/checkout-express-payment.js
index bd995b38..2ac0fdb5 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/express-payment/checkout-express-payment.js
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/express-payment/checkout-express-payment.js
@@ -3,7 +3,8 @@
*/
import { __ } from '@wordpress/i18n';
import { useEditorContext, noticeContexts } from '@woocommerce/base-context';
-import { Title, StoreNoticesContainer } from '@woocommerce/blocks-components';
+import { StoreNoticesContainer } from '@woocommerce/blocks-checkout';
+import Title from '@woocommerce/base-components/title';
import LoadingMask from '@woocommerce/base-components/loading-mask';
import { CURRENT_USER_IS_ADMIN } from '@woocommerce/settings';
import { CHECKOUT_STORE_KEY, PAYMENT_STORE_KEY } from '@woocommerce/block-data';
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/payment-method-error-boundary.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/payment-method-error-boundary.tsx
index 6f43e7de..4c997d08 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/payment-method-error-boundary.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart-checkout-shared/payment-methods/payment-method-error-boundary.tsx
@@ -4,7 +4,7 @@
import { __ } from '@wordpress/i18n';
import { useState } from '@wordpress/element';
import { CURRENT_USER_IS_ADMIN } from '@woocommerce/settings';
-import { StoreNoticesContainer } from '@woocommerce/blocks-components';
+import { StoreNoticesContainer } from '@woocommerce/blocks-checkout';
import { noticeContexts } from '@woocommerce/base-context';
import { NoticeType } from '@woocommerce/types';
interface PaymentMethodErrorBoundaryProps {
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/block.js b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/block.js
index 46c3c7c1..fdc533f8 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/block.js
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/block.js
@@ -14,8 +14,10 @@ import {
CartProvider,
noticeContexts,
} from '@woocommerce/base-context';
-import { SlotFillProvider } from '@woocommerce/blocks-checkout';
-import { StoreNoticesContainer } from '@woocommerce/blocks-components';
+import {
+ SlotFillProvider,
+ StoreNoticesContainer,
+} from '@woocommerce/blocks-checkout';
/**
* Internal dependencies
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-coupon-form/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-coupon-form/block.tsx
index ee8f18af..7983eae4 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-coupon-form/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-coupon-form/block.tsx
@@ -4,7 +4,7 @@
import { TotalsCoupon } from '@woocommerce/base-components/cart-checkout';
import { useStoreCartCoupons } from '@woocommerce/base-context/hooks';
import { getSetting } from '@woocommerce/settings';
-import { TotalsWrapper } from '@woocommerce/blocks-components';
+import { TotalsWrapper } from '@woocommerce/blocks-checkout';
const Block = ( { className }: { className: string } ): JSX.Element | null => {
const couponsEnabled = getSetting( 'couponsEnabled', true );
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-discount/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-discount/block.tsx
index c383d400..251cb7df 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-discount/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-discount/block.tsx
@@ -2,13 +2,15 @@
* External dependencies
*/
import { TotalsDiscount } from '@woocommerce/base-components/cart-checkout';
-import { TotalsWrapper } from '@woocommerce/blocks-components';
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
import {
useStoreCartCoupons,
useStoreCart,
} from '@woocommerce/base-context/hooks';
-import { ExperimentalDiscountsMeta } from '@woocommerce/blocks-checkout';
+import {
+ ExperimentalDiscountsMeta,
+ TotalsWrapper,
+} from '@woocommerce/blocks-checkout';
const DiscountSlotFill = (): JSX.Element => {
// Prepare props to pass to the ExperimentalOrderMeta slot fill. We need to pluck out receiveCart.
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-fee/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-fee/block.tsx
index fbe49286..1a118225 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-fee/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-fee/block.tsx
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { TotalsFees, TotalsWrapper } from '@woocommerce/blocks-components';
+import { TotalsFees, TotalsWrapper } from '@woocommerce/blocks-checkout';
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
import { useStoreCart } from '@woocommerce/base-context/hooks';
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-shipping/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-shipping/block.tsx
index 87430ace..e29d0f86 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-shipping/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-shipping/block.tsx
@@ -4,7 +4,7 @@
import { TotalsShipping } from '@woocommerce/base-components/cart-checkout';
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
import { useStoreCart } from '@woocommerce/base-context/hooks';
-import { TotalsWrapper } from '@woocommerce/blocks-components';
+import { TotalsWrapper } from '@woocommerce/blocks-checkout';
import { getSetting } from '@woocommerce/settings';
const Block = ( { className }: { className: string } ): JSX.Element | null => {
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-subtotal/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-subtotal/block.tsx
index 622a835c..1fbed502 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-subtotal/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-subtotal/block.tsx
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { Subtotal, TotalsWrapper } from '@woocommerce/blocks-components';
+import { Subtotal, TotalsWrapper } from '@woocommerce/blocks-checkout';
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
import { useStoreCart } from '@woocommerce/base-context/hooks';
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-taxes/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-taxes/block.tsx
index 1cc6e1f2..6c8c1246 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-taxes/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/inner-blocks/cart-order-summary-taxes/block.tsx
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { TotalsTaxes, TotalsWrapper } from '@woocommerce/blocks-components';
+import { TotalsTaxes, TotalsWrapper } from '@woocommerce/blocks-checkout';
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
import { useStoreCart } from '@woocommerce/base-context/hooks';
import { getSetting } from '@woocommerce/settings';
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/style.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/style.scss
index 125a7521..6098c4a1 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/style.scss
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/cart/style.scss
@@ -96,9 +96,6 @@
display: none;
}
}
- table.wc-block-cart-items {
- margin: 0;
- }
}
.is-medium,
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/address-card/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/address-card/index.tsx
index e99141f9..363b4f2c 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/address-card/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/address-card/index.tsx
@@ -7,7 +7,6 @@ import type {
CartShippingAddress,
CartBillingAddress,
} from '@woocommerce/types';
-import { AddressFields, AddressField } from '@woocommerce/settings';
/**
* Internal dependencies
@@ -18,12 +17,12 @@ const AddressCard = ( {
address,
onEdit,
target,
- fieldConfig,
+ showPhoneField,
}: {
address: CartShippingAddress | CartBillingAddress;
onEdit: () => void;
target: string;
- fieldConfig: Record< keyof AddressFields, Partial< AddressField > >;
+ showPhoneField: boolean;
} ): JSX.Element | null => {
return (
@@ -34,7 +33,7 @@ const AddressCard = ( {
{ [
address.address_1,
- ! fieldConfig.address_2.hidden && address.address_2,
+ address.address_2,
address.city,
address.state,
address.postcode,
@@ -47,7 +46,7 @@ const AddressCard = ( {
{ field }
) ) }
- { address.phone && ! fieldConfig.phone.hidden ? (
+ { address.phone && showPhoneField ? (
{
- const {
- shippingAddress,
- billingAddress,
- setShippingAddress,
- useBillingAsShipping,
- } = useCheckoutAddress();
+ const { billingAddress, setShippingAddress, useBillingAsShipping } =
+ useCheckoutAddress();
const { isEditor } = useEditorContext();
// Syncs shipping address with billing address if "Force shipping to the customer billing address" is enabled.
@@ -74,17 +71,11 @@ const Block = ( {
address_2: {
hidden: ! showApartmentField,
},
- phone: {
- hidden: ! showPhoneField,
- required: requirePhoneField,
- },
};
}, [
showCompanyField,
requireCompanyField,
showApartmentField,
- showPhoneField,
- requirePhoneField,
] ) as Record< keyof AddressFields, Partial< AddressField > >;
const WrapperComponent = isEditor ? Noninteractive : Fragment;
@@ -98,20 +89,6 @@ const Block = ( {
cartDataLoaded: store.hasFinishedResolution( 'getCartData' ),
};
} );
-
- // Default editing state for CustomerAddress component comes from the current address and whether or not we're in the editor.
- const hasAddress = !! (
- billingAddress.address_1 &&
- ( billingAddress.first_name || billingAddress.last_name )
- );
- const { email, ...billingAddressWithoutEmail } = billingAddress;
- const billingMatchesShipping = isShallowEqual(
- billingAddressWithoutEmail,
- shippingAddress
- );
- const defaultEditingAddress =
- isEditor || ! hasAddress || billingMatchesShipping;
-
return (
<>
@@ -119,7 +96,9 @@ const Block = ( {
{ cartDataLoaded ? (
) : null }
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-billing-address-block/customer-address.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-billing-address-block/customer-address.tsx
index 32adfb54..4916b90b 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-billing-address-block/customer-address.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-billing-address-block/customer-address.tsx
@@ -16,24 +16,35 @@ import { VALIDATION_STORE_KEY } from '@woocommerce/block-data';
* Internal dependencies
*/
import AddressWrapper from '../../address-wrapper';
+import PhoneNumber from '../../phone-number';
import AddressCard from '../../address-card';
const CustomerAddress = ( {
addressFieldsConfig,
- defaultEditing = false,
+ showPhoneField,
+ requirePhoneField,
+ forceEditing = false,
}: {
addressFieldsConfig: Record< keyof AddressFields, Partial< AddressField > >;
- defaultEditing?: boolean;
+ showPhoneField: boolean;
+ requirePhoneField: boolean;
+ forceEditing?: boolean;
} ) => {
const {
defaultAddressFields,
billingAddress,
setShippingAddress,
setBillingAddress,
+ setBillingPhone,
+ setShippingPhone,
useBillingAsShipping,
} = useCheckoutAddress();
const { dispatchCheckoutEvent } = useStoreEvents();
- const [ editing, setEditing ] = useState( defaultEditing );
+ const hasAddress = !! (
+ billingAddress.address_1 &&
+ ( billingAddress.first_name || billingAddress.last_name )
+ );
+ const [ editing, setEditing ] = useState( ! hasAddress || forceEditing );
// Forces editing state if store has errors.
const { hasValidationErrors, invalidProps } = useSelect( ( select ) => {
@@ -43,9 +54,8 @@ const CustomerAddress = ( {
invalidProps: Object.keys( billingAddress )
.filter( ( key ) => {
return (
- key !== 'email' &&
store.getValidationError( 'billing_' + key ) !==
- undefined
+ undefined
);
} )
.filter( Boolean ),
@@ -87,10 +97,10 @@ const CustomerAddress = ( {
onEdit={ () => {
setEditing( true );
} }
- fieldConfig={ addressFieldsConfig }
+ showPhoneField={ showPhoneField }
/>
),
- [ billingAddress, addressFieldsConfig ]
+ [ billingAddress, showPhoneField ]
);
const renderAddressFormComponent = useCallback(
@@ -104,13 +114,39 @@ const CustomerAddress = ( {
fields={ addressFieldKeys }
fieldConfig={ addressFieldsConfig }
/>
+ { showPhoneField && (
+
{
+ setBillingPhone( value );
+ dispatchCheckoutEvent( 'set-phone-number', {
+ step: 'billing',
+ } );
+ if ( useBillingAsShipping ) {
+ setShippingPhone( value );
+ dispatchCheckoutEvent( 'set-phone-number', {
+ step: 'billing',
+ } );
+ }
+ } }
+ />
+ ) }
>
),
[
addressFieldKeys,
addressFieldsConfig,
billingAddress,
+ dispatchCheckoutEvent,
onChangeAddress,
+ requirePhoneField,
+ setBillingPhone,
+ setShippingPhone,
+ showPhoneField,
+ useBillingAsShipping,
]
);
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-billing-address-block/frontend.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-billing-address-block/frontend.tsx
index e239e6ef..6725c4e9 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-billing-address-block/frontend.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-billing-address-block/frontend.tsx
@@ -2,6 +2,7 @@
* External dependencies
*/
import classnames from 'classnames';
+import { useRef, useEffect } from '@wordpress/element';
import { withFilteredAttributes } from '@woocommerce/shared-hocs';
import { FormStep } from '@woocommerce/blocks-components';
import { useCheckoutAddress } from '@woocommerce/base-context/hooks';
@@ -42,8 +43,21 @@ const FrontendBlock = ( {
showCompanyField,
showPhoneField,
} = useCheckoutBlockContext();
- const { showBillingFields, forcedBillingAddress, useBillingAsShipping } =
- useCheckoutAddress();
+ const {
+ showBillingFields,
+ forcedBillingAddress,
+ useBillingAsShipping,
+ useShippingAsBilling,
+ } = useCheckoutAddress();
+
+ // If initial state was true, force editing to true so address fields are visible if the useShippingAsBilling option is unchecked.
+ const toggledUseShippingAsBilling = useRef( useShippingAsBilling );
+
+ useEffect( () => {
+ if ( useShippingAsBilling ) {
+ toggledUseShippingAsBilling.current = true;
+ }
+ }, [ useShippingAsBilling ] );
if ( ! showBillingFields && ! useBillingAsShipping ) {
return null;
@@ -72,6 +86,7 @@ const FrontendBlock = ( {
showCompanyField={ showCompanyField }
showPhoneField={ showPhoneField }
requirePhoneField={ requirePhoneField }
+ forceEditing={ toggledUseShippingAsBilling.current }
/>
{ children }
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-contact-information-block/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-contact-information-block/block.tsx
index 68a0e3fa..416e0366 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-contact-information-block/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-contact-information-block/block.tsx
@@ -8,15 +8,19 @@ import {
noticeContexts,
} from '@woocommerce/base-context';
import { getSetting } from '@woocommerce/settings';
-import { CheckboxControl } from '@woocommerce/blocks-checkout';
import {
- StoreNoticesContainer,
+ CheckboxControl,
ValidatedTextInput,
-} from '@woocommerce/blocks-components';
+ StoreNoticesContainer,
+} from '@woocommerce/blocks-checkout';
import { useDispatch, useSelect } from '@wordpress/data';
import { CHECKOUT_STORE_KEY } from '@woocommerce/block-data';
import { isEmail } from '@wordpress/url';
+/**
+ * Internal dependencies
+ */
+
const Block = (): JSX.Element => {
const { customerId, shouldCreateAccount } = useSelect( ( select ) => {
const store = select( CHECKOUT_STORE_KEY );
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-fields-block/frontend.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-fields-block/frontend.tsx
index 9fd1dfe7..ad682af3 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-fields-block/frontend.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-fields-block/frontend.tsx
@@ -3,8 +3,6 @@
*/
import classnames from 'classnames';
import { Main } from '@woocommerce/base-components/sidebar-layout';
-import { useStoreEvents } from '@woocommerce/base-context/hooks';
-import { useEffect } from '@wordpress/element';
const FrontendBlock = ( {
children,
@@ -13,14 +11,6 @@ const FrontendBlock = ( {
children: JSX.Element;
className?: string;
} ): JSX.Element => {
- const { dispatchCheckoutEvent } = useStoreEvents();
-
- // Ignore changes to dispatchCheckoutEvent callback so this is ran on first mount only.
- useEffect( () => {
- dispatchCheckoutEvent( 'render-checkout-form' );
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [] );
-
return (
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-fields-block/style.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-fields-block/style.scss
index 808a5837..81f2689a 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-fields-block/style.scss
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-fields-block/style.scss
@@ -18,11 +18,11 @@
display: flex;
flex-wrap: wrap;
justify-content: space-between;
- gap: 0 calc(#{$gap-smaller} * 2); // Required for spacing especially when using flex-grow
.wc-block-components-text-input,
+ .wc-block-components-country-input,
.wc-block-components-state-input {
- flex: 1 0 calc(50% - #{$gap-smaller}); // "flex-grow = 1" allows the input to grow to fill the space
+ flex: 0 0 calc(50% - #{$gap-smaller});
box-sizing: border-box;
&:nth-of-type(2),
@@ -33,8 +33,7 @@
.wc-block-components-address-form__company,
.wc-block-components-address-form__address_1,
- .wc-block-components-address-form__address_2,
- .wc-block-components-country-input {
+ .wc-block-components-address-form__address_2 {
flex: 0 0 100%;
}
}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-cart-items/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-cart-items/block.tsx
index 6abc1a48..e84596ec 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-cart-items/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-cart-items/block.tsx
@@ -3,7 +3,7 @@
*/
import { OrderSummary } from '@woocommerce/base-components/cart-checkout';
import { useStoreCart } from '@woocommerce/base-context/hooks';
-import { TotalsWrapper } from '@woocommerce/blocks-components';
+import { TotalsWrapper } from '@woocommerce/blocks-checkout';
const Block = ( { className }: { className: string } ): JSX.Element => {
const { cartItems } = useStoreCart();
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-coupon-form/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-coupon-form/block.tsx
index 1ec6d109..03e34d42 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-coupon-form/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-coupon-form/block.tsx
@@ -4,7 +4,7 @@
import { TotalsCoupon } from '@woocommerce/base-components/cart-checkout';
import { useStoreCartCoupons } from '@woocommerce/base-context/hooks';
import { getSetting } from '@woocommerce/settings';
-import { TotalsWrapper } from '@woocommerce/blocks-components';
+import { TotalsWrapper } from '@woocommerce/blocks-checkout';
const Block = ( {
className = '',
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-discount/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-discount/block.tsx
index 45884931..4068d6a5 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-discount/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-discount/block.tsx
@@ -2,13 +2,15 @@
* External dependencies
*/
import { TotalsDiscount } from '@woocommerce/base-components/cart-checkout';
-import { TotalsWrapper } from '@woocommerce/blocks-components';
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
import {
useStoreCartCoupons,
useStoreCart,
} from '@woocommerce/base-context/hooks';
-import { ExperimentalDiscountsMeta } from '@woocommerce/blocks-checkout';
+import {
+ ExperimentalDiscountsMeta,
+ TotalsWrapper,
+} from '@woocommerce/blocks-checkout';
const DiscountSlotFill = (): JSX.Element => {
// Prepare props to pass to the ExperimentalOrderMeta slot fill. We need to pluck out receiveCart.
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-fee/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-fee/block.tsx
index ce92817e..6520d697 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-fee/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-fee/block.tsx
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { TotalsFees, TotalsWrapper } from '@woocommerce/blocks-components';
+import { TotalsFees, TotalsWrapper } from '@woocommerce/blocks-checkout';
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
import { useStoreCart } from '@woocommerce/base-context/hooks';
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-subtotal/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-subtotal/block.tsx
index 622a835c..1fbed502 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-subtotal/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-subtotal/block.tsx
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { Subtotal, TotalsWrapper } from '@woocommerce/blocks-components';
+import { Subtotal, TotalsWrapper } from '@woocommerce/blocks-checkout';
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
import { useStoreCart } from '@woocommerce/base-context/hooks';
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-taxes/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-taxes/block.tsx
index b145da90..2df7bd68 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-taxes/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-order-summary-taxes/block.tsx
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { TotalsTaxes, TotalsWrapper } from '@woocommerce/blocks-components';
+import { TotalsTaxes, TotalsWrapper } from '@woocommerce/blocks-checkout';
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
import { useStoreCart } from '@woocommerce/base-context/hooks';
import { getSetting } from '@woocommerce/settings';
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-payment-block/frontend.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-payment-block/frontend.tsx
index 3b018824..c590e7ba 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-payment-block/frontend.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-payment-block/frontend.tsx
@@ -4,12 +4,10 @@
import classnames from 'classnames';
import { useStoreCart } from '@woocommerce/base-context/hooks';
import { withFilteredAttributes } from '@woocommerce/shared-hocs';
-import {
- FormStep,
- StoreNoticesContainer,
-} from '@woocommerce/blocks-components';
+import { FormStep } from '@woocommerce/blocks-components';
import { useSelect } from '@wordpress/data';
import { CHECKOUT_STORE_KEY } from '@woocommerce/block-data';
+import { StoreNoticesContainer } from '@woocommerce/blocks-checkout';
import { noticeContexts } from '@woocommerce/base-context';
/**
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-pickup-options-block/style.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-pickup-options-block/style.scss
index 4689825f..1215c024 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-pickup-options-block/style.scss
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-pickup-options-block/style.scss
@@ -1,68 +1,66 @@
.wc-block-checkout__pickup-options,
.wp-block-woocommerce-checkout-pickup-options-block {
- .wc-block-components-local-pickup-rates-control {
- .wc-block-components-radio-control__option {
- @include with-translucent-border(0 0 1px);
- margin: 0;
- padding: em($gap-small) 0 em($gap-small) em($gap-largest);
+ .wc-block-components-radio-control__option {
+ @include with-translucent-border(0 0 1px);
+ margin: 0;
+ padding: em($gap-small) 0 em($gap-small) em($gap-largest);
+ }
+ .wc-block-components-shipping-rates-control__no-results-notice {
+ margin: em($gap-small) 0;
+ }
+ .wc-block-components-radio-control .wc-block-components-radio-control__input {
+ top: auto;
+ transform: none;
+ margin-top: 1px;
+ }
+ .wc-block-components-radio-control__option-layout {
+ display: block;
+ }
+ .wc-block-components-radio-control__label-group {
+ width: 100%;
+ display: flex;
+
+ > :last-child {
+ margin-left: auto;
}
- .wc-block-components-shipping-rates-control__no-results-notice {
- margin: em($gap-small) 0;
- }
- .wc-block-components-radio-control .wc-block-components-radio-control__input {
- top: auto;
- transform: none;
- margin-top: 1px;
- }
- .wc-block-components-radio-control__option-layout {
+ }
+ .wc-block-components-radio-control__description-group {
+ display: none;
+ }
+ .wc-block-components-radio-control__option-checked {
+ .wc-block-components-radio-control__description-group {
display: block;
}
- .wc-block-components-radio-control__label-group {
- width: 100%;
- display: flex;
+ }
+ .wc-block-components-radio-control__label-group {
+ em {
+ text-transform: uppercase;
+ font-style: inherit;
+ }
+ }
+ .wc-block-components-radio-control__description-group {
+ width: 100%;
+ box-sizing: border-box;
+ background-color: $gray-100;
+ border-radius: $universal-border-radius;
+ padding: 1px em($gap-small);
+ margin-top: em($gap-smaller);
+ @include font-size(regular);
+ }
+ .wc-block-components-radio-control__description,
+ .wc-block-components-radio-control__secondary-description {
+ width: 100%;
+ text-align: left;
+ margin: em($gap-small) 0;
+ display: block;
+ }
+ .wc-block-components-radio-control__secondary-description {
+ color: $gray-700;
- > :last-child {
- margin-left: auto;
- }
- }
- .wc-block-components-radio-control__description-group {
- display: none;
- }
- .wc-block-components-radio-control__option-checked {
- .wc-block-components-radio-control__description-group {
- display: block;
- }
- }
- .wc-block-components-radio-control__label-group {
- em {
- text-transform: uppercase;
- font-style: inherit;
- }
- }
- .wc-block-components-radio-control__description-group {
- width: 100%;
- box-sizing: border-box;
- background-color: $gray-100;
- border-radius: $universal-border-radius;
- padding: 1px em($gap-small);
- margin-top: em($gap-smaller);
- @include font-size(regular);
- }
- .wc-block-components-radio-control__description,
- .wc-block-components-radio-control__secondary-description {
- width: 100%;
- text-align: left;
- margin: em($gap-small) 0;
- display: block;
- }
- .wc-block-components-radio-control__secondary-description {
- color: $gray-700;
-
- > svg {
- vertical-align: middle;
- margin-top: -4px;
- fill: currentColor;
- }
+ > svg {
+ vertical-align: middle;
+ margin-top: -4px;
+ fill: currentColor;
}
}
}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-address-block/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-address-block/block.tsx
index 29bf5e45..1ee5785f 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-address-block/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-address-block/block.tsx
@@ -9,8 +9,10 @@ import {
useEditorContext,
noticeContexts,
} from '@woocommerce/base-context';
-import { CheckboxControl } from '@woocommerce/blocks-checkout';
-import { StoreNoticesContainer } from '@woocommerce/blocks-components';
+import {
+ CheckboxControl,
+ StoreNoticesContainer,
+} from '@woocommerce/blocks-checkout';
import Noninteractive from '@woocommerce/base-components/noninteractive';
import type {
BillingAddress,
@@ -80,17 +82,11 @@ const Block = ( {
address_2: {
hidden: ! showApartmentField,
},
- phone: {
- hidden: ! showPhoneField,
- required: requirePhoneField,
- },
};
}, [
showCompanyField,
requireCompanyField,
showApartmentField,
- showPhoneField,
- requirePhoneField,
] ) as Record< keyof AddressFields, Partial< AddressField > >;
const WrapperComponent = isEditor ? Noninteractive : Fragment;
@@ -109,9 +105,6 @@ const Block = ( {
};
} );
- // Default editing state for CustomerAddress component comes from the current address and whether or not we're in the editor.
- const defaultEditingAddress = isEditor || ! hasAddress;
-
return (
<>
@@ -119,24 +112,27 @@ const Block = ( {
{ cartDataLoaded ? (
) : null }
- {
- setUseShippingAsBilling( checked );
- if ( checked ) {
- syncBillingWithShipping();
- }
- } }
- />
+ { hasAddress && (
+ {
+ setUseShippingAsBilling( checked );
+ if ( checked ) {
+ syncBillingWithShipping();
+ }
+ } }
+ />
+ ) }
>
);
};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-address-block/customer-address.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-address-block/customer-address.tsx
index cd327901..bb75164a 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-address-block/customer-address.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-address-block/customer-address.tsx
@@ -3,7 +3,11 @@
*/
import { useState, useCallback, useEffect } from '@wordpress/element';
import { AddressForm } from '@woocommerce/base-components/cart-checkout';
-import { useCheckoutAddress, useStoreEvents } from '@woocommerce/base-context';
+import {
+ useCheckoutAddress,
+ useStoreEvents,
+ useEditorContext,
+} from '@woocommerce/base-context';
import type {
ShippingAddress,
AddressField,
@@ -16,24 +20,34 @@ import { VALIDATION_STORE_KEY } from '@woocommerce/block-data';
* Internal dependencies
*/
import AddressWrapper from '../../address-wrapper';
+import PhoneNumber from '../../phone-number';
import AddressCard from '../../address-card';
const CustomerAddress = ( {
addressFieldsConfig,
- defaultEditing = false,
+ showPhoneField,
+ requirePhoneField,
}: {
addressFieldsConfig: Record< keyof AddressFields, Partial< AddressField > >;
- defaultEditing?: boolean;
+ showPhoneField: boolean;
+ requirePhoneField: boolean;
} ) => {
const {
defaultAddressFields,
shippingAddress,
setShippingAddress,
setBillingAddress,
+ setShippingPhone,
+ setBillingPhone,
useShippingAsBilling,
} = useCheckoutAddress();
const { dispatchCheckoutEvent } = useStoreEvents();
- const [ editing, setEditing ] = useState( defaultEditing );
+ const { isEditor } = useEditorContext();
+ const hasAddress = !! (
+ shippingAddress.address_1 &&
+ ( shippingAddress.first_name || shippingAddress.last_name )
+ );
+ const [ editing, setEditing ] = useState( ! hasAddress || isEditor );
// Forces editing state if store has errors.
const { hasValidationErrors, invalidProps } = useSelect( ( select ) => {
@@ -60,11 +74,19 @@ const CustomerAddress = ( {
const addressFieldKeys = Object.keys(
defaultAddressFields
) as ( keyof AddressFields )[];
+
const onChangeAddress = useCallback(
( values: Partial< ShippingAddress > ) => {
setShippingAddress( values );
if ( useShippingAsBilling ) {
- setBillingAddress( values );
+ // Sync billing with shipping. Ensure unwanted properties are omitted.
+ const { ...syncBilling } = values;
+
+ if ( ! showPhoneField ) {
+ delete syncBilling.phone;
+ }
+
+ setBillingAddress( syncBilling );
dispatchCheckoutEvent( 'set-billing-address' );
}
dispatchCheckoutEvent( 'set-shipping-address' );
@@ -74,6 +96,7 @@ const CustomerAddress = ( {
setBillingAddress,
setShippingAddress,
useShippingAsBilling,
+ showPhoneField,
]
);
@@ -85,28 +108,56 @@ const CustomerAddress = ( {
onEdit={ () => {
setEditing( true );
} }
- fieldConfig={ addressFieldsConfig }
+ showPhoneField={ showPhoneField }
/>
),
- [ shippingAddress, addressFieldsConfig ]
+ [ shippingAddress, showPhoneField ]
);
const renderAddressFormComponent = useCallback(
() => (
-
+ <>
+
+ { showPhoneField && (
+ {
+ setShippingPhone( value );
+ dispatchCheckoutEvent( 'set-phone-number', {
+ step: 'shipping',
+ } );
+ if ( useShippingAsBilling ) {
+ setBillingPhone( value );
+ dispatchCheckoutEvent( 'set-phone-number', {
+ step: 'billing',
+ } );
+ }
+ } }
+ />
+ ) }
+ >
),
[
addressFieldKeys,
addressFieldsConfig,
+ dispatchCheckoutEvent,
onChangeAddress,
+ requirePhoneField,
+ setBillingPhone,
+ setShippingPhone,
shippingAddress,
+ showPhoneField,
+ useShippingAsBilling,
]
);
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-methods-block/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-methods-block/block.tsx
index 902020cb..34e52ba8 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-methods-block/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-shipping-methods-block/block.tsx
@@ -13,11 +13,9 @@ import {
isAddressComplete,
} from '@woocommerce/base-utils';
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
-import {
- FormattedMonetaryAmount,
- StoreNoticesContainer,
-} from '@woocommerce/blocks-components';
+import { FormattedMonetaryAmount } from '@woocommerce/blocks-components';
import { useEditorContext, noticeContexts } from '@woocommerce/base-context';
+import { StoreNoticesContainer } from '@woocommerce/blocks-checkout';
import { decodeEntities } from '@wordpress/html-entities';
import { getSetting } from '@woocommerce/settings';
import type {
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-totals-block/frontend.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-totals-block/frontend.tsx
index 726204c6..43f65fab 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-totals-block/frontend.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/inner-blocks/checkout-totals-block/frontend.tsx
@@ -3,7 +3,7 @@
*/
import classnames from 'classnames';
import { Sidebar } from '@woocommerce/base-components/sidebar-layout';
-import { StoreNoticesContainer } from '@woocommerce/blocks-components';
+import { StoreNoticesContainer } from '@woocommerce/blocks-checkout';
const FrontendBlock = ( {
children,
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/order-notes/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/order-notes/index.tsx
index cace83c8..e4345e3c 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/order-notes/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/order-notes/index.tsx
@@ -4,7 +4,7 @@
import { __ } from '@wordpress/i18n';
import { useState } from '@wordpress/element';
import { CheckboxControl } from '@woocommerce/blocks-checkout';
-import { Textarea } from '@woocommerce/blocks-components';
+import { Textarea } from '@woocommerce/base-components/textarea';
interface CheckoutOrderNotesProps {
disabled: boolean;
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/phone-number/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/phone-number/index.tsx
index 3924d2ec..372d8ed4 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/phone-number/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/checkout/phone-number/index.tsx
@@ -2,7 +2,7 @@
* External dependencies
*/
import { __ } from '@wordpress/i18n';
-import { ValidatedTextInput } from '@woocommerce/blocks-components';
+import { ValidatedTextInput } from '@woocommerce/blocks-checkout';
/**
* Renders a phone number input.
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/block.json b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/block.json
index 0358e656..29e16310 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/block.json
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/block.json
@@ -4,30 +4,14 @@
"title": "Collection Filters",
"description": "A block that adds product filters to the product collection.",
"category": "woocommerce",
- "keywords": [
- "WooCommerce",
- "Filters"
- ],
+ "keywords": [ "WooCommerce", "Filters" ],
"textdomain": "woocommerce",
"supports": {
"html": false,
"reusable": false
},
- "usesContext": [
- "query"
- ],
- "providesContext": {
- "collectionData": "collectionData"
- },
- "ancestor": [
- "woocommerce/product-collection"
- ],
- "attributes": {
- "collectionData": {
- "type": "object",
- "default": {}
- }
- },
+ "usesContext": [ "query" ],
+ "ancestor": [ "woocommerce/product-collection" ],
"apiVersion": 2,
"$schema": "https://schemas.wp.org/trunk/block.json"
}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/edit.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/edit.tsx
index 63c6eda8..94eb7db0 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/edit.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/edit.tsx
@@ -2,40 +2,11 @@
* External dependencies
*/
import { useBlockProps, useInnerBlocksProps } from '@wordpress/block-editor';
-import { useSelect } from '@wordpress/data';
-import { useEffect } from '@wordpress/element';
-import { useCollection } from '@woocommerce/base-context/hooks';
-/**
- * Internal dependencies
- */
-import { formatQuery, getQueryParams } from './utils';
-import type { EditProps } from './type';
-
-const Edit = ( { clientId, setAttributes, context }: EditProps ) => {
+const Edit = () => {
const blockProps = useBlockProps();
const innerBlockProps = useInnerBlocksProps( blockProps );
- // Get inner blocks by clientId
- const currentBlock = useSelect( ( select ) => {
- return select( 'core/block-editor' ).getBlock( clientId );
- } );
-
- const { results } = useCollection( {
- namespace: '/wc/store/v1',
- resourceName: 'products/collection-data',
- query: {
- ...formatQuery( context.query ),
- ...getQueryParams( currentBlock ),
- },
- } );
-
- useEffect( () => {
- setAttributes( {
- collectionData: results,
- } );
- }, [ results, setAttributes ] );
-
return ;
};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/block.json b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/block.json
index b1af9311..2347678f 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/block.json
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/block.json
@@ -10,22 +10,16 @@
],
"textdomain": "woocommerce",
"apiVersion": 2,
+ "viewScript": [
+ "wc-collection-price-filter-block-frontend"
+ ],
"ancestor": [
- "woocommerce/collection-filters"
+ "woocommerce/product-collection"
],
"supports": {
"interactivity": true
},
- "usesContext": [
- "collectionData"
- ],
"attributes": {
- "queryParam": {
- "type": "object",
- "default": {
- "calculate_price_range": "true"
- }
- },
"showInputFields": {
"type": "boolean",
"default": true
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/components/inspector.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/components/inspector.tsx
deleted file mode 100644
index 34284c69..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/components/inspector.tsx
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * External dependencies
- */
-import { InspectorControls } from '@wordpress/block-editor';
-import { __ } from '@wordpress/i18n';
-import {
- PanelBody,
- ToggleControl,
- // eslint-disable-next-line @wordpress/no-unsafe-wp-apis
- __experimentalToggleGroupControl as ToggleGroupControl,
- // eslint-disable-next-line @wordpress/no-unsafe-wp-apis
- __experimentalToggleGroupControlOption as ToggleGroupControlOption,
-} from '@wordpress/components';
-
-/**
- * Internal dependencies
- */
-import type { FilterComponentProps } from '../types';
-
-export const Inspector = ( {
- attributes,
- setAttributes,
-}: Omit< FilterComponentProps, 'collectionData' > ) => {
- const { showInputFields, inlineInput } = attributes;
-
- return (
-
-
-
- setAttributes( {
- showInputFields: value === 'editable',
- } )
- }
- className="wc-block-price-filter__price-range-toggle"
- >
-
-
-
- { showInputFields && (
-
- setAttributes( {
- inlineInput: ! inlineInput,
- } )
- }
- help={ __(
- 'Show input fields inline with the slider.',
- 'woo-gutenberg-products-block'
- ) }
- />
- ) }
-
-
- );
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/components/price-slider.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/components/price-slider.tsx
deleted file mode 100644
index 3166895e..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/components/price-slider.tsx
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * Internal dependencies
- */
-import { EditProps } from '../types';
-import { getFormattedPrice } from '../utils';
-
-/**
- * We pass the whole props from Edit component to so we're
- * reusing the EditProps type here.
- */
-export const PriceSlider = ( { attributes, context }: EditProps ) => {
- const { showInputFields } = attributes;
- const { minPrice, maxPrice, formattedMinPrice, formattedMaxPrice } =
- getFormattedPrice( context.collectionData );
-
- const onChange = () => null;
-
- const priceMin = showInputFields ? (
-
- ) : (
- { formattedMinPrice }
- );
-
- const priceMax = showInputFields ? (
-
- ) : (
- { formattedMaxPrice }
- );
-
- return (
- <>
-
-
- { priceMin }
- { priceMax }
-
- >
- );
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/edit.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/edit.tsx
index b154f002..8b86fc3f 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/edit.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/edit.tsx
@@ -2,28 +2,38 @@
* External dependencies
*/
import { useBlockProps } from '@wordpress/block-editor';
-import classNames from 'classnames';
+import { useCollectionData } from '@woocommerce/base-context/hooks';
+import { Disabled } from '@wordpress/components';
+import FilterResetButton from '@woocommerce/base-components/filter-reset-button';
/**
* Internal dependencies
*/
+import { getFormattedPrice } from './utils';
import { EditProps } from './types';
-import { PriceSlider } from './components/price-slider';
-import { Inspector } from './components/inspector';
+import { PriceSlider } from './price-slider';
const Edit = ( props: EditProps ) => {
- const { showInputFields, inlineInput } = props.attributes;
-
- const blockProps = useBlockProps( {
- className: classNames( {
- 'inline-input': inlineInput && showInputFields,
- } ),
+ const blockProps = useBlockProps();
+ const { results } = useCollectionData( {
+ queryPrices: true,
+ isEditor: true,
+ queryState: {},
} );
return (
-
-
+
+
+
+ false } />
+
+
);
};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/frontend.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/frontend.ts
index ff9193b4..06dd6d11 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/frontend.ts
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/frontend.ts
@@ -37,17 +37,10 @@ store( {
state: {
filters: {
rangeStyle: ( { state }: StateProps ) => {
- const { minPrice, maxPrice, minRange, maxRange } =
- state.filters;
+ const { minPrice, maxPrice, maxRange } = state.filters;
return [
- `--low: ${
- ( 100 * ( minPrice - minRange ) ) /
- ( maxRange - minRange )
- }%`,
- `--high: ${
- ( 100 * ( maxPrice - minRange ) ) /
- ( maxRange - minRange )
- }%`,
+ `--low: ${ ( 100 * minPrice ) / maxRange }%`,
+ `--high: ${ ( 100 * maxPrice ) / maxRange }%`,
].join( ';' );
},
formattedMinPrice: ( { state }: StateProps ) => {
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/style.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/style.scss
index ebac758c..97af0b94 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/style.scss
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/style.scss
@@ -1,216 +1,5 @@
-@mixin thumb {
- background: $white;
- background-position: 0 0;
- box-sizing: content-box;
- width: 12px;
- height: 12px;
- border: 2px solid $gray-900;
- border-radius: 100%;
- padding: 0;
- margin: 0;
- vertical-align: top;
- cursor: pointer;
- z-index: 20;
- pointer-events: auto;
- transition: transform 0.2s ease-in-out;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
- &:hover {
- @include thumbFocus;
- }
-}
-
-@mixin thumbFocus {
- background: $gray-900;
- border-color: $white;
-}
-
-
-@mixin track {
- cursor: default;
- height: 1px;
- /* Required for Samsung internet based browsers */
- outline: 0;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
-@mixin reset {
- margin: 0;
- /* Use !important to prevent theme input styles from breaking the component.
- Reference https://github.com/woocommerce/woocommerce-gutenberg-products-block/issues/3902
- */
- padding: 0 !important;
- border: 0 !important;
- outline: none;
- background: transparent;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
-}
-
.wp-block-woocommerce-collection-price-filter {
- .range {
- --low: 0%;
- --high: 100%;
- --range-color: currentColor;
- --track-background: linear-gradient(to right, transparent var(--low), var(--range-color) 0, var(--range-color) var(--high), transparent 0) no-repeat 0 100% / 100% 100%;
-
- .rtl & {
- --track-background: linear-gradient(to left, transparent var(--low), var(--range-color) 0, var(--range-color) var(--high), transparent 0) no-repeat 0 100% / 100% 100%;
- }
-
- @include reset;
- background: transparent;
- border-radius: 4px;
- clear: both;
- flex-grow: 1;
- height: 4px;
- margin: 15px 0;
- position: relative;
-
- &::before {
- content: "";
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background: currentColor;
- opacity: 0.2;
- }
-
- .range-bar {
- position: relative;
- height: 4px;
- background: var(--track-background);
- }
-
- input[type="range"] {
- @include reset;
- width: 100%;
- height: 0;
- display: block;
- pointer-events: none;
- outline: none !important;
- position: absolute;
- left: 0;
- top: 0;
-
- &::-webkit-slider-thumb {
- @include thumb;
- margin: -5px 0 0 0;
- }
-
- &::-moz-range-thumb {
- @include thumb;
- }
-
- &::-ms-thumb {
- @include thumb;
- }
-
- &:focus {
- &::-webkit-slider-thumb {
- @include thumbFocus;
- }
- &::-moz-range-thumb {
- @include thumbFocus;
- }
- &::-ms-thumb {
- @include thumbFocus;
- }
- }
-
- &::-webkit-slider-runnable-track {
- @include track;
- }
-
- &::-moz-range-track {
- @include track;
- }
-
- &::-webkit-slider-progress {
- @include reset;
- }
-
- &::-moz-range-progress {
- @include reset;
- }
-
- &::-moz-focus-outer {
- border: 0;
- }
-
- &.min {
- &::-webkit-slider-thumb {
- margin-left: -2px;
- background-position-x: left;
- }
- &::-moz-range-thumb {
- background-position-x: left;
- transform: translate(-2px, 2px);
- }
- &::-ms-thumb {
- background-position-x: left;
- }
- }
-
- &.max {
- &::-webkit-slider-thumb {
- background-position-x: right;
- margin-left: 2px;
- }
- &::-moz-range-thumb {
- background-position-x: right;
- transform: translate(2px, 2px);
- }
- &::-ms-thumb {
- background-position-x: right;
- }
- }
- }
-
- input[type="range" i] {
- color: -internal-light-dark(rgb(16, 16, 16), rgb(255, 255, 255));
- padding: initial;
- }
- }
-
- .text {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin: 16px 0;
- gap: 8px;
-
- input[type="text"] {
- padding: 8px;
- margin: 0;
- width: auto;
- max-width: 60px;
- min-width: 0;
- font-size: 0.875em;
- border-width: 1px;
- border-style: solid;
- border-color: currentColor;
- border-radius: 4px;
- }
- }
-
- &.inline-input {
- display: flex;
- align-items: center;
- gap: 8px;
-
- .text {
- display: contents;
- }
-
- .text .min {
- order: -1;
- }
+ .actions {
+ text-align: right;
}
}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/types.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/types.ts
index 7ccd5023..5e626e91 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/types.ts
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/types.ts
@@ -1,25 +1,17 @@
/**
* External dependencies
*/
-import { BlockEditProps } from '@wordpress/blocks';
import { HTMLElementEvent } from '@woocommerce/types';
+import { BlockEditProps } from '@wordpress/blocks';
-export type BlockAttributes = {
- showInputFields: boolean;
- inlineInput: boolean;
-};
-
-export interface EditProps extends BlockEditProps< BlockAttributes > {
- context: {
- collectionData: unknown[];
- };
-}
-
-export type PriceFilterState = {
+type PriceFilterState = {
minPrice: number;
maxPrice: number;
minRange: number;
maxRange: number;
+ rangeStyle: string;
+ isMinActive: boolean;
+ isMaxActive: boolean;
formattedMinPrice: string;
formattedMaxPrice: string;
};
@@ -30,9 +22,16 @@ export type StateProps = {
};
};
-export interface ActionProps extends StateProps {
+export type ActionProps = StateProps & {
event: HTMLElementEvent< HTMLInputElement >;
-}
+};
+
+export type BlockAttributes = {
+ showInputFields: boolean;
+ inlineInput: boolean;
+};
+
+export type EditProps = BlockEditProps< BlockAttributes >;
export type FilterComponentProps = BlockEditProps< BlockAttributes > & {
collectionData: Partial< PriceFilterState >;
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/utils.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/utils.ts
index dd1b6086..5233e55a 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/utils.ts
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/price-filter/utils.ts
@@ -13,20 +13,18 @@ import {
isString,
} from '@woocommerce/types';
-function formatPriceInt( price: string | number, currency: Currency ) {
+const formatPriceInt = ( price: string | number, currency: Currency ) => {
const priceInt = typeof price === 'number' ? price : parseInt( price, 10 );
return priceInt / 10 ** currency.minorUnit;
-}
+};
-export function getFormattedPrice( results: unknown[] ) {
+export const getFormattedPrice = ( results: unknown[] ) => {
const currencyWithoutDecimal = getCurrency( { minorUnit: 0 } );
if ( ! objectHasProp( results, 'price_range' ) ) {
return {
minPrice: 0,
maxPrice: 0,
- minRange: 0,
- maxRange: 0,
formattedMinPrice: formatPrice( 0, currencyWithoutDecimal ),
formattedMaxPrice: formatPrice( 0, currencyWithoutDecimal ),
};
@@ -50,9 +48,7 @@ export function getFormattedPrice( results: unknown[] ) {
return {
minPrice,
maxPrice,
- minRange: minPrice,
- maxRange: maxPrice,
formattedMinPrice: formatPrice( minPrice, currencyWithoutDecimal ),
formattedMaxPrice: formatPrice( maxPrice, currencyWithoutDecimal ),
};
-}
+};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/block.json b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/block.json
deleted file mode 100644
index 8fd63c5e..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/block.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "name": "woocommerce/collection-stock-filter",
- "version": "1.0.0",
- "title": "Stock Filter",
- "description": "Enable customers to filter the product collection by stock status.",
- "category": "woocommerce",
- "keywords": [ "WooCommerce", "filter", "stock" ],
- "supports": {
- "interactivity": true,
- "html": false,
- "multiple": false
- },
- "attributes": {
- "className": {
- "type": "string",
- "default": ""
- },
- "showCounts": {
- "type": "boolean",
- "default": false
- },
- "displayStyle": {
- "type": "string",
- "default": "list"
- },
- "selectType": {
- "type": "string",
- "default": "multiple"
- },
- "isPreview": {
- "type": "boolean",
- "default": false
- },
- "queryParam": {
- "type": "object",
- "default": {
- "calculate_stock_status_counts": "true"
- }
- }
- },
- "usesContext": [ "collectionData" ],
- "ancestor": [ "woocommerce/collection-filters" ],
- "textdomain": "woocommerce",
- "apiVersion": 2,
- "$schema": "https://schemas.wp.org/trunk/block.json"
-}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/components/inspector.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/components/inspector.tsx
deleted file mode 100644
index 973a125e..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/components/inspector.tsx
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- * External dependencies
- */
-import { InspectorControls } from '@wordpress/block-editor';
-import { __ } from '@wordpress/i18n';
-import {
- PanelBody,
- ToggleControl,
- // eslint-disable-next-line @wordpress/no-unsafe-wp-apis
- __experimentalToggleGroupControl as ToggleGroupControl,
- // eslint-disable-next-line @wordpress/no-unsafe-wp-apis
- __experimentalToggleGroupControlOption as ToggleGroupControlOption,
-} from '@wordpress/components';
-
-/**
- * Internal dependencies
- */
-import { EditProps } from '../types';
-
-export const Inspector = ( { attributes, setAttributes }: EditProps ) => {
- const { showCounts, selectType, displayStyle } = attributes;
-
- return (
-
-
-
- setAttributes( {
- showCounts: ! showCounts,
- } )
- }
- />
-
- setAttributes( {
- selectType: value,
- } )
- }
- className="wc-block-attribute-filter__multiple-toggle"
- >
-
-
-
-
- setAttributes( {
- displayStyle: value,
- } )
- }
- className="wc-block-attribute-filter__display-toggle"
- >
-
-
-
-
-
- );
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/edit.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/edit.tsx
deleted file mode 100644
index de7bfc23..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/edit.tsx
+++ /dev/null
@@ -1,131 +0,0 @@
-/**
- * External dependencies
- */
-import { useMemo } from '@wordpress/element';
-import classnames from 'classnames';
-import { useBlockProps } from '@wordpress/block-editor';
-import { Disabled } from '@wordpress/components';
-import { __ } from '@wordpress/i18n';
-import { Icon, chevronDown } from '@wordpress/icons';
-import { ProductQueryContext as Context } from '@woocommerce/blocks/product-query/types';
-import { CheckboxList } from '@woocommerce/blocks-components';
-import Label from '@woocommerce/base-components/filter-element-label';
-import FormTokenField from '@woocommerce/base-components/form-token-field';
-import type { BlockEditProps } from '@wordpress/blocks';
-import { getSetting } from '@woocommerce/settings';
-import {
- useCollectionData,
- useQueryStateByContext,
-} from '@woocommerce/base-context/hooks';
-
-/**
- * Internal dependencies
- */
-import { BlockProps } from './types';
-import { Inspector } from './components/inspector';
-
-type CollectionData = {
- // attribute_counts: null | unknown;
- // price_range: null | unknown;
- // rating_counts: null | unknown;
- stock_status_counts: StockStatusCount[];
-};
-
-type StockStatusCount = {
- status: string;
- count: number;
-};
-
-const Edit = ( props: BlockEditProps< BlockProps > & { context: Context } ) => {
- const blockProps = useBlockProps( {
- className: classnames(
- 'wc-block-stock-filter',
- props.attributes.className
- ),
- } );
-
- const { showCounts, displayStyle } = props.attributes;
- const stockStatusOptions: Record< string, string > = getSetting(
- 'stockStatusOptions',
- {}
- );
-
- const [ queryState ] = useQueryStateByContext();
-
- const { results: filteredCounts } = useCollectionData( {
- queryStock: true,
- queryState,
- isEditor: true,
- } );
-
- const listOptions = useMemo( () => {
- return Object.entries( stockStatusOptions ).map( ( [ key, value ] ) => {
- const count =
- // @ts-expect-error - there is a fault with useCollectionData types, it can be non-array.
- ( filteredCounts as CollectionData )?.stock_status_counts?.find(
- ( item: StockStatusCount ) => item.status === key
- )?.count;
-
- return {
- value: key,
- label: (
-
- ),
- };
- } );
- }, [ stockStatusOptions, filteredCounts, showCounts ] );
-
- return (
- <>
- {
-
-
-
-
- { displayStyle === 'dropdown' ? (
- <>
- null }
- value={ [] }
- />
-
- >
- ) : (
- null }
- isLoading={ false }
- isDisabled={ true }
- />
- ) }
-
-
-
- }
- >
- );
-};
-
-export default Edit;
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/frontend.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/frontend.ts
deleted file mode 100644
index ec6e2e54..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/frontend.ts
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * External dependencies
- */
-import {
- store as interactivityStore,
- navigate,
-} from '@woocommerce/interactivity';
-import { DropdownContext } from '@woocommerce/interactivity-components/dropdown';
-import { HTMLElementEvent } from '@woocommerce/types';
-
-const getUrl = ( activeFilters: string ) => {
- const url = new URL( window.location.href );
- const { searchParams } = url;
-
- if ( activeFilters !== '' ) {
- searchParams.set( 'filter_stock_status', activeFilters );
- } else {
- searchParams.delete( 'filter_stock_status' );
- }
-
- return url.href;
-};
-
-type StockFilterState = {
- filters: {
- stockStatus: string;
- activeFilters: string;
- showDropdown: boolean;
- };
-};
-
-type ActionProps = {
- state: StockFilterState;
- event: HTMLElementEvent< HTMLInputElement >;
-};
-
-interactivityStore( {
- state: {
- filters: {
- stockStatus: '',
- },
- },
- actions: {
- filters: {
- navigate: ( { context }: { context: DropdownContext } ) => {
- if ( context.woocommerceDropdown.selectedItem.value ) {
- navigate(
- getUrl( context.woocommerceDropdown.selectedItem.value )
- );
- }
- },
- updateProducts: ( { event }: ActionProps ) => {
- // get the active filters from the url:
- const url = new URL( window.location.href );
- const currentFilters =
- url.searchParams.get( 'filter_stock_status' ) || '';
-
- // split out the active filters into an array.
- const filtersArr =
- currentFilters === '' ? [] : currentFilters.split( ',' );
-
- // if checked and not already in activeFilters, add to activeFilters
- // if not checked and in activeFilters, remove from activeFilters.
- if ( event.target.checked ) {
- if ( ! currentFilters.includes( event.target.value ) ) {
- filtersArr.push( event.target.value );
- }
- } else {
- const index = filtersArr.indexOf( event.target.value );
- if ( index > -1 ) {
- filtersArr.splice( index, 1 );
- }
- }
-
- navigate( getUrl( filtersArr.join( ',' ) ) );
- },
- },
- },
-} );
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/index.tsx
deleted file mode 100644
index d87742fa..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/index.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * External dependencies
- */
-import { registerBlockType } from '@wordpress/blocks';
-import { Icon, box } from '@wordpress/icons';
-import { isExperimentalBuild } from '@woocommerce/block-settings';
-
-/**
- * Internal dependencies
- */
-import './style.scss';
-import edit from './edit';
-import metadata from './block.json';
-
-if ( isExperimentalBuild() ) {
- registerBlockType( metadata, {
- icon: {
- src: (
-
- ),
- },
- edit,
- } );
-}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/preview.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/preview.tsx
deleted file mode 100644
index ea773551..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/preview.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * External dependencies
- */
-import Label from '@woocommerce/base-components/filter-element-label';
-
-export const previewOptions = [
- {
- value: 'preview-1',
- name: 'In Stock',
- label: ,
- textLabel: 'In Stock (3)',
- },
- {
- value: 'preview-2',
- name: 'Out of stock',
- label: ,
- textLabel: 'Out of stock (3)',
- },
- {
- value: 'preview-3',
- name: 'On backorder',
- label: ,
- textLabel: 'On backorder (2)',
- },
-];
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/style.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/style.scss
deleted file mode 100644
index 75bbc6a6..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/style.scss
+++ /dev/null
@@ -1,181 +0,0 @@
-@import "../../../shared/styles/style";
-
-// Import styles we need to render the checkbox list and checkbox control.
-@import "../../../../../../packages/components/checkbox-list/style";
-@import "../../../../../../packages/checkout/components/checkbox-control/style";
-
-
-.wp-block-woocommerce-stock-filter {
- h1,
- h2,
- h3,
- h4,
- h5,
- h6 {
- text-transform: inherit;
- }
-}
-
-.wc-block-stock-filter {
- &.is-loading {
- @include placeholder();
- margin-top: $gap;
- box-shadow: none;
- border-radius: 0;
- }
-
- margin-bottom: $gap-large;
-
- .wc-block-stock-filter-list {
- margin: 0;
-
- li {
- label {
- cursor: pointer;
- }
-
- input {
- cursor: pointer;
- display: inline-block;
- }
- }
- }
-
- &.style-dropdown {
- @include includeFormTokenFieldFix();
- position: relative;
- display: flex;
- gap: $gap;
- align-items: flex-start;
-
- .wc-block-components-filter-submit-button {
- height: 36px;
- line-height: 1;
- }
-
- > svg {
- position: absolute;
- right: 8px;
- top: 50%;
- transform: translateY(-50%);
- pointer-events: none;
- }
- }
-
- .wc-blocks-components-form-token-field-wrapper {
- flex-grow: 1;
- max-width: unset;
- width: 0;
- height: max-content;
-
- &:not(.is-loading) {
- border: 1px solid $gray-700 !important;
- border-radius: 4px;
- }
-
- &.is-loading {
- border-radius: em(4px);
- }
-
- .components-form-token-field {
- border-radius: inherit;
- }
- }
-
- .wc-blocks-components-form-token-field-wrapper .components-form-token-field__input-container {
- @include reset-color();
- @include reset-typography();
- border: 0;
- padding: $gap-smaller;
- border-radius: inherit;
-
- .components-form-token-field__input {
- @include font-size(small);
-
- &::placeholder {
- color: $black;
- }
- }
-
- .components-form-token-field__suggestions-list {
- border: 1px solid $gray-700;
- border-radius: 4px;
- margin-top: $gap-smaller;
- max-height: 21em;
-
- .components-form-token-field__suggestion {
- color: $black;
- border: 1px solid $gray-400;
- border-radius: 4px;
- margin: $gap-small;
- padding: $gap-small;
- }
- }
-
- .components-form-token-field__token,
- .components-form-token-field__suggestion {
- @include font-size(small);
- }
- }
-
- .wc-block-components-product-rating {
- margin-bottom: 0;
- }
-}
-
-.wc-blocks-components-form-token-field-wrapper:not(.single-selection) .components-form-token-field__input-container {
- padding: $gap-smallest 30px $gap-smallest $gap-smaller;
-
- .components-form-token-field__token-text {
- background-color: $white;
- border: 1px solid;
- border-right: 0;
- border-radius: 25px 0 0 25px;
- padding: em($gap-smallest) em($gap-smaller) em($gap-smallest) em($gap-small);
- line-height: 22px;
- }
-
- > .components-form-token-field__input {
- margin: em($gap-smallest) 0;
- }
-
- .components-button.components-form-token-field__remove-token {
- background-color: $white;
- border: 1px solid;
- border-left: 0;
- border-radius: 0 25px 25px 0;
- padding: 1px em($gap-smallest) 0 0;
-
- &.has-icon svg {
- background-color: $gray-200;
- border-radius: 25px;
- }
- }
-}
-
-.wc-block-stock-filter__actions {
- align-items: center;
- display: flex;
- gap: $gap;
- justify-content: flex-end;
- margin-top: $gap;
-
- // The specificity here is needed to overwrite the margin-top that is inherited on WC block template pages such as Shop.
- button[type="submit"]:not(.wp-block-search__button).wc-block-components-filter-submit-button {
- margin-left: 0;
- margin-top: 0;
- @include font-size(small);
- }
-
- .wc-block-stock-filter__button {
- margin-top: em($gap-smaller);
- padding: em($gap-smaller) em($gap);
- @include font-size(small);
- }
-}
-
-.editor-styles-wrapper .wc-block-stock-filter .wc-block-stock-filter__button {
- margin-top: em($gap-smaller);
- padding: em($gap-smaller) em($gap);
- @include font-size(small);
-}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/types.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/types.ts
deleted file mode 100644
index 73ec85a5..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/inner-blocks/stock-filter/types.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * External dependencies
- */
-import { BlockEditProps } from '@wordpress/blocks';
-
-export interface BlockProps {
- className?: string;
- showCounts: boolean;
- isPreview?: boolean;
- displayStyle: string;
- selectType: string;
- isEditor: boolean;
-}
-
-export interface DisplayOption {
- value: string;
- name: string;
- label: JSX.Element;
- textLabel: string;
-}
-
-export type Current = {
- slug: string;
- name: string;
-};
-
-export type EditProps = BlockEditProps< BlockProps >;
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/test/utils.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/test/utils.ts
deleted file mode 100644
index 40014085..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/test/utils.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * External dependencies
- */
-import { DEFAULT_QUERY } from '@woocommerce/blocks/product-collection/constants';
-
-/**
- * Internal dependencies
- */
-import { sharedParams, mappedParams, formatQuery } from '../utils';
-
-describe( 'formatQuery: transform Product Collection Block query to Product Collection Data Store API query', () => {
- it( 'shared param is carried over', () => {
- const formattedQuery = formatQuery( DEFAULT_QUERY );
- sharedParams.forEach( ( key ) => {
- expect( formattedQuery ).toHaveProperty(
- key,
- DEFAULT_QUERY[ key ]
- );
- } );
- } );
-
- it( 'mapped param key is transformed', () => {
- const formattedQuery = formatQuery( DEFAULT_QUERY );
- mappedParams.forEach( ( { key, map } ) => {
- expect( formattedQuery ).toHaveProperty(
- map,
- DEFAULT_QUERY[ key ]
- );
- } );
- } );
-
- it( 'taxQuery is transformed', () => {
- const queryWithTax = Object.assign( {}, DEFAULT_QUERY, {
- taxQuery: {
- product_cat: [ 1, 2 ],
- product_tag: [ 3, 4 ],
- custom_taxonomy: [ 5, 6 ],
- },
- } );
- const formattedQuery = formatQuery( queryWithTax );
- expect( formattedQuery ).toHaveProperty( 'cat', [ 1, 2 ] );
- expect( formattedQuery ).toHaveProperty( 'tag', [ 3, 4 ] );
- expect( formattedQuery ).toHaveProperty(
- '_unstable_tax_custom_taxonomy',
- [ 5, 6 ]
- );
- } );
-
- it( 'attribute query is transformed', () => {
- const woocommerceAttributes = [
- { termId: 11, taxonomy: 'pa_size' },
- { termId: 12, taxonomy: 'pa_color' },
- { termId: 13, taxonomy: 'pa_custom' },
- { termId: 14, taxonomy: 'pa_custom' },
- ];
- const queryWithAttributes = Object.assign( {}, DEFAULT_QUERY, {
- woocommerceAttributes,
- } );
- const formattedQuery = formatQuery( queryWithAttributes );
-
- expect( formattedQuery ).toHaveProperty( 'attributes' );
-
- woocommerceAttributes.forEach( ( { termId, taxonomy } ) => {
- expect( formattedQuery.attributes ).toEqual(
- expect.arrayContaining( [
- { term_id: termId, attribute: taxonomy },
- ] )
- );
- } );
- } );
-} );
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/type.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/type.ts
deleted file mode 100644
index b42147a6..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/type.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * External dependencies
- */
-import type { BlockEditProps } from '@wordpress/blocks';
-import type { ProductCollectionQuery } from '@woocommerce/blocks/product-collection/types';
-
-type BlockAttributes = {
- collectionData: unknown[];
-};
-
-export interface EditProps extends BlockEditProps< BlockAttributes > {
- context: {
- query: ProductCollectionQuery;
- };
-}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/utils.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/utils.ts
deleted file mode 100644
index bda1d156..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/collection-filters/utils.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * External dependencies
- */
-import type { BlockInstance } from '@wordpress/blocks';
-import type { ProductCollectionQuery } from '@woocommerce/blocks/product-collection/types';
-
-function getInnerBlocksParams( block: BlockInstance, initial = {} ) {
- return block.innerBlocks.reduce(
- ( acc, innerBlock ): Record< string, unknown > => {
- acc = { ...acc, ...innerBlock.attributes?.queryParam };
- return getInnerBlocksParams( innerBlock, acc );
- },
- initial
- );
-}
-
-export function getQueryParams( block: BlockInstance | null ) {
- if ( ! block ) return {};
-
- return getInnerBlocksParams( block );
-}
-
-export const sharedParams: Array< keyof ProductCollectionQuery > = [
- 'exclude',
- 'offset',
- 'search',
-];
-
-/**
- * There is an open dicussion around the shape of this object. Check it out on GH.
- *
- * @see {@link https://github.com/woocommerce/woocommerce-blocks/pull/11218#discussion_r1365171167 | #11218 review comment}.
- */
-export const mappedParams: {
- key: keyof ProductCollectionQuery;
- map: string;
-}[] = [
- { key: 'woocommerceStockStatus', map: 'stock_status' },
- { key: 'woocommerceOnSale', map: 'on_sale' },
- { key: 'woocommerceHandPickedProducts', map: 'include' },
-];
-
-function mapTaxonomy( taxonomy: string ) {
- const map = {
- product_tag: 'tag',
- product_cat: 'cat',
- };
-
- return map[ taxonomy as keyof typeof map ] || `_unstable_tax_${ taxonomy }`;
-}
-
-function getTaxQueryMap( taxQuery: ProductCollectionQuery[ 'taxQuery' ] ) {
- return Object.entries( taxQuery ).map( ( [ taxonomy, terms ] ) => ( {
- [ mapTaxonomy( taxonomy ) ]: terms,
- } ) );
-}
-
-function getAttributeQuery(
- woocommerceAttributes: ProductCollectionQuery[ 'woocommerceAttributes' ]
-) {
- if ( ! woocommerceAttributes ) {
- return {};
- }
- return woocommerceAttributes.map( ( attribute ) => ( {
- attribute: attribute.taxonomy,
- term_id: attribute.termId,
- } ) );
-}
-
-export function formatQuery( query: ProductCollectionQuery ) {
- if ( ! query ) {
- return {};
- }
-
- return Object.assign(
- {
- attributes: getAttributeQuery( query.woocommerceAttributes ),
- catalog_visibility: 'visible',
- },
- ...sharedParams.map(
- ( key ) => key in query && { [ key ]: query[ key ] }
- ),
- ...mappedParams.map(
- ( param ) =>
- param.key in query && { [ param.map ]: query[ param.key ] }
- ),
- ...getTaxQueryMap( query.taxQuery )
- );
-}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/mini-cart/mini-cart-contents/inner-blocks/filled-mini-cart-contents-block/frontend.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/mini-cart/mini-cart-contents/inner-blocks/filled-mini-cart-contents-block/frontend.tsx
index 3662e9b3..9fb39048 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/mini-cart/mini-cart-contents/inner-blocks/filled-mini-cart-contents-block/frontend.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/mini-cart/mini-cart-contents/inner-blocks/filled-mini-cart-contents-block/frontend.tsx
@@ -1,7 +1,7 @@
/**
* External dependencies
*/
-import { StoreNoticesContainer } from '@woocommerce/blocks-components';
+import { StoreNoticesContainer } from '@woocommerce/blocks-checkout';
import { useStoreCart } from '@woocommerce/base-context/hooks';
type FilledMiniCartContentsBlockProps = {
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/mini-cart/mini-cart-contents/inner-blocks/mini-cart-footer-block/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/mini-cart/mini-cart-contents/inner-blocks/mini-cart-footer-block/block.tsx
index 66fd65f0..49e1564e 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/mini-cart/mini-cart-contents/inner-blocks/mini-cart-footer-block/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/mini-cart/mini-cart-contents/inner-blocks/mini-cart-footer-block/block.tsx
@@ -2,7 +2,7 @@
* External dependencies
*/
import { __ } from '@wordpress/i18n';
-import { TotalsItem } from '@woocommerce/blocks-components';
+import { TotalsItem } from '@woocommerce/blocks-checkout';
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
import {
usePaymentMethods,
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/mini-cart/mini-cart-contents/inner-blocks/mini-cart-footer-block/edit.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/mini-cart/mini-cart-contents/inner-blocks/mini-cart-footer-block/edit.tsx
index c3f10140..e3b9d737 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/mini-cart/mini-cart-contents/inner-blocks/mini-cart-footer-block/edit.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/mini-cart/mini-cart-contents/inner-blocks/mini-cart-footer-block/edit.tsx
@@ -2,7 +2,7 @@
* External dependencies
*/
import { __ } from '@wordpress/i18n';
-import { TotalsItem } from '@woocommerce/blocks-components';
+import { TotalsItem } from '@woocommerce/blocks-checkout';
import { useBlockProps, InnerBlocks } from '@wordpress/block-editor';
import { getCurrencyFromPriceResponse } from '@woocommerce/price-format';
import {
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/constants.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/constants.ts
index 3e65598b..96ecb190 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/constants.ts
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/constants.ts
@@ -40,17 +40,16 @@ export const DEFAULT_QUERY: ProductCollectionQuery = {
postType: 'product',
order: 'asc',
orderBy: 'title',
+ author: '',
search: '',
exclude: [],
inherit: null,
taxQuery: {},
isProductCollectionBlock: true,
- featured: false,
woocommerceOnSale: false,
woocommerceStockStatus: getDefaultStockStatuses(),
woocommerceAttributes: [],
woocommerceHandPickedProducts: [],
- timeFrame: undefined,
};
export const DEFAULT_ATTRIBUTES: Partial< ProductCollectionAttributes > = {
@@ -88,6 +87,4 @@ export const DEFAULT_FILTERS: Partial< ProductCollectionQuery > = {
woocommerceAttributes: [],
taxQuery: DEFAULT_QUERY.taxQuery,
woocommerceHandPickedProducts: [],
- featured: DEFAULT_QUERY.featured,
- timeFrame: undefined,
};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/edit.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/edit.tsx
index 9da8bbc6..dfc53b1e 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/edit.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/edit.tsx
@@ -75,7 +75,7 @@ export const INNER_BLOCKS_TEMPLATE: InnerBlockTemplate[] = [
},
},
],
- [ 'woocommerce/product-collection-no-results' ],
+ [ 'core/query-no-results' ],
];
const Edit = ( props: BlockEditProps< ProductCollectionAttributes > ) => {
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inner-blocks/no-results/block.json b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inner-blocks/no-results/block.json
deleted file mode 100644
index 68104d84..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inner-blocks/no-results/block.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "$schema": "https://schemas.wp.org/trunk/block.json",
- "apiVersion": 3,
- "name": "woocommerce/product-collection-no-results",
- "title": "No results",
- "version": "1.0.0",
- "category": "woocommerce",
- "description": "The contents of this block will display when there are no products found.",
- "textdomain": "woocommerce",
- "keywords": [ "Product Collection" ],
- "usesContext": [ "queryId", "query" ],
- "ancestor": [ "woocommerce/product-collection" ],
- "supports": {
- "align": true,
- "reusable": false,
- "html": false,
- "color": {
- "gradients": true,
- "link": true
- },
- "typography": {
- "fontSize": true,
- "lineHeight": true,
- "__experimentalFontFamily": true,
- "__experimentalFontWeight": true,
- "__experimentalFontStyle": true,
- "__experimentalTextTransform": true,
- "__experimentalTextDecoration": true,
- "__experimentalLetterSpacing": true,
- "__experimentalDefaultControls": {
- "fontSize": true
- }
- }
- }
-}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inner-blocks/no-results/edit.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inner-blocks/no-results/edit.tsx
deleted file mode 100644
index ee0533f5..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inner-blocks/no-results/edit.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * External dependencies
- */
-import { useBlockProps, InnerBlocks } from '@wordpress/block-editor';
-import { Template } from '@wordpress/blocks';
-import { __ } from '@wordpress/i18n';
-
-const TEMPLATE: Template[] = [
- [
- 'core/group',
- {
- layout: {
- type: 'flex',
- orientation: 'vertical',
- justifyContent: 'center',
- flexWrap: 'wrap',
- },
- },
- [
- [
- 'core/paragraph',
- {
- textAlign: 'center',
- fontSize: 'medium',
- content: `${ __(
- 'No results found',
- 'woo-gutenberg-products-block'
- ) } `,
- },
- ],
- [
- 'core/paragraph',
- {
- content: `${ __(
- 'You can try',
- 'woo-gutenberg-products-block'
- ) } ${ __(
- 'clearing any filters',
- 'woo-gutenberg-products-block'
- ) } ${ __(
- 'or head to our',
- 'woo-gutenberg-products-block'
- ) } ${ __(
- "store's home",
- 'woo-gutenberg-products-block'
- ) } `,
- },
- ],
- ],
- ],
-];
-
-const Edit = () => {
- const blockProps = useBlockProps( {
- className: 'wc-block-product-collection-no-results',
- } );
-
- return (
-
-
-
- );
-};
-
-export default Edit;
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inner-blocks/no-results/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inner-blocks/no-results/index.tsx
deleted file mode 100644
index 22da03fb..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inner-blocks/no-results/index.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * External dependencies
- */
-import { registerBlockType } from '@wordpress/blocks';
-import { loop as loopIcon } from '@wordpress/icons';
-
-/**
- * Internal dependencies
- */
-import metadata from './block.json';
-import edit from './edit';
-import save from './save';
-
-registerBlockType( metadata, {
- icon: loopIcon,
- supports: {
- ...metadata.supports,
- },
- edit,
- save,
-} );
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inner-blocks/no-results/save.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inner-blocks/no-results/save.tsx
deleted file mode 100644
index 3064a7b9..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inner-blocks/no-results/save.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * External dependencies
- */
-import { InnerBlocks } from '@wordpress/block-editor';
-
-export default function NoResultsSave() {
- // @ts-expect-error: `InnerBlocks.Content` is a component that is typed in WordPress core
- return ;
-}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inspector-controls/created-control.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inspector-controls/created-control.tsx
deleted file mode 100644
index 2c485da7..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inspector-controls/created-control.tsx
+++ /dev/null
@@ -1,114 +0,0 @@
-/**
- * External dependencies
- */
-import { __, _x } from '@wordpress/i18n';
-import {
- Flex,
- FlexItem,
- RadioControl,
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore - Ignoring because `__experimentalToggleGroupControl` is not yet in the type definitions.
- // eslint-disable-next-line @wordpress/no-unsafe-wp-apis
- __experimentalToggleGroupControl as ToggleGroupControl,
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- // @ts-ignore - Ignoring because `__experimentalToggleGroupControlOption` is not yet in the type definitions.
- // eslint-disable-next-line @wordpress/no-unsafe-wp-apis
- __experimentalToggleGroupControlOption as ToggleGroupControlOption,
- // @ts-expect-error Using experimental features
- // eslint-disable-next-line @wordpress/no-unsafe-wp-apis
- __experimentalToolsPanelItem as ToolsPanelItem,
-} from '@wordpress/components';
-
-/**
- * Internal dependencies
- */
-import { ETimeFrameOperator, QueryControlProps } from '../types';
-
-const CreatedControl = ( props: QueryControlProps ) => {
- const { query, setQueryAttribute } = props;
- const { timeFrame } = query;
-
- return (
- timeFrame?.operator && timeFrame?.value }
- onDeselect={ () => {
- setQueryAttribute( {
- timeFrame: undefined,
- } );
- } }
- >
-
-
- {
- setQueryAttribute( {
- timeFrame: {
- ...timeFrame,
- operator: value,
- },
- } );
- } }
- value={ timeFrame?.operator || ETimeFrameOperator.IN }
- >
-
-
-
-
-
- {
- setQueryAttribute( {
- timeFrame: {
- operator: ETimeFrameOperator.IN,
- ...timeFrame,
- value,
- },
- } );
- } }
- options={ [
- {
- label: 'last 24 hours',
- value: '-1 day',
- },
- {
- label: 'last 7 days',
- value: '-7 days',
- },
- {
- label: 'last 30 days',
- value: '-30 days',
- },
- {
- label: 'last 3 months',
- value: '-3 months',
- },
- ] }
- selected={ timeFrame?.value }
- />
-
-
-
- );
-};
-
-export default CreatedControl;
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inspector-controls/featured-products-control.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inspector-controls/featured-products-control.tsx
deleted file mode 100644
index dec43da0..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inspector-controls/featured-products-control.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * External dependencies
- */
-import { __ } from '@wordpress/i18n';
-import {
- BaseControl,
- ToggleControl,
- // @ts-expect-error Using experimental features
- // eslint-disable-next-line @wordpress/no-unsafe-wp-apis
- __experimentalToolsPanelItem as ToolsPanelItem,
-} from '@wordpress/components';
-
-/**
- * Internal dependencies
- */
-import { QueryControlProps } from '../types';
-
-const FeaturedProductsControl = ( props: QueryControlProps ) => {
- const { query, setQueryAttribute } = props;
-
- return (
- query.featured === true }
- onDeselect={ () => {
- setQueryAttribute( {
- featured: false,
- } );
- } }
- >
-
- {
- setQueryAttribute( {
- featured,
- } );
- } }
- />
-
-
- );
-};
-
-export default FeaturedProductsControl;
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inspector-controls/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inspector-controls/index.tsx
index 63116f6c..a68c6a17 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inspector-controls/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/inspector-controls/index.tsx
@@ -38,9 +38,8 @@ import KeywordControl from './keyword-control';
import AttributesControl from './attributes-control';
import TaxonomyControls from './taxonomy-controls';
import HandPickedProductsControl from './hand-picked-products-control';
+import AuthorControl from './author-control';
import LayoutOptionsControl from './layout-options-control';
-import FeaturedProductsControl from './featured-products-control';
-import CreatedControl from './created-control';
const ProductCollectionInspectorControls = (
props: BlockEditProps< ProductCollectionAttributes >
@@ -100,8 +99,7 @@ const ProductCollectionInspectorControls = (
-
-
+
) : null }
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/types.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/types.ts
index e231525d..7d20d723 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/types.ts
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-collection/types.ts
@@ -28,17 +28,8 @@ export interface ProductCollectionDisplayLayout {
shrinkColumns?: boolean;
}
-export enum ETimeFrameOperator {
- IN = 'in',
- NOT_IN = 'not-in',
-}
-
-export interface TimeFrame {
- operator?: ETimeFrameOperator;
- value?: string;
-}
-
export interface ProductCollectionQuery {
+ author: string;
exclude: string[];
inherit: boolean | null;
offset: number;
@@ -49,11 +40,6 @@ export interface ProductCollectionQuery {
postType: string;
search: string;
taxQuery: Record< string, number[] >;
- /**
- * If true, show only featured products.
- */
- featured: boolean;
- timeFrame: TimeFrame | undefined;
woocommerceOnSale: boolean;
/**
* Filter products by their stock status.
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/block-settings/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/block-settings/index.tsx
index d396fc2d..cea7839f 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/block-settings/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/block-settings/index.tsx
@@ -69,7 +69,6 @@ export const ProductGalleryBlockSettings = ( {
cropImages: ! cropImages,
} )
}
- className="wc-block-product-gallery__crop-images"
/>
void;
+ handleClick: ( context: Context ) => void;
};
handlePreviousImageButtonClick: {
( store: Store ): void;
@@ -41,17 +36,12 @@ interface Actions {
handleNextImageButtonClick: {
( store: Store ): void;
};
- dialog: {
- handleCloseButtonClick: {
- ( store: Store ): void;
- };
- };
};
}
interface Store {
state: State;
- context: ProductGalleryInteractivityApiContext;
+ context: Context;
selectors: ProductGallerySelectors;
actions: Actions;
ref?: HTMLElement;
@@ -73,41 +63,6 @@ interactivityApiStore( {
state: {},
effects: {
woocommerce: {
- watchForChangesOnAddToCartForm: ( store: Store ) => {
- const variableProductCartForm = document.querySelector(
- `form[data-product_id="${ store.context.woocommerce.productId }"]`
- );
-
- if ( ! variableProductCartForm ) {
- return;
- }
-
- const observer = new MutationObserver( function ( mutations ) {
- for ( const mutation of mutations ) {
- const mutationTarget = mutation.target as HTMLElement;
- const currentImageAttribute =
- mutationTarget.getAttribute( 'current-image' );
- if (
- mutation.type === 'attributes' &&
- currentImageAttribute &&
- store.context.woocommerce.visibleImagesIds.includes(
- currentImageAttribute
- )
- ) {
- store.context.woocommerce.selectedImage =
- currentImageAttribute;
- }
- }
- } );
-
- observer.observe( variableProductCartForm, {
- attributes: true,
- } );
-
- return () => {
- observer.disconnect();
- };
- },
keyboardAccess: ( store: Store ) => {
const { context, actions } = store;
let allowNavigation = true;
@@ -129,9 +84,7 @@ interactivityApiStore( {
// Check if the esc key is pressed.
if ( event.keyCode === Keys.ESC ) {
- actions.woocommerce.dialog.handleCloseButtonClick(
- store
- );
+ context.woocommerce.isDialogOpen = false;
}
// Check if left arrow key is pressed.
@@ -183,10 +136,6 @@ interactivityApiStore( {
dialog: {
handleCloseButtonClick: ( { context }: Store ) => {
context.woocommerce.isDialogOpen = false;
-
- // Reset the main image.
- context.woocommerce.selectedImage =
- context.woocommerce.firstMainImageId;
},
},
handleSelectImage: ( { context }: Store ) => {
@@ -194,39 +143,30 @@ interactivityApiStore( {
},
handleNextImageButtonClick: ( store: Store ) => {
const { context } = store;
- const imagesIds =
- context.woocommerce[
- context.woocommerce.isDialogOpen
- ? 'dialogVisibleImagesIds'
- : 'visibleImagesIds'
- ];
- const selectedImageIdIndex = imagesIds.indexOf(
- context.woocommerce.selectedImage
- );
+ const selectedImageIdIndex =
+ context.woocommerce.visibleImagesIds.indexOf(
+ context.woocommerce.selectedImage
+ );
const nextImageIndex = Math.min(
selectedImageIdIndex + 1,
- imagesIds.length - 1
+ context.woocommerce.visibleImagesIds.length - 1
);
- context.woocommerce.selectedImage = imagesIds[ nextImageIndex ];
+ context.woocommerce.selectedImage =
+ context.woocommerce.visibleImagesIds[ nextImageIndex ];
},
handlePreviousImageButtonClick: ( store: Store ) => {
const { context } = store;
- const imagesIds =
- context.woocommerce[
- context.woocommerce.isDialogOpen
- ? 'dialogVisibleImagesIds'
- : 'visibleImagesIds'
- ];
- const selectedImageIdIndex = imagesIds.indexOf(
- context.woocommerce.selectedImage
- );
+ const selectedImageIdIndex =
+ context.woocommerce.visibleImagesIds.indexOf(
+ context.woocommerce.selectedImage
+ );
const previousImageIndex = Math.max(
selectedImageIdIndex - 1,
0
);
context.woocommerce.selectedImage =
- imagesIds[ previousImageIndex ];
+ context.woocommerce.visibleImagesIds[ previousImageIndex ];
},
},
},
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/index.tsx
index 468f2e59..edee1129 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/index.tsx
@@ -7,8 +7,10 @@ import { registerBlockType } from '@wordpress/blocks';
/**
* Internal dependencies
*/
+import { Edit } from './edit';
+import { Save } from './save';
import metadata from './block.json';
-import { ProductGalleryBlockSettings } from './settings';
+import icon from './icon';
import './style.scss';
import './inner-blocks/product-gallery-large-image-next-previous';
import './inner-blocks/product-gallery-pager';
@@ -16,5 +18,9 @@ import './inner-blocks/product-gallery-thumbnails';
if ( isExperimentalBuild() ) {
// @ts-expect-error: `metadata` currently does not have a type definition in WordPress core.
- registerBlockType( metadata, ProductGalleryBlockSettings );
+ registerBlockType( metadata, {
+ icon,
+ edit: Edit,
+ save: Save,
+ } );
}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-large-image-next-previous/block.json b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-large-image-next-previous/block.json
index 911c3f31..fc7ee662 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-large-image-next-previous/block.json
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-large-image-next-previous/block.json
@@ -4,7 +4,7 @@
"name": "woocommerce/product-gallery-large-image-next-previous",
"version": "1.0.0",
"title": "Next/Previous Buttons",
- "description": "Display next and previous buttons.",
+ "description": "Dispaly next and previous buttons.",
"category": "woocommerce",
"keywords": [ "WooCommerce" ],
"usesContext": [ "nextPreviousButtonsPosition", "productGalleryClientId", "postId"],
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-large-image/block.json b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-large-image/block.json
index 56e5870d..93c925a7 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-large-image/block.json
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-large-image/block.json
@@ -7,7 +7,7 @@
"description": "Display the Large Image of a product.",
"category": "woocommerce",
"keywords": [ "WooCommerce" ],
- "usesContext": [ "nextPreviousButtonsPosition", "postId", "hoverZoom", "fullScreenOnClick", "cropImages"],
+ "usesContext": [ "nextPreviousButtonsPosition", "postId", "hoverZoom", "fullScreenOnClick"],
"supports": {
"interactivity": true
},
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-large-image/frontend.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-large-image/frontend.tsx
index 74a27420..c1d0b914 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-large-image/frontend.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-large-image/frontend.tsx
@@ -6,10 +6,7 @@ import { store as interactivityStore } from '@woocommerce/interactivity';
/**
* Internal dependencies
*/
-import {
- ProductGalleryInteractivityApiContext,
- ProductGallerySelectors,
-} from '../../frontend';
+import { ProductGallerySelectors } from '../../frontend';
type Context = {
woocommerce: {
@@ -23,7 +20,7 @@ type Context = {
| undefined;
isDialogOpen: boolean;
};
-} & ProductGalleryInteractivityApiContext;
+};
type Store = {
context: Context;
@@ -52,13 +49,6 @@ const productGalleryLargeImageSelectors = {
let isDialogStatusChanged = false;
-const resetImageZoom = ( context: Context ) => {
- if ( context.woocommerce.styles ) {
- context.woocommerce.styles.transform = `scale(1.0)`;
- context.woocommerce.styles[ 'transform-origin' ] = '';
- }
-};
-
interactivityStore(
// @ts-expect-error: Store function isn't typed.
{
@@ -72,23 +62,13 @@ interactivityStore(
event: MouseEvent;
context: Context;
} ) => {
- const target = event.target as HTMLElement;
- const isMouseEventFromLargeImage =
- target.classList.contains(
- 'wc-block-woocommerce-product-gallery-large-image__image'
- );
- if ( ! isMouseEventFromLargeImage ) {
- resetImageZoom( context );
- return;
- }
+ if ( ( event.target as HTMLElement ).tagName === 'IMG' ) {
+ const element = event.target as HTMLElement;
+ const percentageX =
+ ( event.offsetX / element.clientWidth ) * 100;
+ const percentageY =
+ ( event.offsetY / element.clientHeight ) * 100;
- const element = event.target as HTMLElement;
- const percentageX =
- ( event.offsetX / element.clientWidth ) * 100;
- const percentageY =
- ( event.offsetY / element.clientHeight ) * 100;
-
- if ( context.woocommerce.styles ) {
context.woocommerce.styles.transform = `scale(1.3)`;
context.woocommerce.styles[
@@ -97,7 +77,8 @@ interactivityStore(
}
},
handleMouseLeave: ( { context }: { context: Context } ) => {
- resetImageZoom( context );
+ context.woocommerce.styles.transform = `scale(1.0)`;
+ context.woocommerce.styles[ 'transform-origin' ] = '';
},
handleClick: ( {
context,
@@ -106,11 +87,7 @@ interactivityStore(
context: Context;
event: Event;
} ) => {
- if (
- ( event.target as HTMLElement ).classList.contains(
- 'wc-block-product-gallery-dialog-on-click'
- )
- ) {
+ if ( ( event.target as HTMLElement ).tagName === 'IMG' ) {
context.woocommerce.isDialogOpen = true;
}
},
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-pager/editor.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-pager/editor.scss
index 75e0372c..2bd2ea63 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-pager/editor.scss
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-pager/editor.scss
@@ -3,8 +3,6 @@
justify-content: center;
list-style: none;
gap: $gap-small;
- margin-top: 0;
- margin-bottom: 0;
padding: 0;
}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-thumbnails/block.json b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-thumbnails/block.json
index f9f02496..26791d28 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-thumbnails/block.json
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/inner-blocks/product-gallery-thumbnails/block.json
@@ -7,7 +7,7 @@
"description": "Display the Thumbnails of a product.",
"category": "woocommerce",
"keywords": [ "WooCommerce" ],
- "usesContext": [ "postId", "thumbnailsPosition", "thumbnailsNumberOfThumbnails", "productGalleryClientId", "mode" ],
+ "usesContext": [ "postId", "thumbnailsPosition", "thumbnailsNumberOfThumbnails", "productGalleryClientId" ],
"textdomain": "woocommerce",
"ancestor": [ "woocommerce/product-gallery" ],
"supports": {
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/settings.ts b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/settings.ts
deleted file mode 100644
index 55f81423..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/settings.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * Internal dependencies
- */
-import { Edit } from './edit';
-import { Save } from './save';
-import icon from './icon';
-
-export const ProductGalleryBlockSettings = {
- icon,
- edit: Edit,
- save: Save,
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/style.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/style.scss
index f73e0d73..3b485211 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/style.scss
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-gallery/style.scss
@@ -216,8 +216,6 @@ $outside-image-max-width: calc(100% - (2 * $outside-image-offset));
justify-content: center;
list-style: none;
gap: $gap-small;
- margin-top: 0;
- margin-bottom: 0;
padding: 0;
}
@@ -247,35 +245,6 @@ $outside-image-max-width: calc(100% - (2 * $outside-image-offset));
width: 100px;
height: 100px;
margin: 5px;
- position: relative;
}
-
- .wc-block-product-gallery-thumbnails__thumbnail__overlay {
- cursor: pointer;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- position: absolute;
- background-color: rgba(0, 0, 0, 0.4);
- top: 0;
- width: 100%;
- height: 100%;
-
- .wc-block-product-gallery-thumbnails__thumbnail__remaining-thumbnails-count {
- @include font-size(large);
- font-weight: 700;
- }
-
- .wc-block-product-gallery-thumbnails__thumbnail__view-all {
- @include font-size(smaller);
- text-decoration: underline;
- }
-
- .wc-block-product-gallery-thumbnails__thumbnail__remaining-thumbnails-count,
- .wc-block-product-gallery-thumbnails__thumbnail__view-all {
- color: #fff;
- }
- }
}
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-new/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-new/index.tsx
index 54d8b352..e1fd0218 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-new/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-new/index.tsx
@@ -3,8 +3,7 @@
*/
import { __ } from '@wordpress/i18n';
import { createBlock, registerBlockType } from '@wordpress/blocks';
-import { Icon } from '@wordpress/icons';
-import { sparkles } from '@woocommerce/icons';
+import { Icon, sparkles } from '@wordpress/icons';
/**
* Internal dependencies
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-query/variations/related-products.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-query/variations/related-products.tsx
index ac7803ea..f36fd8bc 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-query/variations/related-products.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-query/variations/related-products.tsx
@@ -57,7 +57,6 @@ export const INNER_BLOCKS_TEMPLATE: InnerBlockTemplate[] = [
{
level: 2,
content: __( 'Related products', 'woo-gutenberg-products-block' ),
- style: { spacing: { margin: { top: '1rem', bottom: '1rem' } } },
},
],
[
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-template/edit.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-template/edit.tsx
index 15572127..7bcff3bd 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-template/edit.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/product-template/edit.tsx
@@ -77,6 +77,7 @@ const ProductTemplateEdit = ( {
offset = 0,
order,
orderBy,
+ author,
search,
exclude,
inherit,
@@ -154,6 +155,9 @@ const ProductTemplateEdit = ( {
if ( perPage ) {
query.per_page = perPage;
}
+ if ( author ) {
+ query.author = author;
+ }
if ( search ) {
query.search = search;
}
@@ -182,6 +186,7 @@ const ProductTemplateEdit = ( {
order,
orderBy,
clientId,
+ author,
search,
postType,
exclude,
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/products/all-products/block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/products/all-products/block.tsx
index 8d606d1e..03c52863 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/products/all-products/block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/products/all-products/block.tsx
@@ -5,7 +5,7 @@ import { Component } from '@wordpress/element';
import { ProductListContainer } from '@woocommerce/base-components/product-list';
import { InnerBlockLayoutContextProvider } from '@woocommerce/shared-context';
import { gridBlockPreview } from '@woocommerce/resource-previews';
-import { StoreNoticesContainer } from '@woocommerce/blocks-components';
+import { StoreNoticesContainer } from '@woocommerce/blocks-checkout';
import { Attributes as ProductListAttributes } from 'assets/js/base/components/product-list/types';
interface BlockProps {
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/reviews/frontend-block.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/reviews/frontend-block.tsx
index 956a9048..b091c3e9 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/reviews/frontend-block.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/reviews/frontend-block.tsx
@@ -49,6 +49,7 @@ const FrontendBlock = ( {
) }
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/reviews/test/frontend-block.test.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/reviews/test/frontend-block.test.tsx
index 68ef8112..cc84ffcb 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/reviews/test/frontend-block.test.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/blocks/reviews/test/frontend-block.test.tsx
@@ -7,9 +7,7 @@ jest.mock( '../utils', () => ( {
jest.mock( '@woocommerce/settings', () => ( {
...jest.requireActual( '@woocommerce/settings' ),
- getSetting: jest
- .fn()
- .mockImplementation( ( setting, defaultValue ) => defaultValue ),
+ getSetting: jest.fn().mockReturnValue( true ),
} ) );
/**
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/error-placeholder/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/error-placeholder/index.tsx
index e284fa39..ff363b93 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/error-placeholder/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/error-placeholder/index.tsx
@@ -40,11 +40,11 @@ export interface ErrorPlaceholderProps {
/**
* Callback to retry an action.
*/
- onRetry?: ( () => void ) | undefined;
+ onRetry?: () => void;
}
const ErrorPlaceholder = ( {
- className = '',
+ className,
error,
isLoading = false,
onRetry,
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/error-placeholder/stories/error-message.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/error-placeholder/stories/error-message.stories.tsx
deleted file mode 100644
index 94cc9368..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/error-placeholder/stories/error-message.stories.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * External dependencies
- */
-import type { Story, Meta } from '@storybook/react';
-
-/**
- * Internal dependencies
- */
-import ErrorMessage, { ErrorMessageProps } from '../error-message';
-
-export default {
- title: 'Editor Components/Errors/Base Error Atom',
- component: ErrorMessage,
-} as Meta< ErrorMessageProps >;
-
-const Template: Story< ErrorMessageProps > = ( args ) => (
-
-);
-
-export const BaseErrorAtom = Template.bind( {} );
-BaseErrorAtom.args = {
- error: {
- message:
- 'A very generic and unhelpful error. Please try again later. Or contact support. Or not.',
- type: 'general',
- },
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/error-placeholder/stories/error-placeholder.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/error-placeholder/stories/error-placeholder.stories.tsx
deleted file mode 100644
index bd133168..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/error-placeholder/stories/error-placeholder.stories.tsx
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * External dependencies
- */
-import type { StoryFn, Meta } from '@storybook/react';
-import { useArgs } from '@storybook/client-api';
-import { INTERACTION_TIMEOUT } from '@woocommerce/storybook-controls';
-
-/**
- * Internal dependencies
- */
-import ErrorPlaceholder, { ErrorPlaceholderProps } from '..';
-
-export default {
- title: 'Editor Components/Errors/Error Placeholder',
- component: ErrorPlaceholder,
-} as Meta< ErrorPlaceholderProps >;
-
-const Template: StoryFn< ErrorPlaceholderProps > = ( args ) => {
- const [ { isLoading }, setArgs ] = useArgs();
-
- const onRetry = args.onRetry
- ? () => {
- setArgs( { isLoading: true } );
-
- setTimeout(
- () => setArgs( { isLoading: false } ),
- INTERACTION_TIMEOUT
- );
- }
- : undefined;
-
- return (
-
- );
-};
-
-export const Default = Template.bind( {} );
-Default.args = {
- error: {
- message:
- 'A very generic and unhelpful error. Please try again later. Or contact support. Or not.',
- type: 'general',
- },
-};
-
-export const APIError = Template.bind( {} );
-APIError.args = {
- error: {
- message: 'Server refuses to comply. It is a teapot.',
- type: 'api',
- },
-};
-
-export const UnknownError = Template.bind( {} );
-UnknownError.args = {
- error: {
- message: '',
- type: 'general',
- },
-};
-
-export const NoRetry: StoryFn< ErrorPlaceholderProps > = ( args ) => {
- return ;
-};
-NoRetry.args = {
- error: {
- message: '',
- type: 'general',
- },
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/external-link-card/stories/index.stories.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/external-link-card/stories/index.stories.tsx
deleted file mode 100644
index 9bc59a27..00000000
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/external-link-card/stories/index.stories.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * External dependencies
- */
-import type { Story, Meta } from '@storybook/react';
-
-/**
- * Internal dependencies
- */
-import ExternalLinkCard, { ExternalLinkCardProps } from '..';
-
-export default {
- title: 'Editor Components/ExternalLinkCard',
- component: ExternalLinkCard,
-} as Meta< ExternalLinkCardProps >;
-
-const Template: Story< ExternalLinkCardProps > = ( args ) => (
-
-);
-
-export const Default = Template.bind( {} );
-Default.args = {
- description:
- 'This is the description of the link, perhaps a bit of a longer paragraph or a summary of a blog post, or whatever could give more context',
- href: 'https://woocommerce.com/posts/seven-tips-to-extend-holiday-sales-momentum/',
- title: 'Seven tips to extend holiday sales momentum',
-};
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/feedback-prompt/index.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/feedback-prompt/index.tsx
index c9400e25..44487def 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/feedback-prompt/index.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/feedback-prompt/index.tsx
@@ -12,7 +12,7 @@ import './style.scss';
interface FeedbackPromptProps {
text: string;
title?: string;
- url: string;
+ url?: string;
}
/**
* Component to render a Feedback prompt in the sidebar.
@@ -25,7 +25,7 @@ interface FeedbackPromptProps {
const FeedbackPrompt = ( {
text,
title = __( 'Feedback?', 'woo-gutenberg-products-block' ),
- url,
+ url = 'https://ideas.woocommerce.com/forums/133476-woocommerce?category_id=384565',
}: FeedbackPromptProps ) => {
// By returning false we ensure that this component is not entered into the InspectorControls
// (which is a slot fill), children array on first render, on the second render when the state
@@ -71,7 +71,17 @@ export const CartCheckoutFeedbackPrompt = () => (
'We are currently working on improving our cart and checkout blocks to provide merchants with the tools and customization options they need.',
'woo-gutenberg-products-block'
) }
- url="https://github.com/woocommerce/woocommerce/discussions/new?category=checkout-flow&labels=type%3A+product%20feedback"
+ url="https://github.com/woocommerce/woocommerce-gutenberg-products-block/issues/new?template=--cart-checkout-feedback.md"
+ />
+);
+
+export const LegacyFeedbackPrompt = () => (
+
);
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/feedback-prompt/style.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/feedback-prompt/style.scss
index edaada7f..9a5a65e8 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/feedback-prompt/style.scss
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/feedback-prompt/style.scss
@@ -1,7 +1,7 @@
.wc-block-feedback-prompt {
background-color: #f7f7f7;
border-top: 1px solid $gray-200;
- margin: 0;
+ margin: 0 -16px 0;
padding: $gap-large;
text-align: center;
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/incompatible-extension-notice/modal.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/incompatible-extension-notice/modal.tsx
index 22a2e2f3..d8c528cd 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/incompatible-extension-notice/modal.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/incompatible-extension-notice/modal.tsx
@@ -12,7 +12,7 @@ export const ModalContent = ( {
return (
{ __(
- 'If you continue, the cart block will be replaced with the classic experience powered by shortcodes. This means that you may lose customizations that you made to the cart block.',
+ 'If you continue, the cart block will be replaced with the classic experience powered by shortcode. This means that you may lose customizations and updates you did to the cart block.',
'woo-gutenberg-products-block'
) }
@@ -23,7 +23,7 @@ export const ModalContent = ( {
<>
{ __(
- 'If you continue, the checkout block will be replaced with the classic experience powered by shortcodes. This means that you may lose:',
+ 'If you continue, the checkout block be replaced with the classic experience powered by shortcode. This means that you may lose:',
'woo-gutenberg-products-block'
) }
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/search-list-control/search-list-control.tsx b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/search-list-control/search-list-control.tsx
index eedd4836..3cb0c64d 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/search-list-control/search-list-control.tsx
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/search-list-control/search-list-control.tsx
@@ -163,7 +163,7 @@ const ListItemsContainer = < T extends object = object >( {
return (
-
+
{ search
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/search-list-control/style.scss b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/search-list-control/style.scss
index 95185d8a..d8f089f7 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/search-list-control/style.scss
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/search-list-control/style.scss
@@ -52,12 +52,6 @@
}
}
}
-
- .woocommerce-search-list__list {
- // Here to increase specificity compared to default editor styles
- // wrapping `ul`s and `ol`s.
- padding-left: 0;
- }
}
.woocommerce-search-list__selected {
@@ -104,7 +98,6 @@
border: 1px solid $gray-200;
margin: 0;
padding: 0;
- list-style: none;
max-height: 17em;
overflow-x: hidden;
overflow-y: auto;
diff --git a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/search-list-control/test/__snapshots__/index.js.snap b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/search-list-control/test/__snapshots__/index.js.snap
index bbe4da44..b853b6a6 100644
--- a/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/search-list-control/test/__snapshots__/index.js.snap
+++ b/wp/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/editor-components/search-list-control/test/__snapshots__/index.js.snap
@@ -47,13 +47,13 @@ Object {
class="woocommerce-search-list__search"
>
Search for items
@@ -77,10 +77,10 @@ Object {
tabindex="0"
>